2914 lines
101 KiB
JavaScript
2914 lines
101 KiB
JavaScript
/* version: 1.3.2 */
|
||
var Scrutari = {};
|
||
Scrutari.log = function (msg) {
|
||
if ((console) && (console.log)) {
|
||
console.log(msg);
|
||
}
|
||
};
|
||
Scrutari.logError = function (error) {
|
||
var errorMessage = "Scrutari Request Error [key = " + error.key + " | parameter = " + error.parameter;
|
||
if (error.hasOwnProperty("value")) {
|
||
errorMessage += " | value = " + error.value;
|
||
}
|
||
if (error.hasOwnProperty("array")) {
|
||
errorMessage += " | array = (";
|
||
for(var i = 0; i < error.array.length; i++) {
|
||
if (i > 0) {
|
||
errorMessage += ";";
|
||
}
|
||
var obj = error.array[i];
|
||
errorMessage += obj.key;
|
||
if (obj.hasOwnProperty("value")) {
|
||
errorMessage += "=" + obj.value;
|
||
}
|
||
}
|
||
errorMessage += ")";
|
||
}
|
||
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);
|
||
switch (carac) {
|
||
case '&':
|
||
result += "&";
|
||
break;
|
||
case '"':
|
||
result += """;
|
||
break;
|
||
case '<':
|
||
result += "<";
|
||
break;
|
||
case '>':
|
||
result += ">";
|
||
break;
|
||
case '\'':
|
||
result += "'";
|
||
break;
|
||
default:
|
||
result += carac;
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.$ = function (jqArgument, properties) {
|
||
if (!properties) {
|
||
properties = jqArgument;
|
||
jqArgument = null;
|
||
}
|
||
var query = Scrutari.toCssQuery(properties);
|
||
if (jqArgument) {
|
||
return Scrutari.convert(jqArgument).find(query);
|
||
} else {
|
||
return $(query);
|
||
}
|
||
};
|
||
Scrutari.$children = function (jqArgument, properties) {
|
||
return Scrutari.convert(jqArgument).children(Scrutari.toCssQuery(properties));
|
||
};
|
||
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) {
|
||
this.name = name;
|
||
this.engineUrl = engineUrl;
|
||
this.lang = lang;
|
||
this.origin = origin;
|
||
this.options = {
|
||
dataType: "json",
|
||
queryVariant: "query",
|
||
ficheFields: null,
|
||
motcleFields: null,
|
||
paginationLength: 50,
|
||
subsearchThreshold: 250,
|
||
groupSortFunction: _ficheCountSort
|
||
};
|
||
if (options) {
|
||
for(var key in options) {
|
||
this.options[key] = options[key];
|
||
}
|
||
}
|
||
function _ficheCountSort(group1, group2) {
|
||
let count1 = group1.ficheCount;
|
||
let count2 = group2.ficheCount;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
let rank1 = group1.category.rank;
|
||
let rank2 = group1.category.rank;
|
||
if (rank1 < rank2) {
|
||
return -1;
|
||
} else if (rank1 > rank2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Config.prototype.getJsonUrl = function () {
|
||
return this.engineUrl + "json";
|
||
};
|
||
Scrutari.Config.prototype.getDownloadUrl = function (qId, extension) {
|
||
switch(extension) {
|
||
case "ods":
|
||
case "csv":
|
||
return this.engineUrl + "export/" + "result_" + qId + "_" + this.lang + "." + extension;
|
||
case "atom":
|
||
return this.engineUrl + "feed/" + "fiches_" + this.lang + ".atom?qid=" + qId + "&all=" + _getCurrentDate();
|
||
default:
|
||
Scrutari.log("Unknown extension: " + extension);
|
||
return "";
|
||
}
|
||
function _getCurrentDate() {
|
||
var date = new Date();
|
||
var dateString = date.getFullYear() + "-";
|
||
var mois = date.getMonth() + 1;
|
||
if (mois < 10) {
|
||
dateString += "0";
|
||
}
|
||
dateString += mois;
|
||
dateString += "-";
|
||
var jour = date.getDate();
|
||
if (jour < 10) {
|
||
dateString += "0";
|
||
}
|
||
dateString += jour;
|
||
return dateString;
|
||
}
|
||
};
|
||
Scrutari.Config.prototype.getPermalinkUrl = function (qId, permalinkPattern) {
|
||
var permalink = permalinkPattern.replace("$LANG", this.lang);
|
||
permalink = permalink.replace("$QID", qId);
|
||
return permalink;
|
||
};
|
||
Scrutari.Ajax = {};
|
||
Scrutari.Ajax.loadBaseArray = function (scrutariConfig, requestParameters, baseArrayCallback) {
|
||
if (!requestParameters) {
|
||
requestParameters = new Object();
|
||
}
|
||
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,
|
||
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,
|
||
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,
|
||
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,
|
||
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,
|
||
success: function (data, textStatus) {
|
||
Scrutari.Ajax.success(data, ["ficheArray", "motcleArray"], ficheArrayCallback);
|
||
}
|
||
});
|
||
};
|
||
Scrutari.Ajax.loadGeoJson = function (scrutariConfig, requestParameters, geojsonCallback, apiErrorCallback) {
|
||
if (!requestParameters) {
|
||
requestParameters = new Object();
|
||
}
|
||
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);
|
||
}
|
||
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,
|
||
success: function (data, textStatus) {
|
||
if (data.hasOwnProperty("error")) {
|
||
if (apiErrorCallback) {
|
||
apiErrorCallback(data.error);
|
||
} else {
|
||
Scrutari.logError(data.error);
|
||
}
|
||
} else {
|
||
Scrutari.Ajax.logWarnings(data);
|
||
geojsonCallback(data);
|
||
}
|
||
}
|
||
});
|
||
};
|
||
Scrutari.Ajax.loadMotcleArray = function (scrutariConfig, requestParameters, motcleArrayCallback) {
|
||
if (!requestParameters) {
|
||
requestParameters = new Object();
|
||
}
|
||
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,
|
||
success: function (data, textStatus) {
|
||
Scrutari.Ajax.success(data, "motcleArray", motcleArrayCallback);
|
||
}
|
||
});
|
||
};
|
||
Scrutari.Ajax.loadThesaurusArray = function (scrutariConfig, requestParameters, thesaurusArrayCallback) {
|
||
if (!requestParameters) {
|
||
requestParameters = new Object();
|
||
}
|
||
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();
|
||
}
|
||
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.options.paginationLength * 2);
|
||
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.options.paginationLength * 2);
|
||
$.ajax({
|
||
url: scrutariConfig.getJsonUrl(),
|
||
dataType: scrutariConfig.options.dataType,
|
||
data: requestParameters,
|
||
success: function (data, textStatus) {
|
||
Scrutari.Ajax.success(data, "ficheSearchResult", existingFicheSearchResultCallback);
|
||
}
|
||
});
|
||
};
|
||
Scrutari.Ajax.success = function(ajaxResult, objectNames, objectCallback, apiErrorCallback) {
|
||
if (ajaxResult.hasOwnProperty("error")) {
|
||
if (apiErrorCallback) {
|
||
apiErrorCallback(ajaxResult.error);
|
||
} else {
|
||
Scrutari.logError(ajaxResult.error);
|
||
}
|
||
} else {
|
||
Scrutari.Ajax.logWarnings(ajaxResult);
|
||
if (Array.isArray(objectNames)) {
|
||
let apiObjectArray = new Array();
|
||
for(let objectName of objectNames) {
|
||
if (!ajaxResult.hasOwnProperty(objectName)) {
|
||
apiObjectArray.push(null);
|
||
} else {
|
||
apiObjectArray.push(ajaxResult[objectName]);
|
||
}
|
||
}
|
||
objectCallback.apply(this, apiObjectArray);
|
||
} else {
|
||
let objectName = objectNames;
|
||
if (!ajaxResult.hasOwnProperty(objectName)) {
|
||
$.error(objectName + " object is missing in json response");
|
||
} else {
|
||
objectCallback(ajaxResult[objectName]);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Ajax.logWarnings = function (ajaxResult) {
|
||
if (ajaxResult.hasOwnProperty("warnings")) {
|
||
var warningsMessage = "Scrutari Request Warnings [";
|
||
for(var i = 0; i < ajaxResult.warnings.length; i++) {
|
||
if (i > 0) {
|
||
warningsMessage += ";";
|
||
}
|
||
var warning = ajaxResult.warnings[i];
|
||
warningsMessage += "key = ";
|
||
warningsMessage += warning.key;
|
||
warningsMessage += " | parameter = ";
|
||
warningsMessage += warning.parameter;
|
||
if (warning.hasOwnProperty("value")) {
|
||
warningsMessage += " | value = ";
|
||
warningsMessage += warning.value;
|
||
}
|
||
}
|
||
warningsMessage += "]";
|
||
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();
|
||
}
|
||
if (!this.engineInfo.attributes.hasOwnProperty(familyName)) {
|
||
return new Array();
|
||
}
|
||
return this.engineInfo.attributes[familyName];
|
||
};
|
||
Scrutari.Meta.prototype.getBase = function (code) {
|
||
var key = "code_" + code;
|
||
if (this.engineInfo.baseMap.hasOwnProperty(key)) {
|
||
return this.engineInfo.baseMap[key];
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getBaseArray = function (sortFunction) {
|
||
var array = new Array();
|
||
var baseMap = this.engineInfo.baseMap;
|
||
var p=0;
|
||
for(let prop in baseMap) {
|
||
array[p] = baseMap[prop];
|
||
p++;
|
||
}
|
||
if (sortFunction) {
|
||
array = array.sort(sortFunction);
|
||
}
|
||
return array;
|
||
};
|
||
Scrutari.Meta.prototype.getCategory = function (categoryName) {
|
||
if (this.engineInfo.hasOwnProperty("categoryMap")) {
|
||
if (this.engineInfo.categoryMap.hasOwnProperty(categoryName)) {
|
||
return this.engineInfo.categoryMap[categoryName];
|
||
} else {
|
||
return null;
|
||
}
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getCategoryArray = function (sortFunction) {
|
||
var array = new Array();
|
||
if (!this.engineInfo.hasOwnProperty("categoryMap")) {
|
||
return array;
|
||
}
|
||
var categoryMap = this.engineInfo.categoryMap;
|
||
var p=0;
|
||
for(let prop in categoryMap) {
|
||
array[p] = categoryMap[prop];
|
||
p++;
|
||
}
|
||
if (sortFunction) {
|
||
array = array.sort(sortFunction);
|
||
}
|
||
return array;
|
||
};
|
||
Scrutari.Meta.prototype.getCategoryForCorpus = function (code) {
|
||
if (!this.engineInfo.hasOwnProperty("categoryMap")) {
|
||
return null;
|
||
}
|
||
var categoryMap = this.engineInfo.categoryMap;
|
||
for(let prop in categoryMap) {
|
||
let category = categoryMap[prop];
|
||
for(let codecorpus of category.codecorpusArray) {
|
||
if (codecorpus === code) {
|
||
return category;
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
Scrutari.Meta.prototype.getComplementTitle = function(code, complementNumber) {
|
||
var corpus = this.getCorpus(code);
|
||
if (!corpus) {
|
||
return "";
|
||
}
|
||
var key = "complement_" + complementNumber;
|
||
if (corpus.phraseMap.hasOwnProperty(key)) {
|
||
return corpus.phraseMap[key];
|
||
} else {
|
||
return key;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getCorpus = function (code) {
|
||
var key = "code_" + code;
|
||
if (this.engineInfo.corpusMap.hasOwnProperty(key)) {
|
||
return this.engineInfo.corpusMap[key];
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getCorpusArray = function (sortFunction) {
|
||
var array = new Array();
|
||
var corpusMap = this.engineInfo.corpusMap;
|
||
var p=0;
|
||
for(let prop in corpusMap) {
|
||
array[p] = corpusMap[prop];
|
||
p++;
|
||
}
|
||
if (sortFunction) {
|
||
array = array.sort(sortFunction);
|
||
}
|
||
return array;
|
||
};
|
||
Scrutari.Meta.prototype.getCorpusArrayForBases = function (baseArray) {
|
||
var result = new Array();
|
||
for(let codebase of baseArray) {
|
||
let key = "code_" +codebase;
|
||
if (this.engineInfo.baseMap.hasOwnProperty(key)) {
|
||
result = result.concat(this.engineInfo.baseMap[key].codecorpusArray);
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.Meta.prototype.getCorpusArrayForCategories = function (categoryArray) {
|
||
var result = new Array();
|
||
if (!this.engineInfo.hasOwnProperty("categoryMap")) {
|
||
return result;
|
||
}
|
||
for(let categoryName of categoryArray) {
|
||
if (this.engineInfo.categoryMap.hasOwnProperty(categoryName)) {
|
||
result = result.concat(this.engineInfo.categoryMap[categoryName].codecorpusArray);
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.Meta.prototype.getCorpusFicheCount = function (code) {
|
||
var corpus = this.getCorpus(code);
|
||
if (!corpus) {
|
||
return 0;
|
||
}
|
||
return corpus.stats.fiche;
|
||
};
|
||
Scrutari.Meta.prototype.getCorpusLangFicheCount = function (code, langArray) {
|
||
var corpus = this.getCorpus(code);
|
||
if (!corpus) {
|
||
return 0;
|
||
}
|
||
var ficheCount = 0;
|
||
for(let langObj of corpus.stats.langArray) {
|
||
if ($.inArray(langObj.lang, langArray) !== -1) {
|
||
ficheCount += langObj.fiche;
|
||
}
|
||
}
|
||
return ficheCount;
|
||
};
|
||
Scrutari.Meta.prototype.getDefaultOptions = function () {
|
||
var options = {};
|
||
var attrMap = this.engineInfo.metadata.attrMap;
|
||
for(let key in attrMap) {
|
||
if (key.indexOf("scrutarijs:") === 0) {
|
||
let name = key.substring("scrutarijs:".length);
|
||
let values = attrMap[key];
|
||
if (values.length === 1) {
|
||
let value = values[0];
|
||
if (value === "false") {
|
||
value = false;
|
||
} else if (value === "true") {
|
||
value = true;
|
||
}
|
||
options[name] = value;
|
||
} else {
|
||
options[name] = values;
|
||
}
|
||
}
|
||
this[key] = options[key];
|
||
}
|
||
return options;
|
||
};
|
||
Scrutari.Meta.prototype.getEngineInfo = function () {
|
||
return this.engineInfo;
|
||
};
|
||
Scrutari.Meta.prototype.getGlobalFicheCount = function () {
|
||
return this.engineInfo.stats.fiche;
|
||
};
|
||
Scrutari.Meta.prototype.getGlobalLangFicheCount = function (langArray) {
|
||
var ficheCount = 0;
|
||
for(let langObj of this.engineInfo.stats.langArray) {
|
||
if ($.inArray(langObj.lang, langArray) !== -1) {
|
||
ficheCount += langObj.fiche;
|
||
}
|
||
}
|
||
return ficheCount;
|
||
};
|
||
Scrutari.Meta.prototype.getLangArray = function (sortFunction) {
|
||
var array = new Array();
|
||
var length = this.engineInfo.stats.langArray.length;
|
||
for(let i = 0; i < length; i++) {
|
||
array[i] = this.engineInfo.stats.langArray[i];
|
||
}
|
||
if (sortFunction) {
|
||
array = array.sort(sortFunction);
|
||
}
|
||
return array;
|
||
};
|
||
Scrutari.Meta.prototype.getLangLabel = function (iso) {
|
||
if (this.engineInfo.langMap.hasOwnProperty(iso)) {
|
||
return this.engineInfo.langMap[iso];
|
||
} else {
|
||
return iso;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getThesaurus = function (code) {
|
||
var key = "code_" + code;
|
||
if (this.engineInfo.thesaurusMap.hasOwnProperty(key)) {
|
||
return this.engineInfo.thesaurusMap[key];
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Meta.prototype.getThesaurusArray = function (sortFunction) {
|
||
var array = new Array();
|
||
var thesaurusMap = this.engineInfo.thesaurusMap;
|
||
var p=0;
|
||
for(let prop in thesaurusMap) {
|
||
array[p] = thesaurusMap[prop];
|
||
p++;
|
||
}
|
||
if (sortFunction) {
|
||
array = array.sort(sortFunction);
|
||
}
|
||
return array;
|
||
};
|
||
Scrutari.Meta.prototype.getTitle = function () {
|
||
return this.engineInfo.metadata.title;
|
||
};
|
||
Scrutari.Meta.prototype.withCategory = function () {
|
||
return this.engineInfo.hasOwnProperty("categoryMap");
|
||
};
|
||
Scrutari.Complete = {};
|
||
Scrutari.Complete.bythesaurusArray = function (fiche, scrutariMeta, motcleProvider) {
|
||
if (!fiche.hasOwnProperty("bythesaurusMap")) {
|
||
return false;
|
||
}
|
||
let thesaurusArray = scrutariMeta.getThesaurusArray();
|
||
let _bythesaurusArray = new Array();
|
||
for(let thesaurus of thesaurusArray) {
|
||
let codethesaurus = thesaurus.codethesaurus;
|
||
let key = "code_" + codethesaurus;
|
||
if (fiche.bythesaurusMap.hasOwnProperty(key)) {
|
||
let motcleArray = new Array();
|
||
for(let codemotcle of fiche.bythesaurusMap[key]) {
|
||
let motcle = motcleProvider(codemotcle);
|
||
if (motcle) {
|
||
motcleArray.push(motcle);
|
||
}
|
||
}
|
||
_bythesaurusArray.push({
|
||
thesaurus: thesaurus,
|
||
motcleArray: motcleArray
|
||
});
|
||
}
|
||
}
|
||
fiche._bythesaurusArray = _bythesaurusArray;
|
||
return true;
|
||
};
|
||
Scrutari.Complete.complementTitle = function (fiche, scrutariMeta) {
|
||
if (fiche.hasOwnProperty("mcomplementArray")) {
|
||
for(let mcomplement of fiche.mcomplementArray) {
|
||
mcomplement.title = scrutariMeta.getComplementTitle(fiche.codecorpus, mcomplement.number);
|
||
}
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
Scrutari.Complete.icon = function (fiche) {
|
||
if (fiche.hasOwnProperty("icon")) {
|
||
fiche._icon = fiche.icon;
|
||
return true;
|
||
} else if (fiche.hasOwnProperty("ficheicon")) {
|
||
fiche._icon = fiche.ficheicon;
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
Scrutari.Complete.markedAttributeArray = function (fiche, scrutariMeta, familyName ) {
|
||
let attributeArray = scrutariMeta.getAttributeArray(familyName);
|
||
if (attributeArray.length === 0) {
|
||
return false;
|
||
}
|
||
let objArray = new Array();
|
||
for(let attribute of attributeArray) {
|
||
if (fiche.mattrMap.hasOwnProperty(attribute.name)) {
|
||
objArray.push({
|
||
name: attribute.name,
|
||
title: attribute.title,
|
||
type: attribute.type,
|
||
valueArray: fiche.mattrMap[attribute.name]
|
||
});
|
||
}
|
||
}
|
||
fiche["_" + familyName + "AttributeArray"] = objArray;
|
||
return true;
|
||
};
|
||
Scrutari.Complete.motcleArray = function (fiche, motcleProvider) {
|
||
if (!fiche.hasOwnProperty("codemotcleArray")) {
|
||
return false;
|
||
}
|
||
let motcleArray = new Array();
|
||
for(let codemotcle of fiche.codemotcleArray) {
|
||
let motcle = motcleProvider(codemotcle);
|
||
if (motcle) {
|
||
motcleArray.push(motcle);
|
||
}
|
||
}
|
||
if (motcleArray.length > 0) {
|
||
fiche._motcleArray = motcleArray;
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
Scrutari.Complete.target = function (fiche, target) {
|
||
fiche._target = target;
|
||
return true;
|
||
};
|
||
Scrutari.Complete.thumbnail = function (fiche) {
|
||
if (fiche.hasOwnProperty("thumbnail")) {
|
||
fiche._thumbnail = fiche.thumbnail;
|
||
return true;
|
||
} else if (Scrutari.Complete.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) {
|
||
this.ficheSearchResult = ficheSearchResult;
|
||
this.requestParameters = requestParameters;
|
||
this.searchMeta = ficheSearchResult.searchMeta;
|
||
this.ficheGroupArray = ficheSearchResult.ficheGroupArray;
|
||
if ((groupSortFunction) && (this.ficheGroupArray.length > 1)) {
|
||
this.ficheGroupArray = this.ficheGroupArray.sort(groupSortFunction);
|
||
}
|
||
this.motcleMap = new Object();
|
||
if (ficheSearchResult.hasOwnProperty("motcleArray")) {
|
||
for(let motcle of ficheSearchResult.motcleArray) {
|
||
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));
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.getQId = function () {
|
||
if (this.searchMeta) {
|
||
return this.searchMeta.qId;
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.getQ = function () {
|
||
if (this.searchMeta) {
|
||
return this.searchMeta.q;
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.getFicheCount = function () {
|
||
if (this.searchMeta) {
|
||
return this.searchMeta.ficheCount;
|
||
} else {
|
||
return -1;
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.getFicheGroupType = function () {
|
||
var type = this.ficheSearchResult.ficheGroupType;
|
||
if (type === "none") {
|
||
type = "unique";
|
||
}
|
||
return type;
|
||
};
|
||
Scrutari.Result.prototype.getUniqueFicheArray = function () {
|
||
if (this.ficheGroupArray.length === 0) {
|
||
return new Array();
|
||
}
|
||
return this.ficheGroupArray[0].ficheArray;
|
||
};
|
||
Scrutari.Result.prototype.selectUniqueFicheArray = function (paginationLength, paginationNumber) {
|
||
var selectionArray = new Array();
|
||
if (this.ficheGroupArray.length === 0) {
|
||
return selectionArray;
|
||
}
|
||
var ficheArray = this.ficheGroupArray[0].ficheArray;
|
||
var startIndex = paginationLength * (paginationNumber - 1);
|
||
var length = ficheArray.length;
|
||
if (startIndex >= length) {
|
||
return selectionArray;
|
||
}
|
||
var min = Math.min(ficheArray.length, startIndex + paginationLength);
|
||
for(let i = startIndex; i < min; i++) {
|
||
selectionArray.push(ficheArray[i]);
|
||
}
|
||
return selectionArray;
|
||
};
|
||
Scrutari.Result.prototype.isUniquePaginationLoaded = function (paginationLength, paginationNumber) {
|
||
if (this.ficheGroupArray.length === 0) {
|
||
return true;
|
||
}
|
||
var ficheCount = this.getFicheCount();
|
||
var ficheArray = this.ficheGroupArray[0].ficheArray;
|
||
var length = ficheArray.length;
|
||
if (length === ficheCount) {
|
||
return true;
|
||
}
|
||
var endIndex = (paginationLength * paginationNumber) - 1;
|
||
if (endIndex < length) {
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
Scrutari.Result.prototype.loadUniquePagination = function (scrutariConfig, paginationLength, paginationNumber, callback) {
|
||
if (this.ficheGroupArray.length === 0) {
|
||
return true;
|
||
}
|
||
var group = this.ficheGroupArray[0];
|
||
if (!group) {
|
||
return;
|
||
}
|
||
var ficheCount = this.getFicheCount();
|
||
var ficheArray = group.ficheArray;
|
||
var length = ficheArray.length;
|
||
if (length === ficheCount) {
|
||
return;
|
||
}
|
||
var _existingFicheSearchResultCallback = function (ficheSearchResult) {
|
||
var newCount = ficheSearchResult.ficheGroupArray.length;
|
||
if (newCount > 0) {
|
||
group.ficheArray = group.ficheArray.concat(ficheSearchResult.ficheGroupArray[0].ficheArray);
|
||
}
|
||
if (callback) {
|
||
callback();
|
||
}
|
||
};
|
||
var requestParameters = {
|
||
qid: this.getQId(),
|
||
start: length +1,
|
||
limit: (paginationLength * (paginationNumber + 2)) - length
|
||
};
|
||
Scrutari.Ajax.loadExistingFicheSearchResult(scrutariConfig, requestParameters, _existingFicheSearchResultCallback);
|
||
};
|
||
Scrutari.Result.prototype.isCategoryPaginationLoaded = function (categoryName, paginationLength, paginationNumber) {
|
||
var group = this.getFicheGroupByCategoryName(categoryName);
|
||
if (!group) {
|
||
return true;
|
||
}
|
||
var categoryFicheCount = group.ficheCount;
|
||
var ficheArray = group.ficheArray;
|
||
var length = ficheArray.length;
|
||
if (length === categoryFicheCount) {
|
||
return true;
|
||
}
|
||
var endIndex = (paginationLength * paginationNumber) - 1;
|
||
if (endIndex < length) {
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
Scrutari.Result.prototype.loadCategoryPagination = function (scrutariConfig, categoryName, paginationLength, paginationNumber, callback) {
|
||
var group = this.getFicheGroupByCategoryName(categoryName);
|
||
if (!group) {
|
||
return;
|
||
}
|
||
var categoryFicheCount = group.ficheCount;
|
||
var ficheArray = group.ficheArray;
|
||
var length = ficheArray.length;
|
||
if (length === categoryFicheCount) {
|
||
return;
|
||
}
|
||
var requestParameters = {
|
||
qid: this.getQId(),
|
||
start: length +1,
|
||
limit: (paginationLength * (paginationNumber + 2)) - length,
|
||
starttype: "in:" + categoryName
|
||
};
|
||
Scrutari.Ajax.loadExistingFicheSearchResult(scrutariConfig, requestParameters, _existingFicheSearchResultCallback);
|
||
function _existingFicheSearchResultCallback(ficheSearchResult) {
|
||
for(let newGroup of ficheSearchResult.ficheGroupArray) {
|
||
if (newGroup.category.name === group.category.name) {
|
||
group.ficheArray = group.ficheArray.concat(newGroup.ficheArray);
|
||
}
|
||
}
|
||
callback();
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.selectCategoryFicheArray = function (categoryName, paginationLength, paginationNumber) {
|
||
var selectionArray = new Array();
|
||
var ficheArray = this.getCategoryFicheArrayByName(categoryName);
|
||
var startIndex = paginationLength * (paginationNumber - 1);
|
||
var length = ficheArray.length;
|
||
if (startIndex >= length) {
|
||
return selectionArray;
|
||
}
|
||
var min = Math.min(ficheArray.length, startIndex + paginationLength);
|
||
for(let i = startIndex; i < min; i++) {
|
||
selectionArray.push(ficheArray[i]);
|
||
}
|
||
return selectionArray;
|
||
};
|
||
Scrutari.Result.prototype.getCategoryCount = function () {
|
||
return this.ficheGroupArray.length;
|
||
};
|
||
Scrutari.Result.prototype.getCategory = function (index) {
|
||
return this.ficheGroupArray[index].category;
|
||
};
|
||
Scrutari.Result.prototype.getFicheGroupByCategoryName = function (categoryName) {
|
||
var groupCount = this.ficheGroupArray.length;
|
||
for(let i = 0; i < groupCount; i++) {
|
||
let group = this.ficheGroupArray[i];
|
||
if ((group.category) && (group.category.name === categoryName)) {
|
||
return group;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
Scrutari.Result.prototype.getCategoryFicheCount = function (index) {
|
||
return this.ficheGroupArray[index].ficheCount;
|
||
};
|
||
Scrutari.Result.prototype.getCategoryFicheCountByName = function (categoryName) {
|
||
for(let group of this.ficheGroupArray) {
|
||
if ((group.category) && (group.category.name === categoryName)) {
|
||
return group.ficheCount;
|
||
}
|
||
}
|
||
return 0;
|
||
};
|
||
Scrutari.Result.prototype.getCategoryFicheArray = function (index) {
|
||
return this.ficheGroupArray[index].ficheArray;
|
||
};
|
||
Scrutari.Result.prototype.getCategoryFicheArrayByName = function (categoryName) {
|
||
var categoryCount = this.getCategoryCount();
|
||
for(let i = 0; i < categoryCount; i++) {
|
||
let category = this.getCategory(i);
|
||
if (category.name === categoryName) {
|
||
return this.getCategoryFicheArray(i);
|
||
}
|
||
}
|
||
return new Array();
|
||
};
|
||
Scrutari.Result.prototype.getMotcle = function (code) {
|
||
var key = "code_" + code;
|
||
if (this.motcleMap.hasOwnProperty(key)) {
|
||
return this.motcleMap[key];
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Result.prototype.getMotcleArray = function (motcleFilter) {
|
||
if (!motcleFilter) {
|
||
motcleFilter = _accept;
|
||
}
|
||
var result = new Array();
|
||
if (this.ficheSearchResult.hasOwnProperty("motcleArray")) {
|
||
for(let motcle of this.ficheSearchResult.motcleArray) {
|
||
if (motcleFilter(motcle)) {
|
||
result.push(motcle);
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
function _accept(motcle) {
|
||
return true;
|
||
}
|
||
};
|
||
Scrutari.Utils = {};
|
||
Scrutari.Utils.divideIntoColumns = function (objectArray, jqArgument, objectTemplate) {
|
||
var objectCount = objectArray.length;
|
||
if (objectCount === 0) {
|
||
return;
|
||
}
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
var elementCount = $elements.length;
|
||
if (elementCount === 0) {
|
||
Scrutari.log("HtmlElement selection with jqArgument is empty ");
|
||
return;
|
||
}
|
||
var objectCount = objectArray.length;
|
||
if (objectCount <= elementCount) {
|
||
for(var i = 0; i < objectCount; i++) {
|
||
$($elements[i]).append(objectTemplate(objectArray[i]));
|
||
}
|
||
return;
|
||
}
|
||
var modulo = objectCount % elementCount;
|
||
var columnLength = (objectCount - modulo) / elementCount;
|
||
var start = 0;
|
||
var stop = 0;
|
||
for(var i = 0; i< elementCount; i++) {
|
||
var $element = $($elements[i]);
|
||
stop += columnLength;
|
||
if (i < modulo) {
|
||
stop++;
|
||
}
|
||
for(var j = start; j < stop; j++) {
|
||
$element.append(objectTemplate(objectArray[j]));
|
||
}
|
||
start = stop;
|
||
}
|
||
};
|
||
Scrutari.Utils.getTabArray = function (ficheCount, paginationLength, currentPaginationNumber) {
|
||
var result = new Array();
|
||
var paginationCount;
|
||
if (ficheCount <= paginationLength) {
|
||
paginationCount = 1;
|
||
return result;
|
||
} else {
|
||
var modulo = ficheCount % paginationLength;
|
||
paginationCount = (ficheCount - modulo) / paginationLength;
|
||
if (modulo > 0) {
|
||
paginationCount ++;
|
||
}
|
||
}
|
||
if (currentPaginationNumber > paginationCount) {
|
||
currentPaginationNumber = paginationCount;
|
||
}
|
||
var paginationNumberStart = 1;
|
||
var paginationNumberEnd = 9;
|
||
if (currentPaginationNumber > 6) {
|
||
paginationNumberStart = currentPaginationNumber - 3;
|
||
paginationNumberEnd = currentPaginationNumber + 3;
|
||
}
|
||
if (paginationNumberEnd > paginationCount) {
|
||
paginationNumberEnd = paginationCount;
|
||
}
|
||
if (paginationNumberStart > 1) {
|
||
result.push({
|
||
number: 1,
|
||
title: "1",
|
||
state: 'enabled'
|
||
});
|
||
result.push({
|
||
number: 0,
|
||
title: "…",
|
||
state: 'disabled'
|
||
});
|
||
}
|
||
for(var i = paginationNumberStart; i <= paginationNumberEnd; i++) {
|
||
var state = 'enabled';
|
||
if (i === currentPaginationNumber) {
|
||
state = 'active';
|
||
}
|
||
result.push({
|
||
number: i,
|
||
title: i.toString(),
|
||
state: state
|
||
});
|
||
}
|
||
if (paginationNumberEnd < paginationCount) {
|
||
result.push({
|
||
number: 0,
|
||
title: "…",
|
||
state: 'disabled'
|
||
});
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.Utils.disable = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.prop('disabled', true);
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.enable = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.prop('disabled', false);
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.uncheck = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.prop('checked', false);
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.check = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.prop('checked', true);
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.toggle = function (jqElement, stateDataKey) {
|
||
var state = jqElement.data(stateDataKey);
|
||
if (state === 'off') {
|
||
state = 'on';
|
||
} else {
|
||
state = 'off';
|
||
}
|
||
jqElement.data(stateDataKey, state);
|
||
return state;
|
||
};
|
||
Scrutari.Utils.toggle.disabled = function (jqArgument, state) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
if (state === 'off') {
|
||
$elements.prop('disabled', true);
|
||
} else {
|
||
$elements.prop('disabled', false);
|
||
}
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.toggle.text = function (jqArgument, alterDataKey) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
var length = $elements.length;
|
||
for(var i = 0; i < length; i++) {
|
||
var jqEl = $($elements[i]);
|
||
var currentText =jqEl.text();
|
||
var alterText = jqEl.data(alterDataKey);
|
||
jqEl.text(alterText);
|
||
jqEl.data(alterDataKey, currentText);
|
||
}
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.toggle.classes = function (jqArgument, state, onClass, offClass) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
if (state === 'off') {
|
||
$elements.addClass(offClass).removeClass(onClass);
|
||
} else {
|
||
$elements.removeClass(offClass).addClass(onClass);
|
||
}
|
||
return $elements;
|
||
};
|
||
Scrutari.Utils.getBaseSortFunction = function (baseSortType, locales) {
|
||
var compareFunction = Scrutari.Utils.getCompareLocaleFunction(locales);
|
||
switch(baseSortType) {
|
||
case "fiche-count":
|
||
return _ficheCountSort;
|
||
case "title":
|
||
return _titleSort;
|
||
default:
|
||
return null;
|
||
}
|
||
function _ficheCountSort(base1, base2) {
|
||
var count1 = base1.stats.fiche;
|
||
var count2 = base2.stats.fiche;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
return Scrutari.Utils.compareCodebase(base1, base2);
|
||
}
|
||
}
|
||
function _titleSort(base1, base2) {
|
||
var title1 = base1.title;
|
||
var title2 = base2.title;
|
||
if (!title1) {
|
||
title1 = "";
|
||
}
|
||
if (!title2) {
|
||
title2 = "";
|
||
}
|
||
var comp = compareFunction(title1, title2);
|
||
if (comp !== 0) {
|
||
return comp;
|
||
} else {
|
||
return Scrutari.Utils.compareCodebase(base1, base2);
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Utils.getCorpusSortFunction = function (corpusSortType, locales) {
|
||
var _ficheCountSort = function (corpus1, corpus2) {
|
||
var count1 = corpus1.stats.fiche;
|
||
var count2 = corpus2.stats.fiche;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
return Scrutari.Utils.compareCodecorpus(corpus1, corpus2);
|
||
}
|
||
};
|
||
var compareFunction = Scrutari.Utils.getCompareLocaleFunction(locales);
|
||
var _titleSort = function (corpus1, corpus2) {
|
||
var title1 = corpus1.title;
|
||
var title2 = corpus2.title;
|
||
if (!title1) {
|
||
title1 = "";
|
||
}
|
||
if (!title2) {
|
||
title2 = "";
|
||
}
|
||
var comp = compareFunction(title1, title2);
|
||
if (comp !== 0) {
|
||
return comp;
|
||
} else {
|
||
return Scrutari.Utils.compareCodecorpus(corpus1, corpus2);
|
||
}
|
||
};
|
||
switch(corpusSortType) {
|
||
case "fiche-count":
|
||
return _ficheCountSort;
|
||
case "title":
|
||
return _titleSort;
|
||
default:
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Utils.getCategorySortFunction = function (categorySortType, locales) {
|
||
var compareFunction = Scrutari.Utils.getCompareLocaleFunction(locales);
|
||
switch(categorySortType) {
|
||
case "rank":
|
||
return _rankSort;
|
||
case "fiche-count":
|
||
return _ficheCountSort;
|
||
case "title":
|
||
return _titleSort;
|
||
default:
|
||
return null;
|
||
}
|
||
function _rankSort(category1, category2) {
|
||
let count1 = category1.rank;
|
||
let count2 = category2.rank;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
var code1 = category1.name;
|
||
var code2 = category2.name;
|
||
if (code1 < code2) {
|
||
return -1;
|
||
} else if (code1 > code2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
function _ficheCountSort(category1, category2) {
|
||
let count1 = category1.stats.fiche;
|
||
let count2 = category2.stats.fiche;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
return _rankSort(category1, category2);
|
||
}
|
||
}
|
||
function _titleSort(category1, category2) {
|
||
let title1 = category1.title;
|
||
let title2 = category2.title;
|
||
if (!title1) {
|
||
title1 = "";
|
||
}
|
||
if (!title2) {
|
||
title2 = "";
|
||
}
|
||
let comp = compareFunction(title1, title2);
|
||
if (comp !== 0) {
|
||
return comp;
|
||
} else {
|
||
return _rankSort(category1, category2);
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Utils.getLangSortFunction = function (langSortType, locales) {
|
||
var compareFunction = Scrutari.Utils.getCompareLocaleFunction(locales);
|
||
switch(langSortType) {
|
||
case "code":
|
||
return _codeSort;
|
||
case "fiche-count":
|
||
return _ficheCountSort;
|
||
case "title":
|
||
return _titleSort;
|
||
default:
|
||
return null;
|
||
}
|
||
function _codeSort(lang1, lang2) {
|
||
let code1 = lang1.lang;
|
||
let code2 = lang2.lang;
|
||
if (code1 < code2) {
|
||
return -1;
|
||
} else if (code1 > code2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
function _ficheCountSort(lang1, lang2) {
|
||
let count1 = lang1.fiche;
|
||
let count2 = lang2.fiche;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
return _codeSort(lang1, lang2);
|
||
}
|
||
}
|
||
function _titleSort(lang1, lang2) {
|
||
let title1 = lang1.title;
|
||
let title2 = lang2.title;
|
||
if (!title1) {
|
||
title1 = lang1.lang;
|
||
}
|
||
if (!title2) {
|
||
title2 = lang2.lang;
|
||
}
|
||
let comp = compareFunction(title1, title2);
|
||
if (comp !== 0) {
|
||
return comp;
|
||
} else {
|
||
return _codeSort(lang1, lang2);
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Utils.getGroupSortFunction = function (groupSortType) {
|
||
switch(groupSortType) {
|
||
case "fiche-count":
|
||
return _ficheCountSort;
|
||
default:
|
||
return null;
|
||
}
|
||
function _ficheCountSort(group1, group2) {
|
||
let count1 = group1.ficheCount;
|
||
let count2 = group2.ficheCount;
|
||
if (count1 > count2) {
|
||
return -1;
|
||
} else if (count1 < count2) {
|
||
return 1;
|
||
} else {
|
||
let rank1 = group1.category.rank;
|
||
let rank2 = group1.category.rank;
|
||
if (rank1 < rank2) {
|
||
return -1;
|
||
} else if (rank1 > rank2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Utils.mark = function (markArray, classAttribute) {
|
||
if (!classAttribute) {
|
||
classAttribute = "scrutari-Mark";
|
||
}
|
||
var html = "";
|
||
var length = markArray.length;
|
||
for (var i = 0; i < length; i++) {
|
||
var obj = markArray[i];
|
||
if (typeof obj === 'string') {
|
||
html += Scrutari.escape(obj);
|
||
} else if (obj.s) {
|
||
html += "<span class='" + classAttribute + "'>";
|
||
html += Scrutari.escape(obj.s);
|
||
html += "</span>";
|
||
}
|
||
}
|
||
return html;
|
||
};
|
||
Scrutari.Utils.formatSearchSequence = function (client, scrutariResult) {
|
||
var q = scrutariResult.getQ();
|
||
q = q.replace(/\&\&/g, client.loc('_ and'));
|
||
q = q.replace(/\|\|/g, client.loc('_ or'));
|
||
return q;
|
||
};
|
||
Scrutari.Utils.render = function (templateString, object) {
|
||
var result = templateString;
|
||
for(var key in object) {
|
||
var normalReplace = new RegExp("{{:" + key + "}}", 'g');
|
||
var escapeReplace = new RegExp("{{>" + key + "}}", 'g');
|
||
var value = object[key];
|
||
result = result.replace(normalReplace, value);
|
||
result = result.replace(escapeReplace, Scrutari.escape(value));
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.Utils.compareCodebase = function (obj1, obj2) {
|
||
var code1 = obj1.codebase;
|
||
var code2 = obj2.codebase;
|
||
if (code1 < code2) {
|
||
return -1;
|
||
} else if (code1 > code2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
Scrutari.Utils.compareCodecorpus = function (obj1, obj2) {
|
||
var code1 = obj1.codecorpus;
|
||
var code2 = obj2.codecorpus;
|
||
if (code1 < code2) {
|
||
return -1;
|
||
} else if (code1 > code2) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
Scrutari.Utils.getCompareLocaleFunction = function (locales) {
|
||
var _localeCompareSupportsLocales = function () {
|
||
try {
|
||
"a".localeCompare("b", "i");
|
||
} catch (exception) {
|
||
return exception.name === "RangeError";
|
||
}
|
||
return false;
|
||
};
|
||
var _localesCompare = function (string1, string2) {
|
||
return string1.localeCompare(string2, locales, {
|
||
usage: "sort",
|
||
sensitivity: "base",
|
||
ignorePunctuation: true});
|
||
};
|
||
var _oldCompare = function (string1, string2) {
|
||
string1 = string1.toLowerCase();
|
||
string2 = string2.toLowerCase();
|
||
return string1.localeCompare(string2);
|
||
};
|
||
if (_localeCompareSupportsLocales()) {
|
||
return _localesCompare;
|
||
} else {
|
||
return _oldCompare;
|
||
}
|
||
};
|
||
Scrutari.Utils.buildCorpusMap = function (scrutariMeta, arrays) {
|
||
var corpusMap = new Object();
|
||
var finalCount = 0;
|
||
if (arrays.categoryArray) {
|
||
finalCount++;
|
||
var arrayForCategories = scrutariMeta.getCorpusArrayForCategories(arrays.categoryArray);
|
||
for(var i = 0; i < arrayForCategories.length; i++) {
|
||
var key = "code_" + arrayForCategories[i];
|
||
if (corpusMap.hasOwnProperty(key)) {
|
||
corpusMap[key] = corpusMap[key] + 1;
|
||
} else {
|
||
corpusMap[key] = 1;
|
||
}
|
||
}
|
||
}
|
||
if (arrays.baseArray) {
|
||
finalCount++;
|
||
var arrayForBases = scrutariMeta.getCorpusArrayForBases(arrays.baseArray);
|
||
for(var i = 0; i < arrayForBases.length; i++) {
|
||
var key = "code_" + arrayForBases[i];
|
||
if (corpusMap.hasOwnProperty(key)) {
|
||
corpusMap[key] = corpusMap[key] + 1;
|
||
} else {
|
||
corpusMap[key] = 1;
|
||
}
|
||
}
|
||
}
|
||
if (arrays.corpusArrays) {
|
||
finalCount++;
|
||
for(var i = 0; i < arrays.corpusArrays.length; i++) {
|
||
var key = "code_" + arrays.corpusArrays[i];
|
||
if (corpusMap.hasOwnProperty(key)) {
|
||
corpusMap[key] = corpusMap[key] + 1;
|
||
} else {
|
||
corpusMap[key] = 1;
|
||
}
|
||
}
|
||
}
|
||
corpusMap.completeValue = finalCount;
|
||
return corpusMap;
|
||
};
|
||
Scrutari.Utils.checkKey = function (type, value) {
|
||
switch(type) {
|
||
case "base":
|
||
case "corpus":
|
||
return "code_" + value;
|
||
}
|
||
return value;
|
||
};
|
||
Scrutari.Loc = function (map) {
|
||
if (map) {
|
||
this.map = map;
|
||
} else {
|
||
this.map = new Object();
|
||
}
|
||
};
|
||
Scrutari.Loc.prototype.putAll = function (map) {
|
||
for(var key in map) {
|
||
this.map[key] = map[key];
|
||
}
|
||
};
|
||
Scrutari.Loc.prototype.putLoc = function (locKey, locText) {
|
||
this.map[locKey] = locText;
|
||
};
|
||
Scrutari.Loc.prototype.loc = function (locKey, ...values) {
|
||
if (!this.map.hasOwnProperty(locKey)) {
|
||
return locKey;
|
||
}
|
||
var text = this.map[locKey];
|
||
var length = values.length;
|
||
if ((length === 1) && (Array.isArray(values[0]))) {
|
||
values = values[0];
|
||
length = values.length;
|
||
}
|
||
if (length > 0) {
|
||
for(let i = 0; i < length; i++) {
|
||
let mark = "{" + i + "}";
|
||
text = text.replace(mark, values[i]);
|
||
}
|
||
}
|
||
return text;
|
||
};
|
||
Scrutari.Loc.prototype.escape = function (locKey, ...values) {
|
||
if ((values.length === 1) && (Array.isArray(values[0]))) {
|
||
values = values[0];
|
||
}
|
||
return Scrutari.escape(this.loc(locKey, values));
|
||
};
|
||
Scrutari.FilterState = function () {
|
||
this.empty = true;
|
||
this.langOnly = true;
|
||
this.all = {
|
||
category: true,
|
||
base: true,
|
||
corpus: true,
|
||
lang: true
|
||
};
|
||
this.maps = {
|
||
category: {},
|
||
base: {},
|
||
corpus: {},
|
||
lang: {}
|
||
};
|
||
this.titles = {
|
||
category: [],
|
||
base: [],
|
||
corpus: [],
|
||
lang: []
|
||
};
|
||
};
|
||
Scrutari.FilterState.prototype.contains = function (type, key) {
|
||
if (this.all[type]) {
|
||
return true;
|
||
}
|
||
key = Scrutari.Utils.checkKey(type, key);
|
||
return this.maps[type].hasOwnProperty(key);
|
||
};
|
||
Scrutari.FilterState.prototype.add = function (type, key, title) {
|
||
this.all[type] = false;
|
||
this.empty = false;
|
||
if (type !== "lang") {
|
||
this.langOnly = false;
|
||
}
|
||
key = Scrutari.Utils.checkKey(type, key);
|
||
if (!this.maps[type].hasOwnProperty(key)) {
|
||
if (!title) {
|
||
title = key;
|
||
}
|
||
this.maps[type][key] = title;
|
||
this.titles[type].push(title);
|
||
}
|
||
};
|
||
Scrutari.Stats = function (scrutariMeta) {
|
||
this.unitArray = new Array();
|
||
var maps = {
|
||
category: {},
|
||
base: {},
|
||
corpus: {},
|
||
lang: {}
|
||
};
|
||
this.maps = maps;
|
||
this.filterState = null;
|
||
for(let corpus of scrutariMeta.getCorpusArray()) {
|
||
let langArray = corpus.stats.langArray;
|
||
let category = scrutariMeta.getCategoryForCorpus(corpus.codecorpus);
|
||
let categoryName = "";
|
||
if (category) {
|
||
categoryName = category.name;
|
||
}
|
||
for(let lang of langArray) {
|
||
let unit = new Scrutari.Stats.Unit(categoryName, corpus.codebase, corpus.codecorpus, lang.lang, lang.fiche);
|
||
this.unitArray.push(unit);
|
||
_addInMap("category", unit, categoryName);
|
||
_addInMap("base", unit, "code_" + corpus.codebase);
|
||
_addInMap("corpus", unit, "code_" + corpus.codecorpus);
|
||
_addInMap("lang", unit, lang.lang);
|
||
}
|
||
}
|
||
function _addInMap(type, unit, key) {
|
||
var map = maps[type];
|
||
if (!map.hasOwnProperty(key)) {
|
||
map[key] = new Array();
|
||
}
|
||
map[key].push(unit);
|
||
}
|
||
};
|
||
Scrutari.Stats.prototype.update = function (filterState) {
|
||
this.filterState = filterState;
|
||
};
|
||
Scrutari.Stats.prototype.getFicheCount = function (type, key) {
|
||
key = Scrutari.Utils.checkKey(type, key);
|
||
var map = this.maps[type];
|
||
if (!map.hasOwnProperty(key)) {
|
||
return 0;
|
||
}
|
||
var count = 0;
|
||
for(let unit of map[key]) {
|
||
count += unit.check(this.filterState);
|
||
}
|
||
return count;
|
||
};
|
||
Scrutari.Stats.Unit = function (category, base, corpus, lang, value) {
|
||
this.category = category;
|
||
this.base = base;
|
||
this.corpus = corpus;
|
||
this.lang = lang;
|
||
this.value = value;
|
||
};
|
||
Scrutari.Stats.Unit.prototype.check = function (filterState) {
|
||
if (!filterState) {
|
||
return this.value;
|
||
}
|
||
if (!filterState.contains("category", this.category)) {
|
||
return 0;
|
||
}
|
||
if (!filterState.contains("base", this.base)) {
|
||
return 0;
|
||
}
|
||
if (!filterState.contains("corpus", this.corpus)) {
|
||
return 0;
|
||
}
|
||
if (!filterState.contains("lang", this.lang)) {
|
||
return 0;
|
||
}
|
||
return this.value;
|
||
};
|
||
Scrutari.Client = function (scrutariConfig, clientId) {
|
||
this.scrutariConfig = scrutariConfig;
|
||
this.clientId = clientId;
|
||
this.scrutariMeta = null;
|
||
this.stats = null;
|
||
this.isWaiting = false;
|
||
this.mainCurrentScrutariResult = null;
|
||
this.currentScrutariResult = null;
|
||
this.options = {
|
||
withCorpus: false,
|
||
baseSort: "fiche-count",
|
||
corpusSort: "fiche-count",
|
||
categorySort: "rank",
|
||
langSort: "code",
|
||
initialQuery: "",
|
||
initialQId: "",
|
||
initialFilters: null,
|
||
permalinkPattern: null,
|
||
ficheTarget: "_blank",
|
||
ignoreIcon: false,
|
||
ignoreThumbnail: false,
|
||
ficheBodyList: null,
|
||
mainTitle: null,
|
||
hooks: {}
|
||
};
|
||
this._locInstance = new Scrutari.Loc();
|
||
this._ignoreArray = new Array();
|
||
this._ficheBodyTemplateArray = [
|
||
"fiche_mtitre",
|
||
"fiche_msoustitre",
|
||
"fiche_year",
|
||
"fiche_primaryattributearray",
|
||
"fiche_mcomplementarray",
|
||
"fiche_secondaryattributearray",
|
||
"fiche_motclearray",
|
||
"fiche_bythesaurusarray"
|
||
];
|
||
this._structureMap = {};
|
||
this._templateMap = {};
|
||
this._scrutariResultMap = {};
|
||
this._historyNumber = 0;
|
||
this.functions = {};
|
||
if (typeof SCRUTARI_L10N !== 'undefined') {
|
||
this._locInstance.putAll(SCRUTARI_L10N);
|
||
}
|
||
if (typeof SCRUTARI_HTML !== 'undefined') {
|
||
this._htmlObject = SCRUTARI_HTML;
|
||
}
|
||
if (typeof SCRUTARI_FRAMEWORKINIT === 'function') {
|
||
SCRUTARI_FRAMEWORKINIT(this);
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.loc = function (locKey) {
|
||
return this._locInstance.loc(locKey);
|
||
};
|
||
Scrutari.Client.prototype.toPermalink = function (qId) {
|
||
if (this.options.permalinkPattern) {
|
||
return this.scrutariConfig.getPermalinkUrl(qId, this.options.permalinkPattern);
|
||
}
|
||
return null;
|
||
};
|
||
Scrutari.Client.prototype.storeResult = function (historyName, scrutariResult) {
|
||
this._scrutariResultMap[historyName] = scrutariResult;
|
||
};
|
||
Scrutari.Client.prototype.unstoreResult = function (historyName) {
|
||
this._scrutariResultMap[historyName] = null;
|
||
};
|
||
Scrutari.Client.prototype.getResult = function (historyName) {
|
||
if (this._scrutariResultMap.hasOwnProperty(historyName)) {
|
||
return this._scrutariResultMap[historyName];
|
||
} else {
|
||
return null;
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.newHistoryNumber = function () {
|
||
this._historyNumber++;
|
||
return this._historyNumber;
|
||
};
|
||
Scrutari.Client.prototype.ignoreElement = function (elementName) {
|
||
return $.inArray(elementName, this._ignoreArray) > -1;
|
||
};
|
||
Scrutari.Client.prototype.getTemplate = function (templateName) {
|
||
var template = this.hook("getTemplate", templateName);
|
||
if (template) {
|
||
if (typeof template === "function") {
|
||
return template;
|
||
} else {
|
||
Scrutari.log("getTemplate hook does not return function for template name: " + templateName);
|
||
}
|
||
}
|
||
if (templateName.indexOf(":") === -1) {
|
||
templateName = "scrutari:" + templateName;
|
||
}
|
||
template = $.templates[templateName];
|
||
if (!template) {
|
||
return function () {
|
||
return "Unknown template : " + templateName;
|
||
};
|
||
} else {
|
||
return template;
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.render = function (templateName, context, helpers) {
|
||
var templateFunction = this.getTemplate(templateName);
|
||
return templateFunction(context, helpers);
|
||
};
|
||
Scrutari.Client.prototype.hook = function (name) {
|
||
if (!this.options.hooks.hasOwnProperty(name)) {
|
||
return;
|
||
}
|
||
var hook = this.options.hooks[name];
|
||
if (typeof hook === "function") {
|
||
var newArgs = new Array();
|
||
var argLength = arguments.length;
|
||
if (argLength > 1) {
|
||
for(let i = 1; i < argLength; i++) {
|
||
newArgs.push(arguments[i]);
|
||
}
|
||
}
|
||
hook.apply(this, newArgs);
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.getFicheBodyTemplateArray = function (fiche, categoryName) {
|
||
var array = this.hook("getFicheBodyTemplateArray", fiche, categoryName);
|
||
if (array) {
|
||
return array;
|
||
} else {
|
||
return this._ficheBodyTemplateArray;
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.$ = function (properties) {
|
||
return Scrutari.$("#" + this.clientId, properties);
|
||
};
|
||
Scrutari.Client.prototype.$area = function (name, action) {
|
||
var $area = this.$({scrutariArea: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'show':
|
||
this.show ($area);
|
||
break;
|
||
case 'hide':
|
||
this.hide($area);
|
||
break;
|
||
}
|
||
}
|
||
return $area;
|
||
};
|
||
Scrutari.Client.prototype.$block = function (name, action) {
|
||
var $block = this.$({scrutariBlock: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'show':
|
||
this.show ($block);
|
||
break;
|
||
case 'hide':
|
||
this.hide($block);
|
||
break;
|
||
}
|
||
}
|
||
return $block;
|
||
};
|
||
Scrutari.Client.prototype.$button = function (name, target) {
|
||
if (target) {
|
||
return this.$({scrutariButton: name, scrutariTarget: target});
|
||
} else {
|
||
return this.$({scrutariButton: name});
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.$count = function (name, action, value) {
|
||
var $count = this.$({scrutariCount: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'update':
|
||
if (!value) {
|
||
value = 0;
|
||
}
|
||
Scrutari.$($count, {scrutariRole: "value"}).html(this.formatNumber(value));
|
||
break;
|
||
}
|
||
}
|
||
return $count;
|
||
};
|
||
Scrutari.Client.prototype.$form = function (name) {
|
||
return this.$({scrutariForm: name});
|
||
};
|
||
Scrutari.Client.prototype.$group = function (name) {
|
||
return this.$({scrutariGroup: name});
|
||
};
|
||
Scrutari.Client.prototype.$hidden = function (name, action) {
|
||
var $hidden = this.$({scrutariHidden: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'show':
|
||
this.show ($hidden);
|
||
break;
|
||
case 'hide':
|
||
this.hide($hidden);
|
||
break;
|
||
}
|
||
}
|
||
return $hidden;
|
||
};
|
||
Scrutari.Client.prototype.$input = function (name, value) {
|
||
if (value) {
|
||
return this.$({_element: "input", _name: name, _value: value});
|
||
} else {
|
||
return this.$({_element: "input", _name: name});
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.$input_checked = function (name, value) {
|
||
if (value) {
|
||
return this.$({_element: "input", _name: name, _value: value, _checked: true});
|
||
} else {
|
||
return this.$({_element: "input", _name: name, _checked: true});
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.$label = function (name) {
|
||
return this.$({scrutariLabel: name});
|
||
};
|
||
Scrutari.Client.prototype.$link = function (name) {
|
||
return this.$({scrutariLink: name});
|
||
};
|
||
Scrutari.Client.prototype.$modal = function (name, action) {
|
||
var $modal = this.$({scrutariModal: name});
|
||
if ((action) && (this.functions.hasOwnProperty("modalAction"))) {
|
||
this.functions.modalAction($modal, action);
|
||
}
|
||
return $modal;
|
||
};
|
||
Scrutari.Client.prototype.$panel = function (name, action) {
|
||
var $panel = this.$({scrutariPanel: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'show':
|
||
this.show ($panel);
|
||
break;
|
||
case 'hide':
|
||
this.hide($panel);
|
||
break;
|
||
}
|
||
}
|
||
return $panel;
|
||
};
|
||
Scrutari.Client.prototype.$title = function (name, action) {
|
||
var $title = this.$({scrutariTitle: name});
|
||
if (action) {
|
||
switch(action) {
|
||
case 'show':
|
||
this.show ($title);
|
||
break;
|
||
case 'hide':
|
||
this.hide($title);
|
||
break;
|
||
}
|
||
}
|
||
return $title;
|
||
};
|
||
Scrutari.Client.prototype.show = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.removeClass("scrutari-Hidden");
|
||
};
|
||
Scrutari.Client.prototype.hide = function (jqArgument) {
|
||
var $elements = Scrutari.convert(jqArgument);
|
||
$elements.addClass("scrutari-Hidden");
|
||
};
|
||
Scrutari.Client.prototype.scrollToResult = function () {
|
||
$(window).scrollTop(this.$area('result').offset().top);
|
||
};
|
||
Scrutari.Client.prototype.getStructureHtml = function (name) {
|
||
if (this._structureMap.hasOwnProperty(name)) {
|
||
return this._structureMap[name];
|
||
} else {
|
||
Scrutari.log("Unknown structure: " + name);
|
||
return "";
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.getStructureNameArray = function () {
|
||
var result = new Array();
|
||
for(let prop in this._structureMap) {
|
||
result.push(prop);
|
||
}
|
||
return result;
|
||
};
|
||
Scrutari.Client.prototype.getTemplateHtml = function (name) {
|
||
if (this._templateMap.hasOwnProperty(name)) {
|
||
return this._templateMap[name];
|
||
} else {
|
||
Scrutari.log("Unknown template: " + name);
|
||
return "";
|
||
}
|
||
};
|
||
Scrutari.Client.prototype.formatNumber = function (number) {
|
||
if (Number.prototype.toLocaleString) {
|
||
return number.toLocaleString(this.scrutariConfig.lang);
|
||
} else {
|
||
return number;
|
||
}
|
||
};
|
||
Scrutari.Client.init = function (scrutariConfig, clientId, options, callback) {
|
||
if (!$.templates) {
|
||
throw new Error("JsRender is not installed");
|
||
}
|
||
$.views.helpers("scrutari_mark", function(markArray) {
|
||
return Scrutari.Utils.mark(markArray);
|
||
});
|
||
Scrutari.Meta.load(scrutariConfig, function (scrutariMeta) {
|
||
var client = new Scrutari.Client(scrutariConfig, clientId);
|
||
$.views.helpers({
|
||
scrutari_client: client,
|
||
scrutari_loc: function(key, ...values) {
|
||
return client.loc(key, values);
|
||
},
|
||
scrutari_format: function(number) {
|
||
return client.formatNumber(number);
|
||
}
|
||
});
|
||
client.scrutariMeta = scrutariMeta;
|
||
client.stats = new Scrutari.Stats(scrutariMeta);
|
||
_checkOptions(client, options, scrutariMeta);
|
||
_initMaps(client);
|
||
Scrutari.Client.Ui.init(client);
|
||
if (callback) {
|
||
callback(client);
|
||
}
|
||
});
|
||
function _checkOptions (client, options, scrutariMeta) {
|
||
var defaultOptions = scrutariMeta.getDefaultOptions();
|
||
for(let key in defaultOptions) {
|
||
client.options[key] = defaultOptions[key];
|
||
}
|
||
if (options) {
|
||
for(let key in options) {
|
||
client.options[key] = options[key];
|
||
}
|
||
if (options.locMap) {
|
||
client._locInstance.putAll(options.locMap);
|
||
}
|
||
if (options.ignoreList) {
|
||
let ignoreList = options.ignoreList;
|
||
let ignoreArray;
|
||
if (typeof ignoreList === "string") {
|
||
ignoreArray = ignoreList.split(",");
|
||
} else if (Array.isArray(ignoreList)) {
|
||
ignoreArray = ignoreList;
|
||
}
|
||
if (ignoreArray) {
|
||
for(let ignore of ignoreArray) {
|
||
client._ignoreArray.push(ignore.trim());
|
||
}
|
||
}
|
||
}
|
||
if (options.ficheBodyList) {
|
||
let ficheBodyList = options.ficheBodyList;
|
||
let array1;
|
||
if (typeof ficheBodyList === "string") {
|
||
array1 = ficheBodyList.split(",");
|
||
} else if (Array.isArray(ficheBodyList)) {
|
||
array1 = ficheBodyList;
|
||
}
|
||
if (array1) {
|
||
let array2 = new Array();
|
||
for(let token of array1) {
|
||
token = token.trim();
|
||
if (token.length > 0) {
|
||
array2.push(token);
|
||
}
|
||
}
|
||
if (array2.length > 0) {
|
||
client._ficheBodyTemplateArray = array2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function _initHtmlObject (client, htmlObject) {
|
||
if (htmlObject) {
|
||
if (htmlObject.structure) {
|
||
for(var key in htmlObject.structure) {
|
||
client._structureMap[key] = htmlObject.structure[key];
|
||
}
|
||
}
|
||
if (htmlObject.templates) {
|
||
for(var key in htmlObject.templates) {
|
||
client._templateMap[key] = htmlObject.templates[key];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function _initMaps (client) {
|
||
_initHtmlObject(client, client._htmlObject);
|
||
_initHtmlObject(client, options.htmlObject);
|
||
$("script[type='text/x-scrutari-structure']").each(function (index, element) {
|
||
client._structureMap[element.dataset.name] = $(element).html();
|
||
});
|
||
$("script[type='text/x-scrutari-template']").each(function (index, element) {
|
||
client._templateMap[element.dataset.name] = $(element).html();
|
||
});
|
||
for(var name in client._templateMap) {
|
||
var templateText = client._templateMap[name];
|
||
templateText = templateText.replace(/tmpl=\"([-_0-9a-z]+)\"/g, 'tmpl="scrutari:$1"');
|
||
$.templates("scrutari:" + name, templateText);
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Client.Result = {};
|
||
Scrutari.Client.Result.show = function (client, scrutariResult, searchOrigin) {
|
||
client.$hidden("start", 'show');
|
||
var ficheCount = scrutariResult.getFicheCount();
|
||
client.$count("stats-result", 'update', ficheCount);
|
||
var $ficheDisplayBlock = client.$block('ficheDisplay');
|
||
$ficheDisplayBlock.empty();
|
||
client.currentScrutariResult = scrutariResult;
|
||
if (searchOrigin === "mainsearch") {
|
||
Scrutari.Client.Result.setCurrentMain(client, scrutariResult);
|
||
Scrutari.Client.Result.addToHistory(client, scrutariResult);
|
||
} else if (searchOrigin === "subsearch") {
|
||
let subsearchText = "+ " + Scrutari.Utils.formatSearchSequence(client, scrutariResult) + " = " + scrutariResult.getFicheCount();
|
||
if (client.currentHistoryName) {
|
||
Scrutari.$(client.$block(client.currentHistoryName), {scrutariRole: "subsearch"}).text(subsearchText);
|
||
}
|
||
}
|
||
if (ficheCount === 0) {
|
||
client.$hidden("empty", 'hide');
|
||
let withFilter;
|
||
if (searchOrigin === "subsearch") {
|
||
withFilter = true;
|
||
} else {
|
||
withFilter = _hasFilter(scrutariResult.requestParameters);
|
||
}
|
||
$ficheDisplayBlock.html(client.render("emptyfichedisplay", {withFilter: withFilter, scrutariResult: scrutariResult}));
|
||
return;
|
||
}
|
||
client.$hidden("empty", 'show');
|
||
if (ficheCount >= client.scrutariConfig.options.subsearchThreshold) {
|
||
client.$hidden("threshold", 'show');
|
||
} else {
|
||
client.$hidden("threshold", 'hide');
|
||
}
|
||
var qId = scrutariResult.getQId();
|
||
var permalink = client.toPermalink(qId);
|
||
if (permalink) {
|
||
client.$link("permalink").attr("href", permalink).html(permalink);
|
||
}
|
||
_updateDownloadHref("ods");
|
||
_updateDownloadHref("csv");
|
||
_updateDownloadHref("atom");
|
||
if (scrutariResult.getFicheGroupType() === 'category') {
|
||
var contextObj = {
|
||
scrutariResult: scrutariResult,
|
||
array: new Array()
|
||
};
|
||
var categoryCount = scrutariResult.getCategoryCount();
|
||
for(let i = 0; i < categoryCount; i++) {
|
||
let category = scrutariResult.getCategory(i);
|
||
let metaCategory = client.scrutariMeta.getCategory(category.name);
|
||
if (metaCategory) {
|
||
category = metaCategory;
|
||
} else {
|
||
category.phraseMap = {};
|
||
category.attrMap = {};
|
||
}
|
||
contextObj.array.push({
|
||
category: category,
|
||
active: (i === 0),
|
||
fichestat: scrutariResult.getCategoryFicheCount(i)
|
||
});
|
||
}
|
||
$ficheDisplayBlock.html(client.render("categoryfichedisplay", contextObj));
|
||
for(let i = 0; i < categoryCount; i++) {
|
||
let category = scrutariResult.getCategory(i);
|
||
Scrutari.Client.Result.categoryPaginationChange(client, category.name, 1);
|
||
}
|
||
} else {
|
||
$ficheDisplayBlock.html(client.render("uniquefichedisplay", {scrutariResult: scrutariResult}));
|
||
Scrutari.Client.Result.uniquePaginationChange(client, 1);
|
||
}
|
||
client.hook("showResult", scrutariResult, searchOrigin);
|
||
function _updateDownloadHref(extension) {
|
||
client.$link(extension).attr("href", client.scrutariConfig.getDownloadUrl(qId, extension));
|
||
}
|
||
function _hasFilter(requestParameters) {
|
||
for(var prop in requestParameters) {
|
||
switch(prop) {
|
||
case "baselist":
|
||
case "corpuslist":
|
||
case "categorylist":
|
||
case "langlist":
|
||
var value = requestParameters[prop];
|
||
if (value) {
|
||
return true;
|
||
}
|
||
}
|
||
if (prop.indexOf("flt") === 0) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
};
|
||
Scrutari.Client.Result.displayError = function (client, error, searchOrigin) {
|
||
if (error.parameter !== "q") {
|
||
Scrutari.logError(error);
|
||
return;
|
||
}
|
||
var title = client.loc(error.key);
|
||
if (title !== error.key) {
|
||
var alertMessage = title;
|
||
if (error.hasOwnProperty("array")) {
|
||
alertMessage += client.loc('_ colon');
|
||
for(var i = 0; i < error.array.length; i++) {
|
||
alertMessage += "\n";
|
||
var obj = error.array[i];
|
||
alertMessage += "- ";
|
||
alertMessage += client.loc(obj.key);
|
||
if (obj.hasOwnProperty("value")) {
|
||
alertMessage += client.loc('_ colon');
|
||
alertMessage += " ";
|
||
alertMessage += obj.value;
|
||
}
|
||
}
|
||
}
|
||
alert(alertMessage);
|
||
} else {
|
||
Scrutari.logError(error);
|
||
}
|
||
};
|
||
Scrutari.Client.Result.uniquePaginationChange = function (client, paginationNumber) {
|
||
var paginationLength = client.scrutariConfig.options.paginationLength;
|
||
var scrutariResult = client.currentScrutariResult;
|
||
var html = "";
|
||
if (!scrutariResult.isUniquePaginationLoaded(paginationLength, paginationNumber)) {
|
||
if (client.isWaiting) {
|
||
return;
|
||
}
|
||
client.$block("fiches").html(client.render("ficheloading", {scrutariResult: scrutariResult}));
|
||
client.isWaiting = true;
|
||
scrutariResult.loadUniquePagination(client.scrutariConfig, paginationLength, paginationNumber, _paginationCallback);
|
||
return;
|
||
}
|
||
var paginationFicheArray = scrutariResult.selectUniqueFicheArray(paginationLength, paginationNumber);
|
||
var ficheTemplate = client.getTemplate("fiche");
|
||
for(let fiche of paginationFicheArray) {
|
||
html += ficheTemplate(Scrutari.Client.Result.completeFiche(client, scrutariResult, fiche));
|
||
}
|
||
client.$block("fiches").html(html);
|
||
var tabArray = Scrutari.Utils.getTabArray(scrutariResult.getFicheCount(), paginationLength, paginationNumber);
|
||
var template = client.getTemplate("tabs");
|
||
client.$block("topPagination").html(template({
|
||
tabArray: tabArray,
|
||
type: "unique",
|
||
position: "top"
|
||
}));
|
||
client.$block("bottomPagination").html(template({
|
||
tabArray: tabArray,
|
||
type: "unique",
|
||
position: "bottom"
|
||
}));
|
||
client.hook("paginationChange", paginationFicheArray, {paginationNumber:paginationNumber});
|
||
function _paginationCallback () {
|
||
client.isWaiting = false;
|
||
Scrutari.Client.Result.uniquePaginationChange(client, paginationNumber);
|
||
}
|
||
};
|
||
Scrutari.Client.Result.categoryPaginationChange = function (client, categoryName, paginationNumber) {
|
||
var paginationLength = client.scrutariConfig.options.paginationLength;
|
||
var scrutariResult = client.currentScrutariResult;
|
||
var html = "";
|
||
if (!scrutariResult.isCategoryPaginationLoaded(categoryName, paginationLength, paginationNumber)) {
|
||
client.$block("fiches_" + categoryName).html(client.render("ficheloading", {scrutariResult: scrutariResult}));
|
||
if (client.isWaiting) {
|
||
return;
|
||
}
|
||
client.isWaiting = true;
|
||
scrutariResult.loadCategoryPagination(client.scrutariConfig, categoryName, paginationLength, paginationNumber, _paginationCallback);
|
||
return;
|
||
}
|
||
var paginationFicheArray = scrutariResult.selectCategoryFicheArray(categoryName, paginationLength, paginationNumber);
|
||
var ficheTemplate = client.getTemplate("fiche");
|
||
for(let fiche of paginationFicheArray) {
|
||
html += ficheTemplate(Scrutari.Client.Result.completeFiche(client, scrutariResult, fiche, categoryName));
|
||
}
|
||
client.$block("fiches_" + categoryName).html(html);
|
||
var tabArray = Scrutari.Utils.getTabArray(scrutariResult.getCategoryFicheCountByName(categoryName), paginationLength, paginationNumber);
|
||
var template = client.getTemplate("tabs");
|
||
client.$block("topPagination_" + categoryName).html(template({
|
||
tabArray: tabArray,
|
||
type: "category",
|
||
category: categoryName,
|
||
position: "top"
|
||
}));
|
||
client.$block("bottomPagination_" + categoryName).html(template({
|
||
tabArray: tabArray,
|
||
type: "category",
|
||
category: categoryName,
|
||
position: "bottom"
|
||
}));
|
||
client.hook("paginationChange", paginationFicheArray, {categoryName: categoryName, paginationNumber:paginationNumber});
|
||
function _paginationCallback () {
|
||
client.isWaiting = false;
|
||
Scrutari.Client.Result.categoryPaginationChange(client, categoryName, paginationNumber);
|
||
}
|
||
};
|
||
Scrutari.Client.Result.addToHistory = function (client, scrutariResult) {
|
||
var $historyListBlock = client.$block("historyList");
|
||
if (!Scrutari.exists($historyListBlock)) {
|
||
return;
|
||
}
|
||
if (client.currentHistoryName) {
|
||
var $historyBlock = client.$block(client.currentHistoryName);
|
||
$historyBlock.removeClass("scrutari-history-Active");
|
||
Scrutari.$($historyBlock, {scrutariRole: "subsearch"}).empty();
|
||
client.show(Scrutari.$($historyBlock, {scrutariRole: "remove"}));
|
||
}
|
||
var historyName = "history_" + client.newHistoryNumber();
|
||
Scrutari.Client.Result.setCurrentHistory(client, historyName);
|
||
client.storeResult(historyName, scrutariResult);
|
||
var contextObj = {
|
||
scrutariResult: scrutariResult,
|
||
name: historyName,
|
||
fichestat: scrutariResult.getFicheCount(),
|
||
sequence: Scrutari.Utils.formatSearchSequence(client, scrutariResult)
|
||
};
|
||
$historyListBlock.prepend(client.render("history", contextObj));
|
||
};
|
||
Scrutari.Client.Result.loadHistory = function (client, historyName) {
|
||
var historyScrutariResult = client.getResult(historyName);
|
||
if (historyScrutariResult) {
|
||
var $historyBlock = client.$block(historyName);
|
||
client.currentScrutariResult = historyScrutariResult;
|
||
Scrutari.Client.Result.setCurrentMain(client, historyScrutariResult);
|
||
Scrutari.Client.Result.setCurrentHistory(client, historyName);
|
||
$historyBlock.addClass("scrutari-history-Active");
|
||
client.hide(Scrutari.$($historyBlock, {scrutariRole: "remove"}));
|
||
Scrutari.Client.Result.show(client, historyScrutariResult);
|
||
}
|
||
};
|
||
Scrutari.Client.Result.setCurrentHistory = function (client, historyName) {
|
||
if (client.currentHistoryName) {
|
||
var $historyBlock = client.$block(client.currentHistoryName);
|
||
$historyBlock.removeClass("scrutari-history-Active");
|
||
Scrutari.$($historyBlock, {scrutariRole: "subsearch"}).empty();
|
||
client.show (Scrutari.$($historyBlock, {scrutariRole: "remove"}));
|
||
}
|
||
client.currentHistoryName = historyName;
|
||
};
|
||
Scrutari.Client.Result.setCurrentMain = function (client, scrutariResult) {
|
||
client.mainCurrentScrutariResult = scrutariResult;
|
||
client.$block("currentSearchSequence").text(Scrutari.Utils.formatSearchSequence(client, scrutariResult) + " (" + scrutariResult.getFicheCount() + ")");
|
||
};
|
||
Scrutari.Client.Result.completeFiche = function(client, scrutariResult, fiche, categoryName) {
|
||
var scrutariMeta = client.scrutariMeta;
|
||
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");
|
||
}
|
||
if (!options.ignoreThumbnail) {
|
||
Scrutari.Complete.thumbnail(fiche);
|
||
}
|
||
if (!options.ignoreIcon) {
|
||
Scrutari.Complete.icon(fiche);
|
||
}
|
||
if (options.ficheTarget) {
|
||
Scrutari.Complete.target(fiche, options.ficheTarget);
|
||
}
|
||
fiche._bodyTemplateArray = client.getFicheBodyTemplateArray(fiche, categoryName);
|
||
client.hook("completeFiche", scrutariResult, fiche, categoryName);
|
||
return fiche;
|
||
function _motcleProvider(code) {
|
||
return scrutariResult.getMotcle(code);
|
||
}
|
||
};
|
||
Scrutari.Client.Ui = {};
|
||
Scrutari.Client.Ui.filterChange = function (client) {
|
||
var globalFicheCount = client.scrutariMeta.getGlobalFicheCount();
|
||
var filterState = Scrutari.Client.Ui.buildFilterState(client);
|
||
var filterFicheCount;
|
||
if (filterState.empty) {
|
||
filterFicheCount = client.scrutariMeta.getGlobalFicheCount();
|
||
} else {
|
||
filterFicheCount = -1;
|
||
}
|
||
client.stats.update(filterState);
|
||
if (!_checkFilterFicheCount("base")) {
|
||
if (!_checkFilterFicheCount("corpus")) {
|
||
if (!_checkFilterFicheCount("category")) {
|
||
_checkFilterFicheCount("lang");
|
||
}
|
||
}
|
||
}
|
||
_updateState("base");
|
||
_updateState("corpus");
|
||
_updateState("category");
|
||
_updateState("lang");
|
||
var filterTitlesArray = new Array();
|
||
_addFilterTitles("base", "_ label_base_one", "_ label_base_many");
|
||
_addFilterTitles("corpus", "_ label_corpus_one", "_ label_corpus_many");
|
||
_addFilterTitles("lang", "_ label_lang_one", "_ label_lang_many");
|
||
_addFilterTitles("category", "_ label_category_one", "_ label_category_many");
|
||
var $filterFicheCount = client.$count('stats-filter', 'update', filterFicheCount);
|
||
var $filterValue = Scrutari.$($filterFicheCount, {scrutariRole: "value"});
|
||
if (filterFicheCount === globalFicheCount) {
|
||
$filterValue.removeClass("scrutari-stats-Filter").removeClass("scrutari-stats-None");
|
||
client.$hidden('filter', 'hide');
|
||
} else if (filterFicheCount === 0) {
|
||
$filterValue.removeClass("scrutari-stats-Filter").addClass("scrutari-stats-None");
|
||
client.$hidden('filter', 'show');
|
||
} else {
|
||
$filterValue.addClass("scrutari-stats-Filter").removeClass("scrutari-stats-None");
|
||
client.$hidden('filter', 'show');
|
||
}
|
||
var $filterTitles = Scrutari.$($filterFicheCount, {scrutariRole: "titles"});
|
||
if (filterTitlesArray.length > 0) {
|
||
$filterTitles.html(filterTitlesArray.join(" | "));
|
||
} else {
|
||
$filterTitles.html("");
|
||
}
|
||
function _checkFilterFicheCount(type) {
|
||
var $stat = client.$({scrutariStatType: type});
|
||
if ($stat.length > 0) {
|
||
filterFicheCount = 0;
|
||
$stat.each(function (index, element) {
|
||
let key = element.dataset.scrutariStatKey;
|
||
filterFicheCount += client.stats.getFicheCount(type, key);
|
||
});
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
function _updateState(type) {
|
||
client.$({scrutariStatType: type}).each(function (index, element) {
|
||
var $el = $(element);
|
||
var key = element.dataset.scrutariStatKey;
|
||
var ficheCount = client.stats.getFicheCount(type, key);
|
||
var $statTitle = Scrutari.$parents($el, {scrutariRole: "stat-text"});
|
||
if (ficheCount != element.dataset.scrutariStatDefault) {
|
||
if (ficheCount === 0) {
|
||
$el.html("");
|
||
$statTitle.addClass("scrutari-panel-Excluded");
|
||
} else {
|
||
$statTitle.removeClass("scrutari-panel-Excluded");
|
||
$el.html(client.formatNumber(ficheCount) + " / ");
|
||
}
|
||
} else {
|
||
$el.html("");
|
||
$statTitle.removeClass("scrutari-panel-Excluded");
|
||
}
|
||
});
|
||
}
|
||
function _addFilterTitles(type, oneLocKey, manyLocKey) {
|
||
var array = filterState.titles[type];
|
||
if (array.length > 0) {
|
||
var locKey = (array.length === 1)?oneLocKey:manyLocKey;
|
||
filterTitlesArray.push(client.loc(locKey) + client.loc('_ colon') + " " + array.join(", "));
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.buildRequestParameters = function (client) {
|
||
var requestParameters = new Object();
|
||
_checkFilter("baselist", "base");
|
||
_checkFilter("corpuslist", "corpus");
|
||
_checkFilter("categorylist", "category");
|
||
_checkFilter("langlist", "lang");
|
||
requestParameters["q-mode"] = client.$input_checked("q-mode").val();
|
||
var ponderation = client.$input_checked("ponderation").val();
|
||
if (ponderation === 'date') {
|
||
requestParameters.ponderation = '10,80,5,5';
|
||
}
|
||
var periode = $.trim(client.$input("periode").val());
|
||
if (periode) {
|
||
requestParameters["flt-date"] = periode;
|
||
}
|
||
if (Scrutari.exists(client.$input_checked("wildchar"))) {
|
||
requestParameters.wildchar = "end";
|
||
} else {
|
||
requestParameters.wildchar = "none";
|
||
}
|
||
return requestParameters;
|
||
function _checkFilter (paramName, target) {
|
||
if (client.$button("enablePanel", target).data("scrutariState") === "on") {
|
||
var $inputs = client.$input_checked(target);
|
||
var value = "";
|
||
for(var i = 0; i < $inputs.length; i++) {
|
||
if (i > 0) {
|
||
value += ",";
|
||
}
|
||
value += $inputs[i].value;
|
||
}
|
||
if (value.length > 0) {
|
||
requestParameters[paramName] = value;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.buildFilterState = function (client) {
|
||
var filterState = new Scrutari.FilterState();
|
||
_check("base");
|
||
_check("corpus");
|
||
_check("category");
|
||
_check("lang");
|
||
return filterState;
|
||
function _check (target) {
|
||
if (client.$button("enablePanel", target).data("scrutariState") !== "on") {
|
||
return;
|
||
}
|
||
client.$input_checked(target).each(function (index,element) {
|
||
filterState.add(target, element.value, element.dataset.scrutariTitle);
|
||
});
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.init = function (client) {
|
||
var scrutariMeta = client.scrutariMeta;
|
||
Scrutari.Client.Ui.initHtml(client);
|
||
Scrutari.Client.Ui.initForms(client);
|
||
Scrutari.Client.Ui.initClicks(client);
|
||
Scrutari.Client.Ui.initMainTitle(client);
|
||
client.$count('stats-global', 'update', scrutariMeta.getGlobalFicheCount());
|
||
client.$hidden('init', 'show');
|
||
client.show(client.$button('parametersDisplay'));
|
||
var locales = client.scrutariConfig.lang;
|
||
var langArray = scrutariMeta.getLangArray();
|
||
if ((langArray.length > 1) && (Scrutari.exists(client.$panel('lang')))) {
|
||
for(var i = 0, len = langArray.length; i < len; i++) {
|
||
var title = "";
|
||
var code = langArray[i].lang;
|
||
var label = scrutariMeta.getLangLabel(code);
|
||
if (label !== code) {
|
||
title = label;
|
||
}
|
||
langArray[i].title = title;
|
||
}
|
||
var langSortFunction = Scrutari.Utils.getLangSortFunction(client.options.langSort, locales);
|
||
if (langSortFunction) {
|
||
langArray = langArray.sort(langSortFunction);
|
||
}
|
||
Scrutari.Utils.divideIntoColumns(langArray, client.$group("langColumns"), client.getTemplate("lang"));
|
||
client.$panel('lang', 'show');
|
||
}
|
||
if ((scrutariMeta.withCategory()) && (Scrutari.exists(client.$panel('category')))) {
|
||
var categoryArray = scrutariMeta.getCategoryArray(Scrutari.Utils.getCategorySortFunction(client.options.categorySort, locales));
|
||
Scrutari.Utils.divideIntoColumns(categoryArray, client.$group("categoryColumns"), client.getTemplate("category"));
|
||
client.$panel('category', 'show');
|
||
}
|
||
if (client.options.withCorpus) {
|
||
if (Scrutari.exists(client.$panel('corpus'))) {
|
||
var corpusArray = scrutariMeta.getCorpusArray(Scrutari.Utils.getCorpusSortFunction(client.options.corpusSort, locales));
|
||
if (corpusArray.length > 1) {
|
||
Scrutari.Utils.divideIntoColumns(corpusArray, client.$group("corpusColumns"), client.getTemplate("corpus"));
|
||
client.$panel('corpus', 'show');
|
||
}
|
||
}
|
||
} else {
|
||
if (Scrutari.exists(client.$panel('base'))) {
|
||
var baseArray = scrutariMeta.getBaseArray(Scrutari.Utils.getBaseSortFunction(client.options.baseSort, locales));
|
||
if (baseArray.length > 1) {
|
||
Scrutari.Utils.divideIntoColumns(baseArray, client.$group("baseColumns"), client.getTemplate("base"));
|
||
client.$panel('base', 'show');
|
||
}
|
||
}
|
||
}
|
||
var initialFilters = client.options.initialFilters;
|
||
if (initialFilters) {
|
||
_initFilter("baselist", "base");
|
||
_initFilter("corpuslist","corpus");
|
||
_initFilter("categorylist", "category");
|
||
_initFilter("langlist", "lang");
|
||
}
|
||
var initialQuery = client.options.initialQuery;
|
||
var initialQId = client.options.initialQId;
|
||
if (initialQuery) {
|
||
var $mainSearchForm = client.$form('mainsearch');
|
||
if (Scrutari.exists($mainSearchForm)) {
|
||
$mainSearchForm.find("input[name='q']").val(initialQuery);
|
||
$mainSearchForm.submit();
|
||
}
|
||
} else if (initialQId) {
|
||
var requestParameters = Scrutari.Client.Ui.buildRequestParameters(client);
|
||
requestParameters["qid"] = initialQId;
|
||
client.$modal("loading", 'show');
|
||
client.hook("newSearch", requestParameters, "qidsearch");
|
||
Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, _mainsearchScrutariResultCallback, _mainScrutariErrorCallback);
|
||
}
|
||
function _initFilter (optionName, target) {
|
||
if (!initialFilters.hasOwnProperty(optionName)) {
|
||
return;
|
||
}
|
||
Scrutari.Client.Ui.initFilter(client, target, initialFilters[optionName].split(","));
|
||
}
|
||
function _initFilterByQuery (list, target) {
|
||
if (list) {
|
||
Scrutari.Client.Ui.initFilter(client, target, list.array);
|
||
}
|
||
}
|
||
function _mainsearchScrutariResultCallback (scrutariResult) {
|
||
var $mainSearchForm = client.$form('mainsearch');
|
||
$mainSearchForm.find("input[name='q']").val(scrutariResult.searchMeta.q);
|
||
$mainSearchForm.find("input[name='q-mode'][value='operation']").click();
|
||
var searchOptions = scrutariResult.searchMeta.options;
|
||
if (searchOptions) {
|
||
_initFilterByQuery(searchOptions.baselist, "base");
|
||
_initFilterByQuery(searchOptions.corpuslist, "corpus");
|
||
_initFilterByQuery(searchOptions.categorylist, "category");
|
||
_initFilterByQuery(searchOptions.langlist, "lang");
|
||
}
|
||
Scrutari.Client.Result.show(client, scrutariResult, "mainsearch");
|
||
client.$modal("loading", 'hide');
|
||
var $parametersDisplayButton = client.$button('parametersDisplay');
|
||
if ($parametersDisplayButton.data("scrutariState") === "on") {
|
||
$parametersDisplayButton.click();
|
||
}
|
||
}
|
||
function _mainScrutariErrorCallback (error) {
|
||
Scrutari.Client.Result.displayError(client, error, "mainsearch");
|
||
client.$modal("loading", 'hide');
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.initHtml = function (client) {
|
||
var includedTexts = {};
|
||
var html = _getText("main");
|
||
html = html.replace(/_ [-_\.a-z0-9]+/g, function(match) {
|
||
return client.loc(match);
|
||
});
|
||
$("#" + client.clientId).html(html);
|
||
function _getText(name) {
|
||
if (name.endsWith('*')) {
|
||
return _getTextByPrefix(name.substring(0, name.length - 1));
|
||
}
|
||
if (includedTexts.hasOwnProperty(name)) {
|
||
Scrutari.log("Already included: " + name);
|
||
return "";
|
||
} else if (client.ignoreElement(name)) {
|
||
return "";
|
||
} else if ((name === "panel-base") && (client.options.withCorpus)) {
|
||
return "";
|
||
} else if ((name === "panel-corpus") && (!client.options.withCorpus)) {
|
||
return "";
|
||
} else if ((name === "result-share") && (!client.options.permalinkPattern)) {
|
||
return "";
|
||
}
|
||
includedTexts[name] = true;
|
||
var text = client.getStructureHtml(name);
|
||
text = text.replace(/{{([-a-zA-z0-9_]+\*?)}}/g, function (match, p1) {
|
||
return _getText(p1);
|
||
});
|
||
return text;
|
||
}
|
||
function _getTextByPrefix(namePrefix) {
|
||
var result = "";
|
||
for(let name of client.getStructureNameArray()) {
|
||
if (name.startsWith(namePrefix)) {
|
||
let text = _getText(name);
|
||
if (text.length > 0) {
|
||
if (result.length > 0) {
|
||
result = result + "\n";
|
||
}
|
||
result = result + text;
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.initForms = function (client) {
|
||
client.$form('mainsearch').submit(function () {
|
||
var q = this["q"].value.trim();
|
||
if (q.length > 0) {
|
||
var requestParameters = Scrutari.Client.Ui.buildRequestParameters(client);
|
||
requestParameters["log"] = "all";
|
||
requestParameters["q"] = q;
|
||
client.$modal("loading", 'show');
|
||
client.hook("newSearch", requestParameters, "mainsearch");
|
||
Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, _mainsearchScrutariResultCallback, _mainScrutariErrorCallback);
|
||
}
|
||
return false;
|
||
});
|
||
client.$form('subsearch').submit(function () {
|
||
var q = this["q"].value.trim();
|
||
if ((q.length > 0) && (client.mainCurrentScrutariResult)) {
|
||
var requestParameters = Scrutari.Client.Ui.buildRequestParameters(client);
|
||
requestParameters["q"] = q;
|
||
requestParameters["flt-qid"] = client.mainCurrentScrutariResult.getQId();
|
||
client.$modal("loading", 'show');
|
||
client.hook("newSearch", requestParameters, "subsearch");
|
||
Scrutari.Result.newSearch(client.scrutariConfig, requestParameters, _subsearchScrutariResultCallback, _subsearchScrutariErrorCallback);
|
||
}
|
||
return false;
|
||
});
|
||
function _mainsearchScrutariResultCallback (scrutariResult) {
|
||
Scrutari.Client.Result.show(client, scrutariResult, "mainsearch");
|
||
client.$modal("loading", 'hide');
|
||
var $parametersDisplayButton = client.$button('parametersDisplay');
|
||
if ($parametersDisplayButton.data("scrutariState") === "on") {
|
||
$parametersDisplayButton.click();
|
||
}
|
||
}
|
||
function _mainScrutariErrorCallback (error) {
|
||
Scrutari.Client.Result.displayError(client, error, "mainsearch");
|
||
client.$modal("loading", 'hide');
|
||
}
|
||
function _subsearchScrutariResultCallback (scrutariResult) {
|
||
Scrutari.Client.Result.show(client, scrutariResult, "subsearch");
|
||
client.$modal("loading", 'hide');
|
||
}
|
||
function _subsearchScrutariErrorCallback (error) {
|
||
Scrutari.Client.Result.displayError(client, error, "subsearch");
|
||
client.$modal("loading", 'hide');
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.initClicks = function (client) {
|
||
$("#" + client.clientId).on("click", Scrutari.toCssQuery({scrutariButton: true}), function () {
|
||
var $this = $(this);
|
||
var action = this.dataset.scrutariButton;
|
||
var target = this.dataset.scrutariTarget;
|
||
switch(action) {
|
||
case 'enablePanel':
|
||
_enablePanel(this, target);
|
||
break;
|
||
case 'checkAll':
|
||
_checkAll(target);
|
||
break;
|
||
case 'uncheckAll':
|
||
_uncheckAll(target);
|
||
break;
|
||
case 'showModal':
|
||
client.$modal(target, 'show');
|
||
break;
|
||
case 'parametersDisplay':
|
||
let state = Scrutari.Utils.toggle($this, "scrutariState");
|
||
Scrutari.Utils.toggle.classes($this, state, "Scrutari-On", "");
|
||
if (state === 'on') {
|
||
client.$area('parameters', 'show');
|
||
} else {
|
||
client.$area('parameters', 'hide');
|
||
}
|
||
break;
|
||
case 'toggleBlock':
|
||
if (Scrutari.Utils.toggle($this, "scrutariState") === 'on') {
|
||
client.$block(target, 'show');
|
||
} else {
|
||
client.$block(target, 'hide');
|
||
}
|
||
break;
|
||
case 'removeHistory':
|
||
_removeHistory(target);
|
||
break;
|
||
case 'loadHistory':
|
||
_loadHistory(target);
|
||
break;
|
||
case 'categoryTab':
|
||
_categoryTab(this.dataset.scrutariCategory);
|
||
break;
|
||
case 'ficheTab':
|
||
_ficheTab(this);
|
||
break;
|
||
default:
|
||
Scrutari.log("Unknown action: " + action);
|
||
}
|
||
if ((this.tagName) && (this.tagName.toLowerCase() === 'a')) {
|
||
return false;
|
||
}
|
||
});
|
||
$("#" + client.clientId).on("click", "input", function () {
|
||
var name = this.name;
|
||
if (name) {
|
||
switch(name) {
|
||
case 'q-mode':
|
||
if (this.value === 'operation') {
|
||
Scrutari.Utils.disable("input[name='wildchar']");
|
||
} else {
|
||
Scrutari.Utils.enable("input[name='wildchar']");
|
||
}
|
||
break;
|
||
case 'lang':
|
||
case 'category':
|
||
case 'base':
|
||
case 'corpus':
|
||
_checkClick(name);
|
||
break;
|
||
}
|
||
}
|
||
});
|
||
function _checkClick (target) {
|
||
var $button = client.$button("enablePanel", target);
|
||
if ($button.data('scrutariState') === 'off') {
|
||
$button.click();
|
||
$(this).focus();
|
||
} else {
|
||
Scrutari.Client.Ui.filterChange(client);
|
||
}
|
||
}
|
||
function _checkAll (target) {
|
||
Scrutari.Utils.check("input[name='" + target + "']");
|
||
Scrutari.Client.Ui.filterChange(client);
|
||
}
|
||
function _uncheckAll (target) {
|
||
Scrutari.Utils.uncheck("input[name='" + target + "']");
|
||
Scrutari.Client.Ui.filterChange(client);
|
||
}
|
||
function _enablePanel (button, target) {
|
||
var $button = $(button);
|
||
var state = Scrutari.Utils.toggle($button, "scrutariState");
|
||
_enableChekButtons();
|
||
Scrutari.Utils.toggle.classes($button, state, "scrutari-On", "");
|
||
Scrutari.Utils.toggle.classes(client.$group(target + "Columns"), state, "", "scrutari-panel-ColumnDisabled");
|
||
Scrutari.Utils.toggle.text($button.children("span"), "scrutariAlternate");
|
||
var $filterLabel = client.$label(target + "Filter");
|
||
Scrutari.Utils.toggle.text($filterLabel, "scrutariAlternate");
|
||
Scrutari.Utils.toggle.classes($filterLabel, state, "scrutari-panel-Active", "scrutari-Disabled");
|
||
Scrutari.Client.Ui.filterChange(client);
|
||
function _enableChekButtons () {
|
||
let disabled = false;
|
||
if (state === 'off') {
|
||
disabled = true;
|
||
}
|
||
client.$button("checkAll", target).prop('disabled', disabled);
|
||
client.$button("uncheckAll", target).prop('disabled', disabled);
|
||
}
|
||
}
|
||
function _removeHistory (historyName) {
|
||
client.unstoreResult(historyName);
|
||
client.$block(historyName).remove();
|
||
}
|
||
function _loadHistory (historyName) {
|
||
Scrutari.Client.Result.loadHistory(client, historyName);
|
||
}
|
||
function _categoryTab (categoryName) {
|
||
client.$({scrutariRole: "category-content"}).each(function (index, element) {
|
||
if (element.dataset.scrutariCategory === categoryName) {
|
||
client.show(element);
|
||
} else {
|
||
client.hide(element);
|
||
}
|
||
});
|
||
client.$({scrutariRole: "category-tab"}).each(function (index, element) {
|
||
if (element.dataset.scrutariCategory === categoryName) {
|
||
element.classList.add("scrutari-On");
|
||
} else {
|
||
element.classList.remove("scrutari-On");
|
||
}
|
||
});
|
||
}
|
||
function _ficheTab (button) {
|
||
var newPaginationNumber = parseInt(button.dataset.scrutariNumber);
|
||
if (button.dataset.scrutariType === "unique") {
|
||
Scrutari.Client.Result.uniquePaginationChange(client, newPaginationNumber);
|
||
} else {
|
||
Scrutari.Client.Result.categoryPaginationChange(client, button.dataset.scrutariCategory, newPaginationNumber);
|
||
}
|
||
if (button.dataset.scrutariPosition === "bottom") {
|
||
client.scrollToResult();
|
||
}
|
||
}
|
||
};
|
||
Scrutari.Client.Ui.initMainTitle = function (client) {
|
||
var html = "";
|
||
var mainTitle = client.options.mainTitle;
|
||
if ((mainTitle) || (mainTitle === "")) {
|
||
if (typeof mainTitle === "function") {
|
||
html = mainTitle(client);
|
||
} else {
|
||
html = mainTitle;
|
||
}
|
||
} else {
|
||
html += client.loc('_ title_main');
|
||
html += " – ";
|
||
var title = client.scrutariMeta.getTitle();
|
||
if (title) {
|
||
html += Scrutari.escape(title);
|
||
} else {
|
||
html += "[";
|
||
html += client.scrutariConfig.name;
|
||
html += "]";
|
||
}
|
||
}
|
||
client.$title('main').html(html);
|
||
};
|
||
Scrutari.Client.Ui.initFilter = function (client, target, checkedArray) {
|
||
var done = false;
|
||
for(var i = 0, len = checkedArray.length; i < len; i++) {
|
||
var $input = client.$input(target, checkedArray[i]);
|
||
if ($input.length > 0) {
|
||
$input.prop("checked", true);
|
||
done = true;
|
||
}
|
||
}
|
||
if (done) {
|
||
client.$button("enablePanel", target).click();
|
||
}
|
||
}; |