[zeam.form.silva][Sylvain Viollon] Test new on_iframe_load.

[email protected]
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
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.