📄 window.js
字号:
}, // Detroys itself when closing setDestroyOnClose: function() { this.options.destroyOnClose = true; }, setConstraint: function(bool, padding) { this.constraint = bool; this.constraintPad = Object.extend(this.constraintPad, padding || {}); // Reset location to apply constraint if (this.useTop && this.useLeft) this.setLocation(parseFloat(this.element.style.top), parseFloat(this.element.style.left)); }, // initDrag event _initDrag: function(event) { // No resize on minimized window if (Event.element(event) == this.sizer && this.isMinimized()) return; // No move on maximzed window if (Event.element(event) != this.sizer && this.isMaximized()) return; if (Prototype.Browser.IE && this.heightN == 0) this._getWindowBorderSize(); // Get pointer X,Y this.pointer = [this._round(Event.pointerX(event), this.options.gridX), this._round(Event.pointerY(event), this.options.gridY)]; if (this.options.wiredDrag) this.currentDrag = this._createWiredElement(); else this.currentDrag = this.element; // Resize if (Event.element(event) == this.sizer) { this.doResize = true; this.widthOrg = this.width; this.heightOrg = this.height; this.bottomOrg = parseFloat(this.element.getStyle('bottom')); this.rightOrg = parseFloat(this.element.getStyle('right')); this._notify("onStartResize"); } else { this.doResize = false; // Check if click on close button, var closeButton = $(this.getId() + '_close'); if (closeButton && Position.within(closeButton, this.pointer[0], this.pointer[1])) { this.currentDrag = null; return; } this.toFront(); if (! this.options.draggable) return; this._notify("onStartMove"); } // Register global event to capture mouseUp and mouseMove Event.observe(document, "mouseup", this.eventMouseUp, false); Event.observe(document, "mousemove", this.eventMouseMove, false); // Add an invisible div to keep catching mouse event over iframes WindowUtilities.disableScreen('__invisible__', '__invisible__', this.overlayOpacity); // Stop selection while dragging document.body.ondrag = function () { return false; }; document.body.onselectstart = function () { return false; }; this.currentDrag.show(); Event.stop(event); }, _round: function(val, round) { return round == 1 ? val : val = Math.floor(val / round) * round; }, // updateDrag event _updateDrag: function(event) { var pointer = [this._round(Event.pointerX(event), this.options.gridX), this._round(Event.pointerY(event), this.options.gridY)]; var dx = pointer[0] - this.pointer[0]; var dy = pointer[1] - this.pointer[1]; // Resize case, update width/height if (this.doResize) { var w = this.widthOrg + dx; var h = this.heightOrg + dy; dx = this.width - this.widthOrg dy = this.height - this.heightOrg // Check if it's a right position, update it to keep upper-left corner at the same position if (this.useLeft) w = this._updateWidthConstraint(w) else this.currentDrag.setStyle({right: (this.rightOrg -dx) + 'px'}); // Check if it's a bottom position, update it to keep upper-left corner at the same position if (this.useTop) h = this._updateHeightConstraint(h) else this.currentDrag.setStyle({bottom: (this.bottomOrg -dy) + 'px'}); this.setSize(w , h); this._notify("onResize"); } // Move case, update top/left else { this.pointer = pointer; if (this.useLeft) { var left = parseFloat(this.currentDrag.getStyle('left')) + dx; var newLeft = this._updateLeftConstraint(left); // Keep mouse pointer correct this.pointer[0] += newLeft-left; this.currentDrag.setStyle({left: newLeft + 'px'}); } else this.currentDrag.setStyle({right: parseFloat(this.currentDrag.getStyle('right')) - dx + 'px'}); if (this.useTop) { var top = parseFloat(this.currentDrag.getStyle('top')) + dy; var newTop = this._updateTopConstraint(top); // Keep mouse pointer correct this.pointer[1] += newTop - top; this.currentDrag.setStyle({top: newTop + 'px'}); } else this.currentDrag.setStyle({bottom: parseFloat(this.currentDrag.getStyle('bottom')) - dy + 'px'}); this._notify("onMove"); } if (this.iefix) this._fixIEOverlapping(); this._removeStoreLocation(); Event.stop(event); }, // endDrag callback _endDrag: function(event) { // Remove temporary div over iframes WindowUtilities.enableScreen('__invisible__'); if (this.doResize) this._notify("onEndResize"); else this._notify("onEndMove"); // Release event observing Event.stopObserving(document, "mouseup", this.eventMouseUp,false); Event.stopObserving(document, "mousemove", this.eventMouseMove, false); Event.stop(event); this._hideWiredElement(); // Store new location/size if need be this._saveCookie() // Restore selection document.body.ondrag = null; document.body.onselectstart = null; }, _updateLeftConstraint: function(left) { if (this.constraint && this.useLeft && this.useTop) { var width = this.options.parent == document.body ? WindowUtilities.getPageSize().windowWidth : this.options.parent.getDimensions().width; if (left < this.constraintPad.left) left = this.constraintPad.left; if (left + this.width + this.widthE + this.widthW > width - this.constraintPad.right) left = width - this.constraintPad.right - this.width - this.widthE - this.widthW; } return left; }, _updateTopConstraint: function(top) { if (this.constraint && this.useLeft && this.useTop) { var height = this.options.parent == document.body ? WindowUtilities.getPageSize().windowHeight : this.options.parent.getDimensions().height; var h = this.height + this.heightN + this.heightS; if (top < this.constraintPad.top) top = this.constraintPad.top; if (top + h > height - this.constraintPad.bottom) top = height - this.constraintPad.bottom - h; } return top; }, _updateWidthConstraint: function(w) { if (this.constraint && this.useLeft && this.useTop) { var width = this.options.parent == document.body ? WindowUtilities.getPageSize().windowWidth : this.options.parent.getDimensions().width; var left = parseFloat(this.element.getStyle("left")); if (left + w + this.widthE + this.widthW > width - this.constraintPad.right) w = width - this.constraintPad.right - left - this.widthE - this.widthW; } return w; }, _updateHeightConstraint: function(h) { if (this.constraint && this.useLeft && this.useTop) { var height = this.options.parent == document.body ? WindowUtilities.getPageSize().windowHeight : this.options.parent.getDimensions().height; var top = parseFloat(this.element.getStyle("top")); if (top + h + this.heightN + this.heightS > height - this.constraintPad.bottom) h = height - this.constraintPad.bottom - top - this.heightN - this.heightS; } return h; }, // Creates HTML window code _createWindow: function(id) { var className = this.options.className; var win = document.createElement("div"); win.setAttribute('id', id); win.className = "dialog"; var content; if (this.options.url) content= "<iframe frameborder=\"0\" name=\"" + id + "_content\" id=\"" + id + "_content\" src=\"" + this.options.url + "\"> </iframe>"; else content ="<div id=\"" + id + "_content\" class=\"" +className + "_content\"> </div>"; var closeDiv = this.options.closable ? "<div class='"+ className +"_close' id='"+ id +"_close' onclick='Windows.close(\""+ id +"\", event)'> </div>" : ""; var minDiv = this.options.minimizable ? "<div class='"+ className + "_minimize' id='"+ id +"_minimize' onclick='Windows.minimize(\""+ id +"\", event)'> </div>" : ""; var maxDiv = this.options.maximizable ? "<div class='"+ className + "_maximize' id='"+ id +"_maximize' onclick='Windows.maximize(\""+ id +"\", event)'> </div>" : ""; var seAttributes = this.options.resizable ? "class='" + className + "_sizer' id='" + id + "_sizer'" : "class='" + className + "_se'"; var blank = "../themes/default/blank.gif"; win.innerHTML = closeDiv + minDiv + maxDiv + "\ <table id='"+ id +"_row1' class=\"top table_window\">\ <tr>\ <td class='"+ className +"_nw'></td>\ <td class='"+ className +"_n'><div id='"+ id +"_top' class='"+ className +"_title title_window'>"+ this.options.title +"</div></td>\ <td class='"+ className +"_ne'></td>\ </tr>\ </table>\ <table id='"+ id +"_row2' class=\"mid table_window\">\ <tr>\ <td class='"+ className +"_w'></td>\ <td id='"+ id +"_table_content' class='"+ className +"_content' valign='top'>" + content + "</td>\ <td class='"+ className +"_e'></td>\ </tr>\ </table>\ <table id='"+ id +"_row3' class=\"bot table_window\">\ <tr>\ <td class='"+ className +"_sw'></td>\ <td class='"+ className +"_s'><div id='"+ id +"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>\ <td " + seAttributes + "></td>\ </tr>\ </table>\ "; Element.hide(win); this.options.parent.insertBefore(win, this.options.parent.firstChild); Event.observe($(id + "_content"), "load", this.options.onload); return win; }, changeClassName: function(newClassName) { var className = this.options.className; var id = this.getId(); $A(["_close", "_minimize", "_maximize", "_sizer", "_content"]).each(function(value) { this._toggleClassName($(id + value), className + value, newClassName + value) }.bind(this)); this._toggleClassName($(id + "_top"), className + "_title", newClassName + "_title"); $$("#" + id + " td").each(function(td) {td.className = td.className.sub(className,newClassName); }); this.options.className = newClassName; }, _toggleClassName: function(element, oldClassName, newClassName) { if (element) { element.removeClassName(oldClassName); element.addClassName(newClassName); } }, // Sets window location setLocation: function(top, left) { top = this._updateTopConstraint(top); left = this._updateLeftConstraint(left); var e = this.currentDrag || this.element; e.setStyle({top: top + 'px'}); e.setStyle({left: left + 'px'}); this.useLeft = true; this.useTop = true; }, getLocation: function() { var location = {}; if (this.useTop) location = Object.extend(location, {top: this.element.getStyle("top")}); else location = Object.extend(location, {bottom: this.element.getStyle("bottom")}); if (this.useLeft) location = Object.extend(location, {left: this.element.getStyle("left")}); else location = Object.extend(location, {right: this.element.getStyle("right")}); return location; }, // Gets window size getSize: function() { return {width: this.width, height: this.height}; }, // Sets window size setSize: function(width, height, useEffect) { width = parseFloat(width); height = parseFloat(height); // Check min and max size if (!this.minimized && width < this.options.minWidth) width = this.options.minWidth; if (!this.minimized && height < this.options.minHeight) height = this.options.minHeight; if (this.options. maxHeight && height > this.options. maxHeight) height = this.options. maxHeight; if (this.options. maxWidth && width > this.options. maxWidth) width = this.options. maxWidth; if (this.useTop && this.useLeft && Window.hasEffectLib && Effect.ResizeWindow && useEffect) { new Effect.ResizeWindow(this, null, null, width, height, {duration: Window.resizeEffectDuration}); } else { this.width = width; this.height = height; var e = this.currentDrag ? this.currentDrag : this.element; e.setStyle({width: width + this.widthW + this.widthE + "px"}) e.setStyle({height: height + this.heightN + this.heightS + "px"}) // Update content size if (!this.currentDrag || this.currentDrag == this.element) { var content = $(this.element.id + '_content'); content.setStyle({height: height + 'px'}); content.setStyle({width: width + 'px'}); } } }, updateHeight: function() { this.setSize(this.width, this.content.scrollHeight, true); }, updateWidth: function() { this.setSize(this.content.scrollWidth, this.height, true); }, // Brings window to front toFront: function() { if (this.element.style.zIndex < Windows.maxZIndex) this.setZIndex(Windows.maxZIndex + 1); if (this.iefix) this._fixIEOverlapping(); }, getBounds: function(insideOnly) { if (! this.width || !this.height || !this.visible)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -