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")}}
{{for scrutariResult.notfoundArray}} - {{> text}} {{if neighbourArray.length > 0}} ({{>~scrutari_loc("_ result_neighbourlist")}}{{>~scrutari_loc("_ colon")}} {{for neighbourArray ~len=neighbourArray.length}}{{> neighbour}}{{if #index != (~len -1)}}, {{/if}}{{/for}}) {{else}} ({{>~scrutari_loc("_ result_noneighbour")}}) {{/if}}
{{/for}}
{{/if}}',
'pagination_groups':' {{for array}} {{/for}}
{{for array}} {{/for}}',
'pagination_unique':' ',
'tabs':''
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) {