From bcfb8220d34d36f817caf37e7e469c1f2703238d Mon Sep 17 00:00:00 2001 From: Kai Labusch Date: Wed, 6 Nov 2019 11:20:46 +0100 Subject: [PATCH] notify user on page reload --- ner-edith.js | 46 +++++++++++++++++++++++++++++++++++++++++++--- tools/README.md | 2 +- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/ner-edith.js b/ner-edith.js index 84070b5..6e60d87 100644 --- a/ner-edith.js +++ b/ner-edith.js @@ -52,6 +52,24 @@ function setupInterface(data, file, urls) { var startIndex=0; var endIndex=displayRows; + var has_changes = false; + + function notifyChange() { + has_changes = true; + + $("#save").attr('disabled', false); + } + + function resetChanged() { + $("#save").attr('disabled', true); + has_changes = false; + } + + var that = + { + hasChanges: function () { return has_changes; } + }; + function updatePreview(nRow) { if (urls == null) return; @@ -132,6 +150,8 @@ function setupInterface(data, file, urls) { let tableInfo = $(td).data('tableInfo'); data.data[tableInfo.nRow][tableInfo.column] = newValue; + + notifyChange(); } else { $(td).html(editingTd.data); @@ -205,6 +225,8 @@ function setupInterface(data, file, urls) { data.data[tableInfo.nRow - 1]['TOKEN'] += data.data[tableInfo.nRow]['TOKEN']; data.data.splice(tableInfo.nRow, 1); + + notifyChange(); } else if (editingTd.tokenizer_action.includes('split')) { @@ -216,6 +238,8 @@ function setupInterface(data, file, urls) { data.data[pos]['No.']++; pos++; } + + notifyChange(); } else if (editingTd.tokenizer_action.includes('start-sentence')) { let pos = tableInfo.nRow; @@ -225,6 +249,8 @@ function setupInterface(data, file, urls) { pos++; word_pos++; } + + notifyChange(); } editingTd = null; @@ -271,6 +297,8 @@ function setupInterface(data, file, urls) { editingTd = null; colorCode(); + + notifyChange(); } }; @@ -423,7 +451,7 @@ function setupInterface(data, file, urls) { `; let save_html = - `` + `` $("#tableregion").html(table_html) @@ -490,7 +518,6 @@ function setupInterface(data, file, urls) { lnk.href = objectURL = url.createObjectURL(blob); lnk.dispatchEvent(new MouseEvent('click')); setTimeout(url.revokeObjectURL.bind(url, objectURL)); - } $('.saveButton').on('click', saveFile) @@ -566,18 +593,31 @@ function setupInterface(data, file, urls) { updateTable(); } ); + + return that; } $(document).ready( function() { + $('#tsv-file').change( function(evt) { loadFile ( evt, function(results, file, urls) { - setupInterface(results, file, urls); + var ner_edith = setupInterface(results, file, urls); + + $(window).bind("beforeunload", + function() { + + console.log(ner_edith.hasChanges()); + + if (ner_edith.hasChanges()) + return confirm("You have unsaved changes. Do you want to save them before leaving?"); + } + ); }) } ); diff --git a/tools/README.md b/tools/README.md index 494d653..52d3622 100644 --- a/tools/README.md +++ b/tools/README.md @@ -47,7 +47,7 @@ page2tsv PAGE5.xml PAGE.tsv --image-url=http://link-to-corresponding-image-5 For instance, for the file assets/example.xml: ``` -page2tsv example.xml example.tsv --image-url=http://content.staatsbibliothek-berlin.de/zefys/SNP27646518-18800101-0-3-0-0/left,top,width,height/full/0/default.jpg +page2tsv example.xml example .tsv --image-url=http://content.staatsbibliothek-berlin.de/zefys/SNP27646518-18800101-0-3-0-0/left,top,width,height/full/0/default.jpg ``` ---