mirador_rails 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/app/controllers/mirador_rails/locales_controller.rb +10 -0
  4. data/config/routes.rb +7 -0
  5. data/lib/mirador_rails/exceptions.rb +6 -0
  6. data/lib/mirador_rails/locale.rb +24 -0
  7. data/lib/mirador_rails/version.rb +1 -1
  8. data/lib/mirador_rails.rb +9 -2
  9. data/mirador_rails.gemspec +3 -0
  10. data/tasks/mirador_rails.rake +44 -10
  11. data/vendor/assets/images/border_type_4.png +0 -0
  12. data/vendor/assets/images/border_type_5.png +0 -0
  13. data/vendor/assets/javascripts/mirador/mirador.js.erb +20105 -0
  14. data/vendor/assets/javascripts/mirador.js +4 -1
  15. data/vendor/assets/locales/de/translation.json +3 -0
  16. data/vendor/assets/locales/en/translation.json +11 -7
  17. data/vendor/assets/locales/ko/translation.json +18 -9
  18. data/vendor/assets/stylesheets/enhancements.scss +36 -0
  19. data/vendor/assets/stylesheets/mirador-combined.css +1488 -1642
  20. data/vendor/assets/stylesheets/mirador.css +1 -0
  21. metadata +52 -174
  22. data/vendor/assets/javascripts/mirador.min.js +0 -89
  23. data/vendor/assets/javascripts/mirador.min.js.map +0 -1
  24. data/vendor/assets/plugins/plugins/advlist/plugin.js +0 -97
  25. data/vendor/assets/plugins/plugins/advlist/plugin.min.js +0 -1
  26. data/vendor/assets/plugins/plugins/anchor/plugin.js +0 -45
  27. data/vendor/assets/plugins/plugins/anchor/plugin.min.js +0 -1
  28. data/vendor/assets/plugins/plugins/autolink/plugin.js +0 -194
  29. data/vendor/assets/plugins/plugins/autolink/plugin.min.js +0 -1
  30. data/vendor/assets/plugins/plugins/autoresize/plugin.js +0 -152
  31. data/vendor/assets/plugins/plugins/autoresize/plugin.min.js +0 -1
  32. data/vendor/assets/plugins/plugins/autosave/plugin.js +0 -165
  33. data/vendor/assets/plugins/plugins/autosave/plugin.min.js +0 -1
  34. data/vendor/assets/plugins/plugins/bbcode/plugin.js +0 -123
  35. data/vendor/assets/plugins/plugins/bbcode/plugin.min.js +0 -1
  36. data/vendor/assets/plugins/plugins/charmap/plugin.js +0 -370
  37. data/vendor/assets/plugins/plugins/charmap/plugin.min.js +0 -1
  38. data/vendor/assets/plugins/plugins/code/plugin.js +0 -60
  39. data/vendor/assets/plugins/plugins/code/plugin.min.js +0 -1
  40. data/vendor/assets/plugins/plugins/colorpicker/plugin.js +0 -112
  41. data/vendor/assets/plugins/plugins/colorpicker/plugin.min.js +0 -1
  42. data/vendor/assets/plugins/plugins/compat3x/css/dialog.css +0 -118
  43. data/vendor/assets/plugins/plugins/compat3x/img/buttons.png +0 -0
  44. data/vendor/assets/plugins/plugins/compat3x/img/icons.gif +0 -0
  45. data/vendor/assets/plugins/plugins/compat3x/img/items.gif +0 -0
  46. data/vendor/assets/plugins/plugins/compat3x/img/menu_arrow.gif +0 -0
  47. data/vendor/assets/plugins/plugins/compat3x/img/menu_check.gif +0 -0
  48. data/vendor/assets/plugins/plugins/compat3x/img/progress.gif +0 -0
  49. data/vendor/assets/plugins/plugins/compat3x/img/tabs.gif +0 -0
  50. data/vendor/assets/plugins/plugins/compat3x/plugin.js +0 -297
  51. data/vendor/assets/plugins/plugins/compat3x/plugin.min.js +0 -1
  52. data/vendor/assets/plugins/plugins/compat3x/tiny_mce_popup.js +0 -542
  53. data/vendor/assets/plugins/plugins/compat3x/utils/editable_selects.js +0 -70
  54. data/vendor/assets/plugins/plugins/compat3x/utils/form_utils.js +0 -210
  55. data/vendor/assets/plugins/plugins/compat3x/utils/mctabs.js +0 -164
  56. data/vendor/assets/plugins/plugins/compat3x/utils/validate.js +0 -252
  57. data/vendor/assets/plugins/plugins/contextmenu/plugin.js +0 -87
  58. data/vendor/assets/plugins/plugins/contextmenu/plugin.min.js +0 -1
  59. data/vendor/assets/plugins/plugins/directionality/plugin.js +0 -64
  60. data/vendor/assets/plugins/plugins/directionality/plugin.min.js +0 -1
  61. data/vendor/assets/plugins/plugins/emoticons/img/smiley-cool.gif +0 -0
  62. data/vendor/assets/plugins/plugins/emoticons/img/smiley-cry.gif +0 -0
  63. data/vendor/assets/plugins/plugins/emoticons/img/smiley-embarassed.gif +0 -0
  64. data/vendor/assets/plugins/plugins/emoticons/img/smiley-foot-in-mouth.gif +0 -0
  65. data/vendor/assets/plugins/plugins/emoticons/img/smiley-frown.gif +0 -0
  66. data/vendor/assets/plugins/plugins/emoticons/img/smiley-innocent.gif +0 -0
  67. data/vendor/assets/plugins/plugins/emoticons/img/smiley-kiss.gif +0 -0
  68. data/vendor/assets/plugins/plugins/emoticons/img/smiley-laughing.gif +0 -0
  69. data/vendor/assets/plugins/plugins/emoticons/img/smiley-money-mouth.gif +0 -0
  70. data/vendor/assets/plugins/plugins/emoticons/img/smiley-sealed.gif +0 -0
  71. data/vendor/assets/plugins/plugins/emoticons/img/smiley-smile.gif +0 -0
  72. data/vendor/assets/plugins/plugins/emoticons/img/smiley-surprised.gif +0 -0
  73. data/vendor/assets/plugins/plugins/emoticons/img/smiley-tongue-out.gif +0 -0
  74. data/vendor/assets/plugins/plugins/emoticons/img/smiley-undecided.gif +0 -0
  75. data/vendor/assets/plugins/plugins/emoticons/img/smiley-wink.gif +0 -0
  76. data/vendor/assets/plugins/plugins/emoticons/img/smiley-yell.gif +0 -0
  77. data/vendor/assets/plugins/plugins/emoticons/plugin.js +0 -65
  78. data/vendor/assets/plugins/plugins/emoticons/plugin.min.js +0 -1
  79. data/vendor/assets/plugins/plugins/example/dialog.html +0 -8
  80. data/vendor/assets/plugins/plugins/example/plugin.js +0 -68
  81. data/vendor/assets/plugins/plugins/example/plugin.min.js +0 -1
  82. data/vendor/assets/plugins/plugins/example_dependency/plugin.js +0 -22
  83. data/vendor/assets/plugins/plugins/example_dependency/plugin.min.js +0 -1
  84. data/vendor/assets/plugins/plugins/fullpage/plugin.js +0 -490
  85. data/vendor/assets/plugins/plugins/fullpage/plugin.min.js +0 -1
  86. data/vendor/assets/plugins/plugins/fullscreen/plugin.js +0 -136
  87. data/vendor/assets/plugins/plugins/fullscreen/plugin.min.js +0 -1
  88. data/vendor/assets/plugins/plugins/hr/plugin.js +0 -30
  89. data/vendor/assets/plugins/plugins/hr/plugin.min.js +0 -1
  90. data/vendor/assets/plugins/plugins/image/plugin.js +0 -439
  91. data/vendor/assets/plugins/plugins/image/plugin.min.js +0 -1
  92. data/vendor/assets/plugins/plugins/importcss/plugin.js +0 -195
  93. data/vendor/assets/plugins/plugins/importcss/plugin.min.js +0 -1
  94. data/vendor/assets/plugins/plugins/insertdatetime/plugin.js +0 -121
  95. data/vendor/assets/plugins/plugins/insertdatetime/plugin.min.js +0 -1
  96. data/vendor/assets/plugins/plugins/layer/plugin.js +0 -225
  97. data/vendor/assets/plugins/plugins/layer/plugin.min.js +0 -1
  98. data/vendor/assets/plugins/plugins/legacyoutput/plugin.js +0 -211
  99. data/vendor/assets/plugins/plugins/legacyoutput/plugin.min.js +0 -1
  100. data/vendor/assets/plugins/plugins/link/plugin.js +0 -400
  101. data/vendor/assets/plugins/plugins/link/plugin.min.js +0 -1
  102. data/vendor/assets/plugins/plugins/lists/plugin.js +0 -791
  103. data/vendor/assets/plugins/plugins/lists/plugin.min.js +0 -1
  104. data/vendor/assets/plugins/plugins/media/moxieplayer.swf +0 -0
  105. data/vendor/assets/plugins/plugins/media/plugin.js +0 -774
  106. data/vendor/assets/plugins/plugins/media/plugin.min.js +0 -1
  107. data/vendor/assets/plugins/plugins/nonbreaking/plugin.js +0 -53
  108. data/vendor/assets/plugins/plugins/nonbreaking/plugin.min.js +0 -1
  109. data/vendor/assets/plugins/plugins/noneditable/plugin.js +0 -540
  110. data/vendor/assets/plugins/plugins/noneditable/plugin.min.js +0 -1
  111. data/vendor/assets/plugins/plugins/pagebreak/plugin.js +0 -88
  112. data/vendor/assets/plugins/plugins/pagebreak/plugin.min.js +0 -1
  113. data/vendor/assets/plugins/plugins/paste/classes/Clipboard.js +0 -634
  114. data/vendor/assets/plugins/plugins/paste/classes/Plugin.js +0 -110
  115. data/vendor/assets/plugins/plugins/paste/classes/Quirks.js +0 -159
  116. data/vendor/assets/plugins/plugins/paste/classes/Utils.js +0 -130
  117. data/vendor/assets/plugins/plugins/paste/classes/WordFilter.js +0 -493
  118. data/vendor/assets/plugins/plugins/paste/plugin.dev.js +0 -120
  119. data/vendor/assets/plugins/plugins/paste/plugin.js +0 -1625
  120. data/vendor/assets/plugins/plugins/paste/plugin.min.js +0 -1
  121. data/vendor/assets/plugins/plugins/preview/plugin.js +0 -88
  122. data/vendor/assets/plugins/plugins/preview/plugin.min.js +0 -1
  123. data/vendor/assets/plugins/plugins/print/plugin.js +0 -32
  124. data/vendor/assets/plugins/plugins/print/plugin.min.js +0 -1
  125. data/vendor/assets/plugins/plugins/save/plugin.js +0 -94
  126. data/vendor/assets/plugins/plugins/save/plugin.min.js +0 -1
  127. data/vendor/assets/plugins/plugins/searchreplace/plugin.js +0 -594
  128. data/vendor/assets/plugins/plugins/searchreplace/plugin.min.js +0 -1
  129. data/vendor/assets/plugins/plugins/spellchecker/classes/DomTextMatcher.js +0 -470
  130. data/vendor/assets/plugins/plugins/spellchecker/classes/Plugin.js +0 -436
  131. data/vendor/assets/plugins/plugins/spellchecker/plugin.dev.js +0 -117
  132. data/vendor/assets/plugins/plugins/spellchecker/plugin.js +0 -996
  133. data/vendor/assets/plugins/plugins/spellchecker/plugin.min.js +0 -1
  134. data/vendor/assets/plugins/plugins/tabfocus/plugin.js +0 -120
  135. data/vendor/assets/plugins/plugins/tabfocus/plugin.min.js +0 -1
  136. data/vendor/assets/plugins/plugins/table/classes/CellSelection.js +0 -176
  137. data/vendor/assets/plugins/plugins/table/classes/Dialogs.js +0 -749
  138. data/vendor/assets/plugins/plugins/table/classes/Plugin.js +0 -422
  139. data/vendor/assets/plugins/plugins/table/classes/Quirks.js +0 -372
  140. data/vendor/assets/plugins/plugins/table/classes/TableGrid.js +0 -864
  141. data/vendor/assets/plugins/plugins/table/plugin.dev.js +0 -118
  142. data/vendor/assets/plugins/plugins/table/plugin.js +0 -2680
  143. data/vendor/assets/plugins/plugins/table/plugin.min.js +0 -1
  144. data/vendor/assets/plugins/plugins/template/plugin.js +0 -262
  145. data/vendor/assets/plugins/plugins/template/plugin.min.js +0 -1
  146. data/vendor/assets/plugins/plugins/textcolor/plugin.js +0 -272
  147. data/vendor/assets/plugins/plugins/textcolor/plugin.min.js +0 -1
  148. data/vendor/assets/plugins/plugins/textpattern/plugin.js +0 -268
  149. data/vendor/assets/plugins/plugins/textpattern/plugin.min.js +0 -1
  150. data/vendor/assets/plugins/plugins/visualblocks/css/visualblocks.css +0 -135
  151. data/vendor/assets/plugins/plugins/visualblocks/img/address.gif +0 -0
  152. data/vendor/assets/plugins/plugins/visualblocks/img/article.gif +0 -0
  153. data/vendor/assets/plugins/plugins/visualblocks/img/aside.gif +0 -0
  154. data/vendor/assets/plugins/plugins/visualblocks/img/blockquote.gif +0 -0
  155. data/vendor/assets/plugins/plugins/visualblocks/img/div.gif +0 -0
  156. data/vendor/assets/plugins/plugins/visualblocks/img/dl.gif +0 -0
  157. data/vendor/assets/plugins/plugins/visualblocks/img/figure.gif +0 -0
  158. data/vendor/assets/plugins/plugins/visualblocks/img/h1.gif +0 -0
  159. data/vendor/assets/plugins/plugins/visualblocks/img/h2.gif +0 -0
  160. data/vendor/assets/plugins/plugins/visualblocks/img/h3.gif +0 -0
  161. data/vendor/assets/plugins/plugins/visualblocks/img/h4.gif +0 -0
  162. data/vendor/assets/plugins/plugins/visualblocks/img/h5.gif +0 -0
  163. data/vendor/assets/plugins/plugins/visualblocks/img/h6.gif +0 -0
  164. data/vendor/assets/plugins/plugins/visualblocks/img/hgroup.gif +0 -0
  165. data/vendor/assets/plugins/plugins/visualblocks/img/ol.gif +0 -0
  166. data/vendor/assets/plugins/plugins/visualblocks/img/p.gif +0 -0
  167. data/vendor/assets/plugins/plugins/visualblocks/img/pre.gif +0 -0
  168. data/vendor/assets/plugins/plugins/visualblocks/img/section.gif +0 -0
  169. data/vendor/assets/plugins/plugins/visualblocks/img/ul.gif +0 -0
  170. data/vendor/assets/plugins/plugins/visualblocks/plugin.js +0 -86
  171. data/vendor/assets/plugins/plugins/visualblocks/plugin.min.js +0 -1
  172. data/vendor/assets/plugins/plugins/visualchars/plugin.js +0 -88
  173. data/vendor/assets/plugins/plugins/visualchars/plugin.min.js +0 -1
  174. data/vendor/assets/plugins/plugins/wordcount/plugin.js +0 -69
  175. data/vendor/assets/plugins/plugins/wordcount/plugin.min.js +0 -1
  176. data/vendor/assets/skins/skins/lightgray/content.inline.min.css +0 -1
  177. data/vendor/assets/skins/skins/lightgray/content.min.css +0 -1
  178. data/vendor/assets/skins/skins/lightgray/fonts/tinymce-small.eot +0 -0
  179. data/vendor/assets/skins/skins/lightgray/fonts/tinymce-small.svg +0 -62
  180. data/vendor/assets/skins/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  181. data/vendor/assets/skins/skins/lightgray/fonts/tinymce-small.woff +0 -0
  182. data/vendor/assets/skins/skins/lightgray/fonts/tinymce.eot +0 -0
  183. data/vendor/assets/skins/skins/lightgray/fonts/tinymce.svg +0 -63
  184. data/vendor/assets/skins/skins/lightgray/fonts/tinymce.ttf +0 -0
  185. data/vendor/assets/skins/skins/lightgray/fonts/tinymce.woff +0 -0
  186. data/vendor/assets/skins/skins/lightgray/img/anchor.gif +0 -0
  187. data/vendor/assets/skins/skins/lightgray/img/loader.gif +0 -0
  188. data/vendor/assets/skins/skins/lightgray/img/object.gif +0 -0
  189. data/vendor/assets/skins/skins/lightgray/img/trans.gif +0 -0
  190. data/vendor/assets/skins/skins/lightgray/skin.ie7.min.css +0 -1
  191. data/vendor/assets/skins/skins/lightgray/skin.min.css +0 -1
  192. data/vendor/assets/themes/themes/modern/theme.js +0 -617
  193. data/vendor/assets/themes/themes/modern/theme.min.js +0 -1
@@ -1,372 +0,0 @@
1
- /**
2
- * Quirks.js
3
- *
4
- * Copyright, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://www.tinymce.com/license
8
- * Contributing: http://www.tinymce.com/contributing
9
- */
10
-
11
- /**
12
- * This class includes fixes for various browser quirks.
13
- *
14
- * @class tinymce.tableplugin.Quirks
15
- * @private
16
- */
17
- define("tinymce/tableplugin/Quirks", [
18
- "tinymce/util/VK",
19
- "tinymce/Env",
20
- "tinymce/util/Tools"
21
- ], function(VK, Env, Tools) {
22
- var each = Tools.each;
23
-
24
- function getSpanVal(td, name) {
25
- return parseInt(td.getAttribute(name) || 1, 10);
26
- }
27
-
28
- return function(editor) {
29
- /**
30
- * Fixed caret movement around tables on WebKit.
31
- */
32
- function moveWebKitSelection() {
33
- function eventHandler(e) {
34
- var key = e.keyCode;
35
-
36
- function handle(upBool, sourceNode) {
37
- var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
38
- var currentRow = editor.dom.getParent(sourceNode, 'tr');
39
- var siblingRow = currentRow[siblingDirection];
40
-
41
- if (siblingRow) {
42
- moveCursorToRow(editor, sourceNode, siblingRow, upBool);
43
- e.preventDefault();
44
- return true;
45
- } else {
46
- var tableNode = editor.dom.getParent(currentRow, 'table');
47
- var middleNode = currentRow.parentNode;
48
- var parentNodeName = middleNode.nodeName.toLowerCase();
49
- if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
50
- var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
51
- if (targetParent !== null) {
52
- return moveToRowInTarget(upBool, targetParent, sourceNode);
53
- }
54
- }
55
- return escapeTable(upBool, currentRow, siblingDirection, tableNode);
56
- }
57
- }
58
-
59
- function getTargetParent(upBool, topNode, secondNode, nodeName) {
60
- var tbodies = editor.dom.select('>' + nodeName, topNode);
61
- var position = tbodies.indexOf(secondNode);
62
- if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
63
- return getFirstHeadOrFoot(upBool, topNode);
64
- } else if (position === -1) {
65
- var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
66
- return tbodies[topOrBottom];
67
- } else {
68
- return tbodies[position + (upBool ? -1 : 1)];
69
- }
70
- }
71
-
72
- function getFirstHeadOrFoot(upBool, parent) {
73
- var tagName = upBool ? 'thead' : 'tfoot';
74
- var headOrFoot = editor.dom.select('>' + tagName, parent);
75
- return headOrFoot.length !== 0 ? headOrFoot[0] : null;
76
- }
77
-
78
- function moveToRowInTarget(upBool, targetParent, sourceNode) {
79
- var targetRow = getChildForDirection(targetParent, upBool);
80
-
81
- if (targetRow) {
82
- moveCursorToRow(editor, sourceNode, targetRow, upBool);
83
- }
84
-
85
- e.preventDefault();
86
- return true;
87
- }
88
-
89
- function escapeTable(upBool, currentRow, siblingDirection, table) {
90
- var tableSibling = table[siblingDirection];
91
-
92
- if (tableSibling) {
93
- moveCursorToStartOfElement(tableSibling);
94
- return true;
95
- } else {
96
- var parentCell = editor.dom.getParent(table, 'td,th');
97
- if (parentCell) {
98
- return handle(upBool, parentCell, e);
99
- } else {
100
- var backUpSibling = getChildForDirection(currentRow, !upBool);
101
- moveCursorToStartOfElement(backUpSibling);
102
- e.preventDefault();
103
- return false;
104
- }
105
- }
106
- }
107
-
108
- function getChildForDirection(parent, up) {
109
- var child = parent && parent[up ? 'lastChild' : 'firstChild'];
110
- // BR is not a valid table child to return in this case we return the table cell
111
- return child && child.nodeName === 'BR' ? editor.dom.getParent(child, 'td,th') : child;
112
- }
113
-
114
- function moveCursorToStartOfElement(n) {
115
- editor.selection.setCursorLocation(n, 0);
116
- }
117
-
118
- function isVerticalMovement() {
119
- return key == VK.UP || key == VK.DOWN;
120
- }
121
-
122
- function isInTable(editor) {
123
- var node = editor.selection.getNode();
124
- var currentRow = editor.dom.getParent(node, 'tr');
125
- return currentRow !== null;
126
- }
127
-
128
- function columnIndex(column) {
129
- var colIndex = 0;
130
- var c = column;
131
- while (c.previousSibling) {
132
- c = c.previousSibling;
133
- colIndex = colIndex + getSpanVal(c, "colspan");
134
- }
135
- return colIndex;
136
- }
137
-
138
- function findColumn(rowElement, columnIndex) {
139
- var c = 0, r = 0;
140
-
141
- each(rowElement.children, function(cell, i) {
142
- c = c + getSpanVal(cell, "colspan");
143
- r = i;
144
- if (c > columnIndex) {
145
- return false;
146
- }
147
- });
148
- return r;
149
- }
150
-
151
- function moveCursorToRow(ed, node, row, upBool) {
152
- var srcColumnIndex = columnIndex(editor.dom.getParent(node, 'td,th'));
153
- var tgtColumnIndex = findColumn(row, srcColumnIndex);
154
- var tgtNode = row.childNodes[tgtColumnIndex];
155
- var rowCellTarget = getChildForDirection(tgtNode, upBool);
156
- moveCursorToStartOfElement(rowCellTarget || tgtNode);
157
- }
158
-
159
- function shouldFixCaret(preBrowserNode) {
160
- var newNode = editor.selection.getNode();
161
- var newParent = editor.dom.getParent(newNode, 'td,th');
162
- var oldParent = editor.dom.getParent(preBrowserNode, 'td,th');
163
-
164
- return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent);
165
- }
166
-
167
- function checkSameParentTable(nodeOne, NodeTwo) {
168
- return editor.dom.getParent(nodeOne, 'TABLE') === editor.dom.getParent(NodeTwo, 'TABLE');
169
- }
170
-
171
- if (isVerticalMovement() && isInTable(editor)) {
172
- var preBrowserNode = editor.selection.getNode();
173
- setTimeout(function() {
174
- if (shouldFixCaret(preBrowserNode)) {
175
- handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
176
- }
177
- }, 0);
178
- }
179
- }
180
-
181
- editor.on('KeyDown', function(e) {
182
- eventHandler(e);
183
- });
184
- }
185
-
186
- function fixBeforeTableCaretBug() {
187
- // Checks if the selection/caret is at the start of the specified block element
188
- function isAtStart(rng, par) {
189
- var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
190
-
191
- rng2.setStartBefore(par);
192
- rng2.setEnd(rng.endContainer, rng.endOffset);
193
-
194
- elm = doc.createElement('body');
195
- elm.appendChild(rng2.cloneContents());
196
-
197
- // Check for text characters of other elements that should be treated as content
198
- return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0;
199
- }
200
-
201
- // Fixes an bug where it's impossible to place the caret before a table in Gecko
202
- // this fix solves it by detecting when the caret is at the beginning of such a table
203
- // and then manually moves the caret infront of the table
204
- editor.on('KeyDown', function(e) {
205
- var rng, table, dom = editor.dom;
206
-
207
- // On gecko it's not possible to place the caret before a table
208
- if (e.keyCode == 37 || e.keyCode == 38) {
209
- rng = editor.selection.getRng();
210
- table = dom.getParent(rng.startContainer, 'table');
211
-
212
- if (table && editor.getBody().firstChild == table) {
213
- if (isAtStart(rng, table)) {
214
- rng = dom.createRng();
215
-
216
- rng.setStartBefore(table);
217
- rng.setEndBefore(table);
218
-
219
- editor.selection.setRng(rng);
220
-
221
- e.preventDefault();
222
- }
223
- }
224
- }
225
- });
226
- }
227
-
228
- // Fixes an issue on Gecko where it's impossible to place the caret behind a table
229
- // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
230
- function fixTableCaretPos() {
231
- editor.on('KeyDown SetContent VisualAid', function() {
232
- var last;
233
-
234
- // Skip empty text nodes from the end
235
- for (last = editor.getBody().lastChild; last; last = last.previousSibling) {
236
- if (last.nodeType == 3) {
237
- if (last.nodeValue.length > 0) {
238
- break;
239
- }
240
- } else if (last.nodeType == 1 && (last.tagName == 'BR' || !last.getAttribute('data-mce-bogus'))) {
241
- break;
242
- }
243
- }
244
-
245
- if (last && last.nodeName == 'TABLE') {
246
- if (editor.settings.forced_root_block) {
247
- editor.dom.add(
248
- editor.getBody(),
249
- editor.settings.forced_root_block,
250
- editor.settings.forced_root_block_attrs,
251
- Env.ie && Env.ie < 11 ? '&nbsp;' : '<br data-mce-bogus="1" />'
252
- );
253
- } else {
254
- editor.dom.add(editor.getBody(), 'br', {'data-mce-bogus': '1'});
255
- }
256
- }
257
- });
258
-
259
- editor.on('PreProcess', function(o) {
260
- var last = o.node.lastChild;
261
-
262
- if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 &&
263
- (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) &&
264
- last.previousSibling && last.previousSibling.nodeName == "TABLE") {
265
- editor.dom.remove(last);
266
- }
267
- });
268
- }
269
-
270
- // this nasty hack is here to work around some WebKit selection bugs.
271
- function fixTableCellSelection() {
272
- function tableCellSelected(ed, rng, n, currentCell) {
273
- // The decision of when a table cell is selected is somewhat involved. The fact that this code is
274
- // required is actually a pointer to the root cause of this bug. A cell is selected when the start
275
- // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
276
- // or the parent of the table (in the case of the selection containing the last cell of a table).
277
- var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE');
278
- var tableParent, allOfCellSelected, tableCellSelection;
279
-
280
- if (table) {
281
- tableParent = table.parentNode;
282
- }
283
-
284
- allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE &&
285
- rng.startOffset === 0 &&
286
- rng.endOffset === 0 &&
287
- currentCell &&
288
- (n.nodeName == "TR" || n == tableParent);
289
-
290
- tableCellSelection = (n.nodeName == "TD" || n.nodeName == "TH") && !currentCell;
291
-
292
- return allOfCellSelected || tableCellSelection;
293
- }
294
-
295
- function fixSelection() {
296
- var rng = editor.selection.getRng();
297
- var n = editor.selection.getNode();
298
- var currentCell = editor.dom.getParent(rng.startContainer, 'TD,TH');
299
-
300
- if (!tableCellSelected(editor, rng, n, currentCell)) {
301
- return;
302
- }
303
-
304
- if (!currentCell) {
305
- currentCell = n;
306
- }
307
-
308
- // Get the very last node inside the table cell
309
- var end = currentCell.lastChild;
310
- while (end.lastChild) {
311
- end = end.lastChild;
312
- }
313
-
314
- // Select the entire table cell. Nothing outside of the table cell should be selected.
315
- if (end.nodeType == 3) {
316
- rng.setEnd(end, end.data.length);
317
- editor.selection.setRng(rng);
318
- }
319
- }
320
-
321
- editor.on('KeyDown', function() {
322
- fixSelection();
323
- });
324
-
325
- editor.on('MouseDown', function(e) {
326
- if (e.button != 2) {
327
- fixSelection();
328
- }
329
- });
330
- }
331
-
332
- /**
333
- * Delete table if all cells are selected.
334
- */
335
- function deleteTable() {
336
- editor.on('keydown', function(e) {
337
- if ((e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented()) {
338
- var table = editor.dom.getParent(editor.selection.getStart(), 'table');
339
-
340
- if (table) {
341
- var cells = editor.dom.select('td,th', table), i = cells.length;
342
- while (i--) {
343
- if (!editor.dom.hasClass(cells[i], 'mce-item-selected')) {
344
- return;
345
- }
346
- }
347
-
348
- e.preventDefault();
349
- editor.execCommand('mceTableDelete');
350
- }
351
- }
352
- });
353
- }
354
-
355
- deleteTable();
356
-
357
- if (Env.webkit) {
358
- moveWebKitSelection();
359
- fixTableCellSelection();
360
- }
361
-
362
- if (Env.gecko) {
363
- fixBeforeTableCaretBug();
364
- fixTableCaretPos();
365
- }
366
-
367
- if (Env.ie > 10) {
368
- fixBeforeTableCaretBug();
369
- fixTableCaretPos();
370
- }
371
- };
372
- });