[zeam.form.silva][Sylvain Viollon] Add an IE support.
[email protected] Thu, 25 Jul 2013 18:27:17 +0200
Newsgroups
gmane.comp.web.zope.silva.cvs
Message-ID
<[email protected] >
author: Sylvain Viollon
date: Thu Jul 25 18:27:15 2013 +0200
revision: 409:64671382a218 in zeam.form.silva
branch: 2.4
details: https://hg.infrae.com/zeam.form.silva?cmd=changeset;node=64671382a218
modified: src/zeam/form/silva/widgets/static/cropping.js src/zeam/form/silva/widgets/static/upload.js src/zeam/form/silva/widgets/static/upload.min.js
added:
removed:
log: Add an IE support.
diffstat:
src/zeam/form/silva/widgets/static/cropping.js | 12 +-
src/zeam/form/silva/widgets/static/upload.js | 349 ++++++++++++++++------
src/zeam/form/silva/widgets/static/upload.min.js | 2 +-
3 files changed, 253 insertions(+), 110 deletions(-)
diffs (453 lines):
diff -r 404f9e87e1ff -r 64671382a218 src/zeam/form/silva/widgets/static/cropping.js
--- a/src/zeam/form/silva/widgets/static/cropping.js Thu Jul 25 15:23:54 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/cropping.js Thu Jul 25 18:27:15 2013 +0200
@@ -2,10 +2,10 @@
(function(infrae, $) {
var create_cropping_field = function() {
- var $field = $(this);
- var $input = $field.find('input.field-cropcoordinates');
- var $opener = $field.find('a.widget-crop-popup-button');
- var $template = $field.find('div.widget-crop-popup').detach();
+ var $field = $(this),
+ $input = $field.find('input.field-cropcoordinates'),
+ $opener = $field.find('a.widget-crop-popup-button'),
+ $template = $field.find('div.widget-crop-popup').detach();
var required = $input.hasClass('field-required');
infrae.ui.selection.disable($template);
@@ -22,8 +22,8 @@
var $img = $popup.find('img.widget-crop-image');
var image_width = preload.width; // Use size from the preload.
var image_height = preload.height;
- var original_width = Math.max(40 + image_width, 250);
- var original_height = 145 + image_height;
+ var original_width = Math.max(40 + image_width, 250),
+ original_height = 145 + image_height;
var ratio = 0;
var $proportional = $popup.find('input.crop-proportional');
diff -r 404f9e87e1ff -r 64671382a218 src/zeam/form/silva/widgets/static/upload.js
--- a/src/zeam/form/silva/widgets/static/upload.js Thu Jul 25 15:23:54 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.js Thu Jul 25 18:27:15 2013 +0200
@@ -1,7 +1,7 @@
(function($, jsontemplate) {
var POLL_RETRIES = 5,
POLL_DELAY = 500,
- NEED_POPUP = (function () {
+ 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">' +
'<input type="file" form="testform2" /></form><form id="testform2">' +
@@ -14,84 +14,17 @@
return supported;
})();
- 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.
- 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_RETRIES,
- poll_timeout = null,
- 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_DELAY);
- });
- var 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['upload-finished'] && result.state() == "pending") {
- // Unless the file is completely uploaded or
- // cancel request status again.
- poll_retries = POLL_RETRIES;
- poll_timeout = setTimeout(poll, POLL_DELAY);
- };
- }, function() {
- if (result.state() == "pending") {
- if (poll_retries) {
- poll_retries -= 1;
- poll_timeout = setTimeout(poll, POLL_DELAY);
- } else {
- result.reject({message: 'Status check failed: cannot upload file.'});
- }
- }
- });
- };
- return {
- 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.resolve({
- 'uploaded-length': 0, 'content-type': 'n/a', 'request-length': 0, 'filename': ''});
- },
- cancel: function() {
- result.reject({});
- },
- register: function(plugin) {
- if (plugin.start !== undefined) {
- start.done(plugin.start);
- };
- for (var event in {progress: 1, done: 1, fail: 1, always: 1}) {
- if (plugin[event] !== undefined) {
- result[event](plugin[event]);
- };
- };
- }
+ var on_iframe_load = function($iframe, handler) {
+ // helper to bind an event on iframe load
+ var iframe_window = $iframe.get(0).contentWindow,
+ iframe_document = iframe_window.document;
+ if (iframe_document.readyState == "complete") {
+ handler();
+ } else if (iframe_window.addEventListener) {
+ iframe_window.addEventListener("load", handler, false);
+ } else {
+ iframe_window.attachEvent("onload", handler);
};
};
@@ -117,7 +50,7 @@
}
},
progress: function(data) {
- if (state != 'uploading') {
+ if (state != 'uploading' && !data.missing) {
// Refresh information on the first notification of progress.
$uploading.children('i').text(uploading.expand(data));
state = 'uploading';
@@ -176,16 +109,26 @@
};
};
- var UploadField = function ($field, set_objection) {
+ var UploadUI = function($field, set_objection, get_upload) {
+ // Manage the controls of the upload widget.
var $input = $field.children('.upload-input'),
- $trigger = $field.children('.upload-trigger'),
$cancel = $field.children('.upload-cancel'),
- $clear = $field.children('.upload-clear'),
- $file = $field.children('.upload-file-input');
+ $clear = $field.children('.upload-clear');
var upload = null,
objection = null,
progress = UploadProgress($field.children('.upload-progress')),
status = UploadStatusMessage($field.children('.upload-display')),
+ api = {
+ get: function(create) {
+ if (upload == null && create) {
+ upload = get_upload();
+ upload.register(status);
+ upload.register(progress);
+ upload.register(ui);
+ }
+ return upload;
+ }
+ },
ui = {
start: function() {
if (set_objection !== undefined) {
@@ -210,7 +153,6 @@
return null;
});
};
- $file.hide();
$cancel.show();
},
done: function(data) {
@@ -220,40 +162,241 @@
if (objection !== null) {
objection.resolve();
};
- $file.show();
$cancel.hide();
upload = null;
}
};
- var get_upload = function(create) {
- if (upload == null && create) {
- upload = UploadForm($file, $field.data('upload-identifier'), $field.data('upload-url'));
- upload.register(status);
- upload.register(progress);
- upload.register(ui);
- }
- return upload;
- };
-
- $trigger.remove();
$cancel.on('click', function() {
- var upload = get_upload();
+ var upload = api.get();
if (upload !== null) {
upload.cancel();
};
});
$clear.on('click', function() {
- var upload = get_upload(true);
+ var upload = api.get(true);
upload.cancel();
$input.attr('value', '');
});
+ return api;
+ };
+
+ 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.
+ 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_RETRIES,
+ poll_timeout = null,
+ 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_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['upload-finished'] && result.state() == "pending") {
+ // Unless the file is completely uploaded or
+ // cancel request status again.
+ poll_retries = POLL_RETRIES;
+ poll_timeout = setTimeout(poll, POLL_DELAY);
+ };
+ }, function() {
+ if (result.state() == "pending") {
+ if (poll_retries) {
+ poll_retries -= 1;
+ poll_timeout = setTimeout(poll, POLL_DELAY);
+ } else {
+ 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();
+ 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) {
+ if (plugin.start !== undefined) {
+ start.done(plugin.start);
+ };
+ for (var event in {progress: 1, done: 1, fail: 1, always: 1}) {
+ if (plugin[event] !== undefined) {
+ result[event](plugin[event]);
+ };
+ };
+ return api;
+ }
+ };
+ return api;
+ };
+
+ 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">' +
+ '<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() {
+ if (poll_timeout !== null) {
+ clearTimeout(poll_timeout);
+ poll_timeout = null;
+ };
+ $popup.remove();
+ }),
+ start = $.Deferred().done(function() {
+ poll_timeout = setTimeout(poll, POLL_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['upload-finished'] && result.state() == "pending") {
+ // Unless the file is completely uploaded or
+ // cancel request status again.
+ poll_retries = POLL_RETRIES;
+ poll_timeout = setTimeout(poll, POLL_DELAY);
+ };
+ }, function() {
+ if (result.state() == "pending") {
+ if (poll_retries) {
+ poll_retries -= 1;
+ poll_timeout = setTimeout(poll, POLL_DELAY);
+ } else {
+ 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();
+ on_iframe_load($popup.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': ''});
+ $popup.dialog('close');
+ };
+ $popup.find('.upload-file').on('change', function() {
+ send();
+ });
+ $popup.dialog({
+ buttons: {
+ Send: function() {
+ send();
+ }
+ }
+ });
+ },
+ cancel: function() {
+ result.reject({});
+ },
+ register: function(plugin) {
+ if (plugin.start !== undefined) {
+ start.done(plugin.start);
+ };
+ for (var event in {progress: 1, done: 1, fail: 1, always: 1}) {
+ if (plugin[event] !== undefined) {
+ result[event](plugin[event]);
+ };
+ };
+ return api;
+ }
+ };
+ return api;
+ };
+
+ var 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() {
- upload = UploadForm($file, $field.data('upload-identifier'), $field.data('upload-url'));
- upload.register(status);
- upload.register(progress);
- upload.register(ui);
- upload.start();
+ ui.get(true).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(true).start();
});
};
diff -r 404f9e87e1ff -r 64671382a218 src/zeam/form/silva/widgets/static/upload.min.js
--- a/src/zeam/form/silva/widgets/static/upload.min.js Thu Jul 25 15:23:54 2013 +0200
+++ b/src/zeam/form/silva/widgets/static/upload.min.js Thu Jul 25 18:27:15 2013 +0200
@@ -1,1 +1,1 @@
-(function($,jsontemplate){var POLL_RETRIES=5,POLL_DELAY=500;(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})();var 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 ty
pe="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."}))})};return{start:function(){$(document).one("done-"+identifier+"-upload",function(event,data){result.resolve(dat
a)}),$("body").append($upload),$field.attr("form","upload-"+identifier+"-form"),$upload.find("form").submit(),start.resolve({"uploaded-length":0,"content-type":"n/a","request-length":0,filen
ame:""})},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])}}},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="s
tarting")},progress:function(data){"uploading"!=state&&($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=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}}},UploadField=function($field,set_objection){var $input=$field.children(".upload-input"),$trigger=$field.children(".upload-trigger"),$cancel=$fie
ld.children(".upload-cancel"),$clear=$field.children(".upload-clear"),$file=$field.children(".upload-file-input"),upload=null,objection=null,progress=UploadProgress($field.children(".upload-
progress")),status=UploadStatusMessage($field.children(".upload-display")),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})),$file.hide(),$cancel.show()},done:function(){$input.attr("value",$field.data("upload-identifier"))},always:function(){null!==objection&&objection.resolve(),$file.show(),$cancel.hide(),upload=null}},get_upload=function(create){return null==upload&&create&&(upload=UploadForm($file,$field.data("uploa
d-identifier"),$field.data("upload-url")),upload.register(status),upload.register(progress),upload.register(ui)),upload};$trigger.remove(),$cancel.on("click",function(){var upload=get_upload
();null!==upload&&upload.cancel()}),$clear.on("click",function(){var upload=get_upload(!0);upload.cancel(),$input.attr("value","")}),$file.on("change",function(){upload=UploadForm($file,$field.data("upload-identifier"),$field.data("upload-url")),upload.register(status),upload.register(progress),upload.register(ui),upload.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_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