+++ /dev/null
-/**\r
- * $Id: mcwindows.js 18 2006-06-29 14:11:23Z spocke $\r
- *\r
- * Moxiecode DHTML Windows script.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-// Windows handler\r
-function MCWindows() {\r
- this.settings = new Array();\r
- this.windows = new Array();\r
- this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");\r
- this.isGecko = navigator.userAgent.indexOf('Gecko') != -1;\r
- this.isSafari = navigator.userAgent.indexOf('Safari') != -1;\r
- this.isMac = navigator.userAgent.indexOf('Mac') != -1;\r
- this.isMSIE5_0 = this.isMSIE && (navigator.userAgent.indexOf('MSIE 5.0') != -1);\r
- this.action = "none";\r
- this.selectedWindow = null;\r
- this.zindex = 100;\r
- this.mouseDownScreenX = 0;\r
- this.mouseDownScreenY = 0;\r
- this.mouseDownLayerX = 0;\r
- this.mouseDownLayerY = 0;\r
- this.mouseDownWidth = 0;\r
- this.mouseDownHeight = 0;\r
-};\r
-\r
-MCWindows.prototype.init = function(settings) {\r
- this.settings = settings;\r
-\r
- if (this.isMSIE)\r
- this.addEvent(document, "mousemove", mcWindows.eventDispatcher);\r
- else\r
- this.addEvent(window, "mousemove", mcWindows.eventDispatcher);\r
-\r
- this.addEvent(document, "mouseup", mcWindows.eventDispatcher);\r
-};\r
-\r
-MCWindows.prototype.getParam = function(name, default_value) {\r
- var value = null;\r
-\r
- value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
-\r
- // Fix bool values\r
- if (value == "true" || value == "false")\r
- return (value == "true");\r
-\r
- return value;\r
-};\r
-\r
-MCWindows.prototype.eventDispatcher = function(e) {\r
- e = typeof(e) == "undefined" ? window.event : e;\r
-\r
- if (mcWindows.selectedWindow == null)\r
- return;\r
-\r
- // Switch focus\r
- if (mcWindows.isGecko && e.type == "mousedown") {\r
- var elm = e.currentTarget;\r
-\r
- for (var n in mcWindows.windows) {\r
- var win = mcWindows.windows[n];\r
- if (typeof(win) == 'function')\r
- continue;\r
-\r
- if (win.headElement == elm || win.resizeElement == elm) {\r
- win.focus();\r
- break;\r
- }\r
- }\r
- }\r
-\r
- switch (e.type) {\r
- case "mousemove":\r
- mcWindows.selectedWindow.onMouseMove(e);\r
- break;\r
-\r
- case "mouseup":\r
- mcWindows.selectedWindow.onMouseUp(e);\r
- break;\r
-\r
- case "mousedown":\r
- mcWindows.selectedWindow.onMouseDown(e);\r
- break;\r
-\r
- case "focus":\r
- mcWindows.selectedWindow.onFocus(e);\r
- break;\r
- }\r
-}\r
-\r
-MCWindows.prototype.addEvent = function(obj, name, handler) {\r
- if (this.isMSIE)\r
- obj.attachEvent("on" + name, handler);\r
- else\r
- obj.addEventListener(name, handler, true);\r
-};\r
-\r
-MCWindows.prototype.cancelEvent = function(e) {\r
- if (this.isMSIE) {\r
- e.returnValue = false;\r
- e.cancelBubble = true;\r
- } else\r
- e.preventDefault();\r
-};\r
-\r
-MCWindows.prototype.parseFeatures = function(opts) {\r
- // Cleanup the options\r
- opts = opts.toLowerCase();\r
- opts = opts.replace(/;/g, ",");\r
- opts = opts.replace(/[^0-9a-z=,]/g, "");\r
-\r
- var optionChunks = opts.split(',');\r
- var options = new Array();\r
-\r
- options['left'] = 10;\r
- options['top'] = 10;\r
- options['width'] = 300;\r
- options['height'] = 300;\r
- options['resizable'] = true;\r
- options['minimizable'] = true;\r
- options['maximizable'] = true;\r
- options['close'] = true;\r
- options['movable'] = true;\r
-\r
- if (opts == "")\r
- return options;\r
-\r
- for (var i=0; i<optionChunks.length; i++) {\r
- var parts = optionChunks[i].split('=');\r
-\r
- if (parts.length == 2)\r
- options[parts[0]] = parts[1];\r
- }\r
-\r
- return options;\r
-};\r
-\r
-MCWindows.prototype.open = function(url, name, features) {\r
- var win = new MCWindow();\r
- var winDiv, html = "", id;\r
-\r
- features = this.parseFeatures(features);\r
-\r
- // Create div\r
- id = "mcWindow_" + name;\r
-\r
- width = parseInt(features['width']);\r
- height = parseInt(features['height'])-12-19;\r
-\r
- if (this.isMSIE)\r
- width -= 2;\r
-\r
- // Setup first part of window\r
- win.id = id;\r
- win.url = url;\r
- win.name = name;\r
- win.features = features;\r
- this.windows[name] = win;\r
-\r
- iframeWidth = width;\r
- iframeHeight = height;\r
-\r
- // Create inner content\r
- html += '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">';\r
- html += '<html>';\r
- html += '<head>';\r
- html += '<title>Wrapper iframe</title>';\r
- html += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';\r
- html += '<link href="../jscripts/tiny_mce/themes/advanced/css/editor_ui.css" rel="stylesheet" type="text/css" />';\r
- html += '</head>';\r
- html += '<body onload="parent.mcWindows.onLoad(\'' + name + '\');">';\r
-\r
- html += '<div id="' + id + '_container" class="mceWindow">';\r
- html += '<div id="' + id + '_head" class="mceWindowHead" onmousedown="parent.mcWindows.windows[\'' + name + '\'].focus();">';\r
- html += ' <div id="' + id + '_title" class="mceWindowTitle"';\r
- html += ' onselectstart="return false;" unselectable="on" style="-moz-user-select: none !important;">No name window</div>';\r
- html += ' <div class="mceWindowHeadTools">';\r
- html += ' <a href="javascript:parent.mcWindows.windows[\'' + name + '\'].close();" onmousedown="return false;" class="mceWindowClose"><img border="0" src="../jscripts/tiny_mce/themes/advanced/images/window_close.gif" /></a>';\r
-// html += ' <a href="javascript:mcWindows.windows[\'' + name + '\'].maximize();" onmousedown="return false;" class="mceWindowMaximize"></a>';\r
-// html += ' <a href="javascript:mcWindows.windows[\'' + name + '\'].minimize();" onmousedown="return false;" class="mceWindowMinimize"></a>';\r
- html += ' </div>';\r
- html += '</div><div id="' + id + '_body" class="mceWindowBody" style="width: ' + width + 'px; height: ' + height + 'px;">';\r
- html += '<iframe id="' + id + '_iframe" name="' + id + '_iframe" onfocus="parent.mcWindows.windows[\'' + name + '\'].focus();" frameborder="0" width="' + iframeWidth + '" height="' + iframeHeight + '" src="' + url + '" class="mceWindowBodyIframe"></iframe></div>';\r
- html += '<div id="' + id + '_statusbar" class="mceWindowStatusbar" onmousedown="parent.mcWindows.windows[\'' + name + '\'].focus();">';\r
- html += '<div id="' + id + '_resize" class="mceWindowResize"><img onmousedown="parent.mcWindows.windows[\'' + name + '\'].focus();" border="0" src="../jscripts/tiny_mce/themes/advanced/images/window_resize.gif" /></div>';\r
- html += '</div>';\r
- html += '</div>';\r
-\r
- html += '</body>';\r
- html += '</html>';\r
-\r
- // Create iframe\r
- this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html);\r
-};\r
-\r
-// Gets called when wrapper iframe is initialized\r
-MCWindows.prototype.onLoad = function(name) {\r
- var win = mcWindows.windows[name];\r
- var id = "mcWindow_" + name;\r
- var wrapperIframe = window.frames[id + "_iframe"].frames[0];\r
- var wrapperDoc = window.frames[id + "_iframe"].document;\r
- var doc = window.frames[id + "_iframe"].document;\r
- var winDiv = document.getElementById("mcWindow_" + name + "_div");\r
- var realIframe = window.frames[id + "_iframe"].frames[0];\r
-\r
- // Set window data\r
- win.id = "mcWindow_" + name + "_iframe";\r
- win.winElement = winDiv;\r
- win.bodyElement = doc.getElementById(id + '_body');\r
- win.iframeElement = doc.getElementById(id + '_iframe');\r
- win.headElement = doc.getElementById(id + '_head');\r
- win.titleElement = doc.getElementById(id + '_title');\r
- win.resizeElement = doc.getElementById(id + '_resize');\r
- win.containerElement = doc.getElementById(id + '_container');\r
- win.left = win.features['left'];\r
- win.top = win.features['top'];\r
- win.frame = window.frames[id + '_iframe'].frames[0];\r
- win.wrapperFrame = window.frames[id + '_iframe'];\r
- win.wrapperIFrameElement = document.getElementById(id + "_iframe");\r
-\r
- // Add event handlers\r
- mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher);\r
-\r
- if (mcWindows.isMSIE) {\r
- mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher);\r
- } else {\r
- mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher);\r
- }\r
-\r
- for (var i=0; i<window.frames.length; i++) {\r
- if (!window.frames[i]._hasMouseHandlers) {\r
- if (mcWindows.isMSIE) {\r
- mcWindows.addEvent(window.frames[i].document, "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(window.frames[i].document, "mouseup", mcWindows.eventDispatcher);\r
- } else {\r
- mcWindows.addEvent(window.frames[i], "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(window.frames[i], "mouseup", mcWindows.eventDispatcher);\r
- }\r
-\r
- window.frames[i]._hasMouseHandlers = true;\r
- }\r
- }\r
-\r
- if (mcWindows.isMSIE) {\r
- mcWindows.addEvent(win.frame.document, "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(win.frame.document, "mouseup", mcWindows.eventDispatcher);\r
- } else {\r
- mcWindows.addEvent(win.frame, "mousemove", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(win.frame, "mouseup", mcWindows.eventDispatcher);\r
- mcWindows.addEvent(win.frame, "focus", mcWindows.eventDispatcher);\r
- }\r
-\r
- this.selectedWindow = win;\r
-};\r
-\r
-MCWindows.prototype.createFloatingIFrame = function(id_prefix, left, top, width, height, html) {\r
- var iframe = document.createElement("iframe");\r
- var div = document.createElement("div");\r
-\r
- width = parseInt(width);\r
- height = parseInt(height)+1;\r
-\r
- // Create wrapper div\r
- div.setAttribute("id", id_prefix + "_div");\r
- div.setAttribute("width", width);\r
- div.setAttribute("height", (height));\r
- div.style.position = "absolute";\r
- div.style.left = left + "px";\r
- div.style.top = top + "px";\r
- div.style.width = width + "px";\r
- div.style.height = (height) + "px";\r
- div.style.backgroundColor = "white";\r
- div.style.display = "none";\r
-\r
- if (this.isGecko) {\r
- iframeWidth = width + 2;\r
- iframeHeight = height + 2;\r
- } else {\r
- iframeWidth = width;\r
- iframeHeight = height + 1;\r
- }\r
-\r
- // Create iframe\r
- iframe.setAttribute("id", id_prefix + "_iframe");\r
- iframe.setAttribute("name", id_prefix + "_iframe");\r
- iframe.setAttribute("border", "0");\r
- iframe.setAttribute("frameBorder", "0");\r
- iframe.setAttribute("marginWidth", "0");\r
- iframe.setAttribute("marginHeight", "0");\r
- iframe.setAttribute("leftMargin", "0");\r
- iframe.setAttribute("topMargin", "0");\r
- iframe.setAttribute("width", iframeWidth);\r
- iframe.setAttribute("height", iframeHeight);\r
-// iframe.setAttribute("src", "../jscripts/tiny_mce/blank.htm");\r
- // iframe.setAttribute("allowtransparency", "false");\r
- iframe.setAttribute("scrolling", "no");\r
- iframe.style.width = iframeWidth + "px";\r
- iframe.style.height = iframeHeight + "px";\r
- iframe.style.backgroundColor = "white";\r
- div.appendChild(iframe);\r
-\r
- document.body.appendChild(div);\r
-\r
- // Fixed MSIE 5.0 issue\r
- div.innerHTML = div.innerHTML;\r
-\r
- if (this.isSafari) {\r
- // Give Safari some time to setup\r
- window.setTimeout(function() {\r
- doc = window.frames[id_prefix + '_iframe'].document;\r
- doc.open();\r
- doc.write(html);\r
- doc.close();\r
- }, 10);\r
- } else {\r
- doc = window.frames[id_prefix + '_iframe'].window.document\r
- doc.open();\r
- doc.write(html);\r
- doc.close();\r
- }\r
-\r
- div.style.display = "block";\r
-\r
- return div;\r
-};\r
-\r
-// Window instance\r
-function MCWindow() {\r
-};\r
-\r
-MCWindow.prototype.focus = function() {\r
- this.winElement.style.zIndex = mcWindows.zindex++;\r
- mcWindows.selectedWindow = this;\r
-};\r
-\r
-MCWindow.prototype.minimize = function() {\r
-};\r
-\r
-MCWindow.prototype.maximize = function() {\r
- \r
-};\r
-\r
-MCWindow.prototype.startResize = function() {\r
- mcWindows.action = "resize";\r
-};\r
-\r
-MCWindow.prototype.startMove = function(e) {\r
- mcWindows.action = "move";\r
-};\r
-\r
-MCWindow.prototype.close = function() {\r
- document.body.removeChild(this.winElement);\r
- mcWindows.windows[this.name] = null;\r
-};\r
-\r
-MCWindow.prototype.onMouseMove = function(e) {\r
- var scrollX = 0;//this.doc.body.scrollLeft;\r
- var scrollY = 0;//this.doc.body.scrollTop;\r
-\r
- // Calculate real X, Y\r
- var dx = e.screenX - mcWindows.mouseDownScreenX;\r
- var dy = e.screenY - mcWindows.mouseDownScreenY;\r
-\r
- switch (mcWindows.action) {\r
- case "resize":\r
- width = mcWindows.mouseDownWidth + (e.screenX - mcWindows.mouseDownScreenX);\r
- height = mcWindows.mouseDownHeight + (e.screenY - mcWindows.mouseDownScreenY);\r
-\r
- width = width < 100 ? 100 : width;\r
- height = height < 100 ? 100 : height;\r
-\r
- this.wrapperIFrameElement.style.width = width+2;\r
- this.wrapperIFrameElement.style.height = height+2;\r
- this.wrapperIFrameElement.width = width+2;\r
- this.wrapperIFrameElement.height = height+2;\r
- this.winElement.style.width = width;\r
- this.winElement.style.height = height;\r
-\r
- height = height-12-19;\r
-\r
- this.containerElement.style.width = width;\r
-\r
- this.iframeElement.style.width = width;\r
- this.iframeElement.style.height = height;\r
- this.bodyElement.style.width = width;\r
- this.bodyElement.style.height = height;\r
- this.headElement.style.width = width;\r
- //this.statusElement.style.width = width;\r
-\r
- mcWindows.cancelEvent(e);\r
- break;\r
-\r
- case "move":\r
- this.left = mcWindows.mouseDownLayerX + (e.screenX - mcWindows.mouseDownScreenX);\r
- this.top = mcWindows.mouseDownLayerY + (e.screenY - mcWindows.mouseDownScreenY);\r
- this.winElement.style.left = this.left + "px";\r
- this.winElement.style.top = this.top + "px";\r
-\r
- mcWindows.cancelEvent(e);\r
- break;\r
- }\r
-};\r
-\r
-MCWindow.prototype.onMouseUp = function(e) {\r
- mcWindows.action = "none";\r
-};\r
-\r
-MCWindow.prototype.onFocus = function(e) {\r
- // Gecko only handler\r
- var winRef = e.currentTarget;\r
-\r
- for (var n in mcWindows.windows) {\r
- var win = mcWindows.windows[n];\r
- if (typeof(win) == 'function')\r
- continue;\r
-\r
- if (winRef.name == win.id) {\r
- win.focus();\r
- return;\r
- }\r
- }\r
-};\r
-\r
-MCWindow.prototype.onMouseDown = function(e) {\r
- var elm = mcWindows.isMSIE ? this.wrapperFrame.event.srcElement : e.target;\r
-\r
- var scrollX = 0;//this.doc.body.scrollLeft;\r
- var scrollY = 0;//this.doc.body.scrollTop;\r
-\r
- mcWindows.mouseDownScreenX = e.screenX;\r
- mcWindows.mouseDownScreenY = e.screenY;\r
- mcWindows.mouseDownLayerX = this.left;\r
- mcWindows.mouseDownLayerY = this.top;\r
- mcWindows.mouseDownWidth = parseInt(this.winElement.style.width);\r
- mcWindows.mouseDownHeight = parseInt(this.winElement.style.height);\r
-\r
- if (elm == this.resizeElement.firstChild)\r
- this.startResize(e);\r
- else\r
- this.startMove(e);\r
-\r
- mcWindows.cancelEvent(e);\r
-};\r
-\r
-// Global instance\r
-var mcWindows = new MCWindows();\r