]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/tiny_mce/plugins/visualchars/editor_plugin_src.js
Release 6.5.0
[Github/sugarcrm.git] / include / javascript / tiny_mce / plugins / visualchars / editor_plugin_src.js
1 /**
2  * editor_plugin_src.js
3  *
4  * Copyright 2009, Moxiecode Systems AB
5  * Released under LGPL License.
6  *
7  * License: http://tinymce.moxiecode.com/license
8  * Contributing: http://tinymce.moxiecode.com/contributing
9  */
10
11 (function() {
12         tinymce.create('tinymce.plugins.VisualChars', {
13                 init : function(ed, url) {
14                         var t = this;
15
16                         t.editor = ed;
17
18                         // Register commands
19                         ed.addCommand('mceVisualChars', t._toggleVisualChars, t);
20
21                         // Register buttons
22                         ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});
23
24                         ed.onBeforeGetContent.add(function(ed, o) {
25                                 if (t.state && o.format != 'raw' && !o.draft) {
26                                         t.state = true;
27                                         t._toggleVisualChars(false);
28                                 }
29                         });
30                 },
31
32                 getInfo : function() {
33                         return {
34                                 longname : 'Visual characters',
35                                 author : 'Moxiecode Systems AB',
36                                 authorurl : 'http://tinymce.moxiecode.com',
37                                 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',
38                                 version : tinymce.majorVersion + "." + tinymce.minorVersion
39                         };
40                 },
41
42                 // Private methods
43
44                 _toggleVisualChars : function(bookmark) {
45                         var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;
46
47                         t.state = !t.state;
48                         ed.controlManager.setActive('visualchars', t.state);
49
50                         if (bookmark)
51                                 bm = s.getBookmark();
52
53                         if (t.state) {
54                                 nl = [];
55                                 tinymce.walk(b, function(n) {
56                                         if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)
57                                                 nl.push(n);
58                                 }, 'childNodes');
59
60                                 for (i = 0; i < nl.length; i++) {
61                                         nv = nl[i].nodeValue;
62                                         nv = nv.replace(/(\u00a0)/g, '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');
63
64                                         div = ed.dom.create('div', null, nv);
65                                         while (node = div.lastChild)
66                                                 ed.dom.insertAfter(node, nl[i]);
67
68                                         ed.dom.remove(nl[i]);
69                                 }
70                         } else {
71                                 nl = ed.dom.select('span.mceItemNbsp', b);
72
73                                 for (i = nl.length - 1; i >= 0; i--)
74                                         ed.dom.remove(nl[i], 1);
75                         }
76
77                         s.moveToBookmark(bm);
78                 }
79         });
80
81         // Register plugin
82         tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);
83 })();