| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | /** * @description * 1.拖放文件到编辑区域,自动上传并插入到选区 * 2.插入粘贴板的图片,自动上传并插入到选区 * @author Jinqn * @date 2013-10-14 */UE.plugin.register('autoupload', function (){    function sendAndInsertFile(file, editor) {        var me  = editor;        //模拟数据        var fieldName, urlPrefix, maxSize, allowFiles, actionUrl,            loadingHtml, errorHandler, successHandler,            filetype = /image\/\w+/i.test(file.type) ? 'image':'file',            loadingId = 'loading_' + (+new Date()).toString(36);        fieldName = me.getOpt(filetype + 'FieldName');        urlPrefix = me.getOpt(filetype + 'UrlPrefix');        maxSize = me.getOpt(filetype + 'MaxSize');        allowFiles = me.getOpt(filetype + 'AllowFiles');        actionUrl = me.getActionUrl(me.getOpt(filetype + 'ActionName'));        errorHandler = function(title) {            var loader = me.document.getElementById(loadingId);            loader && domUtils.remove(loader);            me.fireEvent('showmessage', {                'id': loadingId,                'content': title,                'type': 'error',                'timeout': 4000            });        };        if (filetype == 'image') {            loadingHtml = '<img class="loadingclass" id="' + loadingId + '" src="' +                me.options.themePath + me.options.theme + '/images/spacer.gif">';            successHandler = function(data) {                var link = urlPrefix + data.url,                    loader = me.document.getElementById(loadingId);                if (loader) {                    domUtils.removeClasses(loader, 'loadingclass');                    loader.setAttribute('src', link);                    loader.setAttribute('_src', link);                    loader.setAttribute('alt', data.original || '');                    loader.removeAttribute('id');                    me.trigger('contentchange',loader);                }            };        } else {            loadingHtml = '<p>' +                '<img class="loadingclass" id="' + loadingId + '" src="' +                me.options.themePath + me.options.theme + '/images/spacer.gif">' +                '</p>';            successHandler = function(data) {                var link = urlPrefix + data.url,                    loader = me.document.getElementById(loadingId);                var rng = me.selection.getRange(),                    bk = rng.createBookmark();                rng.selectNode(loader).select();                me.execCommand('insertfile', {'url': link});                rng.moveToBookmark(bk).select();            };        }        /* 插入loading的占位符 */        me.execCommand('inserthtml', loadingHtml);        /* 判断后端配置是否没有加载成功 */        if (!me.getOpt(filetype + 'ActionName')) {            errorHandler(me.getLang('autoupload.errorLoadConfig'));            return;        }        /* 判断文件大小是否超出限制 */        if(file.size > maxSize) {            errorHandler(me.getLang('autoupload.exceedSizeError'));            return;        }        /* 判断文件格式是否超出允许 */        var fileext = file.name ? file.name.substr(file.name.lastIndexOf('.')):'';        if ((fileext && filetype != 'image') || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {            errorHandler(me.getLang('autoupload.exceedTypeError'));            return;        }        /* 创建Ajax并提交 */        var xhr = new XMLHttpRequest(),            fd = new FormData(),            params = utils.serializeParam(me.queryCommandValue('serverparam')) || '',            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);        fd.append(fieldName, file, file.name || ('blob.' + file.type.substr('image/'.length)));        fd.append('type', 'ajax');        xhr.open("post", url, true);        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");        xhr.addEventListener('load', function (e) {            try{                var json = (new Function("return " + utils.trim(e.target.response)))();                if (json.state == 'SUCCESS' && json.url) {                    successHandler(json);                } else {                    errorHandler(json.state);                }            }catch(er){                errorHandler(me.getLang('autoupload.loadError'));            }        });        xhr.send(fd);    }    function getPasteImage(e){        return e.clipboardData && e.clipboardData.items && e.clipboardData.items.length == 1 && /^image\//.test(e.clipboardData.items[0].type) ? e.clipboardData.items:null;    }    function getDropImage(e){        return  e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files:null;    }    return {        outputRule: function(root){            utils.each(root.getNodesByTagName('img'),function(n){                if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) {                    n.parentNode.removeChild(n);                }            });            utils.each(root.getNodesByTagName('p'),function(n){                if (/\bloadpara\b/.test(n.getAttr('class'))) {                    n.parentNode.removeChild(n);                }            });        },        bindEvents:{            defaultOptions: {                //默认间隔时间                enableDragUpload: true,                enablePasteUpload: true            },            //插入粘贴板的图片,拖放插入图片            'ready':function(e){                var me = this;                if(window.FormData && window.FileReader) {                    var handler = function(e){                        var hasImg = false,                            items;                        //获取粘贴板文件列表或者拖放文件列表                        items = e.type == 'paste' ? getPasteImage(e):getDropImage(e);                        if(items){                            var len = items.length,                                file;                            while (len--){                                file = items[len];                                if(file.getAsFile) file = file.getAsFile();                                if(file && file.size > 0) {                                    sendAndInsertFile(file, me);                                    hasImg = true;                                }                            }                            hasImg && e.preventDefault();                        }                    };                    if (me.getOpt('enablePasteUpload') !== false) {                        domUtils.on(me.body, 'paste ', handler);                    }                    if (me.getOpt('enableDragUpload') !== false) {                        domUtils.on(me.body, 'drop', handler);                        //取消拖放图片时出现的文字光标位置提示                        domUtils.on(me.body, 'dragover', function (e) {                            if(e.dataTransfer.types[0] == 'Files') {                                e.preventDefault();                            }                        });                    } else {                        if (browser.gecko) {                            domUtils.on(me.body, 'drop', function(e){                                if (getDropImage(e)) {                                    e.preventDefault();                                }                            });                        }                    }                    //设置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-left: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);                }            }        }    }});
 |