| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | /** * @description * 简单上传:点击按钮,直接选择文件上传 * @author Jinqn * @date 2014-03-31 */UE.plugin.register('simpleupload', function (){    var me = this,        isLoaded = false,        containerBtn;    function initUploadBtn(){        var w = containerBtn.offsetWidth || 20,            h = containerBtn.offsetHeight || 20,            btnIframe = document.createElement('iframe'),            btnStyle = 'display:block;width:' + w + 'px;height:' + h + 'px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;';        domUtils.on(btnIframe, 'load', function(){            var timestrap = (+new Date()).toString(36),                wrapper,                btnIframeDoc,                btnIframeBody;            btnIframeDoc = (btnIframe.contentDocument || btnIframe.contentWindow.document);            btnIframeBody = btnIframeDoc.body;            wrapper = btnIframeDoc.createElement('div');            wrapper.innerHTML = '<form id="edui_form_' + timestrap + '" target="edui_iframe_' + timestrap + '" method="POST" enctype="multipart/form-data" action="' + me.getOpt('serverUrl') + '" ' +            'style="' + btnStyle + '">' +            '<input id="edui_input_' + timestrap + '" type="file" accept="image/*" name="' + me.options.imageFieldName + '" ' +            'style="' + btnStyle + '">' +            '</form>' +            '<iframe id="edui_iframe_' + timestrap + '" name="edui_iframe_' + timestrap + '" style="display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;"></iframe>';            wrapper.className = 'edui-' + me.options.theme;            wrapper.id = me.ui.id + '_iframeupload';            btnIframeBody.style.cssText = btnStyle;            btnIframeBody.style.width = w + 'px';            btnIframeBody.style.height = h + 'px';            btnIframeBody.appendChild(wrapper);            if (btnIframeBody.parentNode) {                btnIframeBody.parentNode.style.width = w + 'px';                btnIframeBody.parentNode.style.height = w + 'px';            }            var form = btnIframeDoc.getElementById('edui_form_' + timestrap);            var input = btnIframeDoc.getElementById('edui_input_' + timestrap);            var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);            domUtils.on(input, 'change', function(){                if(!input.value) return;                var loadingId = 'loading_' + (+new Date()).toString(36);                var params = utils.serializeParam(me.queryCommandValue('serverparam')) || '';                var imageActionUrl = me.getActionUrl(me.getOpt('imageActionName'));                var allowFiles = me.getOpt('imageAllowFiles');                me.focus();                me.execCommand('inserthtml', '<img class="loadingclass" id="' + loadingId + '" src="' + me.options.themePath + me.options.theme +'/images/spacer.gif">');                function callback(){                    try{                        var link, json, loader,                            body = (iframe.contentDocument || iframe.contentWindow.document).body,                            result = body.innerText || body.textContent || '';                        json = (new Function("return " + result))();                        link = me.options.imageUrlPrefix + json.url;                        if(json.state == 'SUCCESS' && json.url) {                            loader = me.document.getElementById(loadingId);                            domUtils.removeClasses(loader, 'loadingclass');                            loader.setAttribute('src', link);                            loader.setAttribute('_src', link);                            loader.setAttribute('alt', json.original || '');                            loader.removeAttribute('id');                        } else {                            showErrorLoader && showErrorLoader(json.state);                        }                    }catch(er){                        showErrorLoader && showErrorLoader(me.getLang('simpleupload.loadError'));                    }                    form.reset();                    domUtils.un(iframe, 'load', callback);                }                function showErrorLoader(title){                    if(loadingId) {                        var loader = me.document.getElementById(loadingId);                        loader && domUtils.remove(loader);                        me.fireEvent('showmessage', {                            'id': loadingId,                            'content': title,                            'type': 'error',                            'timeout': 4000                        });                    }                }                /* 判断后端配置是否没有加载成功 */                if (!me.getOpt('imageActionName')) {                    errorHandler(me.getLang('autoupload.errorLoadConfig'));                    return;                }                // 判断文件格式是否错误                var filename = input.value,                    fileext = filename ? filename.substr(filename.lastIndexOf('.')):'';                if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {                    showErrorLoader(me.getLang('simpleupload.exceedTypeError'));                    return;                }                domUtils.on(iframe, 'load', callback);                form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?':'&') + params);                form.submit();            });            var stateTimer;            me.addListener('selectionchange', function () {                clearTimeout(stateTimer);                stateTimer = setTimeout(function() {                    var state = me.queryCommandState('simpleupload');                    if (state == -1) {                        input.disabled = 'disabled';                    } else {                        input.disabled = false;                    }                }, 400);            });            isLoaded = true;        });        btnIframe.style.cssText = btnStyle;        containerBtn.appendChild(btnIframe);    }    return {        bindEvents:{            'ready': function() {                //设置loading的样式                utils.cssRule('loading',                    '.loadingclass{display:inline-block;cursor:default;background: url(\''                    + this.options.themePath                    + this.options.theme +'/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n' +                    '.loaderrorclass{display:inline-block;cursor:default;background: url(\''                    + this.options.themePath                    + this.options.theme +'/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' +                    '}',                    this.document);            },            /* 初始化简单上传按钮 */            'simpleuploadbtnready': function(type, container) {                containerBtn = container;                me.afterConfigReady(initUploadBtn);            }        },        outputRule: function(root){            utils.each(root.getNodesByTagName('img'),function(n){                if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) {                    n.parentNode.removeChild(n);                }            });        },        commands: {            'simpleupload': {                queryCommandState: function () {                    return isLoaded ? 0:-1;                }            }        }    }});
 |