| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | (function (){    var browser = baidu.editor.browser,        domUtils = baidu.editor.dom.domUtils;    var magic = '$EDITORUI';    var root = window[magic] = {};    var uidMagic = 'ID' + magic;    var uidCount = 0;    var uiUtils = baidu.editor.ui.uiUtils = {        uid: function (obj){            return (obj ? obj[uidMagic] || (obj[uidMagic] = ++ uidCount) : ++ uidCount);        },        hook: function ( fn, callback ) {            var dg;            if (fn && fn._callbacks) {                dg = fn;            } else {                dg = function (){                    var q;                    if (fn) {                        q = fn.apply(this, arguments);                    }                    var callbacks = dg._callbacks;                    var k = callbacks.length;                    while (k --) {                        var r = callbacks[k].apply(this, arguments);                        if (q === undefined) {                            q = r;                        }                    }                    return q;                };                dg._callbacks = [];            }            dg._callbacks.push(callback);            return dg;        },        createElementByHtml: function (html){            var el = document.createElement('div');            el.innerHTML = html;            el = el.firstChild;            el.parentNode.removeChild(el);            return el;        },        getViewportElement: function (){            return (browser.ie && browser.quirks) ?                document.body : document.documentElement;        },        getClientRect: function (element){            var bcr;            //trace  IE6下在控制编辑器显隐时可能会报错,catch一下            try{                bcr = element.getBoundingClientRect();            }catch(e){                bcr={left:0,top:0,height:0,width:0}            }            var rect = {                left: Math.round(bcr.left),                top: Math.round(bcr.top),                height: Math.round(bcr.bottom - bcr.top),                width: Math.round(bcr.right - bcr.left)            };            var doc;            while ((doc = element.ownerDocument) !== document &&                (element = domUtils.getWindow(doc).frameElement)) {                bcr = element.getBoundingClientRect();                rect.left += bcr.left;                rect.top += bcr.top;            }            rect.bottom = rect.top + rect.height;            rect.right = rect.left + rect.width;            return rect;        },        getViewportRect: function (){            var viewportEl = uiUtils.getViewportElement();            var width = (window.innerWidth || viewportEl.clientWidth) | 0;            var height = (window.innerHeight ||viewportEl.clientHeight) | 0;            return {                left: 0,                top: 0,                height: height,                width: width,                bottom: height,                right: width            };        },        setViewportOffset: function (element, offset){            var rect;            var fixedLayer = uiUtils.getFixedLayer();            if (element.parentNode === fixedLayer) {                element.style.left = offset.left + 'px';                element.style.top = offset.top + 'px';            } else {                domUtils.setViewportOffset(element, offset);            }        },        getEventOffset: function (evt){            var el = evt.target || evt.srcElement;            var rect = uiUtils.getClientRect(el);            var offset = uiUtils.getViewportOffsetByEvent(evt);            return {                left: offset.left - rect.left,                top: offset.top - rect.top            };        },        getViewportOffsetByEvent: function (evt){            var el = evt.target || evt.srcElement;            var frameEl = domUtils.getWindow(el).frameElement;            var offset = {                left: evt.clientX,                top: evt.clientY            };            if (frameEl && el.ownerDocument !== document) {                var rect = uiUtils.getClientRect(frameEl);                offset.left += rect.left;                offset.top += rect.top;            }            return offset;        },        setGlobal: function (id, obj){            root[id] = obj;            return magic + '["' + id  + '"]';        },        unsetGlobal: function (id){            delete root[id];        },        copyAttributes: function (tgt, src){            var attributes = src.attributes;            var k = attributes.length;            while (k --) {                var attrNode = attributes[k];                if ( attrNode.nodeName != 'style' && attrNode.nodeName != 'class' && (!browser.ie || attrNode.specified) ) {                    tgt.setAttribute(attrNode.nodeName, attrNode.nodeValue);                }            }            if (src.className) {                domUtils.addClass(tgt,src.className);            }            if (src.style.cssText) {                tgt.style.cssText += ';' + src.style.cssText;            }        },        removeStyle: function (el, styleName){            if (el.style.removeProperty) {                el.style.removeProperty(styleName);            } else if (el.style.removeAttribute) {                el.style.removeAttribute(styleName);            } else throw '';        },        contains: function (elA, elB){            return elA && elB && (elA === elB ? false : (                elA.contains ? elA.contains(elB) :                    elA.compareDocumentPosition(elB) & 16                ));        },        startDrag: function (evt, callbacks,doc){            var doc = doc || document;            var startX = evt.clientX;            var startY = evt.clientY;            function handleMouseMove(evt){                var x = evt.clientX - startX;                var y = evt.clientY - startY;                callbacks.ondragmove(x, y,evt);                if (evt.stopPropagation) {                    evt.stopPropagation();                } else {                    evt.cancelBubble = true;                }            }            if (doc.addEventListener) {                function handleMouseUp(evt){                    doc.removeEventListener('mousemove', handleMouseMove, true);                    doc.removeEventListener('mouseup', handleMouseUp, true);                    window.removeEventListener('mouseup', handleMouseUp, true);                    callbacks.ondragstop();                }                doc.addEventListener('mousemove', handleMouseMove, true);                doc.addEventListener('mouseup', handleMouseUp, true);                window.addEventListener('mouseup', handleMouseUp, true);                evt.preventDefault();            } else {                var elm = evt.srcElement;                elm.setCapture();                function releaseCaptrue(){                    elm.releaseCapture();                    elm.detachEvent('onmousemove', handleMouseMove);                    elm.detachEvent('onmouseup', releaseCaptrue);                    elm.detachEvent('onlosecaptrue', releaseCaptrue);                    callbacks.ondragstop();                }                elm.attachEvent('onmousemove', handleMouseMove);                elm.attachEvent('onmouseup', releaseCaptrue);                elm.attachEvent('onlosecaptrue', releaseCaptrue);                evt.returnValue = false;            }            callbacks.ondragstart();        },        getFixedLayer: function (){            var layer = document.getElementById('edui_fixedlayer');            if (layer == null) {                layer = document.createElement('div');                layer.id = 'edui_fixedlayer';                document.body.appendChild(layer);                if (browser.ie && browser.version <= 8) {                    layer.style.position = 'absolute';                    bindFixedLayer();                    setTimeout(updateFixedOffset);                } else {                    layer.style.position = 'fixed';                }                layer.style.left = '0';                layer.style.top = '0';                layer.style.width = '0';                layer.style.height = '0';            }            return layer;        },        makeUnselectable: function (element){            if (browser.opera || (browser.ie && browser.version < 9)) {                element.unselectable = 'on';                if (element.hasChildNodes()) {                    for (var i=0; i<element.childNodes.length; i++) {                        if (element.childNodes[i].nodeType == 1) {                            uiUtils.makeUnselectable(element.childNodes[i]);                        }                    }                }            } else {                if (element.style.MozUserSelect !== undefined) {                    element.style.MozUserSelect = 'none';                } else if (element.style.WebkitUserSelect !== undefined) {                    element.style.WebkitUserSelect = 'none';                } else if (element.style.KhtmlUserSelect !== undefined) {                    element.style.KhtmlUserSelect = 'none';                }            }        }    };    function updateFixedOffset(){        var layer = document.getElementById('edui_fixedlayer');        uiUtils.setViewportOffset(layer, {            left: 0,            top: 0        });//        layer.style.display = 'none';//        layer.style.display = 'block';        //#trace: 1354//        setTimeout(updateFixedOffset);    }    function bindFixedLayer(adjOffset){        domUtils.on(window, 'scroll', updateFixedOffset);        domUtils.on(window, 'resize', baidu.editor.utils.defer(updateFixedOffset, 0, true));    }})();
 |