Index: gc_lang/fr/tb/content/file_handler.js ================================================================== --- gc_lang/fr/tb/content/file_handler.js +++ gc_lang/fr/tb/content/file_handler.js @@ -42,10 +42,30 @@ catch (e) { console.error(e); return null; } }, + + loadAs: function (callback) { + let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); + xFilePicker.init(window, "Charger fichier", Ci.nsIFilePicker.modeOpen); + xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText); + xFilePicker.open(async function (nReturnValue) { + if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) { + console.log(xFilePicker.file.path); + try { + let xDecoder = new TextDecoder(); + let array = await OS.File.read(xFilePicker.file.path); + callback(xDecoder.decode(array)); + } + catch (e) { + console.error(e); + callback(null); + } + } + }); + }, saveFile: function (sFilename, sData) { if (!this.xDataFolder) { this.prepareDataFolder(); } @@ -71,9 +91,9 @@ xFilePicker.open(function (nReturnValue) { if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) { let xEncoder = new TextEncoder(); let xEncodedRes = xEncoder.encode(sData); OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"}); - } + } }); } } Index: gc_lang/fr/tb/content/lex_editor.css ================================================================== --- gc_lang/fr/tb/content/lex_editor.css +++ gc_lang/fr/tb/content/lex_editor.css @@ -96,10 +96,13 @@ #search_table { width: 600px; height: 650px; } +.bold { + font-weight: bold; +} description { width: 200px; } /* Index: gc_lang/fr/tb/content/lex_editor.js ================================================================== --- gc_lang/fr/tb/content/lex_editor.js +++ gc_lang/fr/tb/content/lex_editor.js @@ -419,11 +419,11 @@ oIBDAWG: null, load: async function () { let sJSON = await oFileHandler.loadFile("fr.personal.json"); - if (sJSON != "") { + if (sJSON) { let oJSON = JSON.parse(sJSON); this.oIBDAWG = new IBDAWG(oJSON); let lEntry = []; for (let aRes of this.oIBDAWG.select()) { lEntry.push(aRes); @@ -434,10 +434,27 @@ } else { this.setDictData(0, "[néant]"); disableElement("export_button"); } }, + + import: function () { + oFileHandler.loadAs(this._import.bind(this)); + }, + + _import: function (sJSON) { + if (sJSON) { + let oJSON = JSON.parse(sJSON); + this.oIBDAWG = new IBDAWG(oJSON); + oFileHandler.saveFile("fr.personal.json", JSON.stringify(oJSON)); + let lEntry = []; + for (let aRes of this.oIBDAWG.select()) { + lEntry.push(aRes); + } + oLexiconTable.fill(lEntry); + } + }, setDictData: function (nEntries, sDate) { document.getElementById("dic_num_entries").value = nEntries; document.getElementById("dic_save_date").value = sDate; }, @@ -444,11 +461,11 @@ listen: function () { document.getElementById("delete_button").addEventListener("click", () => { oLexiconTable.deleteSelection(); }, false); document.getElementById("save_button").addEventListener("click", () => { this.build(); }, false); document.getElementById("export_button").addEventListener("click", () => { this.export(); }, false); - //document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false); + document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false); }, build: function () { let xProgressNode = document.getElementById("wait_progress"); let lEntry = oLexiconTable.getEntries(); @@ -465,14 +482,10 @@ this.setDictData(0, "[néant]"); disableElement("export_button"); } }, - import: function () { - console.log("import"); - }, - export: function () { let sJSON = JSON.stringify(this.oIBDAWG.getJSON()); oFileHandler.saveAs(sJSON); } } Index: gc_lang/fr/tb/content/lex_editor.xul ================================================================== --- gc_lang/fr/tb/content/lex_editor.xul +++ gc_lang/fr/tb/content/lex_editor.xul @@ -23,10 +23,11 @@