libreavous/squelettes/javascript/scrutarijs/Scrutari.Lav.js

232 lines
7.6 KiB
JavaScript
Raw Normal View History

2023-07-06 16:56:15 +02:00
/* 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
*/
2024-05-05 03:55:03 +02:00
Scrutari.Lav.formatSearchSequence = function (client, searchUnit) {
var q = searchUnit.getQ();
2023-07-06 16:56:15 +02:00
q = q.replace(/\&\&/g, '@%et%@');
q = q.replace(/\|\|/g, '@%ou%@');
q = q.replace(/\*/g, '@%*%@');
q = Scrutari.escape(q);
2023-07-08 16:22:12 +02:00
q = q.replace(/@%/g, '<span class="lav-Operateur">');
2023-07-06 16:56:15 +02:00
q = q.replace(/%@/g, '</span>');
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", {
2023-07-07 21:13:11 +02:00
noLoc: false,
2024-05-02 11:31:17 +02:00
withComment: true
2023-07-06 16:56:15 +02:00
}));
}
client.initForms();
2024-05-05 03:55:03 +02:00
client.initActions();
client.initChangeListeners();
2023-07-06 16:56:15 +02:00
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.
2024-05-05 03:55:03 +02:00
* la méthode addPaginisations de la classe Scrutari.SearchUnit est remplacée pour que trois paginations
2023-07-06 16:56:15 +02:00
* soient créés : celle, normale, de toutes les fiches et une par site
2024-05-05 03:55:03 +02:00
* Remplace Scrutari.DefaultUi.newSearchDisplay
2023-07-06 16:56:15 +02:00
*/
2024-05-05 03:55:03 +02:00
Scrutari.Lav.newSearchDisplay = function (client, searchUnit) {
var searchDisplay = new Scrutari.SearchDisplay(client, searchUnit);
searchDisplay.addPaginations = function ($paginationBlock) {
2023-07-06 16:56:15 +02:00
_addPaginations($paginationBlock);
};
var libreavousArray = new Array();
var librealireArray = new Array();
2024-05-05 03:55:03 +02:00
var length = searchUnit.ficheGroupArray.length;
2023-07-06 16:56:15 +02:00
if (length > 0) {
2024-05-05 03:55:03 +02:00
for(let fiche of searchUnit.ficheGroupArray[0].ficheArray) {
2023-07-06 16:56:15 +02:00
if (fiche.codecorpus === 1222) {
libreavousArray.push(fiche);
} else {
librealireArray.push(fiche);
}
}
}
var arrays = {
libreavous: libreavousArray,
librealire: librealireArray
};
2024-05-05 03:55:03 +02:00
return searchDisplay;
2023-07-06 16:56:15 +02:00
function _addPaginations($paginationBlock) {
$paginationBlock.html(client.render("pagination_lav", {array: client.lav.paginationArray}));
2024-05-05 03:55:03 +02:00
client.$count("total-tous", 'update', searchUnit.getFicheCount());
2023-07-06 16:56:15 +02:00
for(let config of client.lav.paginationArray) {
2024-05-05 03:55:03 +02:00
let pagination;
2023-07-06 16:56:15 +02:00
if (config.name) {
client.$count("total-" + config.name, 'update', arrays[config.name].length);
2024-05-05 03:55:03 +02:00
pagination = new Scrutari.Pagination(client, arrays[config.name], config.name);
} else {
pagination = new Scrutari.Pagination(client, searchUnit);
2023-07-06 16:56:15 +02:00
}
client.putPagination(config.name, pagination);
pagination.change(1);
}
}
};
/**
* Actions propres au client
2023-07-06 16:56:15 +02:00
*/
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
2023-07-06 16:56:15 +02:00
*/
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);
}
});
}
};
2024-05-15 23:03:57 +02:00
Scrutari.Lav.mainsearchCallback = function (client, searchUnit) {
$("#scrutari_lav_sequence").html(Scrutari.Lav.formatSearchSequence(client, searchUnit));
};
2024-05-02 11:31:17 +02:00
Scrutari.Lav.getApiSettings = function () {
2023-07-07 21:13:11 +02:00
return {
2024-05-02 11:31:17 +02:00
name: "libreavous",
engineUrl: Scrutari.Lav.SCRUTARI_URL,
lang: "fr",
origin: "site",
2023-07-07 21:13:11 +02:00
paginationLength: Scrutari.Lav.PAGINATION_LENGTH,
limit: -1
};
};
Scrutari.Lav.getInitOptions = function () {
return {
2023-07-06 16:56:15 +02:00
withCorpus: false,
ficheTarget: "_blank",
2023-07-08 16:22:12 +02:00
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,
2023-07-06 16:56:15 +02:00
ignoreList: "area-title,area-stats,modal-*", //Utilisé en mode développement
hooks: {
2024-05-05 03:55:03 +02:00
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,
2024-05-05 03:55:03 +02:00
newSearchDisplay: Scrutari.Lav.newSearchDisplay,
startLoading: null,
endLoading: null,
actionHandler: Scrutari.Lav.actionHandler,
changeHandler: Scrutari.Lav.changeHandler
2024-05-15 23:03:57 +02:00
},
searchCallbacks: {
mainsearch: Scrutari.Lav.mainsearchCallback,
qidsearch: Scrutari.Lav.mainsearchCallback
}
2023-07-07 21:13:11 +02:00
};
};