From ca2dc78a3b3c2473612182eef6cee81ad7ddd122 Mon Sep 17 00:00:00 2001 From: Vincent Calame Date: Sun, 28 Apr 2024 12:03:43 +0200 Subject: [PATCH] Version de ScrutariJs 1.4alpha6 --- .../scrutarijs/frameworks/default.js | 2 +- .../javascript/scrutarijs/scrutarijs.css | 115 --- .../javascript/scrutarijs/scrutarijs.js | 951 ++++++++++-------- 3 files changed, 559 insertions(+), 509 deletions(-) diff --git a/squelettes/javascript/scrutarijs/frameworks/default.js b/squelettes/javascript/scrutarijs/frameworks/default.js index 9103949..46a9abe 100644 --- a/squelettes/javascript/scrutarijs/frameworks/default.js +++ b/squelettes/javascript/scrutarijs/frameworks/default.js @@ -44,7 +44,7 @@ templates:{ 'history':'
', 'lang':'

', 'loading':' {{>~scrutari_loc(\'_ loading_pagination\')}}', -'pagination_empty':'

{{>~scrutari_loc("_ result_none")}}

{{if withFilter}}

{{>~scrutari_loc("_ result_fitlerwarning")}}

{{else scrutariResult.searchMeta.reportArray.length > 0}}

Analyse des termes de la recherche{{>~scrutari_loc("_ colon")}}

{{for scrutariResult.searchMeta.reportArray}}
{{> text}}
{{if canonicalArray.length > 0}}

Correspondances trouvées (entre parenthèses, le nombre d\'occurrences par langue):

    {{for canonicalArray}}
  • {{> canonical}} ({{for langreportArray}}{{if #index > 0}}, {{/if}}{{:lang}}={{:ficheCount}}{{/for}})
  • {{/for}}
{{/if}} {{if neighbourArray.length > 0}}

Pas de correspondances trouvées. Termes se rapprochant (entre parenthèses, le code des langues concernées) :

    {{for neighbourArray}}
  • {{> neighbour}} ({{for langArray}}{{if #index > 0}}, {{/if}}{{:#data}}{{/for}})
  • {{/for}}
{{/if}} {{if canonicalArray.length == 0 && neighbourArray.length == 0}}

Aucune correspondance ou terme voisin trouvé

{{/if}}
{{/for}}
{{/if}}', +'pagination_empty':'

{{>~scrutari_loc("_ result_none")}}

{{if withFilter}}

{{>~scrutari_loc("_ result_fitlerwarning")}}

{{/if}} {{if scrutariResult.notfoundArray.length > 0}}

{{>~scrutari_loc("_ result_notfound")}}{{>~scrutari_loc("_ colon")}}

{{/if}}', 'pagination_groups':'
{{for array}} {{/for}}
{{for array}}
{{/for}}', 'pagination_unique':'
', 'tabs':'
{{for tabArray}} {{if state===\'active\'}} {{else state===\'etc\'}} {{>title}} {{else}} {{/if}} {{/for}}
' diff --git a/squelettes/javascript/scrutarijs/scrutarijs.css b/squelettes/javascript/scrutarijs/scrutarijs.css index 1f5223f..72caf07 100644 --- a/squelettes/javascript/scrutarijs/scrutarijs.css +++ b/squelettes/javascript/scrutarijs/scrutarijs.css @@ -15,41 +15,11 @@ display: none !important; } -.scrutari-Mark { - background-color: #e9e9e9; -} - /***************************************************** * .scrutari-fiche ******************************************************/ -.scrutari-fiche-Attribute { - margin-left: 15px; - font-size: 1.0em; - margin-bottom: 2px; -} - -.scrutari-fiche-AttributeBlock { - margin-bottom: 2px; -} - -.scrutari-fiche-AttributeTitle { - margin-left: 15px; - font-size: 1.0em; - margin-bottom: 0; -} - -.scrutari-fiche-AttributeValue { - margin-left: 30px; - font-size: 1.0em; - margin-bottom: 0; -} - -.scrutari-fiche-AttributeValues { - -} - .scrutari-fiche-AttributeValue::before { content: '… '; } @@ -58,11 +28,6 @@ content: ' …'; } -.scrutari-fiche-Block { - margin-bottom: 15px; - padding-left: 3px; -} - .scrutari-fiche-Body { margin-left: 21px; } @@ -77,30 +42,11 @@ clear: left; } -.scrutari-fiche-Complement { - margin-left: 15px; - font-size: 1.0em; - margin-bottom: 2px; -} - .scrutari-fiche-Icon { float: left; margin-top: 0; } -.scrutari-fiche-Motcle { - font-variant: small-caps; - font-size: 1.0em; - margin-left: 15px; - margin-bottom: 2px; -} - -.scrutari-fiche-Soustitre { - margin-bottom: 3px; - font-style: italic; - margin-left: 10px; -} - .scrutari-fiche-Thumbnail { float: left; margin-top: 0; @@ -127,33 +73,6 @@ z-index: 100; } -.scrutari-fiche-Titre { - font-size: 1.1em; - margin-bottom: 4px; - margin-left: 0; - margin-top: 0; -} - -.scrutari-fiche-Year { - font-size: 1.0em; - margin-bottom: 3px; - font-style: italic; - margin-left: 15px; -} - - -/***************************************************** -* .scrutari-history -******************************************************/ - -.scrutari-history-Active { - background-color: #e9e9e9; -} - -.scrutari-history-Block { - word-wrap: break-word; -} - /***************************************************** * .scrutari-icon @@ -177,40 +96,6 @@ } -/***************************************************** -* .scrutari-label -******************************************************/ - -.scrutari-label-Attribute { - font-style: italic; -} - -.scrutari-label-Complement { - font-style: italic; -} - -.scrutari-label-Motcle { - font-style: italic; - font-variant: normal; -} - - -/***************************************************** -* .scrutari-links -******************************************************/ - -.scrutari-links-Permalink { - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.scrutari-links-Permalink:hover { - white-space: normal; - overflow-wrap: break-word; -} - - /***************************************************** * .scrutari-panel ******************************************************/ diff --git a/squelettes/javascript/scrutarijs/scrutarijs.js b/squelettes/javascript/scrutarijs/scrutarijs.js index f10fece..8926460 100644 --- a/squelettes/javascript/scrutarijs/scrutarijs.js +++ b/squelettes/javascript/scrutarijs/scrutarijs.js @@ -1,4 +1,4 @@ -/* version: r4220 */ +/* version: 1.4alpha6 */ var Scrutari = {}; Scrutari.log = function (msg) { if ((console) && (console.log)) { @@ -26,21 +26,11 @@ Scrutari.logError = function (error) { } errorMessage += "}"; Scrutari.log(errorMessage); -}; -Scrutari.convert = function (jqArgument) { - if (jqArgument.jquery) { - return jqArgument; - } else { - return $(jqArgument); - } -}; -Scrutari.exists = function (jqArgument) { - return Scrutari.convert(jqArgument).length > 0; }; Scrutari.escape = function (text) { var result = ""; - for(var i = 0; i < text.length; i++) { - carac = text.charAt(i); + for(let i = 0; i < text.length; i++) { + let carac = text.charAt(i); switch (carac) { case '&': result += "&"; @@ -63,68 +53,32 @@ Scrutari.exists = function (jqArgument) { } return result; }; - Scrutari.$ = function (jqArgument, properties) { - if (!properties) { - properties = jqArgument; - jqArgument = null; +Scrutari.hasAttribute = function (fiche, attributeKey) { + if (!fiche.attrMap) { + return false; } - var query = Scrutari.toCssQuery(properties); - if (jqArgument) { - return Scrutari.convert(jqArgument).find(query); + if (attributeKey) { + return fiche.attrMap.hasOwnProperty(attributeKey); } else { - return $(query); + return true; } }; -Scrutari.$children = function (jqArgument, properties) { - return Scrutari.convert(jqArgument).children(Scrutari.toCssQuery(properties)); +Scrutari.hasMarkedAttribute = function (fiche, attributeKey) { + if (!fiche.mattrMap) { + return false; + } + if (attributeKey) { + return fiche.mattrMap.hasOwnProperty(attributeKey); + } else { + return true; + } }; -Scrutari.$parents = function (jqArgument, properties) { - return Scrutari.convert(jqArgument).parents(Scrutari.toCssQuery(properties)); -}; -Scrutari.toCssQuery = function (properties) { - var query = ""; - var elementName = false; - var suffix = ""; - for(let key in properties) { - let value = properties[key]; - if (!key.startsWith("_")) { - if (value === true) { - query += "[" + Scrutari.toDataAttribute(key) + "]"; - } else { - query += "[" + Scrutari.toDataAttribute(key) + "='" + value + "']"; - } - } else if (key === "_checked") { - if (value) { - suffix += ":checked"; - } else { - suffix += ":not(:checked)"; - } - } else if (key === "_type") { - query += "[type='" + value + "']"; - } else if (key === "_name") { - query += "[name='" + value + "']"; - } else if (key === "_value") { - query += "[value='" + value + "']"; - } else if (key === "_element") { - elementName = value; - } - } - if (elementName) { - query = elementName + query; - } - query += suffix; - return query; -}; -Scrutari.toDataAttribute = function (camelCaseString) { - return "data-" + camelCaseString.replace(/[A-Z]/g, function (upperLetter) { - return "-" + upperLetter.toLowerCase(); - }); -}; -Scrutari.Config = function (name, engineUrl, lang, origin, options) { +Scrutari.Api = function (name, engineUrl, lang, origin, options) { this.name = name; this.engineUrl = engineUrl; this.lang = lang; this.origin = origin; + this.meta = null; this.options = { dataType: "json", queryVariant: "query", @@ -135,11 +89,42 @@ Scrutari.Config = function (name, engineUrl, lang, origin, options) { groupSortFunction: _ficheCountSort, limit: 0 }; + if (arguments.length === 1) { + options = arguments[0]; + } if (options) { - for(var key in options) { - this.options[key] = options[key]; + for(let key in options) { + let value = options[key]; + switch(key) { + case "name": + this.name = value; + break; + case "engineUrl": + this.engineUrl = value; + break; + case "lang": + this.lang = value; + break; + case "origin": + this.origin = value; + break; + default: + this.options[key] = value; + } } } + if (!this.name) { + throw new Error("name undefined"); + } + if (!this.engineUrl) { + throw new Error("engineUrl undefined"); + } + if (!this.lang) { + throw new Error("lang undefined"); + } + if (!this.origin) { + throw new Error("origin undefined"); + } function _ficheCountSort(group1, group2) { let count1 = group1.ficheCount; let count2 = group2.ficheCount; @@ -160,10 +145,11 @@ Scrutari.Config = function (name, engineUrl, lang, origin, options) { } } }; -Scrutari.Config.prototype.getJsonUrl = function () { +Scrutari.Config = Scrutari.Api; +Scrutari.Api.prototype.getJsonUrl = function () { return this.engineUrl + "json"; }; -Scrutari.Config.prototype.getDownloadUrl = function (qId, extension) { +Scrutari.Api.prototype.getDownloadUrl = function (qId, extension) { switch(extension) { case "ods": case "csv": @@ -191,128 +177,216 @@ Scrutari.Config.prototype.getDownloadUrl = function (qId, extension) { return dateString; } }; -Scrutari.Config.prototype.getPermalinkUrl = function (qId, permalinkPattern) { +Scrutari.Api.prototype.getPermalinkUrl = function (qId, permalinkPattern) { var permalink = permalinkPattern.replace("$LANG", this.lang); permalink = permalink.replace("$QID", qId); return permalink; }; -Scrutari.Config.prototype.getLimit = function () { +Scrutari.Api.prototype.getLimit = function () { if (this.options.limit) { return this.options.limit; } else { return this.options.paginationLength * 2; } }; -Scrutari.Ajax = {}; -Scrutari.Ajax.loadBaseArray = function (scrutariConfig, requestParameters, baseArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); +Scrutari.Api.prototype.buildRequestParameters = function (type) { + var api = this; + var requestParameters = { + "lang": api.lang, + "warnings": 1, + "version": 3 + }; + var argLength = arguments.length; + if (argLength > 1) { + for(let i = 1; i < argLength; i++) { + _assign(arguments[i]); + } } - requestParameters.type = "base"; - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, + requestParameters.type = type; + return requestParameters; + function _assign(parameters) { + if (!parameters) { + return; + } + for(let propKey in parameters) { + let propValue = parameters[propKey]; + if (!propValue) { + propValue = ""; + } + requestParameters[propKey] = propValue; + } + } +}; +Scrutari.Api.prototype.initMeta = function (callback) { + var api = this; + this.loadEngineInfo({ + callback: function (engineInfo) { + let scrutariMeta = new Scrutari.Meta(engineInfo); + api.meta = scrutariMeta; + if (callback) { + callback(scrutariMeta); + } + } + }); +}; +Scrutari.Api.prototype.newSearch = function (argObject) { + var api = this; + var requestParameters = argObject.requestParameters; + var callback = argObject.callback; + api.loadFicheSearch({ + requestParameters: requestParameters, + callback: function (ficheSearchResult) { + if (callback) { + callback(new Scrutari.Result(api, ficheSearchResult, requestParameters, api.options.groupSortFunction)); + } + }, + errorCallback: argObject.errorCallback + }); +}; +Scrutari.Api.prototype.loadBaseArray = function(argObject) { + Scrutari.Ajax.loadBaseArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadCategoryArray = function(argObject) { + Scrutari.Ajax.loadCategoryArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadCorpusArray = function(argObject) { + Scrutari.Ajax.loadCorpusArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadThesaurusArray = function(argObject) { + Scrutari.Ajax.loadThesaurusArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadEngineInfo = function(argObject) { + Scrutari.Ajax.loadEngineInfo(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadFicheArray = function(argObject) { + Scrutari.Ajax.loadFicheArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadMotcleArray = function(argObject) { + Scrutari.Ajax.loadMotcleArray(this, argObject.requestParameters, argObject.callback); +}; +Scrutari.Api.prototype.loadGeoJson = function(argObject) { + Scrutari.Ajax.loadGeoJson(this, argObject.requestParameters, argObject.callback, argObject.errorCallback); +}; +Scrutari.Api.prototype.loadFicheSearch = function(argObject) { + var requestParameters = argObject.requestParameters; + if ((!requestParameters) && (argObject.q)) { + requestParameters = { + q: argObject.q + }; + } + Scrutari.Ajax.loadFicheSearchResult(this, argObject.requestParameters, argObject.callback, argObject.errorCallback); +}; +Scrutari.Api.prototype.loadExistingFicheSearch = function(argObject) { + var requestParameters = argObject.requestParameters; + if ((!requestParameters) && (argObject.qid)) { + requestParameters = { + qid: argObject.qid + }; + } + Scrutari.Ajax.loadExistingFicheSearchResult(this, requestParameters, argObject.callback); +}; +Scrutari.Ajax = {}; +Scrutari.Ajax.load = function (settings) { + $.ajax(settings); +}; +Scrutari.Ajax.loadBaseArray = function (api, requestParameters, baseArrayCallback) { + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("base", requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, "baseArray", baseArrayCallback); } }); }; -Scrutari.Ajax.loadCategoryArray = function (scrutariConfig, requestParameters, categoryArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); - } - requestParameters.type = "category"; - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, +Scrutari.Ajax.loadCategoryArray = function (api, requestParameters, categoryArrayCallback) { + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("category", requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, "categoryArray", categoryArrayCallback); } }); }; -Scrutari.Ajax.loadCorpusArray = function (scrutariConfig, requestParameters, corpusArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); - } - requestParameters.type = "corpus"; - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, +Scrutari.Ajax.loadCorpusArray = function (api, requestParameters, corpusArrayCallback) { + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("corpus", requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, "corpusArray", corpusArrayCallback); } }); }; -Scrutari.Ajax.loadEngineInfo = function (scrutariConfig, requestParameters, engineInfoCallback) { - if (!requestParameters) { - requestParameters = new Object(); - } - requestParameters.type = "engine"; - Scrutari.Ajax.check(requestParameters, "info", "all"); - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, +Scrutari.Ajax.loadThesaurusArray = function (api, requestParameters, thesaurusArrayCallback) { + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("thesaurus", requestParameters), + success: function (data, textStatus) { + Scrutari.Ajax.success(data, "thesaurusArray", thesaurusArrayCallback); + } + }); +}; +Scrutari.Ajax.loadEngineInfo = function (api, requestParameters, engineInfoCallback) { + var defaultParameters = { + "info": "all" + }; + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("engine", defaultParameters, requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, "engineInfo", engineInfoCallback); } }); }; -Scrutari.Ajax.loadFicheArray = function (scrutariConfig, requestParameters, ficheArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); - } - requestParameters.type = "fiche"; - Scrutari.Ajax.check(requestParameters, "fieldvariant", "data"); - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, +Scrutari.Ajax.loadFicheArray = function (api, requestParameters, ficheArrayCallback) { + var defaultParameters = { + "fieldvariant": "data" + }; + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("fiche", defaultParameters, requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, ["ficheArray", "motcleArray"], ficheArrayCallback); } }); }; -Scrutari.Ajax.loadGeoJson = function (scrutariConfig, requestParameters, geojsonCallback, apiErrorCallback) { - if (!requestParameters) { - requestParameters = new Object(); +Scrutari.Ajax.loadMotcleArray = function (api, requestParameters, motcleArrayCallback) { + var defaultParameters = { + "fieldvariant": "data" + }; + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("motcle", defaultParameters, requestParameters), + success: function (data, textStatus) { + Scrutari.Ajax.success(data, "motcleArray", motcleArrayCallback); + } + }); +}; +Scrutari.Ajax.loadGeoJson = function (api, requestParameters, geojsonCallback, errorCallback) { + var defaultParameters = { + "fieldvariant": api.options.queryVariant, + "origin": api.origin + }; + if (api.options.ficheFields !== null) { + defaultParameters["fichefields"] = api.options.ficheFields; } - requestParameters.type = "geojson"; - if ((scrutariConfig.options.ficheFields) || (scrutariConfig.options.motcleFields)) { - Scrutari.Ajax.check(requestParameters, "fichefields", scrutariConfig.options.ficheFields); - Scrutari.Ajax.check(requestParameters, "motclefields", scrutariConfig.options.motcleFields); + if (api.options.motcleFields !== null) { + defaultParameters["motclefields"] = api.options.motcleFields; } - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "fieldvariant", scrutariConfig.options.queryVariant); - Scrutari.Ajax.check(requestParameters, "origin", scrutariConfig.origin); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("geojson", defaultParameters, requestParameters), success: function (data, textStatus) { if (data.hasOwnProperty("error")) { - if (apiErrorCallback) { - apiErrorCallback(data.error); + if (errorCallback) { + errorCallback(data.error); } else { Scrutari.logError(data.error); } @@ -323,104 +397,64 @@ Scrutari.Ajax.loadGeoJson = function (scrutariConfig, requestParameters, geojson } }); }; -Scrutari.Ajax.loadMotcleArray = function (scrutariConfig, requestParameters, motcleArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); +Scrutari.Ajax.loadFicheSearchResult = function (api, requestParameters, ficheSearchResultCallback, errorCallback) { + var defaultParameters = { + "fieldvariant": api.options.queryVariant, + "origin": api.origin, + "start": 1, + "limit": api.getLimit(), + "starttype": "in_all", + "q-mode": "intersection" + }; + if (api.options.ficheFields !== null) { + defaultParameters["fichefields"] = api.options.ficheFields; } - requestParameters.type = "motcle"; - Scrutari.Ajax.check(requestParameters, "fieldvariant", "data"); - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, + if (api.options.motcleFields !== null) { + defaultParameters["motclefields"] = api.options.motcleFields; + } + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("q-fiche", defaultParameters, requestParameters), success: function (data, textStatus) { - Scrutari.Ajax.success(data, "motcleArray", motcleArrayCallback); + Scrutari.Ajax.success(data, "ficheSearchResult", ficheSearchResultCallback, errorCallback); } }); }; -Scrutari.Ajax.loadThesaurusArray = function (scrutariConfig, requestParameters, thesaurusArrayCallback) { - if (!requestParameters) { - requestParameters = new Object(); +Scrutari.Ajax.loadExistingFicheSearchResult = function (api, requestParameters, existingFicheSearchResultCallback) { + var defaultParameters = { + "fieldvariant": api.options.queryVariant, + "insert": "-searchmeta,-motclearray", + "start": 1, + "limit": api.getLimit() + }; + if (api.options.ficheFields !== null) { + defaultParameters["fichefields"] = api.options.ficheFields; } - requestParameters.type = "thesaurus"; - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, - success: function (data, textStatus) { - Scrutari.Ajax.success(data, "thesaurusArray", thesaurusArrayCallback); - } - }); -}; -Scrutari.Ajax.loadFicheSearchResult = function (scrutariConfig, requestParameters, ficheSearchResultCallback, apiErrorCallback) { - if (!requestParameters) { - requestParameters = new Object(); + if (api.options.motcleFields !== null) { + defaultParameters["motclefields"] = api.options.motcleFields; } - requestParameters.type = "q-fiche"; - if (scrutariConfig.options.ficheFields !== null) { - Scrutari.Ajax.check(requestParameters, "fichefields", scrutariConfig.options.ficheFields); - } - if (scrutariConfig.options.motcleFields !== null) { - Scrutari.Ajax.check(requestParameters, "motclefields", scrutariConfig.options.motcleFields); - } - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "fieldvariant", scrutariConfig.options.queryVariant); - Scrutari.Ajax.check(requestParameters, "q-mode", "intersection"); - Scrutari.Ajax.check(requestParameters, "origin", scrutariConfig.origin); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - Scrutari.Ajax.check(requestParameters, "start", 1); - Scrutari.Ajax.check(requestParameters, "limit", scrutariConfig.getLimit()); - Scrutari.Ajax.check(requestParameters, "starttype", "in_all"); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, - success: function (data, textStatus) { - Scrutari.Ajax.success(data, "ficheSearchResult", ficheSearchResultCallback, apiErrorCallback); - } - }); -}; -Scrutari.Ajax.loadExistingFicheSearchResult = function (scrutariConfig, requestParameters, existingFicheSearchResultCallback) { - if (!requestParameters) { - requestParameters = new Object(); - } - requestParameters.type = "q-fiche"; - if ((scrutariConfig.options.ficheFields) || (scrutariConfig.options.motcleFields)) { - Scrutari.Ajax.check(requestParameters, "fichefields", scrutariConfig.options.ficheFields); - Scrutari.Ajax.check(requestParameters, "motclefields", scrutariConfig.options.motcleFields); - } - Scrutari.Ajax.check(requestParameters, "lang", scrutariConfig.lang); - Scrutari.Ajax.check(requestParameters, "fieldvariant", scrutariConfig.options.queryVariant); - Scrutari.Ajax.check(requestParameters, "insert", "-searchmeta,-motclearray"); - Scrutari.Ajax.check(requestParameters, "warnings", 1); - Scrutari.Ajax.check(requestParameters, "version", 3); - Scrutari.Ajax.check(requestParameters, "start", 1); - Scrutari.Ajax.check(requestParameters, "limit", scrutariConfig.getLimit()); - $.ajax({ - url: scrutariConfig.getJsonUrl(), - dataType: scrutariConfig.options.dataType, - data: requestParameters, + Scrutari.Ajax.load({ + url: api.getJsonUrl(), + dataType: api.options.dataType, + data: api.buildRequestParameters("q-fiche", defaultParameters, requestParameters), success: function (data, textStatus) { Scrutari.Ajax.success(data, "ficheSearchResult", existingFicheSearchResultCallback); } }); }; -Scrutari.Ajax.success = function(ajaxResult, objectNames, objectCallback, apiErrorCallback) { +Scrutari.Ajax.success = function(ajaxResult, objectNames, objectCallback, errorCallback) { if (ajaxResult.hasOwnProperty("error")) { - if (apiErrorCallback) { - apiErrorCallback(ajaxResult.error); + if (errorCallback) { + errorCallback(ajaxResult.error); } else { Scrutari.logError(ajaxResult.error); } } else { Scrutari.Ajax.logWarnings(ajaxResult); + if (!objectCallback) { + return; + } if (Array.isArray(objectNames)) { let apiObjectArray = new Array(); for(let objectName of objectNames) { @@ -434,7 +468,7 @@ Scrutari.Ajax.success = function(ajaxResult, objectNames, objectCallback, apiErr } else { let objectName = objectNames; if (!ajaxResult.hasOwnProperty(objectName)) { - $.error(objectName + " object is missing in json response"); + throw new Error(objectName + " object is missing in json response"); } else { objectCallback(ajaxResult[objectName]); } @@ -462,26 +496,9 @@ Scrutari.Ajax.logWarnings = function (ajaxResult) { Scrutari.log(warningsMessage); } }; -Scrutari.Ajax.check = function (obj, name, defaultValue) { - if (!obj.hasOwnProperty(name)) { - if (defaultValue) { - obj[name] = defaultValue; - } else { - obj[name] = ""; - } - } -}; Scrutari.Meta = function (engineInfo) { this.engineInfo = engineInfo; }; -Scrutari.Meta.load = function(scrutariConfig, callback) { - Scrutari.Ajax.loadEngineInfo(scrutariConfig, null, function (engineInfo) { - let scrutariMeta = new Scrutari.Meta(engineInfo); - if (callback) { - callback(scrutariMeta); - } - }); -}; Scrutari.Meta.prototype.getAttributeArray = function (familyName) { if (!this.engineInfo.hasOwnProperty("attributes")) { return new Array(); @@ -623,7 +640,7 @@ Scrutari.Meta.prototype.getCorpusLangFicheCount = function (code, langArray) { } var ficheCount = 0; for(let langObj of corpus.stats.langArray) { - if ($.inArray(langObj.lang, langArray) !== -1) { + if (langArray.indexOf(langObj.lang) !== -1) { ficheCount += langObj.fiche; } } @@ -661,7 +678,7 @@ Scrutari.Meta.prototype.getGlobalFicheCount = function () { Scrutari.Meta.prototype.getGlobalLangFicheCount = function (langArray) { var ficheCount = 0; for(let langObj of this.engineInfo.stats.langArray) { - if ($.inArray(langObj.lang, langArray) !== -1) { + if (langArray.indexOf(langObj.lang) !== -1) { ficheCount += langObj.fiche; } } @@ -712,8 +729,14 @@ Scrutari.Meta.prototype.getTitle = function () { Scrutari.Meta.prototype.withCategory = function () { return this.engineInfo.hasOwnProperty("categoryMap"); }; -Scrutari.Complete = {}; -Scrutari.Complete.bythesaurusArray = function (fiche, scrutariMeta, motcleProvider) { +Scrutari.Meta.load = function(api, callback) { + api.initMeta(callback); +}; +Scrutari.Completor = function (scrutariMeta) { + this.scrutariMeta = scrutariMeta; +}; +Scrutari.Completor.prototype.bythesaurusArray = function (fiche, motcleProvider) { + var scrutariMeta = this.scrutariMeta; if (!fiche.hasOwnProperty("bythesaurusMap")) { return false; } @@ -739,7 +762,8 @@ Scrutari.Complete.bythesaurusArray = function (fiche, scrutariMeta, motcleProvid fiche._bythesaurusArray = _bythesaurusArray; return true; }; -Scrutari.Complete.complementTitle = function (fiche, scrutariMeta) { +Scrutari.Completor.prototype.complementTitle = function (fiche) { + var scrutariMeta = this.scrutariMeta; if (fiche.hasOwnProperty("mcomplementArray")) { for(let mcomplement of fiche.mcomplementArray) { mcomplement.title = scrutariMeta.getComplementTitle(fiche.codecorpus, mcomplement.number); @@ -749,7 +773,7 @@ Scrutari.Complete.complementTitle = function (fiche, scrutariMeta) { return false; } }; -Scrutari.Complete.icon = function (fiche) { +Scrutari.Completor.prototype.icon = function (fiche) { if (fiche.hasOwnProperty("icon")) { fiche._icon = fiche.icon; return true; @@ -760,7 +784,8 @@ Scrutari.Complete.icon = function (fiche) { return false; } }; -Scrutari.Complete.markedAttributeArray = function (fiche, scrutariMeta, familyName ) { +Scrutari.Completor.prototype.markedAttributeArray = function (fiche, familyName ) { + var scrutariMeta = this.scrutariMeta; let attributeArray = scrutariMeta.getAttributeArray(familyName); if (attributeArray.length === 0) { return false; @@ -779,7 +804,7 @@ Scrutari.Complete.markedAttributeArray = function (fiche, scrutariMeta, familyNa fiche["_" + familyName + "AttributeArray"] = objArray; return true; }; -Scrutari.Complete.motcleArray = function (fiche, motcleProvider) { +Scrutari.Completor.prototype.motcleArray = function (fiche, motcleProvider) { if (!fiche.hasOwnProperty("codemotcleArray")) { return false; } @@ -797,42 +822,23 @@ Scrutari.Complete.motcleArray = function (fiche, motcleProvider) { return false; } }; -Scrutari.Complete.target = function (fiche, target) { +Scrutari.Completor.prototype.target = function (fiche, target) { fiche._target = target; return true; }; -Scrutari.Complete.thumbnail = function (fiche) { +Scrutari.Completor.prototype.thumbnail = function (fiche) { if (fiche.hasOwnProperty("thumbnail")) { fiche._thumbnail = fiche.thumbnail; return true; - } else if (Scrutari.Complete.hasAttribute(fiche, "sct:thumbnail")) { + } else if (Scrutari.hasAttribute(fiche, "sct:thumbnail")) { fiche._thumbnail = fiche.attrMap["sct:thumbnail"][0]; return true; } else { return false; } }; -Scrutari.Complete.hasAttribute = function (fiche, attributeKey) { - if (!fiche.attrMap) { - return false; - } - if (attributeKey) { - return fiche.attrMap.hasOwnProperty(attributeKey); - } else { - return true; - } -}; -Scrutari.Complete.hasMarkedAttribute = function (fiche, attributeKey) { - if (!fiche.mattrMap) { - return false; - } - if (attributeKey) { - return fiche.mattrMap.hasOwnProperty(attributeKey); - } else { - return true; - } -}; -Scrutari.Result = function (ficheSearchResult, requestParameters, groupSortFunction) { +Scrutari.Result = function (api, ficheSearchResult, requestParameters, groupSortFunction) { + this.api = api; this.ficheSearchResult = ficheSearchResult; this.requestParameters = requestParameters; this.searchMeta = ficheSearchResult.searchMeta; @@ -846,11 +852,11 @@ Scrutari.Result = function (ficheSearchResult, requestParameters, groupSortFunct this.motcleMap["code_" + motcle.codemotcle] = motcle; } } -}; -Scrutari.Result.newSearch = function (scrutariConfig, requestParameters, callback, apiErrorCallback) { - Scrutari.Ajax.loadFicheSearchResult(scrutariConfig, requestParameters, _ficheSearchResultCallback, apiErrorCallback); - function _ficheSearchResultCallback(ficheSearchResult) { - callback(new Scrutari.Result(ficheSearchResult, requestParameters, scrutariConfig.options.groupSortFunction)); + this.notfoundArray = []; + for(let reportItem of ficheSearchResult.searchMeta.reportArray) { + if (reportItem.canonicalArray.length === 0) { + this.notfoundArray.push(reportItem); + } } }; Scrutari.Result.prototype.getQId = function () { @@ -923,28 +929,26 @@ Scrutari.Result.prototype.isPaginationLoaded = function (paginationLength, pagin } return false; }; -Scrutari.Result.prototype.loadPagination = function (scrutariConfig, paginationLength, paginationNumber, ficheGroupName, callback) { - var group; +Scrutari.Result.prototype.loadPagination = function (paginationLength, paginationNumber, ficheGroupName, callback) { + var currentGroup; var ficheCount; - var ficheArray; var isWithGroup; if (ficheGroupName) { - group = this.getFicheGroup(ficheGroupName); - if (!group) { + currentGroup = this.getFicheGroup(ficheGroupName); + if (!currentGroup) { return true; } - ficheCount = group.ficheCount; - ficheArray = group.ficheArray; + ficheCount = currentGroup.ficheCount; isWithGroup = true; } else { if (this.ficheGroupArray.length === 0) { return true; } - group = this.ficheGroupArray[0]; + currentGroup = this.ficheGroupArray[0]; ficheCount = this.getFicheCount(); isWithGroup = false; } - var length = ficheArray.length; + var length = currentGroup.ficheArray.length; if (length === ficheCount) { return; } @@ -956,23 +960,25 @@ Scrutari.Result.prototype.loadPagination = function (scrutariConfig, paginationL if (isWithGroup) { requestParameters.starttype = "in:" + ficheGroupName; } - Scrutari.Ajax.loadExistingFicheSearchResult(scrutariConfig, requestParameters, function (ficheSearchResult) { - if (isWithGroup) { - for(let newGroup of ficheSearchResult.ficheGroupArray) { - if (newGroup.category.name === group.category.name) { - group.ficheArray = group.ficheArray.concat(newGroup.ficheArray); + this.api.loadExistingFicheSearch({ + requestParameters: requestParameters, + callback: function (ficheSearchResult) { + if (isWithGroup) { + for(let newGroup of ficheSearchResult.ficheGroupArray) { + if (newGroup.category.name === currentGroup.category.name) { + currentGroup.ficheArray = currentGroup.ficheArray.concat(newGroup.ficheArray); + } + } + } else { + if (ficheSearchResult.ficheGroupArray.length > 0) { + currentGroup.ficheArray = currentGroup.ficheArray.concat(ficheSearchResult.ficheGroupArray[0].ficheArray); } } - } else { - var newCount = ficheSearchResult.ficheGroupArray.length; - if (newCount > 0) { - group.ficheArray = group.ficheArray.concat(ficheSearchResult.ficheGroupArray[0].ficheArray); + if (callback) { + callback(); } } - if (callback) { - callback(); - } - }); + }); }; Scrutari.Result.prototype.extractFicheArray = function (paginationLength, paginationNumber, ficheGroupName) { var ficheArray; @@ -1023,13 +1029,103 @@ Scrutari.Result.prototype.getMotcleArray = function (motcleFilter) { return true; } }; +Scrutari.jQuery = {}; +Scrutari.jQuery.find = function () { + switch(arguments.length) { + case 0: + throw new Error("No argument"); + case 1: { + let uniqueArg = arguments[0]; + if (typeof uniqueArg === "string") { + return _byId(uniqueArg); + } else { + return _byProperties(uniqueArg); + } + } + case 2: { + let arg1 = arguments[0]; + let arg2 = arguments[1]; + if ((typeof arg1 === "string") && (typeof arg2 === "string")) { + return _byId(arg1 + "_" + arg2); + } else { + return _find(arg1, arg2); + } + } + default: + return _byId(Array.from(arguments).join("_")); + } + function _byId(id) { + return $(document.getElementById(id)); + } + function _byProperties(properties) { + return $(Scrutari.jQuery.toCssSelector(properties)); + } + function _find(jqArgument, properties) { + return Scrutari.jQuery.convert(jqArgument).find(Scrutari.jQuery.toCssSelector(properties)); + } +}; +Scrutari.jQuery.convert = function (jqArgument) { + if (jqArgument.jquery) { + return jqArgument; + } else { + return $(jqArgument); + } +}; +Scrutari.jQuery.exists = function (jqArgument) { + return Scrutari.jQuery.convert(jqArgument).length > 0; +}; +Scrutari.jQuery.toCssSelector = function (properties) { + var query = ""; + var elementName = false; + var suffix = ""; + for(let key in properties) { + let value = properties[key]; + if (!key.startsWith("_")) { + if (value === true) { + query += "[" + Scrutari.jQuery.toDataAttribute(key) + "]"; + } else { + query += "[" + Scrutari.jQuery.toDataAttribute(key) + "='" + value + "']"; + } + } else if (key === "_checked") { + if (value) { + suffix += ":checked"; + } else { + suffix += ":not(:checked)"; + } + } else if (key === "_type") { + query += "[type='" + value + "']"; + } else if (key === "_name") { + query += "[name='" + value + "']"; + } else if (key === "_value") { + query += "[value='" + value + "']"; + } else if (key === "_element") { + elementName = value; + } + } + if (elementName) { + query = elementName + query; + } + query += suffix; + return query; +}; +Scrutari.jQuery.toDataAttribute = function (camelCaseString) { + return "data-" + camelCaseString.replace(/[A-Z]/g, function (upperLetter) { + return "-" + upperLetter.toLowerCase(); + }); +}; +Scrutari.jQuery.find.toSelector = Scrutari.jQuery.toCssSelector; +Scrutari.toCssQuery = Scrutari.jQuery.toCssSelector; +Scrutari.toDataAttribute = Scrutari.jQuery.toDataAttribute; +Scrutari.convert = Scrutari.jQuery.convert; +Scrutari.exists = Scrutari.jQuery.exists; +Scrutari.$ = Scrutari.jQuery.find; Scrutari.Utils = {}; Scrutari.Utils.divideIntoColumns = function (objectArray, jqArgument, objectTemplate) { var objectCount = objectArray.length; if (objectCount === 0) { return; } - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); var elementCount = $elements.length; if (elementCount === 0) { Scrutari.log("HtmlElement selection with jqArgument is empty "); @@ -1116,22 +1212,22 @@ Scrutari.Utils.getTabArray = function (ficheCount, paginationLength, currentPagi return result; }; Scrutari.Utils.disable = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.prop('disabled', true); return $elements; }; Scrutari.Utils.enable = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.prop('disabled', false); return $elements; }; Scrutari.Utils.uncheck = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.prop('checked', false); return $elements; }; Scrutari.Utils.check = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.prop('checked', true); return $elements; }; @@ -1146,7 +1242,7 @@ Scrutari.Utils.toggle = function (jqElement, stateDataKey) { return state; }; Scrutari.Utils.toggle.disabled = function (jqArgument, state) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); if (state === 'off') { $elements.prop('disabled', true); } else { @@ -1155,7 +1251,7 @@ Scrutari.Utils.toggle.disabled = function (jqArgument, state) { return $elements; }; Scrutari.Utils.toggle.text = function (jqArgument, alterDataKey) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); var length = $elements.length; for(var i = 0; i < length; i++) { var jqEl = $($elements[i]); @@ -1167,7 +1263,7 @@ Scrutari.Utils.toggle.text = function (jqArgument, alterDataKey) { return $elements; }; Scrutari.Utils.toggle.classes = function (jqArgument, state, onClass, offClass) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); if (state === 'off') { $elements.addClass(offClass).removeClass(onClass); } else { @@ -1393,9 +1489,7 @@ Scrutari.Utils.mark = function (markArray, classAttribute) { classAttribute = "scrutari-Mark"; } var html = ""; - var length = markArray.length; - for (var i = 0; i < length; i++) { - var obj = markArray[i]; + for (let obj of markArray) { if (typeof obj === 'string') { html += Scrutari.escape(obj); } else if (obj.s) { @@ -1406,6 +1500,17 @@ Scrutari.Utils.mark = function (markArray, classAttribute) { } return html; }; +Scrutari.Utils.unmark = function (markArray) { + var text = ""; + for (let obj of markArray) { + if (typeof obj === 'string') { + text += obj; + } else if (obj.s) { + text += obj.s; + } + } + return text; +}; Scrutari.Utils.formatSearchSequence = function (client, scrutariResult) { var q = scrutariResult.getQ(); q = q.replace(/\&\&/g, client.loc('_ and')); @@ -1968,7 +2073,7 @@ Scrutari.History.prototype.setCurrentResult = function (scrutariResult, searchOr } function _addToHistory () { let $historyListBlock = client.$block("historyList"); - if (!Scrutari.exists($historyListBlock)) { + if (!Scrutari.jQuery.exists($historyListBlock)) { return; } if (history.currentHistoryName) { @@ -2039,11 +2144,13 @@ Scrutari.History.prototype.clear = function () { this._scrutariResultMap.clear(); this.client.$block("historyList").empty(); }; -Scrutari.Client = function (scrutariConfig, clientId) { - this.scrutariConfig = scrutariConfig; +Scrutari.Client = function (api, clientId) { + this.api = api; + this.scrutariConfig = api; this.clientId = clientId; this.history = new Scrutari.History(this); this.scrutariMeta = null; + this.completor = null; this.stats = null; this.isWaiting = false; this.options = { @@ -2067,6 +2174,8 @@ Scrutari.Client = function (scrutariConfig, clientId) { uiInit: null }, cssClasses: { + }, + structureOptions: { } }; this.functions = { @@ -2123,7 +2232,7 @@ Scrutari.Client.prototype.loc = function (locKey) { }; Scrutari.Client.prototype.toPermalink = function (qId) { if (this.options.permalinkPattern) { - return this.scrutariConfig.getPermalinkUrl(qId, this.options.permalinkPattern); + return this.api.getPermalinkUrl(qId, this.options.permalinkPattern); } return null; }; @@ -2175,10 +2284,10 @@ Scrutari.Client.prototype.render = function (templateName, context, helpers) { return templateFunction(context, helpers); }; Scrutari.Client.prototype.hook = function (name) { - if (!this.options.hooks.hasOwnProperty(name)) { + var hook = _getHook(this.options.hooks, name); + if (!hook) { return; } - var hook = this.options.hooks[name]; if (typeof hook === "function") { var newArgs = new Array(); var argLength = arguments.length; @@ -2189,6 +2298,24 @@ Scrutari.Client.prototype.hook = function (name) { } hook.apply(this, newArgs); } + function _getHook(hooks, name) { + if (hooks.hasOwnProperty(name)) { + return hooks[name]; + } + let alias; + switch(name) { + case "afterResultProcess": + alias = "showResult"; + break; + case "afterPaginationChange": + alias = "paginationChange"; + break; + } + if ((alias) && (hooks.hasOwnProperty(alias))) { + return hooks[alias]; + } + return false; + } }; Scrutari.Client.prototype.getFicheBodyTemplateArray = function (fiche, categoryName) { var array = this.hook("getFicheBodyTemplateArray", fiche, categoryName); @@ -2198,8 +2325,15 @@ Scrutari.Client.prototype.getFicheBodyTemplateArray = function (fiche, categoryN return this._ficheBodyTemplateArray; } }; +Scrutari.Client.prototype.startOverlay = function (settings) { + return Scrutari.Overlay.start(settings); +}; +Scrutari.Client.prototype.endOverlay = function (overlayId, callback) { + return Scrutari.Overlay.end(overlayId, callback); +}; Scrutari.Client.prototype.$ = function (properties) { - return Scrutari.$("#" + this.clientId, properties); + var $client = Scrutari.jQuery.find(this.clientId); + return Scrutari.jQuery.find($client, properties); }; Scrutari.Client.prototype.$area = function (name, action) { var $area = this.$({scrutariArea: name}); @@ -2234,7 +2368,7 @@ Scrutari.Client.prototype.$button = function (name, target) { } }; Scrutari.Client.prototype.$component = function ($parent, name) { - return Scrutari.$($parent, {scrutariComponent: name}); + return Scrutari.jQuery.find($parent, {scrutariComponent: name}); }; Scrutari.Client.prototype.$count = function (name, action, value) { var $count = this.$({scrutariCount: name}); @@ -2288,7 +2422,7 @@ Scrutari.Client.prototype.$link = function (name) { return this.$({scrutariLink: name}); }; Scrutari.Client.prototype.$modal = function (name) { - return Scrutari.$({scrutariModal: name}); + return Scrutari.jQuery.find({scrutariModal: name}); }; Scrutari.Client.prototype.$panel = function (name, action) { var $panel = this.$({scrutariPanel: name}); @@ -2305,11 +2439,11 @@ Scrutari.Client.prototype.$panel = function (name, action) { return $panel; }; Scrutari.Client.prototype.show = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.removeClass(this.cssClasses.hidden); }; Scrutari.Client.prototype.hide = function (jqArgument) { - var $elements = Scrutari.convert(jqArgument); + var $elements = Scrutari.jQuery.convert(jqArgument); $elements.addClass(this.cssClasses.hidden); }; Scrutari.Client.prototype.scrollToResult = function () { @@ -2403,31 +2537,41 @@ Scrutari.Client.prototype.initForms = function () { client.$form('mainsearch').submit(function () { let q = this["q"].value.trim(); if (q.length > 0) { - let requestParameters = client.buildRequestParameters(); - requestParameters["log"] = "all"; - requestParameters["q"] = q; + let requestParameters = client.buildSearchRequestParameters({ + "log": "all", + "q": q + }); client.startLoading(); client.hook("newSearch", requestParameters, "mainsearch"); - Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, function (scrutariResult) {client.mainsearchResultCallback(scrutariResult);}, function (error) {client.mainsearchErrorCallback(error);}); + client.api.newSearch({ + requestParameters: requestParameters, + callback: function (scrutariResult) {client.mainsearchResultCallback(scrutariResult);}, + errorCallback: function (error) {client.mainsearchErrorCallback(error);} + }); } return false; }); client.$form('subsearch').submit(function () { let q = this["q"].value.trim(); if ((q.length > 0) && (client.history.mainCurrentScrutariResult)) { - let requestParameters = client.buildRequestParameters(); - requestParameters["q"] = q; - requestParameters["flt-qid"] = client.history.mainCurrentScrutariResult.getQId(); + let requestParameters = client.buildSearchRequestParameters({ + "q": q, + "flt-qid": client.history.mainCurrentScrutariResult.getQId() + }); client.startLoading(); client.hook("newSearch", requestParameters, "subsearch"); - Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, function (scrutariResult) {client.subsearchResultCallback(scrutariResult);}, function (error) {client.subsearchErrorCallback(error);}); + client.api.newSearch({ + requestParameters: requestParameters, + callback: function (scrutariResult) {client.mainsearchResultCallback(scrutariResult);}, + errorCallback: function (error) {client.mainsearchErrorCallback(error);} + }); } return false; }); }; Scrutari.Client.prototype.initButtons = function () { var client = this; - $("#" + client.clientId).on("click", Scrutari.toCssQuery({scrutariButton: true}), function () { + Scrutari.jQuery.find(client.clientId).on("click", Scrutari.jQuery.toCssSelector({scrutariButton: true}), function () { let actionHandler; if (client.functions.actionHandler) { actionHandler = client.functions.actionHandler; @@ -2497,7 +2641,7 @@ Scrutari.Client.prototype.initButtons = function () { }; Scrutari.Client.prototype.initChangeListeners = function () { var client = this; - $("#" + client.clientId).on("input", "input", function () { + Scrutari.jQuery.find(this.clientId).on("input", "input", function () { let changeHandler; if (client.functions.changeHandler) { changeHandler = client.functions.changeHandler; @@ -2527,6 +2671,7 @@ Scrutari.Client.prototype.initChangeListeners = function () { }; Scrutari.Client.prototype.mainsearchResultCallback = function (scrutariResult) { var client = this; + Scrutari.log(client); client.processResult(scrutariResult, "mainsearch"); client.endLoading(); if (client.functions.mainsearchResultCallback) { @@ -2567,27 +2712,32 @@ Scrutari.Client.prototype.checkInitialQuery = function () { var initialQId = client.options.initialQId; if (initialQuery) { var $mainSearchForm = client.$form('mainsearch'); - if (Scrutari.exists($mainSearchForm)) { + if (Scrutari.jQuery.exists($mainSearchForm)) { $mainSearchForm.find("input[name='q']").val(initialQuery); $mainSearchForm.submit(); } } else if (initialQId) { - var requestParameters = client.buildRequestParameters(); - requestParameters["qid"] = initialQId; + var requestParameters = client.buildSearchRequestParameters({ + "qid": initialQId + }); client.startLoading(); client.hook("newSearch", requestParameters, "qidsearch"); - Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, function (scrutariResult) { - var $mainSearchForm = client.$form('mainsearch'); - $mainSearchForm.find("input[name='q']").val(scrutariResult.searchMeta.q); - $mainSearchForm.find("input[name='q-mode'][value='operation']").click(); - if (client.functions.initFilterByQuery) { - client.functions.initFilterByQuery(client, scrutariResult); - } - client.mainsearchResultCallback(scrutariResult); - }, function (error) {client.mainsearchErrorCallback(error);}); + client.api.newSearch({ + requestParameters: requestParameters, + callback: function (scrutariResult) { + let $mainSearchForm = client.$form('mainsearch'); + $mainSearchForm.find("input[name='q']").val(scrutariResult.searchMeta.q); + $mainSearchForm.find("input[name='q-mode'][value='operation']").click(); + if (client.functions.initFilterByQuery) { + client.functions.initFilterByQuery(client, scrutariResult); + } + client.mainsearchResultCallback(scrutariResult); + }, + errorCallback: function (error) {client.mainsearchErrorCallback(error);} + }); } }; -Scrutari.Client.prototype.buildRequestParameters = function () { +Scrutari.Client.prototype.buildSearchRequestParameters = function (customParameters) { var client = this; var requestParameters = new Object(); _checkFilter("baselist", "base"); @@ -2603,11 +2753,16 @@ Scrutari.Client.prototype.buildRequestParameters = function () { if (periode) { requestParameters["flt-date"] = periode; } - if (Scrutari.exists(client.$input_checked("wildchar", "end"))) { + if (Scrutari.jQuery.exists(client.$input_checked("wildchar", "end"))) { requestParameters.wildchar = "end"; } else { requestParameters.wildchar = "none"; } + if (customParameters) { + for(let propKey in customParameters) { + requestParameters[propKey] = customParameters[propKey]; + } + } return requestParameters; function _checkFilter (paramName, target) { if ((client.functions.isFilterEnable) && (client.functions.isFilterEnable(client, target))) { @@ -2652,7 +2807,7 @@ Scrutari.Client.prototype.getTemplateHtml = function (name) { }; Scrutari.Client.prototype.formatNumber = function (number) { if (Number.prototype.toLocaleString) { - return number.toLocaleString(this.scrutariConfig.lang); + return number.toLocaleString(this.api.lang); } else { return number; } @@ -2662,23 +2817,23 @@ Scrutari.Client.prototype.completeFiche = function(scrutariResult, fiche, catego return fiche; } var client = this; - var scrutariMeta = client.scrutariMeta; + var completor = client.completor; var options = client.options; - Scrutari.Complete.complementTitle(fiche, scrutariMeta); - Scrutari.Complete.motcleArray(fiche, _motcleProvider); - Scrutari.Complete.bythesaurusArray(fiche, scrutariMeta, _motcleProvider); - if (Scrutari.Complete.hasMarkedAttribute(fiche)) { - Scrutari.Complete.markedAttributeArray(fiche, scrutariMeta, "primary"); - Scrutari.Complete.markedAttributeArray(fiche, scrutariMeta, "secondary"); + completor.complementTitle(fiche); + completor.motcleArray(fiche, _motcleProvider); + completor.bythesaurusArray(fiche, _motcleProvider); + if (Scrutari.hasMarkedAttribute(fiche)) { + completor.markedAttributeArray(fiche, "primary"); + completor.markedAttributeArray(fiche, "secondary"); } if (!options.ignoreThumbnail) { - Scrutari.Complete.thumbnail(fiche); + completor.thumbnail(fiche); } if (!options.ignoreIcon) { - Scrutari.Complete.icon(fiche); + completor.icon(fiche); } if (options.ficheTarget) { - Scrutari.Complete.target(fiche, options.ficheTarget); + completor.target(fiche, options.ficheTarget); } fiche._bodyTemplateArray = client.getFicheBodyTemplateArray(fiche, categoryName); fiche._isCompleted = true; @@ -2724,14 +2879,15 @@ Scrutari.Client.prototype.endLoading = function () { this.functions.endLoading(this); } }; -Scrutari.Client.init = function (scrutariConfig, clientId, options, callback) { +Scrutari.Client.init = function (api, clientId, options, callback) { if (!$.templates) { throw new Error("JsRender is not installed"); } var uiInitFunction = Scrutari.DefaultUi.init; - Scrutari.Meta.load(scrutariConfig, function (scrutariMeta) { - var client = new Scrutari.Client(scrutariConfig, clientId); + api.initMeta(function (scrutariMeta) { + var client = new Scrutari.Client(api, clientId); client.scrutariMeta = scrutariMeta; + client.completor = new Scrutari.Completor(scrutariMeta); client.stats = new Scrutari.Stats(scrutariMeta); _checkOptions(client, scrutariMeta); _initHelpers(client); @@ -2822,6 +2978,9 @@ Scrutari.Client.init = function (scrutariConfig, clientId, options, callback) { }, scrutari_mark: function (markArray) { return Scrutari.Utils.mark(markArray, client.cssClasses.mark); + }, + scrutari_unmark: function (markArray) { + return Scrutari.Utils.unmark(markArray); } }); } @@ -2858,26 +3017,32 @@ Scrutari.Client.init = function (scrutariConfig, clientId, options, callback) { Scrutari.Pagination = function (client, ficheGroupName) { this.client = client; this.ficheGroupName = ficheGroupName; - this.paginationLength = client.scrutariConfig.options.paginationLength; + this.paginationLength = client.api.options.paginationLength; }; Scrutari.Pagination.prototype.change = function (paginationNumber) { var client = this.client; var ficheGroupName = this.ficheGroupName; var scrutariResult = client.history.currentScrutariResult; var paginationFicheArray = this.getPaginationFicheArray(scrutariResult, paginationNumber); + var hookParams; + if (ficheGroupName) { + hookParams = { + paginationNumber: paginationNumber, + ficheGroupName: ficheGroupName, + categoryName: ficheGroupName + }; + } else { + hookParams = { + paginationNumber:paginationNumber + }; + } if (!paginationFicheArray) { return; } + client.hook("beforePaginationChange", paginationFicheArray, hookParams); this.updateFicheList(scrutariResult, paginationFicheArray); this.updateTabs(this.getFicheCount(scrutariResult), paginationNumber); - var hookParams = { - paginationNumber:paginationNumber - }; - if (ficheGroupName) { - hookParams.ficheGroupName = ficheGroupName; - hookParams.categoryName = ficheGroupName; - } - client.hook("paginationChange", paginationFicheArray, hookParams); + client.hook("afterPaginationChange", paginationFicheArray, hookParams); }; Scrutari.Pagination.prototype.getPaginationFicheArray = function (scrutariResult, paginationNumber) { var pagination = this; @@ -2890,7 +3055,7 @@ Scrutari.Pagination.prototype.getPaginationFicheArray = function (scrutariResult } client.$block("ficheList", ficheGroupName).html(client.render("loading", {scrutariResult: scrutariResult})); client.isWaiting = true; - scrutariResult.loadPagination(client.scrutariConfig, paginationLength, paginationNumber, ficheGroupName, function () { + scrutariResult.loadPagination(paginationLength, paginationNumber, ficheGroupName, function () { client.isWaiting = false; pagination.change(paginationNumber); }); @@ -2945,7 +3110,7 @@ Scrutari.Process.prototype.run = function () { var client = this.client; var scrutariResult = this.scrutariResult; var searchOrigin = this.searchOrigin; - client.hook("processResult", scrutariResult, searchOrigin); + client.hook("beforeResultProcess", scrutariResult, searchOrigin); client.history.setCurrentResult(scrutariResult, searchOrigin); client.clearPagination(); var ficheCount = scrutariResult.getFicheCount(); @@ -2956,7 +3121,7 @@ Scrutari.Process.prototype.run = function () { this.checkThreshold(ficheCount); this.updateLinks(); this.addPaginations($paginationBlock); - client.hook("showResult", scrutariResult, searchOrigin); + client.hook("afterResultProcess", scrutariResult, searchOrigin); }; Scrutari.Process.prototype.getPaginationBlock = function () { var $paginationBlock = this.client.$block("paginationBlock"); @@ -2988,7 +3153,7 @@ Scrutari.Process.prototype.processEmpty = function ($paginationBlock) { }; Scrutari.Process.prototype.checkThreshold = function (ficheCount) { var client = this.client; - if (ficheCount >= client.scrutariConfig.options.subsearchThreshold) { + if (ficheCount >= client.api.options.subsearchThreshold) { client.$hidden("threshold", 'show'); } else { client.$hidden("threshold", 'hide'); @@ -3006,7 +3171,7 @@ Scrutari.Process.prototype.updateLinks = function () { _updateDownloadHref("csv"); _updateDownloadHref("atom"); function _updateDownloadHref(extension) { - client.$link(extension).attr("href", client.scrutariConfig.getDownloadUrl(qId, extension)); + client.$link(extension).attr("href", client.api.getDownloadUrl(qId, extension)); } }; Scrutari.Process.prototype.addPaginations = function ($paginationBlock) { @@ -3066,7 +3231,7 @@ Scrutari.Process.prototype.addUniquePagination = function ($paginationBlock) { Scrutari.DefaultUi = {}; Scrutari.DefaultUi.init = function (client) { var scrutariMeta = client.scrutariMeta; - $("#" + client.clientId).html(client.compileStructure("main")); + $("#" + client.clientId).html(client.compileStructure("main", client.options.structureOptions)); client.initForms(); client.initButtons(); client.initChangeListeners(); @@ -3074,9 +3239,9 @@ Scrutari.DefaultUi.init = function (client) { client.$count('stats-global', 'update', scrutariMeta.getGlobalFicheCount()); client.$hidden('init', 'show'); client.show(client.$button('parametersDisplay')); - var locales = client.scrutariConfig.lang; + var locales = client.api.lang; var langArray = scrutariMeta.getLangArray(); - if ((langArray.length > 1) && (Scrutari.exists(client.$panel('lang')))) { + if ((langArray.length > 1) && (Scrutari.jQuery.exists(client.$panel('lang')))) { for(var i = 0, len = langArray.length; i < len; i++) { var title = ""; var code = langArray[i].lang; @@ -3092,19 +3257,19 @@ Scrutari.DefaultUi.init = function (client) { } Scrutari.DefaultUi.initColumns(client, langArray,"lang"); } - if ((scrutariMeta.withCategory()) && (Scrutari.exists(client.$panel('category')))) { + if ((scrutariMeta.withCategory()) && (Scrutari.jQuery.exists(client.$panel('category')))) { var categoryArray = scrutariMeta.getCategoryArray(Scrutari.Utils.getCategorySortFunction(client.options.categorySort, locales)); Scrutari.DefaultUi.initColumns(client, categoryArray, "category"); } if (client.options.withCorpus) { - if (Scrutari.exists(client.$panel('corpus'))) { + if (Scrutari.jQuery.exists(client.$panel('corpus'))) { var corpusArray = scrutariMeta.getCorpusArray(Scrutari.Utils.getCorpusSortFunction(client.options.corpusSort, locales)); if (corpusArray.length > 1) { Scrutari.DefaultUi.initColumns(client, corpusArray, "corpus"); } } } else { - if (Scrutari.exists(client.$panel('base'))) { + if (Scrutari.jQuery.exists(client.$panel('base'))) { var baseArray = scrutariMeta.getBaseArray(Scrutari.Utils.getBaseSortFunction(client.options.baseSort, locales)); if (baseArray.length > 1) { Scrutari.DefaultUi.initColumns(client, baseArray, "base"); @@ -3200,7 +3365,7 @@ Scrutari.DefaultUi.modalAction = function (client, name, action) { switch(action) { case 'show': if (!$modal.data("overlayId")) { - var overlayId = Scrutari.Overlay.start({ + var overlayId = client.startOverlay({ header: $modal.children("header").html(), content: $modal.children("div").html(), footer: $modal.children("footer").html(), @@ -3213,7 +3378,7 @@ Scrutari.DefaultUi.modalAction = function (client, name, action) { } break; case 'hide': - Scrutari.Overlay.end($modal.data("overlayId")); + client.endOverlay($modal.data("overlayId")); break; } }; @@ -3317,7 +3482,7 @@ Scrutari.DefaultUi.initMainTitle = function (client) { html += Scrutari.escape(title); } else { html += "["; - html += client.scrutariConfig.name; + html += client.api.name; html += "]"; } } @@ -3404,7 +3569,7 @@ Scrutari.DefaultUi.filterChange = function (client) { var $el = $(element); var key = element.dataset.scrutariStatKey; var ficheCount = client.stats.getFicheCount(type, key); - var $statTitle = Scrutari.$parents($el, {scrutariComponent: "stat-text"}); + var $statTitle = $el.parents(Scrutari.jQuery.toCssSelector({scrutariComponent: "stat-text"})); let excludedClass = client.cssClasses.excluded; if (ficheCount != element.dataset.scrutariStatDefault) { if (ficheCount === 0) {