[zeam.form.silva][Sylvain Viollon] Add an IE support.

[email protected]
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
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.