232 lines
7.8 KiB
JavaScript
232 lines
7.8 KiB
JavaScript
/* 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, scrutariResult) {
|
|
var q = scrutariResult.getQ();
|
|
q = q.replace(/\&\&/g, '@%et%@');
|
|
q = q.replace(/\|\|/g, '@%ou%@');
|
|
q = q.replace(/\*/g, '@%*%@');
|
|
q = Scrutari.escape(q);
|
|
q = q.replace(/@%/g, '<span class="lav-Operateur">');
|
|
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", {
|
|
noLoc: false,
|
|
withIndent: true,
|
|
withPath: true
|
|
}));
|
|
}
|
|
client.initForms();
|
|
client.initButtons();
|
|
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.Process est remplacée pour que trois paginations
|
|
* soient créés : celle, normale, de toutes les fiches et une par site
|
|
* Remplace Scrutari.DefaultUi.newResultProcess
|
|
*/
|
|
Scrutari.Lav.newResultProcess = function (client, scrutariResult, searchOrigin) {
|
|
var resultProcess = new Scrutari.Process(client, scrutariResult, searchOrigin);
|
|
resultProcess.addPaginations = function ($paginationBlock) {
|
|
_addPaginations($paginationBlock);
|
|
};
|
|
var libreavousArray = new Array();
|
|
var librealireArray = new Array();
|
|
var length = scrutariResult.ficheGroupArray.length;
|
|
if (length > 0) {
|
|
for(let fiche of scrutariResult.ficheGroupArray[0].ficheArray) {
|
|
if (fiche.codecorpus === 1222) {
|
|
libreavousArray.push(fiche);
|
|
} else {
|
|
librealireArray.push(fiche);
|
|
}
|
|
}
|
|
}
|
|
var arrays = {
|
|
libreavous: libreavousArray,
|
|
librealire: librealireArray
|
|
};
|
|
return resultProcess;
|
|
|
|
function _addPaginations($paginationBlock) {
|
|
$paginationBlock.html(client.render("pagination_lav", {array: client.lav.paginationArray}));
|
|
client.$count("total-tous", 'update', scrutariResult.getFicheCount());
|
|
for(let config of client.lav.paginationArray) {
|
|
let pagination = new Scrutari.Pagination(client, config.name);
|
|
if (config.name) {
|
|
client.$count("total-" + config.name, 'update', arrays[config.name].length);
|
|
pagination.getPaginationFicheArray = function (scrutariResult, paginationNumber) {
|
|
return _getPaginationFicheArray(config.name, pagination.paginationLength, paginationNumber);
|
|
};
|
|
}
|
|
client.putPagination(config.name, pagination);
|
|
pagination.change(1);
|
|
}
|
|
}
|
|
|
|
function _getPaginationFicheArray(name, paginationLength, paginationNumber) {
|
|
let array = arrays[name];
|
|
return Scrutari.Utils.extractFicheArray(array, paginationLength, paginationNumber);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 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.getConfigOptions = function () {
|
|
return {
|
|
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 (scrutariResult, 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,
|
|
mainsearchResultCallback: function (client, scrutariResult) {
|
|
$("#scrutari_lav_sequence").html(Scrutari.Lav.formatSearchSequence(client, scrutariResult));
|
|
},
|
|
mainsearchErrorCallback: null,
|
|
subsearchResultCallback: null,
|
|
subsearchErrorCallback: null,
|
|
initFilterByQuery: null,
|
|
newResultProcess: Scrutari.Lav.newResultProcess,
|
|
startLoading: null,
|
|
endLoading: null,
|
|
actionHandler: Scrutari.Lav.actionHandler,
|
|
changeHandler: Scrutari.Lav.changeHandler
|
|
}
|
|
};
|
|
};
|