123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- var Popup = new baidu.editor.ui.Popup();
- var uiUtils = baidu.editor.ui.uiUtils();
- var popEl = this.getDom();
- uiUtils.setViewportOffset(popEl, {
- left: 20,
- top: top
- });
- (function () {
- var utils = baidu.editor.utils,
- uiUtils = baidu.editor.ui.uiUtils,
- domUtils = baidu.editor.dom.domUtils,
- UIBase = baidu.editor.ui.UIBase,
- Popup = baidu.editor.ui.Popup = function (options){
- this.initOptions(options);
- this.initPopup();
- };
- var allPopups = [];
- function closeAllPopup( evt,el ){
- for ( var i = 0; i < allPopups.length; i++ ) {
- var pop = allPopups[i];
- if (!pop.isHidden()) {
- if (pop.queryAutoHide(el) !== false) {
- if(evt&&/scroll/ig.test(evt.type)&&pop.className=="edui-wordpastepop") return;
- pop.hide();
- }
- }
- }
- if(allPopups.length)
- pop.editor.fireEvent("afterhidepop");
- }
- Popup.postHide = closeAllPopup;
- var ANCHOR_CLASSES = ['edui-anchor-topleft','edui-anchor-topright',
- 'edui-anchor-bottomleft','edui-anchor-bottomright'];
- Popup.prototype = {
- SHADOW_RADIUS: 5,
- content: null,
- _hidden: false,
- autoRender: true,
- canSideLeft: true,
- canSideUp: true,
- initPopup: function (){
- this.initUIBase();
- allPopups.push( this );
- },
- getHtmlTpl: function (){
- return '<div id="##" class="edui-popup %%" onmousedown="return false;">' +
- ' <div id="##_body" class="edui-popup-body">' +
- ' <iframe style="position:absolute;z-index:-1;left:0;top:0;background-color: transparent;" frameborder="0" width="100%" height="100%" src="about:blank"></iframe>' +
- ' <div class="edui-shadow"></div>' +
- ' <div id="##_content" class="edui-popup-content">' +
- this.getContentHtmlTpl() +
- ' </div>' +
- ' </div>' +
- '</div>';
- },
- getContentHtmlTpl: function (){
- if(this.content){
- if (typeof this.content == 'string') {
- return this.content;
- }
- return this.content.renderHtml();
- }else{
- return ''
- }
- },
- _UIBase_postRender: UIBase.prototype.postRender,
- postRender: function (){
- if (this.content instanceof UIBase) {
- this.content.postRender();
- }
- //捕获鼠标滚轮
- if( this.captureWheel && !this.captured ) {
- this.captured = true;
- var winHeight = ( document.documentElement.clientHeight || document.body.clientHeight ) - 80,
- _height = this.getDom().offsetHeight,
- _top = uiUtils.getClientRect( this.combox.getDom() ).top,
- content = this.getDom('content'),
- ifr = this.getDom('body').getElementsByTagName('iframe'),
- me = this;
- ifr.length && ( ifr = ifr[0] );
- while( _top + _height > winHeight ) {
- _height -= 30;
- }
- content.style.height = _height + 'px';
- //同步更改iframe高度
- ifr && ( ifr.style.height = _height + 'px' );
- //阻止在combox上的鼠标滚轮事件, 防止用户的正常操作被误解
- if( window.XMLHttpRequest ) {
- domUtils.on( content, ( 'onmousewheel' in document.body ) ? 'mousewheel' :'DOMMouseScroll' , function(e){
- if(e.preventDefault) {
- e.preventDefault();
- } else {
- e.returnValue = false;
- }
- if( e.wheelDelta ) {
- content.scrollTop -= ( e.wheelDelta / 120 )*60;
- } else {
- content.scrollTop -= ( e.detail / -3 )*60;
- }
- });
- } else {
- //ie6
- domUtils.on( this.getDom(), 'mousewheel' , function(e){
- e.returnValue = false;
- me.getDom('content').scrollTop -= ( e.wheelDelta / 120 )*60;
- });
- }
- }
- this.fireEvent('postRenderAfter');
- this.hide(true);
- this._UIBase_postRender();
- },
- _doAutoRender: function (){
- if (!this.getDom() && this.autoRender) {
- this.render();
- }
- },
- mesureSize: function (){
- var box = this.getDom('content');
- return uiUtils.getClientRect(box);
- },
- fitSize: function (){
- if( this.captureWheel && this.sized ) {
- return this.__size;
- }
- this.sized = true;
- var popBodyEl = this.getDom('body');
- popBodyEl.style.width = '';
- popBodyEl.style.height = '';
- var size = this.mesureSize();
- if( this.captureWheel ) {
- popBodyEl.style.width = -(-20 -size.width) + 'px';
- var height = parseInt( this.getDom('content').style.height, 10 );
- !window.isNaN( height ) && ( size.height = height );
- } else {
- popBodyEl.style.width = size.width + 'px';
- }
- popBodyEl.style.height = size.height + 'px';
- this.__size = size;
- this.captureWheel && (this.getDom('content').style.overflow = 'auto');
- return size;
- },
- showAnchor: function ( element, hoz ){
- this.showAnchorRect( uiUtils.getClientRect( element ), hoz );
- },
- showAnchorRect: function ( rect, hoz, adj ){
- this._doAutoRender();
- var vpRect = uiUtils.getViewportRect();
- this.getDom().style.visibility = 'hidden';
- this._show();
- var popSize = this.fitSize();
- var sideLeft, sideUp, left, top;
- if (hoz) {
- sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width);
- sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height);
- left = (sideLeft ? rect.left - popSize.width : rect.right);
- top = (sideUp ? rect.bottom - popSize.height : rect.top);
- } else {
- sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width);
- sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height);
- left = (sideLeft ? rect.right - popSize.width : rect.left);
- top = (sideUp ? rect.top - popSize.height : rect.bottom);
- }
- var popEl = this.getDom();
- uiUtils.setViewportOffset(popEl, {
- left: 20,
- top: top
- });
- domUtils.removeClasses(popEl, ANCHOR_CLASSES);
- popEl.className += ' ' + ANCHOR_CLASSES[(sideUp ? 1 : 0) * 2 + (sideLeft ? 1 : 0)];
- if(this.editor){
- popEl.style.zIndex = this.editor.container.style.zIndex * 1 + 10;
- baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = popEl.style.zIndex - 1;
- }
- this.getDom().style.visibility = 'uset';
- },
- showAt: function (offset) {
- var left = offset.left;
- var top = offset.top;
- var rect = {
- left: left,
- top: top,
- right: left,
- bottom: top,
- height: 0,
- width: 0
- };
- this.showAnchorRect(rect, false, true);
- },
- _show: function (){
- if (this._hidden) {
- var box = this.getDom();
- box.style.display = '';
- this._hidden = false;
- // if (box.setActive) {
- // box.setActive();
- // }
- this.fireEvent('show');
- }
- },
- isHidden: function (){
- return this._hidden;
- },
- show: function (){
- this._doAutoRender();
- this._show();
- },
- hide: function (notNofity){
- if (!this._hidden && this.getDom()) {
- this.getDom().style.display = 'none';
- this._hidden = true;
- if (!notNofity) {
- this.fireEvent('hide');
- }
- }
- },
- queryAutoHide: function (el){
- return !el || !uiUtils.contains(this.getDom(), el);
- }
- };
- utils.inherits(Popup, UIBase);
-
- domUtils.on( document, 'mousedown', function ( evt ) {
- var el = evt.target || evt.srcElement;
- closeAllPopup( evt,el );
- } );
- domUtils.on( window, 'scroll', function (evt,el) {
- closeAllPopup( evt,el );
- } );
- })();
|