+++ /dev/null
-// (c) BenoƮt PIN 2006-2007
-// http://plinn.org
-// Licence GPL
-
-// Global variables
-var CURRENT_LAYER;
-var LAYER_MANAGER;
-var XML_OUTPUT;
-var PLINN_DOCUMENT_URL;
-var GLOBAL_DD_CONTROLER;
-
-function initPlinn(root_container, xmlDataUrl) {
- PLINN_DOCUMENT_URL = document.getElementById("PlinnDocumentUrl").innerHTML;
- form_path = PLINN_DOCUMENT_URL+'/'; // for epoz
- initElementsPool();
- initWidgets();
- var imp = new XMLImport(xmlDataUrl, root_container);
- GLOBAL_DD_CONTROLER = new GlobalPlinnDDControler(root_container);
-}
-
-
-function initWidgets() {
- // Global control widgets
- XML_OUTPUT = document.getElementById("xml_output")
-}
-
-function initLayerManager(root_container) {
- LAYER_MANAGER = new LayerManager(root_container, new ColorIterator(240, 80, 60, 83)); // todo : move in config file
-}
-
-function Point(x, y) {
- this.x = x;
- this.y = y;
-}
-Point.prototype.difference = function(point) { return new Point(this.x - point.x, this.y - point.y); };
-Point.prototype.addition = function(point) { return new Point(this.x + point.x, this.y + point.y); };
-Point.prototype.toString = function() { return "(" + String(this.x) + ", " + String(this.y) + ")"; };
-
-
-function GlobalPlinnDDControler(root_container) {
- this.root_container = root_container;
- this.dragInProgress = false;
-
- this.currentRect = null;
- this.dragAllowed = null;
- this.resizeAllowed = null;
- this.scalable = null;
- this.deleteAllowed = null;
-
-
- //Constants
- this.DRAG_MODE = 0;
- this.RESIZE_MODE = 1;
-
- this.mode = this.DRAG_MODE;
- this.ddEventCaptureElmt = document;
-
- // event listeners
- var thisControler = this;
- with (this.root_container) {
- onmouseover = function(evt){thisControler.onmouseover(evt);};
- onmouseout = function(evt){thisControler.onmouseout(evt);};
- }
- with (this.ddEventCaptureElmt) {
- onmousedown = function(evt){thisControler.onmousedown(evt);};
- onmousemove = function(evt){thisControler.onmousemove(evt);};
- onmouseup = function(evt){thisControler.onmouseup(evt);};
- }
-}
-
-GlobalPlinnDDControler.prototype.onmouseover = function(evt) {
- if (this.dragInProgress) return;
- var ob = getTargetedObject(evt);
- var rect = ob.rectangle;
- if (!rect) return;
- rect.showHandles();
-};
-
-GlobalPlinnDDControler.prototype.onmouseout = function(evt) {
- if (this.dragInProgress) return;
- var ob = getTargetedObject(evt);
- var rect = ob.rectangle;
- if (!rect) return;
- rect.hideHandles();
-};
-
-GlobalPlinnDDControler.prototype.onmousedown = function(evt) {
- var ob = getTargetedObject(evt);
- var rect = ob.rectangle;
-
- if (!rect) return;
-
- this.currentRect = rect;
- this.setDDOptions(rect.ddOptions);
-
- var evt = getEventObject(evt);
- if (this.deleteAllowed && (
- (evt.shiftKey && evt.altKey) ||
- (ob.tagName == "IMG" && ob.className=="rectangle_delimg")) ) {
- if (confirm(PlinnLang["Do you realy want to delete ?"])) {
- var hostDiv = rect.hostDiv;
- hostDiv.parentNode.removeChild(hostDiv);
- }
- return;
- }
-
- this.originalClickPoint = new Point(evt.screenX, evt.screenY);
- this.originalSize = new Point(rect.width, rect.height);
- this.offsetPoint = rect.upperLeftCorner.difference(this.originalClickPoint);
-
- if (evt.shiftKey || (ob.tagName == "SPAN" && ob.className=="resize_handle")) {
- this.mode = this.RESIZE_MODE;
- this.startDrag(evt, rect);
- }
- else if(evt.altKey || (ob.tagName == "DIV" && ob.className=="rectangle_header")){
- this.mode = this.DRAG_MODE;
- this.startDrag(evt, rect);
- }
-};
-
-GlobalPlinnDDControler.prototype.onmousemove = function(evt) {
- var evt = getEventObject(evt);
- if (this.dragInProgress) {
- var rectangle = this.currentRect;
- if (this.dragAllowed && (this.mode == this.DRAG_MODE)) {
- var relativeEvtPoint = new Point(evt.screenX, evt.screenY).addition(this.offsetPoint);
- rectangle.moveTo(relativeEvtPoint);
- }
- else if (this.resizeAllowed && (this.mode == this.RESIZE_MODE)) {
- var delta = new Point(evt.screenX, evt.screenY).difference(this.originalClickPoint);
- var size = this.originalSize.addition(delta);
- if (this.scalable) {
- size = new Point(size.x, Math.round(size.x * rectangle.ratio));
- }
-
- rectangle.resizeTo(size);
- }
- if (browser.isIE) {
- try {document.selection.clear();}
- catch (e){return;}
- }
- }
-};
-
-GlobalPlinnDDControler.prototype.onmouseup = function(evt) {
- this.drop()
- var rectangle = this.currentRect;
- if (rectangle && rectangle.ondrop)
- rectangle.ondrop();
-};
-
-
-GlobalPlinnDDControler.prototype.startDrag = function(evt, rect) {
- disablePropagation(evt);
- disableDefault(evt);
- this.dragInProgress = true;
-};
-
-GlobalPlinnDDControler.prototype.drop = function() {this.dragInProgress = false;};
-
-GlobalPlinnDDControler.prototype.setDDOptions = function(options){
- this.dragAllowed = (options & 1) == 1;
- this.resizeAllowed = (options & 2) == 2;
- this.scalable = (options & 4) == 4;
- this.deleteAllowed = (options & 8) == 8;
-};
-
-
-
-function LayerManager(main_space, colorIterator) {
- this.space = main_space;
- this.layers = new Array();
- this.defaultLayerWidth = 800;
- this.defaultLayerHeight = 600;
- this.colorIterator = colorIterator;
- this.layerSelector = document.getElementById('layerSelector');
- var thisManager = this;
-
- // add layer selector commands
- // separator between layers list and layer commandes
- var sepOpt = document.createElement("option");
- sepOpt.innerHTML = "--------";
- sepOpt.disabled = "disabled";
- sepOpt.style.color = "#888";
-
- // new layer command
- var addLayerOpt = document.createElement("option");
- addLayerOpt.value = "add";
- addLayerOpt.innerHTML = PlinnLang["New layer"];
- addLayerOpt.style.color = "#000";
-
- // remove layer command
- var removeLayerOpt = document.createElement("option");
- removeLayerOpt.value = "rm";
- removeLayerOpt.innerHTML = PlinnLang["Remove layer"];
- removeLayerOpt.disabled = "disabled";
-
- with (this.layerSelector) {
- appendChild(sepOpt);
- appendChild(addLayerOpt);
- appendChild(removeLayerOpt);
- }
- addListener(this.layerSelector, 'change', function(){thisManager.activateLayer();});
-}
-
-LayerManager.prototype.addLayer = function(position) {
- var color = this.colorIterator.next();
- var mode = 6; // resize and delete
- if (this.layers.length <= 1)
- mode = 2; // resize only
- var l = new Rectangle(new Point(0, 0), this.defaultLayerWidth, this.defaultLayerHeight, "DIV_ELEMENT", 2);
- setBorderColor(l, color.toRGBString());
- l.onresize = resizeOnMouseMove;
- l.ondrop = resizeOnDrop;
- l.style.overflow = "hidden";
- l.draw(this.space, position);
- var index = this.layers.push(l) - 1;
-
- var opt = document.createElement("option");
- strId = String(index);
- opt.value = strId;
- opt.id = "layer_" + strId;
- opt.innerHTML = PlinnLang["Layer "] + strId;
- opt.style.color = color.toRGBString();
- this.layerSelector.insertBefore(opt, this.layerSelector.childNodes[this.layers.length-1]);
-
- // If there's only one layer, the remove command is disabled.
- if (this.layers.length > 1) {
- var rmCommand = this.layerSelector.childNodes[this.layerSelector.length -1]
- rmCommand.removeAttribute("disabled");
- rmCommand.style.color="#000";
- }
- this.activateLayer(index);
-};
-
-LayerManager.prototype.activateLayer = function(index) {
- var layerSelector = this.layerSelector;
- var index = (index != null) ? index : layerSelector.value;
- // handle commands
- index = ( Number(index) || Number(index ) == 0 ) ? Number(index) : index
-
- if (typeof(index) == typeof('')) {
- switch (index) {
- case "add" :
- this.addLayer();
- break;
- case "rm" :
- this.removeCurrentLayer();
- break;
- };
- return;
- }
-
- CURRENT_LAYER = this.layers[index];
- this._syncLayerStatusImage();
- var opt = document.getElementById("layer_" + String(index));
- layerSelector.selectedIndex = opt.index;
- layerSelector.style.color = opt.style.color;
- this.putCurrentLayerOnTop();
-};
-
-
-LayerManager.prototype.putCurrentLayerOnTop = function() {
- for(var i = 0 ; i < this.layers.length ; i++) {
- layer = this.layers[i];
- if (layer == CURRENT_LAYER)
- layer.style.zIndex = String(this.layers.length);
- else
- layer.style.zIndex = String(i);
- }
-};
-
-LayerManager.prototype.toggleLayerVisibility = function(){
- var currentVisibility = CURRENT_LAYER.style.visibility;
- if (currentVisibility == "hidden")
- CURRENT_LAYER.style.visibility = "visible";
- else
- CURRENT_LAYER.style.visibility = "hidden";
-
- this._syncLayerStatusImage();
-};
-
-LayerManager.prototype._syncLayerStatusImage = function() {
- var layerStatusImage = document.getElementById("layer_status");
- if (CURRENT_LAYER.style.visibility == "hidden") {
- layerStatusImage.src = "plinn_icons/hidden_layer.gif";
- layerStatusImage.title = PlinnLang["Show layer"];
- }
- else {
- layerStatusImage.src = "plinn_icons/visible_layer.gif";
- layerStatusImage.title = PlinnLang["Hide layer"];
- }
-};
-
-LayerManager.prototype.removeCurrentLayer = function() {
- var layersLength = this.layers.length;
- var layerSelector = this.layerSelector;
- var layer, deletedLayerIndex;
- for (var i = 0 ; i < layersLength ; i++) {
- layer = this.layers[i];
- if (layer == CURRENT_LAYER) {
- if (confirm(PlinnLang["confirm_layer_delete"] + i + "\" ?")) {
- this.space.removeChild(layer.hostDiv);
- this.layers.splice(i, 1);
- layerSelector.removeChild(layerSelector.childNodes[i]);
- deletedLayerIndex = i;
- break;
- }
- else {
- this.activateLayer(i);
- return;
- }
- }
- }
-
- // update layer indexes
- for (var i = 0 ; i < this.layers.length ; i++) {
- layerSelector.childNodes[i].value = String(i);
- layerSelector.childNodes[i].id = "layer_" + String(i);
- layerSelector.childNodes[i].innerHTML = PlinnLang["Layer "] + String(i);
- }
-
- if (this.layers.length == 1) {
- var removeCmdOpt = layerSelector.childNodes[layerSelector.childNodes.length - 1];
- removeCmdOpt.disabled = "disabled";
- removeCmdOpt.style.color = "#888";
- }
-
- if (deletedLayerIndex == 0)
- this.layers[0].style.position = "relative";
-
- // activate previous layer
- this.activateLayer((deletedLayerIndex > 0) ? --deletedLayerIndex : 0);
-
-};
-
-function resizeOnMouseMove() {
- if (LAYER_MANAGER.layers.length > 5)
- return; // to expensive
- else
- _resizeAllLayers(this);
-}
-
-function resizeOnDrop() { _resizeAllLayers(this);}
-
-function _resizeAllLayers(layer) {
- var layers = LAYER_MANAGER.layers;
- var size = new Point(layer.width, layer.height);
- var l;
- for(var i = 0 ; i < layers.length ; i++) {
- l = layers[i];
- if (layer != l)
- l.resizeTo(size, true);
- }
- LAYER_MANAGER.defaultLayerWidth = size.x;
- LAYER_MANAGER.defaultLayerHeight = size.y;
-}
-
-function CreateAttachmentLink(data) {
- // data like that : "title[attachment/a_file]
- var title = data.split("\[", 1)[0];
- var url =data.match(/\[(.*)\]/)[1];
- var link ="<a href=\"" + url + "\">" + title + "</a>";
- InsertHTML(link);
-}
\ No newline at end of file