| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 | ///import core///commands 修复chrome下图片不能点击的问题,出现八个角可改变大小///commandsName  FixImgClick///commandsTitle  修复chrome下图片不能点击的问题,出现八个角可改变大小//修复chrome下图片不能点击的问题,出现八个角可改变大小UE.plugins['fiximgclick'] = (function () {    var elementUpdated = false;    function Scale() {        this.editor = null;        this.resizer = null;        this.cover = null;        this.doc = document;        this.prePos = {x: 0, y: 0};        this.startPos = {x: 0, y: 0};    }    (function () {        var rect = [            //[left, top, width, height]            [0, 0, -1, -1],            [0, 0, 0, -1],            [0, 0, 1, -1],            [0, 0, -1, 0],            [0, 0, 1, 0],            [0, 0, -1, 1],            [0, 0, 0, 1],            [0, 0, 1, 1]        ];        Scale.prototype = {            init: function (editor) {                var me = this;                me.editor = editor;                me.startPos = this.prePos = {x: 0, y: 0};                me.dragId = -1;                var hands = [],                    cover = me.cover = document.createElement('div'),                    resizer = me.resizer = document.createElement('div');                cover.id = me.editor.ui.id + '_imagescale_cover';                cover.style.cssText = 'position:absolute;display:none;z-index:' + (me.editor.options.zIndex) + ';filter:alpha(opacity=0); opacity:0;background:#CCC;';                domUtils.on(cover, 'mousedown click', function () {                    me.hide();                });                for (i = 0; i < 8; i++) {                    hands.push('<span class="edui-editor-imagescale-hand' + i + '"></span>');                }                resizer.id = me.editor.ui.id + '_imagescale';                resizer.className = 'edui-editor-imagescale';                resizer.innerHTML = hands.join('');                resizer.style.cssText += ';display:none;border:1px solid #3b77ff;z-index:' + (me.editor.options.zIndex) + ';';                me.editor.ui.getDom().appendChild(cover);                me.editor.ui.getDom().appendChild(resizer);                me.initStyle();                me.initEvents();            },            initStyle: function () {                utils.cssRule('imagescale', '.edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}' +                    '.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}'                    + '.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}');            },            initEvents: function () {                var me = this;                me.startPos.x = me.startPos.y = 0;                me.isDraging = false;            },            _eventHandler: function (e) {                var me = this;                switch (e.type) {                    case 'mousedown':                        var hand = e.target || e.srcElement, hand;                        if (hand.className.indexOf('edui-editor-imagescale-hand') != -1 && me.dragId == -1) {                            me.dragId = hand.className.slice(-1);                            me.startPos.x = me.prePos.x = e.clientX;                            me.startPos.y = me.prePos.y = e.clientY;                            domUtils.on(me.doc,'mousemove', me.proxy(me._eventHandler, me));                        }                        break;                    case 'mousemove':                        if (me.dragId != -1) {                            me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y});                            me.prePos.x = e.clientX;                            me.prePos.y = e.clientY;                            elementUpdated = true;                            me.updateTargetElement();                        }                        break;                    case 'mouseup':                        if (me.dragId != -1) {                            me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y});                            me.updateTargetElement();                            if (me.target.parentNode) me.attachTo(me.target);                            me.dragId = -1;                        }                        domUtils.un(me.doc,'mousemove', me.proxy(me._eventHandler, me));                        //修复只是点击挪动点,但没有改变大小,不应该触发contentchange                        if(elementUpdated){                            elementUpdated = false;                            me.editor.fireEvent('contentchange');                        }                        break;                    default:                        break;                }            },            updateTargetElement: function () {                var me = this;                domUtils.setStyles(me.target, {                    'width': me.resizer.style.width,                    'height': me.resizer.style.height                });                me.target.width = parseInt(me.resizer.style.width);                me.target.height = parseInt(me.resizer.style.height);                me.attachTo(me.target);            },            updateContainerStyle: function (dir, offset) {                var me = this,                    dom = me.resizer, tmp;                if (rect[dir][0] != 0) {                    tmp = parseInt(dom.style.left) + offset.x;                    dom.style.left = me._validScaledProp('left', tmp) + 'px';                }                if (rect[dir][1] != 0) {                    tmp = parseInt(dom.style.top) + offset.y;                    dom.style.top = me._validScaledProp('top', tmp) + 'px';                }                if (rect[dir][2] != 0) {                    tmp = dom.clientWidth + rect[dir][2] * offset.x;                    dom.style.width = me._validScaledProp('width', tmp) + 'px';                }                if (rect[dir][3] != 0) {                    tmp = dom.clientHeight + rect[dir][3] * offset.y;                    dom.style.height = me._validScaledProp('height', tmp) + 'px';                }            },            _validScaledProp: function (prop, value) {                var ele = this.resizer,                    wrap = document;                value = isNaN(value) ? 0 : value;                switch (prop) {                    case 'left':                        return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;                    case 'top':                        return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;                    case 'width':                        return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;                    case 'height':                        return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;                }            },            hideCover: function () {                this.cover.style.display = 'none';            },            showCover: function () {                var me = this,                    editorPos = domUtils.getXY(me.editor.ui.getDom()),                    iframePos = domUtils.getXY(me.editor.iframe);                domUtils.setStyles(me.cover, {                    'width': me.editor.iframe.offsetWidth + 'px',                    'height': me.editor.iframe.offsetHeight + 'px',                    'top': iframePos.y - editorPos.y + 'px',                    'left': iframePos.x - editorPos.x + 'px',                    'position': 'absolute',                    'display': ''                })            },            show: function (targetObj) {                var me = this;                me.resizer.style.display = 'block';                if(targetObj) me.attachTo(targetObj);                domUtils.on(this.resizer, 'mousedown', me.proxy(me._eventHandler, me));                domUtils.on(me.doc, 'mouseup', me.proxy(me._eventHandler, me));                me.showCover();                me.editor.fireEvent('afterscaleshow', me);                me.editor.fireEvent('saveScene');            },            hide: function () {                var me = this;                me.hideCover();                me.resizer.style.display = 'none';                domUtils.un(me.resizer, 'mousedown', me.proxy(me._eventHandler, me));                domUtils.un(me.doc, 'mouseup', me.proxy(me._eventHandler, me));                me.editor.fireEvent('afterscalehide', me);            },            proxy: function( fn, context ) {                return function(e) {                    return fn.apply( context || this, arguments);                };            },            attachTo: function (targetObj) {                var me = this,                    target = me.target = targetObj,                    resizer = this.resizer,                    imgPos = domUtils.getXY(target),                    iframePos = domUtils.getXY(me.editor.iframe),                    editorPos = domUtils.getXY(resizer.parentNode);                domUtils.setStyles(resizer, {                    'width': target.width + 'px',                    'height': target.height + 'px',                    'left': iframePos.x + imgPos.x - me.editor.document.body.scrollLeft - editorPos.x - parseInt(resizer.style.borderLeftWidth) + 'px',                    'top': iframePos.y + imgPos.y - me.editor.document.body.scrollTop - editorPos.y - parseInt(resizer.style.borderTopWidth) + 'px'                });            }        }    })();    return function () {        var me = this,            imageScale;        me.setOpt('imageScaleEnabled', true);        if ( !browser.ie && me.options.imageScaleEnabled) {            me.addListener('click', function (type, e) {                var range = me.selection.getRange(),                    img = range.getClosedNode();                if (img && img.tagName == 'IMG' && me.body.contentEditable!="false") {                    if (img.className.indexOf("edui-faked-music") != -1 ||                        img.getAttribute("anchorname") ||                        domUtils.hasClass(img, 'loadingclass') ||                        domUtils.hasClass(img, 'loaderrorclass')) { return }                    if (!imageScale) {                        imageScale = new Scale();                        imageScale.init(me);                        me.ui.getDom().appendChild(imageScale.resizer);                        var _keyDownHandler = function (e) {                            imageScale.hide();                            if(imageScale.target) me.selection.getRange().selectNode(imageScale.target).select();                        }, _mouseDownHandler = function (e) {                            var ele = e.target || e.srcElement;                            if (ele && (ele.className===undefined || ele.className.indexOf('edui-editor-imagescale') == -1)) {                                _keyDownHandler(e);                            }                        }, timer;                        me.addListener('afterscaleshow', function (e) {                            me.addListener('beforekeydown', _keyDownHandler);                            me.addListener('beforemousedown', _mouseDownHandler);                            domUtils.on(document, 'keydown', _keyDownHandler);                            domUtils.on(document,'mousedown', _mouseDownHandler);                            me.selection.getNative().removeAllRanges();                        });                        me.addListener('afterscalehide', function (e) {                            me.removeListener('beforekeydown', _keyDownHandler);                            me.removeListener('beforemousedown', _mouseDownHandler);                            domUtils.un(document, 'keydown', _keyDownHandler);                            domUtils.un(document,'mousedown', _mouseDownHandler);                            var target = imageScale.target;                            if (target.parentNode) {                                me.selection.getRange().selectNode(target).select();                            }                        });                        //TODO 有iframe的情况,mousedown不能往下传。。                        domUtils.on(imageScale.resizer, 'mousedown', function (e) {                            me.selection.getNative().removeAllRanges();                            var ele = e.target || e.srcElement;                            if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) {                                timer = setTimeout(function () {                                    imageScale.hide();                                    if(imageScale.target) me.selection.getRange().selectNode(ele).select();                                }, 200);                            }                        });                        domUtils.on(imageScale.resizer, 'mouseup', function (e) {                            var ele = e.target || e.srcElement;                            if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) {                                clearTimeout(timer);                            }                        });                    }                    imageScale.show(img);                } else {                    if (imageScale && imageScale.resizer.style.display != 'none') imageScale.hide();                }            });        }        if (browser.webkit) {            me.addListener('click', function (type, e) {                if (e.target.tagName == 'IMG' && me.body.contentEditable!="false") {                    var range = new dom.Range(me.document);                    range.selectNode(e.target).select();                }            });        }    }})();
 |