{"id":80,"date":"2024-08-16T13:10:26","date_gmt":"2024-08-16T13:10:26","guid":{"rendered":"http:\/\/traducciones.data.org.uy\/?page_id=80"},"modified":"2025-05-05T01:26:12","modified_gmt":"2025-05-05T04:26:12","slug":"buscador","status":"publish","type":"page","link":"https:\/\/traduccionuruguay.uy\/en\/buscador\/","title":{"rendered":"Search engine"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow\" style=\"min-height:100%;padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\n<div class=\"wp-block-cover\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30);min-height:50px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-custom-logo-turquesa-background-color has-background-dim-100 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-base-color has-text-color has-link-color has-medium-font-size wp-elements-1 wp-block-paragraph\"><a href=\"\/buscador\/\" data-type=\"page\" data-id=\"80\">Explor\u00e1 <strong>1424 registros<\/strong> de traducciones de <strong>29 lenguas<\/strong> y <strong>629 autoras y autores<\/strong><\/a><\/p>\n<\/div><\/div>\n\n\n\n<details class=\"wp-block-details is-style-default has-custom-logo-naranja-color has-text-color has-link-color has-small-font-size wp-elements-2 is-layout-flow wp-block-details-is-layout-flow\" style=\"font-style:normal;font-weight:600\"><summary>Sugerencias de uso (click para ver m\u00e1s)<\/summary>\n<p class=\"wp-block-paragraph\">Este buscador de traducciones tiene como base un set de datos creado a partir del cat\u00e1logo de la Biblioteca Nacional y complementado con datos de la Biblioteca del Poder Legislativo y otras fuentes. El set de datos completo, en versi\u00f3n CSV, <a href=\"https:\/\/redata.anii.org.uy\/dataset.xhtml?persistentId=doi:10.60895\/redata\/FU3URD&amp;version=1.0\" target=\"_blank\" rel=\"noreferrer noopener\">est\u00e1 disponible en Redata<\/a> (Repositorio de datos abiertos de investigaci\u00f3n de Uruguay).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar a buscar, pon\u00e9 una palabra clave en los campos de b\u00fasqueda espec\u00edficos (autor, ciudad, etc.) o en la barra de b\u00fasqueda general, que releva todos los campos. Los filtros permiten acotar la b\u00fasqueda, por ejemplo por per\u00edodo o lengua fuente. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Record\u00e1 borrar los filtros cuando quieras comenzar una nueva b\u00fasqueda.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para buscar por autor\/a, se puede hacer por el apellido o el seud\u00f3nimo en el caso de que lo haya. Los resultados contemplan las dos variantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En las fichas corregimos informaci\u00f3n err\u00f3nea y sumamos datos importantes usando fuentes de otras bibliotecas cuando fue posible. Esos cambios respecto de los datos originales se consignan en el campo \u00abObservaciones\u00bb.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La informaci\u00f3n que encuentres se puede descargar o imprimir. Es de acceso y uso libre, bajo licencia CC-BY-NC.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si nos cit\u00e1s, sugerimos el siguiente formato:&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e1zaro Igoa, R.; Hornos-Weisz, L.; Torres Rippa, C.; Campanella Casas, L. (2025) <em>150 a\u00f1os de traducci\u00f3n literaria en imprentas y editoriales del Uruguay (1871-2021)<\/em>. <a href=\"https:\/\/traduccionuruguay.uy\/\">https:\/\/traduccionuruguay.uy\/<\/a>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Gracias por usar el buscador de traducciones! Si encontr\u00e1s alguna inconsistencia o error, por favor avisanos al correo <a href=\"mailto:historiatraduccionliterariauy@gmail.com\">historiatraduccionliterariauy@gmail.com<\/a><\/p>\n<\/details>\n\n\n<div id=\"loading\"><img decoding=\"async\" src=\"\/images\/loading.svg\" alt=\"Cargando\"\/><\/div>\n<div id=\"filters\">\n  <div id=\"filters-right\" class=\"mobile-hide\">\n    <button onclick=\"toggleRightFilters()\" class=\"close-right\">\n      <svg viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"><\/path><\/svg>\n    <\/button>\n    <div id=\"filters-right-1\"><\/div>\n    <div id=\"filters-right-2\"><\/div>\n  <\/div>\n  <div id=\"filters-left\">\n    <div class=\"wrapper input-wrapper\" id=\"search-res-wrapper\">\n      <img decoding=\"async\" class=\"icon\" src=\"\/images\/magnifying-glass.svg\"\/>\n      <input type=\"text\" id=\"search-res\" name=\"search-res\" placeholder=\"Buscar por autor\/a, traductor\/a, t\u00edtulo, ISBN, VIAF u otros t\u00e9rminos\" onkeyup=\"handleText('search_res');\"><\/input>\n      <button aria-label=\"Filtros\" onclick=\"toggleRightFilters()\" class=\"wrapper button small\" alt=\"Filtros\">\n        <i class=\"fas fa-filter\"><\/i>\n      <\/button>\n    <\/div>\n    <div class=\"wrapper\">\n      <div id=\"results\" class=\"button\"><\/div>\n      <button class=\"print\" onclick=\"exportSearch()\" style=\"display: flex\"><img decoding=\"async\" src=\"\/images\/file-export-solid.svg\"><\/img><span>Descargar resultados<\/span><\/button>\n      <button aria-label=\"Borrar filtros\" onclick=\"clearFilters(true)\" class=\"wrapper main-button large\">\n        <i class=\"fas fa-filter-circle-xmark\"><\/i>\n        <span>Borrar filtros<\/span>\n      <\/button>\n    <\/div>\n    <div id=\"filter-tags\"><\/div>\n  <\/div>\n<\/div>\n<div id=\"mapa-section\">\n  <div id=\"list\"><\/div>\n  <div id=\"no-results\" style=\"display:none;\">\n    <i class=\"fa fa-circle-exclamation\"><\/i>\n    <div>\n      <b>No hay resultados para los filtros seleccionados<\/b>\n      <span>Modificar selecci\u00f3n o <a onclick=\"clearFilters(true)\">borrar filtros<\/a><\/span>\n    <\/div>\n    <i onclick=\"document.getElementById('no-results').style.display = 'none';\" class=\"fa fa-close\"><\/i>\n  <\/div>\n<\/div>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\" integrity=\"sha512-dfX5uYVXzyU8+KHqj8bjo7UkOdg18PaOtpa48djpNbZHwExddghZ+ZmzWT06R5v6NSk3ZUfsH6FNEDepLx9hPQ==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n<script>\n  \n\/\/Obtain data from the json file\n\/*let xhr = new XMLHttpRequest();\nlet url = '\/markers.json';\nxhr.open(\"GET\", url, true);\nconsole.log(\"GETTING DATA XML\");\nxhr.onreadystatechange = function () {\n  console.log(\"GETTING DATA READY \", this.readyState);\n  if (this.readyState == 4 && this.status == 200) {\n    console.log(this.responseText)\n        \/\/this.renderElements(this.data, true)\n        var data = JSON.parse(this.responseText);\n        console.log(\"GETTING DATA: \", data);\n        \/\/LIST\n        clearFilters(true);\n    }\n}*\/\nvar clearFlag = false;\nvar currentList = [];\nvar autocomplete = {};\nvar loading = document.getElementById(\"loading\");\nvar noresults = document.getElementById(\"no-results\");\nvar pseudos = {}\nconst langs = {\n  'akk': 'Akkadiano',\n  'ara': '\u00c1rabe',\n  'ben': 'Bengali',\n  'cat': 'Catal\u00e1n',\n  'chi': 'Chino',\n  'cze': 'Checo',\n  'dut': 'Neerland\u00e9s',\n  'eng': 'Ingl\u00e9s',\n  'fre': 'Franc\u00e9s',\n  'ger': 'Alem\u00e1n',\n  'glg': 'Gallego',\n  'gre': 'Griego',\n  'heb': 'Hebreo',\n  'hun': 'H\u00fangaro',\n  'ice': 'Island\u00e9s',\n  'ita': 'Italiano',\n  'jpn': 'Japon\u00e9s',\n  'kor': 'Koreano',\n  'lat': 'Lat\u00edn',\n  'nor': 'Noruego',\n  'per': 'Farsi',\n  'pol': 'Polaco',\n  'por': 'Portugu\u00e9s',\n  'que': 'Quechua',\n  'rus': 'Ruso',\n  'san': 'S\u00e1nscrito',\n  'swe': 'Sueco',\n  'tur': 'Turco',\n  'yid': 'Yiddish'\n}\nconst filters = {\n  'year': {\"type\": 'inbetween', \"default_value\": {}, \"field\": 'A\u00f1o de publicaci\u00f3n', \"dom\": {'year_max': \"Hasta\", \"year_min\": \"Per\u00edodo desde\"}, \"icon\": \"calendar\", \"filter\": \"inbetween\", 'parent_dom': \"filters-right-2\"},\n  'city': {\"type\": 'autocomplete', \"default_value\": [], \"field\":['Ciudad de publicaci\u00f3n'], \"dom\": 'city', \"values\": [], \"label\": 'Ciudad', \"icon\": \"location\", \"filter\": \"include\", 'parent_dom': \"filters-right-1\"},\n  'ente': {\"type\": 'autocomplete', \"default_value\": [], \"field\":['Ente editor'], \"dom\": 'ente', \"values\": [], \"label\": 'Ente editor', \"icon\": \"building\", \"filter\": \"include\", 'parent_dom': \"filters-right-1\"},\n  'lengua': {\"type\": 'autocomplete', \"default_value\": [], \"field\":['Lengua'], \"dom\": 'lengua', \"values\": [], \"label\": 'Lengua fuente', \"icon\": \"lengua\", \"filter\": \"include\", 'parent_dom': \"filters-right-1\"},\n  'trans': {\"type\": 'autocomplete', \"default_value\": [], \"field\": [\"Traductor\/a\"], \"dom\": \"trans\", \"values\": [], \"label\": \"Traductor\/a\", \"icon\": \"person\", \"filter\": \"include\", 'parent_dom': \"filters-right-1\"},\n  'titulo': {\"type\": 'autocomplete', \"default_value\": [], \"field\": ['titulo'], \"dom\": 'titulo', \"values\": [], \"label\": \"T\u00edtulo\", \"icon\": \"title\", \"filter\": \"include\", 'parent_dom': \"filters-right-1\"},\n  'aut': {\"type\": 'autocomplete', \"default_value\": [], \"field\":['aut_principal','pseudo'], \"dom\": 'aut', \"values\": [], \"label\": \"Autor\/a\", \"icon\": \"book-person\", \"filter\": \"parent_include\", \"placeholder\": \"Autor\/a\", 'parent_dom': \"filters-right-1\"},\n  'search_res': {\"type\": 'text', \"default_value\": '', \"field\":[], \"dom\": 'search-res', \"label\": \"Buscar por autor\/a, traductor\/a, t\u00edtulo, ISBN, VIAF u otros t\u00e9rminos\", \"icon\": \"magnifying-glass\", \"filter\": \"search\", 'parent_dom': \"filters-left\" },\n}\nfunction filters_type(ftypes) {\n  \/\/console.log(\"FILTER TYPES\", ftypes);\n  \n  var result = [];\n  for (var key in filters) {\n    \/\/ skip loop if the property is from prototype\n    if (!filters.hasOwnProperty(key)) continue;\n    if ( ftypes.includes(filters[key]['type']) ) {\n      filters[key].key = key\n      result.push(filters[key]);\n    }\n  }\n  return result;\n}\nvar active_filters = {};\n\nlet url = new URL(window.location.protocol+\"\/\/\"+window.location.hostname+(window.location.port.length !== 0 ? \":\"+window.location.port : '')+\"\/traducciones.csv\");\nfetch(url.href, {\n  method: \"GET\",\n})\n.then(r => r.text())\n.then(html => {\n\n  let data_obj = Papa.parse(html,{\n\tdelimiter: \",\",\n  \/\/ Auto-detect newline    \n  header: true,\n  \/\/ First row is headers    \n  dynamicTyping: true,\n  \/\/ Automatically convert numbers and booleans    \n  skipEmptyLines: true,\n  })\n  window.data = data_obj.data\n  window.total = window.data.length;\n  \n  \/\/clear filters, render elements and fill filter lists\n  clearFilters(false, true);\n  \/\/Add filter options\n  filters_type(['list']).forEach( filter_list => {\n    var serv_options_dom = document.getElementById(filter_list.dom);\n    for (var i = 0; i < filter_list.values.length; i++){\n      serv_options_dom.innerHTML += '<li class=\"option '+filter_list.dom+'-option\" id=\"'+filter_list.dom+'-option-'+i+'\" onclick=\"toggleOption(\\''+filter_list.key+'\\', '+i+', this)\">'+filter_list.values[i]+'<\/li>';\n    }\n  });\n  clearFlag = true\n  filters_type(['autocomplete']).forEach( filter_list => {\n    \/\/var serv_options_dom = document.getElementById(filter_list.dom);\n    let vals = []\n    for (var i = 0; i < filter_list.values.length; i++){\n\n      let elems = filter_list.values[i].toString().split(\"|\")\n      elems.forEach(ele => {\n        if ( !vals.find(o => o.text === ele) && ele != \"No hay datos\" ) {\n          vals.push({'text': ele})\n        }\n        \n      });\n      \/\/serv_options_dom.innerHTML += '<option value=\"'+filter_list.values[i]+'\" id=\"'+filter_list.dom+'-option-'+i+'\" >'+filter_list.values[i]+'<\/option>';\n    }\n    vals.sort((a, b) => a['text'].localeCompare(b['text'], 'es', {'sensitivity': 'accent'}))\n    vals.push({text: \"No hay datos\"})\n    let slim = new SlimSelect({\n      select: '#'+filter_list.dom,   \/\/ this.element is the <select> tag\n      showSearch: true,       \/\/ show search field\n      settings: {\n        placeholderText: filter_list.label,\n        searchPlaceholder: filter_list.placeholder,\n        allowDeselect: true   \/\/ allow deselecting (x) option\n      },\n      data: vals\n    })\n\n    autocomplete[filter_list.dom] = slim\n  })\n  clearFlag = false\n})\n\/\/window.elements = data;\n\/\/FUNCTIONS\nfunction toggleRightFilters() {\n  document.getElementById('filters-right').classList.toggle('mobile-hide');\n}\n\/\/Clear filters and load initial\nfunction clearFilters(flag, initial = false) {\n  if (flag) {\n    clearFlag = true;\n  }\n  loading.style.display = \"block\"\n  let i = 0\n  for (var key in filters) {\n    filters_dom = document.getElementById(filters[key].parent_dom)\n    \/\/ skip loop if the property is from prototype\n    if (!filters.hasOwnProperty(key)) continue;\n    \/\/if initial render type\n    switch (filters[key].type) {\n      case 'list':\n        if (initial) {\n          let buttonList = '<button aria-expanded=\"false\" class=\"wrapper select-wrapper\" onclick=\"toggleSearchSelect(\\''+filters[key].dom+'\\', this)\" aria-label=\"'+filters[key].label+'\">'\n          buttonList += '<img decoding=\"async\" class=\"icon\" src=\"\/images\/'+filters[key].icon+'.svg\"\/><div id=\"tit-trigger\" class=\"select-filter\">'+filters[key].label+'<\/div>'\n          buttonList += '<ul id=\"'+filters[key].dom+'\" class=\"select-options\"><\/ul><i class=\"fas fa-chevron-down right\"><\/i><\/button>'\n          filters_dom.innerHTML = buttonList + filters_dom.innerHTML\n        }\n        else {\n          let options = document.querySelector('#'+filters[key].dom+'-option')\n          if (options) {\n            for ( const option of options ) {\n              option.classList.remove('active');\n            }\n          }\n        }\n        break;\n      case 'autocomplete':\n        if (initial) {\n          let slist = '<div class=\"wrapper\"><img decoding=\"async\" class=\"icon\" src=\"\/images\/'+filters[key].icon+'.svg\"\/><\/i><select onchange=\"handleAuto(\\''+key+'\\');\" id=\"'+filters[key].dom+'\" multiple><\/select><\/div>'\n          filters_dom.innerHTML = slist + filters_dom.innerHTML\n        }\n        else {\n          for (let slim of Object.values(autocomplete)) {\n            slim.setSelected()\n          }\n        }\n        break;\n      case 'boolean':\n        if (initial) {\n          let checkbox = '<label><input type=\"checkbox\" onchange=\"handleCheckbox(this, \\''+key+'\\');\" id=\"'+filters[key].dom+'\" value=\"false\"> '+filters[key].label+'<\/label>'\n          filters_dom.innerHTML = checkbox + filters_dom.innerHTML\n        }\n        else {\n          document.getElementById(filters[key].field).checked = false;\n        }\n        break;\n      case 'inbetween':\n        Object.keys(filters[key].dom).forEach(dom => {\n          if (initial) {\n              let input_field = '<div class=\"wrapper input-wrapper\" id=\"'+dom+'-wrapper\"><img decoding=\"async\" class=\"icon\" src=\"\/images\/'+filters[key].icon+'.svg\"\/>'\n              input_field += '<input type=\"text\" class=\"date\" id=\"'+dom+'\" name=\"'+dom+'\" placeholder=\"'+filters[key].dom[dom]+'\" onchange=\"handleInBetween(\\''+key+'\\',  \\''+dom+'\\');\"><\/input><\/div>'\n              filters_dom.innerHTML = input_field + filters_dom.innerHTML\n          }\n          else {\n            document.getElementById(dom).value = '';\n          }\n        });\n        break;\n      default:\n        document.getElementById(filters[key].dom).value = filters[key].default_value;\n        break;\n    }\n    active_filters[key] = filters[key].default_value\n  }\n  renderElements(window.data, initial)\n  clearFlag = false;\n}\n\n\/\/Display options\nfunction toggleSearchSelect(elem_id, button) {\n  \/\/clear all \n  document.querySelectorAll('.select-wrapper ul:not(#'+elem_id+')').forEach( ul => {\n    ul.classList.remove('active')\n  });\n  document.getElementById(elem_id).classList.toggle('active')\n  button.getAttribute('aria-expanded') == \"true\" ? button.setAttribute('aria-expanded', false) : button.setAttribute('aria-expanded', true)\n}\n\n\/\/Add listeners\nfunction handleAuto(key){\n  \/\/console.log('CLEARRRRRRR', clearFlag);\n  if ( !clearFlag ) {\n    active_filters[key] = autocomplete[key].getSelected()\n    reloadFilters();\n  }\n}\nfunction handleCheckbox(checkbox, key){\n  if ( !clearFlag ) {\n    if( checkbox.checked == true ) {\n      active_filters[key] = true;\n    }\n    else {\n      active_filters[key] = false;\n    }\n      reloadFilters();\n  }\n}\nfunction handleText(key){\n  if ( !clearFlag ) {\n    active_filters[key] = document.getElementById(filters[key].dom).value;\n    reloadFilters();\n  }\n}\nfunction handleInBetween(key, field){\n  if ( !clearFlag ) {\n    active_filters[key][field] = document.getElementById(field).value;\n    reloadFilters();\n  }\n}\n\/\/Filter by option\nfunction toggleOption(key, id) {\n  var index = active_filters[key].indexOf(id);\n  if ( index !== -1 ) {\n    active_filters[key].splice(index, 1);\n    jQuery('#'+filters[key].dom+'-option-'+id).removeClass(\"active\");\n  }\n  else {\n    active_filters[key].push(id);\n    jQuery('#'+filters[key].dom+'-option-'+id).addClass(\"active\");\n  }\n  \/\/document.getElementById(filters[key].dom).classList.remove('active')\n  if ( !clearFlag ) {\n    reloadFilters();\n  }\n}\n\/\/ show description\nfunction toggleDesc(id) {\n  var srv = jQuery('#srv-'+id);\n  if ( srv.hasClass('active') ) {\n    jQuery('.srv').removeClass('active');\n    document.querySelector('#srv-'+id+' .expand').ariaExpanded = false\n    document.querySelector('#srv-'+id+' .expand span').textContent = 'Ver m\u00e1s'\n  }\n  else {\n    jQuery('.srv').removeClass('active');\n    var position = jQuery('#srv-'+id).offset().top - jQuery('#srv-0').offset().top;\n    jQuery(\"#list\").animate({\n      scrollTop: position\n    }, 500, 'linear' );\n    \/\/document.getElementById('srv-'+id).scrollIntoView({behavior: 'smooth'});\n    srv.addClass(\"active\");\n    document.querySelector('#srv-'+id+' .expand').ariaExpanded = true\n    document.querySelector('#srv-'+id+' .expand span').textContent = 'Cerrar'\n  }\n}\n\n\/\/FILTER\nfunction reloadFilters() {\n  result = [];\n  loading.style.display = \"block\"\n  window.data.forEach((element, i) => {\n    var include = true;\n    for ( var key in filters ) {\n      switch (filters[key].filter) {\n        case 'attribute':\n          if ( filters[key].type == 'list' || filters[key].type == 'autocomplete' ) {\n            if ( active_filters[key].length > 0 ) {\n              let match = false;\n              active_filters[key].\n              map( x => filters[key].values[x]).\n              forEach((item) => {\n                if ( element[item] == \"TRUE\") {\n                  match = true;\n                  return;\n                }\n              });\n              if ( !match ) {\n                include = false;\n                return;\n              }\n            }\n          }\n          else {\n            if ( active_filters[key] ) {\n              if ( element[filters[key].field] != \"TRUE\" ) {\n                include = false;\n                return;\n              }\n            }\n          }\n          break;\n        case 'include':\n          if ( active_filters[key].length > 0 ) {\n            include = false\n            let loc_include\n            let vals = []\n            filters[key].field.forEach(field => {\n              if ( element[field] != null ) {\n                vals = vals.concat(element[field].toString().split('|'))\n              }\n            });\n            vals.forEach(ele => {\n              ele.trim()\n              if ( active_filters[key].includes(ele) ) {\n                include = true;\n              }\n            });\n            if ( !include ) return\n          }\n          break;\n        case 'parent_include':\n          if ( active_filters[key].length > 0 ) {\n            include = false\n            let base = filters[key].field[0]\n            let parent = filters[key].field[1]\n            active_filters[key].forEach(filter => {\n              let pseudo = pseudos[filter]\n              \/\/Check both columns\n              if ( element[base] != null && element[base].toString().split('|').includes(filter) ) {\n                include = true\n              }\n              if ( element[parent] != null ) {\n                let vals = element[parent].toString().split('|')\n                pseudo.split('|').forEach( pseudo_el => {\n                  if ( vals.includes(pseudo_el) ) {\n                    console.log(pseudo_el)\n                    include = true\n                  }\n                })\n              }\n            })\n            if ( !include ) return\n          }\n          break;\n        case 'between':\n          if ( active_filters[key] >= 0 ) {\n            if ( element[filters[key].field[0]] > active_filters[key] || active_filters[key] > element[filters[key].field[1]] ) {\n              include = false;\n              return;\n            }\n          }\n          break;\n        case 'inbetween':\n          let doms = Object.keys(filters[key].dom)\n          if ( active_filters[key][doms[0]] > 0 && active_filters[key][doms[0]] != '' ) {\n            if ( element[filters[key].field] > active_filters[key][doms[0]] ) {\n              include = false;\n              return;\n            }\n          }\n          if ( active_filters[key][doms[1]] > 0 && active_filters[key][doms[1]] != '' ) {\n            if ( active_filters[key][doms[1]] > element[filters[key].field] ) {\n              include = false;\n              return;\n            }\n          }\n          break;\n        case 'search':\n          if ( active_filters[key] != '' ) {\n            include = false;\n            let str = Object.values(element).join(\" \").toLowerCase()\n            active_filters[key].toLowerCase().split(' ').forEach(word => {\n              if ( str.search(word) !== -1 ) {\n                include = true;\n                return;\n              }\n            });\n          }\n        default:\n          break;\n      }\n    }\n    if (include) {\n      \/\/reload lists\n      result.push(element);\n    }\n  });\n render_filter_tags();\n renderElements(result, true);\n \/\/setAutocompleteLists();\n}\n\nfunction setAutocompleteLists() {\n  clearFlag = true;\n  for (let field of Object.keys(autocomplete)) {\n    let filist = []\n    console.log(\"AUTOCOMPLETE DE \", field);\n    filters[field].values.forEach(x => {\n      filist.push({'text': x, 'value': x })\n    });\n    console.log(\"FILIST DE \", filist);\n    autocomplete[field].setData(filist)\n  }\n  clearFlag = false;\n}\nfunction render_filter_tags() {\n  document.getElementById(\"filter-tags\").innerHTML = ''\n  for (let key in active_filters) {\n    switch (filters[key].filter) {\n      case 'attribute':\n      case 'include':\n      case 'parent_include':\n        if ( filters[key].type != 'autocomplete' ) {\n          if ( filters[key].type == 'list' ) {\n            if ( active_filters[key].length > 0 ) {\n              for(let afPos in active_filters[key]) {\n                let pos = active_filters[key][afPos]\n                add_search_tag(filters[key].values[pos], key, pos)\n              }\n            }\n          }\n          else {\n            if ( active_filters[key] ) {\n              add_search_tag(filters[key].label, key, -1)\n            }\n          }\n        }\n        break;\n      case 'between':\n        if ( active_filters[key] >= 0 ) {\n          add_search_tag(filters[key].label+': '+active_filters[key], key, -1)\n        }\n        break;\n      case 'inbetween':\n        let doms = Object.keys(filters[key].dom)\n        if ( active_filters[key][doms[0]] > 0 ) {\n          add_search_tag(filters[key].dom[doms[0]]+': '+active_filters[key][doms[0]], key, doms[0])\n        }\n        if (active_filters[key][doms[1]] > 0 ) {\n          add_search_tag(filters[key].dom[doms[1]]+': '+active_filters[key][doms[1]], key, doms[1])\n        }\n        break;\n      case 'search':\n        if ( active_filters[key] != '' ) {\n          add_search_tag('B\u00fasqueda: '+active_filters[key], key, -1)\n        }\n      default:\n        break;\n    }\n  }\n}\nfunction add_search_tag(label, key, pos) {\n  let tag = '<div class=\"tag\"><span>'+label+'<\/span><button onclick=\"remove_search_tag(\\''+key+'\\', \\''+pos+'\\')\">X<\/button>' \n  document.getElementById(\"filter-tags\").innerHTML += tag\n}\n\nfunction remove_search_tag(key, pos) {\n  if ( isNaN(pos) ) {\n    active_filters[key][pos] = ''\/\/filters[key].default_value\n  }\n  else {\n    if ( pos != -1 ) {\n      let arr_pos = active_filters[key].indexOf(parseInt(pos))\n      if ( arr_pos !== -1 ) {\n        active_filters[key].splice(arr_pos, 1)\n      }\n    }\n    else {\n      active_filters[key] = filters[key].default_value\n    }\n  }\n  switch (filters[key].filter) {\n    case 'attribute':\n    case 'include':\n    case 'parent_include':\n      if ( filters[key].type == 'list' ) {\n        document.getElementById(filters[key].dom+'-option-'+pos).classList.remove(\"active\");\n      }\n      else {\n        if ( filters[key].type == 'autocomplete' )\n        document.getElementById(filters[key].dom).value = filters[key].default_value\n      }\n      break;\n    case 'inbetween':\n      document.getElementById(pos).value = ''\/\/filters[key].default_value\n      break;\n    default:\n      document.getElementById(filters[key].dom).value = filters[key].default_value\n      break\n  }\n  reloadFilters()\n}\n\/\/Single element html\nfunction elementListHtml(element, i) {\n  const style = get_style(element.poblacion);\n  let html = '<li onclick=\"toggleDesc('+ i +')\" class=\"srv\" id=\"srv-'+ i +'\">\\\n      <div class=\"srv-header\">\\\n        <div class=\"title\">\\\n          <div class=\"title-head\">';\n  element['aut_principal'].split('|').forEach(autor => {\n    html += '<h3>'+autor+'<a onclick=\"filter(\\'aut\\', \\''+autor+'\\')\"><i class=\"fas fa-magnifying-glass\"><\/i><\/a><\/h3>'\n  });      \n  html += '<h2>'+element.titulo+'<\/h2><\/div>\\\n          <div class=\"title-details\"><div class=\"viaf-wraper\">';\n  if ( element['viaf'] == 'No hay datos' ) {\n    html += '<a class=\"tag\" href=\"#\"><i class=\"fas fa-external-link\"><\/i>VIAF: No hay datos<\/a>'\n  }\n  else {\n    element['viaf'].split('|').forEach(viaf => {\n      html += '<a class=\"tag\" href=\"'+viaf+'\" target=\"_blank\"><i class=\"fas fa-external-link\"><\/i>VIAF:'+viaf.split('\/').slice(-1)[0]+'<\/a>'\n    });\n  }\n  html += '<\/div>'\n  if ( element['ISBN'] != 'No hay datos' ){\n    html += '<a class=\"tag\" href=\"'+element['ISBN']+'\" target=\"_blank\"><i class=\"fas fa-external-link\"><\/i>ISBN:'+element['ISBN']+'<\/a>'\n  }\n  else {\n    html += '<a class=\"tag\" href=\"#\"><i class=\"fas fa-external-link\"><\/i>ISBN: No hay datos<\/a>'\n  }\n  html += '<\/div>\\\n      <\/div>\\\n      <div class=\"title-left\">\\\n        <button class=\"print\" onclick=\"printDiv(\\'srv-'+i+'\\',\\''+element.titulo+'\\')\"><img decoding=\"async\" style=\"color: '+style.color+'\" src=\"\/images\/print.svg\"><\/img><span>Imprimir<\/span><\/button>\\\n        <button class=\"expand\" aria-controls=\"srv-'+ i +'\" aria-expanded=\"false\"><span>Ver m\u00e1s<\/span><i style=\"color: '+style.color+'\" class=\"fas fa-'+style.icon+'\"><\/i><\/button>\\\n      <\/div>\\\n    <\/div>\\\n    <div class=\"srv-body\">\\\n      <div class=\"row\"><i class=\"fas fa-language\"><\/i><span>Lengua fuente: <\/span>'+filter_tags(element, 'lengua', 'Lengua')+'<\/div>\\\n      <div class=\"row\"><i class=\"fas fa-building\"><\/i><span>Ente editor: <\/span>'+filter_tags(element, 'ente', 'Ente editor')+'<\/div>\\\n      <div class=\"row\"><i class=\"fas fa-location-dot\"><\/i><span>Ciudad: <\/span>'+filter_tags(element, 'city', 'Ciudad de publicaci\u00f3n')+'<\/div>\\\n      <div class=\"row\"><i class=\"fas fa-calendar\"><\/i><span>A\u00f1o de publicaci\u00f3n: <\/span>'+element[\"A\u00f1o de publicaci\u00f3n\"]+'<\/div>\\\n      <div class=\"row\"><i class=\"fas fa-user\"><\/i><span>Traductor\/a: <\/span>'+filter_tags(element, 'trans', 'Traductor\/a')+'<\/div>\\\n      <div class=\"row\"><i class=\"fas fa-comment\"><\/i><span>Observaciones: <\/span>'+element.Observaciones+'<\/div>\\\n  <\/li>';\n  return html;\n}\n\/\/\nfunction filter_tags( element,filter_id, filter_field ) {\n  let tags = ''\n  element[filter_field].split('|').forEach(arg => {\n    tags += '<a class=\"tag\" onclick=\"filter(\\''+filter_id+'\\', \\''+arg+'\\')\"><i class=\"fas fa-magnifying-glass\"><\/i>'+arg+'<\/a>'\n  });\n  return tags\n}\n\/\/\nfunction filter(field, fvalue) {\n  clearFilters(true)\n  switch (filters[field].type) {\n    case 'list':\n      break;\n    case 'autocomplete':\n      console.log(\"FILTER AUTOCOMPLETE\", fvalue);\n      autocomplete[field].setSelected(fvalue)\n      break;\n    case 'boolean':\n      break;\n    case 'inbetween':\n      break;\n    default:\n      break;\n  }\n}\n  function get_style(element) {\n    var res = {color: '#0F57FB', icon: 'chevron-right'};\n    return res;\n  }\n  function renderElements(elements, initial = false) {\n   \/\/Generate markers for all data rows |element = data[0]\n   console.log(\"RENDER\", elements.length);\n   \n   if ( elements.length > 0 ) {\n      noresults.style.display = 'none'\n      currentList = elements;\n      var list = '<ul>';\n      let filter_lists = filters_type(['list', 'autocomplete'])\n      \/\/filters_type(['list', 'autocomplete']).forEach( filter_list => {\n      \/\/  filter_list.values = []\n      \/\/});\n      elements.sort((a, b) => a['A\u00f1o de publicaci\u00f3n'] - b['A\u00f1o de publicaci\u00f3n']).forEach((element, i) => {\n        list += elementListHtml(element, i);\n        \/\/Load filters lists if initial load\n        if ( initial ) {\n          filter_lists.forEach( filter_list => {\n            if ( filter_list.filter == 'parent_include' ) {\n              let pseudo_field = filter_list.field[1]\n              let base = filter_list.field[0]\n              let base_values = element[base].split('|')\n              base_values.forEach(base_value => {\n                pseudos[base_value] = element[pseudo_field]\n              });\n              if ( element[base] != null && !filter_list.values.includes(element[base]) ) {\n                filter_list.values.push(element[base]);\n              }\n            }\n            else {\n              filter_list.field.forEach(field => {\n                if ( element[field] != null && !filter_list.values.includes(element[field]) ) {\n                  filter_list.values.push(element[field]);\n                }\n              });\n            }\n          });\n        }\n      });\n      list += '<\/ul>';\n      document.getElementById(\"list\").innerHTML = list;\n      document.getElementById(\"results\").innerHTML = \"Mostrando \"+elements.length+\"\/\"+window.total+\" entradas\";\n    }\n    else {\n      document.getElementById(\"list\").innerHTML = '';\n      document.getElementById(\"results\").innerHTML = \"Mostrando \"+elements.length+\"\/\"+window.total+\" entradas\";\n      noresults.style.display = 'flex'\n    }\n    loading.style.display = \"none\"\n  }\n  function printDiv(id, title) {\n    \n    var divToPrint=document.getElementById(id);\n\n    var newWin=window.open();\n    newWin.document.open();\n    newWin.document.write('<html><head><style>button{display:none;}<\/style><title>'+title+'<\/title><\/head><body>'+divToPrint.innerHTML+'<\/body><\/html>');\n    newWin.document.close();\n    newWin.focus();\n    newWin.print();\n    newWin.close();\n    setTimeout(function(){newWin.close();},10);\n  }\n  function exportSearch() {\n    let result = Object.keys(currentList[0]).join(',')+'\\n'\n    currentList.forEach(line => {\n      console.log(line);\n      result += '\"'+Object.values(line).join('\",\"')+'\"\\n'\n    });\n    const blob = new Blob([result], { type: 'text\/csv;charset=utf-8,' })\n    const objUrl = URL.createObjectURL(blob)\n    var newWin=window.open(objUrl);\n    \/\/setTimeout(function(){newWin.close();},10);\n  }\n<\/script>\n\n<\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-80","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/pages\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":34,"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/pages\/80\/revisions"}],"predecessor-version":[{"id":356,"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/pages\/80\/revisions\/356"}],"wp:attachment":[{"href":"https:\/\/traduccionuruguay.uy\/en\/wp-json\/wp\/v2\/media?parent=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}