Adds drag'n'drop upload.

This commit is contained in:
Lars Jung 2012-08-09 11:34:20 +02:00
parent da438f2f0b
commit d76fad3a51
15 changed files with 766 additions and 27 deletions

View file

@ -0,0 +1,139 @@
modulejs.define('ext/dropbox', ['_', '$', 'core/settings', 'core/entry'], function (_, $, allsettings, entry) {
var defaults = {
enabled: true
},
settings = _.extend({}, defaults, allsettings.dropbox),
template = '<div id="dropbox"><div class="label">dropbox</div><ul id="uploads" /></div>',
uploadTemplate = '<li class="upload clearfix">' +
'<span class="name"></span>' +
'<div class="progress"><div class="bar"></div></div>' +
'<span class="size"></span>' +
'</li>',
init = function () {
if (!settings.enabled) {
return;
}
var $dropbox = $(template).appendTo('#content');
var uploads = {};
$dropbox.filedrop({
// The name of the $_FILES entry:
paramname: 'userfile',
maxfiles: 24,
maxfilesize: 1024,
url: allsettings.h5aiAbsHref + 'php/api.php',
data: {
action: 'upload',
href: entry.absHref
},
dragOver: function () {
$dropbox.addClass('match');
},
dragLeave: function () {
$dropbox.removeClass('match');
},
docOver: function () {
$dropbox.addClass('hint');
},
docLeave: function () {
$dropbox.removeClass('hint');
},
drop: function () {
$dropbox.removeClass('match hint');
},
beforeEach: function (file) {
uploads[file.name] = $(uploadTemplate).appendTo('#uploads')
.find('.name').text(file.name).end()
.find('.size').text(file.size).end()
.find('.progress .bar').css('width', 0).end();
console.log('beforeEach', file);
},
uploadStarted: function (i, file, len) {
console.log('uploadStarted', i, file, len);
},
progressUpdated: function (i, file, progress) {
uploads[file.name]
.find('.progress .bar').css('width', '' + progress + '%');
console.log('progressUpdated', i, file, progress);
},
uploadFinished: function (i, file, response) {
uploads[file.name].addClass(response.code ? 'error' : 'finished');
setTimeout(function () {
uploads[file.name].slideUp(400, function () {
uploads[file.name].remove();
});
}, 5000);
console.log('uploadFinished', i, file, response);
},
afterAll: function () {
// $('#uploads .upload').remove();
},
error: function (err, file) {
uploads[file.name].addClass('error');
setTimeout(function () {
uploads[file.name].slideUp(400, function () {
uploads[file.name].remove();
});
}, 5000);
switch (err) {
case 'BrowserNotSupported':
console.log('ERROR', 'Your browser does not support HTML5 file uploads!');
break;
case 'TooManyFiles':
console.log('ERROR', 'Too many files! Please select 5 at most! (configurable)');
break;
case 'FileTooLarge':
console.log('ERROR', file.name + ' is too large! Please upload files up to 2mb (configurable).');
break;
default:
break;
}
console.log('error', err, file);
}
});
};
init();
});

View file

@ -1,5 +1,5 @@
modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/entry'], function (_, $, allsettings, resource, store, entry) {
modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/event', 'core/entry'], function (_, $, allsettings, resource, store, event, entry) {
var defaults = {
enabled: false,
@ -149,7 +149,6 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
$('#pv-img-bar-original').find('a').attr('href', currentEntries[currentIdx].absHref);
}, 1);
});
});
},
@ -201,13 +200,20 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
}
},
initEntry = function (entries, entry, idx) {
initEntry = function (entry) {
if (entry.$extended) {
if (entry.$extended && _.indexOf(settings.types, entry.type) >= 0) {
entry.$extended.find('a').on('click', function (event) {
event.preventDefault();
onEnter(entries, idx);
var matchedEntries = _.compact(_.map($('#extended .entry'), function (entry) {
entry = $(entry).data('entry');
return _.indexOf(settings.types, entry.type) >= 0 ? entry : null;
}));
onEnter(matchedEntries, _.indexOf(matchedEntries, entry));
});
}
},
@ -218,13 +224,9 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
return;
}
var imageEntries = _.filter(entry.content, function (entry) {
_.each(entry.content, function (e) {
return _.indexOf(settings.types, entry.type) >= 0;
});
_.each(imageEntries, function (e, idx) {
initEntry(imageEntries, e, idx);
initEntry(e);
});
$(template).appendTo('body');
@ -277,6 +279,11 @@ modulejs.define('ext/preview-img', ['_', '$', 'core/settings', 'core/resource',
}
});
event.sub('entry.created', function (entry) {
initEntry(entry);
});
$(window).on('resize load', adjustSize);
};

View file

@ -1,5 +1,5 @@
modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/entry'], function (_, $, allsettings, resource, store, entry) {
modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/event', 'core/entry'], function (_, $, allsettings, resource, store, event, entry) {
var defaults = {
enabled: false,
@ -16,7 +16,7 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
java: 'java',
makefile: 'xml',
markdown: 'plain',
php: 'php',
// php: 'php',
python: 'python',
readme: 'plain',
rb: 'ruby',
@ -207,13 +207,20 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
}
},
initEntry = function (entries, entry, idx) {
initEntry = function (entry) {
if (entry.$extended) {
if (entry.$extended && _.indexOf(_.keys(settings.types), entry.type) >= 0) {
entry.$extended.find('a').on('click', function (event) {
event.preventDefault();
onEnter(entries, idx);
var matchedEntries = _.compact(_.map($('#extended .entry'), function (entry) {
entry = $(entry).data('entry');
return _.indexOf(_.keys(settings.types), entry.type) >= 0 ? entry : null;
}));
onEnter(matchedEntries, _.indexOf(matchedEntries, entry));
});
}
},
@ -224,13 +231,9 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
return;
}
var imageEntries = _.filter(entry.content, function (entry) {
_.each(entry.content, function (e) {
return _.indexOf(_.keys(settings.types), entry.type) >= 0;
});
_.each(imageEntries, function (e, idx) {
initEntry(imageEntries, e, idx);
initEntry(e);
});
$(template).appendTo('body');
@ -254,6 +257,11 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource',
event.stopPropagation();
});
event.sub('entry.created', function (entry) {
initEntry(entry);
});
$(window).on('resize load', adjustSize);
};

View file

@ -1,5 +1,5 @@
modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/ajax'], function (_, allsettings, entry, ajax) {
modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/event', 'core/ajax'], function (_, allsettings, entry, event, ajax) {
var defaults = {
enabled: false,
@ -52,6 +52,11 @@ modulejs.define('ext/thumbnails', ['_', 'core/settings', 'core/entry', 'core/aja
_.each(entry.content, checkEntry);
}, settings.delay);
event.sub('entry.created', function (entry) {
checkEntry(entry);
});
};
init(entry);