dhtmlxwindows.js 100 KB

1
  1. //v.2.6 build 100722 /* Copyright DHTMLX LTD. http://www.dhtmlx.com You allowed to use this component or parts of it under GPL terms To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com */ /** * @desc: constructor, creates a single window under dhtmlxWindows system * @pseudonym: win * @type: public */ function dhtmlXWindowsSngl(){ } /** * @desc: constructor, creates a button for a window under dhtmlxWindows system * @pseudonym: btn * @type: public */ function dhtmlXWindowsBtn(){ } /** * @desc: constructor, creates a new dhtmlxWindows object * @type: public */ function dhtmlXWindows() { if (!window.dhtmlXContainer) { alert(this.i18n.dhx); return; } // engine this.engine = "dhx"; // this.engine = "clear"; var engineFunc = "_"+this.engine+"_Engine"; if (!this[engineFunc]) { alert(this.i18n.noenginealert); return; } else { this[engineFunc](); } var that = this; // image manipulation this.pathPrefix = "dhxwins_"; //this.imagePath = dhtmlx.image_path||"codebase/imgs/"; //修改弹出左上角图片位置 /* 改。Lin this.imagePath = dhtmlx.image_path||"wd/theme/window/dhx_blue/image/active/"; */ this.imagePath = dhtmlx.image_path||"ss/window/theme/dhx_blue/image/active/"; /** * @desc: sets path to the directory where used images are located * @param: path - url to the directory where images are located * @type: public */ this.setImagePath = function(path) { this.imagePath = path; } // skins this.skin = "dhx_skyblue"; this.skinParams = { // dhx "dhx_black" : { "header_height": 21, "border_left_width": 2, "border_right_width": 2, "border_bottom_height": 2 }, "dhx_blue" : { "header_height": 21, "border_left_width": 2, "border_right_width": 2, "border_bottom_height": 2 }, "dhx_skyblue" : { "header_height": 21, "border_left_width": 2, "border_right_width": 2, "border_bottom_height": 2 } }; /** * @desc: changes window's skin * @param: skin - skin's name * @type: public */ this.setSkin = function(skin) { this.skin = skin; this._engineRedrawSkin(); //this.skin = skin; //this._redrawSkin(); } /* this._redrawSkin = function() { for (var a in this.wins) { var win = this.wins[a]; var skinParams = (win._skinParams!=null?win._skinParams:this.skinParams[this.skin]); // win.childNodes[0].className = "dhtmlx_wins_"+this.skin; // icon win.childNodes[1].className = "dhtmlx_wins_icon_"+this.skin; this._restoreWindowIcons(win); // title win.childNodes[2].className = "dhtmlx_wins_title_"+this.skin; // butons win.childNodes[3].className = "dhtmlx_wins_buttons_"+this.skin; // this._redrawWindow(win); // this._engineRedrawWindowSize(win); alert("stop PGhNyVSe"); } // this._restoreWindowIcons(this.getTopmostWindow()); } */ // return true if window with specified id is exists /** * @desc: returns true if the window with specified id exists * @param: id * @type: public */ this.isWindow = function(id) { var t = (this.wins[id] != null); return t; } //#wind_uber:09062008{ // return array of handlers finded by text /** * @desc: returns array of window handlers found by header text * @param: id * @type: public */ this.findByText = function(text) { var wins = new Array(); for (var a in this.wins) { if (this.wins[a].getText().search(text, "gi") >= 0) { wins[wins.length] = this.wins[a]; } } return wins; } //#} // return handler by id /** * @desc: returns the window handler (dhtmlXWindowSngl object) found by id * @param: id * @type: public */ this.window = function(id) { var win = null; if (this.wins[id] != null) { win = this.wins[id]; } return win; } //#wind_uber:09062008{ // iterator /** * @desc: iterator - goes through all windows and calls a user handler * @param: hander (user function) * @type: public */ this.forEachWindow = function(handler) { for (var a in this.wins) { handler(this.wins[a]); } } // return bottommost focused window handler /** * @desc: returns the bottommost window * @type: public */ this.getBottommostWindow = function() { var bottommost = this.getTopmostWindow(); for (var a in this.wins) { if (this.wins[a].zi < bottommost.zi) { bottommost = this.wins[a]; } } return (bottommost.zi != 0 ? bottommost : null); } //#} // return topmost focused window handler /** * @desc: returns the topmost window * @type: public */ this.getTopmostWindow = function(visibleOnly) { var topmost = {"zi": 0}; for (var a in this.wins) { if (this.wins[a].zi > topmost.zi) { if (visibleOnly == true && !this._isWindowHidden(this.wins[a])) { topmost = this.wins[a]; } if (visibleOnly != true) { topmost = this.wins[a]; } } } return (topmost.zi != 0 ? topmost : null); } // windows storage this.wins = {}; for (var a in this.wins) delete this.wins[a]; // viewport this.autoViewport = true; this._createViewport = function() { this.vp = document.body; this.vp._css = (String(this.vp.className).length > 0 ? this.vp.className : ""); this.vp.className += " dhtmlx_skin_"+this.skin+(this._r?" dhx_wins_rtl":""); // modal cover this.modalCoverI = document.createElement("IFRAME"); this.modalCoverI.frameBorder = "0"; this.modalCoverI.className = "dhx_modal_cover_ifr"; this.modalCoverI.setAttribute("src","javascript:false;"); this.modalCoverI.style.display = "none"; this.modalCoverI.setAttribute("allowfullscreen",true); this.modalCoverI.style.zIndex = 0; this.vp.appendChild(this.modalCoverI); this.modalCoverD = document.createElement("DIV"); this.modalCoverD.className = "dhx_modal_cover_dv"; this.modalCoverD.style.display = "none"; this.modalCoverD.style.zIndex = 0; this.vp.appendChild(this.modalCoverD); // vp move/resize cover this._vpcover = document.createElement("DIV"); this._vpcover.className = "dhx_content_vp_cover"; this._vpcover.style.display = "none"; this.vp.appendChild(this._vpcover); // resize/move carcass this._carcass = document.createElement("DIV"); this._carcass.className = "dhx_carcass_resmove"; this._carcass.style.display = "none"; if (_isIE) { this._carcass.innerHTML = "<iframe allowfullscreen='true' border=0 frameborder=0 style='filter: alpha(opacity=0); width: 100%; height:100%; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;'></iframe><div style='position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;'></div>"; this._carcass.childNodes[0].setAttribute("src","javascript:false;"); } this._carcass.onselectstart = function(e) { e = e||event; e.returnValue = false; } this.vp.appendChild(this._carcass); } this._autoResizeViewport = function() { for (var a in this.wins) { if (this.wins[a]._isFullScreened) { this.wins[a]._content.style.width = document.body.offsetWidth-(_isIE?4:0)+"px"; // doctype fix if (document.body.offsetHeight == 0) { if (window.innerHeight) { this.wins[a]._content.style.height = window.innerHeight+"px"; } else { this.wins[a]._content.style.height = document.body.scrollHeight+"px"; } } else { this.wins[a]._content.style.height = document.body.offsetHeight-(_isIE?4:0)+"px"; } // this.wins[a]._content.style.height = document.body.offsetHeight-(_isIE?4:0)+"px"; if (this.wins[a].layout != null && _isOpera) { this.wins[a].layout._fixCellsContentOpera950(); } this.wins[a].updateNestedObjects(); } if (this.wins[a]._isMaximized && this.wins[a].style.display != "none") { this._restoreWindow(this.wins[a]); this._maximizeWindow(this.wins[a]); } } if (this.vp == document.body) return; if (this.autoViewport == false) return; this.vp.style.width = (_isIE ? document.body.offsetWidth - 4 : window.innerWidth) + "px"; this.vp.style.height = (_isIE ? document.body.offsetHeight - 4 : window.innerHeight) + "px"; // // check windows out of viewports edge for (var a in this.wins) { var win = this.wins[a]; var overX = false; var overY = false; if (win.x > this.vp.offsetWidth - 10) { win.x = this.vp.offsetWidth - 10; overX = true; } var skinParams = (win._skinParams!=null?win._skinParams:this.skinParams[this.skin]); if (win.y + skinParams["header_height"] > this.vp.offsetHeight) { win.y = this.vp.offsetHeight - skinParams["header_height"]; overY = true; } if (overX || overY) { // this._redrawWindow(win); this._engineRedrawWindowPos(win); } } } /** * @desc: if true - allows an object to adjust the viewport automatically to document.body * @param: state - true|false * @type: public */ this.enableAutoViewport = function(state) { if (this.vp != document.body) return; this.autoViewport = state; if (state == false) { document.body.className = this.vp._css; this.vp = document.createElement("DIV"); this.vp.autocreated = true; this.vp.className = "dhtmlx_winviewport dhtmlx_skin_"+this.skin+(this._r?" dhx_wins_rtl":""); this.vp.style.left = "0px"; this.vp.style.top = "0px"; document.body.appendChild(this.vp); this.vp.ax = 0; this.vp.ay = 0; this._autoResizeViewport(); this.vp.appendChild(this.modalCoverI); this.vp.appendChild(this.modalCoverD); this.vp.appendChild(this._carcass); } } /** * @desc: attaches a vp to an existing object on page (renders an object as a viewport) * @param: objId - object id * @type: public */ this.attachViewportTo = function(objId) { if (this.autoViewport == false) { if (this.vp != document.body) { this.vp.parentNode.removeChild(this.vp); } this.vp = document.getElementById(objId); this.vp.autocreated = false; this.vp.className += " dhtmlx_skin_"+this.skin+(this._r?" dhx_wins_rtl":""); this.vp.style.position = "relative"; this.vp.style.overflow = "hidden"; this.vp.ax = 0; this.vp.ay = 0; this.vp.appendChild(this.modalCoverI); this.vp.appendChild(this.modalCoverD); this.vp.appendChild(this._carcass); } } /** * @desc: sets user-defined viewport if enableAutoViewport(false) * @param: x - top-left viewport corner's X-coordinate * @param: y - top-left viewport corner's Y-coordinate * @param: width - viewport's width * @param: height - viewport's height * @type: public */ this.setViewport = function(x, y, width, height, parentObj) { if (this.autoViewport == false) { this.vp.style.left = x + "px"; this.vp.style.top = y + "px"; this.vp.style.width = width + "px"; this.vp.style.height = height + "px"; // attach to parent if (parentObj != null) { parentObj.appendChild(this.vp); } this.vp.ax = getAbsoluteLeft(this.vp); this.vp.ay = getAbsoluteTop(this.vp); } } // effects this._effects = {"move" : false, "resize" : false}; /** * @desc: sets a visual effect * @param: efName - effect's name * @param: efValue - true/false to enable/disable * @type: public */ this.setEffect = function(efName, efValue) { if ((this._effects[efName] != null) && (typeof(efValue) == "boolean")) { this._effects[efName] = efValue; } } /** * @desc: returns true if the effect is enabled * @param: efName - effect's name * @type: public */ this.getEffect = function(efName) { return this._effects[efName]; } // windows /** * @desc: creates a new window and returns its handler * @param: id - window's id * @param: x - top-left window corner's X-coordinate * @param: y - top-left window corner's Y-coordinate * @param: width - window's width * @param: height - window's height * @type: public */ this.createWindow = function(id, x, y, width, height) { var win = document.createElement("DIV"); // win.className = "dhtmlx_window_inactive"; win.className = "dhtmlx_window_inactive"; win.dir = "ltr"; // move all available windows up for (var a in this.wins) { this.wins[a].zi += this.zIndexStep; this.wins[a].style.zIndex = this.wins[a].zi; } // bottom, bring on top will at the end of createWindow function win.zi = this.zIndexStep;// this._getTopZIndex(true) + this.zIndexStep; win.style.zIndex = win.zi; // win.active = false; // win._isWindow = true; win.isWindow = true; // // win.that = this; // win.w = width; win.h = height; win.x = x; win.y = y; // this._fixWindowPositionInViewport(win); this._engineFixWindowPosInViewport(win); // // win.style.width = win.w + "px"; // win.style.height = win.h + "px"; // win.style.left = win.x + "px"; // win.style.top = win.y + "px"; win._isModal = false; // resize params win._allowResize = true; win.maxW = "auto"; // occupy all viewport on click or win.maxH = "auto"; win.minW = 200; win.minH = 140; win.iconsPresent = true; win.icons = new Array(this.imagePath+this.pathPrefix+this.skin+"/active/icon_normal.gif", this.imagePath+this.pathPrefix+this.skin+"/inactive/icon_normal.gif"); // win._allowMove = true; win._allowMoveGlobal = true; win._allowResizeGlobal = true; // win._keepInViewport = false; // var skin = this.skinParams[this.skin]; win.idd = id; //win._midd = "dhxWMNObj_"+this._genStr(12); //win._tidd = "dhxWTBObj_"+this._genStr(12); //win._sidd = "dhxSTBObj_"+this._genStr(12); // this.vp.appendChild(win); this._engineSetWindowBody(win); this._engineRedrawWindowPos(win); this._engineRedrawWindowSize(win); this._engineUpdateWindowIcon(win, win.icons[0]); this._engineDiableOnSelectInWindow(win, true); // this.wins[id] = win; // dhtmlxEventable(win); // // this._makeActive(win, true); // moving this._engineGetWindowHeader(win).onmousedown = function(e) { var w = that.wins[this.idd]; //if (!w.isOnTop()) w.bringToTop(); //防止点击父弹出窗口时遮住子弹出窗口 if (that._engineGetWindowHeaderState(w)) return; e = e||event; if (!that._engineCheckHeaderMouseDown(w, e)) { return; } if (!w._allowMove || !w._allowMoveGlobal) { return; } // save last coords to determine moveFinish event w.oldMoveX = w.x; w.oldMoveY = w.y; // w.moveOffsetX = w.x - e.clientX; w.moveOffsetY = w.y - e.clientY; that.movingWin = w; // carcass if (that._effects["move"] == false) { that._carcass.x = that.movingWin.x; that._carcass.y = that.movingWin.y; that._carcass.w = parseInt(that.movingWin.style.width)+(_isIE?0:-2); that._carcass.h = parseInt(that.movingWin.style.height)+(_isIE?0:-2); that._carcass.style.left = that._carcass.x+"px"; that._carcass.style.top = that._carcass.y+"px"; that._carcass.style.width = that._carcass.w+"px"; that._carcass.style.height = that._carcass.h+"px"; // that._carcass.style.zIndex = that.movingWin.style.zIndex+that._getTopZIndex()+10; that._carcass.style.zIndex = that._getTopZIndex(true)+1; // that._carcass.style.cursor = "move"; that._carcass._keepInViewport = win._keepInViewport; } that._blockSwitcher(true); // cursor // that._engineGetWindowHeader(that.movingWin).style.cursor = "move"; // vpcover that._vpcover.style.zIndex = that.movingWin.style.zIndex-1; that._vpcover.style.display = ""; // e.returnValue = false; e.cancelBubble = true; w = null; return false; } this._engineGetWindowHeader(win).ondblclick = function(e) { var w = that.wins[this.idd]; // maximize/minimize if (!that._engineCheckHeaderMouseDown(w, e||event)) { return; } if (w._allowResizeGlobal && !w._isParked) { if (w._isMaximized == true) { that._restoreWindow(w); } else { that._maximizeWindow(w); } } // parkup/parkup /* if (w._isParkedAllowed && w.button("park").isEnabled()) { that._parkWindow(w); } */ } // set text /** * @desc: sets window's header text * @param: text * @type: public */ win.setText = function(text) { that._engineGetWindowLabel(this).innerHTML = text; } // get text /** * @desc: returns window's header text * @type: public */ win.getText = function() { return that._engineGetWindowLabel(this).innerHTML; } // het id by handler /** * @desc: returns window's id * @type: public */ win.getId = function() { return this.idd; } // show /** * @desc: shows a window * @type: public */ win.show = function() { that._showWindow(this); } // hide /** * @desc: hides a window * @type: public */ win.hide = function() { that._hideWindow(this); } // minimize /** * @desc: minimizes a window * @type: public */ win.minimize = function() { that._restoreWindow(this); } // maximize /** * @desc: maximizes a window * @type: public */ win.maximize = function() { that._maximizeWindow(this); } // close /** * @desc: closes a window * @type: public */ win.close = function() { that._closeWindow(this); } // park /** * @desc: parks a window (next action is based on window's current state) * @type: public */ win.park = function() { if (this._isParkedAllowed) { that._parkWindow(this); } } // stick/unstick /** * @desc: sticks a window * @type: public */ win.stick = function() { that._stickWindow(this); } /** * @desc: unsticks a window * @type: public */ win.unstick = function() { that._unstickWindow(this); } /** * @desc: returns true if the window is sticked * @type: public */ win.isSticked = function() { return this._isSticked; } // set icon /** * @desc: sets window's header icon * @param: iconEnabled - url to the icon for the enabled state * @param: iconDisabled - url to the icon for the disabled state * @type: public */ win.setIcon = function(iconEnabled, iconDisabled) { that._setWindowIcon(win, iconEnabled, iconDisabled); } // return array(iconEnabled, iconDisabled) icons for window /** * @desc: returns current window's header icon * @param: text * @type: public */ win.getIcon = function() { return that._getWindowIcon(this); } // clear icon /** * @desc: clears window's header icon * @type: public */ win.clearIcon = function() { that._clearWindowIcons(this); } // restore default window icon according the loaded skin /** * @desc: restores default window's header icon (based on skin) * @type: public */ win.restoreIcon = function() { that._restoreWindowIcons(this); } // /** * @desc: keeps a window within the viewport * @param: state - if true - window is not allowed to be placed outside the viewport if false - window is not allowed to be placed outside the viewport leaving only a small part of its header within the viewport * @type: public */ win.keepInViewport = function(state) { this._keepInViewport = state; } // ask window be/not be modal /** * @desc: makes a window modal/modeless * @param: state - true|false * @type: public */ win.setModal = function(state) { if (state == true) { if (that.modalWin != null || that.modalWin == this) return; that._setWindowModal(this, true); } else { if (that.modalWin != this) return; that._setWindowModal(this, false); } } // return true if window is modal /** * @desc: returns true if the window is modal * @type: public */ win.isModal = function() { return this._isModal; } // return true if window is hidden /** * @desc: returns true if the window is hidden * @type: public */ win.isHidden = function() { return that._isWindowHidden(this); } // return true if window is maximized /** * @desc: returns true if the window is maximized * @type: public */ win.isMaximized = function() { return this._isMaximized; } // return true if window is parkded /** * @desc: returns true if the window is parked * @type: public */ win.isParked = function() { return this._isParked; } // allow/deny park /** * @desc: allows a window to be parked * @type: public */ win.allowPark = function() { that._allowParking(this); } /** * @desc: denies a window from parking * @type: public */ win.denyPark = function() { that._denyParking(this); } /** * @desc: returns true if the window is parkable * @type: public */ win.isParkable = function() { return this._isParkedAllowed; } // allow/deny for allow window to be resized /** * @desc: allows a window to be resized * @type: public */ win.allowResize = function() { that._allowReszieGlob(this); } /** * @desc: denies a window from resizing * @type: public */ win.denyResize = function() { that._denyResize(this); } // return true if window resizeable /** * @desc: returns true if the window is resizable * @type: public */ win.isResizable = function() { return this._allowResizeGlobal; } // move /** * @desc: allows a window to be moved * @type: public */ win.allowMove = function() { if (!this._isMaximized) { this._allowMove = true; } this._allowMoveGlobal = true; } /** * @desc: denies a window from moving * @type: public */ win.denyMove = function() { this._allowMoveGlobal = false; } /** * @desc: returns true if the window is movable * @type: public */ win.isMovable = function() { return this._allowMoveGlobal; } // bring window to top and set focus /** * @desc: brings/sends a window on top (z-positioning) * @type: public */ win.bringToTop = function() { that._bringOnTop(this); that._makeActive(this); } // bring window to bottom and set focus /** * @desc: brings/sends a window to bottom (z-positioning) * @type: public */ win.bringToBottom = function() { that._bringOnBottom(this); } // return true if window is on top /** * @desc: returns true if the window is on top * @type: public */ win.isOnTop = function() { return that._isWindowOnTop(this); } // return true if window if on bottom /** * @desc: returns true if the window is on bottom * @type: public */ win.isOnBottom = function() { return that._isWindowOnBottom(this); } // set new position for window, if it will outlay the viewport it was moved into it visible area /** * @desc: sets window's position (moves a window to the point set by user) * @param: x - x coordinate * @param: y - y coordinate * @type: public */ win.setPosition = function(x, y) { this.x = x; this.y = y; // that._fixWindowPositionInViewport(this); // fixing mozilla artefakts /* if (_isFF) { this.h++; that._redrawWindow(this); this.h--; } */ that._engineFixWindowPosInViewport(this); that._engineRedrawWindowPos(this); // that._redrawWindow(this); } // return array(x, y) with position of window /** * @desc: returns current window's position * @type: public */ win.getPosition = function() { return new Array(this.x, this.y); } // set new dimension for window, if it will outlay the viewport it was moved into it visible area /** * @desc: sets window's dimension * @param: width * @param: height * @type: public */ win.setDimension = function(width, height) { // alert(2) if (width != null) { if (this.maxW != "auto") if (width > this.maxW) width = this.maxW; if (width < this.minW) width = this.minW; this.w = width; } if (height != null) { if (this.maxH != "auto") if (height > this.maxH) height = this.maxH; if (height < this.minH) height = this.minH; this.h = height; } that._fixWindowDimensionInViewport(this); // that._fixWindowPositionInViewport(this); that._engineFixWindowPosInViewport(this); // // that._redrawWindow(this); that._engineRedrawWindowSize(this); // this.updateNestedObjects(); } // return array(width, height) with current dimension of window /** * @desc: returns current window's dimension * @type: public */ win.getDimension = function() { return new Array(this.w, this.h); } // set max dimension for window /** * @desc: sets max window's dimension * @param: maxWidth * @param: maxHeight * @type: public */ win.setMaxDimension = function(maxWidth, maxHeight) { this.maxW = (isNaN(maxWidth)?"auto":maxWidth); this.maxH = (isNaN(maxHeight)?"auto":maxHeight); //that._redrawWindow(this); that._engineRedrawWindowSize(this); } // return array(maxWidth, maxheight) with max dimension for window /** * @desc: returns current max window's dimension * @type: public */ win.getMaxDimension = function() { return new Array(this.maxW, this.maxH); } // set min dimensuion for window /** * @desc: sets min window's dimension * @param: minWidth * @param: minHeight * @type: public */ win.setMinDimension = function(minWidth, minHeight) { if (minWidth != null) { this.minW = minWidth; } if (minHeight != null) { this.minH = minHeight; } that._fixWindowDimensionInViewport(this); // that._redrawWindow(this); that._engineRedrawWindowPos(this); } // return array(minWidth, minHeight) with min dimension for window /** * @desc: returns current min window's dimension * @type: public */ win.getMinDimension = function() { return new Array(this.minW, this.minH); } win._adjustToContent = function(cw, ch) { that._engineAdjustWindowToContent(this, cw, ch); } win._doOnAttachMenu = function() { that._engineRedrawWindowSize(this); this.updateNestedObjects(); } win._doOnAttachToolbar = function() { that._engineRedrawWindowSize(this); this.updateNestedObjects(); } win._doOnAttachStatusBar = function() { that._engineRedrawWindowSize(this); this.updateNestedObjects(); } win._doOnFrameMouseDown = function() { //this.bringToTop(); //防止点击父弹出窗口时遮住子弹出窗口 } win._doOnFrameContentLoaded = function() { that.callEvent("onContentLoaded",[this]); } /* win._doOnAttachURL = function(addIFrameEvents) { if (!addIFrameEvents) { // just call onContentLoaded that.callEvent("onContentLoaded", [this]); return; } // attach events into iframe if (_isIE) { // ie var w = this; var f = this._frame; f.onreadystatechange = function(a) { if (f.readyState == "complete") { try{f.contentWindow.document.body.onmousedown = function(){try{w.bringToTop();}catch(e){};};}catch(e){}; try{that.callEvent("onContentLoaded",[w]);}catch(e){} } } } else { // ff, opera, safari var w = this; var f = this._frame; f.onload = function() { try {f.contentWindow.onmousedown = function(){try{w.bringToTop();}catch(e){};};}catch(e){}; that.callEvent("onContentLoaded",[w]); } } } */ //#wind_buttons:09062008{ // add user button /** * @desc: adds a user button * @param: id - button's id * @param: pos - button's position * @param: title - button's tooltip * @param: label - button's name (according to css) * @type: public */ win.addUserButton = function(id, pos, title, label) { var userBtn = that._addUserButton(this, id, pos, title, label); return userBtn; } // remove user button /** * @desc: removes a user button * @param: id - button's id * @type: public */ win.removeUserButton = function(id) { if (!((id == "minmax1") || (id == "minmax2") || (id == "park") || (id == "close") || (id == "stick") || (id == "unstick") || (id == "help"))) { if (btn != null) { that._removeUserButton(this, id); } } } //#} /** * @desc: shows a progress indicator * @type: public */ win.progressOn = function() { that._engineSwitchWindowProgress(this, true); } /** * @desc: hides a progress indicator * @type: public */ win.progressOff = function() { that._engineSwitchWindowProgress(this, false); } /** * @desc: sets a window to the fullscreen mode * @param: state - true|false * @type: public */ win.setToFullScreen = function(state) { that._setWindowToFullScreen(this, state); } /** * @desc: shows window's header * @type: public */ win.showHeader = function() { that._engineSwitchWindowHeader(this, true); // that._showWindowHeader(this); } /** * @desc: hides window's header * @type: public */ win.hideHeader = function() { that._engineSwitchWindowHeader(this, false); // that._hideWindowHeader(this); } // win.progressOff(); // resize cursor modifications and handlers win.canStartResize = false; win.onmousemove = function(e) { if (_isIE && this._isMaximized) return true; e = e || event; var targetObj = e.target || e.srcElement; if (String(targetObj.className).search("dhtmlx_wins_resizer") < 0) targetObj = null; // resize not allowed if (!this._allowResize || this._allowResizeGlobal == false || !targetObj) { if (targetObj) { if (targetObj.style.cursor != "default") targetObj.style.cursor = "default"; } if (this.style.cursor != "default") this.style.cursor = "default"; this.canStartResize = false; return false; } // resize can't be realized if (that.resizingWin != null) return; if (that.movingWin != null) return; if (this._isParked) return; // coords var px = (_isIE||_isOpera?e.offsetX:e.layerX); var py = (_isIE||_isOpera?e.offsetY:e.layerY); // direction var resDir = that._engineAllowWindowResize(win, targetObj, px, py); if (resDir == null) { this.canStartResize = false; if (targetObj.style.cursor != "default") targetObj.style.cursor = "default"; if (this.style.cursor != "default") this.style.cursor = "default"; return; } // prepare that.resizingDirs = resDir; switch (that.resizingDirs) { case "border_left": targetObj.style.cursor = "w-resize"; this.resizeOffsetX = this.x - e.clientX; break; case "border_right": targetObj.style.cursor = "e-resize"; this.resizeOffsetXW = this.x + this.w - e.clientX; break; case "border_top": targetObj.style.cursor = "n-resize"; this.resizeOffsetY = this.y - e.clientY; break; case "border_bottom": targetObj.style.cursor = "n-resize"; this.resizeOffsetYH = this.y + this.h - e.clientY; break; case "corner_left": targetObj.style.cursor = "sw-resize"; this.resizeOffsetX = this.x - e.clientX; this.resizeOffsetYH = this.y + this.h - e.clientY; break; case "corner_up_left": targetObj.style.cursor = "nw-resize"; this.resizeOffsetY = this.y - e.clientY; this.resizeOffsetX = this.x - e.clientX; break; case "corner_right": targetObj.style.cursor = "nw-resize"; this.resizeOffsetXW = this.x + this.w - e.clientX; this.resizeOffsetYH = this.y + this.h - e.clientY; break; case "corner_up_right": targetObj.style.cursor = "sw-resize"; this.resizeOffsetY = this.y - e.clientY; this.resizeOffsetXW = this.x + this.w - e.clientX; break; } this.canStartResize = true; this.style.cursor = targetObj.style.cursor; return false; } win.onmousedown = function(e) { if (that._getActive() != this) that._makeActive(this); //that._bringOnTop(this); //防止点击父弹出窗口时遮住子弹出窗口 if (this.canStartResize) { that._blockSwitcher(true); that.resizingWin = this; if (!that._effects["resize"]) { that._carcass.x = that.resizingWin.x; that._carcass.y = that.resizingWin.y; that._carcass.w = that.resizingWin.w+(_isIE?0:-2); that._carcass.h = that.resizingWin.h+(_isIE?0:-2); that._carcass.style.left = that._carcass.x+"px"; that._carcass.style.top = that._carcass.y+"px"; that._carcass.style.width = that._carcass.w+"px"; that._carcass.style.height = that._carcass.h+"px"; that._carcass.style.zIndex = that._getTopZIndex(true)+1; that._carcass.style.cursor = this.style.cursor; that._carcass._keepInViewport = this._keepInViewport; that._carcass.style.display = ""; } // vpcover that._vpcover.style.zIndex = that.resizingWin.style.zIndex-1; that._vpcover.style.display = ""; if (this.layout) { this.callEvent("_onBeforeTryResize", [this]); } e = e||event; //e.returnValue = false; //e.cancelBubble = true; //return false; } } // add buttons this._addDefaultButtons(win); // //#wind_buttons:09062008{ // return button handler win.button = function(id) { var b = null; if (this.btns[id] != null) { b = this.btns[id]; } return b; } //#} // /** * @desc: centers a window in the viewport * @type: public */ win.center = function() { that._centerWindow(this, false); } /** * @desc: centers a window on the screen * @type: public */ win.centerOnScreen = function() { that._centerWindow(this, true); } // win._attachContent("empty", null); win._redraw = function() { that._engineRedrawWindowSize(this); } win.bringToTop(); this._engineRedrawWindowSize(win); //win.setDimension(win.w, win.h); //window.setTitemout(function(){win.setDimension(win.w+100, win.h+100);},100); // return this.wins[id]; } this.zIndexStep = 50; this._getTopZIndex = function(ignoreSticked) { var topZIndex = 0; for (var a in this.wins) { if (ignoreSticked == true) { if (this.wins[a].zi > topZIndex) { topZIndex = this.wins[a].zi; } } else { if (this.wins[a].zi > topZIndex && !this.wins[a]._isSticked) { topZIndex = this.wins[a].zi; } } } return topZIndex; } this.movingWin = null; //#wind_move:09062008{ this._moveWindow = function(e) { if (this.movingWin != null) { // if (!this.movingWin._allowMove || !this.movingWin._allowMoveGlobal) { return; } if (this._effects["move"] == true) { // // cursor if (this._engineGetWindowHeader(this.movingWin).style.cursor != "move") { this._engineGetWindowHeader(this.movingWin).style.cursor = "move"; } // this.movingWin.oldMoveX = this.movingWin.x; this.movingWin.oldMoveY = this.movingWin.y; // this.movingWin.x = e.clientX + this.movingWin.moveOffsetX; this.movingWin.y = e.clientY + this.movingWin.moveOffsetY; // // check out of viewport // this._fixWindowPositionInViewport(this.movingWin); this._engineFixWindowPosInViewport(this.movingWin); // // this._redrawWindow(this.movingWin); this._engineRedrawWindowPos(this.movingWin); // // if (this._compoEnabled) { this._compoFixMove(this.movingWin); } } else { // console.log(1) if (this._carcass.style.display != "") { this._carcass.style.display = ""; } // cursor if (this._carcass.style.cursor != "move") { this._carcass.style.cursor = "move"; } if (this._engineGetWindowHeader(this.movingWin).style.cursor != "move") { this._engineGetWindowHeader(this.movingWin).style.cursor = "move"; } // this._carcass.x = e.clientX + this.movingWin.moveOffsetX; this._carcass.y = e.clientY + this.movingWin.moveOffsetY; // this._fixWindowPositionInViewport(this._carcass); this._engineFixWindowPosInViewport(this._carcass); this._carcass.style.left = this._carcass.x+"px"; this._carcass.style.top = this._carcass.y+"px"; /* this._carcass.style.width = this.movingWin.style.width; this._carcass.style.height = this.movingWin.style.height; this._carcass.style.zIndex = this.movingWin.style.zIndex+10; this._carcass.style.display = ""; */ } } if (this.resizingWin != null) { // if (!this.resizingWin._allowResize) { return; } // // resize through left border if (this.resizingDirs == "border_left" || this.resizingDirs == "corner_left" || this.resizingDirs == "corner_up_left") { if (this._effects["resize"]) { var ofs = e.clientX + this.resizingWin.resizeOffsetX; var sign = (ofs > this.resizingWin.x ? -1 : 1); newW = this.resizingWin.w + Math.abs(ofs - this.resizingWin.x)*sign; if ((newW < this.resizingWin.minW) && (sign < 0)) { this.resizingWin.x = this.resizingWin.x + this.resizingWin.w - this.resizingWin.minW; this.resizingWin.w = this.resizingWin.minW; } else { this.resizingWin.w = newW; this.resizingWin.x = ofs; } this._engineRedrawWindowPos(this.resizingWin); this._engineRedrawWindowSize(this.resizingWin); } else { var ofs = e.clientX + this.resizingWin.resizeOffsetX; var sign = (ofs > this._carcass.x ? -1 : 1); newW = this._carcass.w + Math.abs(ofs - this._carcass.x)*sign; if (newW > this.resizingWin.maxW) { newW = this.resizingWin.maxW; ofs = this._carcass.x + this._carcass.w - this.resizingWin.maxW; } if ((newW < this.resizingWin.minW) && (sign < 0)) { this._carcass.x = this._carcass.x + this._carcass.w - this.resizingWin.minW; this._carcass.w = this.resizingWin.minW; } else { this._carcass.w = newW; this._carcass.x = ofs; } this._carcass.style.left = this._carcass.x+"px"; this._carcass.style.width = this._carcass.w+"px"; } } // resize through right border if (this.resizingDirs == "border_right" || this.resizingDirs == "corner_right" || this.resizingDirs == "corner_up_right") { if (this._effects["resize"]) { var ofs = e.clientX - (this.resizingWin.x + this.resizingWin.w) + this.resizingWin.resizeOffsetXW; newW = this.resizingWin.w + ofs; if (newW < this.resizingWin.minW) { newW = this.resizingWin.minW; } this.resizingWin.w = newW; this._engineRedrawWindowPos(this.resizingWin); this._engineRedrawWindowSize(this.resizingWin); } else { var ofs = e.clientX - (this._carcass.x + this._carcass.w) + this.resizingWin.resizeOffsetXW; newW = this._carcass.w + ofs; if (newW < this.resizingWin.minW) newW = this.resizingWin.minW; if (this.resizingWin.maxW != "auto") if (newW > this.resizingWin.maxW) newW = this.resizingWin.maxW; this._carcass.w = newW; this._carcass.style.width = this._carcass.w+"px"; } } // resize through bottom border if (this.resizingDirs == "border_bottom" || this.resizingDirs == "corner_left" || this.resizingDirs == "corner_right") { if (this._effects["resize"]) { var ofs = e.clientY - (this.resizingWin.y + this.resizingWin.h) + this.resizingWin.resizeOffsetYH; newH = this.resizingWin.h + ofs; if (newH < this.resizingWin.minH) newH = this.resizingWin.minH; this.resizingWin.h = newH; this._engineRedrawWindowPos(this.resizingWin); this._engineRedrawWindowSize(this.resizingWin); } else { var ofs = e.clientY - (this._carcass.y + this._carcass.h) + this.resizingWin.resizeOffsetYH; newH = this._carcass.h + ofs; if (newH < this.resizingWin.minH) newH = this.resizingWin.minH; if (newH > this.resizingWin.maxH) newH = this.resizingWin.maxH; this._carcass.h = newH; this._carcass.style.height = this._carcass.h+"px"; } } if (this.resizingDirs == "border_top" || this.resizingDirs == "corner_up_right" || this.resizingDirs == "corner_up_left") { if (this._effects["resize"]) { } else { var ofs = e.clientY + this.resizingWin.resizeOffsetY; var sign = (ofs > this.resizingWin.y ? -1 : 1); newH = this.resizingWin.h + Math.abs(ofs - this.resizingWin.y)*sign; if (newH > this.resizingWin.maxH) { newH = this.resizingWin.maxH; ofs = this.resizingWin.y + this.resizingWin.h - this.resizingWin.maxH; } if ((newH < this.resizingWin.minH) && (sign < 0)) { this._carcass.y = this._carcass.y + this._carcass.h - this.resizingWin.minH; this._carcass.h = this.resizingWin.minH; } else { this._carcass.h = newH+(_isIE?0:-2); this._carcass.y = ofs; } this._carcass.style.top = this._carcass.y+"px"; this._carcass.style.height = this._carcass.h+"px"; } } } } this._stopMove = function() { if (this.movingWin != null) { if (this._effects["move"]) { var win = this.movingWin; this.movingWin = null; this._blockSwitcher(false); // cursor // win.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].style.cursor = ""; // win.childNodes[2].style.cursor = ""; this._engineGetWindowHeader(win).style.cursor = ""; // fixing mozilla artefakts if (_isFF) { win.h++; // this._redrawWindow(win); that._engineRedrawWindowPos(win); win.h--; // this._redrawWindow(win); that._engineRedrawWindowPos(win); } } else { this._carcass.style.cursor = ""; this._carcass.style.display = "none"; var win = this.movingWin; this._engineGetWindowHeader(win).style.cursor = ""; this.movingWin = null; this._blockSwitcher(false); win.setPosition(parseInt(this._carcass.style.left), parseInt(this._carcass.style.top)); } // vpcover this._vpcover.style.display = "none"; // events if (!(win.oldMoveX == win.x && win.oldMoveY == win.y)) { // if (win.checkEvent("onMoveFinish")) { win.callEvent("onMoveFinish",[win]); } else { this.callEvent("onMoveFinish",[win]); } } } if (this.resizingWin != null) { var win = this.resizingWin; this.resizingWin = null; this._blockSwitcher(false); if (!this._effects["resize"]) { this._carcass.style.display = "none"; win.setDimension(this._carcass.w+(_isIE?0:2), this._carcass.h+(_isIE?0:2)); win.setPosition(this._carcass.x, this._carcass.y); } else { // sizes in attached components win.updateNestedObjects(); } // event in layout if (win.vs[win.av].layout) { win.vs[win.av].layout.callEvent("onResize", []); } // opera fix /* if (_isOpera) { win._content.childNodes[2].style.border="#FFFFFF 0px solid"; var w = win._content.childNodes[2]; window.setTimeout(function(){ w.style.border="none"; }, 1); } */ // vpcover this._vpcover.style.display = "none"; // events if (win.checkEvent("onResizeFinish")) { win.callEvent("onResizeFinish",[win]); } else { this.callEvent("onResizeFinish",[win]); } } } //#} // check viewport overflow /* this._fixWindowPositionInViewport = function(win) { return; var skin = (win._skinParams!=null?win._skinParams:this.skinParams[this.skin]); if (win._keepInViewport) { // keep strongly in viewport if (win.x < 0) { win.x = 0; } if (win.x + win.w > this.vp.offsetWidth) { win.x = this.vp.offsetWidth - win.w; } // if (win.y < 0) { win.y = 0; } if (win.y + win.h > this.vp.offsetHeight) { win.y = this.vp.offsetHeight - win.h; } if (win.y < 0) { win.y = 0; } } else { // if (win.y < 0) { win.y = 0; } if (win.y + skin["header_height"] > this.vp.offsetHeight) { win.y = this.vp.offsetHeight - skin["header_height"]; } if (win.y < 0) { win.y = 0; } if (win.x + win.w - 10 < 0) { win.x = 10 - win.w; } if (win.x > this.vp.offsetWidth - 10) { win.x = this.vp.offsetWidth - 10; } } } */ // check and correct window dimensions this._fixWindowDimensionInViewport = function(win) { if (win.w < win.minW) { win.w = win.minW; } if (win._isParked) return; if (win.h < win.minH) { win.h = win.minH; } } this._bringOnTop = function(win) { var cZIndex = win.zi; var topZIndex = this._getTopZIndex(win._isSticked); for (var a in this.wins) { if (this.wins[a] != win) { if (win._isSticked || (!win._isSticked && !this.wins[a]._isSticked)) { if (this.wins[a].zi > cZIndex) { this.wins[a].zi = this.wins[a].zi - this.zIndexStep; this.wins[a].style.zIndex = this.wins[a].zi; } } } } win.zi = topZIndex; win.style.zIndex = win.zi; } this._makeActive = function(win, ignoreFocusEvent) { for (var a in this.wins) { if (this.wins[a] == win) { var needEvent = false; if (this.wins[a].className != "dhtmlx_window_active" && !ignoreFocusEvent) { needEvent = true; } this.wins[a].className = "dhtmlx_window_active"; this._engineUpdateWindowIcon(this.wins[a], this.wins[a].icons[0]); if (needEvent == true) { if (win.checkEvent("onFocus")) { win.callEvent("onFocus",[win]); } else { this.callEvent("onFocus",[win]); } } } else { this.wins[a].className = "dhtmlx_window_inactive"; this._engineUpdateWindowIcon(this.wins[a], this.wins[a].icons[1]); } } } this._getActive = function() { var win = null; for (var a in this.wins) { if (this.wins[a].className == "dhtmlx_window_active") { win = this.wins[a]; } } return win; } this._centerWindow = function(win, onScreen) { if (win._isMaximized == true) return; // if (win._isParked == true) return; if (onScreen == true) { var vpw = (_isIE?document.body.offsetWidth:window.innerWidth); var vph = (_isIE?document.body.offsetHeight:window.innerHeight); } else { var vpw = (this.vp==document.body?document.body.offsetWidth:(Number(parseInt(this.vp.style.width))&&String(this.vp.style.width).search("%")==-1?parseInt(this.vp.style.width):this.vp.offsetWidth)); var vph = (this.vp==document.body?document.body.offsetHeight:(Number(parseInt(this.vp.style.height))&&String(this.vp.style.height).search("%")==-1?parseInt(this.vp.style.height):this.vp.offsetHeight)); } var newX = Math.round((vpw/2) - (win.w/2)); var newY = Math.round((vph/2) - (win.h/2)); win.x = newX; win.y = newY; // this._fixWindowPositionInViewport(win); this._engineFixWindowPosInViewport(win); // this._redrawWindow(win); this._engineRedrawWindowPos(win); } this._addDefaultButtons = function(win) { //#wind_buttons:09062008{ // stick var btnStick = this._engineGetWindowButton(win, "stick"); btnStick.title = this.i18n.stick; btnStick.isVisible = false; btnStick.style.display = "none"; btnStick._isEnabled = true; btnStick.isPressed = false; btnStick.label = "stick"; btnStick._doOnClick = function() { this.isPressed = true; that._stickWindow(win); } // sticked var btnSticked = this._engineGetWindowButton(win, "sticked"); btnSticked.title = this.i18n.unstick; btnSticked.isVisible = false; btnSticked.style.display = "none"; btnSticked._isEnabled = true; btnSticked.isPressed = false; btnSticked.label = "sticked"; btnSticked._doOnClick = function() { this.isPressed = false; that._unstickWindow(win); } // help var btnHelp = this._engineGetWindowButton(win, "help"); btnHelp.title = this.i18n.help; btnHelp.isVisible = false; btnHelp.style.display = "none"; btnHelp._isEnabled = true; btnHelp.isPressed = false; btnHelp.label = "help"; btnHelp._doOnClick = function() { that._needHelp(win); } // park var btnPark = this._engineGetWindowButton(win, "park"); btnPark.titleIfParked = this.i18n.parkdown; btnPark.titleIfNotParked = this.i18n.parkup; btnPark.title = btnPark.titleIfNotParked; btnPark.isVisible = false; //改为false By Rd 2015-12-11 btnPark._isEnabled = false; //改为false btnPark.style.display = "none"; btnPark.isPressed = false; btnPark.label = "park"; btnPark._doOnClick = function() { that._parkWindow(win); } // minmax maximize var btnMinMax1 = this._engineGetWindowButton(win, "minmax1"); btnMinMax1.title = this.i18n.maximize; btnMinMax1.isVisible = false; //改为false 隐藏图标 btnMinMax1._isEnabled = false; //改为false By Rd 2015-12-11 btnMinMax1.style.display = "none"; btnMinMax1.isPressed = false; btnMinMax1.label = "minmax1"; btnMinMax1._doOnClick = function() { that._maximizeWindow(win); } // minmax restore var btnMinMax2 = this._engineGetWindowButton(win, "minmax2"); btnMinMax2.title = this.i18n.restore; btnMinMax2.isVisible = false; btnMinMax2.style.display = "none"; btnMinMax2._isEnabled = false; btnMinMax2.isPressed = false; btnMinMax2.label = "minmax2"; btnMinMax2._doOnClick = function() { that._restoreWindow(win); } // close var btnClose = this._engineGetWindowButton(win, "close"); btnClose.title = this.i18n.close; btnClose.isVisible = true; btnClose._isEnabled = true; btnClose.isPressed = false; btnClose.label = "close"; btnClose._doOnClick = function() { that._closeWindow(win); } // dock var btnDock = this._engineGetWindowButton(win, "dock"); btnDock.title = this.i18n.dock; btnDock.style.display = "none"; btnDock.isVisible = false; btnDock._isEnabled = true; btnDock.isPressed = false; btnDock.label = "dock"; btnDock._doOnClick = function() { // that._closeWindow(win); } // win._isSticked = false; win._isParked = false; win._isParkedAllowed = true; win._isMaximized = false; win._isDocked = false; // win.btns = {}; win.btns["stick"] = btnStick; win.btns["sticked"] = btnSticked; win.btns["help"] = btnHelp; win.btns["park"] = btnPark; win.btns["minmax1"] = btnMinMax1; win.btns["minmax2"] = btnMinMax2; win.btns["close"] = btnClose; win.btns["dock"] = btnDock; // var b = win.childNodes[3].childNodes[0].childNodes[0].childNodes[0]; // events for (var a in win.btns) { /* var btn = win.btns[a]; // add on header var td = document.createElement("TD"); td.className = "dhtmlx_wins_btn_" + (btn.isVisible ? "visible" : "hidden"); b.appendChild(td); td.appendChild(btn); // attach events */ this._attachEventsOnButton(win, win.btns[a]); // // btn = null; } //*/ //#} } //#wind_buttons:09062008{ this._attachEventsOnButton = function(win, btn) { // add events //bySPACE 20190618 :去掉悬浮和按下时的样式 btn.onmouseover = function() { if (this._isEnabled) { // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_over_"+(this.isPressed?"pressed":"default"); } else { // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_disabled"; } } btn.onmouseout = function() { if (this._isEnabled) { this.isPressed = false; // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_default"; } else { // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_disabled"; } } btn.onmousedown = function() { if (this._isEnabled) { this.isPressed = true; // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_over_pressed"; } else { // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_disabled"; } } btn.onmouseup = function() { if (this._isEnabled) { var wasPressed = this.isPressed; this.isPressed = false; // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_over_default"; if (wasPressed) { // events if (this.checkEvent("onClick")) { this.callEvent("onClick", [win, this]); } else { this._doOnClick(); } } } else { // this.className = "dhtmlx_wins_btns_button dhtmlx_button_"+this.label+"_disabled"; } } /** * @desc: shows a button * @type: public */ btn.show = function() { that._showButton(win, this.label); } /** * @desc: hides a button * @type: public */ btn.hide = function() { that._hideButton(win, this.label); } /** * @desc: enables a button * @type: public */ btn.enable = function() { that._enableButton(win, this.label); } /** * @desc: disables a button * @type: public */ btn.disable = function() { that._disableButton(win, this.label); } /** * @desc: checks if a button is enabled * @returns: true if enabled, otherwise - false * @type: public */ btn.isEnabled = function() { return this._isEnabled; } /** * @desc: checks if a button is hidden * @returns: true if hidden, otherwise - false * @type: public */ btn.isHidden = function() { return (!this.isVisible); } dhtmlxEventable(btn); } //#} //#wind_park:09062008{ this._parkWindow = function(win, parkBeforeMinMax) { if (!win._isParkedAllowed && !parkBeforeMinMax) return; if (this.enableParkEffect && win.parkBusy) return; if (win._isParked) { // park down if (this.enableParkEffect && !parkBeforeMinMax) { // effect win.parkBusy = true; this._doParkDown(win); } else { // no effect win.h = win.lastParkH; this._engineRedrawWindowSize(win); this._engineDoOnWindowParkDown(win); win.updateNestedObjects(); win.btns["park"].title = win.btns["park"].titleIfNotParked; if (win._allowResizeGlobal == true) { this._enableButton(win, "minmax1"); this._enableButton(win, "minmax2"); } win._isParked = false; // onParkDown event if (!parkBeforeMinMax) if (win.checkEvent("onParkDown")) win.callEvent("onParkDown", [win]); else this.callEvent("onParkDown", [win]); } } else { // park up if (this.enableParkEffect && !parkBeforeMinMax) { win.lastParkH = (String(win.h).search(/\%$/)==-1?win.h:win.offsetHeight); if (win._allowResizeGlobal == true) { this._disableButton(win, "minmax1"); this._disableButton(win, "minmax2"); } if (this.enableParkEffect) { win.parkBusy = true; this._doParkUp(win); } else { var skinParams = (win._skinParams!=null?win._skinParams:this.skinParams[this.skin]); win.h = skinParams["header_height"] + skinParams["border_bottom_height"]; win.btns["park"].title = win.btns["park"].titleIfParked; } } else { win.lastParkH = (String(win.h).search(/\%$/)==-1?win.h:win.offsetHeight); win.h = this._engineGetWindowParkedHeight(win); this._engineRedrawWindowSize(win); this._engineDoOnWindowParkUp(win); win.btns["park"].title = win.btns["park"].titleIfParked; win._isParked = true; // onParkUp event if (!parkBeforeMinMax) if (win.checkEvent("onParkUp")) win.callEvent("onParkUp", [win]); else this.callEvent("onParkUp", [win]); } } } this._allowParking = function(win) { win._isParkedAllowed = true; this._enableButton(win, "park"); } this._denyParking = function(win) { win._isParkedAllowed = false; this._disableButton(win, "park"); } // park with effects this.enableParkEffect = false; this.parkStartSpeed = 80; this.parkSpeed = this.parkStartSpeed; this.parkTM = null; this.parkTMTime = 5; this._doParkUp = function(win) { if (String(win.h).search(/\%$/) != -1) { win.h = win.offsetHeight; } win.h -= this.parkSpeed; var hh = this._engineGetWindowParkedHeight(win); if (win.h <= hh) { // end purkUp win.h = hh; this._engineGetWindowButton(win, "park").title = this._engineGetWindowButton(win, "park").titleIfParked; win._isParked = true; win.parkBusy = false; this._engineRedrawWindowSize(win); this._engineDoOnWindowParkUp(win); if (win.checkEvent("onParkUp")) win.callEvent("onParkUp", [win]); else this.callEvent("onParkUp", [win]); } else { // continue purkUp this._engineRedrawWindowSize(win); this.parkTM = window.setTimeout(function(){that._doParkUp(win);}, this.parkTMTime); } } this._doParkDown = function(win) { win.h += this.parkSpeed; if (win.h >= win.lastParkH) { win.h = win.lastParkH; this._engineGetWindowButton(win, "park").title = this._engineGetWindowButton(win, "park").titleIfNotParked; if (win._allowResizeGlobal == true) { this._enableButton(win, "minmax1"); this._enableButton(win, "minmax2"); } win._isParked = false; win.parkBusy = false; this._engineRedrawWindowSize(win); win.updateNestedObjects(); this._engineDoOnWindowParkDown(win); if (win.checkEvent("onParkDown")) win.callEvent("onParkDown", [win]); else this.callEvent("onParkDown", [win]); } else { // continue purkDown this._engineRedrawWindowSize(win); this.parkTM = window.setTimeout(function(){that._doParkDown(win);}, this.parkTMTime); } } //#} //#wind_buttons:09062008{ this._enableButton = function(win, btn) { var button = this._engineGetWindowButton(win, btn); if (!button) return; button._isEnabled = true; button.className = "dhtmlx_wins_btns_button dhtmlx_button_"+button.label+"_default"; } this._disableButton = function(win, btn) { var button = this._engineGetWindowButton(win, btn); if (!button) return; button._isEnabled = false; button.className = "dhtmlx_wins_btns_button dhtmlx_button_"+win.btns[btn].label+"_disabled"; } //#} // resize this._allowReszieGlob = function(win) { win._allowResizeGlobal = true; this._enableButton(win, "minmax1"); this._enableButton(win, "minmax2"); } this._denyResize = function(win) { win._allowResizeGlobal = false; this._disableButton(win, "minmax1"); this._disableButton(win, "minmax2"); } this._maximizeWindow = function(win) { if (win._allowResizeGlobal == false) return; var isParkedBeforeMinMax = win._isParked; if (isParkedBeforeMinMax) this._parkWindow(win, true); win.lastMaximizeX = win.x; win.lastMaximizeY = win.y; win.lastMaximizeW = win.w; win.lastMaximizeH = win.h; // put window into top/left corner if complete maximize or center new maximized window if maxDimension set if (win.maxW != "auto" && win.maxW != "auto") { win.x = Math.round(win.x+(win.w-win.maxW)/2); win.y = Math.round(win.y+(win.h-win.maxH)/2); win._allowMove = true; } else { win.x = 0; win.y = 0; win._allowMove = false; } win._isMaximized = true; win._allowResize = false; // win.w = (win.maxW == "auto" ? (this.vp == document.body ? document.body.offsetWidth:parseInt(this.vp.style.width)) : win.maxW); // win.h = (win.maxH == "auto" ? (this.vp == document.body ? document.body.offsetHeight:parseInt(this.vp.style.height)) : win.maxH); // win.w = (win.maxW == "auto" ? (this.vp == document.body ? "100%" : (this.vp.style.width != "" && String(this.vp.style.width).search("%") == -1 ? parseInt(this.vp.style.width) : this.vp.offsetWidth)) : win.maxW); win.h = (win.maxH == "auto" ? (this.vp == document.body ? "100%" : (this.vp.style.height != "" && String(this.vp.style.width).search("%") == -1 ? parseInt(this.vp.style.height) : this.vp.offsetHeight)) : win.maxH); // this._hideButton(win, "minmax1"); this._showButton(win, "minmax2"); this._engineRedrawWindowPos(win); if (isParkedBeforeMinMax) { this._parkWindow(win, true); } else { this._engineRedrawWindowSize(win); win.updateNestedObjects(); } // event if (win.checkEvent("onMaximize")) win.callEvent("onMaximize", [win]); else this.callEvent("onMaximize", [win]); } this._restoreWindow = function(win) { if (win._allowResizeGlobal == false) return; if (win.layout) win.layout._defineWindowMinDimension(win); var isParkedBeforeMinMax = win._isParked; if (isParkedBeforeMinMax) this._parkWindow(win, true); // put window to prev place if auto max dimension or center if (win.maxW != "auto" && win.maxW != "auto") { win.x = Math.round(win.x+(win.w-win.lastMaximizeW)/2); win.y = Math.round(win.y+(win.h-win.lastMaximizeH)/2); } else { win.x = win.lastMaximizeX; win.y = win.lastMaximizeY; } win.w = win.lastMaximizeW; win.h = win.lastMaximizeH; win._isMaximized = false; win._allowMove = win._allowMoveGlobal; win._allowResize = true; this._fixWindowDimensionInViewport(win); this._hideButton(win, "minmax2"); this._showButton(win, "minmax1"); this._engineRedrawWindowPos(win); if (isParkedBeforeMinMax) { this._parkWindow(win, true); } else { this._engineRedrawWindowSize(win); win.updateNestedObjects(); } // events if (win.checkEvent("onMinimize")) win.callEvent("onMinimize", [win]); else this.callEvent("onMinimize", [win]); } //#wind_buttons:09062008{ this._showButton = function(win, btn) { var button = this._engineGetWindowButton(win, btn); if (!button) return; button.isVisible = true; if(win.unAllowButton){ }else{ button.style.display = ""; } this._engineRedrawWindowTitle(win); } this._hideButton = function(win, btn) { var button = this._engineGetWindowButton(win, btn); if (!button) return; button.isVisible = false; button.style.display = "none"; this._engineRedrawWindowTitle(win); } //#} this._showWindow = function(win) { win.style.display = ""; // event if (win.checkEvent("onShow")) { win.callEvent("onShow", [win]); } else { this.callEvent("onShow", [win]); } // fixed 24.03.2008 var w = this._getActive(); if (w == null) { this._bringOnTop(win); this._makeActive(win); } else if (this._isWindowHidden(w)) { this._bringOnTop(win); this._makeActive(win); } } this._hideWindow = function(win) { win.style.display = "none"; // event if (win.checkEvent("onHide")) { win.callEvent("onHide", [win]); } else { this.callEvent("onHide", [win]); } // fixed 24.03.2008 var w = this.getTopmostWindow(true); if (w != null) { this._bringOnTop(w); this._makeActive(w); } } this._isWindowHidden = function(win) { var isHidden = (win.style.display == "none"); return isHidden; } this._closeWindow = function(win) { // ie focus fix if (this._focusFixIE) { this._focusFixIE.style.top = (this.vp==document.body?0:getAbsoluteTop(this.vp))+win.y+"px"; this._focusFixIE.focus(); } // event if (win.checkEvent("onClose")) { if (!win.callEvent("onClose", [win])) return; } else { if(!this.callEvent("onClose", [win])) return; } // closing // for (var a in win.btns) { this._removeButtonGlobal(win, a, win.btns[a]); } this._removeWindowGlobal(win); /* this.vp.removeChild(win); delete this.wins[win.idd]; // make active latest window */ var latest = { "zi": 0 }; for (var a in this.wins) { if (this.wins[a].zi > latest.zi) { latest = this.wins[a]; } } if (latest != null) { this._makeActive(latest); } if (_isFF && this.vp != document.body) { this.vp.style.display = "none"; var vp = this.vp; window.setTimeout(function(){vp.style.display="";},1); } } this._needHelp = function(win) { // event only if (win.checkEvent("onHelp")) { win.callEvent("onHelp", [win]); } else { this.callEvent("onHelp", [win]); } } this._setWindowIcon = function(win, iconEnabled, iconDisabled) { win.iconsPresent = true; win.icons[0] = this.imagePath + iconEnabled; win.icons[1] = this.imagePath + iconDisabled; this._engineUpdateWindowIcon(win, win.icons[win.isOnTop()?0:1]); } this._getWindowIcon = function(win) { if (win.iconsPresent) { return new Array(win.icons[0], win.icons[1]); } else { return new Array(null, null); } } this._clearWindowIcons = function(win) { win.iconsPresent = false; win.icons[0] = this.imagePath + this.pathPrefix + this.skin + "/active/icon_blank.gif"; win.icons[1] = this.imagePath + this.pathPrefix + this.skin + "/inactive/icon_blank.gif"; this._engineUpdateWindowIcon(win, win.icons[win.isOnTop()?0:1]); } this._restoreWindowIcons = function(win) { win.iconsPresent = true; win.icons[0] = this.imagePath + this.pathPrefix + this.skin + "/active/icon_normal.gif"; win.icons[1] = this.imagePath + this.pathPrefix + this.skin + "/inactive/icon_normal.gif"; this._engineUpdateWindowIcon(win, win.icons[win.className=="dhtmlx_window_active"?0:1]); } this._attachWindowContentTo = function(win, obj, w, h) { var data = this._engineGetWindowContent(win).parentNode; data.parentNode.removeChild(data); win.hide(); data.style.left = "0px"; data.style.top = "0px"; data.style.width = (w!=null?w:obj.offsetWidth)+"px"; data.style.height = (h!=null?h:obj.offsetHeight)+"px"; data.style.position = "relative"; // obj.appendChild(data); this._engineGetWindowContent(win).style.width = data.style.width; this._engineGetWindowContent(win).style.height = data.style.height; /* var data = win._content; data.parentNode.removeChild(data); win.hide(); // data.style.left = "0px"; data.style.top = "0px"; data.style.width = (w!=null?w:obj.offsetWidth)+"px"; data.style.height = (h!=null?h:obj.offsetHeight)+"px"; data.style.position = "relative"; // obj.appendChild(data); */ } this._setWindowToFullScreen = function(win, state) { if (state == true) { // var data = win._content; data.parentNode.removeChild(data); win.hide(); win._isFullScreened = true; // data.style.left = "0px"; data.style.top = "0px"; // data.style.width = document.body.offsetWidth+"px"; // data.style.height = document.body.offsetHeight+"px"; data.style.width = document.body.offsetWidth-(_isIE?4:0)+"px"; if (document.body.offsetHeight == 0) { if (window.innerHeight) { data.style.height = window.innerHeight+"px"; } else { data.style.height = document.body.scrollHeight+"px"; } } else { data.style.height = document.body.offsetHeight-(_isIE?4:0)+"px"; } data.style.position = "absolute"; document.body.appendChild(data); } else if (state == false) { var data = win.childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1]; var base = win._content; document.body.removeChild(base); data.appendChild(base); win._isFullScreened = false; win.setDimension(win.w, win.h); // win.show(); win.bringToTop(); win.center(); // } win.updateNestedObjects(); } this._isWindowOnTop = function(win) { var state = (this.getTopmostWindow() == win); return state; } this._bringOnBottom = function(win) { for (var a in this.wins) { if (this.wins[a].zi < win.zi) { this.wins[a].zi += this.zIndexStep; this.wins[a].style.zIndex = this.wins[a].zi; } } win.zi = 50; win.style.zIndex = win.zi; // this._makeActive(this.getTopmostWindow()); } this._isWindowOnBottom = function(win) { var state = true; for (var a in this.wins) { if (this.wins[a] != win) { state = state && (this.wins[a].zi > win.zi); } } return state; } this._stickWindow = function(win) { win._isSticked = true; this._hideButton(win, "stick"); this._showButton(win, "sticked"); this._bringOnTop(win); } this._unstickWindow = function(win) { win._isSticked = false; this._hideButton(win, "sticked"); this._showButton(win, "stick"); this._bringOnTopAnyStickedWindows(); } //#wind_buttons:09062008{ // add user button this._addUserButton = function(win, id, pos, title) { var userButton = this._engineAddUserButton(win, id, pos); userButton.title = title; userButton.isVisible = true; userButton._isEnabled = true; userButton.isPressed = false; userButton.label = id; win.btns[id] = userButton; userButton._doOnClick = function() {} // attach events this._attachEventsOnButton(win, userButton); } // remove user button this._removeUserButton = function(win, buttonId) { this._removeButtonGlobal(win, buttonId); } //#} // add iframe blockers before drag and resize this._blockSwitcher = function(state) { for (var a in this.wins) { if (state == true) { this.wins[a].showCoverBlocker(); } else { this.wins[a].hideCoverBlocker(); } } } this.resizingWin = null; this.modalWin = null; this.resizingDirs = "none"; // init functions // focus fix ie case if (_isIE) { this._focusFixIE = document.createElement("INPUT"); this._focusFixIE.className = "dhx_windows_ieonclosefocusfix"; this._focusFixIE.style.position = "absolute"; this._focusFixIE.style.width = "1px"; this._focusFixIE.style.height = "1px"; this._focusFixIE.style.border = "none"; this._focusFixIE.style.background = "none"; this._focusFixIE.style.left = "-10px"; this._focusFixIE.style.fontSize = "1px"; document.body.appendChild(this._focusFixIE); } this._createViewport(); //#wind_move:09062008{ this._doOnMouseUp = function() { if (that != null) that._stopMove(); } this._doOnMoseMove = function(e) { e = e||event; if (that != null) that._moveWindow(e); } //#} this._resizeTM = null; this._resizeTMTime = 200; this._lw = null; this._doOnResize = function() { if (that._lw != document.documentElement.clientHeight) { window.clearTimeout(that._resizeTM); that._resizeTM = window.setTimeout(function(){that._autoResizeViewport();}, that._resizeTMTime); } that._lw = document.documentElement.clientHeight; } this._doOnUnload = function() { that.unload(); } this._doOnSelectStart = function(e) { e = e||event; if (that.movingWin != null || that.resizingWin != null) e.returnValue = false; } if (_isIE) { document.body.attachEvent("onselectstart", this._doOnSelectStart); } dhtmlxEvent(window, "resize", this._doOnResize); dhtmlxEvent(document.body, "unload", this._doOnUnload); //#wind_move:09062008{ dhtmlxEvent(document.body, "mouseup", this._doOnMouseUp); dhtmlxEvent(this.vp, "mousemove", this._doOnMoseMove); dhtmlxEvent(this.vp, "mouseup", this._doOnMouseUp); //#} this._setWindowModal = function(win, state) { if (state == true) { this._makeActive(win); this._bringOnTop(win); this.modalWin = win; win._isModal = true; // this.modalCoverI.style.zIndex = win.zi - 2; this.modalCoverI.style.display = ""; // this.modalCoverD.style.zIndex = win.zi - 2; this.modalCoverD.style.display = ""; } else { this.modalWin = null; win._isModal = false; // this.modalCoverI.style.zIndex = 0; this.modalCoverI.style.display = "none"; // this.modalCoverD.style.zIndex = 0; this.modalCoverD.style.display = "none"; } } this._bringOnTopAnyStickedWindows = function() { var wins = new Array(); for (var a in this.wins) { if (this.wins[a]._isSticked) { wins[wins.length] = this.wins[a]; } } for (var q=0; q<wins.length; q++) { this._bringOnTop(wins[q]); } // if no more sticked search any non-top active and move them on top if (wins.length == 0) { for (var a in this.wins) { if (this.wins[a].className == "dhtmlx_window_active") { this._bringOnTop(this.wins[a]); } } } } /** * @desc: unloads an object and clears memory * @param: id - button's id * @type: public */ this.unload = function() { this._clearAll(); } this._removeButtonGlobal = function(win, buttonId) { //#wind_buttons:09062008{ if (!win.btns[buttonId]) return; var btn = win.btns[buttonId]; btn.title = null; btn.isVisible = null; btn._isEnabled = null; btn.isPressed = null; btn.label = null; btn._doOnClick = null; btn.attachEvent = null; btn.callEvent = null; btn.checkEvent = null; btn.detachEvent = null; btn.disable = null; btn.enable = null; btn.eventCatcher = null; btn.hide = null; btn.isEnabled = null; btn.isHidden = null; btn.show = null; btn.onmousedown = null; btn.onmouseout = null; btn.onmouseover = null; btn.onmouseup = null; if (btn.parentNode) btn.parentNode.removeChild(btn); btn = null; win.btns[buttonId] = null; //#} } this._removeWindowGlobal = function(win) { // modal check if (this.modalWin == win) this._setWindowModal(win, false); var idd = win.idd; // clear attached frame events /* if (win._frame) { if (_isIE) { try { win._frame.onreadystatechange = null; win._frame.contentWindow.document.body.onmousedown = null; win._frame.onload = null; } catch(e) {} } else { try { win._frame.contentWindow.onmousedown = null; win._frame.onload = null; } catch(e) {} } } */ // clear cover events win.coverBlocker().onselectstart = null; // remove dhxcont win._dhxContDestruct(); // remove onselect event this._engineDiableOnSelectInWindow(win, false); // remove header events this._engineGetWindowHeader(win).onmousedown = null; this._engineGetWindowHeader(win).ondblclick = null; // clear links this.movingWin = null; this.resizingWin = null; // clearing buttons for (var a in win.btns) this._removeButtonGlobal(win, a); win.btns = null; // clear win other events win._adjustToContent = null; win._doOnAttachMenu = null; win._doOnAttachStatusBar = null; win._doOnAttachToolbar = null; // win._doOnAttachURL = null; win._redraw = null; win.addUserButton = null; win.allowMove = null; win.allowPark = null; win.allowResize = null; win.attachEvent = null; win.bringToBottom = null; win.bringToTop = null; win.callEvent = null; win.center = null; win.centerOnScreen = null; win.checkEvent = null; win.clearIcon = null; win.close = null; win.denyMove = null; win.denyPark = null; win.denyResize = null; win.detachEvent = null; win.eventCatcher = null; win.getDimension = null; win.getIcon = null; win.getId = null; win.getMaxDimension = null; win.getMinDimension = null; win.getPosition = null; win.getText = null; win.hide = null; win.hideHeader = null; win.isHidden = null; win.isMaximized = null; win.isModal = null; win.isMovable = null; win.isOnBottom = null; win.isOnTop = null; win.isParkable = null; win.isParked = null; win.isResizable = null; win.isSticked = null; win.keepInViewport = null; win.maximize = null; win.minimize = null; win.park = null; win.progressOff = null; win.progressOn = null; win.removeUserButton = null; win.restoreIcon = null; win.setDimension = null; win.setIcon = null; win.setMaxDimension = null; win.setMinDimension = null; win.setModal = null; win.setPosition = null; win.setText = null; win.setToFullScreen = null; win.show = null; win.showHeader = null; win.stick = null; win.unstick = null; win.onmousemove = null; win.onmousedown = null; win.icons = null; win.button = null; win._dhxContDestruct = null; win.dhxContGlobal.obj = null; win.dhxContGlobal.setContent = null; win.dhxContGlobal.dhxcont = null; win.dhxContGlobal = null; // frame if (win._frame) { while (win._frame.childNodes.length > 0) win._frame.removeChild(win._frame.childNodes[0]); win._frame = null; } // clear functions this._parseNestedForEvents(win); // remove from page win._content = null; win.innerHTML = ""; win.parentNode.removeChild(win); win = null; this.wins[idd] = null; delete this.wins[idd]; idd = null; } this._removeEvents = function(obj) { obj.onmouseover = null; obj.onmouseout = null; obj.onmousemove = null; obj.onclick = null; obj.ondblclick = null; obj.onmouseenter = null; obj.onmouseleave = null; obj.onmouseup = null; obj.onmousewheel = null; obj.onmousedown = null; obj.onselectstart = null; obj.onfocus = null; obj.style.display = ""; } this._parseNestedForEvents = function(obj) { this._removeEvents(obj); for (var q=0; q<obj.childNodes.length; q++) { if (obj.childNodes[q].tagName != null) { this._parseNestedForEvents(obj.childNodes[q]); } } } this._clearAll = function() { // remove events attached to document.body/window/viewport this._clearDocumentEvents(); // remove windows for (var a in this.wins) this._removeWindowGlobal(this.wins[a]); this.wins = null; // remove carcass this._parseNestedForEvents(this._carcass); while (this._carcass.childNodes.length > 0) this._carcass.removeChild(this._carcass.childNodes[0]); this._carcass.onselectstart = null; this._carcass.parentNode.removeChild(this._carcass); this._carcass = null; // remove viewport cover this._parseNestedForEvents(this._vpcover); this._vpcover.parentNode.removeChild(this._vpcover); this._vpcover = null; // remove modal covers this._parseNestedForEvents(this.modalCoverD); this.modalCoverD.parentNode.removeChild(this.modalCoverD); this.modalCoverD = null; this._parseNestedForEvents(this.modalCoverI); this.modalCoverI.parentNode.removeChild(this.modalCoverI); this.modalCoverI = null; // remove viewport if (this.vp.autocreated == true) this.vp.parentNode.removeChild(this.vp); this.vp = null; // skin params for (var a in this.skinParams) { delete this.skinParams[a]; } this.skinParams = null; this._effects = null; this._engineSkinParams = null; wins = null; this._addDefaultButtons = null; this._addUserButton = null; this._allowParking = null; this._allowReszieGlob = null; this._attachEventsOnButton = null; this._attachWindowContentTo = null; this._autoResizeViewport = null; this._blockSwitcher = null; this._bringOnBottom = null; this._bringOnTop = null; this._bringOnTopAnyStickedWindows = null; this._centerWindow = null; this._clearAll = null; this._clearDocumentEvents = null; this._clearWindowIcons = null; this._closeWindow = null; this._createViewport = null; this._denyParking = null; this._denyResize = null; this._dhx_Engine = null; this._disableButton = null; this._doOnMoseMove = null; this._doOnMouseUp = null; this._doOnResize = null; this._doOnSelectStart = null; this._doOnUnload = null; this._doParkDown = null; this._doParkUp = null; this._enableButton = null; this._engineAddUserButton = null; this._engineAdjustWindowToContent = null; this._engineAllowWindowResize = null; this._engineCheckHeaderMouseDown = null; this._engineDiableOnSelectInWindow = null; this._engineDoOnWindowParkDown = null; this._engineDoOnWindowParkUp = null; this._engineFixWindowPosInViewport = null; this._engineGetWindowButton = null; this._engineGetWindowContent = null; this._engineGetWindowHeader = null; this._engineGetWindowHeaderState = null; this._engineGetWindowLabel = null; this._engineGetWindowParkedHeight = null; this._engineRedrawSkin = null; this._engineRedrawWindowPos = null; this._engineRedrawWindowSize = null; this._engineRedrawWindowTitle = null; this._engineSetWindowBody = null; this._engineSwitchWindowHeader = null; this._engineSwitchWindowProgress = null; this._engineUpdateWindowIcon = null; this._fixWindowDimensionInViewport = null; this._genStr = null; this._getActive = null; this._getTopZIndex = null; this._getWindowIcon = null; this._hideButton = null; this._hideWindow = null; this._isWindowHidden = null; this._isWindowOnBottom = null; this._isWindowOnTop = null; this._makeActive = null; this._maximizeWindow = null; this._moveWindow = null; this._needHelp = null; this._parkWindow = null; this._parseNestedForEvents = null; this._removeButtonGlobal = null; this._removeEvents = null; this._removeUserButton = null; this._removeWindowGlobal = null; this._restoreWindow = null; this._restoreWindowIcons = null; this._setWindowIcon = null; this._setWindowModal = null; this._setWindowToFullScreen = null; this._showButton = null; this._showWindow = null; this._stickWindow = null; this._stopMove = null; this._unstickWindow = null; this.attachEvent = null; this.attachViewportTo = null; this.callEvent = null; this.checkEvent = null; this.createWindow = null; this.detachEvent = null; this.enableAutoViewport = null; this.eventCatcher = null; this.findByText = null; this.forEachWindow = null; this.getBottommostWindow = null; this.getEffect = null; this.getTopmostWindow = null; this.isWindow = null; this.setEffect = null; this.setImagePath = null; this.setSkin = null; this.setViewport = null; this.unload = null; this.window = null; that = null; } this._clearDocumentEvents = function() { if (_isIE) { window.detachEvent("onresize", this._doOnResize); document.body.detachEvent("onselectstart", this._doOnSelectStart); document.body.detachEvent("onmouseup", this._doOnMouseUp); document.body.detachEvent("onunload", this._doOnUnload); this.vp.detachEvent("onmousemove", this._doOnMoseMove); this.vp.detachEvent("onmouseup", this._doOnMouseUp); } else { window.removeEventListener("resize", this._doOnResize, false); document.body.removeEventListener("mouseup", this._doOnMouseUp, false); document.body.removeEventListener("unload", this._doOnUnload, false); this.vp.removeEventListener("mousemove", this._doOnMoseMove, false); this.vp.removeEventListener("mouseup", this._doOnMouseUp, false); } } /* additional features */ /* if (this._enableStatusBar != null) { this._enableStatusBar(); } if (this._enableWebMenu != null) { this._enableWebMenu(); } if (this._enableWebToolbar != null) { this._enableWebToolbar(); } */ this._genStr = function(w) { var s = ""; var z = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (var q=0; q<w; q++) s += z.charAt(Math.round(Math.random() * (z.length-1))); return s; } dhtmlxEventable(this); return this; }; dhtmlXWindows.prototype._dhx_Engine = function() { // engine init params this._engineEnabled = true; this._engineName = "dhx"; // skin params // mh = menu height // th = toolbar height // sh = statusbar height this._engineSkinParams = {dhx_blue: {"hh": 21, "lbw": 2, "rbw": 2, "lch": 2, "lcw": 14, "rch": 14, "rcw": 14, "bbh": 2, "mnh": 23, "tbh": 25, "sbh": 20, "noh_t": null, "noh_h": null}, dhx_black: {"hh": 21, "lbw": 2, "rbw": 2, "lch": 2, "lcw": 14, "rch": 14, "rcw": 14, "bbh": 2, "mnh": 23, "tbh": 25, "sbh": 20, "noh_t": null, "noh_h": null}, dhx_skyblue: {"hh": 47, "lbw": 2, "rbw": 2, "lch": 2, "lcw": 14, "rch": 14, "rcw": 14, "bbh": 2, "mnh": 23, "tbh": 25, "sbh": 20, "noh_t": 5, "noh_h": -10}, dhx_web: {"hh": 27, "lbw": 5, "rbw": 5, "lch": 5, "lcw": 14, "rch": 14, "rcw": 14, "bbh": 5, "mnh": 23, "tbh": 25, "sbh": 20, "noh_t": 5, "noh_h": -10} }; // forms window html this._engineSetWindowBody = function(win) { win.innerHTML = "<div iswin='1' class='dhtmlx_wins_body_outer' style='position: relative;'>"+ (_isIE?"<iframe allowfullscreen='true' frameborder='0' class='dhtmlx_wins_ie6_cover_fix' onload='this.contentWindow.document.body.style.overflow=\"hidden\";' ></iframe>":"")+ "<div class='dhtmlx_wins_icon'></div>"+ "<div class='dhtmlx_wins_progress'></div>"+ "<div class='dhtmlx_wins_title'>dhtmlxWindow</div>"+ "<div class='dhtmlx_wins_btns'>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_sticked_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_stick_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_help_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_park_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_minmax2_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_minmax1_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_close_default'></div>"+ "<div class='dhtmlx_wins_btns_button dhtmlx_button_dock_default'></div>"+ "</div>"+ "<div class='dhtmlx_wins_body_inner'></div>"+ "<div winResT='yes' class='dhtmlx_wins_resizer_t' style='display:none;'></div>"+ "<div winResL='yes' class='dhtmlx_wins_resizer_l'></div>"+ "<div winResR='yes' class='dhtmlx_wins_resizer_r'></div>"+ "<div winResB='yes' class='dhtmlx_wins_resizer_b'></div>"+ "<div class='white_line'></div>"+ "<div class='white_line2'></div>"+ "</div>"; // dhxCont(win); win.dhxContGlobal = new dhtmlXContainer(win); if (this.skin == "dhx_skyblue") { win.dhxContGlobal.obj._offsetWidth = 0; win.dhxContGlobal.obj._offsetHeight = 0; win.dhxContGlobal.obj._offsetLeft = 0; win.dhxContGlobal.obj._offsetHeightSaved = win.dhxContGlobal.obj._offsetHeight; } if (this.skin == "dhx_web") { win.dhxContGlobal.obj._offsetWidth = -10; win.dhxContGlobal.obj._offsetHeight = -5; win.dhxContGlobal.obj._offsetLeft = 5; win.dhxContGlobal.obj._offsetHeightSaved = win.dhxContGlobal.obj._offsetHeight; } win.skin = this.skin; win.dhxContGlobal.setContent(win.childNodes[0].childNodes[(_isIE?5:4)]); win.coverBlocker().onselectstart = function(e) { e = e||event; e.returnValue = false; e.cancelBubble = true; } } // block selection this._engineDiableOnSelectInWindow = function(win, state) { var data = new Array(); data[0] = win.childNodes[0].childNodes[(_isIE?1:0)]; data[1] = win.childNodes[0].childNodes[(_isIE?2:1)]; data[2] = win.childNodes[0].childNodes[(_isIE?3:2)]; data[3] = win.childNodes[0].childNodes[(_isIE?4:3)]; // resizers data[4] = win.childNodes[0].childNodes[(_isIE?6:5)]; data[5] = win.childNodes[0].childNodes[(_isIE?7:6)]; data[6] = win.childNodes[0].childNodes[(_isIE?8:7)]; data[7] = win.childNodes[0].childNodes[(_isIE?9:8)]; for (var q=0; q<data.length; q++) { //console.log(data[q]) data[q].onselectstart = (state?function(e){e=e||event;e.returnValue=false;return false;}:null); } } // return window header this._engineGetWindowHeader = function(win) { win.childNodes[0].idd = win.idd; return win.childNodes[0]; } // setting correct size for window this._engineRedrawWindowSize = function(win) { win.style.width = (String(win.w).search("%")==-1?win.w+"px":win.w); win.style.height = (String(win.h).search("%")==-1?win.h+"px":win.h); var body = win.childNodes[0]; body.style.width = win.clientWidth+"px"; body.style.height = win.clientHeight+"px"; if (body.offsetWidth > win.clientWidth) { body.style.width = win.clientWidth*2-body.offsetWidth+"px"; } if (body.offsetHeight > win.clientHeight) { // park check var px = win.clientHeight*2-body.offsetHeight; if (px < 0) px = 0; // body.style.height = px+"px"; } var hh = (win._noHeader==true?win._hdrSize:this._engineSkinParams[this.skin]["hh"]); // header this._engineRedrawWindowTitle(win); win.adjustContent(body, hh); // this.updateNestedObjects(); } // redraw window position this._engineRedrawWindowPos = function(win) { if (win._isFullScreened) return; win.style.left = win.x + "px"; win.style.top = win.y + "px"; } // fixing window position in viewport this._engineFixWindowPosInViewport = function(win) { // var hh = this._engineSkinParams[this.skin]["hh"]; var hh = (win._noHeader==true?win._hdrSize:this._engineSkinParams[this.skin]["hh"]); if (win._keepInViewport) { // keep strongly in viewport if (win.x < 0) { win.x = 0; } if (win.x + win.w > this.vp.offsetWidth) { win.x = this.vp.offsetWidth - win.w; } // if (win.y < 0) { win.y = 0; } if (win.y + win.h > this.vp.offsetHeight) { win.y = this.vp.offsetHeight - win.h; } if (win.y < 0) { win.y = 0; } } else { // if (win.y < 0) { win.y = 0; } if (win.y + hh > this.vp.offsetHeight) { win.y = this.vp.offsetHeight - hh; } if (win.y < 0) { win.y = 0; } if (win.x + win.w - 10 < 0) { win.x = 10 - win.w; } if (win.x > this.vp.offsetWidth - 10) { win.x = this.vp.offsetWidth - 10; } } } // check is header in onmousedown this._engineCheckHeaderMouseDown = function(win, ev) { var x = (_isIE||_isOpera?ev.offsetX:ev.layerX); var y = (_isIE||_isOpera?ev.offsetY:ev.layerY); var obj = ev.target||ev.srcElement; var hh = (win._noHeader==true?win._hdrSize:this._engineSkinParams[this.skin]["hh"]); if (y <= hh && (obj == win.childNodes[0] || obj == win.childNodes[0].childNodes[(_isIE?1:0)] || obj == win.childNodes[0].childNodes[(_isIE?3:2)] || obj == win.childNodes[0].childNodes[(_isIE?4:3)])) return true; return false; } // return window content this._engineGetWindowContent = function(win) { alert("_engineGetWindowContent"); /* var contObj = null; var contPoly = win.childNodes[0].childNodes[(_isIE?5:4)]; for (var q=0; q<contPoly.childNodes.length; q++) { if (contPoly.childNodes[q].getAttribute("iscont") != null) { if (contPoly.childNodes[q].getAttribute("iscont") === "1") { contObj = contPoly.childNodes[q]; } } } if (contObj != null) { win._contObj = contObj; } else { if (win._contObj != null) { contObj = win._contObj; } } return contObj; //.childNodes[0]; */ } // return window button this._engineGetWindowButton = function(win, buttonName) { var buttonObj = null; // var getBtnClassName = function(btnName) { // for (var i = 0; i < wd.display.wdButtons.length; i++) { // if(wd.display.wdButtons[i][0] == btnName) { // return wd.display.wdButtons[i][4]; // } // } // } // // 先找变动后的,找不到再找原生的 // for(var q = 0; q < win.childNodes[0].childNodes[(_isIE ? 4 : 3)].childNodes.length; q++) { // var buttonTemp = win.childNodes[0].childNodes[(_isIE ? 4 : 3)].childNodes[q]; // var clsName = getBtnClassName(buttonName); // var clsAry = String(buttonTemp.className).split(" "); // if(clsAry[1] == clsName) { // buttonObj = buttonTemp; // break; // } // } if(buttonObj == null) { var buttonStyle = "dhtmlx_button_" + String(buttonName).toLowerCase() + "_"; //原来toLowcase()转换未小写,会导致无法获取按钮 var buttonStyle = "dhtmlx_button_" + String(buttonName) + "_"; var reg = new RegExp(buttonStyle + "(default|disabled|over_default|over_pressed)"); for(var q = 0; q < win.childNodes[0].childNodes[(_isIE ? 4 : 3)].childNodes.length; q++) { var buttonTemp = win.childNodes[0].childNodes[(_isIE ? 4 : 3)].childNodes[q]; if(String(buttonTemp.className).search(reg) != -1) { buttonObj = buttonTemp; } } } return buttonObj; } // adding user button this._engineAddUserButton = function(win, buttonName, buttonPos) { if (isNaN(buttonPos)) buttonPos = 0; var button = document.createElement("DIV"); button.className = "dhtmlx_wins_btns_button dhtmlx_button_"+buttonName+"_default"; var buttonPoly = win.childNodes[0].childNodes[(_isIE?4:3)]; buttonPos = buttonPoly.childNodes.length - buttonPos; if (buttonPos < 0) buttonPos = 0; if (buttonPos >= buttonPoly.childNodes.length) { buttonPoly.appendChild(button); } else { buttonPoly.insertBefore(button, buttonPoly.childNodes[buttonPos]); } this._engineRedrawWindowTitle(win); return button; } // return min park height this._engineGetWindowParkedHeight = function(win) { return this._engineSkinParams[this.skin]["hh"]+1; } // do on window park down this._engineDoOnWindowParkDown = function(win) { // console.log(1) win.childNodes[0].childNodes[(_isIE?6:5)].style.display = (win._noHeader==true?"":"none"); win.childNodes[0].childNodes[(_isIE?7:6)].style.display = ""; win.childNodes[0].childNodes[(_isIE?8:7)].style.display = ""; win.childNodes[0].childNodes[(_isIE?9:8)].style.display = ""; } // do on window park up this._engineDoOnWindowParkUp = function(win) { win.childNodes[0].childNodes[(_isIE?6:5)].style.display = "none"; win.childNodes[0].childNodes[(_isIE?7:6)].style.display = "none"; win.childNodes[0].childNodes[(_isIE?8:7)].style.display = "none"; win.childNodes[0].childNodes[(_isIE?9:8)].style.display = "none"; } // update window's icon this._engineUpdateWindowIcon = function(win, icon) { win.childNodes[0].childNodes[(_isIE?1:0)].style.backgroundImage = "url('"+icon+"')"; } // check is targetObj a windows node and is resize allowed this._engineAllowWindowResize = function(win, targetObj, mouseX, mouseY) { // IE fix for disabled input if (!targetObj.getAttribute) return; // var sk = this._engineSkinParams[this.skin]; var hh = (win._noHeader==true?win._hdrSize:this._engineSkinParams[this.skin]["hh"]); if (targetObj.getAttribute("winResL") != null) { if (targetObj.getAttribute("winResL") == "yes") { if (mouseY >= hh) { if (mouseY >= win.h - sk["lch"]) return "corner_left"; if (mouseY <= sk["lch"] && win._noHeader == true) return "corner_up_left"; return "border_left"; } } } if (targetObj.getAttribute("winResR") != null) { if (targetObj.getAttribute("winResR") == "yes") { if (mouseY >= hh) { if (mouseY >= win.h - sk["rch"]) return "corner_right"; if (mouseY <= sk["rch"] && win._noHeader == true) return "corner_up_right"; return "border_right"; } } } if (targetObj.getAttribute("winResT") != null) { if (targetObj.getAttribute("winResT") == "yes" && win._noHeader == true) { if (mouseX <= sk["lcw"]) return "corner_up_left"; if (mouseX >= win.w - sk["rcw"]) return "corner_up_right"; return "border_top"; } } if (targetObj.getAttribute("winResB") != null) { if (targetObj.getAttribute("winResB") == "yes") { if (mouseX <= sk["lcw"]) return "corner_left"; if (mouseX >= win.w - sk["rcw"]) return "corner_right"; return "border_bottom"; } } return null; } // adjusting window to content size this._engineAdjustWindowToContent = function(win, w, h) { var newW = w+win.w-win.vs[win.av].dhxcont.clientWidth; var newH = h+win.h-win.vs[win.av].dhxcont.clientHeight; win.setDimension(newW, newH); } // redraw windows skin this._engineRedrawSkin = function() { this.vp.className = "dhtmlx_winviewport dhtmlx_skin_"+this.skin+(this._r?" dhx_wins_rtl":""); var sk = this._engineSkinParams[this.skin]; for (var a in this.wins) { if (this.skin == "dhx_skyblue") { this.wins[a].dhxContGlobal.obj._offsetTop = (this.wins[a]._noHeader?sk["noh_t"]:null); this.wins[a].dhxContGlobal.obj._offsetWidth = -10; this.wins[a].dhxContGlobal.obj._offsetHeight = (this.wins[a]._noHeader?sk["noh_h"]:-5); this.wins[a].dhxContGlobal.obj._offsetLeft = 5; this.wins[a].dhxContGlobal.obj._offsetHeightSaved = -5; } else { this.wins[a].dhxContGlobal.obj._offsetWidth = null; this.wins[a].dhxContGlobal.obj._offsetHeight = null; this.wins[a].dhxContGlobal.obj._offsetLeft = null; this.wins[a].dhxContGlobal.obj._offsetTop = null; this.wins[a].dhxContGlobal.obj._offsetHeightSaved = null; } this.wins[a].skin = this.skin; this._restoreWindowIcons(this.wins[a]); this._engineRedrawWindowSize(this.wins[a]); } } // enable/disable window loader this._engineSwitchWindowProgress = function(win, state) { if (state == true) { win.childNodes[0].childNodes[(_isIE?1:0)].style.display = "none"; win.childNodes[0].childNodes[(_isIE?2:1)].style.display = ""; } else { win.childNodes[0].childNodes[(_isIE?2:1)].style.display = "none"; win.childNodes[0].childNodes[(_isIE?1:0)].style.display = ""; } } // show/hide window header this._engineSwitchWindowHeader = function(win, state) { if (!win._noHeader) win._noHeader = false; if (state != win._noHeader) return; // win._noHeader = (state==true?false:true); win._hdrSize = 0; win.childNodes[0].childNodes[(_isIE?5:4)].className = "dhtmlx_wins_body_inner"+(win._noHeader?" dhtmlx_wins_no_header":""); win.childNodes[0].childNodes[(_isIE?6:5)].style.display = (win._noHeader?"":"none"); win.childNodes[0].childNodes[(_isIE?1:0)].style.display = (win._noHeader?"none":""); // title win.childNodes[0].childNodes[(_isIE?3:2)].style.display = (win._noHeader?"none":""); // buttons win.childNodes[0].childNodes[(_isIE?4:3)].style.display = (win._noHeader?"none":""); // var sk = this._engineSkinParams[this.skin]; if (win._noHeader) { win.dhxContGlobal.obj._offsetHeightSaved = win.dhxContGlobal.obj._offsetHeight; win.dhxContGlobal.obj._offsetHeight = sk["noh_h"]; win.dhxContGlobal.obj._offsetTop = sk["noh_t"]; } else { win.dhxContGlobal.obj._offsetHeight = win.dhxContGlobal.obj._offsetHeightSaved; win.dhxContGlobal.obj._offsetTop = null; } this._engineRedrawWindowSize(win); } // return true if header is visible this._engineGetWindowHeaderState = function(win) { return (win._noHeader?true:false); } // return window label this._engineGetWindowLabel = function(win) { return win.childNodes[0].childNodes[(_isIE?3:2)]; } // redraw window's header text this._engineRedrawWindowTitle = function(win) { if (win._noHeader!==true) { var p2 = win.childNodes[0].childNodes[(_isIE?1:0)].offsetWidth; // icon var p3 = win.childNodes[0].childNodes[(_isIE?4:3)].offsetWidth; // buttons var newW = win.offsetWidth-p2-p3-24; if (newW < 0) newW = "100%"; else newW += "px"; win.childNodes[0].childNodes[(_isIE?3:2)].style.width = newW; /* var p1 = win.childNodes[0].childNodes[(_isIE?3:2)].offsetLeft; var p2 = win.childNodes[0].childNodes[(_isIE?4:3)].offsetWidth; var newW = win.offsetWidth-p1-p2-16; if (newW < 0) { newW = "100%"; } else { newW += "px"; } win.childNodes[0].childNodes[(_isIE?3:2)].style.width = newW; */ } } }; dhtmlXWindows.prototype.i18n = { dhxcontaler: "dhtmlxcontainer.js is missed on the page", noenginealert: "No dhtmlxWindows engine was found.", stick: "Stick", unstick: "Unstick", help: "Help", parkdown: "Park Down", parkup: "Park Up", maximize: "Maximize", restore: "Restore", close: "Close", dock: "Dock" }; (function(){ dhtmlx.extend_api("dhtmlXWindows",{ _init:function(obj){ return []; }, _patch:function(obj){ obj.old_createWindow=obj.createWindow; obj.createWindow=function(obj){ if (arguments.length>1) return this.old_createWindow.apply(this,arguments); var res = this.old_createWindow(obj.id,obj.x,obj.y,obj.width,obj.height); res.allowMoveA=function(mode){ if (mode) this.allowMove(); else this.denyMove(); } res.allowParkA=function(mode){ if (mode) this.allowPark(); else this.denyPark(); } res.allowResizeA=function(mode){ if (mode) this.allowResize(); else this.denyResize(); } //local settings for (var a in obj){ if (map[a]) res[map[a]](obj[a]); else if (a.indexOf("on")==0){ res.attachEvent(a,obj[a]); } } return res; } }, animation:"setEffect", image_path:"setImagePath", skin:"setSkin", viewport:"_viewport", wins:"_wins" },{ _viewport:function(data){ if (data.object) { this.enableAutoViewport(false); this.attachViewportTo(data.object); } else { this.enableAutoViewport(false); this.setViewport(data.left, data.top, data.width, data.height, data.parent); } }, _wins:function(arr){ for (var q=0; q<arr.length; q++) { var win = arr[q]; this.createWindow(win.id, win.left, win.top, win.width, win.height); if (win.text) this.window(win.id).setText(win.text); if (win.keep_in_viewport) this.window(win.id).keepInViewport(true); if (win.deny_resize) this.window(win.id).denyResize(); if (win.deny_park) this.window(win.id).denyPark(); if (win.deny_move) this.window(win.id).denyMove(); } } }); var map={ move:"allowMoveA", park:"allowParkA", resize:"allowResizeA", center:"center", modal:"setModal", caption:"setText", header:"showHeader" }; })();