| 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();
 
-                 }
 
-             });
 
-         }
 
-     }
 
- })();
 
 
  |