{"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":"<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-0bc8a0abe2f5b3036a9e933a052a8ff5\"><a href=\"\/en\/buscador\/\" data-type=\"page\" data-id=\"80\">Explore <strong>1424 translation records<\/strong> from <strong>29 languages<\/strong> and <strong>629 female and male authors<\/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-36d623609ceba93f0848e6c4dd4d30c6 is-layout-flow wp-block-details-is-layout-flow\" style=\"font-style:normal;font-weight:600\"><summary>How to use (click to see more)<\/summary>\n<p class=\"translation-block\">This translation search engine is based on a dataset created from the catalogue of the National Library and complemented with data from the Library of the Parliamente and other sources. The complete dataset, in CSV version, <a href=\"https:\/\/redata.anii.org.uy\/dataset.xhtml?persistentId=doi:10.60895\/redata\/FU3URD&amp;version=1.0\" target=\"_self\">is available at Redata<\/a> (Uruguay Open Research Data Repository).<\/p>\n\n\n\n<p>To start a search, enter a keyword in the specific search fields (author, city, etc.) or in the general search bar, which scans all fields. Filters allow you to narrow your search, for example by time period or source language. <\/p>\n\n\n\n<p>Remember to clear the filters when you want to start a new search.&nbsp;<\/p>\n\n\n\n<p>To search by author, you can search by surname followed by name, or by pseudonym if there is one. The results include both variants.<\/p>\n\n\n\n<p>We have corrected inaccurate information and added important data to some entries, using sources from other libraries whenever possible. These changes to the original data are recorded in the \u2018Observaciones\u2019 field.&nbsp;<\/p>\n\n\n\n<p>The information you find can be downloaded or printed. It is free to access and use under the CC-BY-NC licence.&nbsp;<\/p>\n\n\n\n<p>If you quote us, we suggest using the following format:&nbsp;<\/p>\n\n\n\n<p>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\/en\/\">https:\/\/traduccionuruguay.uy\/<\/a>&nbsp;<\/p>\n\n\n\n<p>Thank you for using the translation search engine! If you find any discrepancies or errors, please let us know by emailing us at <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>","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}]}}