Compare commits

...

2 Commits

18 changed files with 1747 additions and 107 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

37
public/withCSV.html Normal file
View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Page d'exemple d'utilisation du script freeDatas2HTML pour visualiser des informations venant d'un fichier CSV.">
<meta name="robots" content="noindex">
<link rel="stylesheet" href="CSS/paper.min.css">
<link rel="stylesheet" href="CSS/fd2html.css">
<script src="JS/exampleWithCSV.app.js" defer></script>
<title>freeDatas2HTML : démo d'affichage de données venant d'un fichier CSV</title>
</head>
<body class="paper container">
<h1>freeDatas2HTML</h1>
<p><a href="./withJSON.html">Autre page d'exemple avec des données transmises en JSON</a>.</p>
<div class="row">
<div id="filtre1" class="sm-12 md-6 lg-4 col"></div>
<div id="filtre2" class="sm-12 md-6 lg-4 col"></div>
<div id="filtre3" class="sm-12 md-6 lg-4 col"></div>
<div id="paginationOptions" class="col-12 col"></div>
</div>
<h3>Nombre total de résultats : <span id="compteur"></span></h3>
<article id="datas">
<p>Si tout se passe bien, ce texte sera remplacé par un tableau de données extraites du fichier csv.</p>
</article>
<p id="pages"></p>
<aside><p>Les données affichées viennent d<a href="datas/elements-chimiques.csv">un fichier CSV</a> reprenant une partie des informations trouvées <a href="https://fr.wikipedia.org/wiki/%C3%89l%C3%A9ment_chimique#Caract%C3%A9ristiques_des_diff%C3%A9rents_%C3%A9l%C3%A9ments" target="_blank">sur Wikipédia</a>.</p>
<p>Le dernier filtre (Mots-clés) permet de montrer la possibilité d<b>extraire des données dun champ ayant plusieurs valeurs par ligne</b>, ici séparées par une virgule, sachant que lon peut désigner nimporte quel autre caractère séparateur.</p>
<p>Certains champs (=colonnes) peuvent être désignées comme devant permettre de <b>classer les données</b>: un 1ᵉʳ clic lance un classement par ordre croissant, le 2ᵉ pour ordre décroissant et ainsi de suite.</p>
<p>Il est également possible dafficher le nombre total de résultats, avec prise en compte des éventuels filtres.</p>
<p>Une autre option permet de <b>paginer les résultats</b>.</p>
<p>Enfin il est possible d<b>afficher les données autrement que sous forme de tableau HTML</b>. Si vous affichez cette page sur un écran large de moins de 800px, les données seront simplement listées. Si vous avez un grand écran, vous pouvez visualiser cet affichage en faisant «Alt+Maj+M», puis «F5». Appuyez de nouveau sur «F5», une fois de retour sur grand écran pour revoir le tableau.</p>
<p>Design basé sur <a href="https://www.getpapercss.com" target="_blank">PaperCSS</a></p></aside>
</body>
</html>

120
src/build/exampleWithCSV.js Normal file
View File

@ -0,0 +1,120 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
import { FreeDatas2HTML, Pagination, Render, Selector, SortingField } from "./freeDatas2HTML";
var initialise = function () { return __awaiter(void 0, void 0, void 0, function () {
var mySort, converter, myRender, pagination, filtre1, filtre2, filtre3, sortingField1, sortingField2, sortingField3, sortingField4, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
mySort = function (a, b, order) {
if (order === void 0) { order = "asc"; }
var values = ["> 100000", "> 1 et < 100 000", "≤ 1", "Traces", "Inexistant"];
if (order === "desc")
values.reverse();
if (values.indexOf(a) > values.indexOf(b))
return -1;
else if (values.indexOf(a) < values.indexOf(b))
return 1;
else
return 0;
};
converter = new FreeDatas2HTML("CSV");
converter.parser.setRemoteSource({ url: "http://localhost:8080/datas/elements-chimiques.csv" });
converter.datasViewElt = { id: "datas" };
return [4, converter.run()];
case 1:
_a.sent();
myRender = new Render(converter);
if (window.innerWidth < 800) {
myRender.settings =
{
allBegining: "<h4>Affichage petits écrans !</h4>",
allEnding: "",
linesBegining: "<ul>",
linesEnding: "</ul>",
lineBegining: "<li><ul>",
lineEnding: "</ul></li>",
dataDisplaying: "<li><b>#FIELDNAME :</b> #VALUE</li>",
};
converter.datasRender = myRender;
}
else {
myRender.settings.allBegining = "<table class='table-hover'>";
converter.datasRender = myRender;
}
converter.datasSortingFunctions = [{ datasFieldNb: 4, sort: mySort }];
pagination = new Pagination(converter, { id: "pages" }, "Page à afficher :");
pagination.options = { displayElement: { id: "paginationOptions" }, values: [10, 20, 50, 500], name: "Choix de pagination :" };
pagination.selectedValue = 10;
converter.pagination = pagination;
pagination.rend2HTML();
converter.datasCounter = { id: "compteur" };
return [4, converter.run()];
case 2:
_a.sent();
filtre1 = new Selector(converter, 3, { id: "filtre1" });
filtre1.selector2HTML();
filtre2 = new Selector(converter, 4, { id: "filtre2" });
filtre2.selector2HTML();
filtre3 = new Selector(converter, 5, { id: "filtre3" });
filtre3.separator = ",";
filtre3.selector2HTML();
converter.datasSelectors = [filtre1, filtre2, filtre3];
if (window.innerWidth >= 800) {
sortingField1 = new SortingField(converter, 0);
sortingField1.field2HTML();
sortingField2 = new SortingField(converter, 1);
sortingField2.field2HTML();
sortingField3 = new SortingField(converter, 2);
sortingField3.field2HTML();
sortingField4 = new SortingField(converter, 4);
sortingField4.field2HTML();
converter.datasSortingFields = [sortingField1, sortingField2, sortingField3, sortingField4];
}
return [3, 4];
case 3:
e_1 = _a.sent();
console.error(e_1);
if (document.getElementById("datas") !== null)
document.getElementById("datas").innerHTML = "<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
return [3, 4];
case 4: return [2];
}
});
}); };
initialise();

View File

@ -0,0 +1,97 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
import { FreeDatas2HTML, Pagination, Render, Selector, SortingField } from "./freeDatas2HTML";
var initialise = function () { return __awaiter(void 0, void 0, void 0, function () {
var converter, myRender, pagination, filtre1, sortingField1, sortingField2, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
converter = new FreeDatas2HTML("HTML");
converter.datasViewElt = { id: "datas" };
return [4, converter.run()];
case 1:
_a.sent();
myRender = new Render(converter);
if (window.innerWidth < 800) {
myRender.settings =
{
allBegining: "<h4>Affichage petits écrans !</h4>",
allEnding: "",
linesBegining: "<ul>",
linesEnding: "</ul>",
lineBegining: "<li><ul>",
lineEnding: "</ul></li>",
dataDisplaying: "<li><b>#FIELDNAME :</b> #VALUE</li>",
};
converter.datasRender = myRender;
}
else {
myRender.settings.allBegining = "<table class='table-hover'>";
converter.datasRender = myRender;
}
pagination = new Pagination(converter, { id: "pages" }, "Page à afficher :");
pagination.options = { displayElement: { id: "paginationOptions" }, values: [15, 30, 50, 100], name: "Nombre de lignes par page :" };
pagination.selectedValue = 15;
converter.pagination = pagination;
pagination.rend2HTML();
converter.datasCounter = { id: "compteur" };
return [4, converter.run()];
case 2:
_a.sent();
filtre1 = new Selector(converter, 3, { id: "filtre1" });
filtre1.selector2HTML();
converter.datasSelectors = [filtre1];
if (window.innerWidth >= 800) {
sortingField1 = new SortingField(converter, 2);
sortingField1.field2HTML();
sortingField2 = new SortingField(converter, 3);
sortingField2.field2HTML();
converter.datasSortingFields = [sortingField1, sortingField2];
}
return [3, 4];
case 3:
e_1 = _a.sent();
console.error(e_1);
if (document.getElementById("datas") !== null)
document.getElementById("datas").innerHTML = "<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
return [3, 4];
case 4: return [2];
}
});
}); };
initialise();

View File

@ -0,0 +1,100 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
import { FreeDatas2HTML, Pagination, Render, Selector, SortingField } from "./freeDatas2HTML";
var initialise = function () { return __awaiter(void 0, void 0, void 0, function () {
var converter, myRender, pagination, filtre1, sortingField1, sortingField2, sortingField3, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
converter = new FreeDatas2HTML("JSON");
converter.parser.setRemoteSource({ url: "http://localhost:8080/datas/posts.json", withCredentials: true, headers: [{ key: "Authorization", value: "Token YWxhZGRpbjpvcGVuc2VzYW1l" }] });
converter.datasViewElt = { id: "datas" };
return [4, converter.run()];
case 1:
_a.sent();
myRender = new Render(converter);
if (window.innerWidth < 800) {
myRender.settings =
{
allBegining: "<h4>Affichage petits écrans !</h4>",
allEnding: "",
linesBegining: "<ul>",
linesEnding: "</ul>",
lineBegining: "<li><ul>",
lineEnding: "</ul></li>",
dataDisplaying: "<li><b>#FIELDNAME :</b> #VALUE</li>",
};
converter.datasRender = myRender;
}
else {
myRender.settings.allBegining = "<table class='table-hover'>";
converter.datasRender = myRender;
}
pagination = new Pagination(converter, { id: "pages" }, "Page à afficher :");
pagination.options = { displayElement: { id: "paginationOptions" }, values: [15, 30, 50, 100], name: "Nombre de lignes par page :" };
pagination.selectedValue = 15;
converter.pagination = pagination;
pagination.rend2HTML();
converter.datasCounter = { id: "compteur" };
return [4, converter.run()];
case 2:
_a.sent();
filtre1 = new Selector(converter, 0, { id: "filtre1" });
filtre1.selector2HTML();
converter.datasSelectors = [filtre1];
if (window.innerWidth >= 800) {
sortingField1 = new SortingField(converter, 0);
sortingField1.field2HTML();
sortingField2 = new SortingField(converter, 1);
sortingField2.field2HTML();
sortingField3 = new SortingField(converter, 2);
sortingField3.field2HTML();
converter.datasSortingFields = [sortingField1, sortingField2, sortingField3];
}
return [3, 4];
case 3:
e_1 = _a.sent();
console.error(e_1);
if (document.getElementById("datas") !== null)
document.getElementById("datas").innerHTML = "<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
return [3, 4];
case 4: return [2];
}
});
}); };
initialise();

View File

@ -34,24 +34,38 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var Papa = require("papaparse");
var errors = require("./errors.js");
var compare = require('natural-orderby').compare;
var errors = require("./errors.js");
import { ParserForCSV } from "./freeDatas2HTMLParserForCSV";
import { ParserForHTML } from "./freeDatas2HTMLParserForHTML";
import { ParserForJSON } from "./freeDatas2HTMLParserForJSON";
import { Render } from "./freeDatas2HTMLRender";
var FreeDatas2HTML = (function () {
function FreeDatas2HTML() {
function FreeDatas2HTML(datasType, datas2Parse, datasRemoteSource) {
if (datas2Parse === void 0) { datas2Parse = ""; }
this._datasViewElt = undefined;
this.datasHTML = "";
this._datasSourceUrl = "";
this.parseMetas = undefined;
this.parseDatas = [];
this.parseErrors = [];
this.fields = undefined;
this.datas = [];
this.stopIfParseErrors = false;
this._datasSortingFunctions = [];
this.datasSelectors = [];
this.datasSortingFields = [];
this._datasCounter = {};
this.datasRender = new Render(this);
switch (datasType) {
case "CSV":
this.parser = new ParserForCSV(datasRemoteSource);
break;
case "HTML":
this.parser = new ParserForHTML(datasRemoteSource);
break;
case "JSON":
this.parser = new ParserForJSON(datasRemoteSource);
break;
}
if (datas2Parse !== "")
this.parser.datas2Parse = datas2Parse;
}
FreeDatas2HTML.checkInDOMById = function (checkedElt) {
var searchEltInDOM = document.getElementById(checkedElt.id);
@ -63,7 +77,7 @@ var FreeDatas2HTML = (function () {
}
};
FreeDatas2HTML.prototype.checkFieldExist = function (nb) {
if (this.parseMetas === undefined || this.parseMetas.fields === undefined || this.parseMetas.fields[nb] === undefined)
if (this.fields === undefined || this.fields[nb] === undefined)
return false;
else
return true;
@ -75,24 +89,15 @@ var FreeDatas2HTML = (function () {
enumerable: true,
configurable: true
});
Object.defineProperty(FreeDatas2HTML.prototype, "datasSourceUrl", {
set: function (url) {
if (url.trim().length === 0)
throw new Error(errors.parserNeedUrl);
else
this._datasSourceUrl = url.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(FreeDatas2HTML.prototype, "datasSortingFunctions", {
set: function (SortingFunctions) {
this._datasSortingFunctions = [];
for (var i = 0; i < SortingFunctions.length; i++) {
if (!this.checkFieldExist(SortingFunctions[i].datasFieldNb))
for (var _i = 0, SortingFunctions_1 = SortingFunctions; _i < SortingFunctions_1.length; _i++) {
var checkedFunction = SortingFunctions_1[_i];
if (!this.checkFieldExist(checkedFunction.datasFieldNb))
throw new Error(errors.converterFieldNotFound);
else
this._datasSortingFunctions.push(SortingFunctions[i]);
this._datasSortingFunctions.push(checkedFunction);
}
},
enumerable: true,
@ -112,64 +117,35 @@ var FreeDatas2HTML = (function () {
return undefined;
};
FreeDatas2HTML.prototype.getSortingFunctionForField = function (datasFieldNb) {
for (var i in this._datasSortingFunctions) {
if (this._datasSortingFunctions[i].datasFieldNb === datasFieldNb)
return this._datasSortingFunctions[i];
for (var _i = 0, _a = this._datasSortingFunctions; _i < _a.length; _i++) {
var checkedFunction = _a[_i];
if (checkedFunction.datasFieldNb === datasFieldNb)
return checkedFunction;
}
return undefined;
};
FreeDatas2HTML.prototype.parse = function () {
return __awaiter(this, void 0, void 0, function () {
var converter;
return __generator(this, function (_a) {
converter = this;
return [2, new Promise(function (resolve, reject) {
if (converter._datasSourceUrl !== "") {
Papa.parse(converter._datasSourceUrl, {
quoteChar: '"',
header: true,
complete: function (results) {
converter.parseErrors = results.errors;
converter.parseDatas = results.data;
var realFields = [];
for (var i in results.meta.fields) {
if (results.meta.fields[i].trim() !== "")
realFields.push(results.meta.fields[i]);
}
results.meta.fields = realFields;
converter.parseMetas = results.meta;
resolve(true);
},
error: function (error) {
reject(new Error(errors.parserFail));
},
download: true,
skipEmptyLines: true,
});
}
else
reject(new Error(errors.parserNeedUrl));
})];
});
});
};
FreeDatas2HTML.prototype.run = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this._datasSourceUrl === "")
throw new Error(errors.parserNeedUrl);
return [4, this.parse()];
case 0: return [4, this.parser.parse()];
case 1:
_a.sent();
if (this.parseDatas.length === 0 || this.parseMetas.fields === undefined)
throw new Error(errors.parserDatasNotFound);
else if (this.stopIfParseErrors && this.parseErrors.length !== 0)
console.error(this.parseErrors);
if (this.parser.parseResults === undefined)
throw new Error(errors.parserFail);
else {
this.refreshView();
return [2, true];
if (this.parser.parseResults.fields === undefined)
throw new Error(errors.parserDatasNotFound);
else if (this.stopIfParseErrors && this.parser.parseResults.errors !== undefined)
throw new Error(errors.parserMeetErrors);
else {
this.fields = this.parser.parseResults.fields;
this.datas = this.parser.parseResults.datas;
this.parseErrors = this.parser.parseResults.errors;
if (this._datasViewElt !== undefined)
this.refreshView();
return [2, true];
}
}
return [2];
}
@ -177,14 +153,15 @@ var FreeDatas2HTML = (function () {
});
};
FreeDatas2HTML.prototype.refreshView = function () {
if (this.parseMetas === undefined || this.parseMetas.fields === undefined)
if (this.fields === undefined || this._datasViewElt === undefined || this._datasViewElt.eltDOM === undefined)
throw new Error(errors.converterRefreshFail);
this.datasHTML = this.createDatas2Display(this.parseMetas.fields, this.parseDatas);
if (this._datasViewElt !== undefined && this._datasViewElt.eltDOM !== undefined)
else {
this.datasHTML = this.createDatas2Display(this.fields, this.datas);
this._datasViewElt.eltDOM.innerHTML = this.datasHTML;
for (var i in this.datasSortingFields) {
var field = this.datasSortingFields[i];
field.field2HTML();
for (var _i = 0, _a = this.datasSortingFields; _i < _a.length; _i++) {
var field = _a[_i];
field.field2HTML();
}
}
};
FreeDatas2HTML.prototype.createDatas2Display = function (fields, datas) {

View File

@ -3,7 +3,7 @@ import { FreeDatas2HTML } from "./freeDatas2HTML";
var Pagination = (function () {
function Pagination(converter, pagesElt, pagesName) {
if (pagesName === void 0) { pagesName = "Pages"; }
if (converter.parseMetas === undefined || converter.parseMetas.fields === undefined)
if (converter.fields === undefined)
throw new Error(errors.paginationNeedDatas);
else {
this._pages = { displayElement: FreeDatas2HTML.checkInDOMById(pagesElt), name: pagesName };
@ -36,8 +36,9 @@ var Pagination = (function () {
options.displayElement = FreeDatas2HTML.checkInDOMById(options.displayElement);
if (options.values.length === 0)
throw new Error(errors.paginationNeedOptionsValues);
for (var i in options.values) {
if (!Pagination.isPositiveInteger(options.values[i]))
for (var _i = 0, _a = options.values; _i < _a.length; _i++) {
var option = _a[_i];
if (!Pagination.isPositiveInteger(option))
throw new Error(errors.needPositiveInteger);
}
if (this.selectedValue !== undefined && options.values.indexOf(this.selectedValue) === -1)
@ -61,8 +62,8 @@ var Pagination = (function () {
throw new Error(errors.pagination2HTMLFail);
else {
var selectorsHTML = "<label for='freeDatas2HTMLPaginationSelector'>" + this._options.name + " </label><select name='freeDatas2HTMLPaginationSelector' id='freeDatas2HTMLPaginationSelector'><option value='0'>----</option>";
for (var j in this._options.values)
selectorsHTML += "<option value='" + (Number(j) + 1) + "'>" + this._options.values[j] + "</option>";
for (var i = 0; i < this._options.values.length; i++)
selectorsHTML += "<option value='" + (i + 1) + "'>" + this._options.values[i] + "</option>";
selectorsHTML += "</select>";
this._options.displayElement.eltDOM.innerHTML = selectorsHTML;
var selectElement_1 = document.getElementById("freeDatas2HTMLPaginationSelector");

View File

@ -0,0 +1,166 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var Papa = require("papaparse");
var errors = require("./errors.js");
import { RemoteSources } from "./freeDatas2HTMLRemoteSources";
var ParserForCSV = (function () {
function ParserForCSV(datasRemoteSource) {
this._datas2Parse = "";
this._parseResults = undefined;
this.options = {
delimiter: "",
newline: "",
quoteChar: '"',
escapeChar: '"',
transformHeader: function (field, index) { return field.trim(); },
preview: 0,
comments: "",
fastMode: undefined,
transform: undefined
};
this._privateOptions = {
header: true,
download: false,
downloadRequestHeaders: undefined,
skipEmptyLines: "greedy",
withCredentials: undefined
};
if (datasRemoteSource !== undefined)
this._datasRemoteSource = datasRemoteSource;
else
this._datasRemoteSource = new RemoteSources({ url: "" });
}
ParserForCSV.prototype.setRemoteSource = function (source) {
this._datasRemoteSource = new RemoteSources(source);
};
Object.defineProperty(ParserForCSV.prototype, "datasRemoteSource", {
get: function () {
return this._datasRemoteSource;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForCSV.prototype, "datas2Parse", {
get: function () {
return this._datas2Parse;
},
set: function (datas) {
if (datas.trim().length === 0)
throw new Error(errors.parserNeedDatas);
else
this._datas2Parse = datas.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForCSV.prototype, "parseResults", {
get: function () {
return this._parseResults;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForCSV.prototype, "privateOptions", {
get: function () {
return this._privateOptions;
},
enumerable: true,
configurable: true
});
ParserForCSV.prototype.parse = function () {
return __awaiter(this, void 0, void 0, function () {
var parser, options, parseContent, i;
var _this = this;
return __generator(this, function (_a) {
parser = this, options = this.options;
parseContent = "";
if (parser._datasRemoteSource.url !== "") {
parseContent = parser._datasRemoteSource.url;
this._privateOptions.download = true;
this._privateOptions.withCredentials = parser._datasRemoteSource.withCredentials;
if (parser._datasRemoteSource.headers !== undefined) {
this._privateOptions.downloadRequestHeaders = {};
for (i = 0; i < parser._datasRemoteSource.headers.length; i++)
this._privateOptions.downloadRequestHeaders[parser._datasRemoteSource.headers[i].key] = parser._datasRemoteSource.headers[i].value;
}
}
else if (parser._datas2Parse !== "")
parseContent = parser._datas2Parse;
else
throw new Error(errors.parserNeedSource);
return [2, new Promise(function (resolve, reject) {
Papa.parse(parseContent, {
delimiter: options.delimiter,
newline: options.newline,
quoteChar: options.quoteChar,
escapeChar: options.escapeChar,
header: true,
transformHeader: options.transformHeader,
preview: options.preview,
comments: options.comments,
complete: function (results) {
var realFields = [];
for (var _i = 0, _a = results.meta.fields; _i < _a.length; _i++) {
var field = _a[_i];
if (field.trim() !== "")
realFields.push(field);
}
if (realFields.length === 0)
reject(new Error(errors.parserFail));
else {
parser._parseResults = {
datas: results.data,
errors: results.errors,
fields: realFields,
};
resolve(true);
}
},
download: _this._privateOptions.download,
downloadRequestHeaders: _this._privateOptions.downloadRequestHeaders,
skipEmptyLines: "greedy",
fastMode: options.fastMode,
withCredentials: _this._privateOptions.withCredentials,
transform: options.transform
});
})];
});
});
};
return ParserForCSV;
}());
export { ParserForCSV };

View File

@ -0,0 +1,174 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var errors = require("./errors.js");
import { RemoteSources } from "./freeDatas2HTMLRemoteSources";
var ParserForHTML = (function () {
function ParserForHTML(datasRemoteSource) {
this._document2Parse = document;
this._parseResults = undefined;
this._fieldsSelector = "table > thead > tr > th";
this._rowsSelector = "table > tbody > tr";
this._datasSelector = "tr > td";
if (datasRemoteSource !== undefined)
this._datasRemoteSource = datasRemoteSource;
else
this._datasRemoteSource = new RemoteSources({ url: "" });
}
ParserForHTML.prototype.setRemoteSource = function (source) {
this._datasRemoteSource = new RemoteSources(source);
};
Object.defineProperty(ParserForHTML.prototype, "datasRemoteSource", {
get: function () {
return this._datasRemoteSource;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForHTML.prototype, "document2Parse", {
get: function () {
return this._document2Parse;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForHTML.prototype, "fieldsSelector", {
get: function () {
return this._fieldsSelector;
},
set: function (selector) {
if (selector.trim() === "")
throw new Error(errors.parserSelectorsIsEmpty);
else
this._fieldsSelector = selector.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForHTML.prototype, "rowsSelector", {
get: function () {
return this._rowsSelector;
},
set: function (selector) {
if (selector.trim() === "")
throw new Error(errors.parserSelectorsIsEmpty);
else
this._rowsSelector = selector.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForHTML.prototype, "datasSelector", {
get: function () {
return this._datasSelector;
},
set: function (selector) {
if (selector.trim() === "")
throw new Error(errors.parserSelectorsIsEmpty);
else
this._datasSelector = selector.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForHTML.prototype, "parseResults", {
get: function () {
return this._parseResults;
},
enumerable: true,
configurable: true
});
ParserForHTML.prototype.parse = function () {
return __awaiter(this, void 0, void 0, function () {
var parser, realFields, datas, parseErrors, settings, response, responseHTML, parserDOM, fields, i, checkField, rows, datasElts, i, dataObject, j;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
parser = this;
realFields = [], datas = [], parseErrors = [];
if (!(parser._datasRemoteSource.url !== "")) return [3, 3];
settings = parser._datasRemoteSource.getFetchSettings();
return [4, fetch(parser._datasRemoteSource.url, settings)];
case 1:
response = _a.sent();
if (!response.ok)
throw new Error(errors.parserRemoteFail);
return [4, response.text()];
case 2:
responseHTML = _a.sent();
parserDOM = new DOMParser();
this._document2Parse = parserDOM.parseFromString(responseHTML, "text/html");
_a.label = 3;
case 3:
fields = this._document2Parse.querySelectorAll(this._fieldsSelector);
if (fields.length === 0)
throw new Error(errors.parserElementsNotFound + this._fieldsSelector);
for (i = 0; i < fields.length; i++) {
checkField = (fields[i].textContent + "").trim();
if (checkField !== "" && realFields.indexOf(checkField) === -1)
realFields.push(checkField);
else
console.error(errors.parserFieldNameFail);
}
if (realFields.length === 0)
throw new Error(errors.parserFieldsNotFound);
rows = this._document2Parse.querySelectorAll(this._rowsSelector);
for (i = 0; i < rows.length; i++) {
datasElts = rows[i].querySelectorAll(this._datasSelector);
if (datasElts.length !== realFields.length)
parseErrors.push({ row: i, message: errors.parserMeetErrors });
dataObject = {};
for (j = 0; j < datasElts.length && j < realFields.length; j++)
dataObject[realFields[j]] = datasElts[j].textContent + "";
if (Object.keys(dataObject).length !== 0)
datas.push(dataObject);
else
parseErrors.push({ row: i, message: errors.parserMeetErrors });
}
parser._parseResults =
{
datas: datas,
errors: parseErrors,
fields: realFields,
};
return [2];
}
});
});
};
return ParserForHTML;
}());
export { ParserForHTML };

View File

@ -0,0 +1,171 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var errors = require("./errors.js");
import { RemoteSources } from "./freeDatas2HTMLRemoteSources";
var ParserForJSON = (function () {
function ParserForJSON(datasRemoteSource) {
this._datas2Parse = "";
this._parseResults = undefined;
if (datasRemoteSource !== undefined)
this._datasRemoteSource = datasRemoteSource;
else
this._datasRemoteSource = new RemoteSources({ url: "" });
}
ParserForJSON.prototype.setRemoteSource = function (source) {
this._datasRemoteSource = new RemoteSources(source);
};
Object.defineProperty(ParserForJSON.prototype, "datasRemoteSource", {
get: function () {
return this._datasRemoteSource;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForJSON.prototype, "datas2Parse", {
get: function () {
return this._datas2Parse;
},
set: function (datas) {
if (datas.trim().length === 0)
throw new Error(errors.parserNeedDatas);
else
this._datas2Parse = datas.trim();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ParserForJSON.prototype, "parseResults", {
get: function () {
return this._parseResults;
},
enumerable: true,
configurable: true
});
ParserForJSON.trimAllFields = function (fields) {
var nb = fields.length, goodFields = [];
for (var i = 0; i < nb; i++) {
if (typeof fields[i] === "string")
goodFields.push(fields[i].trim());
}
return goodFields;
};
ParserForJSON.prototype.parse = function () {
return __awaiter(this, void 0, void 0, function () {
var parser, parseContent, settings, response, datasParsed, typesOkForValue, fields, datas, parseErrors, nbFields, nbDatas, i, dataObject, nbObjFields, j, i, _i, datasParsed_1, data, dataObject, field;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
parser = this;
parseContent = "";
if (!(parser._datasRemoteSource.url !== "")) return [3, 3];
settings = parser._datasRemoteSource.getFetchSettings();
return [4, fetch(parser._datasRemoteSource.url, settings)];
case 1:
response = _a.sent();
if (!response.ok)
throw new Error(errors.parserRemoteFail);
return [4, response.text()];
case 2:
parseContent = _a.sent();
return [3, 4];
case 3:
if (parser._datas2Parse !== "")
parseContent = parser._datas2Parse;
else
throw new Error(errors.parserNeedSource);
_a.label = 4;
case 4:
try {
datasParsed = JSON.parse(parseContent);
typesOkForValue = ["boolean", "number", "string"];
fields = [], datas = [], parseErrors = [];
if (datasParsed.fields !== undefined && Array.isArray(datasParsed.fields) && datasParsed.datas !== undefined && Array.isArray(datasParsed.datas)) {
fields = ParserForJSON.trimAllFields(datasParsed.fields);
nbFields = fields.length, nbDatas = datasParsed.datas.length;
for (i = 0; i < nbDatas; i++) {
dataObject = {}, nbObjFields = datasParsed.datas[i].length;
for (j = 0; j < nbObjFields && j < nbFields; j++) {
if (typesOkForValue.indexOf(typeof datasParsed.datas[i][j]) === -1)
parseErrors.push({ row: i, message: errors.parserTypeError + typeof datasParsed.datas[i][j] });
else
dataObject[fields[j]] = datasParsed.datas[i][j] + "";
}
if (Object.keys(dataObject).length !== 0)
datas.push(dataObject);
}
}
else {
i = 0;
for (_i = 0, datasParsed_1 = datasParsed; _i < datasParsed_1.length; _i++) {
data = datasParsed_1[_i];
dataObject = {};
for (field in data) {
if (typesOkForValue.indexOf(typeof data[field]) !== -1) {
field = field.trim();
if (field !== "" && fields.indexOf(field) === -1)
fields.push(field);
dataObject[field] = data[field] + "";
}
else
parseErrors.push({ row: i, message: errors.parserTypeError + typeof data[field] });
}
if (Object.keys(dataObject).length !== 0)
datas.push(dataObject);
i++;
}
}
if (fields.length === 0)
throw new Error(errors.parserFail);
parser._parseResults =
{
datas: datas,
errors: parseErrors,
fields: fields,
};
}
catch (e) {
console.error(e);
throw new Error(errors.parserFail);
}
return [2];
}
});
});
};
return ParserForJSON;
}());
export { ParserForJSON };

View File

@ -0,0 +1,76 @@
var errors = require("./errors.js");
var RemoteSources = (function () {
function RemoteSources(RemoteSettings) {
this.allowedUrlProtocol = ["https:", "http:"];
this._headers = [];
this._withCredentials = false;
this._url = RemoteSettings.url;
if (RemoteSettings.headers !== undefined)
this.headers = RemoteSettings.headers;
if (RemoteSettings.withCredentials !== undefined)
this.withCredentials = RemoteSettings.withCredentials;
}
Object.defineProperty(RemoteSources.prototype, "url", {
get: function () {
return this._url;
},
set: function (url) {
if (url.trim().length === 0)
throw new Error(errors.remoteSourceNeedUrl);
else {
try {
var checkUrl = new URL(url);
if (this.allowedUrlProtocol.indexOf(checkUrl.protocol) === -1)
throw new Error();
}
catch (e) {
throw new Error(errors.remoteSourceUrlFail);
}
this._url = url.trim();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(RemoteSources.prototype, "headers", {
get: function () {
return this._headers;
},
set: function (headers) {
var forbiddenHeadersNames = ["Accept-Charset", "Accept-Encoding", "Access-Control-Request-Headers", "Access-Control-Request-Method", "Connection", "Content-Length", "Cookie", "Cookie2", "Date", "DNT", "Expect", "Host", "Keep-Alive", "Origin", "Referer", "TE", "Trailer", "Transfer-Encoding", "Upgrade", "Via"];
for (var _i = 0, headers_1 = headers; _i < headers_1.length; _i++) {
var header = headers_1[_i];
header.key = header.key.trim();
if (header.key.startsWith("Sec-") || header.key.startsWith("Proxy-") || forbiddenHeadersNames.indexOf(header.key) !== -1)
console.error(errors.remoteSourceHeaderIsUnallowed);
else
this._headers.push({ key: header.key, value: header.value.trim() });
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(RemoteSources.prototype, "withCredentials", {
get: function () {
return this._withCredentials;
},
set: function (credentials) {
this._withCredentials = credentials;
},
enumerable: true,
configurable: true
});
RemoteSources.prototype.getFetchSettings = function () {
var headers = new Headers();
if (this._headers !== undefined) {
for (var _i = 0, _a = this._headers; _i < _a.length; _i++) {
var header = _a[_i];
headers.append(header.key, header.value);
}
}
var credentials = (this._withCredentials) ? "include" : "omit";
return { method: "GET", headers: headers, credentials: credentials };
};
return RemoteSources;
}());
export { RemoteSources };

View File

@ -6,24 +6,28 @@ var Render = (function () {
this.settings = settings;
}
Render.prototype.rend2HTML = function (datas) {
if (this._converter.parseMetas === undefined || this._converter.parseMetas.fields === undefined)
if (this._converter.fields === undefined)
throw new Error(errors.renderNeedDatas);
else {
var datasHTML = this.settings.allBegining;
if (this.settings.fieldsBegining !== undefined && this.settings.fieldDisplaying !== undefined && this.settings.fieldsEnding !== undefined) {
datasHTML += this.settings.fieldsBegining;
for (var i in this._converter.parseMetas.fields)
datasHTML += this.settings.fieldDisplaying.replace("#FIELDNAME", this._converter.parseMetas.fields[Number(i)]);
for (var _i = 0, _a = this._converter.fields; _i < _a.length; _i++) {
var field = _a[_i];
datasHTML += this.settings.fieldDisplaying.replace("#FIELDNAME", field);
}
datasHTML += this.settings.fieldsEnding;
}
datasHTML += this.settings.linesBegining;
for (var row in datas) {
for (var _b = 0, datas_1 = datas; _b < datas_1.length; _b++) {
var row = datas_1[_b];
datasHTML += this.settings.lineBegining;
for (var field in datas[row]) {
if (this._converter.parseMetas.fields.indexOf(field) !== -1)
datasHTML += this.settings.dataDisplaying.replace("#VALUE", datas[row][field]).replace("#FIELDNAME", field);
for (var _c = 0, _d = this._converter.fields; _c < _d.length; _c++) {
var field = _d[_c];
if (row[field] !== undefined)
datasHTML += this.settings.dataDisplaying.replace("#VALUE", row[field]).replace("#FIELDNAME", field);
else
console.log(errors.renderUnknownField + field);
datasHTML += this.settings.dataDisplaying.replace("#VALUE", "").replace("#FIELDNAME", field);
}
datasHTML += this.settings.lineEnding;
}

View File

@ -6,7 +6,7 @@ var Selector = (function () {
this._datasViewElt = { id: "", eltDOM: undefined };
this.name = "";
this.values = [];
if (converter.parseMetas === undefined || converter.parseMetas.fields === undefined || converter.parseDatas.length === 0)
if (converter.fields === undefined || converter.datas.length === 0)
throw new Error(errors.selectorNeedDatas);
else if (!converter.checkFieldExist(Number(datasFieldNb)))
throw new Error(errors.selectorFieldNotFound);
@ -47,19 +47,19 @@ var Selector = (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) {
this.name = this._converter.fields[this._datasFieldNb];
for (var _i = 0, _a = this._converter.datas; _i < _a.length; _i++) {
var row = _a[_i];
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);
if (row[this.name] !== "" && this.values.indexOf(row[this.name]) === -1)
this.values.push(row[this.name]);
}
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);
var checkedValues = row[this.name].split(this._separator);
for (var _b = 0, checkedValues_1 = checkedValues; _b < checkedValues_1.length; _b++) {
var value = checkedValues_1[_b];
if (value !== "" && this.values.indexOf(value) === -1)
this.values.push(value);
}
}
}
@ -69,8 +69,8 @@ var Selector = (function () {
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>";
for (var i = 0; i < this.values.length; i++)
selectorsHTML += "<option value='" + (i + 1) + "'>" + this.values[i] + "</option>";
selectorsHTML += "</select>";
this._datasViewElt.eltDOM.innerHTML = selectorsHTML;
var selectElement = document.getElementById("freeDatas2HTML_" + this._datasViewElt.id), mySelector_1 = this;
@ -101,16 +101,17 @@ var Selector = (function () {
return false;
var selectedValueTxt = this.values[selectedValue];
if (this._separator === undefined) {
if (data[this.name].trim() !== selectedValueTxt)
if (data[this.name] !== 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) {
var checkedValues = data[this.name].split(this._separator);
for (var _i = 0, checkedValues_2 = checkedValues; _i < checkedValues_2.length; _i++) {
var value = checkedValues_2[_i];
if (value === selectedValueTxt) {
find = true;
break;
}

View File

@ -4,7 +4,7 @@ var SortingField = (function () {
function SortingField(converter, datasFieldNb, fieldsDOMSelector) {
if (fieldsDOMSelector === void 0) { fieldsDOMSelector = "th"; }
this._order = undefined;
if (converter.parseMetas === undefined || converter.parseMetas.fields === undefined)
if (converter.fields === undefined)
throw new Error(errors.sortingFieldNeedDatas);
else if (!converter.checkFieldExist(Number(datasFieldNb)))
throw new Error(errors.sortingFieldFieldNotFound);
@ -12,7 +12,7 @@ var SortingField = (function () {
var fields = document.querySelectorAll(fieldsDOMSelector);
if (fields === undefined)
throw new Error(errors.sortingFieldsNotInHTML);
else if (fields.length !== converter.parseMetas.fields.length)
else if (fields.length !== converter.fields.length)
throw new Error(errors.sortingFieldsNbFail);
else {
this._converter = converter;

68
src/exampleWithHTML.ts Normal file
View File

@ -0,0 +1,68 @@
import { FreeDatas2HTML, Pagination, Render, Selector, SortingField } from "./freeDatas2HTML";
const initialise = async () =>
{
try
{
// Création d'un convertisseur parsant des données transmises en HTML
let converter=new FreeDatas2HTML("HTML");
// converter.parser.setRemoteSource({ url: "http://localhost:8080/datas/posts.json", withCredentials:true, headers: [{ key:"Authorization", value:"Token YWxhZGRpbjpvcGVuc2VzYW1l" }] });
converter.datasViewElt={ id:"datas" };
await converter.run();
// Adaptation du rendu suivant la taille de l'écran
const myRender=new Render(converter);
if(window.innerWidth < 800)
{
myRender.settings=
{
allBegining:"<h4>Affichage petits écrans !</h4>",
allEnding:"",
linesBegining:"<ul>",
linesEnding:"</ul>",
lineBegining:"<li><ul>",
lineEnding:"</ul></li>",
dataDisplaying:"<li><b>#FIELDNAME :</b> #VALUE</li>",
};
converter.datasRender=myRender;
}
else
{
myRender.settings.allBegining="<table class='table-hover'>";
converter.datasRender=myRender;
}
// Configuration de la pagination
const pagination=new Pagination(converter, { id:"pages" }, "Page à afficher :");
pagination.options={ displayElement: { id:"paginationOptions" }, values: [15,30,50,100] , name: "Nombre de lignes par page :" };
pagination.selectedValue=15;
converter.pagination=pagination;
pagination.rend2HTML();
// Affichage initial
converter.datasCounter={ id:"compteur" };
await converter.run();
// Création d'un filtre par auteur :
let filtre1=new Selector(converter, 3, { id:"filtre1"} );
filtre1.selector2HTML();
converter.datasSelectors=[filtre1];
// Ajout de champs permettant de classer les données
// Uniquement avec un rendu tableau (grand écran), car entêtes de colonne nécessaires
if(window.innerWidth >= 800)
{
let sortingField1=new SortingField(converter, 2);
sortingField1.field2HTML();
let sortingField2=new SortingField(converter, 3);
sortingField2.field2HTML();
converter.datasSortingFields=[sortingField1,sortingField2];
}
}
catch(e)
{
console.error(e);
if(document.getElementById("datas")!==null)
document.getElementById("datas")!.innerHTML="<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
}
}
initialise();