From a006af6ccacee6f893194058db56482f3a4aa7ae Mon Sep 17 00:00:00 2001 From: Freeyorp Date: Sun, 26 May 2013 13:21:41 +1200 Subject: Flatten loader closure, adjust event callback The inner loader closure was redundant. Apparently I really like closures during late night coding. main.js should no longer have to deal with raw loading events; only UI specific callbacks. --- public/js/mv/load.js | 154 +++++++++++++++++++++++++++------------------------ public/js/mv/main.js | 6 +- 2 files changed, 85 insertions(+), 75 deletions(-) diff --git a/public/js/mv/load.js b/public/js/mv/load.js index 0805214..56edf76 100644 --- a/public/js/mv/load.js +++ b/public/js/mv/load.js @@ -1,80 +1,90 @@ "use strict"; var mv = function(mv) { - mv.loader = function() { - /* Set up handlers for file selector */ - var numfiles = 0; - var filenames = []; - var curfile = 0; - var loader = {}; - loader.onbulkstart = function(fevt) {}; - loader.onloadstart = function(evt) {}; - loader.onprogress = function(evt) {}; - loader.onabort = function(evt) { - alert('File load aborted!'); + mv.loader = { + /* Callbacks */ + onbulkstart: onbulkstart, + onloadstart: onloadstart, + onprogress: onprogress, + onabort: onabort, + onerror: onerror, + /* File state accessors */ + numfiles: function() { return numfiles; }, + filenames: function() { return filenames; }, + curfile: function() { return curfile; }, + /* Callback */ + setname: function(n) {}, + /* Initialise the loader module */ + init: init, + } + /* Set up handlers for file selector */ + var numfiles = 0; + var filenames = []; + var curfile = 0; + var files; + function onbulkstart(fevt) {} + function onloadstart(evt) {} + function onprogress(evt) {} + function onabort(evt) { + alert('File load aborted!'); + } + function onerror(evt) { + switch(evt.target.error.code) { + case evt.target.error.NOT_FOUND_ERR: + alert('File Not Found!'); + break; + case evt.target.error.NOT_READABLE_ERR: + alert('File is not readable'); + break; + case evt.target.error.ABORT_ERR: + break; // noop + default: + alert('An error occurred reading this file.'); }; - loader.onerror = function(evt) { - switch(evt.target.error.code) { - case evt.target.error.NOT_FOUND_ERR: - alert('File Not Found!'); - break; - case evt.target.error.NOT_READABLE_ERR: - alert('File is not readable'); - break; - case evt.target.error.ABORT_ERR: - break; // noop - default: - alert('An error occurred reading this file.'); - }; - }; - loader.numfiles = function() { return numfiles; }; - loader.filenames = function() { return filenames; }; - loader.curfile = function() { return curfile; }; - loader.setname = function(n) {}; - loader.init = function(each, after) { - document.getElementById('input').addEventListener('change', function(fevt) { - numfiles = fevt.target.files.length; - filenames = Array.prototype.map.call(fevt.target.files, function(d) { return d.name; }); - curfile = 0; - var reader = new FileReader(); - loader.onbulkstart(fevt); - reader.onerror = function() { loader.onerror.apply(null, arguments) }; - reader.onprogress = function(evt) { if (evt.lengthComputable) { loader.onprogress(evt.loaded, evt.total) } }; - reader.onabort = function() { loader.onabort.apply(null, arguments) }; - reader.onloadstart = function() { loader.onloadstart.apply(null, arguments) }; - reader.onload = function(evt) { - each(reader.result, filenames[curfile], function() { - ++curfile; - if (curfile == numfiles) { - after(); - } else { - nextFile(); - } - }); - }; - function nextFile() { - var file = fevt.target.files[curfile]; - loader.onloadstart(); - if (file.name.indexOf(".zip", name.length - 4) != -1) { - zip.createReader(new zip.BlobReader(file), function(zipReader) { - zipReader.getEntries(function(entries) { - entries.forEach(function(d, i) { - loader.setname(file.name + "'; unzipping '" + d.filename + " (" + (i + 1) + "/" + entries.length + ")"); - d.getData(new zip.BlobWriter(), function(blob) { - loader.setname(d.filename); - reader.readAsBinaryString(blob); - }, loader.onprogress); - }); - }, loader.onerror); - }, loader.onerror); + } + function init(input, each, after) { + input.on('change', function() { + files = d3.event.target.files; + numfiles = files.length; + filenames = Array.prototype.map.call(files, function(d) { return d.name; }); + curfile = 0; + var reader = new FileReader(); + mv.loader.onbulkstart(); + reader.onerror = function() { mv.loader.onerror.apply(null, arguments) }; + reader.onprogress = function(evt) { if (evt.lengthComputable) { mv.loader.onprogress(evt.loaded, evt.total) } }; + reader.onabort = function() { mv.loader.onabort.apply(null, arguments) }; + reader.onloadstart = function() { mv.loader.onloadstart.apply(null, arguments) }; + reader.onload = function(evt) { + each(reader.result, filenames[curfile], function() { + ++curfile; + if (curfile == numfiles) { + after(); } else { - loader.setname(file); - reader.readAsBinaryString(file); + nextFile(); } + }); + }; + function nextFile() { + var file = files[curfile]; + mv.loader.onloadstart(); + if (file.name.indexOf(".zip", name.length - 4) != -1) { + zip.createReader(new zip.BlobReader(file), function(zipReader) { + zipReader.getEntries(function(entries) { + entries.forEach(function(d, i) { + mv.loader.setname(file.name + "'; unzipping '" + d.filename + " (" + (i + 1) + "/" + entries.length + ")"); + d.getData(new zip.BlobWriter(), function(blob) { + mv.loader.setname(d.filename); + reader.readAsBinaryString(blob); + }, mv.loader.onprogress); + }); + }, mv.loader.onerror); + }, mv.loader.onerror); + } else { + mv.loader.setname(file); + reader.readAsBinaryString(file); } - nextFile(); - }, false); - }; - return loader; - }(); + } + nextFile(); + }, false); + }; return mv; }(mv || {}); diff --git a/public/js/mv/main.js b/public/js/mv/main.js index 28857aa..b5a2b3a 100644 --- a/public/js/mv/main.js +++ b/public/js/mv/main.js @@ -16,18 +16,18 @@ var mv = function(mv) { mv.init = function() { /* Loader module */ /* Callbacks for loading files from the filesystem */ - mv.loader.onbulkstart = function(fevt) { + mv.loader.onbulkstart = function() { loadbar.show(); filesbar.show(); }; - mv.loader.onloadstart = function(evt) { + mv.loader.onloadstart = function() { filesbar.update(mv.loader.curfile(), mv.loader.numfiles()); loadbar.reset(); }; mv.loader.onprogress = function(current, total) { loadbar.update(current, total); }; - mv.loader.init(handleFile, postLoading); + mv.loader.init(d3.select("#input"), handleFile, postLoading); mv.loader.setname = function(n) { name = n; }; /* Set zip.js worker path */ zip.workerScriptsPath = "/js/zip/WebContent/"; -- cgit v1.2.3-60-g2f50