author: Sylvain Viollon
date: Thu Jul 25 18:43:54 2013 +0200
revision: 410:109bc0a42637 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=109bc0a42637
modified: setup.py
added:
removed:
log: Declare dependencies.
Subject: [zeam.form.silva][Sylvain Viollon] Better error detection. Add a progress bar to the dialog too.
author: Sylvain Viollon
date: Mon Jul 29 11:09:57 2013 +0200
revision: 411:56c3eb289e39 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=56c3eb289e39
modified: src/zeam/form/silva/widgets/static/upload.js src/zeam/form/silva/widgets/static/upload.min.js
added:
removed:
log: Better error detection. Add a progress bar to the dialog too.
diffstat:
setup.py | 2 +-
src/zeam/form/silva/widgets/static/upload.js | 88 ++++++++++++++++-------
src/zeam/form/silva/widgets/static/upload.min.js | 2 +-
3 files changed, 64 insertions(+), 28 deletions(-)
diffs (224 lines):
diff -r 64671382a218 -r 56c3eb289e39 setup.py
--- a/setup.py Thu Jul 25 18:27:15 2013 +0200
+++ b/setup.py Mon Jul 29 11:09:57 2013 +0200
@@ -33,7 +33,7 @@
zip_safe=False,
install_requires=[
'five.grok',
- 'gp.fileupload',
+ 'infrae.fileupload',
'grokcore.layout',
'grokcore.security',
'infrae.rest',
diff -r 64671382a218 -r 56c3eb289e39 src/zeam/form/silva/widgets/static/upload.js
--- a/src/zeam/form/silva/widgets/static/upload.js Thu Jul 25 18:27:15 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.js Mon Jul 29 11:09:57 2013 +0200
@@ -1,6 +1,7 @@
(function($, jsontemplate) {
- var POLL_RETRIES = 5,
- POLL_DELAY = 500,
+ var POLL_NETWORK_RETRIES = 5,
+ POLL_NETWORK_DELAY = 500,
+ POLL_MISSING_RETRIES = 20,
DONT_NEED_POPUP = (function () {
// Test if we need a Javascript POPUP to display the file input or not.
var $test = $('<div style="display:none;"><form id="testform1">' +
@@ -17,14 +18,17 @@
var on_iframe_load = function($iframe, handler) {
// helper to bind an event on iframe load
- var iframe_window = $iframe.get(0).contentWindow,
+ var iframe = $iframe.get(0),
+ iframe_window = iframe.contentWindow,
iframe_document = iframe_window.document;
if (iframe_document.readyState == "complete") {
handler();
} else if (iframe_window.addEventListener) {
iframe_window.addEventListener("load", handler, false);
+ iframe_window.addEventListener("error", handler, false);
} else {
iframe_window.attachEvent("onload", handler);
+ iframe_window.attachEvent("onerror", handler);
};
};
@@ -135,7 +139,9 @@
objection = $.Deferred();
set_objection(function () {
if (objection.state() == 'pending') {
- var $dialog = $('<div title="Uploading file">Please wait until the upload is finished ...</div>');
+ 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;
$dialog.dialog({
modal: true,
@@ -145,6 +151,20 @@
beforeClose: function() {
return false;
}});
+ $progress.progressbar({value: 0});
+ api.get().register({
+ progress: function(data) {
+ var updated = 0;
+
+ if (!data['missing']) {
+ updated = data['uploaded-length'] * 100 / data['request-length'];
+ };
+ if (updated != progress) {
+ $progress.progressbar({value: updated});
+ progress = updated;
+ };
+ }
+ });
return objection.always(function() {
$dialog.dialog('close').remove();
objection = null;
@@ -193,8 +213,9 @@
'" target="upload-' + identifier +
'-iframe" id="upload-' + identifier + '-form">' +
'<input type="reset" class="upload-reset" /></form></div>'),
- poll_retries = POLL_RETRIES,
+ 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;');
@@ -207,7 +228,7 @@
$field.removeAttr('form');
}),
start = $.Deferred().done(function() {
- poll_timeout = setTimeout(poll, POLL_DELAY);
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
}),
poll = function() {
// Poll status from the server.
@@ -217,17 +238,23 @@
url: url + '?status&identifier=' + identifier
}).then(function(info){
result.notify(info);
- if (!info['upload-finished'] && result.state() == "pending") {
+ 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_RETRIES;
- poll_timeout = setTimeout(poll, POLL_DELAY);
+ 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_DELAY);
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
} else {
result.reject({message: 'Status check failed: cannot upload file.'});
}
@@ -242,10 +269,11 @@
$('body').append($upload);
$field.attr('form', 'upload-' + identifier + '-form');
$upload.find('form').submit();
- on_iframe_load($upload.find('iframe'), function() {
- result.reject({message: 'Upload failed (file too big or server error).'});
- });
- start.resolve({
+ start.done(function() {
+ on_iframe_load($upload.find('iframe'), function() {
+ result.reject({message: 'Upload failed (file too big or server error).'});
+ });
+ }).resolve({
'uploaded-length': 0, 'content-type': 'n/a', 'request-length': 0, 'filename': ''});
},
cancel: function() {
@@ -269,7 +297,7 @@
var UploadPopup = function(identifier, url) {
// Upload a file input using the given identifier at the given URL.
// It will trigger callbacks uring various steps of the progress.
- var $popup = $('<div title="Upload da file">' +
+ var $popup = $('<div title="Upload a file">' +
'<form class="upload-form" enctype="multipart/form-data"' +
'method="POST" action="' + url + '?identifier=' + identifier +
'" target="upload-' + identifier +
@@ -278,8 +306,9 @@
'<iframe width="0" height="0" style="display:none"' +
'src="about:blank" class="upload-iframe" name="upload-' +
identifier + '-iframe"></iframe></div>'),
- poll_retries = POLL_RETRIES,
+ 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() {
@@ -290,7 +319,7 @@
$popup.remove();
}),
start = $.Deferred().done(function() {
- poll_timeout = setTimeout(poll, POLL_DELAY);
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
}),
poll = function() {
// Poll status from the server.
@@ -300,17 +329,23 @@
url: url + '?status&identifier=' + identifier
}).then(function(info){
result.notify(info);
- if (!info['upload-finished'] && result.state() == "pending") {
+ 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_RETRIES;
- poll_timeout = setTimeout(poll, POLL_DELAY);
+ 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_DELAY);
+ poll_timeout = setTimeout(poll, POLL_NETWORK_DELAY);
} else {
result.reject({message: 'Status check failed: cannot upload file.'});
}
@@ -324,12 +359,13 @@
result.resolve(data);
});
$popup.find('form').submit();
- on_iframe_load($popup.find('iframe'), function() {
- result.reject({message: 'Upload failed (file too big or server error).'});
- });
- start.resolve({
+ start.done(function() {
+ $popup.dialog('close');
+ on_iframe_load($popup.find('iframe'), function() {
+ result.reject({message: 'Upload failed (file too big or server error).'});
+ });
+ }).resolve({
'uploaded-length': 0, 'content-type': 'n/a', 'request-length': 0, 'filename': ''});
- $popup.dialog('close');
};
$popup.find('.upload-file').on('change', function() {
send();
diff -r 64671382a218 -r 56c3eb289e39 src/zeam/form/silva/widgets/static/upload.min.js
--- a/src/zeam/form/silva/widgets/static/upload.min.js Thu Jul 25 18:27:15 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.min.js Mon Jul 29 11:09:57 2013 +0200
@@ -1,1 +1,1 @@
-(function($,jsontemplate){var POLL_RETRIES=5,POLL_DELAY=500,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}(),on_iframe_load=function($iframe,handler){var iframe_window=$iframe.get(0).contentWindow,iframe_document=iframe_window.document;"complete"==iframe_document.readyState?handler():iframe_window.addEventListener?iframe_window.addEventListener("load",handler,!1):iframe_window.attachEvent("onload",handler)},UploadStatusMessage=function($display){var $empty=$display.children(".upload-display-empty"),$uploading=$d
isplay.children(".upload-display-uploading"),$done=$display.children(".upload-display-complete"),empty=$empty.children("i").text(),uploading=jsontemplate.Template($uploading.children("i").te
xt(),{}),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(original),api},UploadProgress=funct
ion($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),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">
Please wait until the upload is finished ...</div>');return $dialog.dialog({modal:!0,closeOnEscape:!1,resizable:!1,draggable:!1,beforeClose:function(){return!1}}),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=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+'-ifram
e" id="upload-'+identifier+'-form">'+'<input type="reset" class="upload-reset" /></form></div>'),poll_retries=POLL_RETRIES,poll_timeout=null,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.removeAttr("form")}),start=$.Deferred().done(function(){poll_timeout=setTimeout(poll,POLL_DELAY)}),poll=function(){$.ajax({type:"GET",dataType:"json",url:url+"?status&identifier="+identifier}).then(function(info){result.notify(info),info["upload-finished"]||"pending"!=result.state()||(poll_retries=POLL_RETRIES,poll_timeout=setTimeout(poll,POLL_DELAY))},function(){"pending"==result.state()&&(poll_retries?(poll_retries-=1,poll_timeout=setTimeout(poll,POLL_DELAY)):result.reject({message:"Status check failed: cannot upload file."}))})},api={start:function(){$(document).one("done-"+identifier+"-up
load",function(event,data){result.resolve(data)}),$("body").append($upload),$field.attr("form","upload-"+identifier+"-form"),$upload.find("form").submit(),on_iframe_load($upload.find("iframe
"),function(){result.reject({message:"Upload failed (file too big or server error)."})}),start.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 da 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_RETRIES,poll_timeout=null,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=$.Deferred().done(function(){poll_timeout=setTimeout(poll,POLL_DELAY)}),poll=function(){$.ajax({type:"GET",dataType:"json",url:url+"?status&identifier="+identifier}).then(function(info){result.notify(info),info["upload-finished"]||"pending"!=result.state()||(poll_retries=POLL_RETRIES,poll_timeout=setTimeout(poll,POLL_DELAY))},function(){"pending"==result.state()&&(poll_retries?(poll_retries-=1,poll_timeout=setTimeout(poll,POLL_DELAY)):result.reject({message:"Status check failed: cannot upload file."}))})},api={start:function(){var send=function(){$(document).one("done-"+identifier+"-upload",function(event,data){resu
lt.resolve(data)}),$popup.find("form").submit(),on_iframe_load($popup.find("iframe"),function(){result.reject({message:"Upload failed (file too big or server error)."})}),start.resolve({"upl
oaded-length":0,"content-type":"n/a","request-length":0,filename:""}),$popup.dialog("close")};$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()}}
)});$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-in
put"),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}(),on_iframe_load=function($iframe,handler){var iframe=$iframe.get(0),iframe_window=iframe.contentWindow,iframe_document=iframe_window.document;"complete"==iframe_document.readyState?handler():iframe_window.addEventListener?(iframe_window.addEventListener("load",handler,!1),iframe_window.addEventListener("error",handler,!1)):(iframe_window.attachEvent("onload",handler)
,iframe_window.attachEvent("onerror",handler))},UploadStatusMessage=function($display){var $empty=$display.children(".upload-display-empty"),$uploading=$display.children(".upload-display-upl
oading"),$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.mes
sage||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.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),upload.register(progress),upload.register(ui)),upload}},ui={start:functi
on(){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 f
inished ...</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.ca
ncel()}),$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>'),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.removeAttr("form")}),start=$.Deferred().done(function(){poll_timeout=setTim
eout(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_r
etries-=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(){$(document).one("done-"+identifier+"-upload",function(event,data){result.resolve(data)}),$("body").append($upload),$field.attr("form","upload-"+identifier+"-form"),$upload.find("form").submit(),start.done(function(){on_iframe_load($upload.find("iframe"),function(){result.reject({message:"Upload failed (file too big or server error)."
})})}).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(pl
ugin.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=$.Deferred().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(){$(document).one("done-"+identifier+"-upload",function(event,data){result.resolve(data)}),$popup.find("form").submit(),start.done(functi
on(){$popup.dialog("close"),on_iframe_load($popup.find("iframe"),function(){result.reject({message:"Upload failed (file too big or server error)."})})}).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()}})});$trigger.remove(),$file.on("change",functio
n(){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
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.