summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/cabinet.js2
-rw-r--r--js/cheesesteak.js79
-rw-r--r--js/pomf.js80
3 files changed, 92 insertions, 69 deletions
diff --git a/js/cabinet.js b/js/cabinet.js
index f6f5f20..2f3a3a6 100644
--- a/js/cabinet.js
+++ b/js/cabinet.js
@@ -37,9 +37,11 @@
} else {
input.trigger(inner);
}
+
if (prevent) {
e.preventDefault();
}
+
if (fn) {
fn(e);
}
diff --git a/js/cheesesteak.js b/js/cheesesteak.js
index a3cf991..ea3dc19 100644
--- a/js/cheesesteak.js
+++ b/js/cheesesteak.js
@@ -22,21 +22,25 @@
/* jshint browser:true, jquery:true */
(function() {
- /* Lightweight EventEmitter implementation */
+ // Lightweight EventEmitter implementation
EventEmitter = function() {};
+
EventEmitter.prototype.on = function(evt, fn) {
this._events = this._events || {};
this._events[evt] = this._events[evt] || [];
this._events[evt].push(fn);
};
+
EventEmitter.prototype.off = function(evt, fn) {
- if (!this.hasOwnProperty('_events') || evt in this._events === false) {
+ if (!this.hasOwnProperty('_events') || evt in this._events === false) {
return;
}
+
this._events[evt].splice(this._events[evt].indexOf(fn), 1);
};
+
EventEmitter.prototype.emit = function(evt) {
- if (!this.hasOwnProperty('_events') || evt in this._events === false) {
+ if (!this.hasOwnProperty('_events') || evt in this._events === false) {
return;
}
@@ -46,7 +50,7 @@
}
};
- /* Copy the stuff from Array to FileList */
+ // Copy the stuff from Array to FileList
FileList.prototype.forEach = Array.prototype.forEach;
FileList.prototype.every = Array.prototype.every;
FileList.prototype.some = Array.prototype.some;
@@ -55,7 +59,7 @@
FileList.prototype.reduce = Array.prototype.reduce;
FileList.prototype.reduceRight = Array.prototype.reduceRight;
- Object.defineProperty(FileList.prototype, "size", {
+ Object.defineProperty(FileList.prototype, 'size', {
get: function getSize() {
return this.reduce(function(prev, curr) {
return prev + curr.size;
@@ -63,29 +67,29 @@
}
});
- /* Utility to convert bytes into human units */
+ // Utility to convert bytes into human units
var humanSize = {
get: function humanSize() {
var units = [
- "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"
+ 'B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'
];
var e = Math.floor(Math.log(this.size) / Math.log(1024));
- return (this.size / Math.pow(1024, e)).toFixed(2) + " " + units[e];
+ return (this.size / Math.pow(1024, e)).toFixed(2) + ' ' + units[e];
}
};
- Object.defineProperty(FileList.prototype, "humanSize", humanSize);
- Object.defineProperty(File.prototype, "humanSize", humanSize);
+ Object.defineProperty(FileList.prototype, 'humanSize', humanSize);
+ Object.defineProperty(File.prototype, 'humanSize', humanSize);
var percentUploaded = {
get: function percentUploaded() {
return this.uploadedSize / this.size;
}
};
- Object.defineProperty(FileList.prototype, "percentUploaded",
+ Object.defineProperty(FileList.prototype, 'percentUploaded',
percentUploaded);
- Object.defineProperty(File.prototype, "percentUploaded", percentUploaded);
+ Object.defineProperty(File.prototype, 'percentUploaded', percentUploaded);
- Object.defineProperty(FileList.prototype, "uploadedSize", {
+ Object.defineProperty(FileList.prototype, 'uploadedSize', {
get: function getUploadedSize() {
return this.reduce(function(prev, curr) {
return prev + (curr.uploadedSize || 0);
@@ -93,8 +97,8 @@
}
});
- /* Object URL stuff */
- Object.defineProperty(File.prototype, "url", {
+ // Object URL stuff
+ Object.defineProperty(File.prototype, 'url', {
get: function getURL() {
return window.URL.createObjectURL(this);
}
@@ -109,10 +113,11 @@
for (var key in overlay) {
if (typeof overlay[key] === 'object') {
out[key] = merge(base[key], overlay[key]);
- } else {
+ } else {
out[key] = overlay[key];
}
}
+
return out;
};
@@ -123,11 +128,12 @@
opts = opts || {};
this.opts = merge({
- 'field': 'files[]',
- 'method': 'POST',
- 'data': {}
+ field: 'files[]',
+ method: 'POST',
+ data: {}
}, opts);
};
+
FileListUploader.prototype = Object.create(EventEmitter.prototype);
FileListUploader.prototype.upload = function(cb) {
if (cb) {
@@ -136,7 +142,7 @@
var opts = this.opts;
var files = this.files;
- var events = this;
+ var _this = this;
var data = new FormData();
files.forEach(function(file) {
@@ -151,14 +157,19 @@
files[i].uploadedSize = 0;
}
});
+
xhr.upload.addEventListener('progress', function(e) {
if (e.lengthComputable) {
size = e.loaded;
- // We know the size of the files, the order they're in, and how
- // much we've uploaded. Based on this data, we can do some magic
- // to figure out which file we're on, and how much we've uploaded
- // of that file.
- // TODO: This math has trouble on later uploads. Leak somewhere
+
+ /**
+ * We know the size of the files, the order they're in, and how
+ * much we've uploaded. Based on this data, we can do some magic
+ * to figure out which file we're on, and how much we've uploaded
+ * of that file.
+ */
+
+ // TODO: This math has trouble on later uploads. Leak somewhere.
for (var i = 0, l = files.length; i < l; i++) {
files[i].uploadedSize = Math.min(size, files[i].size);
size -= files[i].uploadedSize;
@@ -168,23 +179,29 @@
}
}
}
- events.emit('uploadprogress', e, files);
+
+ _this.emit('uploadprogress', e, files);
}, false);
+
xhr.upload.addEventListener('loadstart', function(e) {
- events.emit('uploadstart', e);
+ _this.emit('uploadstart', e);
});
+
xhr.upload.addEventListener('load', function(e) {
- events.emit('uploadcomplete', e);
+ _this.emit('uploadcomplete', e);
});
+
xhr.addEventListener('progress', function(e) {
- events.emit('progress', e);
+ _this.emit('progress', e);
});
+
xhr.addEventListener('load', function(e) {
- events.emit('load', e, xhr.responseText);
+ _this.emit('load', e, xhr.responseText);
});
xhr.send(data);
- /* TODO: Add more event passthroughs, maybe abstract it into a helper? */
+
+ // TODO: Add more event passthroughs, maybe abstract it into a helper?
};
FileList.prototype.upload = function uploadFileList(url, opts) {
diff --git a/js/pomf.js b/js/pomf.js
index bdd3174..7dd44ef 100644
--- a/js/pomf.js
+++ b/js/pomf.js
@@ -23,9 +23,9 @@
/* jshint browser:true, jquery:true */
$(function() {
- var uploadInput = $('#upload-input'),
- uploadBtn = $('#upload-btn'),
- uploadFiles = $('#upload-filelist');
+ var uploadInput = $('#upload-input');
+ var uploadBtn = $('#upload-btn');
+ var uploadFiles = $('#upload-filelist');
var btnContent = '';
@@ -56,12 +56,12 @@ $(function() {
$(this).html(btnContent);
break;
}
- } while (node = node.parentNode);
+ } while (node === node.parentNode);
});
var MAX_SIZE = (function(node) {
var max = node.attr('data-max-size') || '120MiB';
- var num = parseInt(/([0-9,]+).*/.exec(max)[1].replace(',', ''));
+ var num = parseInt(/([0-9,]+).*/.exec(max)[1].replace(',', ''), 10);
var unit = /(?:([KMGTPEZY])(i)?B|([BKMGTPEZY]))/.exec(max) || ['B', '', ''];
var oneUnit = Math.pow(
@@ -73,11 +73,11 @@ $(function() {
})(uploadInput);
var createRow = function(filename, size, extra) {
- var rowItem = $('<li class=file>'),
- rowName = $('<span class=file-name>'),
- rowProg = $('<div class="file-progress progress-outer">'),
- rowSize = $('<span class=file-size>'),
- rowUrl = $('<span class=file-url>');
+ var rowItem = $('<li class=file>');
+ var rowName = $('<span class=file-name>');
+ var rowProg = $('<div class="file-progress progress-outer">');
+ var rowSize = $('<span class=file-size>');
+ var rowUrl = $('<span class=file-url>');
rowItem.addClass(extra || '');
@@ -120,8 +120,8 @@ $(function() {
var eachRow = function(files, fn) {
var hits = {};
files.forEach(function(file) {
- ++hits[file.name] || (hits[file.name] = 0);
- var row = $($('li[data-filename="' +
+ ++hits[file.name];
+ var row = $($('li[data-filename="' +
escape(file.name) + '"]')[hits[file.name] || 0]);
fn.call(row, row, file, files);
});
@@ -131,6 +131,7 @@ $(function() {
eachRow(files, function(row, file, files) {
$('.progress-inner', row).width((file.percentUploaded * 100) + '%');
});
+
$('.progress-inner', totalRow).width((files.percentUploaded * 100) + '%');
});
@@ -139,36 +140,39 @@ $(function() {
totalName.html('Grabbing URLs&hellip;');
});
- up.on('load', function(e, res) {
+ up.on('load', function(e, response) {
switch (e.target.status) {
- case 200:
- var res = JSON.parse(res);
- if (!res.success) {
- uploadFiles.addClass('error');
- totalName.text(UPLOAD_ERR_FAILED);
- break;
- }
- eachRow(res.files, function(row, file, files) {
- var link = $('<a>');
-
- link.attr('href', file.url)
- .attr('target', '_BLANK')
- .text(file.url.replace('http://', '').replace('https://', ''));
-
- $('.file-url', row).append(link);
- });
- uploadFiles.addClass('completed');
- totalName.text('Done!');
- break;
- case 413:
- uploadFiles.addClass('error completed');
- totalName.html(UPLOAD_ERR_MAX_SIZE);
- break;
- default:
- uploadFiles.addClass('error completed');
+ case 200:
+ var res = JSON.parse(response);
+ if (!res.success) {
+ uploadFiles.addClass('error');
totalName.text(UPLOAD_ERR_FAILED);
+ break;
+ }
+
+ eachRow(res.files, function(row, file, files) {
+ var link = $('<a>');
+
+ link.attr('href', file.url)
+ .attr('target', '_BLANK')
+ .text(file.url.replace('http://', '').replace('https://', ''));
+
+ $('.file-url', row).append(link);
+ });
+
+ uploadFiles.addClass('completed');
+ totalName.text('Done!');
+ break;
+ case 413:
+ uploadFiles.addClass('error completed');
+ totalName.html(UPLOAD_ERR_MAX_SIZE);
+ break;
+ default:
+ uploadFiles.addClass('error completed');
+ totalName.text(UPLOAD_ERR_FAILED);
}
});
+
up.upload();
});
});