mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-03 16:51:40 +09:00
Remove old Flash-based uploader plugin
This commit is contained in:
parent
bef2871ce7
commit
bc6eaae544
4 changed files with 1 additions and 793 deletions
|
|
@ -1 +0,0 @@
|
|||
uploader.js
|
||||
|
|
@ -1,792 +0,0 @@
|
|||
/**
|
||||
* Uploader
|
||||
*/
|
||||
(function($){
|
||||
|
||||
var runtime;
|
||||
|
||||
var Uploader = xe.createApp('Uploader', {
|
||||
settings : {},
|
||||
files : [],
|
||||
init : function(browseButton, opts) {
|
||||
if (!runtime) {
|
||||
$.each(runtimes, function(key,obj) {
|
||||
if (obj.check()) { runtime = key; return false; }
|
||||
});
|
||||
}
|
||||
|
||||
this.queue = [];
|
||||
this.settings = $.extend({
|
||||
filters : {},
|
||||
params : {}
|
||||
}, opts);
|
||||
this.settings.browse = $(browseButton);
|
||||
|
||||
if (!this.settings.browse.length) throw 'The parameter browseButton is not valid object or selector.';
|
||||
|
||||
var s = this.settings;
|
||||
|
||||
if (s.dropzone) s.dropzone = $(s.dropzone);
|
||||
if (s.upload) s.upload = $(s.upload);
|
||||
|
||||
runtimes[runtime].create(this, this.settings);
|
||||
},
|
||||
API_ON_START : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onstart)) {
|
||||
this.settings.onstart.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_FINISH : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onfinish)) {
|
||||
this.settings.onfinish.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_SELECT : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onselect)) {
|
||||
this.settings.onselect.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_STARTONE : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onstartone)) {
|
||||
this.settings.onstartone.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_FINISHONE : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onfinishone)) {
|
||||
this.settings.onfinishone.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_ON_PROGRESS : function(sender, params) {
|
||||
if ($.isFunction(this.settings.onprogress)) {
|
||||
this.settings.onprogress.apply(this, params);
|
||||
}
|
||||
},
|
||||
API_START : function(sender, params) {
|
||||
var files = $.grep(this.files, function(file){ return (file.status != 'DONE') });
|
||||
|
||||
runtimes[runtime].upload(this, this.settings, files);
|
||||
},
|
||||
API_STOP : function(sender, params) {
|
||||
runtimes[runtime].stop(this, this.settings);
|
||||
},
|
||||
API_SET_PARAM : function(sender, params) {
|
||||
this.settings.params[params[0]] = params[1];
|
||||
},
|
||||
API_DEL_PARAM : function(sender, params) {
|
||||
try {
|
||||
delete this.settings.params[params[0]];
|
||||
} catch(e){}
|
||||
}
|
||||
});
|
||||
|
||||
// Shortcut function in jQuery
|
||||
$.fn.uploader = function(opts) {
|
||||
var u = new Uploader(this.eq(0), opts);
|
||||
if (u) xe.registerApp(u);
|
||||
|
||||
return u;
|
||||
};
|
||||
|
||||
// Shortcut function in XE
|
||||
xe.createUploader = function(browseButton, opts) {
|
||||
var u = new Uploader(browseButton, opts);
|
||||
if (u) xe.registerApp(u);
|
||||
|
||||
return u;
|
||||
};
|
||||
|
||||
// {{{ runtimes
|
||||
var runtimes = {};
|
||||
|
||||
// Google Gears
|
||||
runtimes.gears = {
|
||||
_desktop : null,
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var opt = {filter:[]};
|
||||
|
||||
if (!window.google || google.gears || !google.gears.factory) this.createFactory();
|
||||
if (!this._desktop && google.gears.factory) this._desktop = google.gears.factory.create('beta.desktop');
|
||||
if (!this._desktop) return false;
|
||||
|
||||
// browse button
|
||||
settings.browse.click(function(){
|
||||
self._desktop.openFiles(onselect, opt);
|
||||
return false;
|
||||
});
|
||||
|
||||
// file filters
|
||||
$.each(settings.filters, function(k,v){ opt.filter=$.merge(opt.filter,v.split(' ')) });
|
||||
opt.filter = $.map(opt.filter, function(ext){ return '.'+ext });
|
||||
|
||||
// select file callback
|
||||
function onselect(files) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function() {
|
||||
uploader.files.push(new File(this, this.blob.length))
|
||||
});
|
||||
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
}
|
||||
|
||||
// drag and drop
|
||||
if (settings.dropzone) {
|
||||
settings.dropzone
|
||||
.bind('dragover', function(){ return false; })
|
||||
.bind('drop', function(event) {
|
||||
var data = self._desktop.getDragData(event.originalEvent, 'application/x-gears-files');
|
||||
var files = $.grep(data.files, function(file) {
|
||||
var ext = file.name.match(/\.[a-z0-9]+$/)[0] || '';
|
||||
return ($.inArray(ext, opt.filter)!=-1);
|
||||
});
|
||||
|
||||
onselect(files);
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
createFactory : function() {
|
||||
var f, m;
|
||||
|
||||
if (!window.google) window.google = {};
|
||||
if (!google.gears) {
|
||||
google.gears = {};
|
||||
|
||||
if (typeof(GearsFactory)!='undefined'){f = new GearsFactory()} // Firefox
|
||||
else {
|
||||
try{ // IE
|
||||
f = new ActiveXObject('Gears.Factory');
|
||||
}catch(e){ // Safari
|
||||
if ((typeof(m=navigator.mimeTypes)!='undefined')&&(m['application/x-googlegears'])) {
|
||||
f = $('<object type="application/x-googlegears" style="display:none;width:0;height:0">').appendTo(document.documentElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(f) google.gears.factory = f;
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
if ((window.google && google.gears && google.gears.factory) || (typeof(GearsFactory) != 'undefined')) return true;
|
||||
|
||||
try {
|
||||
this.factory = new ActiveXObject('Gears.factory');
|
||||
return true;
|
||||
} catch(e) {
|
||||
var m = navigator.mimeTypes;
|
||||
if (m && m['application/x-googlegears']) return true;
|
||||
}
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext() {
|
||||
var file = files.shift();
|
||||
var req = google.gears.factory.create('beta.httprequest');
|
||||
var blob = google.gears.factory.create('beta.blobbuilder');
|
||||
var bndr = '--------------xe-boundary'+random();
|
||||
var data, gap;
|
||||
|
||||
$.each(settings.params, function(key, val) {
|
||||
blob.append(
|
||||
'--'+bndr+'\r\n'+
|
||||
'Content-Disposition: form-data; name="'+key+'"\r\n\r\n'+
|
||||
val+'\r\n'
|
||||
);
|
||||
});
|
||||
|
||||
blob.append(
|
||||
'--'+bndr+'\r\n'+
|
||||
'Content-Disposition: form-data; name="Filedata"; filename="'+file.name+'"\r\n'+
|
||||
'Content-Type: application/octet-stream\r\n\r\n'
|
||||
);
|
||||
|
||||
blob.append(file.object.blob);
|
||||
blob.append('\r\n--'+bndr+'--\r\n');
|
||||
|
||||
data = blob.getAsBlob();
|
||||
gap = data.length - file.size;
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
|
||||
req.open('POST', settings.url);
|
||||
req.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+bndr);
|
||||
req.onreadystatechange = function() {
|
||||
if (req.readyState == 1) {
|
||||
file.status = 'UPLOADING';
|
||||
return;
|
||||
}
|
||||
if (req.readyState != 4) return;
|
||||
|
||||
uploader.request = null;
|
||||
|
||||
if (req.status == 200) {
|
||||
file.status = 'DONE';
|
||||
} else {
|
||||
file.status = 'FAILED';
|
||||
}
|
||||
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
};
|
||||
req.upload.onprogress = function(event) {
|
||||
if (event.lengthComputable) {
|
||||
file.loaded = Math.max(event.loaded - gap, 0);
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
}
|
||||
};
|
||||
req.send(data);
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.abort();
|
||||
uploader.request = null;
|
||||
}
|
||||
|
||||
uploader.cast('ON_STOP');
|
||||
}
|
||||
};
|
||||
|
||||
// HTML5
|
||||
runtimes.html5 = {
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var filter = [];
|
||||
|
||||
// filter by extension
|
||||
$.each(settings.filters, function(k,v){ filter=$.merge(filter,v.split(' ')) });
|
||||
|
||||
// when file is selected
|
||||
function onselect() {
|
||||
var files = $.grep(this.files, function(file) {
|
||||
var ext = (file.fileName.match(/\.([^\.]+)$/)[1] || '').toLowerCase();
|
||||
return (!filter.length || $.inArray(ext,filter) != -1);
|
||||
});
|
||||
|
||||
if (files.length) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function(idx, file){
|
||||
uploader.files.push(new File(file, file.size||file.fileSize));
|
||||
});
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
}
|
||||
|
||||
this.value = '';
|
||||
}
|
||||
|
||||
function make_button(event) {
|
||||
var op = this.offsetParent;
|
||||
var ow = this.offsetWidth;
|
||||
var oh = this.offsetHeight;
|
||||
var ot = this.offsetTop;
|
||||
var ol = this.offsetLeft;
|
||||
|
||||
if (!uploader.browseButton) {
|
||||
uploader.browseButton = $('<div style="position:absolute;overflow:hidden;"><input type="file" name="Filedata" multiple="multiple" style="position:absolute;top:0;right:0;font-size:100px;" /></div>').appendTo(op);
|
||||
uploader.browseButton.find('>input').css({cursor:'pointer',opacity:0}).change(onselect);
|
||||
}
|
||||
|
||||
uploader.browseButton.css({width:ow+'px', height:oh+'px', left:ol+'px', top:ot+'px', margin:0, padding:0});
|
||||
|
||||
if (event.type == 'focus') uploader.browseButton.find('>input').focus();
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// drag and drop (available only Firefox)
|
||||
if (settings.dropzone) {
|
||||
settings.dropzone
|
||||
.bind('dragover', function(){ return false; })
|
||||
.bind('drop', function(event){
|
||||
var data = event.originalEvent.dataTransfer;
|
||||
var obj = {files:data.files||[]};
|
||||
|
||||
onselect.apply(obj);
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
if (window.XMLHttpRequest) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
if (!!xhr.sendAsBinary || !!xhr.upload) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext() {
|
||||
var file = files.shift();
|
||||
var req = uploader.request = new XMLHttpRequest();
|
||||
var bndr = '--------------xe-boundary'+random();
|
||||
var compatFF, data, bin, gap = 0;
|
||||
|
||||
// Firefox compatible mode
|
||||
compatFF = typeof(file.object.getAsBinary) == 'function';
|
||||
|
||||
if (compatFF) {
|
||||
data = '';
|
||||
$.each(settings.params, function(key, val) {
|
||||
data += '--'+bndr+'\r\n';
|
||||
data += 'Content-Disposition: form-data; name="'+key+'"\r\n\r\n';
|
||||
data += val+'\r\n';
|
||||
});
|
||||
|
||||
// Firefox had a bug that recognises some unicode filename as invalid string.
|
||||
// So, I made a workaround to encode the filename by RFC2231
|
||||
data += '--'+bndr+'\r\n';
|
||||
data += 'Content-Disposition: form-data; name="Filedata"; filename="=?UTF-8?B?'+Base64.encode(file.name).replace(/\//g, ':')+'?="\r\n';
|
||||
data += 'Content-Type: application/octet-stream\r\n\r\n';
|
||||
data += file.object.getAsBinary();
|
||||
data += '\r\n';
|
||||
data += '--'+bndr+'--\r\n';
|
||||
|
||||
bin = null;
|
||||
gap = data.length - file.object.fileSize;
|
||||
} else {
|
||||
data = new FormData();
|
||||
$.each(settings.params, function(key, val) {
|
||||
data.append(key, val);
|
||||
});
|
||||
data.append('Filedata', file.object);
|
||||
}
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
|
||||
function nextOrFinish() {
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
}
|
||||
|
||||
req.onreadystatechange = function() {
|
||||
if (req.readyState == 1) {
|
||||
file.status = 'UPLOADING';
|
||||
return;
|
||||
}
|
||||
if (req.readyState != 4) return;
|
||||
|
||||
uploader.request = null;
|
||||
|
||||
if (req.status == 200) {
|
||||
file.loaded = file.size;
|
||||
file.status = 'DONE';
|
||||
} else {
|
||||
file.status = 'FAILED';
|
||||
}
|
||||
nextOrFinish();
|
||||
};
|
||||
req.onerror = function(event) {
|
||||
file.status = 'FAILED';
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
if (req.upload) {
|
||||
req.upload.onprogress =
|
||||
req.upload.onload =
|
||||
function(event){
|
||||
if (event.lengthComputable) {
|
||||
file.loaded = Math.max(event.loaded - gap, 0);
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
req.open('POST', settings.url);
|
||||
if (compatFF) {
|
||||
req.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+bndr);
|
||||
req.sendAsBinary(data);
|
||||
} else {
|
||||
req.send(data);
|
||||
}
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.abort();
|
||||
uploader.request = null;
|
||||
}
|
||||
|
||||
uploader.cast('ON_STOP');
|
||||
}
|
||||
};
|
||||
|
||||
// Adobe Flash
|
||||
runtimes.flash = {
|
||||
version : 0,
|
||||
object : null,
|
||||
uploaders : [],
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var rand = random();
|
||||
var name = 'xe_flashuploader_object'+rand;
|
||||
var swf = (window.request_uri||'/')+'common/js/plugins/uploader/uploader.swf';
|
||||
|
||||
if (!window.xe_flashuploaders) window.xe_flashuploaders = [];
|
||||
|
||||
function make_button(event) {
|
||||
var b = this;
|
||||
var op = b.offsetParent;
|
||||
var ow = b.offsetWidth;
|
||||
var oh = b.offsetHeight;
|
||||
var ot = b.offsetTop;
|
||||
var ol = b.offsetLeft;
|
||||
var $div, flash, css;
|
||||
|
||||
if (typeof uploader.flashindex == 'undefined') {
|
||||
uploader.flashindex = xe_flashuploaders.length;
|
||||
|
||||
xe_flashuploaders.push({
|
||||
uploader : uploader,
|
||||
settings : settings,
|
||||
onselect : function(files) {
|
||||
var old_length = uploader.files.length;
|
||||
|
||||
$.each(files, function() {
|
||||
uploader.files.push(new File(this, this.size))
|
||||
});
|
||||
|
||||
uploader.cast('ON_SELECT', [uploader.files, old_length]);
|
||||
},
|
||||
onprogress : function(fileInfo) {},
|
||||
oncomplete : function(fileInfo) {},
|
||||
onerror : function(fileInfo) {},
|
||||
oncancel : function(fileInfo) {}
|
||||
});
|
||||
}
|
||||
|
||||
div = $('#'+name+'-container');
|
||||
css = {position:'absolute',width:ow+'px',height:oh+'px',left:ol+'px',top:ot+'px',margin:0,padding:0,overflow:'hidden'};
|
||||
|
||||
if (!div.length) {
|
||||
div = $('<div />').attr('id', name+'-container').css(css).appendTo(op);
|
||||
div[0].innerHTML = ''
|
||||
+ '<object id="'+name+'" classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" width="100%" height="100%">'
|
||||
+ '<param name="movie" value="'+swf+'" />'
|
||||
+ '<param name="wmode" value="transparent" />'
|
||||
+ '<param name="allowScriptAccess" value="always" />'
|
||||
+ '<embed src="'+swf+'" width="100%" height="100%" name="'+name+'" type="application/x-shockwave-flash" pluginpage="http://www.macromedia.com/go/getflashplayer" wmode="transparent" allowscriptaccess="always" />'
|
||||
+ '</object>';
|
||||
|
||||
}
|
||||
|
||||
flash = window[name] || document[name];
|
||||
|
||||
if (!uploader.flash) {
|
||||
try {
|
||||
if (!flash) throw '';
|
||||
|
||||
var _settings = {};
|
||||
var pass_keys = ['filters','params','url'];
|
||||
|
||||
$.each(settings, function(key,val){
|
||||
if ($.inArray(key, pass_keys) < 0) return true;
|
||||
_settings[key] = val;
|
||||
});
|
||||
|
||||
flash.setConfig(uploader.flashindex, _settings);
|
||||
|
||||
uploader.flash = flash;
|
||||
uploader.flash_box = $(flash).parents('div:first');
|
||||
} catch(e) {
|
||||
return setTimeout(arguments.callee, 10);
|
||||
}
|
||||
}
|
||||
|
||||
if (uploader.flash) {
|
||||
uploader.flash_box.css(css);
|
||||
uploader.flash.setIndex(uploader.flashindex);
|
||||
}
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
check : function() {
|
||||
var p = navigator.plugins, v;
|
||||
|
||||
if (p && (v=p['Shockwave Flash'])) {
|
||||
v = v.description;
|
||||
} else {
|
||||
try {
|
||||
v = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
|
||||
} catch(e) {
|
||||
v = "0.0";
|
||||
}
|
||||
}
|
||||
|
||||
v = v.match(/\d+/g);
|
||||
v = parseFloat(v[0]+'.'+v[1]);
|
||||
|
||||
if (!isNaN(v)) this.version = v;
|
||||
|
||||
return (this.version >= 9);
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (typeof uploader.flashindex == 'undefined') return false;
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
var g_uploader = xe_flashuploaders[uploader.flashindex];
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext(){
|
||||
var file = files.shift();
|
||||
|
||||
function nextOrFinish() {
|
||||
if (files.length) {
|
||||
uploadNext();
|
||||
} else {
|
||||
setTimeout(function(){ uploader.cast('ON_FINISH') }, 0);
|
||||
}
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
}
|
||||
|
||||
file.status = 'UPLOADING';
|
||||
|
||||
g_uploader.onprogress = function(fileInfo){
|
||||
file.loaded = fileInfo.loaded;
|
||||
uploader.cast('ON_PROGRESS', [file]);
|
||||
};
|
||||
|
||||
g_uploader.oncomplete = function(fileInfo) {
|
||||
file.loaded = fileInfo.loaded;
|
||||
file.status = 'DONE';
|
||||
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
g_uploader.onerror = function() {
|
||||
file.status = 'FAILED';
|
||||
nextOrFinish();
|
||||
};
|
||||
|
||||
uploader.flash.startUpload(file.object.index);
|
||||
|
||||
uploader.cast('ON_STARTONE', [file]);
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (typeof uploader.flashindex == 'undefined') return false;
|
||||
}
|
||||
};
|
||||
|
||||
// HTML4
|
||||
runtimes.html4 = {
|
||||
create : function(uploader, settings) {
|
||||
var self = this;
|
||||
var filter = [];
|
||||
|
||||
// filter by extension
|
||||
$.each(settings.filters, function(k,v){ filter=$.merge(filter,v.split(' ')) });
|
||||
|
||||
// when file is selected
|
||||
function onselect() {
|
||||
var ext = (this.value.match(/\.([^\.]+)$/)[1] || '').toLowerCase();
|
||||
|
||||
if ($.inArray(ext, filter) != -1) {
|
||||
uploader.files.push(new File(this, -1));
|
||||
uploader.cast('ON_SELECT', [uploader.files, uploader.files.length - 1]);
|
||||
}
|
||||
|
||||
uploader.browseButton = null;
|
||||
$(this).parent().remove();
|
||||
}
|
||||
|
||||
function make_button(event) {
|
||||
var op = this.offsetParent;
|
||||
var ow = this.offsetWidth;
|
||||
var oh = this.offsetHeight;
|
||||
var ot = this.offsetTop;
|
||||
var ol = this.offsetLeft;
|
||||
|
||||
if (!uploader.browseButton) {
|
||||
uploader.browseButton = $('<div style="position:absolute;overflow:hidden;"><input type="file" name="Filedata" style="position:absolute;top:0;right:0;font-size:100px;" /></div>')
|
||||
.appendTo(op)
|
||||
.change(onselect);
|
||||
uploader.browseButton.find('>input').css({cursor:'pointer',opacity:0});
|
||||
}
|
||||
|
||||
uploader.browseButton.css({width:ow+'px', height:oh+'px', left:ol+'px', top:ot+'px', margin:0, padding:0});
|
||||
|
||||
if (event.type == 'focus') uploader.browseButton.find('>input').focus();
|
||||
}
|
||||
|
||||
// browse button
|
||||
settings.browse.bind({mouseover:make_button,focus:make_button});
|
||||
|
||||
// upload
|
||||
if (settings.upload) {
|
||||
settings.upload.click(function(){
|
||||
uploader.cast('START');
|
||||
return false;
|
||||
});
|
||||
}
|
||||
},
|
||||
check : function() {
|
||||
return true;
|
||||
},
|
||||
upload : function(uploader, settings, files) {
|
||||
if (uploader.request || !files.length) return false;
|
||||
|
||||
var css = {position:'absolute',width:'1px',height:'1px',left:'-100px',top:'-100px',overflow:'hidden'};
|
||||
|
||||
// callback
|
||||
if (!window.callbacks) window.callbacks = {};
|
||||
|
||||
uploader.cast('ON_START');
|
||||
|
||||
(function uploadNext(){
|
||||
var file = files.shift();
|
||||
var id = 'tmp_upload_'+random();
|
||||
var iframe = $('<iframe src="about:blank" name="'+id+'"></iframe>').css(css).appendTo(document.documentElement);
|
||||
var form = $('<form method="post" enctype="multipart/form-data" target="'+id+'"></form>').css(css).appendTo(document.documentElement);
|
||||
|
||||
form.attr('action', settings.url);
|
||||
|
||||
uploader.request = {iframe:iframe, form:form};
|
||||
|
||||
// set parameters
|
||||
settings.params._callback = 'callbacks.'+id; // callback
|
||||
$.each(settings.params, function(k,v) {
|
||||
$('<input type="hidden" name="'+k+'" />').val(v).appendTo(form);
|
||||
});
|
||||
|
||||
// set status of a file
|
||||
file.status = 'UPLOADING';
|
||||
|
||||
callbacks[id] = function(fileInfo) {
|
||||
file.status = 'DONE';
|
||||
file.size = fileInfo.size;
|
||||
file.loaded = fileInfo.size;
|
||||
|
||||
form.find('>input[type=file]').remove();
|
||||
|
||||
uploader.cast('ON_FINISHONE', [file]);
|
||||
|
||||
if (files.length) {
|
||||
setTimeout(uploadNext, 0);
|
||||
} else {
|
||||
uploader.request = null;
|
||||
uploader.cast('ON_FINISH');
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
form.remove();
|
||||
iframe.remove();
|
||||
|
||||
delete callbacks[id];
|
||||
}, 0);
|
||||
};
|
||||
|
||||
form.append(file.object).submit();
|
||||
})();
|
||||
},
|
||||
stop : function(uploader, settings) {
|
||||
if (uploader.request) {
|
||||
uploader.request.iframe.attr('src', 'about:blank').remove();
|
||||
uploader.request.form.remove();
|
||||
uploader.request = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// }}} runtimes
|
||||
|
||||
var mimetypes = {
|
||||
'application/java-archive' : 'jar',
|
||||
'application/java-vm' : 'class',
|
||||
'application/javascript' : 'js',
|
||||
'application/msword' : 'doc dot',
|
||||
'application/pdf' : 'pdf',
|
||||
'application/octet-stream' : 'bin lha lzh iso dmg dist pkg exe',
|
||||
'application/postscript' : 'ai eps ps',
|
||||
'application/rtf' : 'rtf',
|
||||
'application/smil' : 'smi smil',
|
||||
'application/vnd.ms-excel' : 'xls xlm xla xlc xlt xlw',
|
||||
'application/vnd.openxmlformats': 'docx pptx xlsx',
|
||||
'application/vnd.ms-powerpoint' : 'ppt pps pot',
|
||||
'application/zip' : 'zip',
|
||||
'application/x-shockwave-flash' : 'swf swfl',
|
||||
'audio/mpeg' : 'mpga mpega mp2 mp3',
|
||||
'audio/x-wav' : 'wav',
|
||||
'image/bmp' : 'bmp',
|
||||
'image/gif' : 'gif',
|
||||
'image/jpeg' : 'jpeg jpg jpe',
|
||||
'image/png' : 'png',
|
||||
'image/svg+xml' : 'svg svgz',
|
||||
'image/tiff' : 'tiff tif',
|
||||
'text/html' : 'htm html xhtml',
|
||||
'text/plain' : 'asc txt text diff log',
|
||||
'video/mpeg' : 'mpeg mpg mpe',
|
||||
'video/quicktime' : 'qt mov',
|
||||
'video/x-flv' : 'flv',
|
||||
'video/x-ms-asf' : 'asf',
|
||||
'video/x-ms-wmv' : 'wmv',
|
||||
'video/x-msvideo' : 'avi'
|
||||
};
|
||||
|
||||
function File(obj, filesize) {
|
||||
if (runtime == 'html4') {
|
||||
this.name = obj.value.match(/[^\\\/]+$/)[0];
|
||||
} else {
|
||||
this.name = obj.name || obj.fileName;
|
||||
}
|
||||
|
||||
this.size = filesize;
|
||||
this.loaded = 0;
|
||||
this.status = 'QUEUED'; // QUEUED, UPLOADING, FAILED, DONE
|
||||
this.object = obj;
|
||||
};
|
||||
|
||||
function random() {
|
||||
return Math.floor(Math.random()*80000+10000);
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
Binary file not shown.
|
|
@ -335,6 +335,7 @@ class Cleanup extends Base
|
|||
'common/js/plugins/spectrum/docs/' => 'deleted',
|
||||
'common/js/plugins/spectrum/example/' => 'deleted',
|
||||
'common/js/plugins/spectrum/test/' => 'deleted',
|
||||
'common/js/plugins/uploader/' => 'deleted:xe',
|
||||
'common/lang/lang.info' => 'deleted:xe',
|
||||
'common/libraries/bmp.php' => 'deleted',
|
||||
'common/manual/server_config/rhymix-nginx-help.md' => 'deleted',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue