Index: gc_lang/fr/webext/panel/lex_editor.css ================================================================== --- gc_lang/fr/webext/panel/lex_editor.css +++ gc_lang/fr/webext/panel/lex_editor.css @@ -220,21 +220,22 @@ margin: 5px 0px; background-color: hsl(210, 10%, 90%); border-radius: 5px; padding: 15px; } -#save_button, #export_button { +#save_button, #export_button, #import_button { display: none; float: right; - padding: 2px 20px; + padding: 2px 10px; background-color: hsl(150, 50%, 50%); color: hsl(150, 0%, 100%); border-radius: 3px; cursor: pointer; } -#export_button { +#export_button, #import_button { display: block; + margin-left: 5px; background-color: hsl(210, 50%, 50%); color: hsl(210, 0%, 100%); } #build_progress { @@ -241,18 +242,18 @@ display: none; width: 100%; } th { - padding: 5px 20px; + padding: 5px 10px; border-left: 1px solid hsl(210, 10%, 90%); text-align: left; } td { - padding: 0 20px; + padding: 0 10px; } .delete_entry { cursor: pointer; font-weight: bold; color: hsl(0, 100%, 50%); } Index: gc_lang/fr/webext/panel/lex_editor.html ================================================================== --- gc_lang/fr/webext/panel/lex_editor.html +++ gc_lang/fr/webext/panel/lex_editor.html @@ -276,21 +276,20 @@

Lexique

Nombre d’entrées ajoutées : 0.

Nombre d’entrées supprimées : 0.

Nombre d’entrées : 0.

+

+
+ Exporter +
+
+ Importer +

Dictionnaire enregistré

Dernière sauvegarde : néant.

Nombre d’entrées : 0.

-

-
-
- Exporter -
-

Export

-

Export de votre dictionnaire personnel au format JSON.

-

Aucun élément.

Index: gc_lang/fr/webext/panel/lex_editor.js ================================================================== --- gc_lang/fr/webext/panel/lex_editor.js +++ gc_lang/fr/webext/panel/lex_editor.js @@ -208,24 +208,11 @@ n += 1; } } else { this.showElement("no_elem_line"); } - }, - - addEntriesToTable: function (n, lFlex) { - let xTable = document.getElementById("table"); - if (lFlex.length > 0) { - if (document.getElementById("no_elem_line").style.display !== "none") { - this.hideElement("no_elem_line"); - xTable.appendChild(this.createTableHeader()); - } - for (let [sFlexion, sLemma, sTags] of lFlex) { - xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags)); - n += 1; - } - } + this.updateData(); }, clearTable: function () { let xTable = document.getElementById("table"); while (xTable.firstChild) { @@ -236,20 +223,50 @@ onTableClick: function (xEvent) { try { let xElem = xEvent.target; if (xElem.className) { if (xElem.className == "delete_entry") { - let iEntry = xElem.dataset.id_entry - oLexicon.lFlexion[parseInt(iEntry)] = null; - this.hideElement("row_"+iEntry); - this.showElement("save_button"); + this.deleteEntry(xElem.dataset.id_entry); } } } catch (e) { showError(e); } + }, + + addEntriesToTable: function (n, lFlex) { + let xTable = document.getElementById("table"); + if (lFlex.length > 0) { + if (document.getElementById("no_elem_line").style.display !== "none") { + this.hideElement("no_elem_line"); + xTable.appendChild(this.createTableHeader()); + } + for (let [sFlexion, sLemma, sTags] of lFlex) { + xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags)); + n += 1; + } + } + this.updateData(); + }, + + deleteEntry: function (iEntry) { + oLexicon.deleteEntry(iEntry); + this.hideElement("row_"+iEntry); + this.showElement("save_button"); + this.updateData(); + }, + + updateData: function () { + document.getElementById("num_added_entries").textContent = oLexicon.nAddedEntries; + document.getElementById("num_deleted_entries").textContent = oLexicon.nDeletedEntries; + document.getElementById("num_entries").textContent = oLexicon.nEntries; + }, + + setDictData: function (nEntries, sDate) { + document.getElementById("num_entries_saved").textContent = nEntries; + document.getElementById("save_date").textContent = sDate; } } @@ -489,33 +506,56 @@ const oLexicon = { lFlexion: [], - - addFlexions: function (lFlex) { - let n = this.lFlexion.length; - for (let aFlex of lFlex) { - this.lFlexion.push(aFlex); - } - oWidgets.addEntriesToTable(n, lFlex); - }, + nEntries: 0, + nDeletedEntries: 0, + nAddedEntries: 0, load: function () { if (bChrome) { - browser.storage.local.get("lexicon_list", this._setList); + browser.storage.local.get("lexicon", this._load); return; } - let xPromise = browser.storage.local.get("lexicon_list"); - xPromise.then(this._setList.bind(this), showError); + let xPromise = browser.storage.local.get("lexicon"); + xPromise.then(this._load.bind(this), showError); + }, + + _load: function (dResult) { + if (dResult.hasOwnProperty("lexicon")) { + this.lFlexion = dResult.lexicon.lEntry; + oWidgets.setDictData(this.lFlexion, dResult.lexicon.sDate); + oWidgets.displayTable(this.lFlexion); + } + if (this.lFlexion.length > 0) { + oWidgets.showElement("export_button"); + } else { + oWidgets.hideElement("export_button"); + } + }, + + addFlexions: function (lFlex) { + let n = lFlex.length; + for (let aFlex of lFlex) { + this.lFlexion.push(aFlex); + } + this.nAddedEntries += n; + this.nEntries += n; + oWidgets.addEntriesToTable(n, lFlex); + }, + + deleteEntry: function (iEntry) { + this.lFlexion[parseInt(iEntry)] = null; + this.nDeletedEntries++; + this.nEntries--; }, - _setList: function (dResult) { - if (dResult.hasOwnProperty("lexicon_list")) { - this.lFlexion = dResult.lexicon_list; - } - oWidgets.displayTable(this.lFlexion); + resetData: function () { + this.nAddedEntries = 0; + this.nDeletedEntries = 0; + this.nEntries = this.lFlexion.length; }, save: function () { oWidgets.hideElement("save_button"); let lEntry = []; @@ -522,20 +562,33 @@ for (let e of this.lFlexion) { if (e !== null) { lEntry.push(e); } } - browser.storage.local.set({ "lexicon_list": lEntry }); + let sDate = this._getDate(); + browser.storage.local.set({ "lexicon": {"lEntry": lEntry, "sDate": sDate} }); this.lFlexion = lEntry; - oWidgets.displayTable(this.lFlexion); this.build(); + this.resetData(); + oWidgets.displayTable(this.lFlexion); + oWidgets.updateData(); + oWidgets.setDictData(lEntry.length, sDate); + }, + + _getDate: function () { + let oDate = new Date(); + let sMonth = (oDate.getMonth() + 1).toString(); // Because JS always sucks somehow. + if (sMonth.length == 1) sMonth = "0" + sMonth; + let sDay = (oDate.getDay() < 10) ? "0"+oDate.getDay() : oDate.getDay(); + return `${oDate.getFullYear()}-${sMonth}-${sDay} (${oDate.getHours()}:${oDate.getMinutes()})`; }, build: function () { oWidgets.showElement("build_progress"); let xProgressNode = document.getElementById("build_progress"); let oDAWG = new DAWG(this.lFlexion, "Français - dictionnaire personnel", "S", xProgressNode); + oWidgets.hideElement("build_progress"); let lMorph = oDAWG.morph("finis"); console.log(lMorph); }, export: function () { Index: graphspell-js/dawg.js ================================================================== --- graphspell-js/dawg.js +++ graphspell-js/dawg.js @@ -132,13 +132,12 @@ lWord.sort(); if (xProgressBarNode) { xProgressBarNode.value = 0; xProgressBarNode.max = lWord.length; } - let i = 0; + let i = 1; for (let aEntry of lWord) { - console.log(aEntry); this.insert(aEntry); if (xProgressBarNode) { xProgressBarNode.value = i; i += 1; }