From bad0816115ea73ef9459980d26bdca30bbb1473c Mon Sep 17 00:00:00 2001 From: n1474335 Date: Wed, 27 Dec 2017 01:52:41 +0000 Subject: [PATCH] Output files can be viewed in slices --- src/web/Manager.js | 4 +- src/web/OutputWaiter.js | 58 ++++++++++++++++++----- src/web/html/index.html | 17 +++++-- src/web/static/images/file-128x128.png | Bin 0 -> 19378 bytes src/web/static/images/file-32x32.png | Bin 0 -> 1946 bytes src/web/stylesheets/components/_pane.css | 18 +++++-- src/web/stylesheets/layout/_io.css | 8 ++++ src/web/stylesheets/utils/_overrides.css | 12 ++++- 8 files changed, 95 insertions(+), 22 deletions(-) create mode 100644 src/web/static/images/file-128x128.png create mode 100644 src/web/static/images/file-32x32.png diff --git a/src/web/Manager.js b/src/web/Manager.js index 270e68f8..4b89942a 100755 --- a/src/web/Manager.js +++ b/src/web/Manager.js @@ -142,7 +142,7 @@ Manager.prototype.initialiseEventListeners = function() { document.getElementById("input-text").addEventListener("mouseup", this.highlighter.inputMouseup.bind(this.highlighter)); document.getElementById("input-text").addEventListener("mousemove", this.highlighter.inputMousemove.bind(this.highlighter)); this.addMultiEventListener("#input-text", "mousedown dblclick select", this.highlighter.inputMousedown, this.highlighter); - document.querySelector("#input-file .close").addEventListener("click", this.input.closeFile.bind(this.input)); + document.querySelector("#input-file .close").addEventListener("click", this.input.clearIoClick.bind(this.input)); // Output document.getElementById("save-to-file").addEventListener("click", this.output.saveClick.bind(this.output)); @@ -159,6 +159,8 @@ Manager.prototype.initialiseEventListeners = function() { this.addMultiEventListener("#output-html", "mousedown dblclick select", this.highlighter.outputHtmlMousedown, this.highlighter); this.addDynamicListener(".file-switch", "click", this.output.fileSwitch, this.output); this.addDynamicListener("#output-file-download", "click", this.output.downloadFile, this.output); + this.addDynamicListener("#output-file-slice", "click", this.output.displayFile, this.output); + document.getElementById("show-file-overlay").addEventListener("click", this.output.showFileOverlayClick.bind(this.output)); // Options document.getElementById("options").addEventListener("click", this.options.optionsClick.bind(this.options)); diff --git a/src/web/OutputWaiter.js b/src/web/OutputWaiter.js index d8d028d0..93cc351b 100755 --- a/src/web/OutputWaiter.js +++ b/src/web/OutputWaiter.js @@ -17,7 +17,7 @@ const OutputWaiter = function(app, manager) { this.app = app; this.manager = manager; - this.file = null; + this.dishBuffer = null; }; @@ -37,8 +37,9 @@ OutputWaiter.prototype.get = function() { * @param {string|ArrayBuffer} data - The output string/HTML/ArrayBuffer * @param {string} type - The data type of the output * @param {number} duration - The length of time (ms) it took to generate the output + * @param {boolean} [preserveBuffer=false] - Whether to preserve the dishBuffer */ -OutputWaiter.prototype.set = function(data, type, duration) { +OutputWaiter.prototype.set = function(data, type, duration, preserveBuffer) { const outputText = document.getElementById("output-text"); const outputHtml = document.getElementById("output-html"); const outputFile = document.getElementById("output-file"); @@ -46,7 +47,7 @@ OutputWaiter.prototype.set = function(data, type, duration) { const inputHighlighter = document.getElementById("input-highlighter"); let scriptElements, lines, length; - this.closeFile(); + if (!preserveBuffer) this.closeFile(); switch (type) { case "html": @@ -80,7 +81,7 @@ OutputWaiter.prototype.set = function(data, type, duration) { outputHtml.innerHTML = ""; length = data.byteLength; - this.setFile(new File([data], "output.dat")); + this.setFile(data); break; case "string": default: @@ -106,10 +107,11 @@ OutputWaiter.prototype.set = function(data, type, duration) { /** * Shows file details. * - * @param {File} file + * @param {ArrayBuffer} buf */ -OutputWaiter.prototype.setFile = function(file) { - this.file = file; +OutputWaiter.prototype.setFile = function(buf) { + this.dishBuffer = buf; + const file = new File([buf], "output.dat"); // Display file overlay in output area with details const fileOverlay = document.getElementById("output-file"), @@ -124,7 +126,7 @@ OutputWaiter.prototype.setFile = function(file) { * Removes the output file and nulls its memory. */ OutputWaiter.prototype.closeFile = function() { - this.file = null; + this.dishBuffer = null; document.getElementById("output-file").style.display = "none"; }; @@ -134,8 +136,40 @@ OutputWaiter.prototype.closeFile = function() { */ OutputWaiter.prototype.downloadFile = function() { const filename = window.prompt("Please enter a filename:", "download.dat"); + const file = new File([this.dishBuffer], filename); - if (filename) FileSaver.saveAs(this.file, filename, false); + if (filename) FileSaver.saveAs(file, filename, false); +}; + + +/** + * Handler for file display events. + */ +OutputWaiter.prototype.displayFile = function() { + const startTime = new Date().getTime(), + showFileOverlay = document.getElementById("show-file-overlay"), + sliceFromEl = document.getElementById("output-file-slice-from"), + sliceToEl = document.getElementById("output-file-slice-to"), + sliceFrom = parseInt(sliceFromEl.value, 10), + sliceTo = parseInt(sliceToEl.value, 10), + str = Utils.arrayBufferToStr(this.dishBuffer.slice(sliceFrom, sliceTo)); + + showFileOverlay.style.display = "block"; + this.set(str, "string", new Date().getTime() - startTime, true); +}; + + +/** + * Handler for show file overlay events. + * + * @param {Event} e + */ +OutputWaiter.prototype.showFileOverlayClick = function(e) { + const outputFile = document.getElementById("output-file"), + showFileOverlay = e.target; + + outputFile.style.display = "block"; + showFileOverlay.style.display = "none"; }; @@ -198,8 +232,8 @@ OutputWaiter.prototype.adjustWidth = function() { * Saves the current output to a file. */ OutputWaiter.prototype.saveClick = function() { - if (!this.file) { - this.file = new File([new Uint8Array(Utils.strToCharcode(this.app.dishStr))], ""); + if (!this.dishBuffer) { + this.dishBuffer = new Uint8Array(Utils.strToCharcode(this.app.dishStr)).buffer; } this.downloadFile(); }; @@ -227,7 +261,7 @@ OutputWaiter.prototype.copyClick = function() { let success = false; try { textarea.select(); - success = document.execCommand("copy"); + success = textarea.value && document.execCommand("copy"); } catch (err) { success = false; } diff --git a/src/web/html/index.html b/src/web/html/index.html index cd690869..a132aebd 100755 --- a/src/web/html/index.html +++ b/src/web/html/index.html @@ -184,7 +184,7 @@
- +
Name:
@@ -216,15 +216,22 @@
+
- +
Size:
-
- Display in output
- Options for how much to display + +
+ + + + +
to
+ +
diff --git a/src/web/static/images/file-128x128.png b/src/web/static/images/file-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..005c504dd363985045a80a4f76c3de22ea506998 GIT binary patch literal 19378 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 W`0T4LoWa1rz~JfX=d#Wzp$P!(T%-vA literal 0 HcmV?d00001 diff --git a/src/web/stylesheets/components/_pane.css b/src/web/stylesheets/components/_pane.css index f69984b4..fb8f309b 100644 --- a/src/web/stylesheets/components/_pane.css +++ b/src/web/stylesheets/components/_pane.css @@ -50,8 +50,10 @@ .card>img { float: left; - width: 150px; - height: 150px; + width: 128px; + height: 128px; + margin-left: 10px; + margin-top: 11px; } .card-body .close { @@ -68,4 +70,14 @@ overflow: hidden; text-overflow: ellipsis; user-select: text; -} \ No newline at end of file +} + +.card-body>.btn { + margin-bottom: 15px; + margin-top: 5px; +} + +.card input[type=number] { + padding-right: 6px; + padding-left: 6px; +} diff --git a/src/web/stylesheets/layout/_io.css b/src/web/stylesheets/layout/_io.css index 519b81fc..370c2235 100644 --- a/src/web/stylesheets/layout/_io.css +++ b/src/web/stylesheets/layout/_io.css @@ -88,6 +88,14 @@ display: none; } +#show-file-overlay { + position: absolute; + right: 15px; + top: 15px; + cursor: pointer; + display: none; +} + .io-btn-group { float: right; margin-top: -4px; diff --git a/src/web/stylesheets/utils/_overrides.css b/src/web/stylesheets/utils/_overrides.css index 36069cd5..23f83bd8 100755 --- a/src/web/stylesheets/utils/_overrides.css +++ b/src/web/stylesheets/utils/_overrides.css @@ -64,7 +64,8 @@ a:focus { .alert, .modal-content, .tooltip-inner, -.dropdown-menu { +.dropdown-menu, +.input-group-addon { border-radius: 0 !important; } @@ -187,6 +188,15 @@ optgroup { color: var(--primary-font-colour); } +.input-group-addon:not(:first-child):not(:last-child) { + border-left: 0; + border-right: 0; +} + +.input-group-btn:first-child>.btn { + border-right: 0; +} + /* Bootstrap-switch */