mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
164 lines
6.4 KiB
JavaScript
164 lines
6.4 KiB
JavaScript
|
(function($) {
|
||
|
$.widget('blueimpUIX.fileupload', $.blueimpUI.fileupload, {
|
||
|
_initTemplates: function() {
|
||
|
this.options.templateContainer = document.createElement(
|
||
|
this._files.prop('nodeName')
|
||
|
);
|
||
|
this.options.uploadTemplate = window.tmpl(this.options.uploadTemplateName);
|
||
|
this.options.downloadTemplate = window.tmpl(this.options.downloadTemplateName);
|
||
|
},
|
||
|
_enableFileInputButton: function() {
|
||
|
$.blueimpUI.fileupload.prototype._enableFileInputButton.call(this);
|
||
|
this.element.find('.ss-uploadfield-addfile').show();
|
||
|
},
|
||
|
_disableFileInputButton: function() {
|
||
|
$.blueimpUI.fileupload.prototype._disableFileInputButton.call(this);
|
||
|
this.element.find('.ss-uploadfield-addfile').hide();
|
||
|
},
|
||
|
_onAdd: function(e, data) {
|
||
|
// use _onAdd instead of add since we only want it called once for a file set, not for each file
|
||
|
var result = $.blueimpUI.fileupload.prototype._onAdd.call(this, e, data);
|
||
|
var firstNewFile = this._files.find('.ss-uploadfield-item').slice(data.files.length*-1).first();
|
||
|
var top = '+=' + (firstNewFile.position().top - parseInt(firstNewFile.css('marginTop')) || 0 - parseInt(firstNewFile.css('borderTopWidth')) || 0);
|
||
|
firstNewFile.offsetParent().animate({scrollTop: top}, 1000);
|
||
|
return result;
|
||
|
}
|
||
|
});
|
||
|
$.entwine('ss', function($) {
|
||
|
$('div.ss-upload').entwine({
|
||
|
onmatch: function() {
|
||
|
var fileInput = this.find('input');
|
||
|
var dropZone = this.find('.ss-uploadfield-dropzone');
|
||
|
var config = $.parseJSON(fileInput.data('config').replace(/'/g,'"'));
|
||
|
this.fileupload($.extend(true,
|
||
|
{
|
||
|
formData: function(form) {
|
||
|
return [{name: 'SecurityID', value: $(form).find(':input[name=SecurityID]').val()}];
|
||
|
},
|
||
|
errorMessages: {
|
||
|
// errorMessages for all error codes suggested from the plugin author, some will be overwritten by the config comming from php
|
||
|
1: ss.i18n._t('UploadField.PHP_MAXFILESIZE'),
|
||
|
2: ss.i18n._t('UploadField.HTML_MAXFILESIZE'),
|
||
|
3: ss.i18n._t('UploadField.ONLYPARTIALUPLOADED'),
|
||
|
4: ss.i18n._t('UploadField.NOFILEUPLOADED'),
|
||
|
5: ss.i18n._t('UploadField.NOTMPFOLDER'),
|
||
|
6: ss.i18n._t('UploadField.WRITEFAILED'),
|
||
|
7: ss.i18n._t('UploadField.STOPEDBYEXTENSION'),
|
||
|
maxFileSize: ss.i18n._t('UploadField.TOOLARGE'),
|
||
|
minFileSize: ss.i18n._t('UploadField.TOOSMALL'),
|
||
|
acceptFileTypes: ss.i18n._t('UploadField.INVALIDEXTENSION'),
|
||
|
maxNumberOfFiles: ss.i18n._t('UploadField.MAXNUMBEROFFILESSIMPLE'),
|
||
|
uploadedBytes: ss.i18n._t('UploadField.UPLOADEDBYTES'),
|
||
|
emptyResult: ss.i18n._t('UploadField.EMPTYRESULT')
|
||
|
},
|
||
|
send: function(e, data) {
|
||
|
if (data.context && data.dataType && data.dataType.substr(0, 6) === 'iframe') {
|
||
|
// Iframe Transport does not support progress events.
|
||
|
// In lack of an indeterminate progress bar, we set
|
||
|
// the progress to 100%, showing the full animated bar:
|
||
|
data.total = 1;
|
||
|
data.loaded = 1;
|
||
|
$(this).data('fileupload').options.progress(e, data);
|
||
|
}
|
||
|
},
|
||
|
progress: function(e, data) {
|
||
|
if (data.context) {
|
||
|
var value = parseInt(data.loaded / data.total * 100, 10) + '%';
|
||
|
data.context.find('.ss-uploadfield-item-status').html((data.total == 1)?ss.i18n._t('UploadField.LOADING'):value);
|
||
|
data.context.find('.ss-uploadfield-item-progressbarvalue').css('width', value);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
config,
|
||
|
{
|
||
|
fileInput: fileInput,
|
||
|
dropZone: dropZone,
|
||
|
previewAsCanvas: false,
|
||
|
acceptFileTypes: new RegExp(config.acceptFileTypes, 'i')
|
||
|
}
|
||
|
));
|
||
|
if (this.data('fileupload')._isXHRUpload({multipart: true})) {
|
||
|
$('.ss-uploadfield-item-uploador').show();
|
||
|
dropZone.show(); // drag&drop avaliable
|
||
|
}
|
||
|
this._super();
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-files .ss-uploadfield-item').entwine({
|
||
|
onmatch: function() {
|
||
|
this.closest('.ss-upload').find('.ss-uploadfield-addfile').addClass('borderTop');
|
||
|
},
|
||
|
onunmatch: function() {
|
||
|
$('.ss-uploadfield-files:not(:has(.ss-uploadfield-item))').closest('.ss-upload').find('.ss-uploadfield-addfile').removeClass('borderTop');
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-startall').entwine({
|
||
|
onclick: function(e) {
|
||
|
this.closest('.ss-upload').find('.ss-uploadfield-item-start button').click();
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-item-cancelfailed').entwine({
|
||
|
onclick: function(e) {
|
||
|
this.closest('.ss-uploadfield-item').remove();
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-item-remove:not(.ui-state-disabled), .ss-uploadfield-item-delete:not(.ui-state-disabled)').entwine({
|
||
|
onclick: function(e) {
|
||
|
var fileupload = this.closest('div.ss-upload').data('fileupload'),
|
||
|
item = this.closest('.ss-uploadfield-item'), msg = '';
|
||
|
|
||
|
if(this.is('.ss-uploadfield-item-delete')) msg = ss.i18n._t('UploadField.ConfirmDelete');
|
||
|
if(!msg || confirm(msg)) {
|
||
|
fileupload._trigger('destroy', e, {
|
||
|
context: item,
|
||
|
url: this.data('href'),
|
||
|
type: 'get',
|
||
|
dataType: fileupload.options.dataType
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-item-edit').entwine({
|
||
|
onclick: function(e) {
|
||
|
var editform = this.closest('.ss-uploadfield-item').find('.ss-uploadfield-item-editform');
|
||
|
if (editform.hasClass('loading')) {
|
||
|
// TODO Display loading indication, and register an event to toggle edit form
|
||
|
} else {
|
||
|
this.siblings().toggleClass('ui-state-disabled');
|
||
|
editform.toggleEditForm();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-item-editform').entwine({
|
||
|
EditFormVisible: false,
|
||
|
fitHeight: function() {
|
||
|
var iframe = this.find('iframe'),
|
||
|
h = iframe.contents().height() + 'px';
|
||
|
iframe.css('height', h);
|
||
|
return h;
|
||
|
},
|
||
|
showEditForm: function() {
|
||
|
return this.stop().animate({height: this.fitHeight()});
|
||
|
},
|
||
|
hideEditFormShow: function() {
|
||
|
return this.stop().animate({height: 0});
|
||
|
},
|
||
|
toggleEditForm: function() {
|
||
|
if (this.getEditFormVisible()) this.hideEditFormShow();
|
||
|
else this.showEditForm();
|
||
|
this.setEditFormVisible(!this.getEditFormVisible());
|
||
|
}
|
||
|
});
|
||
|
$('div.ss-upload .ss-uploadfield-item-editform iframe').entwine({
|
||
|
onmatch: function() {
|
||
|
this.load(function() {
|
||
|
$(this).parent().removeClass('loading');
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}(jQuery));
|