123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- (function () {
- var utils = UM.utils,
- browser = UM.browser,
- Base = {
- checkURL: function (url) {
- if (!url) return false;
- url = utils.trim(url);
- if (url.length <= 0) {
- return false;
- }
- if (url.search(/http:\/\/|https:\/\//) !== 0) {
- url += 'http://';
- }
- url = url.replace(/\?[\s\S]*$/, "");
- if (!/(.gif|.jpg|.jpeg|.png)$/i.test(url)) {
- return false;
- }
- return url;
- },
- getAllPic: function (sel, $w, editor) {
- var me = this,
- arr = [],
- $imgs = $(sel, $w);
- $.each($imgs, function (index, node) {
- $(node).removeAttr("width").removeAttr("height");
- // if (node.width > editor.options.initialFrameWidth) {
- // me.scale(node, editor.options.initialFrameWidth -
- // parseInt($(editor.body).css("padding-left")) -
- // parseInt($(editor.body).css("padding-right")));
- // }
- return arr.push({
- _src: node.src,
- src: node.src
- });
- });
- return arr;
- },
- scale: function (img, max, oWidth, oHeight) {
- var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;
- if (ow > max || oh > max) {
- if (ow >= oh) {
- if (width = ow - max) {
- percent = (width / ow).toFixed(2);
- img.height = oh - oh * percent;
- img.width = max;
- }
- } else {
- if (height = oh - max) {
- percent = (height / oh).toFixed(2);
- img.width = ow - ow * percent;
- img.height = max;
- }
- }
- }
- return this;
- },
- close: function ($img) {
- $img.css({
- top: ($img.parent().height() - $img.height()) / 2,
- left: ($img.parent().width() - $img.width()) / 2
- }).prev().on("click", function () {
- if ($(this).parent().remove().hasClass("edui-image-upload-item")) {
- //显示图片计数-1
- Upload.showCount--;
- Upload.updateView();
- }
- });
- return this;
- },
- createImgBase64: function (img, file, $w) {
- if (browser.webkit) {
- //Chrome8+
- img.src = window.webkitURL.createObjectURL(file);
- } else if (browser.gecko) {
- //FF4+
- img.src = window.URL.createObjectURL(file);
- } else {
- //实例化file reader对象
- var reader = new FileReader();
- reader.onload = function (e) {
- img.src = this.result;
- $w.append(img);
- };
- reader.readAsDataURL(file);
- }
- },
- callback: function (editor, $w, url, state) {
- if (state == "SUCCESS") {
- //显示图片计数+1
- Upload.showCount++;
- var $img = $("<img src='" + editor.options.imagePath + url + "' class='edui-image-pic' />"),
- $item = $("<div class='edui-image-item edui-image-upload-item'><div class='edui-image-close'></div></div>").append($img);
- if ($(".edui-image-upload2", $w).length < 1) {
- $(".edui-image-content", $w).append($item);
- Upload.render(".edui-image-content", 2)
- .config(".edui-image-upload2");
- } else {
- $(".edui-image-upload2", $w).before($item).show();
- }
- $img.on("load", function () {
- Base.scale(this, 120);
- Base.close($(this));
- $(".edui-image-content", $w).focus();
- });
- } else {
- currentDialog.showTip(state);
- window.setTimeout(function () {
- currentDialog.hideTip();
- }, 3000);
- }
- Upload.toggleMask();
- }
- };
- /*
- * 本地上传
- * */
- var Upload = {
- showCount: 0,
- uploadTpl: '<div class="edui-image-upload%%">' +
- '<span class="edui-image-icon"></span>' +
- '<form class="edui-image-form" method="post" enctype="multipart/form-data" target="up">' +
- '<input style=\"filter: alpha(opacity=0);\" class="edui-image-file" type="file" hidefocus name="upfile" accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp"/>' +
- '</form>' +
- '</div>',
- init: function (editor, $w) {
- var me = this;
- me.editor = editor;
- me.dialog = $w;
- me.render(".edui-image-local", 1);
- me.config(".edui-image-upload1");
- me.submit();
- me.drag();
- $(".edui-image-upload1").hover(function () {
- $(".edui-image-icon", this).toggleClass("hover");
- });
- if (!(UM.browser.ie && UM.browser.version <= 9)) {
- $(".edui-image-dragTip", me.dialog).css("display", "block");
- }
- return me;
- },
- render: function (sel, t) {
- var me = this;
- $(sel, me.dialog).append($(me.uploadTpl.replace(/%%/g, t)));
- return me;
- },
- config: function (sel) {
- var me = this,
- url = me.editor.options.imageUrl;
- url = url + (url.indexOf("?") == -1 ? "?" : "&") + "editorid=" + me.editor.id;//初始form提交地址;
- $("form", $(sel, me.dialog)).attr("action", url);
- return me;
- },
- uploadComplete: function (r) {
- var me = this;
- try {
- var json = eval('(' + r + ')');
- Base.callback(me.editor, me.dialog, json.url, json.state);
- } catch (e) {
- var lang = me.editor.getLang('image');
- Base.callback(me.editor, me.dialog, '', (lang && lang.uploadError) || 'Error!');
- }
- },
- submit: function (callback) {
- var me = this,
- input = $('<input style="filter: alpha(opacity=0);" class="edui-image-file" type="file" hidefocus="" name="upfile" accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp">'),
- input = input[0];
- $(me.dialog).delegate(".edui-image-file", "change", function (e) {
- $(this).trigger("edui.file.change", [Upload, me, input, callback]);
- return;
- if (!this.parentNode) {
- return;
- }
- $('<iframe name="up" style="display: none"></iframe>').insertBefore(me.dialog).on('load', function () {
- var r = this.contentWindow.document.body.innerHTML;
- if (r == '') return;
- me.uploadComplete(r);
- $(this).unbind('load');
- $(this).remove();
- });
- $(this).parent()[0].submit();
- Upload.updateInput(input);
- me.toggleMask("Loading....");
- callback && callback();
- });
- return me;
- },
- //更新input
- updateInput: function (inputField) {
- $(".edui-image-file", this.dialog).each(function (index, ele) {
- ele.parentNode.replaceChild(inputField.cloneNode(true), ele);
- });
- },
- //更新上传框
- updateView: function () {
- if (Upload.showCount !== 0) {
- return;
- }
- $(".edui-image-upload2", this.dialog).hide();
- $(".edui-image-dragTip", this.dialog).show();
- $(".edui-image-upload1", this.dialog).show();
- },
- drag: function () {
- var me = this;
- //做拽上传的支持
- if (!UM.browser.ie9below) {
- me.dialog.find('.edui-image-content').on('drop', function (e) {
- //获取文件列表
- var fileList = e.originalEvent.dataTransfer.files;
- var img = document.createElement('img');
- var hasImg = false;
- $.each(fileList, function (i, f) {
- if (/^image/.test(f.type)) {
- var uploadCallback = me.editor.getOpt('imageUploadCallback');
- if (uploadCallback && typeof uploadCallback === 'function') {
- uploadCallback.call(me, f, function (url, data) {
- me.uploadComplete(JSON.stringify({url: url, state: "SUCCESS"}));
- });
- } else {
- //创建图片的base64
- Base.createImgBase64(img, f, me.dialog);
- var xhr = new XMLHttpRequest();
- xhr.open("post", me.editor.getOpt('imageUrl') + "?type=ajax", true);
- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
- //模拟数据
- var fd = new FormData();
- fd.append(me.editor.getOpt('imageFieldName'), f);
- xhr.send(fd);
- xhr.addEventListener('load', function (e) {
- var r = e.target.response, json;
- me.uploadComplete(r);
- if (i == fileList.length - 1) {
- $(img).remove()
- }
- });
- }
- hasImg = true;
- }
- });
- if (hasImg) {
- e.preventDefault();
- me.toggleMask("Loading....");
- }
- }).on('dragover', function (e) {
- e.preventDefault();
- });
- }
- },
- toggleMask: function (html) {
- var me = this;
- var $mask = $(".edui-image-mask", me.dialog);
- if (html) {
- if (!(UM.browser.ie && UM.browser.version <= 9)) {
- $(".edui-image-dragTip", me.dialog).css("display", "none");
- }
- $(".edui-image-upload1", me.dialog).css("display", "none");
- $mask.addClass("edui-active").html(html);
- } else {
- $mask.removeClass("edui-active").html();
- if (Upload.showCount > 0) {
- return me;
- }
- if (!(UM.browser.ie && UM.browser.version <= 9)) {
- $(".edui-image-dragTip", me.dialog).css("display", "block");
- }
- $(".edui-image-upload1", me.dialog).css("display", "block");
- }
- return me;
- }
- };
- /*
- * 网络图片
- * */
- var NetWork = {
- init: function (editor, $w) {
- var me = this;
- me.editor = editor;
- me.dialog = $w;
- me.initEvt();
- },
- initEvt: function () {
- var me = this,
- url,
- $ele = $(".edui-image-searchTxt", me.dialog);
- $(".edui-image-searchAdd", me.dialog).on("click", function () {
- url = Base.checkURL($ele.val());
- if (url) {
- $("<img src='" + url + "' class='edui-image-pic' />").on("load", function () {
- var $item = $("<div class='edui-image-item'><div class='edui-image-close'></div></div>").append(this);
- $(".edui-image-searchRes", me.dialog).append($item);
- Base.scale(this, 120);
- $item.width($(this).width());
- Base.close($(this));
- $ele.val("");
- });
- }
- })
- .hover(function () {
- $(this).toggleClass("hover");
- });
- }
- };
- /*
- * 选择图片
- * */
- var Select = {
- init: function (editor, $w) {
- var me = this;
- me.editor = editor;
- me.dialog = $w;
- me.initEvt();
- },
- initEvt: function () {
- var me = this;
- $(".edui-image-select", me.dialog).on("click", function () {
- var selectUrl = typeof Config !== 'undefined' && Config.modulename === 'index' ? 'user/attachment' : 'general/attachment/select';
- parent.Fast.api.open(selectUrl + "?element_id=&multiple=true&mimetype=image/*", "选择", {
- callback: function (data) {
- var urlArr = data.url.split(/\,/);
- urlArr.forEach(function (item, index) {
- var url = Fast.api.cdnurl(item);
- $("<img src='" + url + "' class='edui-image-pic' />").on("load", function () {
- var $item = $("<div class='edui-image-item'><div class='edui-image-close'></div></div>").append(this);
- $(".edui-image-selectRes", me.dialog).append($item);
- Base.scale(this, 120);
- $item.width($(this).width());
- Base.close($(this));
- });
- });
- }
- });
- return false;
- });
- }
- };
- var $tab = null,
- currentDialog = null;
- UM.registerWidget('image', {
- tpl: "<link rel=\"stylesheet\" type=\"text/css\" href=\"<%=image_url%>image.css\">" +
- "<div class=\"edui-image-wrapper\">" +
- "<ul class=\"edui-tab-nav\">" +
- "<li class=\"edui-tab-item edui-active\"><a data-context=\".edui-image-local\" class=\"edui-tab-text\"><%=lang_tab_local%></a></li>" +
- "<li class=\"edui-tab-item\"><a data-context=\".edui-image-JimgSearch\" class=\"edui-tab-text\"><%=lang_tab_imgSearch%></a></li>" +
- "<li class=\"edui-tab-item\"><a data-context=\".edui-image-JimgSelect\" class=\"edui-tab-text\"><%=lang_tab_imgSelect%></a></li>" +
- "</ul>" +
- "<div class=\"edui-tab-content\">" +
- "<div class=\"edui-image-local edui-tab-pane edui-active\">" +
- "<div class=\"edui-image-content\"></div>" +
- "<div class=\"edui-image-mask\"></div>" +
- "<div class=\"edui-image-dragTip\"><%=lang_input_dragTip%></div>" +
- "</div>" +
- "<div class=\"edui-image-JimgSearch edui-tab-pane\">" +
- "<div class=\"edui-image-searchBar\">" +
- "<table><tr><td><input class=\"edui-image-searchTxt\" type=\"text\"></td>" +
- "<td><div class=\"edui-image-searchAdd\"><%=lang_btn_add%></div></td></tr></table>" +
- "</div>" +
- "<div class=\"edui-image-searchRes\"></div>" +
- "</div>" +
- "<div class=\"edui-image-JimgSelect edui-tab-pane\">" +
- "<div class=\"edui-image-selectBar\"><div class=\"edui-image-select\"><span class=\"edui-image-icon\"></span></div></div>" +
- "<div class=\"edui-image-selectRes\"></div>" +
- "<div class=\"edui-image-mask\"></div>" +
- "</div>" +
- "</div>" +
- "</div>",
- initContent: function (editor, $dialog) {
- var lang = editor.getLang('image')["static"],
- opt = $.extend({}, lang, {
- image_url: UMEDITOR_CONFIG.UMEDITOR_HOME_URL + 'dialogs/image/'
- });
- Upload.showCount = 0;
- if (lang) {
- var html = $.parseTmpl(this.tpl, opt);
- }
- currentDialog = $dialog.edui();
- this.root().html(html);
- },
- initEvent: function (editor, $w) {
- $tab = $.eduitab({selector: ".edui-image-wrapper"})
- .edui().on("beforeshow", function (e) {
- e.stopPropagation();
- });
- Upload.init(editor, $w);
- NetWork.init(editor, $w);
- Select.init(editor, $w);
- },
- buttons: {
- 'ok': {
- exec: function (editor, $w) {
- var sel = "",
- index = $tab.activate();
- if (index == 0) {
- sel = ".edui-image-content .edui-image-pic";
- } else if (index == 1) {
- sel = ".edui-image-searchRes .edui-image-pic";
- } else if (index == 2) {
- sel = ".edui-image-selectRes .edui-image-pic";
- }
- var list = Base.getAllPic(sel, $w, editor);
- if (index != -1) {
- editor.execCommand('insertimage', list);
- }
- }
- },
- 'cancel': {}
- },
- width: 700,
- height: 408
- }, function (editor, $w, url, state) {
- Base.callback(editor, $w, url, state)
- })
- })();
|