author: Sylvain Viollon
date: Mon Jul 29 13:37:57 2013 +0200
revision: 413:8991479499c6 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=8991479499c6
modified: src/zeam/form/silva/widgets/static/upload.js
added:
removed:
log: Test new on_iframe_load.
Subject: [zeam.form.silva][Sylvain Viollon] New tests.
author: Sylvain Viollon
date: Mon Jul 29 13:38:18 2013 +0200
revision: 414:d8dff88194c8 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=d8dff88194c8
modified: src/zeam/form/silva/widgets/file.py src/zeam/form/silva/widgets/static/upload.min.js
added:
removed:
log: New tests.
diffstat:
src/zeam/form/silva/widgets/file.py | 1 -
src/zeam/form/silva/widgets/static/upload.js | 15 ++++++++++-----
src/zeam/form/silva/widgets/static/upload.min.js | 2 +-
3 files changed, 11 insertions(+), 7 deletions(-)
diffs (45 lines):
diff -r 592304981490 -r d8dff88194c8 src/zeam/form/silva/widgets/file.py
--- a/src/zeam/form/silva/widgets/file.py Mon Jul 29 13:11:40 2013 +0200
+++ b/src/zeam/form/silva/widgets/file.py Mon Jul 29 13:38:18 2013 +0200
@@ -2,7 +2,6 @@
# Copyright (c) 2010-2013 Infrae. All rights reserved.
# See also LICENSE.txt
-import os.path
import logging
import json
import uuid
diff -r 592304981490 -r d8dff88194c8 src/zeam/form/silva/widgets/static/upload.js
--- a/src/zeam/form/silva/widgets/static/upload.js Mon Jul 29 13:11:40 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.js Mon Jul 29 13:38:18 2013 +0200
@@ -21,12 +21,17 @@
var iframe = $iframe.get(0),
iframe_window = iframe.contentWindow,
iframe_document = iframe_window.document;
- if (iframe_window.addEventListener) {
- iframe_window.addEventListener("load", handler, false);
- iframe_window.addEventListener("error", handler, false);
+ var invoke = function() {
+ setTimeout(handler, 50);
+ };
+ if (iframe_document.readyState == "complete" && iframe.src != 'about:blank') {
+ invoke();
+ } else if (iframe_window.addEventListener) {
+ iframe_window.addEventListener("load", invoke, false);
+ iframe_window.addEventListener("error", invoke, false);
} else {
- iframe_window.attachEvent("onload", handler);
- iframe_window.attachEvent("onerror", handler);
+ iframe_window.attachEvent("onload", invoke);
+ iframe_window.attachEvent("onerror", invoke);
};
};
diff -r 592304981490 -r d8dff88194c8 src/zeam/form/silva/widgets/static/upload.min.js
--- a/src/zeam/form/silva/widgets/static/upload.min.js Mon Jul 29 13:11:40 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.min.js Mon Jul 29 13:38:18 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}(),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
+(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,invoke=function(){setTimeout(handler,50)};"complete"==iframe_document.readyState&&"about:blank"!=iframe.src?invoke():iframe_window.addEventListener?(iframe_window.addEventListener("load",invoke,!1),iframe_window.addEventListene
r("error",invoke,!1)):(iframe_window.attachEvent("onload",invoke),iframe_window.attachEvent("onerror",invoke))},UploadStatusMessage=function($display){var $empty=$display.children(".upload-d
isplay-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){("e
mpty"!=state||data.message)&&($empty.children("i").text(data.message||empty),"empty"!=state&&($uploading.hide(),$done.hide(),$empty.show(),state="empty"))}};return original&&api.done(origina
l),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.r
egister(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=functio
n($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=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(){$(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(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=$.Defer
red().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){resul
t.resolve(data)}),$popup.find("form").submit(),start.done(function(){$popup.dialog("close"),on_iframe_load($popup.find("iframe"),function(){result.reject({message:"Upload failed (file too bi
g 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",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
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.