--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/clientside/tinymce/plugins/layer/editor_plugin_src.js Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,248 @@
+/**
+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+/* Import plugin specific language pack */
+tinyMCE.importPluginLanguagePack('layer');
+
+var TinyMCE_LayerPlugin = {
+ getInfo : function() {
+ return {
+ longname : 'Layer',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',
+ version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
+ };
+ },
+
+ initInstance : function(inst) {
+ if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+ inst.getDoc().execCommand('2D-Position');
+ },
+
+ handleEvent : function(e) {
+ var inst = tinyMCE.selectedInstance;
+ var w = inst.getWin(), le = inst._lastStyleElm, e;
+
+ if (tinyMCE.isGecko) {
+ e = this._getParentLayer(inst.getFocusElement());
+
+ if (e) {
+ if (!inst._lastStyleElm) {
+ e.style.overflow = 'auto';
+ inst._lastStyleElm = e;
+ }
+ } else if (le) {
+ le = inst._lastStyleElm;
+ le.style.width = le.scrollWidth + 'px';
+ le.style.height = le.scrollHeight + 'px';
+ le.style.overflow = '';
+ inst._lastStyleElm = null;
+ }
+ }
+
+ return true;
+ },
+
+ handleVisualAid : function(el, deep, state, inst) {
+ var nl = inst.getDoc().getElementsByTagName("div"), i;
+
+ for (i=0; i<nl.length; i++) {
+ if (new RegExp('absolute|relative|static', 'gi').test(nl[i].style.position)) {
+ if (state)
+ tinyMCE.addCSSClass(nl[i], 'mceVisualAid');
+ else
+ tinyMCE.removeCSSClass(nl[i], 'mceVisualAid');
+ }
+ }
+ },
+
+ getControlHTML : function(cn) {
+ switch (cn) {
+ case "moveforward":
+ return tinyMCE.getButtonHTML(cn, 'lang_layer_forward_desc', '{$pluginurl}/images/moveforward.gif', 'mceMoveForward', true);
+
+ case "movebackward":
+ return tinyMCE.getButtonHTML(cn, 'lang_layer_backward_desc', '{$pluginurl}/images/movebackward.gif', 'mceMoveBackward', true);
+
+ case "absolute":
+ return tinyMCE.getButtonHTML(cn, 'lang_layer_absolute_desc', '{$pluginurl}/images/absolute.gif', 'mceMakeAbsolute', true);
+
+ case "insertlayer":
+ return tinyMCE.getButtonHTML(cn, 'lang_layer_insertlayer_desc', '{$pluginurl}/images/insertlayer.gif', 'mceInsertLayer', true);
+ }
+
+ return "";
+ },
+
+ execCommand : function(editor_id, element, command, user_interface, value) {
+ // Handle commands
+ switch (command) {
+ case "mceInsertLayer":
+ this._insertLayer();
+ return true;
+
+ case "mceMoveForward":
+ this._move(1);
+ return true;
+
+ case "mceMoveBackward":
+ this._move(-1);
+ return true;
+
+ case "mceMakeAbsolute":
+ this._toggleAbsolute();
+ return true;
+ }
+
+ // Pass to next handler in chain
+ return false;
+ },
+
+ handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
+ var inst = tinyMCE.getInstanceById(editor_id);
+ var le = this._getParentLayer(inst.getFocusElement());
+ var p = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');
+
+ tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonDisabled');
+ tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonDisabled');
+
+ if (p)
+ tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonNormal');
+
+ if (le && le.style.position.toLowerCase() == "absolute") {
+ tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonSelected');
+ tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonNormal');
+ tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonNormal');
+ }
+ },
+
+ // Private plugin specific methods
+
+ _move : function(d) {
+ var inst = tinyMCE.selectedInstance, i, z = new Array();
+ var le = this._getParentLayer(inst.getFocusElement()), ci = -1, fi = -1;
+ var nl = tinyMCE.selectNodes(inst.getBody(), function(n) {
+ return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);
+ });
+
+ // Find z-indexes
+ for (i=0; i<nl.length; i++) {
+ z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;
+
+ if (ci < 0 && nl[i] == le)
+ ci = i;
+ }
+
+ if (d < 0) {
+ // Move back
+
+ // Try find a lower one
+ for (i=0; i<z.length; i++) {
+ if (z[i] < z[ci]) {
+ fi = i;
+ break;
+ }
+ }
+
+ if (fi > -1) {
+ nl[ci].style.zIndex = z[fi];
+ nl[fi].style.zIndex = z[ci];
+ } else {
+ if (z[ci] > 0)
+ nl[ci].style.zIndex = z[ci] - 1;
+ }
+ } else {
+ // Move forward
+
+ // Try find a higher one
+ for (i=0; i<z.length; i++) {
+ if (z[i] > z[ci]) {
+ fi = i;
+ break;
+ }
+ }
+
+ if (fi > -1) {
+ nl[ci].style.zIndex = z[fi];
+ nl[fi].style.zIndex = z[ci];
+ } else
+ nl[ci].style.zIndex = z[ci] + 1;
+ }
+
+ inst.repaint();
+ },
+
+ _getParentLayer : function(n) {
+ return tinyMCE.getParentNode(n, function(n) {
+ return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);
+ });
+ },
+
+ _insertLayer : function() {
+ var inst = tinyMCE.selectedInstance;
+ var e = tinyMCE.getParentElement(inst.getFocusElement());
+ var p = tinyMCE.getAbsPosition(e);
+ var d = inst.getDoc();
+ var ne = d.createElement('div');
+ var h = inst.selection.getSelectedHTML();
+
+ // Move div
+ ne.style.position = 'absolute';
+ ne.style.left = p.absLeft + 'px';
+ ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px';
+ ne.style.width = '100px';
+ ne.style.height = '100px';
+ ne.className = 'mceVisualAid';
+
+ if (!h)
+ h = tinyMCE.getLang('lang_layer_content');
+
+ ne.innerHTML = h;
+
+ // Add it
+ d.body.appendChild(ne);
+ },
+
+ _toggleAbsolute : function() {
+ var inst = tinyMCE.selectedInstance;
+ var le = this._getParentLayer(inst.getFocusElement());
+
+ if (le == null)
+ le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');
+
+ if (le) {
+ if (le.style.position.toLowerCase() == "absolute") {
+ le.style.position = "";
+ le.style.left = "";
+ le.style.top = "";
+ } else {
+ le.style.position = "absolute";
+
+ if (le.style.left == "")
+ le.style.left = 20 + 'px';
+
+ if (le.style.top == "")
+ le.style.top = 20 + 'px';
+
+ if (le.style.width == "")
+ le.style.width = le.width ? (le.width + 'px') : '100px';
+
+ if (le.style.height == "")
+ le.style.height = le.height ? (le.height + 'px') : '100px';
+
+ tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
+ }
+
+ inst.repaint();
+ tinyMCE.triggerNodeChange();
+ }
+ }
+};
+
+tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin);