2
* $Id: editor_plugin_src.js 205 2007-02-12 18:58:29Z spocke $
5
* @copyright Copyright � 2004-2007, Moxiecode Systems AB, All rights reserved.
8
var TinyMCE_NonEditablePlugin = {
11
longname : 'Non editable elements',
12
author : 'Moxiecode Systems AB',
13
authorurl : 'http://tinymce.moxiecode.com',
14
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',
15
version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
19
initInstance : function(inst) {
20
tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/noneditable/css/noneditable.css");
23
if (tinyMCE.isMSIE5_0)
24
tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi, 'Noneditable');
27
handleEvent : function(e) {
28
return this._moveSelection(e, tinyMCE.selectedInstance);
31
cleanup : function(type, content, inst) {
33
case "insert_to_editor_dom":
34
var nodes, i, editClass, nonEditClass, editable, elm;
40
nodes = tinyMCE.getNodeTree(content, [], 1);
42
editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
43
nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
45
for (i=0; i<nodes.length; i++) {
48
// Convert contenteditable to classes
49
editable = tinyMCE.getAttrib(elm, "contenteditable");
50
if (new RegExp("true|false","gi").test(editable))
51
TinyMCE_NonEditablePlugin._setEditable(elm, editable == "true");
54
if (tinyMCE.hasCSSClass(elm, editClass))
55
elm.contentEditable = true;
57
if (tinyMCE.hasCSSClass(elm, nonEditClass))
58
elm.contentEditable = false;
64
case "insert_to_editor":
65
var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
66
var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
68
// Replace mceItem to new school
69
content = content.replace(/mceItemEditable/g, editClass);
70
content = content.replace(/mceItemNonEditable/g, nonEditClass);
72
if (tinyMCE.isIE && (content.indexOf(editClass) != -1 || content.indexOf(nonEditClass) != -1)) {
73
content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")\"", "gi"), 'class="$1$2" contenteditable="true"');
74
content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")\"", "gi"), 'class="$1$2" contenteditable="false"');
75
content = content.replace(new RegExp("class=\"(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="true"');
76
content = content.replace(new RegExp("class=\"(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="false"');
77
content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="true"');
78
content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="false"');
83
case "get_from_editor_dom":
88
if (tinyMCE.getParam("noneditable_leave_contenteditable", false)) {
89
var nodes = tinyMCE.getNodeTree(content, new Array(), 1);
91
for (var i=0; i<nodes.length; i++)
92
nodes[i].removeAttribute("contenteditable");
101
_moveSelection : function(e, inst) {
102
var s, r, sc, ec, el, c = tinyMCE.getParam('noneditable_editable_class', 'mceNonEditable');
107
// Always select whole element
108
if (tinyMCE.isGecko) {
109
s = inst.selection.getSel();
111
sc = tinyMCE.getParentNode(r.startContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});
112
ec = tinyMCE.getParentNode(r.endContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});
114
sc && r.setStartBefore(sc);
115
ec && r.setEndAfter(ec);
118
if (e.type == 'keypress' && e.keyCode == 39) {
127
return tinyMCE.cancelEvent(e);
134
_setEditable : function(elm, state) {
135
var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
136
var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
138
var className = elm.className ? elm.className : "";
140
if (className.indexOf(editClass) != -1 || className.indexOf(nonEditClass) != -1)
143
if ((className = tinyMCE.getAttrib(elm, "class")) != "")
146
className += state ? editClass : nonEditClass;
148
elm.setAttribute("class", className);
149
elm.className = className;
153
tinyMCE.addPlugin("noneditable", TinyMCE_NonEditablePlugin);