it-logica-application-backbone 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.18
1
+ 0.1.19
@@ -26,13 +26,13 @@
26
26
  theme_advanced_resizing:true,
27
27
  */
28
28
  theme:"advanced",
29
- plugins:"pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
29
+ plugins:"pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
30
30
 
31
31
  // Theme options
32
32
  //theme_advanced_buttons1:"save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
33
33
  theme_advanced_buttons1:"newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect",
34
34
  theme_advanced_buttons2:"cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code",
35
- theme_advanced_buttons3:"tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media",
35
+ theme_advanced_buttons3:"tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,media",
36
36
  theme_advanced_buttons4:"cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,|,insertdate,inserttime,preview,|,forecolor,backcolor,|,advhr,|,print,|,fullscreen",
37
37
  theme_advanced_toolbar_location:"top",
38
38
  theme_advanced_toolbar_align:"left",
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "it-logica-application-backbone"
8
- s.version = "0.1.18"
8
+ s.version = "0.1.19"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ladas"]
@@ -294,10 +294,6 @@ Gem::Specification.new do |s|
294
294
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js",
295
295
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js",
296
296
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm",
297
- "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css",
298
- "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js",
299
- "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js",
300
- "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif",
301
297
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/css/props.css",
302
298
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js",
303
299
  "app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: it-logica-application-backbone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.18
4
+ version: 0.1.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &83020800 !ruby/object:Gem::Requirement
16
+ requirement: &70579840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *83020800
24
+ version_requirements: *70579840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &83020470 !ruby/object:Gem::Requirement
27
+ requirement: &70578900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *83020470
35
+ version_requirements: *70578900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &83020080 !ruby/object:Gem::Requirement
38
+ requirement: &71102440 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *83020080
46
+ version_requirements: *71102440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &83019520 !ruby/object:Gem::Requirement
49
+ requirement: &71101260 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *83019520
57
+ version_requirements: *71101260
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &83018600 !ruby/object:Gem::Requirement
60
+ requirement: &71100170 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *83018600
68
+ version_requirements: *71100170
69
69
  description: longer description of your gem
70
70
  email: ladislav.smola@it-logica.cz
71
71
  executables: []
@@ -351,10 +351,6 @@ files:
351
351
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
352
352
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js
353
353
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
354
- - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css
355
- - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
356
- - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
357
- - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif
358
354
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
359
355
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js
360
356
  - app/assets/javascripts/backbone_js/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
@@ -539,7 +535,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
539
535
  version: '0'
540
536
  segments:
541
537
  - 0
542
- hash: 591356015
538
+ hash: -643480303
543
539
  required_rubygems_version: !ruby/object:Gem::Requirement
544
540
  none: false
545
541
  requirements:
@@ -1 +0,0 @@
1
- .mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}
@@ -1 +0,0 @@
1
- (function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}����������������\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(d){var e=this.editor,h=e.dom,g=e.selection,f=g.getRng(true);c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!d||h.decode(i.innerHTML)==d){h.remove(i,1)}}});g.setRng(f)},_markWords:function(l){var h=this.editor,g=h.dom,j=h.getDoc(),i=h.selection,d=i.getRng(true),e=[],k=l.join("|"),m=this._getSeparators(),f=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(h.getBody(),function(o){if(o.nodeType==3){e.push(o)}});c(e,function(t){var r,q,o,s,p=t.nodeValue;if(f.test(p)){p=g.encode(p);q=g.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(f,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1<span class="mceItemHiddenSpellWord">$2</span>')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
@@ -1,436 +0,0 @@
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
- var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;
13
-
14
- tinymce.create('tinymce.plugins.SpellcheckerPlugin', {
15
- getInfo : function() {
16
- return {
17
- longname : 'Spellchecker',
18
- author : 'Moxiecode Systems AB',
19
- authorurl : 'http://tinymce.moxiecode.com',
20
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',
21
- version : tinymce.majorVersion + "." + tinymce.minorVersion
22
- };
23
- },
24
-
25
- init : function(ed, url) {
26
- var t = this, cm;
27
-
28
- t.url = url;
29
- t.editor = ed;
30
- t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");
31
-
32
- if (t.rpcUrl == '{backend}') {
33
- // Sniff if the browser supports native spellchecking (Don't know of a better way)
34
- if (tinymce.isIE)
35
- return;
36
-
37
- t.hasSupport = true;
38
-
39
- // Disable the context menu when spellchecking is active
40
- ed.onContextMenu.addToTop(function(ed, e) {
41
- if (t.active)
42
- return false;
43
- });
44
- }
45
-
46
- // Register commands
47
- ed.addCommand('mceSpellCheck', function() {
48
- if (t.rpcUrl == '{backend}') {
49
- // Enable/disable native spellchecker
50
- t.editor.getBody().spellcheck = t.active = !t.active;
51
- return;
52
- }
53
-
54
- if (!t.active) {
55
- ed.setProgressState(1);
56
- t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {
57
- if (r.length > 0) {
58
- t.active = 1;
59
- t._markWords(r);
60
- ed.setProgressState(0);
61
- ed.nodeChanged();
62
- } else {
63
- ed.setProgressState(0);
64
-
65
- if (ed.getParam('spellchecker_report_no_misspellings', true))
66
- ed.windowManager.alert('spellchecker.no_mpell');
67
- }
68
- });
69
- } else
70
- t._done();
71
- });
72
-
73
- if (ed.settings.content_css !== false)
74
- ed.contentCSS.push(url + '/css/content.css');
75
-
76
- ed.onClick.add(t._showMenu, t);
77
- ed.onContextMenu.add(t._showMenu, t);
78
- ed.onBeforeGetContent.add(function() {
79
- if (t.active)
80
- t._removeWords();
81
- });
82
-
83
- ed.onNodeChange.add(function(ed, cm) {
84
- cm.setActive('spellchecker', t.active);
85
- });
86
-
87
- ed.onSetContent.add(function() {
88
- t._done();
89
- });
90
-
91
- ed.onBeforeGetContent.add(function() {
92
- t._done();
93
- });
94
-
95
- ed.onBeforeExecCommand.add(function(ed, cmd) {
96
- if (cmd == 'mceFullScreen')
97
- t._done();
98
- });
99
-
100
- // Find selected language
101
- t.languages = {};
102
- each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {
103
- if (k.indexOf('+') === 0) {
104
- k = k.substring(1);
105
- t.selectedLang = v;
106
- }
107
-
108
- t.languages[k] = v;
109
- });
110
- },
111
-
112
- createControl : function(n, cm) {
113
- var t = this, c, ed = t.editor;
114
-
115
- if (n == 'spellchecker') {
116
- // Use basic button if we use the native spellchecker
117
- if (t.rpcUrl == '{backend}') {
118
- // Create simple toggle button if we have native support
119
- if (t.hasSupport)
120
- c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
121
-
122
- return c;
123
- }
124
-
125
- c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
126
-
127
- c.onRenderMenu.add(function(c, m) {
128
- m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
129
- each(t.languages, function(v, k) {
130
- var o = {icon : 1}, mi;
131
-
132
- o.onclick = function() {
133
- if (v == t.selectedLang) {
134
- return;
135
- }
136
- mi.setSelected(1);
137
- t.selectedItem.setSelected(0);
138
- t.selectedItem = mi;
139
- t.selectedLang = v;
140
- };
141
-
142
- o.title = k;
143
- mi = m.add(o);
144
- mi.setSelected(v == t.selectedLang);
145
-
146
- if (v == t.selectedLang)
147
- t.selectedItem = mi;
148
- })
149
- });
150
-
151
- return c;
152
- }
153
- },
154
-
155
- // Internal functions
156
-
157
- _walk : function(n, f) {
158
- var d = this.editor.getDoc(), w;
159
-
160
- if (d.createTreeWalker) {
161
- w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
162
-
163
- while ((n = w.nextNode()) != null)
164
- f.call(this, n);
165
- } else
166
- tinymce.walk(n, f, 'childNodes');
167
- },
168
-
169
- _getSeparators : function() {
170
- var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');
171
-
172
- // Build word separator regexp
173
- for (i=0; i<str.length; i++)
174
- re += '\\' + str.charAt(i);
175
-
176
- return re;
177
- },
178
-
179
- _getWords : function() {
180
- var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];
181
-
182
- // Get area text
183
- this._walk(ed.getBody(), function(n) {
184
- if (n.nodeType == 3)
185
- tx += n.nodeValue + ' ';
186
- });
187
-
188
- // split the text up into individual words
189
- if (ed.getParam('spellchecker_word_pattern')) {
190
- // look for words that match the pattern
191
- rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');
192
- } else {
193
- // Split words by separator
194
- tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');
195
- tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));
196
- rawWords = tx.split(' ');
197
- }
198
-
199
- // Build word array and remove duplicates
200
- each(rawWords, function(v) {
201
- if (!lo[v]) {
202
- wl.push(v);
203
- lo[v] = 1;
204
- }
205
- });
206
-
207
- return wl;
208
- },
209
-
210
- _removeWords : function(w) {
211
- var ed = this.editor, dom = ed.dom, se = ed.selection, r = se.getRng(true);
212
-
213
- each(dom.select('span').reverse(), function(n) {
214
- if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {
215
- if (!w || dom.decode(n.innerHTML) == w)
216
- dom.remove(n, 1);
217
- }
218
- });
219
-
220
- se.setRng(r);
221
- },
222
-
223
- _markWords : function(wl) {
224
- var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, r = se.getRng(true), nl = [],
225
- w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');
226
-
227
- // Collect all text nodes
228
- this._walk(ed.getBody(), function(n) {
229
- if (n.nodeType == 3) {
230
- nl.push(n);
231
- }
232
- });
233
-
234
- // Wrap incorrect words in spans
235
- each(nl, function(n) {
236
- var node, elem, txt, pos, v = n.nodeValue;
237
-
238
- if (rx.test(v)) {
239
- // Encode the content
240
- v = dom.encode(v);
241
- // Create container element
242
- elem = dom.create('span', {'class' : 'mceItemHidden'});
243
-
244
- // Following code fixes IE issues by creating text nodes
245
- // using DOM methods instead of innerHTML.
246
- // Bug #3124: <PRE> elements content is broken after spellchecking.
247
- // Bug #1408: Preceding whitespace characters are removed
248
- // @TODO: I'm not sure that both are still issues on IE9.
249
- if (tinymce.isIE) {
250
- // Enclose mispelled words with temporal tag
251
- v = v.replace(rx, '$1<mcespell>$2</mcespell>');
252
- // Loop over the content finding mispelled words
253
- while ((pos = v.indexOf('<mcespell>')) != -1) {
254
- // Add text node for the content before the word
255
- txt = v.substring(0, pos);
256
- if (txt.length) {
257
- node = doc.createTextNode(dom.decode(txt));
258
- elem.appendChild(node);
259
- }
260
- v = v.substring(pos+10);
261
- pos = v.indexOf('</mcespell>');
262
- txt = v.substring(0, pos);
263
- v = v.substring(pos+11);
264
- // Add span element for the word
265
- elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));
266
- }
267
- // Add text node for the rest of the content
268
- if (v.length) {
269
- node = doc.createTextNode(dom.decode(v));
270
- elem.appendChild(node);
271
- }
272
- } else {
273
- // Other browsers preserve whitespace characters on innerHTML usage
274
- elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');
275
- }
276
-
277
- // Finally, replace the node with the container
278
- dom.replace(elem, n);
279
- }
280
- });
281
-
282
- se.setRng(r);
283
- },
284
-
285
- _showMenu : function(ed, e) {
286
- var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;
287
-
288
- e = 0; // Fixes IE memory leak
289
-
290
- if (!m) {
291
- m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});
292
- t._menu = m;
293
- }
294
-
295
- if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {
296
- m.removeAll();
297
- m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
298
-
299
- t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {
300
- var ignoreRpc;
301
-
302
- m.removeAll();
303
-
304
- if (r.length > 0) {
305
- m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
306
- each(r, function(v) {
307
- m.add({title : v, onclick : function() {
308
- dom.replace(ed.getDoc().createTextNode(v), wordSpan);
309
- t._checkDone();
310
- }});
311
- });
312
-
313
- m.addSeparator();
314
- } else
315
- m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
316
-
317
- if (ed.getParam('show_ignore_words', true)) {
318
- ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');
319
- m.add({
320
- title : 'spellchecker.ignore_word',
321
- onclick : function() {
322
- var word = wordSpan.innerHTML;
323
-
324
- dom.remove(wordSpan, 1);
325
- t._checkDone();
326
-
327
- // tell the server if we need to
328
- if (ignoreRpc) {
329
- ed.setProgressState(1);
330
- t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {
331
- ed.setProgressState(0);
332
- });
333
- }
334
- }
335
- });
336
-
337
- m.add({
338
- title : 'spellchecker.ignore_words',
339
- onclick : function() {
340
- var word = wordSpan.innerHTML;
341
-
342
- t._removeWords(dom.decode(word));
343
- t._checkDone();
344
-
345
- // tell the server if we need to
346
- if (ignoreRpc) {
347
- ed.setProgressState(1);
348
- t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {
349
- ed.setProgressState(0);
350
- });
351
- }
352
- }
353
- });
354
- }
355
-
356
- if (t.editor.getParam("spellchecker_enable_learn_rpc")) {
357
- m.add({
358
- title : 'spellchecker.learn_word',
359
- onclick : function() {
360
- var word = wordSpan.innerHTML;
361
-
362
- dom.remove(wordSpan, 1);
363
- t._checkDone();
364
-
365
- ed.setProgressState(1);
366
- t._sendRPC('learnWord', [t.selectedLang, word], function(r) {
367
- ed.setProgressState(0);
368
- });
369
- }
370
- });
371
- }
372
-
373
- m.update();
374
- });
375
-
376
- p1 = DOM.getPos(ed.getContentAreaContainer());
377
- m.settings.offset_x = p1.x;
378
- m.settings.offset_y = p1.y;
379
-
380
- ed.selection.select(wordSpan);
381
- p1 = dom.getPos(wordSpan);
382
- m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);
383
-
384
- return tinymce.dom.Event.cancel(e);
385
- } else
386
- m.hideMenu();
387
- },
388
-
389
- _checkDone : function() {
390
- var t = this, ed = t.editor, dom = ed.dom, o;
391
-
392
- each(dom.select('span'), function(n) {
393
- if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {
394
- o = true;
395
- return false;
396
- }
397
- });
398
-
399
- if (!o)
400
- t._done();
401
- },
402
-
403
- _done : function() {
404
- var t = this, la = t.active;
405
-
406
- if (t.active) {
407
- t.active = 0;
408
- t._removeWords();
409
-
410
- if (t._menu)
411
- t._menu.hideMenu();
412
-
413
- if (la)
414
- t.editor.nodeChanged();
415
- }
416
- },
417
-
418
- _sendRPC : function(m, p, cb) {
419
- var t = this;
420
-
421
- JSONRequest.sendRPC({
422
- url : t.rpcUrl,
423
- method : m,
424
- params : p,
425
- success : cb,
426
- error : function(e, x) {
427
- t.editor.setProgressState(0);
428
- t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));
429
- }
430
- });
431
- }
432
- });
433
-
434
- // Register plugin
435
- tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);
436
- })();