/* global Scrutari */ /** * Surcharge et complément du client ScrutariJs pour le site librevous.org */ Scrutari.Lav = {}; /** * Adresse du serveur Scrutari */ Scrutari.Lav.SCRUTARI_URL = "https://sct2.scrutari.net/sct/april_libreavous/"; /** * Nombre de fiches dans une pagination */ Scrutari.Lav.PAGINATION_LENGTH = 20; /** * Tableau des différentes paginations, la première est la pagination sur la totalité des sites, les autres sont les paginations par site */ Scrutari.Lav.PAGINATION_ARRAY = ["", "libreavous", "librealire"]; /** * Indication s'il s'agit de la version de développement */ Scrutari.Lav.DEV = false; /** * Fonction utilitaire de formatage de la séquence de recherche pour l'affichage */ Scrutari.Lav.formatSearchSequence = function (client, searchUnit) { var q = searchUnit.getQ(); q = q.replace(/\&\&/g, '@%et%@'); q = q.replace(/\|\|/g, '@%ou%@'); q = q.replace(/\*/g, '@%*%@'); q = Scrutari.escape(q); q = q.replace(/@%/g, ''); q = q.replace(/%@/g, ''); return q; }; /** * Fonction principale d'initialisation du client. Remplace Scrutari.DefaultUi.init */ Scrutari.Lav.init = function (client) { var scrutariMeta = client.scrutariMeta; client.lav = {}; //propriété lav pour conserver des données propres à ce client _initLav(); if (Scrutari.Lav.DEV) { //Code propre à la version de développement, en production la structure est en dur dans le squelette Spip $("#" + client.clientId).html(client.compileStructure("main")); $("#zone").html(client.compileStructure("main", { noLoc: false, withComment: true })); } client.initForms(); client.initActions(); client.initChangeListeners(); client.checkInitialQuery(); function _initLav() { let paginationArray = new Array(); for(let name of Scrutari.Lav.PAGINATION_ARRAY) { let active = false; let suffix = "-" + name; let radio = name; if (!name) { // valeurs particulières pour « tous » active = true; suffix = ""; radio = "tous"; } paginationArray.push({ name: name, active: active, suffix: suffix, radio: radio }); } client.lav.paginationArray = paginationArray; } } /** * Fonction d'enrichissement du processus d'affichage des résultats. * la méthode addPaginisations de la classe Scrutari.SearchUnit est remplacée pour que trois paginations * soient créés : celle, normale, de toutes les fiches et une par site * Remplace Scrutari.DefaultUi.newSearchDisplay */ Scrutari.Lav.newSearchDisplay = function (client, searchUnit) { var searchDisplay = new Scrutari.SearchDisplay(client, searchUnit); searchDisplay.addPaginations = function ($paginationBlock) { _addPaginations($paginationBlock); }; var libreavousArray = new Array(); var librealireArray = new Array(); var length = searchUnit.ficheGroupArray.length; if (length > 0) { for(let fiche of searchUnit.ficheGroupArray[0].ficheArray) { if (fiche.codecorpus === 1222) { libreavousArray.push(fiche); } else { librealireArray.push(fiche); } } } var arrays = { libreavous: libreavousArray, librealire: librealireArray }; return searchDisplay; function _addPaginations($paginationBlock) { $paginationBlock.html(client.render("pagination_lav", {array: client.lav.paginationArray})); client.$count("total-tous", 'update', searchUnit.getFicheCount()); for(let config of client.lav.paginationArray) { let pagination; if (config.name) { client.$count("total-" + config.name, 'update', arrays[config.name].length); pagination = new Scrutari.Pagination(client, arrays[config.name], config.name); } else { pagination = new Scrutari.Pagination(client, searchUnit); } client.putPagination(config.name, pagination); pagination.change(1); } } }; /** * Actions propres au client */ Scrutari.Lav.actionHandler = function (client, button, action, target) { switch(action) { case 'copyPermalink': navigator.clipboard.writeText($(button).attr("href")); break; default: return false; } return true; }; /** * Personnalisation des écouteurs actions sur les boutons */ Scrutari.Lav.changeHandler = function (client, element, name) { switch(name) { case 'lav-site': if (element.checked) { _setSiteFilter(element.value); } return true; default: return false; } function _setSiteFilter (value) { let suffix = ""; for(let pagination of client.lav.paginationArray) { if (value === pagination.radio) { pagination.active = true; suffix = pagination.suffix; } else { pagination.active = false; } } let activeBlockName = "ficheGroup" + suffix; client.$block("ficheGroup", "*").each(function (index, element) { if (element.dataset.scrutariBlock === activeBlockName) { client.show(element); } else { client.hide(element); } }); } }; Scrutari.Lav.mainsearchCallback = function (client, searchUnit) { $("#scrutari_lav_sequence").html(Scrutari.Lav.formatSearchSequence(client, searchUnit)); }; Scrutari.Lav.getApiSettings = function () { return { name: "libreavous", engineUrl: Scrutari.Lav.SCRUTARI_URL, lang: "fr", origin: "site", paginationLength: Scrutari.Lav.PAGINATION_LENGTH, limit: -1 }; }; Scrutari.Lav.getInitOptions = function () { return { withCorpus: false, ficheTarget: "_blank", ficheBodyList: "fiche_mtitre,fiche_msoustitre,libreavous_start_ul,fiche_primaryattributearray,fiche_mcomplementarray,fiche_secondaryattributearray,fiche_motclearray,fiche_bythesaurusarray,libreavous_end_ul", //Ajout de libreavous_start_ul et libreavous_end_ul, retrait de fiche_year, historyAtLast: true, ignoreList: "area-title,area-stats,modal-*", //Utilisé en mode développement hooks: { completeFiche : function (searchUnit, fiche, categoryName) { //Extrait le numéro du titre let start = fiche.mtitre[0]; let numero = ""; if (start.startsWith("#")) { let idx = start.indexOf("-"); if (idx > 0) { numero = start.substring(0, idx).trim(); fiche.mtitre[0] = start.substring(idx + 1); } } fiche._numero = numero; } }, functions: { uiInit: Scrutari.Lav.init, ignoreElement: null, isFilterEnable: null, initFilterByQuery: null, newSearchDisplay: Scrutari.Lav.newSearchDisplay, startLoading: null, endLoading: null, actionHandler: Scrutari.Lav.actionHandler, changeHandler: Scrutari.Lav.changeHandler }, searchCallbacks: { mainsearch: Scrutari.Lav.mainsearchCallback, qidsearch: Scrutari.Lav.mainsearchCallback } }; };