+++ /dev/null
-// (c) Benoît PIN 2006-2007
-// http://plinn.org
-// Licence GPL
-
-var ELEMENTS_POOL = {};
-
-function initElementsPool() {
- // Element pool (for cloning)
- ELEMENTS_POOL["DIV_ELEMENT"] = {"node" : document.getElementById("div"),
- "beforeDraw" : null,
- "getRawData" : null,
- "putData" : null };
-
- imgBeforeDraw = function() {
- if (!this.node.src) {
- var dispatch = document.getElementById("ImgDispatcher");
- var strRatio = dispatch.value.split("_", 1)[0];
- var src = dispatch.value.substring(strRatio.length+1);
- this.ratio = new Number(strRatio).valueOf();
- this.node.src = PLINN_DOCUMENT_URL + '/' + src;
- var w = this.width;
- var size = (this.ratio > 1) ?
- new Point(w, Math.round(w * this.ratio)) :
- new Point(Math.round(w / this.ratio), w);
-
- this.resizeTo(size);
- }
- }
-
- ELEMENTS_POOL["IMG_ELEMENT"] = {"node" : document.getElementById("img"),
- "beforeDraw" : imgBeforeDraw,
- "getRawData" : function() {
- var src = this.node.src;
- src = src.split('/');
- return "attachments/" + src[src.length - 2] + "/getThumbnail";
- },
- "putData" : function(raw) {
- this.node.src = PLINN_DOCUMENT_URL+"/attachments/"+raw;
- }
- };
-
- epozBeforeDraw = function() {
- var rect = this
- var iframe = this.node.childNodes[0];
- var name = String(Math.floor(Math.random() * 10000));
- addListener(iframe, 'load', function(){initTextRectangle(iframe, name, rect);});
-
- var ta = this.node.childNodes[1];
- ta.name = name;
- ta.id = name;
- }
-
- ELEMENTS_POOL["EPOZ_ELEMENT"] = {"node" : document.getElementById("epoz"),
- "beforeDraw" : epozBeforeDraw,
- "getRawData" : function() {
- return this.node.childNodes[0].contentWindow.document.body.innerHTML;
- },
- "putData" : function(raw) {
- this.node.childNodes[1].value = raw;
- }
- };
-
- for (var i = 0 ; i < ELEMENTS_POOL.length ; i++)
- ELEMENTS_POOL[i].removeAttribute("id");
-}
-
-function Rectangle(upperLeftCorner, width, height, elementKey, ddOptions, ratio) {
- this.meta_type = "Rectangle"; // ;-)
- this.upperLeftCorner = upperLeftCorner;
- this.width = width;
- this.height = height;
- this.elementKey = elementKey;
- this.node = ELEMENTS_POOL[elementKey]["node"].cloneNode(true);
- with (this.node.style) {
- width="100%";
- height="100%";
- }
- this.beforeDraw = ELEMENTS_POOL[elementKey]["beforeDraw"];
- this.getRawData = ELEMENTS_POOL[elementKey]["getRawData"];
- this.ddOptions = (!ddOptions) ? 11 : ddOptions; // 11-> drag, resize, delete
- this.ratio = ratio;
-
- this.hostDiv = document.createElement("div");
- this.hostDiv.appendChild(this.node);
-
- this.resizeHandle = document.createElement("span");
- this.resizeHandle.className = "resize_handle";
- this.hostDiv.appendChild(this.resizeHandle);
-
- if((this.ddOptions & 8) == 8) { // move allowed
- this.movDelHandle = document.createElement("div");
- this.movDelHandle.className = "rectangle_header";
- var delImg = document.createElement("img");
- delImg.src = "delete_rectangle.gif";
- delImg.className = "rectangle_delimg";
- delImg.onmouseover=function(){this.src="delete_rectangle_hover.gif";}
- delImg.onmouseout=function(){this.src="delete_rectangle.gif";}
- this.movDelHandle.appendChild(delImg);
- this.hostDiv.appendChild(this.movDelHandle);
- this.movDelHandle.rectangle = this;
- delImg.rectangle = this;
-
- }
-
- // backward references
- this.style = this.hostDiv.style;
- this.node.rectangle = this;
- this.hostDiv.rectangle = this;
- this.resizeHandle.rectangle = this;
-}
-
-Rectangle.prototype.showHandles = function() {
- if (this.resizeHandle)
- this.resizeHandle.style.visibility = "visible";
- if (this.movDelHandle)
- this.movDelHandle.style.visibility = "visible";
-};
-
-Rectangle.prototype.hideHandles = function() {
- if (this.resizeHandle)
- this.resizeHandle.style.visibility = "hidden";
- if (this.movDelHandle)
- this.movDelHandle.style.visibility = "hidden";
-};
-
-Rectangle.prototype._mac_moveDelHandle = function() {
- // fix height
- var epozWindow = this.node.childNodes[0].contentWindow;
- if (epozWindow.scrollMaxY)
- this.resizeHandle.style.right = "15px";
- else
- this.resizeHandle.style.right = "0px";
-
- // fix width
- if (epozWindow.scrollMaxX)
- this.resizeHandle.style.bottom = "15px";
- else
- this.resizeHandle.style.bottom = "0px";
-};
-
-
-Rectangle.prototype.draw = function(container, position) {
- if (this.beforeDraw)
- this.beforeDraw();
- var style = this.style;
- style.left = String(this.upperLeftCorner.x) + "px";
- style.top = String(this.upperLeftCorner.y) + "px";
- style.width = String(this.width) + "px";
- style.height = String(this.height) + "px";
-
- style.display="block";
- var pos;
- if (!position)
- pos = "absolute";
- else
- pos = position;
- style.position = pos;
- setBorderStyle(this, "solid");
- setBorderWidth(this, "1px");
- style.visibility = "inherit";
-/* style.overflow = "hidden";*/
- if (container.meta_type == "Rectangle")
- setBorderColor(this, container.style.borderTopColor);
-
- container.appendChild(this.hostDiv);
-};
-
-
-Rectangle.prototype.moveTo = function(upperLeftCorner) {
- this.upperLeftCorner = upperLeftCorner;
- var style = this.style;
- style.left = String(this.upperLeftCorner.x) + "px";
- style.top = String(this.upperLeftCorner.y) + "px";
-};
-
-Rectangle.prototype.resizeTo = function(size, cancelOnresize) {
- if (size.x >= 10)
- this.width = size.x;
- if (size.y >= 10)
- this.height = size.y;
-
- var style = this.style;
- style.width = String(this.width) + "px";
- style.height = String(this.height) + "px";
- if (this.onresize && !cancelOnresize)
- this.onresize();
-};
-
-Rectangle.prototype.appendChild = function(node) {
- this.node.appendChild(node);
-};
-
-Rectangle.prototype.setId = function(id) {
- this.node.id = id;
-};
-
-
-
-function initTextRectangle(iframe, name, rect) {
- var ta = iframe.nextSibling; // ta -> textarea
- var data = ta.value;
-
- if (browser.isGecko) {
- // Just a few cleanups for Mozilla
- data = data.replace(/<strong>/ig,'<b>');
- data = data.replace(/<strong(\s[^>]*)>/ig,'<b$1>');
- data = data.replace(/<\/strong>/ig,'</b>');
-
- data = data.replace(/<em>/ig,'<i>');
- data = data.replace(/<em(\s[^>]*)>/ig,'<i$1>');
- data = data.replace(/<\/em>/ig,'</i>');
- }
-
- // change iframe id
- iframe.id = IFramePrefix + name;
- iframe.style.border = "0px none transparent";
-
-
- iframe.contentWindow.document.body.innerHTML = data;
- iframe.contentWindow.document.id = DocPrefix + name;
- addListener(iframe, "click", handlePlinnEpozRedirect);
- if (browser.isMac) {
- addListener(iframe.contentWindow.document, 'overflow', function(){rect._mac_moveDelHandle();});
- addListener(iframe.contentWindow.document, 'underflow', function(){rect._mac_moveDelHandle();});
- }
-
- if (browser.isGecko) {
- scriptExpr = 'EnableDesignMode("' + iframe.id + '");';
- window.setTimeout(scriptExpr, 10);
- }
-}
-
-// « overloads »
-
-function handlePlinnEpozRedirect(evt) {
- redirectPlinnEpoz(getTargetedObject(evt));
-}
-
-function redirectPlinnEpoz(iframe) {
- if(EpozElement) {
- if (EpozElement == iframe)
- return;
- unwrapPlinnEpozVariables();
- }
-
- // update Epoz variables
- wrapPlinnEpozVariables(iframe);
- EpozElement.contentWindow.focus();
-}
-
-function wrapPlinnEpozVariables(iframe) {
- fieldId = iframe.contentWindow.document.id.slice(DocPrefixLength);
-
- iframe.id = Epoz ;
- EpozElement=iframe;
- EpozTextArea = document.getElementById(fieldId);
-}
-
-
-function unwrapPlinnEpozVariables() {
- if (!EpozElement) // no redirection happens yet.
- return;
- try {
- fieldId = EpozElement.contentWindow.document.id.slice(DocPrefixLength);
- }
- catch (e) { }
-
- EpozElement.id = IFramePrefix + fieldId;
-}