FreeDatas2HTML/src/build/freeDatas2HTMLSelector.js

124 lines
5.3 KiB
JavaScript

var compare = require('natural-orderby').compare;
var errors = require("./errors.js");
import { FreeDatas2HTML } from "./freeDatas2HTML";
var Selector = (function () {
function Selector(converter, datasFieldNb, elt) {
this._datasViewElt = { id: "", eltDOM: undefined };
this.name = "";
this.values = [];
if (converter.parseMetas === undefined || converter.parseMetas.fields === undefined || converter.parseDatas.length === 0)
throw new Error(errors.selectorNeedDatas);
else if (!converter.checkFieldExist(Number(datasFieldNb)))
throw new Error(errors.selectorFieldNotFound);
else {
this._datasViewElt = FreeDatas2HTML.checkInDOMById(elt);
this._converter = converter;
this._datasFieldNb = datasFieldNb;
}
}
Object.defineProperty(Selector.prototype, "separator", {
get: function () {
return this._separator;
},
set: function (separator) {
if (separator === "")
this._separator = undefined;
else
this._separator = separator;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Selector.prototype, "datasViewElt", {
get: function () {
return this._datasViewElt;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Selector.prototype, "datasFieldNb", {
get: function () {
return this._datasFieldNb;
},
enumerable: true,
configurable: true
});
Selector.prototype.selector2HTML = function () {
if (this._converter === undefined || this._datasViewElt.eltDOM === undefined || this._datasFieldNb === undefined)
throw new Error(errors.selector2HTMLFail);
else {
this.name = this._converter.parseMetas.fields[this._datasFieldNb];
for (var row in this._converter.parseDatas) {
if (this._separator === undefined) {
var checkedValue = String(this._converter.parseDatas[row][this.name]).trim();
if (checkedValue !== "" && this.values.indexOf(checkedValue) === -1)
this.values.push(checkedValue);
}
else {
var checkedValues = String(this._converter.parseDatas[row][this.name]).split(this._separator);
for (var i in checkedValues) {
var checkedValue = checkedValues[i].trim();
if (checkedValue !== "" && this.values.indexOf(checkedValue) === -1)
this.values.push(checkedValue);
}
}
}
if (this.values.length > 0) {
if (this._converter.getSortingFunctionForField(this._datasFieldNb) !== undefined)
this.values.sort(this._converter.getSortingFunctionForField(this._datasFieldNb).sort);
else
this.values.sort(compare());
var selectorsHTML = "<label for='freeDatas2HTML_" + this._datasViewElt.id + "'>" + this.name + " : </label><select name='freeDatas2HTML_" + this._datasViewElt.id + "' id='freeDatas2HTML_" + this._datasViewElt.id + "'><option value='0'>----</option>";
for (var j in this.values)
selectorsHTML += "<option value='" + (Number(j) + 1) + "'>" + this.values[j] + "</option>";
selectorsHTML += "</select>";
this._datasViewElt.eltDOM.innerHTML = selectorsHTML;
var selectElement = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id), mySelector_1 = this;
selectElement.addEventListener("change", function (e) {
mySelector_1._converter.refreshView();
});
}
}
};
Selector.prototype.getSelectionnedId = function () {
var selectElement = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id);
if (selectElement === undefined)
return 0;
else
return parseInt(selectElement.value, 10);
};
Selector.prototype.dataIsOk = function (data) {
if (this.name === undefined || this.name === "")
throw new Error(errors.selectorCheckIsOkFail);
var selectedValue = this.getSelectionnedId();
if (selectedValue === 0)
return true;
else
selectedValue = selectedValue - 1;
if (this.values[selectedValue] === undefined)
throw new Error(errors.selectorSelectedIndexNotFound);
if (data[this.name] === undefined)
return false;
var selectedValueTxt = this.values[selectedValue];
if (this._separator === undefined) {
if (data[this.name].trim() !== selectedValueTxt)
return false;
else
return true;
}
else {
var find = false;
var checkedValues = String(data[this.name]).split(this._separator);
for (var j in checkedValues) {
if (checkedValues[j].trim() === selectedValueTxt) {
find = true;
break;
}
}
return find;
}
};
return Selector;
}());
export { Selector };