author: Sylvain Viollon
date: Mon Jul 29 15:36:09 2013 +0200
revision: 416:3111f4b56137 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=3111f4b56137
modified: src/zeam/form/silva/widgets/static/upload.js src/zeam/form/silva/widgets/static/upload.min.js
added:
removed:
log: Implement plan D.
diffstat:
src/zeam/form/silva/widgets/static/upload.js | 195 +++++++++++-----------
src/zeam/form/silva/widgets/static/upload.min.js | 2 +-
2 files changed, 98 insertions(+), 99 deletions(-)
diffs (294 lines):
diff -r 69da39ba67e7 -r 3111f4b56137 src/zeam/form/silva/widgets/static/upload.js
--- a/src/zeam/form/silva/widgets/static/upload.js Mon Jul 29 14:29:42 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.js Mon Jul 29 15:36:09 2013 +0200
@@ -15,8 +15,71 @@
return supported;
})();
+ /**
+ * Status checker report the status of the upload to the uploader.
+ */
- var IFrameLoad = function($iframe, name) {
+ var PollStatusChecker = function(url, identifier, result) {
+ var poll_retries = POLL_NETWORK_RETRIES,
+ poll_timeout = null,
+ missing_retries = POLL_MISSING_RETRIES,
+ deferred = $.Deferred(),
+ poll = function() {
+ // Poll status from the server.
+ $.ajax({
+ type: 'GET',
+ dataType: 'json',
+ url: url + '?status&identifier=' + identifier
+ }).then(function(info){
+ var error = null;
+
+ result.notify(info);
+ if (info['missing']) {
+ missing_retries -= 1;
+ if (!missing_retries) {
+ error = info['upload-error'] || 'unknow error';
+ deferred.reject({message: 'Upload failed ('+ error + ').'});
+ };
+ };
+ if (info['upload-finished'] || info['upload-error']) {
+ if (info['upload-finished'] && !info['upload-error']) {
+ deferred.resolve(info);
+ } else {
+ error = info['upload-error'] || 'unknow error';
+ deferred.reject({message: 'Upload failed ('+ error + ').'});
+ };
+ } else if (result.state() == "pending" && missing_retries) {
+ // Unless the file is completely uploaded or
+ // cancel request status again.
+ poll_retries = POLL_NETWORK_RETRIES;
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
+ };
+ }, function() {
+ if (result.state() == "pending") {
+ if (poll_retries) {
+ poll_retries -= 1;
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
+ } else {
+ deferred.reject({message: 'Status check failed: cannot upload file.'});
+ }
+ }
+ });
+ };
+ return {
+ promise: deferred.promise,
+ start: function() {
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
+ },
+ always: function() {
+ if (poll_timeout !== null) {
+ clearTimeout(poll_timeout);
+ poll_timeout = null;
+ };
+ }
+ };
+ };
+
+ var IFrameStatusChecker = function($iframe, name, result) {
// helper to bind an event on iframe load
var iframe = $iframe.get(0),
iframe_window = iframe.contentWindow,
@@ -24,7 +87,7 @@
deferred = $.Deferred();
var fail = function() {
- deferred.reject();
+ deferred.reject({message: 'Upload failed (file too big or server error).'});
};
$(document).one(name, function(event, data) {
@@ -37,9 +100,15 @@
iframe_window.attachEvent("onload", fail);
iframe_window.attachEvent("onerror", fail);
};
- return deferred.promise();
+ return {
+ promise: deferred.promise
+ };
};
+ /**
+ * UI compoments.
+ */
+
var UploadStatusMessage = function($display) {
// Manage the status message of the upload widget.
var $empty = $display.children('.upload-display-empty'),
@@ -122,7 +191,7 @@
};
var UploadUI = function($field, set_objection, get_upload) {
- // Manage the controls of the upload widget.
+ // Manage the controls of the upload widget (clear, cancel button).
var $input = $field.children('.upload-input'),
$cancel = $field.children('.upload-cancel'),
$clear = $field.children('.upload-clear');
@@ -209,6 +278,10 @@
return api;
};
+ /**
+ * Implementations for the uploading (with and without popup).
+ */
+
var UploadForm = function($field, identifier, url) {
// Upload a file input using the given identifier at the given URL.
// It will trigger callbacks uring various steps of the progress.
@@ -221,65 +294,21 @@
'" target="upload-' + identifier +
'-iframe" id="upload-' + identifier + '-form">' +
'<input type="reset" class="upload-reset" /></form></div>'),
- poll_retries = POLL_NETWORK_RETRIES,
- poll_timeout = null,
- missing_retries = POLL_MISSING_RETRIES,
result = $.Deferred().fail(function() {
$upload.find('.upload-reset').click();
$upload.find('.upload-iframe').attr('src', 'javascript:false;');
}).always(function() {
- if (poll_timeout !== null) {
- clearTimeout(poll_timeout);
- poll_timeout = null;
- };
$upload.remove();
$field.removeAttr('form');
}),
- start = $.Deferred().done(function() {
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- }),
- poll = function() {
- // Poll status from the server.
- $.ajax({
- type: 'GET',
- dataType: 'json',
- url: url + '?status&identifier=' + identifier
- }).then(function(info){
- result.notify(info);
- if(info['missing']) {
- missing_retries -= 1;
- if (!missing_retries) {
- result.reject({message: 'File does not upload. (is it too big ?)'});
- };
- };
- if (!info['upload-finished'] && result.state() == "pending" && missing_retries) {
- // Unless the file is completely uploaded or
- // cancel request status again.
- poll_retries = POLL_NETWORK_RETRIES;
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- };
- }, function() {
- if (result.state() == "pending") {
- if (poll_retries) {
- poll_retries -= 1;
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- } else {
- result.reject({message: 'Status check failed: cannot upload file.'});
- }
- }
- });
- },
+ start = $.Deferred(),
api = {
start: function() {
$('body').append($upload);
$field.attr('form', 'upload-' + identifier + '-form');
start.done(function() {
- IFrameLoad($upload.find('iframe'), 'upload-' + identifier + '-done').fail(
- function() {
- result.reject({message: 'Upload failed (file too big or server error).'});
- }).done(function (data) {
- result.resolve(data);
- });
+ api.register(IFrameStatusChecker($upload.find('iframe'), 'upload-' + identifier + '-done'));
+ api.register(PollStatusChecker(url, identifier, result));
$upload.find('form').submit();
}).resolve({
'uploaded-length': 0, 'content-type': 'n/a', 'request-length': 0, 'filename': ''});
@@ -291,6 +320,13 @@
if (plugin.start !== undefined) {
start.done(plugin.start);
};
+ if (plugin.promise !== undefined) {
+ plugin.promise().then(function(data) {
+ result.resolve(data);
+ }, function(data) {
+ result.reject(data);
+ });
+ };
for (var event in {progress: 1, done: 1, fail: 1, always: 1}) {
if (plugin[event] !== undefined) {
result[event](plugin[event]);
@@ -314,63 +350,19 @@
'<iframe width="0" height="0" style="display:none"' +
'src="about:blank" class="upload-iframe" name="upload-' +
identifier + '-iframe"></iframe></div>'),
- poll_retries = POLL_NETWORK_RETRIES,
- poll_timeout = null,
- missing_retries = POLL_MISSING_RETRIES,
result = $.Deferred().fail(function() {
$popup.find('.upload-iframe').attr('src', 'javascript:false;');
}).always(function() {
- if (poll_timeout !== null) {
- clearTimeout(poll_timeout);
- poll_timeout = null;
- };
$popup.remove();
}),
- start = $.Deferred().done(function() {
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- }),
- poll = function() {
- // Poll status from the server.
- $.ajax({
- type: 'GET',
- dataType: 'json',
- url: url + '?status&identifier=' + identifier
- }).then(function(info){
- result.notify(info);
- if (info['missing']) {
- missing_retries -= 1;
- if (!missing_retries) {
- result.reject({message: 'File does not upload. (is it too big ?)'});
- };
- };
- if (!info['upload-finished'] && result.state() == "pending" && missing_retries) {
- // Unless the file is completely uploaded or
- // cancel request status again.
- poll_retries = POLL_NETWORK_RETRIES;
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- };
- }, function() {
- if (result.state() == "pending") {
- if (poll_retries) {
- poll_retries -= 1;
- poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
- } else {
- result.reject({message: 'Status check failed: cannot upload file.'});
- }
- }
- });
- },
+ start = $.Deferred(),
api = {
start: function() {
var send = function() {
start.done(function() {
$popup.dialog('close');
- IFrameLoad($popup.find('iframe'), 'upload-' + identifier + '-done').fail(
- function() {
- result.reject({message: 'Upload failed (file too big or server error).'});
- }).done(function (data) {
- result.resolve(data);
- });
+ api.register(IFrameStatusChecker($popup.find('iframe'), 'upload-' + identifier + '-done'));
+ api.register(PollStatusChecker(url, identifier, result));
$popup.find('form').submit();
}).resolve({
'uploaded-length': 0, 'content-type': 'n/a', 'request-length': 0, 'filename': ''});
@@ -393,6 +385,13 @@
if (plugin.start !== undefined) {
start.done(plugin.start);
};
+ if (plugin.promise !== undefined) {
+ plugin.promise().then(function(data) {
+ result.resolve(data);
+ }, function(data) {
+ result.reject(data);
+ });
+ };
for (var event in {progress: 1, done: 1, fail: 1, always: 1}) {
if (plugin[event] !== undefined) {
result[event](plugin[event]);
diff -r 69da39ba67e7 -r 3111f4b56137 src/zeam/form/silva/widgets/static/upload.min.js
--- a/src/zeam/form/silva/widgets/static/upload.min.js Mon Jul 29 14:29:42 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.min.js Mon Jul 29 15:36:09 2013 +0200
@@ -1,1 +1,1 @@
-(function($,jsontemplate){var POLL_NETWORK_RETRIES=5,POLL_NETWORK_DELAY=500,POLL_MISSING_RETRIES=20,DONT_NEED_POPUP=function(){var $test=$('<div style="display:none;"><form id="testform1"><input type="file" form="testform2" /></form><form id="testform2"></form></div>'),supported=!1;return $("body").append($test),supported=0===$test.find("#testform1")[0].length&&1===$test.find("#testform2")[0].length,$test.remove(),supported}(),IFrameLoad=function($iframe,name){var iframe=$iframe.get(0),iframe_window=iframe.contentWindow,deferred=(iframe_window.document,$.Deferred()),fail=function(){deferred.reject()};return $(document).one(name,function(event,data){deferred.resolve(data)}),iframe_window.addEventListener?(iframe_window.addEventListener("load",fail,!1),iframe_window.addEventListener("error"
,fail,!1)):(iframe_window.attachEvent("onload",fail),iframe_window.attachEvent("onerror",fail)),deferred.promise()},UploadStatusMessage=function($display){var $empty=$display.children(".uplo
ad-display-empty"),$uploading=$display.children(".upload-display-uploading"),$done=$display.children(".upload-display-complete"),empty=$empty.children("i").text(),uploading=jsontemplate.Template($uploading.children("i").text(),{}),done=jsontemplate.Template($done.children("i").text(),{}),state="empty",original=$display.data("upload-status"),api={start:function(data){"starting"!=state&&($uploading.children("i").text(uploading.expand(data)),$empty.hide(),$done.hide(),$uploading.show(),state="starting")},progress:function(data){"uploading"==state||data.missing||($uploading.children("i").text(uploading.expand(data)),state="uploading")},done:function(data){"done"!=state&&($done.children("i").text(done.expand(data)),$empty.hide(),$uploading.hide(),$done.show(),state="done")},fail:function(data)
{("empty"!=state||data.message)&&($empty.children("i").text(data.message||empty),"empty"!=state&&($uploading.hide(),$done.hide(),$empty.show(),state="empty"))}};return original&&api.done(ori
ginal),api},UploadProgress=function($progress){var progress=0;return{start:function(){$progress.progressbar({value:0}).show()},progress:function(data){var updated=0;data.missing||(updated=100*data["uploaded-length"]/data["request-length"]),updated!=progress&&($progress.progressbar({value:updated}),progress=updated)},always:function(){$progress.hide(),progress=0}}},UploadUI=function($field,set_objection,get_upload){var $input=$field.children(".upload-input"),$cancel=$field.children(".upload-cancel"),$clear=$field.children(".upload-clear"),upload=null,objection=null,progress=UploadProgress($field.children(".upload-progress")),status=UploadStatusMessage($field.children(".upload-display")),api={get:function(create){return null==upload&&create&&(upload=get_upload(),upload.register(status),uplo
ad.register(progress),upload.register(ui)),upload}},ui={start:function(){void 0!==set_objection&&(objection=$.Deferred(),set_objection(function(){if("pending"==objection.state()){var $dialog
=$('<div title="Uploading file"><p>Please wait until the upload is finished ...</p><p class="progress"></p></div>'),$progress=$dialog.find("p.progress"),progress=0;return $dialog.dialog({modal:!0,closeOnEscape:!1,resizable:!1,draggable:!1,beforeClose:function(){return!1}}),$progress.progressbar({value:0}),api.get().register({progress:function(data){var updated=0;data.missing||(updated=100*data["uploaded-length"]/data["request-length"]),updated!=progress&&($progress.progressbar({value:updated}),progress=updated)}}),objection.always(function(){$dialog.dialog("close").remove(),objection=null})}return null})),$cancel.show()},done:function(){$input.attr("value",$field.data("upload-identifier"))},always:function(){null!==objection&&objection.resolve(),$cancel.hide(),upload=null}};return $cancel
.on("click",function(){var upload=api.get();null!==upload&&upload.cancel()}),$clear.on("click",function(){var upload=api.get(!0);upload.cancel(),$input.attr("value","")}),api},UploadForm=fun
ction($field,identifier,url){var $upload=$('<div style="display:none"><iframe width="0" height="0" style="display:none"src="about:blank" class="upload-iframe" name="upload-'+identifier+'-iframe"></iframe>'+'<form class="upload-form" enctype="multipart/form-data"'+'method="POST" action="'+url+"?identifier="+identifier+'" target="upload-'+identifier+'-iframe" id="upload-'+identifier+'-form">'+'<input type="reset" class="upload-reset" /></form></div>'),poll_retries=POLL_NETWORK_RETRIES,poll_timeout=null,missing_retries=POLL_MISSING_RETRIES,result=$.Deferred().fail(function(){$upload.find(".upload-reset").click(),$upload.find(".upload-iframe").attr("src","javascript:false;")}).always(function(){null!==poll_timeout&&(clearTimeout(poll_timeout),poll_timeout=null),$upload.remove(),$field.removeA
ttr("form")}),start=$.Deferred().done(function(){poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)}),poll=function(){$.ajax({type:"GET",dataType:"json",url:url+"?status&identifier="+identifie
r}).then(function(info){result.notify(info),info.missing&&(missing_retries-=1,missing_retries||result.reject({message:"File does not upload. (is it too big ?)"})),!info["upload-finished"]&&"pending"==result.state()&&missing_retries&&(poll_retries=POLL_NETWORK_RETRIES,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY))},function(){"pending"==result.state()&&(poll_retries?(poll_retries-=1,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)):result.reject({message:"Status check failed: cannot upload file."}))})},api={start:function(){$("body").append($upload),$field.attr("form","upload-"+identifier+"-form"),start.done(function(){IFrameLoad($upload.find("iframe"),"upload-"+identifier+"-done").fail(function(){result.reject({message:"Upload failed (file too big or server error)."})}).done(function(d
ata){result.resolve(data)}),$upload.find("form").submit()}).resolve({"uploaded-length":0,"content-type":"n/a","request-length":0,filename:""})},cancel:function(){result.reject({})},register:
function(plugin){void 0!==plugin.start&&start.done(plugin.start);for(var event in{progress:1,done:1,fail:1,always:1})void 0!==plugin[event]&&result[event](plugin[event]);return api}};return api},UploadPopup=function(identifier,url){var $popup=$('<div title="Upload a file"><form class="upload-form" enctype="multipart/form-data"method="POST" action="'+url+"?identifier="+identifier+'" target="upload-'+identifier+'-iframe" id="upload-'+identifier+'-form">'+'<input type="file" name="file-we-are-uploading" class="upload-file" /></form>'+'<iframe width="0" height="0" style="display:none"'+'src="about:blank" class="upload-iframe" name="upload-'+identifier+'-iframe"></iframe></div>'),poll_retries=POLL_NETWORK_RETRIES,poll_timeout=null,missing_retries=POLL_MISSING_RETRIES,result=$.Deferred().fail(
function(){$popup.find(".upload-iframe").attr("src","javascript:false;")}).always(function(){null!==poll_timeout&&(clearTimeout(poll_timeout),poll_timeout=null),$popup.remove()}),start=$.Def
erred().done(function(){poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)}),poll=function(){$.ajax({type:"GET",dataType:"json",url:url+"?status&identifier="+identifier}).then(function(info){result.notify(info),info.missing&&(missing_retries-=1,missing_retries||result.reject({message:"File does not upload. (is it too big ?)"})),!info["upload-finished"]&&"pending"==result.state()&&missing_retries&&(poll_retries=POLL_NETWORK_RETRIES,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY))},function(){"pending"==result.state()&&(poll_retries?(poll_retries-=1,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)):result.reject({message:"Status check failed: cannot upload file."}))})},api={start:function(){var send=function(){start.done(function(){$popup.dialog("close"),IFrameLoad($popup.find("iframe"),"upl
oad-"+identifier+"-done").fail(function(){result.reject({message:"Upload failed (file too big or server error)."})}).done(function(data){result.resolve(data)}),$popup.find("form").submit()})
.resolve({"uploaded-length":0,"content-type":"n/a","request-length":0,filename:""})};$popup.find(".upload-file").on("change",function(){send()}),$popup.dialog({buttons:{Send:function(){send()}}})},cancel:function(){result.reject({})},register:function(plugin){void 0!==plugin.start&&start.done(plugin.start);for(var event in{progress:1,done:1,fail:1,always:1})void 0!==plugin[event]&&result[event](plugin[event]);return api}};return api},UploadField=DONT_NEED_POPUP?function($field,set_objection){var $trigger=$field.children(".upload-trigger"),$file=$field.children(".upload-file-input"),ui=UploadUI($field,set_objection,function(){return UploadForm($file,$field.data("upload-identifier"),$field.data("upload-url")).register({start:function(){$file.hide()},always:function(){$file.show()}})});$trig
ger.remove(),$file.on("change",function(){ui.get(!0).start()})}:function($field,set_objection){var $trigger=$field.children(".upload-trigger"),$file=$field.children(".upload-file-input"),ui=
UploadUI($field,set_objection,function(){return UploadPopup($field.data("upload-identifier"),$field.data("upload-url")).register({start:function(){$trigger.hide()},always:function(){$trigger.show()}})});$file.detach(),$trigger.show(),$trigger.on("click",function(){ui.get(!0).start()})};$(document).on("loadwidget-smiform",".form-fields-container",function(event,data){$(this).find(".upload-file").each(function(){UploadField($(this),data.set_objection)}),event.stopPropagation()})})(jQuery,jsontemplate);
\ No newline at end of file
+(function($,jsontemplate){var POLL_NETWORK_RETRIES=5,POLL_NETWORK_DELAY=500,POLL_MISSING_RETRIES=20,DONT_NEED_POPUP=function(){var $test=$('<div style="display:none;"><form id="testform1"><input type="file" form="testform2" /></form><form id="testform2"></form></div>'),supported=!1;return $("body").append($test),supported=0===$test.find("#testform1")[0].length&&1===$test.find("#testform2")[0].length,$test.remove(),supported}(),PollStatusChecker=function(url,identifier,result){var poll_retries=POLL_NETWORK_RETRIES,poll_timeout=null,missing_retries=POLL_MISSING_RETRIES,deferred=$.Deferred(),poll=function(){$.ajax({type:"GET",dataType:"json",url:url+"?status&identifier="+identifier}).then(function(info){var error=null;result.notify(info),info.missing&&(missing_retries-=1,missing_retries||(er
ror=info["upload-error"]||"unknow error",deferred.reject({message:"Upload failed ("+error+")."}))),info["upload-finished"]||info["upload-error"]?info["upload-finished"]&&!info["upload-error"
]?deferred.resolve(info):(error=info["upload-error"]||"unknow error",deferred.reject({message:"Upload failed ("+error+")."})):"pending"==result.state()&&missing_retries&&(poll_retries=POLL_NETWORK_RETRIES,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY))},function(){"pending"==result.state()&&(poll_retries?(poll_retries-=1,poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)):deferred.reject({message:"Status check failed: cannot upload file."}))})};return{promise:deferred.promise,start:function(){poll_timeout=setTimeout(poll,POLL_NETWORK_DELAY)},always:function(){null!==poll_timeout&&(clearTimeout(poll_timeout),poll_timeout=null)}}},IFrameStatusChecker=function($iframe,name){var iframe=$iframe.get(0),iframe_window=iframe.contentWindow,deferred=(iframe_window.document,$.Deferred()),fail=functi
on(){deferred.reject({message:"Upload failed (file too big or server error)."})};return $(document).one(name,function(event,data){deferred.resolve(data)}),iframe_window.addEventListener?(ifr
ame_window.addEventListener("load",fail,!1),iframe_window.addEventListener("error",fail,!1)):(iframe_window.attachEvent("onload",fail),iframe_window.attachEvent("onerror",fail)),{promise:deferred.promise}},UploadStatusMessage=function($display){var $empty=$display.children(".upload-display-empty"),$uploading=$display.children(".upload-display-uploading"),$done=$display.children(".upload-display-complete"),empty=$empty.children("i").text(),uploading=jsontemplate.Template($uploading.children("i").text(),{}),done=jsontemplate.Template($done.children("i").text(),{}),state="empty",original=$display.data("upload-status"),api={start:function(data){"starting"!=state&&($uploading.children("i").text(uploading.expand(data)),$empty.hide(),$done.hide(),$uploading.show(),state="starting")},progress:fun
ction(data){"uploading"==state||data.missing||($uploading.children("i").text(uploading.expand(data)),state="uploading")},done:function(data){"done"!=state&&($done.children("i").text(done.exp
and(data)),$empty.hide(),$uploading.hide(),$done.show(),state="done")},fail:function(data){("empty"!=state||data.message)&&($empty.children("i").text(data.message||empty),"empty"!=state&&($uploading.hide(),$done.hide(),$empty.show(),state="empty"))}};return original&&api.done(original),api},UploadProgress=function($progress){var progress=0;return{start:function(){$progress.progressbar({value:0}).show()},progress:function(data){var updated=0;data.missing||(updated=100*data["uploaded-length"]/data["request-length"]),updated!=progress&&($progress.progressbar({value:updated}),progress=updated)},always:function(){$progress.hide(),progress=0}}},UploadUI=function($field,set_objection,get_upload){var $input=$field.children(".upload-input"),$cancel=$field.children(".upload-cancel"),$clear=$field.c
hildren(".upload-clear"),upload=null,objection=null,progress=UploadProgress($field.children(".upload-progress")),status=UploadStatusMessage($field.children(".upload-display")),api={get:funct
ion(create){return null==upload&&create&&(upload=get_upload(),upload.register(status),upload.register(progress),upload.register(ui)),upload}},ui={start:function(){void 0!==set_objection&&(objection=$.Deferred(),set_objection(function(){if("pending"==objection.state()){var $dialog=$('<div title="Uploading file"><p>Please wait until the upload is finished ...</p><p class="progress"></p></div>'),$progress=$dialog.find("p.progress"),progress=0;return $dialog.dialog({modal:!0,closeOnEscape:!1,resizable:!1,draggable:!1,beforeClose:function(){return!1}}),$progress.progressbar({value:0}),api.get().register({progress:function(data){var updated=0;data.missing||(updated=100*data["uploaded-length"]/data["request-length"]),updated!=progress&&($progress.progressbar({value:updated}),progress=updated)}})
,objection.always(function(){$dialog.dialog("close").remove(),objection=null})}return null})),$cancel.show()},done:function(){$input.attr("value",$field.data("upload-identifier"))},always:fu
nction(){null!==objection&&objection.resolve(),$cancel.hide(),upload=null}};return $cancel.on("click",function(){var upload=api.get();null!==upload&&upload.cancel()}),$clear.on("click",function(){var upload=api.get(!0);upload.cancel(),$input.attr("value","")}),api},UploadForm=function($field,identifier,url){var $upload=$('<div style="display:none"><iframe width="0" height="0" style="display:none"src="about:blank" class="upload-iframe" name="upload-'+identifier+'-iframe"></iframe>'+'<form class="upload-form" enctype="multipart/form-data"'+'method="POST" action="'+url+"?identifier="+identifier+'" target="upload-'+identifier+'-iframe" id="upload-'+identifier+'-form">'+'<input type="reset" class="upload-reset" /></form></div>'),result=$.Deferred().fail(function(){$upload.find(".upload-reset")
.click(),$upload.find(".upload-iframe").attr("src","javascript:false;")}).always(function(){$upload.remove(),$field.removeAttr("form")}),start=$.Deferred(),api={start:function(){$("body").ap
pend($upload),$field.attr("form","upload-"+identifier+"-form"),start.done(function(){api.register(IFrameStatusChecker($upload.find("iframe"),"upload-"+identifier+"-done")),api.register(PollStatusChecker(url,identifier,result)),$upload.find("form").submit()}).resolve({"uploaded-length":0,"content-type":"n/a","request-length":0,filename:""})},cancel:function(){result.reject({})},register:function(plugin){void 0!==plugin.start&&start.done(plugin.start),void 0!==plugin.promise&&plugin.promise().then(function(data){result.resolve(data)},function(data){result.reject(data)});for(var event in{progress:1,done:1,fail:1,always:1})void 0!==plugin[event]&&result[event](plugin[event]);return api}};return api},UploadPopup=function(identifier,url){var $popup=$('<div title="Upload a file"><form class="up
load-form" enctype="multipart/form-data"method="POST" action="'+url+"?identifier="+identifier+'" target="upload-'+identifier+'-iframe" id="upload-'+identifier+'-form">'+'<input type="file" n
ame="file-we-are-uploading" class="upload-file" /></form>'+'<iframe width="0" height="0" style="display:none"'+'src="about:blank" class="upload-iframe" name="upload-'+identifier+'-iframe"></iframe></div>'),result=$.Deferred().fail(function(){$popup.find(".upload-iframe").attr("src","javascript:false;")}).always(function(){$popup.remove()}),start=$.Deferred(),api={start:function(){var send=function(){start.done(function(){$popup.dialog("close"),api.register(IFrameStatusChecker($popup.find("iframe"),"upload-"+identifier+"-done")),api.register(PollStatusChecker(url,identifier,result)),$popup.find("form").submit()}).resolve({"uploaded-length":0,"content-type":"n/a","request-length":0,filename:""})};$popup.find(".upload-file").on("change",function(){send()}),$popup.dialog({buttons:{Send:functi
on(){send()}}})},cancel:function(){result.reject({})},register:function(plugin){void 0!==plugin.start&&start.done(plugin.start),void 0!==plugin.promise&&plugin.promise().then(function(data){
result.resolve(data)},function(data){result.reject(data)});for(var event in{progress:1,done:1,fail:1,always:1})void 0!==plugin[event]&&result[event](plugin[event]);return api}};return api},UploadField=DONT_NEED_POPUP?function($field,set_objection){var $trigger=$field.children(".upload-trigger"),$file=$field.children(".upload-file-input"),ui=UploadUI($field,set_objection,function(){return UploadForm($file,$field.data("upload-identifier"),$field.data("upload-url")).register({start:function(){$file.hide()},always:function(){$file.show()}})});$trigger.remove(),$file.on("change",function(){ui.get(!0).start()})}:function($field,set_objection){var $trigger=$field.children(".upload-trigger"),$file=$field.children(".upload-file-input"),ui=UploadUI($field,set_objection,function(){return UploadPopup
($field.data("upload-identifier"),$field.data("upload-url")).register({start:function(){$trigger.hide()},always:function(){$trigger.show()}})});$file.detach(),$trigger.show(),$trigger.on("cl
ick",function(){ui.get(!0).start()})};$(document).on("loadwidget-smiform",".form-fields-container",function(event,data){$(this).find(".upload-file").each(function(){UploadField($(this),data.set_objection)}),event.stopPropagation()})})(jQuery,jsontemplate);
\ No newline at end of file
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.