locomotive-aloha-rails 0.20.1.5 → 0.23.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1280) hide show
  1. data/README.md +4 -4
  2. data/Rakefile +15 -6
  3. data/app/assets/javascripts/aloha.js +1 -0
  4. data/lib/aloha/rails/engine.rb +1 -1
  5. data/lib/aloha/rails/version.rb +2 -2
  6. data/vendor/assets/javascripts/aloha/css/aloha-common-extra.css +24 -0
  7. data/vendor/assets/javascripts/aloha/css/aloha-core.css +4 -29
  8. data/vendor/assets/javascripts/aloha/css/aloha-reset.css +24 -0
  9. data/vendor/assets/javascripts/aloha/css/aloha-sidebar.css +77 -89
  10. data/vendor/assets/javascripts/aloha/css/aloha.css +31 -7777
  11. data/vendor/assets/javascripts/aloha/img/arrow-down.png +0 -0
  12. data/vendor/assets/javascripts/aloha/img/arrow-left.png +0 -0
  13. data/vendor/assets/javascripts/aloha/img/arrow.png +0 -0
  14. data/vendor/assets/javascripts/aloha/img/base-multi.png +0 -0
  15. data/vendor/assets/javascripts/aloha/img/base.png +0 -0
  16. data/vendor/assets/javascripts/aloha/img/bg.png +0 -0
  17. data/vendor/assets/javascripts/aloha/img/breadcrumb-divider.png +0 -0
  18. data/vendor/assets/javascripts/aloha/img/gentics-logo.png +0 -0
  19. data/vendor/assets/javascripts/aloha/img/grabhandle.png +0 -0
  20. data/vendor/assets/javascripts/aloha/img/maximize.png +0 -0
  21. data/vendor/assets/javascripts/aloha/img/multisplit-base.jpg +0 -0
  22. data/vendor/assets/javascripts/aloha/img/multisplit-close.gif +0 -0
  23. data/vendor/assets/javascripts/aloha/img/multisplit-open.gif +0 -0
  24. data/vendor/assets/javascripts/aloha/img/pin.png +0 -0
  25. data/vendor/assets/javascripts/aloha/img/removeformat.png +0 -0
  26. data/vendor/assets/javascripts/aloha/img/text_indent.png +0 -0
  27. data/vendor/assets/javascripts/aloha/img/text_indent_remove.png +0 -0
  28. data/vendor/assets/javascripts/aloha/lib/aloha-jquery-noconflict.js +12 -0
  29. data/vendor/assets/javascripts/aloha/lib/aloha.js +532 -89342
  30. data/vendor/assets/javascripts/aloha/lib/aloha/block-jump.js +153 -0
  31. data/vendor/assets/javascripts/aloha/lib/aloha/command.js +161 -123
  32. data/vendor/assets/javascripts/aloha/lib/aloha/console.js +312 -295
  33. data/vendor/assets/javascripts/aloha/lib/aloha/contenthandlermanager.js +82 -44
  34. data/vendor/assets/javascripts/aloha/lib/aloha/copypaste.js +108 -0
  35. data/vendor/assets/javascripts/aloha/lib/aloha/core.js +453 -410
  36. data/vendor/assets/javascripts/aloha/lib/aloha/ecma5shims.js +307 -277
  37. data/vendor/assets/javascripts/aloha/lib/aloha/editable.js +548 -408
  38. data/vendor/assets/javascripts/aloha/lib/aloha/engine.js +7359 -7182
  39. data/vendor/assets/javascripts/aloha/lib/aloha/ephemera.js +485 -0
  40. data/vendor/assets/javascripts/aloha/lib/aloha/ierange-m2.js +28 -545
  41. data/vendor/assets/javascripts/aloha/lib/aloha/jquery.aloha.js +364 -146
  42. data/vendor/assets/javascripts/aloha/lib/aloha/markup.js +1272 -1255
  43. data/vendor/assets/javascripts/aloha/lib/aloha/nls/ca/i18n.js +11 -0
  44. data/vendor/assets/javascripts/aloha/lib/aloha/nls/de/i18n.js +11 -10
  45. data/vendor/assets/javascripts/aloha/lib/aloha/nls/i18n.js +19 -19
  46. data/vendor/assets/javascripts/aloha/lib/aloha/nls/mk/i18n.js +11 -0
  47. data/vendor/assets/javascripts/aloha/lib/aloha/nls/pt-br/i18n.js +11 -0
  48. data/vendor/assets/javascripts/aloha/lib/aloha/nls/ru/i18n.js +11 -0
  49. data/vendor/assets/javascripts/aloha/lib/aloha/nls/uk/i18n.js +11 -0
  50. data/vendor/assets/javascripts/aloha/lib/aloha/nls/zh-hans/i18n.js +11 -0
  51. data/vendor/assets/javascripts/aloha/lib/aloha/observable.js +43 -36
  52. data/vendor/assets/javascripts/aloha/lib/aloha/plugin.js +80 -75
  53. data/vendor/assets/javascripts/aloha/lib/aloha/pluginmanager.js +146 -97
  54. data/vendor/assets/javascripts/aloha/lib/aloha/rangy-core.js +30 -3242
  55. data/vendor/assets/javascripts/aloha/lib/aloha/registry.js +102 -24
  56. data/vendor/assets/javascripts/aloha/lib/aloha/repository.js +137 -123
  57. data/vendor/assets/javascripts/aloha/lib/aloha/repositorymanager.js +742 -571
  58. data/vendor/assets/javascripts/aloha/lib/aloha/repositoryobjects.js +77 -61
  59. data/vendor/assets/javascripts/aloha/lib/aloha/selection.js +2402 -2102
  60. data/vendor/assets/javascripts/aloha/lib/aloha/sidebar.js +566 -664
  61. data/vendor/assets/javascripts/aloha/lib/aloha/state-override.js +125 -0
  62. data/vendor/assets/javascripts/aloha/lib/css.js +329 -187
  63. data/vendor/assets/javascripts/aloha/lib/i18n.js +118 -79
  64. data/vendor/assets/javascripts/aloha/lib/require.js +1424 -1384
  65. data/vendor/assets/javascripts/aloha/lib/text.js +39 -13
  66. data/vendor/assets/javascripts/aloha/lib/util/arrays.js +240 -0
  67. data/vendor/assets/javascripts/aloha/lib/util/browser.js +32 -0
  68. data/vendor/assets/javascripts/aloha/lib/util/class.js +67 -69
  69. data/vendor/assets/javascripts/aloha/lib/util/dom.js +1525 -1504
  70. data/vendor/assets/javascripts/aloha/lib/util/dom2.js +748 -0
  71. data/vendor/assets/javascripts/aloha/lib/util/functions.js +62 -0
  72. data/vendor/assets/javascripts/aloha/lib/util/html.js +121 -0
  73. data/vendor/assets/javascripts/aloha/lib/util/json2.js +240 -257
  74. data/vendor/assets/javascripts/aloha/lib/util/keys.js +65 -0
  75. data/vendor/assets/javascripts/aloha/lib/util/lang.js +89 -66
  76. data/vendor/assets/javascripts/aloha/lib/util/maps.js +108 -0
  77. data/vendor/assets/javascripts/aloha/lib/util/misc.js +51 -0
  78. data/vendor/assets/javascripts/aloha/lib/util/position.js +176 -158
  79. data/vendor/assets/javascripts/aloha/lib/util/range-context.js +528 -0
  80. data/vendor/assets/javascripts/aloha/lib/util/range.js +799 -805
  81. data/vendor/assets/javascripts/aloha/lib/util/strings.js +114 -0
  82. data/vendor/assets/javascripts/aloha/lib/util/trees.js +336 -0
  83. data/vendor/assets/javascripts/aloha/lib/vendor/3rdparty.txt +70 -0
  84. data/vendor/assets/javascripts/aloha/lib/vendor/amplify.store.js +298 -0
  85. data/vendor/assets/javascripts/aloha/lib/vendor/class.js +76 -0
  86. data/vendor/assets/javascripts/aloha/{plugins/extra/browser → lib}/vendor/grid.locale.de.js +138 -139
  87. data/vendor/assets/javascripts/aloha/{plugins/extra/browser → lib}/vendor/grid.locale.en.js +43 -44
  88. data/vendor/assets/javascripts/aloha/lib/vendor/ierange-m2.js +508 -0
  89. data/vendor/assets/javascripts/aloha/lib/vendor/{jquery-1.6.1.js → jquery-1.7.2.js} +2553 -2068
  90. data/vendor/assets/javascripts/aloha/lib/vendor/jquery-ui-1.9.0.custom-aloha.js +14711 -0
  91. data/vendor/assets/javascripts/aloha/{plugins/extra/browser/vendor/jquery.jqGrid.js → lib/vendor/jquery.jqgrid.js} +5 -3
  92. data/vendor/assets/javascripts/aloha/{plugins/extra/browser → lib}/vendor/jquery.jstree.js +4 -4
  93. data/vendor/assets/javascripts/aloha/lib/vendor/jquery.layout-1.3.0-rc30.7.js +5924 -0
  94. data/vendor/assets/javascripts/aloha/lib/vendor/pubsub/js/pubsub-unminified.js +187 -0
  95. data/vendor/assets/javascripts/aloha/lib/vendor/pubsub/js/pubsub.js +2 -0
  96. data/vendor/assets/javascripts/aloha/lib/vendor/rangy-core.js +3295 -0
  97. data/vendor/assets/javascripts/aloha/{plugins/extra/browser → lib/vendor/repository-browser}/css/jstree.css +0 -0
  98. data/vendor/assets/javascripts/aloha/{plugins/extra/browser/css/browsercombined.css → lib/vendor/repository-browser/css/repository-browser.css} +64 -60
  99. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow-000-medium.png +0 -0
  100. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow-180.png +0 -0
  101. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow-315-medium.png +0 -0
  102. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow-stop-180.png +0 -0
  103. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow-stop.png +0 -0
  104. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/arrow.png +0 -0
  105. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/control-stop-square-small.png +0 -0
  106. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/folder-horizontal-open.png +0 -0
  107. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/folder-open.png +0 -0
  108. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/magnifier-left.png +0 -0
  109. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/page.png +0 -0
  110. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/picture.png +0 -0
  111. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/sort-alphabet-descending.png +0 -0
  112. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/sort-alphabet.png +0 -0
  113. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/img/throbber.gif +0 -0
  114. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/js/repository-browser-unminified.js +1450 -0
  115. data/vendor/assets/javascripts/aloha/lib/vendor/repository-browser/js/repository-browser.js +32 -0
  116. data/vendor/assets/javascripts/aloha/lib/vendor/sanitize.js +18 -7
  117. data/vendor/assets/javascripts/aloha/plugins/common/abbr/css/abbr.css +1 -0
  118. data/vendor/assets/javascripts/aloha/plugins/common/abbr/img/remabbr.png +0 -0
  119. data/vendor/assets/javascripts/aloha/plugins/common/abbr/lib/abbr-plugin.js +119 -109
  120. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/ca/i18n.js +6 -0
  121. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/de/i18n.js +6 -1
  122. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/i18n.js +14 -3
  123. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/mk/i18n.js +6 -0
  124. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/pt-br/i18n.js +6 -0
  125. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/ru/i18n.js +6 -0
  126. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/uk/i18n.js +6 -0
  127. data/vendor/assets/javascripts/aloha/plugins/common/abbr/nls/zh-hans/i18n.js +6 -0
  128. data/vendor/assets/javascripts/aloha/plugins/common/abbr/package.json +0 -0
  129. data/vendor/assets/javascripts/aloha/plugins/common/align/css/align.css +17 -5
  130. data/vendor/assets/javascripts/aloha/plugins/common/align/img/align.png +0 -0
  131. data/vendor/assets/javascripts/aloha/plugins/common/align/lib/align-plugin.js +463 -353
  132. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/ca/i18n.js +6 -0
  133. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/de/i18n.js +6 -0
  134. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/i18n.js +16 -4
  135. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/mk/i18n.js +6 -0
  136. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/pt-br/i18n.js +6 -0
  137. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/ru/i18n.js +6 -0
  138. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/uk/i18n.js +6 -0
  139. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/zh-hans/i18n.js +6 -0
  140. data/vendor/assets/javascripts/aloha/plugins/common/block/css/block.css +13 -7
  141. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/block-plugin.js +270 -24
  142. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/block.js +268 -49
  143. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/blockcontenthandler.js +27 -8
  144. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/blockmanager.js +624 -479
  145. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/editor.js +30 -11
  146. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/editormanager.js +26 -7
  147. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/sidebarattributeeditor.js +33 -13
  148. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/ca/i18n.js +3 -0
  149. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/de/i18n.js +3 -0
  150. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/i18n.js +12 -0
  151. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/mk/i18n.js +3 -0
  152. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/pt-br/i18n.js +3 -0
  153. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/ru/i18n.js +3 -0
  154. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/uk/i18n.js +3 -0
  155. data/vendor/assets/javascripts/aloha/plugins/common/block/nls/zh-hans/i18n.js +3 -0
  156. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/css/characterpicker.css +29 -26
  157. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/img/icon.png +0 -0
  158. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/lib/characterpicker-plugin.js +445 -215
  159. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/ca/i18n.js +3 -0
  160. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/de/i18n.js +3 -1
  161. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/i18n.js +11 -3
  162. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/mk/i18n.js +3 -0
  163. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/pt-br/i18n.js +3 -0
  164. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/ru/i18n.js +3 -0
  165. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/uk/i18n.js +3 -0
  166. data/vendor/assets/javascripts/aloha/plugins/common/characterpicker/nls/zh-hans/i18n.js +3 -0
  167. data/vendor/assets/javascripts/aloha/plugins/common/commands/css/abbr.css +0 -0
  168. data/vendor/assets/javascripts/aloha/plugins/common/commands/lib/commands-plugin.js +27 -9
  169. data/vendor/assets/javascripts/aloha/plugins/common/commands/lib/inserthtml.js +28 -9
  170. data/vendor/assets/javascripts/aloha/plugins/common/commands/package.json +0 -0
  171. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/blockelementcontenthandler.js +173 -0
  172. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/contenthandler-plugin.js +45 -34
  173. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/contenthandler-utils.js +58 -0
  174. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/genericcontenthandler.js +320 -255
  175. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/oembedcontenthandler.js +420 -235
  176. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/sanitizecontenthandler.js +82 -33
  177. data/vendor/assets/javascripts/aloha/plugins/common/contenthandler/lib/wordcontenthandler.js +204 -128
  178. data/vendor/assets/javascripts/aloha/plugins/common/dom-to-xhtml/lib/dom-to-xhtml-plugin.js +57 -12
  179. data/vendor/assets/javascripts/aloha/plugins/common/dom-to-xhtml/lib/dom-to-xhtml.js +186 -77
  180. data/vendor/assets/javascripts/aloha/plugins/common/format/img/em.png +0 -0
  181. data/vendor/assets/javascripts/aloha/plugins/common/format/img/strong.png +0 -0
  182. data/vendor/assets/javascripts/aloha/plugins/common/format/lib/format-plugin.js +480 -255
  183. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/ca/i18n.js +52 -0
  184. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/de/i18n.js +52 -1
  185. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/i18n.js +60 -9
  186. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/mk/i18n.js +52 -0
  187. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/pt-br/i18n.js +52 -0
  188. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/ru/i18n.js +52 -1
  189. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/uk/i18n.js +52 -0
  190. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/zh-hans/i18n.js +52 -0
  191. data/vendor/assets/javascripts/aloha/plugins/common/highlighteditables/css/highlighteditables.css +0 -0
  192. data/vendor/assets/javascripts/aloha/plugins/common/highlighteditables/lib/highlighteditables-plugin.js +43 -15
  193. data/vendor/assets/javascripts/aloha/plugins/common/highlighteditables/package.json +0 -0
  194. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/css/horizontalruler.css +2 -3
  195. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/img/icon.png +0 -0
  196. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/lib/horizontalruler-plugin.js +53 -28
  197. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/ca/i18n.js +3 -0
  198. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/de/i18n.js +3 -1
  199. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/i18n.js +11 -3
  200. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/mk/i18n.js +3 -0
  201. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/pt-br/i18n.js +3 -0
  202. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/ru/i18n.js +3 -0
  203. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/uk/i18n.js +3 -0
  204. data/vendor/assets/javascripts/aloha/plugins/common/horizontalruler/nls/zh-hans/i18n.js +3 -0
  205. data/vendor/assets/javascripts/aloha/plugins/common/image/README.md +5 -22
  206. data/vendor/assets/javascripts/aloha/plugins/common/image/css/image.css +24 -15
  207. data/vendor/assets/javascripts/aloha/plugins/common/image/img/blank.jpg +0 -0
  208. data/vendor/assets/javascripts/aloha/plugins/common/image/img/cropnresize.png +0 -0
  209. data/vendor/assets/javascripts/aloha/plugins/common/image/img/handle-sw.png +0 -0
  210. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image-align-left.png +0 -0
  211. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image-align-none.png +0 -0
  212. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image-align-right.png +0 -0
  213. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image-border.png +0 -0
  214. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image-title.png +0 -0
  215. data/vendor/assets/javascripts/aloha/plugins/common/image/img/image.gif +0 -0
  216. data/vendor/assets/javascripts/aloha/plugins/common/image/img/padding-decrease.gif +0 -0
  217. data/vendor/assets/javascripts/aloha/plugins/common/image/img/padding-increase.gif +0 -0
  218. data/vendor/assets/javascripts/aloha/plugins/common/image/img/page.png +0 -0
  219. data/vendor/assets/javascripts/aloha/plugins/common/image/img/size-decrease.gif +0 -0
  220. data/vendor/assets/javascripts/aloha/plugins/common/image/img/size-increase.gif +0 -0
  221. data/vendor/assets/javascripts/aloha/plugins/common/image/lib/image-floatingMenu.js +308 -0
  222. data/vendor/assets/javascripts/aloha/plugins/{extra/browser/README → common/image/lib/image-plugin-actions.js} +0 -0
  223. data/vendor/assets/javascripts/aloha/plugins/common/image/lib/image-plugin.js +1330 -1632
  224. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/ca/i18n.js +32 -0
  225. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/de/i18n.js +32 -1
  226. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/i18n.js +39 -5
  227. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/mk/i18n.js +32 -0
  228. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/pt-br/i18n.js +32 -0
  229. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/ru/i18n.js +32 -16
  230. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/uk/i18n.js +32 -0
  231. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/zh-hans/i18n.js +32 -0
  232. data/vendor/assets/javascripts/aloha/plugins/common/image/package.json +0 -0
  233. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/jcrop/jcrop.gif +0 -0
  234. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/jcrop/jquery.jcrop.css +0 -0
  235. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/jcrop/jquery.jcrop.min.js +3 -1
  236. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/mousewheel/mousewheel.js +42 -17
  237. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  238. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  239. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  240. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  241. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  242. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  243. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  244. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  245. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  246. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  247. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  248. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  249. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  250. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  251. data/vendor/assets/javascripts/aloha/plugins/common/link/css/link.css +58 -55
  252. data/vendor/assets/javascripts/aloha/plugins/common/link/extra/delicious.js +26 -8
  253. data/vendor/assets/javascripts/aloha/plugins/common/link/extra/linklist.js +91 -73
  254. data/vendor/assets/javascripts/aloha/plugins/common/link/extra/slowlinklist.js +29 -10
  255. data/vendor/assets/javascripts/aloha/plugins/common/link/lib/link-plugin.js +429 -297
  256. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/ca/i18n.js +14 -0
  257. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/de/i18n.js +14 -13
  258. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/i18n.js +23 -9
  259. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/mk/i18n.js +14 -0
  260. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/pt-br/i18n.js +14 -0
  261. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/ru/i18n.js +14 -6
  262. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/uk/i18n.js +14 -0
  263. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/zh-hans/i18n.js +14 -0
  264. data/vendor/assets/javascripts/aloha/plugins/common/list/lib/list-plugin.js +150 -121
  265. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/ca/i18n.js +7 -0
  266. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/de/i18n.js +7 -5
  267. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/i18n.js +15 -8
  268. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/mk/i18n.js +7 -0
  269. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/pt-br/i18n.js +7 -0
  270. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/ru/i18n.js +7 -1
  271. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/uk/i18n.js +7 -0
  272. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/zh-hans/i18n.js +7 -0
  273. data/vendor/assets/javascripts/aloha/plugins/common/list/package.json +0 -0
  274. data/vendor/assets/javascripts/aloha/plugins/common/paste/lib/paste-plugin.js +338 -192
  275. data/vendor/assets/javascripts/aloha/plugins/common/table/css/table.css +5 -40
  276. data/vendor/assets/javascripts/aloha/plugins/common/table/img/down.cur +0 -0
  277. data/vendor/assets/javascripts/aloha/plugins/common/table/img/left.cur +0 -0
  278. data/vendor/assets/javascripts/aloha/plugins/common/table/img/table_layout.png +0 -0
  279. data/vendor/assets/javascripts/aloha/plugins/common/table/img/wai-green.png +0 -0
  280. data/vendor/assets/javascripts/aloha/plugins/common/table/img/wai-red.png +0 -0
  281. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table-cell.js +177 -106
  282. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table-create-layer.js +5 -2
  283. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table-plugin-utils.js +147 -8
  284. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table-plugin.js +925 -892
  285. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table-selection.js +10 -6
  286. data/vendor/assets/javascripts/aloha/plugins/common/table/lib/table.js +577 -193
  287. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/ca/i18n.js +28 -0
  288. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/de/i18n.js +28 -27
  289. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/i18n.js +37 -36
  290. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/mk/i18n.js +28 -0
  291. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/pt-br/i18n.js +28 -0
  292. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/ru/i18n.js +28 -1
  293. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/uk/i18n.js +28 -0
  294. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/zh-hans/i18n.js +28 -0
  295. data/vendor/assets/javascripts/aloha/plugins/common/table/package.json +0 -0
  296. data/vendor/assets/javascripts/aloha/plugins/common/ui/css/jquery-ui-1.9m6.css +430 -0
  297. data/vendor/assets/javascripts/aloha/plugins/common/ui/css/ui.css +689 -0
  298. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/blockquote.png +0 -0
  299. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/character-picker.png +0 -0
  300. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/em.png +0 -0
  301. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/format-block.png +0 -0
  302. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/format-inline.png +0 -0
  303. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/indent.png +0 -0
  304. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/jqueryui/ui-icons_222222_256x240.png +0 -0
  305. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/justify.png +0 -0
  306. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/language-annotation.png +0 -0
  307. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview.png +0 -0
  308. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/anchor.png +0 -0
  309. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/blockquote.png +0 -0
  310. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/caption.png +0 -0
  311. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/cite.png +0 -0
  312. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/dd.png +0 -0
  313. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/div.png +0 -0
  314. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/dl.png +0 -0
  315. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/dt.png +0 -0
  316. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h1.png +0 -0
  317. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h2.png +0 -0
  318. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h3.png +0 -0
  319. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h4.png +0 -0
  320. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h5.png +0 -0
  321. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/h6.png +0 -0
  322. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/p.png +0 -0
  323. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/pre.png +0 -0
  324. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/q.png +0 -0
  325. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/table.png +0 -0
  326. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/td.png +0 -0
  327. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/metaview/th.png +0 -0
  328. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/multisplit-close.gif +0 -0
  329. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/multisplit-open.gif +0 -0
  330. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/outdent.png +0 -0
  331. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/quote.png +0 -0
  332. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/removeformat.png +0 -0
  333. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/strong.png +0 -0
  334. data/vendor/assets/javascripts/aloha/plugins/common/ui/img/tree.png +0 -0
  335. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/arena.js +11 -0
  336. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/autocomplete.js +70 -0
  337. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/button.js +114 -0
  338. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/component.js +121 -0
  339. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/container.js +210 -0
  340. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/context.js +53 -0
  341. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/dialog.js +215 -0
  342. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/floating.js +405 -0
  343. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/menuButton.js +169 -0
  344. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/multiSplit.js +237 -0
  345. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/port-helper-attribute-field.js +444 -0
  346. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/port-helper-multi-split.js +71 -0
  347. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/scopes.js +187 -0
  348. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/settings.js +202 -0
  349. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/subguarded.js +183 -0
  350. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/surface.js +106 -0
  351. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/tab.js +281 -0
  352. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/text.js +33 -0
  353. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/toggleButton.js +57 -0
  354. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/toolbar.js +251 -0
  355. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/ui-plugin.js +169 -0
  356. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/ui.js +181 -0
  357. data/vendor/assets/javascripts/aloha/plugins/common/ui/lib/utils.js +104 -0
  358. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/ca/i18n.js +46 -0
  359. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/de/i18n.js +47 -0
  360. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/i18n.js +75 -0
  361. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/mk/i18n.js +46 -0
  362. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/pt-br/i18n.js +46 -0
  363. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/ru/i18n.js +46 -0
  364. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/uk/i18n.js +46 -0
  365. data/vendor/assets/javascripts/aloha/plugins/common/ui/nls/zh-hans/i18n.js +46 -0
  366. data/vendor/assets/javascripts/aloha/plugins/common/ui/vendor/jquery-ui-autocomplete-html.js +42 -0
  367. data/vendor/assets/javascripts/aloha/plugins/common/undo/lib/undo-plugin.js +165 -134
  368. data/vendor/assets/javascripts/aloha/plugins/common/undo/package.json +0 -0
  369. data/vendor/assets/javascripts/aloha/plugins/common/undo/vendor/undo.js +2 -0
  370. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/lib/attributes-plugin.js +27 -7
  371. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/ca/i18n.js +5 -0
  372. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/de/i18n.js +5 -1
  373. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/i18n.js +13 -4
  374. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/mk/i18n.js +5 -0
  375. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/pt-br/i18n.js +5 -0
  376. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/ru/i18n.js +5 -0
  377. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/uk/i18n.js +5 -0
  378. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/zh-hans/i18n.js +5 -0
  379. data/vendor/assets/javascripts/aloha/plugins/extra/captioned-image/css/captioned-image.css +15 -0
  380. data/vendor/assets/javascripts/aloha/plugins/extra/captioned-image/lib/captioned-image-plugin.js +555 -0
  381. data/vendor/assets/javascripts/aloha/plugins/extra/cite/img/blockquote.png +0 -0
  382. data/vendor/assets/javascripts/aloha/plugins/extra/cite/img/icon_cite.png +0 -0
  383. data/vendor/assets/javascripts/aloha/plugins/extra/cite/lib/cite-plugin.js +369 -308
  384. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/ca/i18n.js +4 -0
  385. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/de/i18n.js +4 -1
  386. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/i18n.js +12 -3
  387. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/mk/i18n.js +4 -0
  388. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/pt-br/i18n.js +4 -0
  389. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/ru/i18n.js +4 -0
  390. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/uk/i18n.js +4 -0
  391. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/zh-hans/i18n.js +4 -0
  392. data/vendor/assets/javascripts/aloha/plugins/extra/comments/img/add-icon.png +0 -0
  393. data/vendor/assets/javascripts/aloha/plugins/extra/comments/img/add.png +0 -0
  394. data/vendor/assets/javascripts/aloha/plugins/extra/comments/img/comments.png +0 -0
  395. data/vendor/assets/javascripts/aloha/plugins/extra/comments/img/hr.png +0 -0
  396. data/vendor/assets/javascripts/aloha/plugins/extra/comments/img/textbox.png +0 -0
  397. data/vendor/assets/javascripts/aloha/plugins/extra/comments/{src/comments.js → lib/comments-plugin.js} +38 -15
  398. data/vendor/assets/javascripts/aloha/plugins/extra/comments/{src → lib}/comments.css +0 -0
  399. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/README.md +1 -1
  400. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/TODO.md +0 -0
  401. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/img/cross.png +0 -0
  402. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/img/hourglass.png +0 -0
  403. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/img/loading.gif +0 -0
  404. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/img/page.png +0 -0
  405. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/img/tick.png +0 -0
  406. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/lib/draganddropfiles-plugin.js +1 -1
  407. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/lib/dragndropfiles.css +0 -0
  408. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/lib/dragndropfiles.js +27 -13
  409. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/lib/dropfilesrepository.js +2 -2
  410. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/ca/i18n.js +3 -0
  411. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/de/i18n.js +3 -0
  412. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/i18n.js +12 -0
  413. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/mk/i18n.js +3 -0
  414. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/pt-br/i18n.js +3 -0
  415. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/ru/i18n.js +3 -0
  416. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/uk/i18n.js +3 -0
  417. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/nls/zh-hans/i18n.js +3 -0
  418. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/package.json +0 -0
  419. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/README.md +1 -3
  420. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/css/formatless.css +1 -1
  421. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/img/button.png +0 -0
  422. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/lib/formatlesshandler.js +76 -46
  423. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/lib/formatlesspaste-plugin.js +217 -90
  424. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/ca/i18n.js +3 -0
  425. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/de/i18n.js +3 -1
  426. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/i18n.js +10 -5
  427. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/mk/i18n.js +3 -0
  428. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/pt-br/i18n.js +3 -0
  429. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/ru/i18n.js +3 -0
  430. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/uk/i18n.js +3 -0
  431. data/vendor/assets/javascripts/aloha/plugins/extra/formatlesspaste/nls/zh-hans/i18n.js +3 -0
  432. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/lib/headerids-plugin.js +69 -30
  433. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/ca/i18n.js +6 -0
  434. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/de/i18n.js +6 -1
  435. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/i18n.js +14 -4
  436. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/mk/i18n.js +6 -0
  437. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/pt-br/i18n.js +6 -0
  438. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/ru/i18n.js +6 -0
  439. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/uk/i18n.js +6 -0
  440. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/zh-hans/i18n.js +6 -0
  441. data/vendor/assets/javascripts/aloha/plugins/extra/hints/README.md +12 -0
  442. data/vendor/assets/javascripts/aloha/plugins/extra/hints/css/hints.css +29 -0
  443. data/vendor/assets/javascripts/aloha/plugins/extra/hints/lib/hints-plugin.js +97 -0
  444. data/vendor/assets/javascripts/aloha/plugins/extra/hints/package.json +3 -3
  445. data/vendor/assets/javascripts/aloha/plugins/extra/hints/vendor/tipsy.js +242 -0
  446. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/README +0 -0
  447. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/lib/imagebrowser-plugin.js +160 -0
  448. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/ca/i18n.js +6 -0
  449. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/de/i18n.js +6 -0
  450. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/i18n.js +15 -0
  451. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/mk/i18n.js +6 -0
  452. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/pt-br/i18n.js +6 -0
  453. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/ru/i18n.js +6 -0
  454. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/uk/i18n.js +6 -0
  455. data/vendor/assets/javascripts/aloha/plugins/extra/imagebrowser/nls/zh-hans/i18n.js +6 -0
  456. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ad.png +0 -0
  457. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ae.png +0 -0
  458. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/af.png +0 -0
  459. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ag.png +0 -0
  460. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ai.png +0 -0
  461. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/al.png +0 -0
  462. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/am.png +0 -0
  463. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/an.png +0 -0
  464. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ao.png +0 -0
  465. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ar.png +0 -0
  466. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/as.png +0 -0
  467. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/at.png +0 -0
  468. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/au.png +0 -0
  469. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/aw.png +0 -0
  470. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ax.png +0 -0
  471. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/az.png +0 -0
  472. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ba.png +0 -0
  473. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bb.png +0 -0
  474. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bd.png +0 -0
  475. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/be.png +0 -0
  476. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bf.png +0 -0
  477. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bg.png +0 -0
  478. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bh.png +0 -0
  479. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bi.png +0 -0
  480. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bj.png +0 -0
  481. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bm.png +0 -0
  482. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bn.png +0 -0
  483. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bo.png +0 -0
  484. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/br.png +0 -0
  485. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bs.png +0 -0
  486. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bt.png +0 -0
  487. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bv.png +0 -0
  488. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bw.png +0 -0
  489. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/by.png +0 -0
  490. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/bz.png +0 -0
  491. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ca.png +0 -0
  492. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/catalonia.png +0 -0
  493. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cc.png +0 -0
  494. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cd.png +0 -0
  495. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cf.png +0 -0
  496. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cg.png +0 -0
  497. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ch.png +0 -0
  498. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ci.png +0 -0
  499. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ck.png +0 -0
  500. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cl.png +0 -0
  501. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cm.png +0 -0
  502. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cn.png +0 -0
  503. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/co.png +0 -0
  504. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cr.png +0 -0
  505. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cs.png +0 -0
  506. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cu.png +0 -0
  507. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cv.png +0 -0
  508. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cx.png +0 -0
  509. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cy.png +0 -0
  510. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/cz.png +0 -0
  511. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/de.png +0 -0
  512. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/dj.png +0 -0
  513. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/dk.png +0 -0
  514. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/dm.png +0 -0
  515. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/do.png +0 -0
  516. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/dz.png +0 -0
  517. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ec.png +0 -0
  518. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ee.png +0 -0
  519. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/eg.png +0 -0
  520. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/eh.png +0 -0
  521. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/en.png +0 -0
  522. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/er.png +0 -0
  523. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/es.png +0 -0
  524. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/et.png +0 -0
  525. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/europeanunion.png +0 -0
  526. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fam.png +0 -0
  527. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fi.png +0 -0
  528. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fj.png +0 -0
  529. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fk.png +0 -0
  530. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fm.png +0 -0
  531. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fo.png +0 -0
  532. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/fr.png +0 -0
  533. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ga.png +0 -0
  534. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gb.png +0 -0
  535. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gd.png +0 -0
  536. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ge.png +0 -0
  537. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gf.png +0 -0
  538. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gh.png +0 -0
  539. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gi.png +0 -0
  540. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gl.png +0 -0
  541. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gm.png +0 -0
  542. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gn.png +0 -0
  543. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gp.png +0 -0
  544. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gq.png +0 -0
  545. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gr.png +0 -0
  546. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gs.png +0 -0
  547. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gt.png +0 -0
  548. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gu.png +0 -0
  549. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gw.png +0 -0
  550. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/gy.png +0 -0
  551. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/hk.png +0 -0
  552. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/hm.png +0 -0
  553. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/hn.png +0 -0
  554. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/hr.png +0 -0
  555. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ht.png +0 -0
  556. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/hu.png +0 -0
  557. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/id.png +0 -0
  558. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ie.png +0 -0
  559. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/il.png +0 -0
  560. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/in.png +0 -0
  561. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/io.png +0 -0
  562. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/iq.png +0 -0
  563. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ir.png +0 -0
  564. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/is.png +0 -0
  565. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/it.png +0 -0
  566. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/jm.png +0 -0
  567. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/jo.png +0 -0
  568. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/jp.png +0 -0
  569. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ke.png +0 -0
  570. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kg.png +0 -0
  571. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kh.png +0 -0
  572. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ki.png +0 -0
  573. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/km.png +0 -0
  574. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kn.png +0 -0
  575. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kp.png +0 -0
  576. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kr.png +0 -0
  577. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kw.png +0 -0
  578. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ky.png +0 -0
  579. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/kz.png +0 -0
  580. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/la.png +0 -0
  581. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lb.png +0 -0
  582. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lc.png +0 -0
  583. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/li.png +0 -0
  584. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lk.png +0 -0
  585. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lr.png +0 -0
  586. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ls.png +0 -0
  587. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lt.png +0 -0
  588. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lu.png +0 -0
  589. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/lv.png +0 -0
  590. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ly.png +0 -0
  591. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ma.png +0 -0
  592. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mc.png +0 -0
  593. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/md.png +0 -0
  594. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/me.png +0 -0
  595. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mg.png +0 -0
  596. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mh.png +0 -0
  597. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mk.png +0 -0
  598. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ml.png +0 -0
  599. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mm.png +0 -0
  600. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mn.png +0 -0
  601. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mo.png +0 -0
  602. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mp.png +0 -0
  603. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mq.png +0 -0
  604. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mr.png +0 -0
  605. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ms.png +0 -0
  606. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mt.png +0 -0
  607. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mu.png +0 -0
  608. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mv.png +0 -0
  609. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mw.png +0 -0
  610. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mx.png +0 -0
  611. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/my.png +0 -0
  612. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/mz.png +0 -0
  613. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/na.png +0 -0
  614. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nc.png +0 -0
  615. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ne.png +0 -0
  616. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nf.png +0 -0
  617. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ng.png +0 -0
  618. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ni.png +0 -0
  619. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nl.png +0 -0
  620. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/no.png +0 -0
  621. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/np.png +0 -0
  622. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nr.png +0 -0
  623. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nu.png +0 -0
  624. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/nz.png +0 -0
  625. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/om.png +0 -0
  626. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pa.png +0 -0
  627. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pe.png +0 -0
  628. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pf.png +0 -0
  629. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pg.png +0 -0
  630. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ph.png +0 -0
  631. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pk.png +0 -0
  632. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pl.png +0 -0
  633. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pm.png +0 -0
  634. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pn.png +0 -0
  635. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pr.png +0 -0
  636. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ps.png +0 -0
  637. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pt.png +0 -0
  638. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/pw.png +0 -0
  639. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/py.png +0 -0
  640. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/qa.png +0 -0
  641. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/re.png +0 -0
  642. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ro.png +0 -0
  643. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/rs.png +0 -0
  644. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ru.png +0 -0
  645. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/rw.png +0 -0
  646. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sa.png +0 -0
  647. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sb.png +0 -0
  648. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sc.png +0 -0
  649. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/scotland.png +0 -0
  650. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sd.png +0 -0
  651. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/se.png +0 -0
  652. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sg.png +0 -0
  653. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sh.png +0 -0
  654. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/si.png +0 -0
  655. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sj.png +0 -0
  656. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sk.png +0 -0
  657. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sl.png +0 -0
  658. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sm.png +0 -0
  659. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sn.png +0 -0
  660. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/so.png +0 -0
  661. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sr.png +0 -0
  662. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/st.png +0 -0
  663. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sv.png +0 -0
  664. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sy.png +0 -0
  665. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/sz.png +0 -0
  666. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tc.png +0 -0
  667. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/td.png +0 -0
  668. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tf.png +0 -0
  669. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tg.png +0 -0
  670. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/th.png +0 -0
  671. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tj.png +0 -0
  672. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tk.png +0 -0
  673. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tl.png +0 -0
  674. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tm.png +0 -0
  675. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tn.png +0 -0
  676. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/to.png +0 -0
  677. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tr.png +0 -0
  678. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tt.png +0 -0
  679. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tv.png +0 -0
  680. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tw.png +0 -0
  681. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/tz.png +0 -0
  682. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ua.png +0 -0
  683. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ug.png +0 -0
  684. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/um.png +0 -0
  685. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/us.png +0 -0
  686. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/uy.png +0 -0
  687. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/uz.png +0 -0
  688. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/va.png +0 -0
  689. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/vc.png +0 -0
  690. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ve.png +0 -0
  691. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/vg.png +0 -0
  692. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/vi.png +0 -0
  693. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/vn.png +0 -0
  694. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/vu.png +0 -0
  695. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/wales.png +0 -0
  696. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/wf.png +0 -0
  697. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ws.png +0 -0
  698. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/ye.png +0 -0
  699. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/yt.png +0 -0
  700. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/za.png +0 -0
  701. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/zm.png +0 -0
  702. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/img/flags/zw.png +0 -0
  703. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/lib/linkbrowser-plugin.js +96 -100
  704. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/ca/i18n.js +6 -0
  705. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/de/i18n.js +6 -1
  706. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/i18n.js +14 -6
  707. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/mk/i18n.js +6 -0
  708. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/pt-br/i18n.js +6 -0
  709. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/ru/i18n.js +6 -1
  710. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/uk/i18n.js +6 -0
  711. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/zh-hans/i18n.js +6 -0
  712. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/ca/i18n.js +28 -0
  713. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/de/i18n.js +28 -0
  714. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/i18n.js +37 -0
  715. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/mk/i18n.js +28 -0
  716. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/pt-br/i18n.js +28 -0
  717. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/ru/i18n.js +28 -0
  718. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/uk/i18n.js +28 -0
  719. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/nls/zh-hans/i18n.js +28 -0
  720. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/package.json +0 -0
  721. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/{proxy.php → proxy.php.example} +0 -0
  722. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/src/linkchecker.css +0 -0
  723. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/src/linkchecker.js +28 -15
  724. data/vendor/assets/javascripts/aloha/plugins/extra/listenforcer/lib/listenforcer-plugin.js +56 -31
  725. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/css/metaview.css +6 -14
  726. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/anchor.png +0 -0
  727. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/blockquote.png +0 -0
  728. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/button.png +0 -0
  729. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/caption.png +0 -0
  730. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/cite.png +0 -0
  731. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/dd.png +0 -0
  732. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/div.png +0 -0
  733. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/dl.png +0 -0
  734. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/dt.png +0 -0
  735. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h1.png +0 -0
  736. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h2.png +0 -0
  737. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h3.png +0 -0
  738. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h4.png +0 -0
  739. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h5.png +0 -0
  740. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/h6.png +0 -0
  741. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/hr.png +0 -0
  742. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/icon_cite.png +0 -0
  743. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/p.png +0 -0
  744. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/pre.png +0 -0
  745. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/table.png +0 -0
  746. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/td.png +0 -0
  747. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/img/th.png +0 -0
  748. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/lib/metaview-plugin.js +178 -74
  749. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/ca/i18n.js +3 -0
  750. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/de/i18n.js +3 -1
  751. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/i18n.js +11 -4
  752. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/mk/i18n.js +3 -0
  753. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/pt-br/i18n.js +3 -0
  754. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/ru/i18n.js +3 -0
  755. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/uk/i18n.js +3 -0
  756. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/zh-hans/i18n.js +3 -0
  757. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/css/numerated-headers.css +1 -1
  758. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/img/headers.png +0 -0
  759. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/lib/numerated-headers-plugin.js +405 -217
  760. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/ca/i18n.js +5 -0
  761. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/de/i18n.js +5 -1
  762. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/i18n.js +13 -4
  763. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/mk/i18n.js +5 -0
  764. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/pt-br/i18n.js +5 -0
  765. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/ru/i18n.js +5 -0
  766. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/uk/i18n.js +5 -0
  767. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/zh-hans/i18n.js +5 -0
  768. data/vendor/assets/javascripts/aloha/plugins/extra/profiler/lib/profiler-plugin.js +29 -10
  769. data/vendor/assets/javascripts/aloha/plugins/extra/ribbon/README.md +0 -0
  770. data/vendor/assets/javascripts/aloha/plugins/extra/ribbon/css/ribbon.css +49 -5
  771. data/vendor/assets/javascripts/aloha/{img → plugins/extra/ribbon/img}/fade-in.png +0 -0
  772. data/vendor/assets/javascripts/aloha/{img → plugins/extra/ribbon/img}/fade-out.png +0 -0
  773. data/vendor/assets/javascripts/aloha/plugins/extra/ribbon/lib/ribbon-plugin.js +108 -150
  774. data/vendor/assets/javascripts/aloha/plugins/extra/ribbon/package.json +0 -0
  775. data/vendor/assets/javascripts/aloha/plugins/extra/sourceview/css/sourceview.css +18 -0
  776. data/vendor/assets/javascripts/aloha/plugins/extra/sourceview/lib/sourceview-plugin.js +252 -0
  777. data/vendor/assets/javascripts/aloha/plugins/extra/sourceview/vendor/htmlbeautifier.js +468 -0
  778. data/vendor/assets/javascripts/aloha/plugins/extra/textcolor/css/textcolor.css +50 -0
  779. data/vendor/assets/javascripts/aloha/{lib/vendor/ext-3.2.1/resources/images/gray/window/left-right.png → plugins/extra/textcolor/img/icon.png} +0 -0
  780. data/vendor/assets/javascripts/aloha/plugins/extra/textcolor/lib/textcolor-plugin.js +420 -0
  781. data/vendor/assets/javascripts/aloha/plugins/extra/textcolor/nls/de/i18n.js +3 -0
  782. data/vendor/assets/javascripts/aloha/plugins/extra/textcolor/nls/i18n.js +6 -0
  783. data/vendor/assets/javascripts/aloha/plugins/extra/toc/lib/toc-plugin.js +56 -39
  784. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/ca/i18n.js +3 -0
  785. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/de/i18n.js +3 -3
  786. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/i18n.js +11 -3
  787. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/mk/i18n.js +3 -0
  788. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/pt-br/i18n.js +3 -0
  789. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/ru/i18n.js +3 -0
  790. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/uk/i18n.js +3 -0
  791. data/vendor/assets/javascripts/aloha/plugins/extra/toc/nls/zh-hans/i18n.js +3 -0
  792. data/vendor/assets/javascripts/aloha/plugins/extra/toc/package.json +0 -0
  793. data/vendor/assets/javascripts/aloha/plugins/extra/validation/lib/validation-plugin.js +277 -0
  794. metadata +293 -508
  795. data/vendor/assets/javascripts/aloha/css/ext-aloha-reset.css +0 -33
  796. data/vendor/assets/javascripts/aloha/css/ext-aloha.css +0 -360
  797. data/vendor/assets/javascripts/aloha/img/base-big.png +0 -0
  798. data/vendor/assets/javascripts/aloha/lib/aloha-bootstrap.js +0 -28276
  799. data/vendor/assets/javascripts/aloha/lib/aloha/ecma5.js +0 -194
  800. data/vendor/assets/javascripts/aloha/lib/aloha/ext-alohaproxy.js +0 -86
  801. data/vendor/assets/javascripts/aloha/lib/aloha/ext-alohareader.js +0 -50
  802. data/vendor/assets/javascripts/aloha/lib/aloha/ext-alohatreeloader.js +0 -77
  803. data/vendor/assets/javascripts/aloha/lib/aloha/ext.js +0 -32
  804. data/vendor/assets/javascripts/aloha/lib/aloha/floatingmenu.js +0 -1496
  805. data/vendor/assets/javascripts/aloha/lib/aloha/jquery.js +0 -34
  806. data/vendor/assets/javascripts/aloha/lib/aloha/jquery.patch.js +0 -115
  807. data/vendor/assets/javascripts/aloha/lib/aloha/message.js +0 -115
  808. data/vendor/assets/javascripts/aloha/lib/aloha/ui-attributefield.js +0 -530
  809. data/vendor/assets/javascripts/aloha/lib/aloha/ui-browser.js +0 -214
  810. data/vendor/assets/javascripts/aloha/lib/aloha/ui.js +0 -889
  811. data/vendor/assets/javascripts/aloha/lib/jquery-plugin.js +0 -49
  812. data/vendor/assets/javascripts/aloha/lib/order.js +0 -140
  813. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/adapter/jquery/ext-jquery-adapter-debug.js +0 -2470
  814. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/adapter/jquery/ext-jquery-adapter.js +0 -7
  815. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/ext-all-debug.js +0 -47708
  816. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/ext-all.js +0 -13
  817. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/gpl-3.0.txt +0 -674
  818. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/license.txt +0 -42
  819. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/charts.swf +0 -0
  820. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/css/ext-all.css +0 -5903
  821. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/css/ext-all.less +0 -6795
  822. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/css/xtheme-gray.css +0 -1692
  823. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/expressinstall.swf +0 -0
  824. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/corners-blue.gif +0 -0
  825. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/corners.gif +0 -0
  826. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/l-blue.gif +0 -0
  827. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/l.gif +0 -0
  828. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/r-blue.gif +0 -0
  829. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/r.gif +0 -0
  830. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/tb-blue.gif +0 -0
  831. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/box/tb.gif +0 -0
  832. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/arrow.gif +0 -0
  833. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/btn.gif +0 -0
  834. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/group-cs.gif +0 -0
  835. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/group-lr.gif +0 -0
  836. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/group-tb.gif +0 -0
  837. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow-b-noline.gif +0 -0
  838. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow-b.gif +0 -0
  839. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow-bo.gif +0 -0
  840. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow-noline.gif +0 -0
  841. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow-o.gif +0 -0
  842. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/button/s-arrow.gif +0 -0
  843. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/dd/drop-add.gif +0 -0
  844. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/dd/drop-no.gif +0 -0
  845. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/dd/drop-yes.gif +0 -0
  846. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/editor/tb-sprite.gif +0 -0
  847. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/checkbox.gif +0 -0
  848. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/clear-trigger.gif +0 -0
  849. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/clear-trigger.psd +0 -0
  850. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/date-trigger.gif +0 -0
  851. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/date-trigger.psd +0 -0
  852. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/error-tip-corners.gif +0 -0
  853. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/exclamation.gif +0 -0
  854. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/radio.gif +0 -0
  855. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/search-trigger.gif +0 -0
  856. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/search-trigger.psd +0 -0
  857. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/text-bg.gif +0 -0
  858. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/trigger-square.gif +0 -0
  859. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/trigger-square.psd +0 -0
  860. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/trigger-tpl.gif +0 -0
  861. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/trigger.gif +0 -0
  862. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/form/trigger.psd +0 -0
  863. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/gradient-bg.gif +0 -0
  864. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/arrow-left-white.gif +0 -0
  865. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/arrow-right-white.gif +0 -0
  866. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/col-move-bottom.gif +0 -0
  867. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/col-move-top.gif +0 -0
  868. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/columns.gif +0 -0
  869. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/dirty.gif +0 -0
  870. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/done.gif +0 -0
  871. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/drop-no.gif +0 -0
  872. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/drop-yes.gif +0 -0
  873. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/footer-bg.gif +0 -0
  874. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-blue-hd.gif +0 -0
  875. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-blue-split.gif +0 -0
  876. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-hrow.gif +0 -0
  877. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-loading.gif +0 -0
  878. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-split.gif +0 -0
  879. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid-vista-hd.gif +0 -0
  880. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid3-hd-btn.gif +0 -0
  881. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid3-hrow-over.gif +0 -0
  882. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid3-hrow.gif +0 -0
  883. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid3-special-col-bg.gif +0 -0
  884. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/grid3-special-col-sel-bg.gif +0 -0
  885. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/group-by.gif +0 -0
  886. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/group-collapse.gif +0 -0
  887. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/group-expand-sprite.gif +0 -0
  888. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/group-expand.gif +0 -0
  889. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hd-pop.gif +0 -0
  890. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-asc.gif +0 -0
  891. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-desc.gif +0 -0
  892. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-lock.gif +0 -0
  893. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-lock.png +0 -0
  894. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-unlock.gif +0 -0
  895. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/hmenu-unlock.png +0 -0
  896. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/invalid_line.gif +0 -0
  897. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/loading.gif +0 -0
  898. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/mso-hd.gif +0 -0
  899. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/nowait.gif +0 -0
  900. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-first-disabled.gif +0 -0
  901. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-first.gif +0 -0
  902. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-last-disabled.gif +0 -0
  903. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-last.gif +0 -0
  904. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-next-disabled.gif +0 -0
  905. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-next.gif +0 -0
  906. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-prev-disabled.gif +0 -0
  907. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/page-prev.gif +0 -0
  908. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/pick-button.gif +0 -0
  909. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/refresh.gif +0 -0
  910. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/row-check-sprite.gif +0 -0
  911. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/row-expand-sprite.gif +0 -0
  912. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/row-over.gif +0 -0
  913. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/row-sel.gif +0 -0
  914. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/sort-hd.gif +0 -0
  915. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/sort_asc.gif +0 -0
  916. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/sort_desc.gif +0 -0
  917. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/grid/wait.gif +0 -0
  918. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/collapse.gif +0 -0
  919. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/expand.gif +0 -0
  920. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/gradient-bg.gif +0 -0
  921. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/mini-bottom.gif +0 -0
  922. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/mini-left.gif +0 -0
  923. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/mini-right.gif +0 -0
  924. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/mini-top.gif +0 -0
  925. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/ns-collapse.gif +0 -0
  926. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/ns-expand.gif +0 -0
  927. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/panel-close.gif +0 -0
  928. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/panel-title-bg.gif +0 -0
  929. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/panel-title-light-bg.gif +0 -0
  930. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/stick.gif +0 -0
  931. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/stuck.gif +0 -0
  932. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/tab-close-on.gif +0 -0
  933. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/layout/tab-close.gif +0 -0
  934. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/checked.gif +0 -0
  935. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/group-checked.gif +0 -0
  936. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/item-over.gif +0 -0
  937. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/menu-parent.gif +0 -0
  938. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/menu.gif +0 -0
  939. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/menu/unchecked.gif +0 -0
  940. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/corners-sprite.gif +0 -0
  941. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/left-right.gif +0 -0
  942. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/light-hd.gif +0 -0
  943. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/tool-sprite-tpl.gif +0 -0
  944. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/tool-sprites.gif +0 -0
  945. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/tools-sprites-trans.gif +0 -0
  946. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/top-bottom.gif +0 -0
  947. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/top-bottom.png +0 -0
  948. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/white-corners-sprite.gif +0 -0
  949. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/white-left-right.gif +0 -0
  950. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/panel/white-top-bottom.gif +0 -0
  951. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/progress/progress-bg.gif +0 -0
  952. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/qtip/bg.gif +0 -0
  953. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/qtip/close.gif +0 -0
  954. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/qtip/tip-anchor-sprite.gif +0 -0
  955. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/qtip/tip-sprite.gif +0 -0
  956. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/s.gif +0 -0
  957. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shadow-c.png +0 -0
  958. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shadow-lr.png +0 -0
  959. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shadow.png +0 -0
  960. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/blue-loading.gif +0 -0
  961. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/calendar.gif +0 -0
  962. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/glass-bg.gif +0 -0
  963. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/hd-sprite.gif +0 -0
  964. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/large-loading.gif +0 -0
  965. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/left-btn.gif +0 -0
  966. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/loading-balls.gif +0 -0
  967. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/right-btn.gif +0 -0
  968. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/shared/warning.gif +0 -0
  969. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/e-handle-dark.gif +0 -0
  970. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/e-handle.gif +0 -0
  971. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/ne-handle-dark.gif +0 -0
  972. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/ne-handle.gif +0 -0
  973. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/nw-handle-dark.gif +0 -0
  974. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/nw-handle.gif +0 -0
  975. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/s-handle-dark.gif +0 -0
  976. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/s-handle.gif +0 -0
  977. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/se-handle-dark.gif +0 -0
  978. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/se-handle.gif +0 -0
  979. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/square.gif +0 -0
  980. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/sw-handle-dark.gif +0 -0
  981. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/sizer/sw-handle.gif +0 -0
  982. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/slider/slider-bg.png +0 -0
  983. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/slider/slider-thumb.png +0 -0
  984. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/slider/slider-v-bg.png +0 -0
  985. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/slider/slider-v-thumb.png +0 -0
  986. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/scroll-left.gif +0 -0
  987. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/scroll-right.gif +0 -0
  988. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/scroller-bg.gif +0 -0
  989. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
  990. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
  991. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-left-bg.gif +0 -0
  992. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-over-left-bg.gif +0 -0
  993. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-over-right-bg.gif +0 -0
  994. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-btm-right-bg.gif +0 -0
  995. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-close.gif +0 -0
  996. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-strip-bg.gif +0 -0
  997. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-strip-bg.png +0 -0
  998. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tab-strip-btm-bg.gif +0 -0
  999. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tabs/tabs-sprite.gif +0 -0
  1000. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/bg.gif +0 -0
  1001. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/btn-arrow-light.gif +0 -0
  1002. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/btn-arrow.gif +0 -0
  1003. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/btn-over-bg.gif +0 -0
  1004. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/gray-bg.gif +0 -0
  1005. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/more.gif +0 -0
  1006. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/tb-bg.gif +0 -0
  1007. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/tb-btn-sprite.gif +0 -0
  1008. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  1009. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/toolbar/tb-xl-sep.gif +0 -0
  1010. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/arrows.gif +0 -0
  1011. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-add.gif +0 -0
  1012. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-between.gif +0 -0
  1013. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-no.gif +0 -0
  1014. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-over.gif +0 -0
  1015. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-under.gif +0 -0
  1016. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/drop-yes.gif +0 -0
  1017. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-end-minus-nl.gif +0 -0
  1018. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-end-minus.gif +0 -0
  1019. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-end-plus-nl.gif +0 -0
  1020. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-end-plus.gif +0 -0
  1021. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-end.gif +0 -0
  1022. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-line.gif +0 -0
  1023. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-minus-nl.gif +0 -0
  1024. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-minus.gif +0 -0
  1025. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-plus-nl.gif +0 -0
  1026. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow-plus.gif +0 -0
  1027. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/elbow.gif +0 -0
  1028. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/folder-open.gif +0 -0
  1029. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/folder.gif +0 -0
  1030. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/leaf.gif +0 -0
  1031. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/loading.gif +0 -0
  1032. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/tree/s.gif +0 -0
  1033. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/icon-error.gif +0 -0
  1034. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/icon-info.gif +0 -0
  1035. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/icon-question.gif +0 -0
  1036. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/icon-warning.gif +0 -0
  1037. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/left-corners.png +0 -0
  1038. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/left-corners.psd +0 -0
  1039. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/left-right.png +0 -0
  1040. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/left-right.psd +0 -0
  1041. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/right-corners.png +0 -0
  1042. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/right-corners.psd +0 -0
  1043. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/top-bottom.png +0 -0
  1044. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/default/window/top-bottom.psd +0 -0
  1045. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/btn-arrow.gif +0 -0
  1046. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/btn-sprite.gif +0 -0
  1047. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/btn.gif +0 -0
  1048. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/group-cs.gif +0 -0
  1049. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/group-lr.gif +0 -0
  1050. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/group-tb.gif +0 -0
  1051. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/s-arrow-bo.gif +0 -0
  1052. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/button/s-arrow-o.gif +0 -0
  1053. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/form/clear-trigger.gif +0 -0
  1054. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/form/date-trigger.gif +0 -0
  1055. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/form/search-trigger.gif +0 -0
  1056. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/form/trigger-square.gif +0 -0
  1057. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/form/trigger.gif +0 -0
  1058. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/gradient-bg.gif +0 -0
  1059. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/col-move-bottom.gif +0 -0
  1060. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/col-move-top.gif +0 -0
  1061. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-hd-btn.gif +0 -0
  1062. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-hrow-over.gif +0 -0
  1063. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-hrow-over2.gif +0 -0
  1064. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-hrow.gif +0 -0
  1065. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-hrow2.gif +0 -0
  1066. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-special-col-bg.gif +0 -0
  1067. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-special-col-bg2.gif +0 -0
  1068. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/grid3-special-col-sel-bg.gif +0 -0
  1069. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/group-collapse.gif +0 -0
  1070. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/group-expand-sprite.gif +0 -0
  1071. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/group-expand.gif +0 -0
  1072. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/page-first.gif +0 -0
  1073. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/page-last.gif +0 -0
  1074. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/page-next.gif +0 -0
  1075. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/page-prev.gif +0 -0
  1076. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/refresh.gif +0 -0
  1077. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/row-expand-sprite.gif +0 -0
  1078. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/sort_asc.gif +0 -0
  1079. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/grid/sort_desc.gif +0 -0
  1080. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/menu/group-checked.gif +0 -0
  1081. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/menu/item-over-disabled.gif +0 -0
  1082. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/menu/item-over.gif +0 -0
  1083. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/menu/menu-parent.gif +0 -0
  1084. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/corners-sprite.gif +0 -0
  1085. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/left-right.gif +0 -0
  1086. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/light-hd.gif +0 -0
  1087. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/tool-sprite-tpl.gif +0 -0
  1088. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/tool-sprites.gif +0 -0
  1089. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/tools-sprites-trans.gif +0 -0
  1090. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/top-bottom.gif +0 -0
  1091. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/top-bottom.png +0 -0
  1092. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/white-corners-sprite.gif +0 -0
  1093. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/white-left-right.gif +0 -0
  1094. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/panel/white-top-bottom.gif +0 -0
  1095. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/progress/progress-bg.gif +0 -0
  1096. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/qtip/bg.gif +0 -0
  1097. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/qtip/close.gif +0 -0
  1098. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/qtip/tip-anchor-sprite.gif +0 -0
  1099. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/qtip/tip-sprite.gif +0 -0
  1100. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/s.gif +0 -0
  1101. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/shared/hd-sprite.gif +0 -0
  1102. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/shared/left-btn.gif +0 -0
  1103. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/shared/right-btn.gif +0 -0
  1104. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/e-handle.gif +0 -0
  1105. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/ne-handle.gif +0 -0
  1106. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/nw-handle.gif +0 -0
  1107. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/s-handle.gif +0 -0
  1108. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/se-handle.gif +0 -0
  1109. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/square.gif +0 -0
  1110. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/sizer/sw-handle.gif +0 -0
  1111. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/slider/slider-thumb.png +0 -0
  1112. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/slider/slider-v-thumb.png +0 -0
  1113. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/scroll-left.gif +0 -0
  1114. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/scroll-right.gif +0 -0
  1115. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/scroller-bg.gif +0 -0
  1116. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif +0 -0
  1117. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif +0 -0
  1118. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-left-bg.gif +0 -0
  1119. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-over-left-bg.gif +0 -0
  1120. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-over-right-bg.gif +0 -0
  1121. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-btm-right-bg.gif +0 -0
  1122. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-close.gif +0 -0
  1123. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-strip-bg.gif +0 -0
  1124. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-strip-bg.png +0 -0
  1125. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tab-strip-btm-bg.gif +0 -0
  1126. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tabs/tabs-sprite.gif +0 -0
  1127. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/bg.gif +0 -0
  1128. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/btn-arrow-light.gif +0 -0
  1129. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/btn-arrow.gif +0 -0
  1130. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/btn-over-bg.gif +0 -0
  1131. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/gray-bg.gif +0 -0
  1132. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/more.gif +0 -0
  1133. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/tb-bg.gif +0 -0
  1134. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/toolbar/tb-btn-sprite.gif +0 -0
  1135. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tree/arrows.gif +0 -0
  1136. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tree/elbow-end-minus-nl.gif +0 -0
  1137. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tree/elbow-end-minus.gif +0 -0
  1138. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tree/elbow-end-plus-nl.gif +0 -0
  1139. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/tree/elbow-end-plus.gif +0 -0
  1140. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/icon-error.gif +0 -0
  1141. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/icon-info.gif +0 -0
  1142. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/icon-question.gif +0 -0
  1143. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/icon-warning.gif +0 -0
  1144. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/left-corners.png +0 -0
  1145. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/left-corners.pspimage +0 -0
  1146. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/right-corners.png +0 -0
  1147. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/images/gray/window/top-bottom.png +0 -0
  1148. data/vendor/assets/javascripts/aloha/lib/vendor/ext-3.2.1/resources/resources.jsb +0 -507
  1149. data/vendor/assets/javascripts/aloha/lib/vendor/jquery.json-2.2.min.js +0 -33
  1150. data/vendor/assets/javascripts/aloha/lib/vendor/jquery.store.js +0 -470
  1151. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/en/i18n.js +0 -1
  1152. data/vendor/assets/javascripts/aloha/plugins/common/align/nls/fr/i18n.js +0 -1
  1153. data/vendor/assets/javascripts/aloha/plugins/common/block/lib/jquery-ui-1.8.16.custom.min.js +0 -198
  1154. data/vendor/assets/javascripts/aloha/plugins/common/format/css/format.css +0 -8
  1155. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/eo/i18n.js +0 -1
  1156. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/fi/i18n.js +0 -1
  1157. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/fr/i18n.js +0 -1
  1158. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/it/i18n.js +0 -1
  1159. data/vendor/assets/javascripts/aloha/plugins/common/format/nls/pl/i18n.js +0 -1
  1160. data/vendor/assets/javascripts/aloha/plugins/common/image/AGPL3 +0 -661
  1161. data/vendor/assets/javascripts/aloha/plugins/common/image/LICENSE +0 -25
  1162. data/vendor/assets/javascripts/aloha/plugins/common/image/demo/crop.html +0 -76
  1163. data/vendor/assets/javascripts/aloha/plugins/common/image/demo/crop.php +0 -21
  1164. data/vendor/assets/javascripts/aloha/plugins/common/image/demo/cropnresize.jpg +0 -0
  1165. data/vendor/assets/javascripts/aloha/plugins/common/image/demo/index.html +0 -120
  1166. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/cz/i18n.js +0 -16
  1167. data/vendor/assets/javascripts/aloha/plugins/common/image/nls/fr/i18n.js +0 -1
  1168. data/vendor/assets/javascripts/aloha/plugins/common/image/test/test.css +0 -12
  1169. data/vendor/assets/javascripts/aloha/plugins/common/image/test/test.html +0 -40
  1170. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/jquery-ui-1.8.10.custom.min.js +0 -97
  1171. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/jquery-ui-1.8.10.cropnresize.css +0 -33
  1172. data/vendor/assets/javascripts/aloha/plugins/common/image/vendor/ui/ui-lightness/jquery-ui-1.8.10.custom.css +0 -314
  1173. data/vendor/assets/javascripts/aloha/plugins/common/link/demo/background.png +0 -0
  1174. data/vendor/assets/javascripts/aloha/plugins/common/link/demo/external-link-ltr-icon.png +0 -0
  1175. data/vendor/assets/javascripts/aloha/plugins/common/link/demo/index.css +0 -91
  1176. data/vendor/assets/javascripts/aloha/plugins/common/link/demo/index.html +0 -91
  1177. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/fr/i18n.js +0 -6
  1178. data/vendor/assets/javascripts/aloha/plugins/common/link/nls/pl/i18n.js +0 -6
  1179. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/eo/i18n.js +0 -1
  1180. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/fi/i18n.js +0 -1
  1181. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/fr/i18n.js +0 -1
  1182. data/vendor/assets/javascripts/aloha/plugins/common/list/nls/it/i18n.js +0 -1
  1183. data/vendor/assets/javascripts/aloha/plugins/common/paste/README.md +0 -3
  1184. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/eo/i18n.js +0 -1
  1185. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/fi/i18n.js +0 -1
  1186. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/fr/i18n.js +0 -1
  1187. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/it/i18n.js +0 -1
  1188. data/vendor/assets/javascripts/aloha/plugins/common/table/nls/pl/i18n.js +0 -1
  1189. data/vendor/assets/javascripts/aloha/plugins/common/undo/demo/index.css +0 -49
  1190. data/vendor/assets/javascripts/aloha/plugins/common/undo/demo/index.html +0 -85
  1191. data/vendor/assets/javascripts/aloha/plugins/extra/attributes/nls/en/i18n.js +0 -1
  1192. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/browser.css +0 -360
  1193. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/browser.jqgrid.css +0 -374
  1194. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  1195. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  1196. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  1197. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  1198. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  1199. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  1200. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  1201. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  1202. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-icons_222222_256x240.png +0 -0
  1203. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-icons_2e83ff_256x240.png +0 -0
  1204. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-icons_454545_256x240.png +0 -0
  1205. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-icons_888888_256x240.png +0 -0
  1206. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  1207. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/jquery-ui-1.8.13.custom.css +0 -319
  1208. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/throbber.gif +0 -0
  1209. data/vendor/assets/javascripts/aloha/plugins/extra/browser/css/ui.jqgrid.css +0 -148
  1210. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow-000-medium.png +0 -0
  1211. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow-180.png +0 -0
  1212. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow-315-medium.png +0 -0
  1213. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow-stop-180.png +0 -0
  1214. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow-stop.png +0 -0
  1215. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/arrow.png +0 -0
  1216. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/control-stop-square-small.png +0 -0
  1217. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/folder-horizontal-open.png +0 -0
  1218. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/folder-open.png +0 -0
  1219. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/gcn-icons/gcn-icon-file.gif +0 -0
  1220. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/gcn-icons/gcn-icon-image.gif +0 -0
  1221. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/gcn-icons/gcn-icon-page.gif +0 -0
  1222. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/magnifier-left.png +0 -0
  1223. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/page.png +0 -0
  1224. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/picture.png +0 -0
  1225. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/sort-alphabet-descending.png +0 -0
  1226. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/sort-alphabet.png +0 -0
  1227. data/vendor/assets/javascripts/aloha/plugins/extra/browser/img/throbber.gif +0 -0
  1228. data/vendor/assets/javascripts/aloha/plugins/extra/browser/lib/browser-plugin.js +0 -10
  1229. data/vendor/assets/javascripts/aloha/plugins/extra/browser/lib/browser.js +0 -1126
  1230. data/vendor/assets/javascripts/aloha/plugins/extra/browser/lib/locale.js +0 -26
  1231. data/vendor/assets/javascripts/aloha/plugins/extra/browser/nls/de.json +0 -1
  1232. data/vendor/assets/javascripts/aloha/plugins/extra/browser/nls/de/i18n.js +0 -18
  1233. data/vendor/assets/javascripts/aloha/plugins/extra/browser/nls/en.json +0 -1
  1234. data/vendor/assets/javascripts/aloha/plugins/extra/browser/nls/en/i18n.js +0 -18
  1235. data/vendor/assets/javascripts/aloha/plugins/extra/browser/nls/i18n.js +0 -4
  1236. data/vendor/assets/javascripts/aloha/plugins/extra/browser/vendor/jquery.ui.js +0 -761
  1237. data/vendor/assets/javascripts/aloha/plugins/extra/browser/vendor/ui-layout.js +0 -113
  1238. data/vendor/assets/javascripts/aloha/plugins/extra/cite/nls/en/i18n.js +0 -1
  1239. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/AGPL3 +0 -661
  1240. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/LICENSE +0 -25
  1241. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/index.css +0 -47
  1242. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/index.html +0 -101
  1243. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/migration/index.css +0 -189
  1244. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/migration/index.html +0 -321
  1245. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/specs/DragnDropnImage.graphml +0 -677
  1246. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/style.css +0 -47
  1247. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/demo/upload.php +0 -26
  1248. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/i18n/en.json +0 -1
  1249. data/vendor/assets/javascripts/aloha/plugins/extra/draganddropfiles/i18n/fr.json +0 -1
  1250. data/vendor/assets/javascripts/aloha/plugins/extra/headerids/nls/en/i18n.js +0 -1
  1251. data/vendor/assets/javascripts/aloha/plugins/extra/hints/dep/jquery.poshytip.js +0 -470
  1252. data/vendor/assets/javascripts/aloha/plugins/extra/hints/i18n/de.json +0 -1
  1253. data/vendor/assets/javascripts/aloha/plugins/extra/hints/i18n/en.json +0 -1
  1254. data/vendor/assets/javascripts/aloha/plugins/extra/hints/img/tip-twitter_arrows.gif +0 -0
  1255. data/vendor/assets/javascripts/aloha/plugins/extra/hints/src/hints.css +0 -61
  1256. data/vendor/assets/javascripts/aloha/plugins/extra/hints/src/hints.js +0 -49
  1257. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/fr/i18n.js +0 -1
  1258. data/vendor/assets/javascripts/aloha/plugins/extra/linkbrowser/nls/pl/i18n.js +0 -1
  1259. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/demo/index.css +0 -49
  1260. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/demo/index.html +0 -82
  1261. data/vendor/assets/javascripts/aloha/plugins/extra/linkchecker/i18n/en.json +0 -1
  1262. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/de.json +0 -1
  1263. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/en.json +0 -1
  1264. data/vendor/assets/javascripts/aloha/plugins/extra/metaview/nls/en/i18n.js +0 -1
  1265. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/demo/index.css +0 -189
  1266. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/demo/index.html +0 -139
  1267. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/demo/js/aloha-config.js +0 -115
  1268. data/vendor/assets/javascripts/aloha/plugins/extra/numerated-headers/nls/en/i18n.js +0 -1
  1269. data/vendor/assets/javascripts/aloha/plugins/extra/ribbon/LICENSE.md +0 -662
  1270. data/vendor/assets/javascripts/aloha/plugins/extra/vie/LICENSE +0 -22
  1271. data/vendor/assets/javascripts/aloha/plugins/extra/vie/README.markdown +0 -65
  1272. data/vendor/assets/javascripts/aloha/plugins/extra/vie/demo/index.html +0 -93
  1273. data/vendor/assets/javascripts/aloha/plugins/extra/vie/img/cms-decoupled-communications.png +0 -0
  1274. data/vendor/assets/javascripts/aloha/plugins/extra/vie/package.json +0 -1
  1275. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/backbone-min.js +0 -27
  1276. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/underscore-min.js +0 -25
  1277. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/vie-aloha.js +0 -74
  1278. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/vie-collectionmanager.js +0 -70
  1279. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/vie-containermanager.js +0 -263
  1280. data/vendor/assets/javascripts/aloha/plugins/extra/vie/src/vie.js +0 -20
@@ -1,1685 +1,1706 @@
1
- /*!
2
- * This file is part of Aloha Editor Project http://aloha-editor.org
3
- * Copyright © 2010-2011 Gentics Software GmbH, aloha@gentics.com
4
- * Contributors http://aloha-editor.org/contribution.php
5
- * Licensed unter the terms of http://www.aloha-editor.org/license.html
6
- *//*
7
- * Aloha Editor is free software: you can redistribute it and/or modify
8
- * it under the terms of the GNU Affero General Public License as published by
9
- * the Free Software Foundation, either version 3 of the License, or
10
- * (at your option) any later version.*
11
- *
12
- * Aloha Editor is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- * GNU Affero General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Affero General Public License
18
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
- */
20
-
21
- // Ensure GENTICS Namespace
22
- GENTICS = window.GENTICS || {};
23
- GENTICS.Utils = GENTICS.Utils || {};
24
-
25
- define(
26
- ['aloha/jquery', 'util/class', 'aloha/ecma5shims'],
27
- function(jQuery, Class, $_) {
28
-
29
-
30
- var
31
- GENTICS = window.GENTICS,
32
- // Class = window.Class,
33
- // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1841493061
34
- Node = {
35
- 'ELEMENT_NODE' : 1,
36
- 'ATTRIBUTE_NODE': 2,
37
- 'TEXT_NODE': 3,
38
- 'CDATA_SECTION_NODE': 4,
39
- 'ENTITY_REFERENCE_NODE': 5,
40
- 'ENTITY_NODE': 6,
41
- 'PROCESSING_INSTRUCTION_NODE': 7,
42
- 'COMMENT_NODE': 8,
43
- 'DOCUMENT_NODE': 9,
44
- 'DOCUMENT_TYPE_NODE': 10,
45
- 'DOCUMENT_FRAGMENT_NODE': 11,
46
- 'NOTATION_NODE': 12,
47
- //The two nodes are disconnected. Order between disconnected nodes is always implementation-specific.
48
- 'DOCUMENT_POSITION_DISCONNECTED': 0x01,
49
- //The second node precedes the reference node.
50
- 'DOCUMENT_POSITION_PRECEDING': 0x02,
51
- //The node follows the reference node.
52
- 'DOCUMENT_POSITION_FOLLOWING': 0x04,
53
- //The node contains the reference node. A node which contains is always preceding, too.
54
- 'DOCUMENT_POSITION_CONTAINS': 0x08,
55
- //The node is contained by the reference node. A node which is contained is always following, too.
56
- 'DOCUMENT_POSITION_CONTAINED_BY': 0x10,
57
- //The determination of preceding versus following is implementation-specific.
58
- 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC': 0x20
59
- };
60
-
61
-
62
-
63
- /**
64
- * @namespace GENTICS.Utils
65
- * @class Dom provides methods to get information about the DOM and to manipulate it
66
- * @singleton
1
+ /* dom.js is part of Aloha Editor project http://aloha-editor.org
2
+ *
3
+ * Aloha Editor is a WYSIWYG HTML5 inline editing library and editor.
4
+ * Copyright (c) 2010-2012 Gentics Software GmbH, Vienna, Austria.
5
+ * Contributors http://aloha-editor.org/contribution.php
6
+ *
7
+ * Aloha Editor is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License
9
+ * as published by the Free Software Foundation; either version 2
10
+ * of the License, or any later version.
11
+ *
12
+ * Aloha Editor is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ *
21
+ * As an additional permission to the GNU GPL version 2, you may distribute
22
+ * non-source (e.g., minimized or compacted) forms of the Aloha-Editor
23
+ * source code without the copy of the GNU GPL normally required,
24
+ * provided you include this license notice and a URL through which
25
+ * recipients can access the Corresponding Source.
67
26
  */
68
- var Dom = Class.extend({
69
- /**
70
- * Regex to find word characters.
71
- */
72
- wordRegex: /[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0525\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971\u0972\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCB\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA65F\uA662-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B\uA78C\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
73
-
74
- /**
75
- * Regex to find non-word characters.
76
- */
77
- nonWordRegex: /[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0525\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971\u0972\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCB\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA65F\uA662-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B\uA78C\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
78
-
79
- /**
80
- * Tags which can safely be merged
81
- * @hide
82
- */
83
- mergeableTags: ['b', 'code', 'del', 'em', 'i', 'ins', 'strong', 'sub', 'sup', '#text'],
84
-
85
- /**
86
- * Tags which do not mark word boundaries
87
- * @hide
88
- */
89
- nonWordBoundaryTags: ['a', 'b', 'code', 'del', 'em', 'i', 'ins', 'span', 'strong', 'sub', 'sup', '#text'],
90
-
91
- /**
92
- * Tags which are considered 'nonempty', even if they have no children (or not data)
93
- * TODO: finish this list
94
- * @hide
95
- */
96
- nonEmptyTags: ['br'],
97
-
98
- /**
99
- * Tags which make up Flow Content or Phrasing Content, according to the HTML 5 specification,
100
- * @see http://dev.w3.org/html5/spec/Overview.html#flow-content
101
- * @see http://dev.w3.org/html5/spec/Overview.html#phrasing-content
102
- * @hide
103
- */
104
- tags: {
105
- 'flow' : [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio',
106
- 'b', 'bdi','bdo', 'blockquote', 'br', 'button', 'canvas', 'cite', 'code',
107
- 'command', 'datalist', 'del', 'details', 'dfn', 'div', 'dl', 'em',
108
- 'embed', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3',
109
- 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'i', 'iframe', 'img',
110
- 'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math',
111
- 'menu', 'meter', 'nav', 'noscript', 'object', 'ol', 'output', 'p',
112
- 'pre', 'progress', 'q', 'ruby', 's', 'samp', 'script', 'section',
113
- 'select', 'small', 'span', 'strong', 'style', 'sub', 'sup', 'svg',
114
- 'table', 'textarea', 'time', 'u', 'ul', 'var', 'video', 'wbr', '#text' ],
115
- 'phrasing' : [ 'a', 'abbr', 'area', 'audio', 'b', 'bdi', 'bdo', 'br', 'button',
116
- 'canvas', 'cite', 'code', 'command', 'datalist', 'del', 'dfn',
117
- 'em', 'embed', 'i', 'iframe', 'img', 'input', 'ins', 'kbd',
118
- 'keygen', 'label', 'map', 'mark', 'math', 'meter', 'noscript',
119
- 'object', 'output', 'progress', 'q', 'ruby', 'samp', 'script',
120
- 'select', 'small', 'span', 'strong', 'sub', 'sup', 'svg',
121
- 'textarea', 'time', 'u', 'var', 'video', 'wbr', '#text' ]
122
- },
123
-
124
- /**
125
- * Possible children of tags, according to the HTML 5
126
- * specification.
127
- * See http://dev.w3.org/html5/spec/Overview.html#elements-1
128
- * Moved to http://www.whatwg.org/specs/web-apps/current-work/#elements-1
129
- * @hide
130
- */
131
- children: {
132
- 'a' : 'phrasing', // transparent
133
- 'abbr' : 'phrasing',
134
- 'address' : 'flow',
135
- 'area' : 'empty',
136
- 'article' : 'flow',
137
- 'aside' : 'flow',
138
- 'audio' : 'source', // transparent
139
- 'b' : 'phrasing',
140
- 'base' : 'empty',
141
- 'bdo' : 'phrasing',
142
- 'blockquote' : 'phrasing',
143
- 'body' : 'flow',
144
- 'br' : 'empty',
145
- 'button' : 'phrasing',
146
- 'canvas' : 'phrasing', // transparent
147
- 'caption' : 'flow',
148
- 'cite' : 'phrasing',
149
- 'code' : 'phrasing',
150
- 'col' : 'empty',
151
- 'colgroup' : 'col',
152
- 'command' : 'empty',
153
- 'datalist' : ['phrasing', 'option'],
154
- 'dd' : 'flow',
155
- 'del' : 'phrasing',
156
- 'div' : 'flow',
157
- 'details' : ['summary', 'flow'],
158
- 'dfn' : 'flow',
159
- 'dl' : ['dt','dd'],
160
- 'dt' : 'phrasing', // varies
161
- 'em' : 'phrasing',
162
- 'embed' : 'empty',
163
- 'fieldset' : ['legend', 'flow'],
164
- 'figcaption': 'flow',
165
- 'figure' : ['figcaption', 'flow'],
166
- 'footer' : 'flow',
167
- 'form' : 'flow',
168
- 'h1' : 'phrasing',
169
- 'h2' : 'phrasing',
170
- 'h3' : 'phrasing',
171
- 'h4' : 'phrasing',
172
- 'h5' : 'phrasing',
173
- 'h6' : 'phrasing',
174
- //head
175
- 'header' : 'flow',
176
- 'hgroup' : ['h1','h2','h3','h4','h5','h6'],
177
- 'hr' : 'empty',
178
- //html :)
179
- 'i' : 'phrasing',
180
- 'iframe' : '#text',
181
- 'img' : 'empty',
182
- 'input' : 'empty',
183
- 'ins' : 'phrasing', // transparent
184
- 'kbd' : 'phrasing',
185
- 'keygen' : 'empty',
186
- 'label' : 'phrasing',
187
- 'legend' : 'phrasing',
188
- 'li' : 'flow',
189
- 'link' : 'empty',
190
- 'map' : 'area', // transparent
191
- 'mark' : 'phrasing',
192
- 'menu' : ['li', 'flow'],
193
- 'meta' : 'empty',
194
- 'meter' : 'phrasing',
195
- 'nav' : 'flow',
196
- 'noscript' : 'phrasing', // varies
197
- 'object' : 'param', // transparent
198
- 'ol' : 'li',
199
- 'optgroup' : 'option',
200
- 'option' : '#text',
201
- 'output' : 'phrasing',
202
- 'p' : 'phrasing',
203
- 'param' : 'empty',
204
- 'pre' : 'phrasing',
205
- 'progress' : 'phrasing',
206
- 'q' : 'phrasing',
207
- 'rp' : 'phrasing',
208
- 'rt' : 'phrasing',
209
- 'ruby' : ['phrasing', 'rt', 'rp'],
210
- 's' : 'phrasing',
211
- 'samp' : 'pharsing',
212
- 'script' : '#script', //script
213
- 'section' : 'flow',
214
- 'select' : ['option', 'optgroup'],
215
- 'small' : 'phrasing',
216
- 'source' : 'empty',
217
- 'span' : 'phrasing',
218
- 'strong' : 'phrasing',
219
- 'style' : 'phrasing', // varies
220
- 'sub' : 'phrasing',
221
- 'summary' : 'phrasing',
222
- 'sup' : 'phrasing',
223
- 'table' : ['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'tr'],
224
- 'tbody' : 'tr',
225
- 'td' : 'flow',
226
- 'textarea' : '#text',
227
- 'tfoot' : 'tr',
228
- 'th' : 'phrasing',
229
- 'thead' : 'tr',
230
- 'time' : 'phrasing',
231
- 'title' : '#text',
232
- 'tr' : ['th', 'td'],
233
- 'track' : 'empty',
234
- 'u' : 'phrasing',
235
- 'ul' : 'li',
236
- 'var' : 'phrasing',
237
- 'video' : 'source', // transparent
238
- 'wbr' : 'empty'
239
- },
27
+ // Ensure GENTICS Namespace
28
+ window.GENTICS = window.GENTICS || {};
29
+ window.GENTICS.Utils = window.GENTICS.Utils || {};
240
30
 
241
- /**
242
- * List of nodenames of blocklevel elements
243
- * TODO: finish this list
244
- * @hide
245
- */
246
- blockLevelElements: ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'div', 'pre'],
31
+ define(['jquery', 'util/class', 'aloha/ecma5shims'], function (jQuery, Class, $_) {
32
+ "use strict";
247
33
 
248
- /**
249
- * List of nodenames of list elements
250
- * @hide
251
- */
252
- listElements: ['li', 'ol', 'ul'],
34
+ var GENTICS = window.GENTICS,
35
+ // Class = window.Class,
36
+ // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1841493061
37
+ Node = {
38
+ 'ELEMENT_NODE': 1,
39
+ 'ATTRIBUTE_NODE': 2,
40
+ 'TEXT_NODE': 3,
41
+ 'CDATA_SECTION_NODE': 4,
42
+ 'ENTITY_REFERENCE_NODE': 5,
43
+ 'ENTITY_NODE': 6,
44
+ 'PROCESSING_INSTRUCTION_NODE': 7,
45
+ 'COMMENT_NODE': 8,
46
+ 'DOCUMENT_NODE': 9,
47
+ 'DOCUMENT_TYPE_NODE': 10,
48
+ 'DOCUMENT_FRAGMENT_NODE': 11,
49
+ 'NOTATION_NODE': 12,
50
+ //The two nodes are disconnected. Order between disconnected nodes is always implementation-specific.
51
+ 'DOCUMENT_POSITION_DISCONNECTED': 0x01,
52
+ //The second node precedes the reference node.
53
+ 'DOCUMENT_POSITION_PRECEDING': 0x02,
54
+ //The node follows the reference node.
55
+ 'DOCUMENT_POSITION_FOLLOWING': 0x04,
56
+ //The node contains the reference node. A node which contains is always preceding, too.
57
+ 'DOCUMENT_POSITION_CONTAINS': 0x08,
58
+ //The node is contained by the reference node. A node which is contained is always following, too.
59
+ 'DOCUMENT_POSITION_CONTAINED_BY': 0x10,
60
+ //The determination of preceding versus following is implementation-specific.
61
+ 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC': 0x20
62
+ },
63
+ blockElementNames = {
64
+ 'P': true,
65
+ 'H1': true,
66
+ 'H2': true,
67
+ 'H3': true,
68
+ 'H4': true,
69
+ 'H5': true,
70
+ 'H6': true,
71
+ 'LI': true
72
+ };
253
73
 
254
74
  /**
255
- * Splits a DOM element at the given position up until the limiting object(s), so that it is valid HTML again afterwards.
256
- * @param {RangeObject} range Range object that indicates the position of the splitting.
257
- * This range will be updated, so that it represents the same range as before the split.
258
- * @param {jQuery} limit Limiting node(s) for the split.
259
- * The limiting node will not be included in the split itself.
260
- * If no limiting object is set, the document body will be the limiting object.
261
- * @param {boolean} atEnd If set to true, the DOM will be splitted at the end of the range otherwise at the start.
262
- * @return {object} jQuery object containing the two root DOM objects of the split, true if the DOM did not need to be split or false if the DOM could not be split
263
- * @method
75
+ * @namespace GENTICS.Utils
76
+ * @class Dom provides methods to get information about the DOM and to manipulate it
77
+ * @singleton
264
78
  */
265
- split: function (range, limit, atEnd) {
266
- var
267
- splitElement = jQuery(range.startContainer),
268
- splitPosition = range.startOffset,
269
- updateRange, path, parents,
270
- newDom, insertElement, secondPart,
271
- i, pathLength, element, jqelement, children, newElement,
272
- next, prev, offset;
273
-
274
-
275
- if (atEnd) {
276
- splitElement = jQuery(range.endContainer);
277
- splitPosition = range.endOffset;
278
- }
79
+ var Dom = Class.extend({
80
+ /**
81
+ * Regex to find word characters.
82
+ */
83
+ wordRegex: /[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0525\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971\u0972\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCB\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA65F\uA662-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B\uA78C\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
84
+
85
+ /**
86
+ * Regex to find non-word characters.
87
+ */
88
+ nonWordRegex: /[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0525\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971\u0972\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCB\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA65F\uA662-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B\uA78C\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
89
+
90
+ /**
91
+ * Tags which can safely be merged
92
+ * @hide
93
+ */
94
+ mergeableTags: ['b', 'code', 'del', 'em', 'i', 'ins', 'strong', 'sub', 'sup', '#text'],
95
+
96
+ /**
97
+ * Tags which do not mark word boundaries
98
+ * @hide
99
+ */
100
+ nonWordBoundaryTags: ['a', 'b', 'code', 'del', 'em', 'i', 'ins', 'span', 'strong', 'sub', 'sup', '#text'],
101
+
102
+ /**
103
+ * Tags which are considered 'nonempty', even if they have no children (or not data)
104
+ * TODO: finish this list
105
+ * @hide
106
+ */
107
+ nonEmptyTags: ['br'],
108
+
109
+ /**
110
+ * Tags which make up Flow Content or Phrasing Content, according to the HTML 5 specification,
111
+ * @see http://dev.w3.org/html5/spec/Overview.html#flow-content
112
+ * @see http://dev.w3.org/html5/spec/Overview.html#phrasing-content
113
+ * @hide
114
+ */
115
+ tags: {
116
+ 'flow': ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'blockquote', 'br', 'button', 'canvas', 'cite', 'code', 'command', 'datalist', 'del', 'details', 'dfn', 'div', 'dl', 'em', 'embed', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math', 'menu', 'meter', 'nav', 'noscript', 'object', 'ol', 'output', 'p', 'pre', 'progress', 'q', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'span', 'strong', 'style', 'sub', 'sup', 'svg', 'table', 'textarea', 'time', 'u', 'ul', 'var', 'video', 'wbr', '#text'],
117
+ 'phrasing': ['a', 'abbr', 'area', 'audio', 'b', 'bdi', 'bdo', 'br', 'button', 'canvas', 'cite', 'code', 'command', 'datalist', 'del', 'dfn', 'em', 'embed', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math', 'meter', 'noscript', 'object', 'output', 'progress', 'q', 'ruby', 'samp', 'script', 'select', 'small', 'span', 'strong', 'sub', 'sup', 'svg', 'textarea', 'time', 'u', 'var', 'video', 'wbr', '#text']
118
+ },
119
+
120
+ /**
121
+ * Possible children of tags, according to the HTML 5
122
+ * specification.
123
+ * See http://dev.w3.org/html5/spec/Overview.html#elements-1
124
+ * Moved to http://www.whatwg.org/specs/web-apps/current-work/#elements-1
125
+ * @hide
126
+ */
127
+ children: {
128
+ 'a': 'phrasing', // transparent
129
+ 'abbr': 'phrasing',
130
+ 'address': 'flow',
131
+ 'area': 'empty',
132
+ 'article': 'flow',
133
+ 'aside': 'flow',
134
+ 'audio': 'source', // transparent
135
+ 'b': 'phrasing',
136
+ 'base': 'empty',
137
+ 'bdo': 'phrasing',
138
+ 'blockquote': 'phrasing',
139
+ 'body': 'flow',
140
+ 'br': 'empty',
141
+ 'button': 'phrasing',
142
+ 'canvas': 'phrasing', // transparent
143
+ 'caption': 'flow',
144
+ 'cite': 'phrasing',
145
+ 'code': 'phrasing',
146
+ 'col': 'empty',
147
+ 'colgroup': 'col',
148
+ 'command': 'empty',
149
+ 'datalist': ['phrasing', 'option'],
150
+ 'dd': 'flow',
151
+ 'del': 'phrasing',
152
+ 'div': 'flow',
153
+ 'details': ['summary', 'flow'],
154
+ 'dfn': 'flow',
155
+ 'dl': ['dt', 'dd'],
156
+ 'dt': 'phrasing', // varies
157
+ 'em': 'phrasing',
158
+ 'embed': 'empty',
159
+ 'fieldset': ['legend', 'flow'],
160
+ 'figcaption': 'flow',
161
+ 'figure': ['figcaption', 'flow'],
162
+ 'footer': 'flow',
163
+ 'form': 'flow',
164
+ 'h1': 'phrasing',
165
+ 'h2': 'phrasing',
166
+ 'h3': 'phrasing',
167
+ 'h4': 'phrasing',
168
+ 'h5': 'phrasing',
169
+ 'h6': 'phrasing',
170
+ //head
171
+ 'header': 'flow',
172
+ 'hgroup': ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
173
+ 'hr': 'empty',
174
+ //html :)
175
+ 'i': 'phrasing',
176
+ 'iframe': '#text',
177
+ 'img': 'empty',
178
+ 'input': 'empty',
179
+ 'ins': 'phrasing', // transparent
180
+ 'kbd': 'phrasing',
181
+ 'keygen': 'empty',
182
+ 'label': 'phrasing',
183
+ 'legend': 'phrasing',
184
+ 'li': 'flow',
185
+ 'link': 'empty',
186
+ 'map': 'area', // transparent
187
+ 'mark': 'phrasing',
188
+ 'menu': ['li', 'flow'],
189
+ 'meta': 'empty',
190
+ 'meter': 'phrasing',
191
+ 'nav': 'flow',
192
+ 'noscript': 'phrasing', // varies
193
+ 'object': 'param', // transparent
194
+ 'ol': 'li',
195
+ 'optgroup': 'option',
196
+ 'option': '#text',
197
+ 'output': 'phrasing',
198
+ 'p': 'phrasing',
199
+ 'param': 'empty',
200
+ 'pre': 'phrasing',
201
+ 'progress': 'phrasing',
202
+ 'q': 'phrasing',
203
+ 'rp': 'phrasing',
204
+ 'rt': 'phrasing',
205
+ 'ruby': ['phrasing', 'rt', 'rp'],
206
+ 's': 'phrasing',
207
+ 'samp': 'pharsing',
208
+ 'script': '#script', //script
209
+ 'section': 'flow',
210
+ 'select': ['option', 'optgroup'],
211
+ 'small': 'phrasing',
212
+ 'source': 'empty',
213
+ 'span': 'phrasing',
214
+ 'strong': 'phrasing',
215
+ 'style': 'phrasing', // varies
216
+ 'sub': 'phrasing',
217
+ 'summary': 'phrasing',
218
+ 'sup': 'phrasing',
219
+ 'table': ['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'tr'],
220
+ 'tbody': 'tr',
221
+ 'td': 'flow',
222
+ 'textarea': '#text',
223
+ 'tfoot': 'tr',
224
+ 'th': 'phrasing',
225
+ 'thead': 'tr',
226
+ 'time': 'phrasing',
227
+ 'title': '#text',
228
+ 'tr': ['th', 'td'],
229
+ 'track': 'empty',
230
+ 'u': 'phrasing',
231
+ 'ul': 'li',
232
+ 'var': 'phrasing',
233
+ 'video': 'source', // transparent
234
+ 'wbr': 'empty'
235
+ },
236
+
237
+ /**
238
+ * List of nodenames of blocklevel elements
239
+ * TODO: finish this list
240
+ * @hide
241
+ */
242
+ blockLevelElements: ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'div', 'pre'],
243
+
244
+ /**
245
+ * List of nodenames of list elements
246
+ * @hide
247
+ */
248
+ listElements: ['li', 'ol', 'ul'],
249
+
250
+ /**
251
+ * Splits a DOM element at the given position up until the limiting object(s), so that it is valid HTML again afterwards.
252
+ * @param {RangeObject} range Range object that indicates the position of the splitting.
253
+ * This range will be updated, so that it represents the same range as before the split.
254
+ * @param {jQuery} limit Limiting node(s) for the split.
255
+ * The limiting node will not be included in the split itself.
256
+ * If no limiting object is set, the document body will be the limiting object.
257
+ * @param {boolean} atEnd If set to true, the DOM will be splitted at the end of the range otherwise at the start.
258
+ * @return {object} jQuery object containing the two root DOM objects of the split, true if the DOM did not need to be split or false if the DOM could not be split
259
+ * @method
260
+ */
261
+ split: function (range, limit, atEnd) {
262
+ var splitElement = jQuery(range.startContainer),
263
+ splitPosition = range.startOffset,
264
+ updateRange,
265
+ path,
266
+ parents,
267
+ newDom,
268
+ insertElement,
269
+ secondPart,
270
+ i,
271
+ pathLength,
272
+ element,
273
+ jqelement,
274
+ children,
275
+ newElement,
276
+ next,
277
+ prev,
278
+ offset;
279
+
280
+ if (atEnd) {
281
+ splitElement = jQuery(range.endContainer);
282
+ splitPosition = range.endOffset;
283
+ }
279
284
 
280
- if (limit.length < 1) {
281
- limit = jQuery(document.body);
282
- }
285
+ if (limit.length < 1) {
286
+ limit = jQuery(document.body);
287
+ }
283
288
 
284
- // we may have to update the range if it is not collapsed and we are splitting at the start
285
- updateRange = (!range.isCollapsed() && !atEnd);
289
+ // we may have to update the range if it is not collapsed and we are splitting at the start
290
+ updateRange = (!range.isCollapsed() && !atEnd);
286
291
 
287
- // find the path up to the highest object that will be splitted
288
- parents = splitElement.parents().get();
289
- parents.unshift(splitElement.get(0));
292
+ // find the path up to the highest object that will be splitted
293
+ parents = splitElement.parents().get();
294
+ parents.unshift(splitElement.get(0));
290
295
 
291
- jQuery.each(parents, function(index, element) {
292
- var isLimit = limit.filter(
293
- function(){
296
+ jQuery.each(parents, function (index, element) {
297
+ var isLimit = limit.filter(
298
+ function () {
294
299
  return this == element;
295
- }).length;
296
- if (isLimit) {
297
- if (index > 0) {
298
- path = parents.slice(0, index);
300
+ }
301
+ ).length;
302
+ if (isLimit) {
303
+ if (index > 0) {
304
+ path = parents.slice(0, index);
305
+ }
306
+ return false;
299
307
  }
300
- return false;
301
- }
302
- });
308
+ });
303
309
 
304
- // nothing found to split -> return here
305
- if (! path) {
306
- return true;
307
- }
310
+ // nothing found to split -> return here
311
+ if (!path) {
312
+ return true;
313
+ }
308
314
 
309
- path = path.reverse();
315
+ path = path.reverse();
310
316
 
311
- // iterate over the path, create new dom nodes for every element and move
312
- // the contents right of the split to the new element
313
- for( i=0, pathLength = path.length; i < pathLength; ++i) {
314
- element = path[i];
315
- if (i === pathLength - 1) {
316
- // last element in the path -> we have to split it
317
+ // iterate over the path, create new dom nodes for every element and move
318
+ // the contents right of the split to the new element
319
+ for (i = 0, pathLength = path.length; i < pathLength; ++i) {
320
+ element = path[i];
321
+ if (i === pathLength - 1) {
322
+ // last element in the path -> we have to split it
317
323
 
318
- // split the last part into two parts
319
- if (element.nodeType === 3) {
320
- // text node
321
- secondPart = document.createTextNode(element.data.substring(splitPosition, element.data.length));
322
- element.data = element.data.substring(0, splitPosition);
323
- } else {
324
- // other nodes
325
- jqelement = jQuery(element);
326
- children = jqelement.contents();
327
- newElement = jqelement.clone(false).empty();
328
- secondPart = newElement.append(children.slice(splitPosition, children.length)).get(0);
329
- }
324
+ // split the last part into two parts
325
+ if (element.nodeType === 3) {
326
+ // text node
327
+ secondPart = document.createTextNode(element.data.substring(splitPosition, element.data.length));
328
+ element.data = element.data.substring(0, splitPosition);
329
+ } else {
330
+ // other nodes
331
+ jqelement = jQuery(element);
332
+ children = jqelement.contents();
333
+ newElement = jqelement.clone(false).empty();
334
+ secondPart = newElement.append(children.slice(splitPosition, children.length)).get(0);
335
+ }
330
336
 
331
- // update the range if necessary
332
- if (updateRange && range.endContainer === element) {
333
- range.endContainer = secondPart;
334
- range.endOffset -= splitPosition;
335
- range.clearCaches();
336
- }
337
+ // update the range if necessary
338
+ if (updateRange && range.endContainer === element) {
339
+ range.endContainer = secondPart;
340
+ range.endOffset -= splitPosition;
341
+ range.clearCaches();
342
+ }
337
343
 
338
- // add the second part
339
- if (insertElement) {
340
- insertElement.prepend(secondPart);
344
+ // add the second part
345
+ if (insertElement) {
346
+ insertElement.prepend(secondPart);
347
+ } else {
348
+ jQuery(element).after(secondPart);
349
+ }
341
350
  } else {
342
- jQuery(element).after(secondPart);
343
- }
344
- } else {
345
- // create the new element of the same type and prepend it to the previously created element
346
- newElement = jQuery(element).clone(false).empty();
351
+ // create the new element of the same type and prepend it to the previously created element
352
+ newElement = jQuery(element).clone(false).empty();
347
353
 
348
- if (!newDom) {
349
- newDom = newElement;
350
- } else {
351
- insertElement.prepend(newElement);
352
- }
353
- insertElement = newElement;
354
+ if (!newDom) {
355
+ newDom = newElement;
356
+ } else {
357
+ insertElement.prepend(newElement);
358
+ }
359
+ insertElement = newElement;
354
360
 
355
- // move all contents right of the split to the new element
356
- while ( true ) {
357
- next = path[i+1].nextSibling;
358
- if ( !next ) { break; }
359
- insertElement.append(next);
360
- }
361
+ // move all contents right of the split to the new element
362
+ while (true) {
363
+ next = path[i + 1].nextSibling;
364
+ if (!next) {
365
+ break;
366
+ }
367
+ insertElement.append(next);
368
+ }
361
369
 
362
- // update the range if necessary
363
- if (updateRange && range.endContainer === element) {
364
- range.endContainer = newElement.get(0);
365
- prev = path[i+1];
366
- offset = 0;
367
- while ( true ) {
368
- prev = prev.previousSibling;
369
- if ( !prev ) { break; }
370
- offset++;
370
+ // update the range if necessary
371
+ if (updateRange && range.endContainer === element) {
372
+ range.endContainer = newElement.get(0);
373
+ prev = path[i + 1];
374
+ offset = 0;
375
+ while (true) {
376
+ prev = prev.previousSibling;
377
+ if (!prev) {
378
+ break;
379
+ }
380
+ offset++;
381
+ }
382
+ range.endOffset -= offset;
383
+ range.clearCaches();
371
384
  }
372
- range.endOffset -= offset;
373
- range.clearCaches();
374
385
  }
375
386
  }
376
- }
377
-
378
- // append the new dom
379
- jQuery(path[0]).after(newDom);
380
-
381
- return jQuery([path[0], newDom ? newDom.get(0) : secondPart]);
382
- },
383
-
384
- /**
385
- * Check whether the HTML 5 specification allows direct nesting of the given DOM
386
- * objects.
387
- * @param {object} outerDOMObject
388
- * outer (nesting) DOM Object
389
- * @param {object} innerDOMObject
390
- * inner (nested) DOM Object
391
- * @return {boolean} true when the nesting is allowed, false if not
392
- * @method
393
- */
394
- allowsNesting: function (outerDOMObject, innerDOMObject) {
395
- if (!outerDOMObject || !outerDOMObject.nodeName || !innerDOMObject
396
- || !innerDOMObject.nodeName) {
397
- return false;
398
- }
399
387
 
400
- var outerNodeName = outerDOMObject.nodeName.toLowerCase(),
401
- innerNodeName = innerDOMObject.nodeName.toLowerCase();
402
-
403
- if (!this.children[outerNodeName]) {
404
- return false;
405
- }
388
+ // append the new dom
389
+ jQuery(path[0]).after(newDom);
390
+
391
+ return jQuery([path[0], newDom ? newDom.get(0) : secondPart]);
392
+ },
393
+
394
+ /**
395
+ * Check whether the HTML 5 specification allows direct nesting of the given DOM
396
+ * objects.
397
+ * @param {object} outerDOMObject
398
+ * outer (nesting) DOM Object
399
+ * @param {object} innerDOMObject
400
+ * inner (nested) DOM Object
401
+ * @return {boolean} true when the nesting is allowed, false if not
402
+ * @method
403
+ */
404
+ allowsNesting: function (outerDOMObject, innerDOMObject) {
405
+ if (!outerDOMObject || !outerDOMObject.nodeName || !innerDOMObject || !innerDOMObject.nodeName) {
406
+ return false;
407
+ }
406
408
 
407
- // check whether the nesting is configured by node names (like for table)
408
- if (this.children[outerNodeName] == innerNodeName) {
409
- return true;
410
- }
411
- if (jQuery.isArray(this.children[outerNodeName])
412
- && jQuery.inArray(innerNodeName, this.children[outerNodeName]) >= 0) {
413
- return true;
414
- }
409
+ var outerNodeName = outerDOMObject.nodeName.toLowerCase(),
410
+ innerNodeName = innerDOMObject.nodeName.toLowerCase();
415
411
 
416
- if (jQuery.isArray(this.tags[this.children[outerNodeName]])
417
- && jQuery.inArray(innerNodeName,
418
- this.tags[this.children[outerNodeName]]) >= 0) {
419
- return true;
420
- }
412
+ if (!this.children[outerNodeName]) {
413
+ return false;
414
+ }
421
415
 
422
- return false;
423
- },
416
+ // check whether the nesting is configured by node names (like for table)
417
+ if (this.children[outerNodeName] == innerNodeName) {
418
+ return true;
419
+ }
420
+ if (jQuery.isArray(this.children[outerNodeName]) && jQuery.inArray(innerNodeName, this.children[outerNodeName]) >= 0) {
421
+ return true;
422
+ }
424
423
 
425
- /**
426
- * Apply the given markup additively to the given range. The given rangeObject will be modified if necessary
427
- * @param {GENTICS.Utils.RangeObject} rangeObject range to which the markup shall be added
428
- * @param {jQuery} markup markup to be applied as jQuery object
429
- * @param {boolean} allownesting true when nesting of the added markup is allowed, false if not (default: false)
430
- * @method
431
- */
432
- addMarkup: function (rangeObject, markup, nesting) {
433
- // split partially contained text nodes at the start and end of the range
434
- if (rangeObject.startContainer.nodeType === 3 && rangeObject.startOffset > 0
435
- && rangeObject.startOffset < rangeObject.startContainer.data.length) {
436
- this.split(rangeObject, jQuery(rangeObject.startContainer).parent(),
437
- false);
438
- }
439
- if (rangeObject.endContainer.nodeType === 3 && rangeObject.endOffset > 0
440
- && rangeObject.endOffset < rangeObject.endContainer.data.length) {
441
- this.split(rangeObject, jQuery(rangeObject.endContainer).parent(),
442
- true);
443
- }
424
+ if (jQuery.isArray(this.tags[this.children[outerNodeName]])
425
+ && jQuery.inArray(innerNodeName, this.tags[this.children[outerNodeName]]) >= 0) {
426
+ return true;
427
+ }
444
428
 
445
- // get the range tree
446
- var rangeTree = rangeObject.getRangeTree();
447
- this.recursiveAddMarkup(rangeTree, markup, rangeObject, nesting);
429
+ return false;
430
+ },
431
+
432
+ /**
433
+ * Apply the given markup additively to the given range. The given rangeObject will be modified if necessary
434
+ * @param {GENTICS.Utils.RangeObject} rangeObject range to which the markup shall be added
435
+ * @param {jQuery} markup markup to be applied as jQuery object
436
+ * @param {boolean} allownesting true when nesting of the added markup is allowed, false if not (default: false)
437
+ * @method
438
+ */
439
+ addMarkup: function (rangeObject, markup, nesting) {
440
+ // split partially contained text nodes at the start and end of the range
441
+ if (rangeObject.startContainer.nodeType === 3
442
+ && rangeObject.startOffset > 0
443
+ && rangeObject.startOffset < rangeObject.startContainer.data.length) {
444
+ this.split(rangeObject, jQuery(rangeObject.startContainer).parent(), false);
445
+ }
446
+ if (rangeObject.endContainer.nodeType === 3 && rangeObject.endOffset > 0 && rangeObject.endOffset < rangeObject.endContainer.data.length) {
447
+ this.split(rangeObject, jQuery(rangeObject.endContainer).parent(), true);
448
+ }
448
449
 
449
- // cleanup DOM
450
- this.doCleanup({'merge' : true, 'removeempty' : true}, rangeObject);
451
- },
450
+ // get the range tree
451
+ var rangeTree = rangeObject.getRangeTree();
452
+ this.recursiveAddMarkup(rangeTree, markup, rangeObject, nesting);
452
453
 
453
- /**
454
- * Recursive helper method to add the given markup to the range
455
- * @param rangeTree rangetree at the current level
456
- * @param markup markup to be applied
457
- * @param rangeObject range object, which eventually is updated
458
- * @param nesting true when nesting of the added markup is allowed, false if not
459
- * @hide
460
- */
461
- recursiveAddMarkup: function (rangeTree, markup, rangeObject, nesting) {
462
- var i, innerRange, rangeLength;
463
-
464
- // iterate through all rangetree objects of that level
465
- for ( i = 0, rangeLength = rangeTree.length; i < rangeLength; ++i) {
466
- // check whether the rangetree object is fully contained and the markup may be wrapped around the object
467
- if (rangeTree[i].type == 'full' && this.allowsNesting(markup.get(0), rangeTree[i].domobj)) {
468
- // we wrap the object, when
469
- // 1. nesting of markup is allowed or the node is not of the markup to be added
470
- // 2. the node an element node or a non-empty text node
471
- if ((nesting || rangeTree[i].domobj.nodeName != markup.get(0).nodeName)
472
- && (rangeTree[i].domobj.nodeType !== 3 || jQuery
473
- .trim(rangeTree[i].domobj.data).length !== 0)) {
474
- // wrap the object
475
- jQuery(rangeTree[i].domobj).wrap(markup);
476
-
477
- // TODO eventually update the range (if it changed)
478
-
479
- // when nesting is not allowed, we remove the markup from the inner element
480
- if (!nesting && rangeTree[i].domobj.nodeType !== 3) {
481
- innerRange = new GENTICS.Utils.RangeObject();
482
- innerRange.startContainer = innerRange.endContainer = rangeTree[i].domobj.parentNode;
483
- innerRange.startOffset = 0;
484
- innerRange.endOffset = innerRange.endContainer.childNodes.length;
485
- this.removeMarkup(innerRange, markup, jQuery(rangeTree[i].domobj.parentNode));
454
+ // cleanup DOM
455
+ this.doCleanup({
456
+ 'merge': true,
457
+ 'removeempty': true
458
+ }, rangeObject);
459
+ },
460
+
461
+ /**
462
+ * Recursive helper method to add the given markup to the range
463
+ * @param rangeTree rangetree at the current level
464
+ * @param markup markup to be applied
465
+ * @param rangeObject range object, which eventually is updated
466
+ * @param nesting true when nesting of the added markup is allowed, false if not
467
+ * @hide
468
+ */
469
+ recursiveAddMarkup: function (rangeTree, markup, rangeObject, nesting) {
470
+ var i, innerRange, rangeLength;
471
+
472
+ // iterate through all rangetree objects of that level
473
+ for (i = 0, rangeLength = rangeTree.length; i < rangeLength; ++i) {
474
+ // check whether the rangetree object is fully contained and the markup may be wrapped around the object
475
+ if (rangeTree[i].type == 'full' && this.allowsNesting(markup.get(0), rangeTree[i].domobj)) {
476
+ // we wrap the object, when
477
+ // 1. nesting of markup is allowed or the node is not of the markup to be added
478
+ // 2. the node an element node or a non-empty text node
479
+ if ((nesting || rangeTree[i].domobj.nodeName != markup.get(0).nodeName) && (rangeTree[i].domobj.nodeType !== 3 || jQuery.trim(rangeTree[i].domobj.data).length !== 0)) {
480
+ // wrap the object
481
+ jQuery(rangeTree[i].domobj).wrap(markup);
482
+
483
+ // TODO eventually update the range (if it changed)
484
+
485
+ // when nesting is not allowed, we remove the markup from the inner element
486
+ if (!nesting && rangeTree[i].domobj.nodeType !== 3) {
487
+ innerRange = new GENTICS.Utils.RangeObject();
488
+ innerRange.startContainer = innerRange.endContainer = rangeTree[i].domobj.parentNode;
489
+ innerRange.startOffset = 0;
490
+ innerRange.endOffset = innerRange.endContainer.childNodes.length;
491
+ this.removeMarkup(innerRange, markup, jQuery(rangeTree[i].domobj.parentNode));
492
+ }
486
493
  }
487
- }
488
- } else {
489
- // TODO check whether the object may be replaced by the given markup
490
- if (false) {
491
- // TODO replace
492
494
  } else {
495
+ // TODO check whether the object may be replaced by the given markup
496
+ //if (false) {
497
+ // TODO replace
498
+ //} else {
493
499
  // recurse into the children (if any), but not if nesting is not
494
500
  // allowed and the object is of the markup to be added
495
- if ((nesting || (rangeTree[i].domobj && rangeTree[i].domobj.nodeName !== markup.get(0).nodeName))
496
- && rangeTree[i].children && rangeTree[i].children.length > 0) {
501
+ if ((nesting || (rangeTree[i].domobj && rangeTree[i].domobj.nodeName !== markup.get(0).nodeName)) && rangeTree[i].children && rangeTree[i].children.length > 0) {
497
502
  this.recursiveAddMarkup(rangeTree[i].children, markup);
498
503
  }
499
504
  }
500
505
  }
501
- }
502
- },
503
-
504
- /**
505
- * Find the highest occurrence of a node with given nodename within the parents
506
- * of the start. When limit objects are given, the search stops there.
507
- * The limiting object is of the found type, it won't be considered
508
- * @param {DOMObject} start start object
509
- * @param {String} nodeName name of the node to search for (case-insensitive)
510
- * @param {jQuery} limit Limiting node(s) as jQuery object (if none given, the search will stop when there are no more parents)
511
- * @return {DOMObject} the found DOM object or undefined
512
- * @method
513
- */
514
- findHighestElement: function (start, nodeName, limit) {
515
- nodeName = nodeName.toLowerCase();
516
-
517
- // this will be the highest found markup object (up to a limit object)
518
- var highestObject,
519
- // blah
520
- testObject = start,
521
- // helper function to stop when we reach a limit object
522
- isLimit = limit ? function () {
523
- return limit.filter(
524
- function() {
525
- return testObject == this;
526
- }
527
- ).length;
528
- } : function () {
529
- return false;
530
- };
506
+ },
507
+
508
+ /**
509
+ * Find the highest occurrence of a node with given nodename within the parents
510
+ * of the start. When limit objects are given, the search stops there.
511
+ * The limiting object is of the found type, it won't be considered
512
+ * @param {DOMObject} start start object
513
+ * @param {String} nodeName name of the node to search for (case-insensitive)
514
+ * @param {jQuery} limit Limiting node(s) as jQuery object (if none given, the search will stop when there are no more parents)
515
+ * @return {DOMObject} the found DOM object or undefined
516
+ * @method
517
+ */
518
+ findHighestElement: function (start, nodeName, limit) {
519
+ nodeName = nodeName.toLowerCase();
520
+
521
+ // this will be the highest found markup object (up to a limit object)
522
+ var highestObject,
523
+ // blah
524
+ testObject = start,
525
+ // helper function to stop when we reach a limit object
526
+ isLimit = limit ? function () {
527
+ return limit.filter(
528
+ function () {
529
+ return testObject == this;
530
+ }
531
+ ).length;
532
+ } : function () {
533
+ return false;
534
+ };
531
535
 
532
- // now get the highest parent that has the given markup (until we reached
533
- // one of the limit objects or there are no more parent nodes)
534
- while (!isLimit() && testObject) {
535
- if (testObject.nodeName.toLowerCase() === nodeName) {
536
- highestObject = testObject;
536
+ // now get the highest parent that has the given markup (until we reached
537
+ // one of the limit objects or there are no more parent nodes)
538
+ while (!isLimit() && testObject) {
539
+ if (testObject.nodeName.toLowerCase() === nodeName) {
540
+ highestObject = testObject;
541
+ }
542
+ testObject = testObject.parentNode;
537
543
  }
538
- testObject = testObject.parentNode;
539
- }
540
544
 
541
- return highestObject;
542
- },
543
-
544
- /**
545
- * Remove the given markup from the given range. The given rangeObject will be modified if necessary
546
- * TODO: add parameter deep/shallow
547
- * @param {GENTICS.Utils.RangeObject} rangeObject range from which the markup shall be removed
548
- * @param {jQuery} markup markup to be removed as jQuery object
549
- * @param {jQuery} limit Limiting node(s) as jQuery object
550
- * @method
551
- */
552
- removeMarkup: function (rangeObject, markup, limit) {
553
- var nodeName = markup.get(0).nodeName,
554
- startSplitLimit = this.findHighestElement(rangeObject.startContainer, nodeName, limit),
555
- endSplitLimit = this.findHighestElement(rangeObject.endContainer, nodeName, limit),
556
- didSplit = false,
557
- highestObject, root, rangeTree;
558
-
559
- if (startSplitLimit && rangeObject.startOffset > 0) {
560
- // when the start is in the start of its container, we don't split
561
- this.split(rangeObject, jQuery(startSplitLimit).parent(), false);
562
- didSplit = true;
563
- }
564
-
565
- if (endSplitLimit) {
566
- // when the end is in the end of its container, we don't split
567
- if (rangeObject.endContainer.nodeType === 3 && rangeObject.endOffset < rangeObject.endContainer.data.length) {
568
- this.split(rangeObject, jQuery(endSplitLimit).parent(), true);
545
+ return highestObject;
546
+ },
547
+
548
+ /**
549
+ * Remove the given markup from the given range. The given rangeObject will be modified if necessary
550
+ * TODO: add parameter deep/shallow
551
+ * @param {GENTICS.Utils.RangeObject} rangeObject range from which the markup shall be removed
552
+ * @param {jQuery} markup markup to be removed as jQuery object
553
+ * @param {jQuery} limit Limiting node(s) as jQuery object
554
+ * @method
555
+ */
556
+ removeMarkup: function (rangeObject, markup, limit) {
557
+ var nodeName = markup.get(0).nodeName,
558
+ startSplitLimit = this.findHighestElement(rangeObject.startContainer, nodeName, limit),
559
+ endSplitLimit = this.findHighestElement(rangeObject.endContainer, nodeName, limit),
560
+ didSplit = false,
561
+ highestObject,
562
+ root,
563
+ rangeTree;
564
+
565
+ if (startSplitLimit && rangeObject.startOffset > 0) {
566
+ // when the start is in the start of its container, we don't split
567
+ this.split(rangeObject, jQuery(startSplitLimit).parent(), false);
569
568
  didSplit = true;
570
569
  }
571
- if (rangeObject.endContainer.nodeType === 1 && rangeObject.endOffset < rangeObject.childNodes.length) {
572
- this.split(rangeObject, jQuery(endSplitLimit).parent(), true);
573
- didSplit = true;
574
- }
575
- }
576
-
577
- // when we split the DOM, we maybe need to correct the range
578
- if (didSplit) {
579
- rangeObject.correctRange();
580
- }
581
-
582
- // find the highest occurrence of the markup
583
- highestObject = this.findHighestElement(rangeObject.getCommonAncestorContainer(), nodeName, limit);
584
- root = highestObject ? highestObject.parentNode : rangeObject.getCommonAncestorContainer();
585
-
586
- if (root) {
587
- // construct the range tree
588
- rangeTree = rangeObject.getRangeTree(root);
589
-
590
- // remove the markup from the range tree
591
- this.recursiveRemoveMarkup(rangeTree, markup);
592
-
593
- // cleanup DOM
594
- this.doCleanup({'merge' : true, 'removeempty' : true}, rangeObject, root);
595
- }
596
- },
597
570
 
598
- /**
599
- * TODO: pass the range itself and eventually update it if necessary
600
- * Recursive helper method to remove the given markup from the range
601
- * @param rangeTree rangetree at the current level
602
- * @param markup markup to be applied
603
- * @hide
604
- */
605
- recursiveRemoveMarkup: function (rangeTree, markup) {
606
- var i, rangeLength, content;
607
- // iterate over the rangetree objects of this level
608
- for (i = 0, rangeLength = rangeTree.length; i < rangeLength; ++i) {
609
- // check whether the object is the markup to be removed and is fully into the range
610
- if (rangeTree[i].type == 'full' && rangeTree[i].domobj.nodeName == markup.get(0).nodeName) {
611
- // found the markup, so remove it
612
- content = jQuery(rangeTree[i].domobj).contents();
613
- if (content.length > 0) {
614
- // when the object has children, we unwrap them
615
- content.first().unwrap();
616
- } else {
617
- // obj has no children, so just remove it
618
- jQuery(rangeTree[i].domobj).remove();
571
+ if (endSplitLimit) {
572
+ // when the end is in the end of its container, we don't split
573
+ if (rangeObject.endContainer.nodeType === 3 && rangeObject.endOffset < rangeObject.endContainer.data.length) {
574
+ this.split(rangeObject, jQuery(endSplitLimit).parent(), true);
575
+ didSplit = true;
576
+ }
577
+ if (rangeObject.endContainer.nodeType === 1 && rangeObject.endOffset < rangeObject.endContainer.childNodes.length) {
578
+ this.split(rangeObject, jQuery(endSplitLimit).parent(), true);
579
+ didSplit = true;
619
580
  }
620
581
  }
621
582
 
622
- // if the object has children, we do the recursion now
623
- if (rangeTree[i].children) {
624
- this.recursiveRemoveMarkup(rangeTree[i].children, markup);
583
+ // when we split the DOM, we maybe need to correct the range
584
+ if (didSplit) {
585
+ rangeObject.correctRange();
625
586
  }
626
- }
627
- },
628
587
 
629
- /**
630
- * Cleanup the DOM, starting with the given startobject (or the common ancestor container of the given range)
631
- * ATTENTION: If range is a selection you need to update the selection after doCleanup
632
- * Cleanup modes (given as properties in 'cleanup'):
633
- * <pre>
634
- * - merge: merges multiple successive nodes of same type, if this is allowed, starting at the children of the given node (defaults to false)
635
- * - removeempty: removes empty element nodes (defaults to false)
636
- * </pre>
637
- * Example for calling this method:<br/>
638
- * <code>GENTICS.Utils.Dom.doCleanup({merge:true,removeempty:false}, range)</code>
639
- * @param {object} cleanup type of cleanup to be done
640
- * @param {GENTICS.Utils.RangeObject} rangeObject range which is eventually updated
641
- * @param {DOMObject} start start object, if not given, the commonancestorcontainer is used as startobject insted
642
- * @return {boolean} true when the range (startContainer/startOffset/endContainer/endOffset) was modified, false if not
643
- * @method
644
- */
645
- doCleanup: function(cleanup, rangeObject, start) {
646
- var that = this, prevNode, modifiedRange, startObject, startOffset, endOffset;
588
+ // find the highest occurrence of the markup
589
+ highestObject = this.findHighestElement(rangeObject.getCommonAncestorContainer(), nodeName, limit);
590
+ root = highestObject ? highestObject.parentNode : rangeObject.getCommonAncestorContainer();
647
591
 
648
- if (typeof cleanup === 'undefined') {
649
- cleanup = {};
650
- }
651
- if (typeof cleanup.merge === 'undefined') {
652
- cleanup.merge = false;
653
- }
654
- if (typeof cleanup.removeempty === 'undefined') {
655
- cleanup.removeempty = false;
656
- }
592
+ if (root) {
593
+ // construct the range tree
594
+ rangeTree = rangeObject.getRangeTree(root);
657
595
 
658
- if (typeof start === 'undefined' && rangeObject) {
659
- start = rangeObject.getCommonAncestorContainer();
660
- }
661
- // remember the previous node here (successive nodes of same type will be merged into this)
662
- prevNode = false;
663
- // check whether the range needed to be modified during merging
664
- modifiedRange = false;
665
- // get the start object
666
- startObject = jQuery(start);
667
- startOffset = rangeObject.startOffset;
668
- endOffset = rangeObject.endOffset;
669
-
670
- // iterate through all sub nodes
671
- startObject.contents().each(function(index) {
672
-
673
- // Try to read the nodeType property and return if we do not have permission
674
- // ie.: frame document to an external URL
675
- var nodeType;
676
- try {
677
- nodeType = this.nodeType;
678
- }
679
- catch (e) {
680
- return;
681
- }
682
-
683
- // decide further actions by node type
684
- switch(nodeType) {
685
- // found a non-text node
686
- case 1:
687
- if (prevNode && prevNode.nodeName == this.nodeName) {
688
- // found a successive node of same type
689
-
690
- // now we check whether the selection starts or ends in the mother node after the current node
691
- if (rangeObject.startContainer === startObject && startOffset > index) {
692
- // there will be one less object, so reduce the startOffset by one
693
- rangeObject.startOffset -= 1;
694
- // set the flag for range modification
695
- modifiedRange = true;
696
- }
697
- if (rangeObject.endContainer === startObject && endOffset > index) {
698
- // there will be one less object, so reduce the endOffset by one
699
- rangeObject.endOffset -= 1;
700
- // set the flag for range modification
701
- modifiedRange = true;
596
+ // remove the markup from the range tree
597
+ this.recursiveRemoveMarkup(rangeTree, markup);
598
+
599
+ // cleanup DOM
600
+ this.doCleanup({
601
+ 'merge': true,
602
+ 'removeempty': true
603
+ }, rangeObject, root);
604
+ }
605
+ },
606
+
607
+ /**
608
+ * TODO: pass the range itself and eventually update it if necessary
609
+ * Recursive helper method to remove the given markup from the range
610
+ * @param rangeTree rangetree at the current level
611
+ * @param markup markup to be applied
612
+ * @hide
613
+ */
614
+ recursiveRemoveMarkup: function (rangeTree, markup) {
615
+ var i, rangeLength, content;
616
+ // iterate over the rangetree objects of this level
617
+ for (i = 0, rangeLength = rangeTree.length; i < rangeLength; ++i) {
618
+ // check whether the object is the markup to be removed and is fully into the range
619
+ if (rangeTree[i].type == 'full' && rangeTree[i].domobj.nodeName == markup.get(0).nodeName) {
620
+ // found the markup, so remove it
621
+ content = jQuery(rangeTree[i].domobj).contents();
622
+ if (content.length > 0) {
623
+ // when the object has children, we unwrap them
624
+ content.first().unwrap();
625
+ } else {
626
+ // obj has no children, so just remove it
627
+ jQuery(rangeTree[i].domobj).remove();
702
628
  }
629
+ }
703
630
 
704
- // merge the contents of this node into the previous one
705
- jQuery(prevNode).append(jQuery(this).contents());
631
+ // if the object has children, we do the recursion now
632
+ if (rangeTree[i].children) {
633
+ this.recursiveRemoveMarkup(rangeTree[i].children, markup);
634
+ }
635
+ }
636
+ },
637
+
638
+ /**
639
+ * Cleanup the DOM, starting with the given startobject (or the common ancestor container of the given range)
640
+ * ATTENTION: If range is a selection you need to update the selection after doCleanup
641
+ * Cleanup modes (given as properties in 'cleanup'):
642
+ * <pre>
643
+ * - merge: merges multiple successive nodes of same type, if this is allowed, starting at the children of the given node (defaults to false)
644
+ * - removeempty: removes empty element nodes (defaults to false)
645
+ * - mergeable: Custom function to predicate whether or not a given
646
+ * element should be mergeable. Overrides `mergeableTags'.
647
+ * </pre>
648
+ * Example for calling this method:<br/>
649
+ * <code>GENTICS.Utils.Dom.doCleanup({merge:true,removeempty:false}, range)</code>
650
+ * @param {object} cleanup type of cleanup to be done
651
+ * @param {GENTICS.Utils.RangeObject} rangeObject range which is eventually updated
652
+ * @param {DOMObject} start start object, if not given, the commonancestorcontainer is used as startobject insted
653
+ * @return {boolean} true when the range (startContainer/startOffset/endContainer/endOffset) was modified, false if not
654
+ * @method
655
+ */
656
+ doCleanup: function (cleanup, rangeObject, start) {
657
+ var that = this,
658
+ prevNode,
659
+ modifiedRange,
660
+ startObject,
661
+ startOffset,
662
+ endOffset;
663
+
664
+ if (typeof cleanup === 'undefined') {
665
+ cleanup = {};
666
+ }
667
+ if (typeof cleanup.merge === 'undefined') {
668
+ cleanup.merge = false;
669
+ }
670
+ if (typeof cleanup.removeempty === 'undefined') {
671
+ cleanup.removeempty = false;
672
+ }
706
673
 
707
- // after merging, we eventually need to cleanup the prevNode again
708
- modifiedRange |= that.doCleanup(cleanup, rangeObject, prevNode);
674
+ if (typeof start === 'undefined' && rangeObject) {
675
+ start = rangeObject.getCommonAncestorContainer();
676
+ }
677
+ // remember the previous node here (successive nodes of same type will be merged into this)
678
+ prevNode = false;
679
+ // check whether the range needed to be modified during merging
680
+ modifiedRange = false;
681
+ // get the start object
682
+ startObject = jQuery(start);
683
+ startOffset = rangeObject.startOffset;
684
+ endOffset = rangeObject.endOffset;
685
+
686
+ // iterate through all sub nodes
687
+ startObject.contents().each(function () {
688
+ var index;
689
+
690
+ // Try to read the nodeType property and return if we do not have permission
691
+ // ie.: frame document to an external URL
692
+ var nodeType;
693
+ try {
694
+ nodeType = this.nodeType;
695
+ index = that.getIndexInParent(this);
696
+ } catch (e) {
697
+ return;
698
+ }
709
699
 
710
- // remove this node
711
- jQuery(this).remove();
712
-
713
- } else {
714
-
715
- // do the recursion step here
716
- modifiedRange |= that.doCleanup(cleanup, rangeObject, this);
717
-
718
- // eventually remove empty elements
719
- var removed = false;
720
- if (cleanup.removeempty) {
721
- if (GENTICS.Utils.Dom.isBlockLevelElement(this) && this.childNodes.length === 0) {
722
- // jQuery(this).remove();
723
- removed = true;
724
- }
725
- if (jQuery.inArray(this.nodeName.toLowerCase(), that.mergeableTags) >= 0
726
- && jQuery(this).text().length === 0 && this.childNodes.length === 0) {
727
- // jQuery(this).remove();
728
- removed = true;
729
- }
730
- }
700
+ // decide further actions by node type
701
+ switch (nodeType) {
702
+ // found a non-text node
703
+ case 1:
704
+ if (prevNode && prevNode.nodeName == this.nodeName) {
705
+ // found a successive node of same type
731
706
 
732
- // when the current node was not removed, we eventually store it as previous (mergeable) tag
733
- if (!removed) {
734
- if (jQuery.inArray(this.nodeName.toLowerCase(), that.mergeableTags) >= 0) {
735
- prevNode = this;
736
- } else {
737
- prevNode = false;
738
- }
739
- } else {
740
- // now we check whether the selection starts or ends in the mother node of this
741
- if (rangeObject.startContainer === this.parentNode && startOffset > index) {
707
+ // now we check whether the selection starts or ends in the mother node after the current node
708
+ if (rangeObject.startContainer === startObject && startOffset > index) {
742
709
  // there will be one less object, so reduce the startOffset by one
743
- rangeObject.startOffset = rangeObject.startOffset - 1;
710
+ rangeObject.startOffset -= 1;
744
711
  // set the flag for range modification
745
712
  modifiedRange = true;
746
713
  }
747
- if (rangeObject.endContainer === this.parentNode && endOffset > index) {
714
+ if (rangeObject.endContainer === startObject && endOffset > index) {
748
715
  // there will be one less object, so reduce the endOffset by one
749
- rangeObject.endOffset = rangeObject.endOffset - 1;
716
+ rangeObject.endOffset -= 1;
750
717
  // set the flag for range modification
751
718
  modifiedRange = true;
752
719
  }
753
-
754
- // remove this text node
720
+
721
+ // merge the contents of this node into the previous one
722
+ jQuery(prevNode).append(jQuery(this).contents());
723
+
724
+ // after merging, we eventually need to cleanup the prevNode again
725
+ modifiedRange |= that.doCleanup(cleanup, rangeObject, prevNode);
726
+
727
+ // remove this node
755
728
  jQuery(this).remove();
756
729
 
757
- }
758
- }
730
+ } else {
759
731
 
760
- break;
761
- // found a text node
762
- case 3:
763
- // found a text node
764
- if (prevNode && prevNode.nodeType === 3 && cleanup.merge) {
765
- // the current text node will be merged into the last one, so
766
- // check whether the selection starts or ends in the current
767
- // text node
768
- if (rangeObject.startContainer === this) {
769
- // selection starts in the current text node
732
+ // do the recursion step here
733
+ modifiedRange |= that.doCleanup(cleanup, rangeObject, this);
734
+
735
+ // eventually remove empty elements
736
+ var removed = false;
737
+ if (cleanup.removeempty) {
738
+ if (GENTICS.Utils.Dom.isBlockLevelElement(this) && this.childNodes.length === 0) {
739
+ // jQuery(this).remove();
740
+ removed = true;
741
+ }
742
+ if (jQuery.inArray(this.nodeName.toLowerCase(), that.mergeableTags) >= 0 && jQuery(this).text().length === 0 && this.childNodes.length === 0) {
743
+ // jQuery(this).remove();
744
+ removed = true;
745
+ }
746
+ }
770
747
 
771
- // update the start container to the last node
772
- rangeObject.startContainer = prevNode;
748
+ // when the current node was not removed, we eventually store it as previous (mergeable) tag
749
+ if (!removed) {
750
+ if (cleanup.mergeable
751
+ ? cleanup.mergeable(this)
752
+ : jQuery.inArray(this.nodeName.toLowerCase(), that.mergeableTags) >= 0) {
753
+ prevNode = this;
754
+ } else {
755
+ prevNode = false;
756
+ }
757
+ } else {
758
+ // now we check whether the selection starts or ends in the mother node of this
759
+ if (rangeObject.startContainer === this.parentNode && startOffset > index) {
760
+ // there will be one less object, so reduce the startOffset by one
761
+ rangeObject.startOffset = rangeObject.startOffset - 1;
762
+ // set the flag for range modification
763
+ modifiedRange = true;
764
+ }
765
+ if (rangeObject.endContainer === this.parentNode && endOffset > index) {
766
+ // there will be one less object, so reduce the endOffset by one
767
+ rangeObject.endOffset = rangeObject.endOffset - 1;
768
+ // set the flag for range modification
769
+ modifiedRange = true;
770
+ }
771
+
772
+ // remove this text node
773
+ jQuery(this).remove();
773
774
 
774
- // update the start offset
775
- rangeObject.startOffset += prevNode.nodeValue.length;
775
+ }
776
+ }
776
777
 
777
- // set the flag for range modification
778
- modifiedRange = true;
779
-
780
- } else if (rangeObject.startContainer === prevNode.parentNode
781
- && rangeObject.startOffset === that.getIndexInParent(prevNode) + 1) {
782
- // selection starts right between the previous and current text nodes (which will be merged)
778
+ break;
779
+ // found a text node
780
+ case 3:
781
+ // found a text node
782
+ if (prevNode && prevNode.nodeType === 3 && cleanup.merge) {
783
+ // the current text node will be merged into the last one, so
784
+ // check whether the selection starts or ends in the current
785
+ // text node
786
+ if (rangeObject.startContainer === this) {
787
+ // selection starts in the current text node
788
+
789
+ // update the start container to the last node
790
+ rangeObject.startContainer = prevNode;
791
+
792
+ // update the start offset
793
+ rangeObject.startOffset += prevNode.nodeValue.length;
783
794
 
784
- // update the start container to the previous node
785
- rangeObject.startContainer = prevNode;
795
+ // set the flag for range modification
796
+ modifiedRange = true;
786
797
 
787
- // set the start offset
788
- rangeObject.startOffset = prevNode.nodeValue.length;
798
+ } else if (rangeObject.startContainer === prevNode.parentNode && rangeObject.startOffset === that.getIndexInParent(prevNode) + 1) {
799
+ // selection starts right between the previous and current text nodes (which will be merged)
789
800
 
790
- // set the flag for range modification
791
- modifiedRange = true;
792
- }
801
+ // update the start container to the previous node
802
+ rangeObject.startContainer = prevNode;
793
803
 
794
- if (rangeObject.endContainer === this) {
795
- // selection ends in the current text node
804
+ // set the start offset
805
+ rangeObject.startOffset = prevNode.nodeValue.length;
796
806
 
797
- // update the end container to be the last node
798
- rangeObject.endContainer = prevNode;
807
+ // set the flag for range modification
808
+ modifiedRange = true;
809
+ }
799
810
 
800
- // update the end offset
801
- rangeObject.endOffset += prevNode.nodeValue.length;
811
+ if (rangeObject.endContainer === this) {
812
+ // selection ends in the current text node
802
813
 
803
- // set the flag for range modification
804
- modifiedRange = true;
814
+ // update the end container to be the last node
815
+ rangeObject.endContainer = prevNode;
805
816
 
806
- } else if (rangeObject.endContainer === prevNode.parentNode
807
- && rangeObject.endOffset === that.getIndexInParent(prevNode) + 1) {
808
- // selection ends right between the previous and current text nodes (which will be merged)
817
+ // update the end offset
818
+ rangeObject.endOffset += prevNode.nodeValue.length;
809
819
 
810
- // update the end container to the previous node
811
- rangeObject.endContainer = prevNode;
820
+ // set the flag for range modification
821
+ modifiedRange = true;
812
822
 
813
- // set the end offset
814
- rangeObject.endOffset = prevNode.nodeValue.length;
823
+ } else if (rangeObject.endContainer === prevNode.parentNode && rangeObject.endOffset === that.getIndexInParent(prevNode) + 1) {
824
+ // selection ends right between the previous and current text nodes (which will be merged)
815
825
 
816
- // set the flag for range modification
817
- modifiedRange = true;
818
- }
826
+ // update the end container to the previous node
827
+ rangeObject.endContainer = prevNode;
819
828
 
820
- // now append the contents of the current text node into the previous
821
- prevNode.data += this.data;
822
-
823
- // remove empty text nodes
824
- } else if ( this.nodeValue === '' && cleanup.removeempty ) {
825
- // do nothing here.
826
-
827
- // remember it as the last text node if not empty
828
- } else if ( !(this.nodeValue === '' && cleanup.removeempty) ) {
829
- prevNode = this;
830
- // we are finish here don't delete this node
831
- break;
832
- }
829
+ // set the end offset
830
+ rangeObject.endOffset = prevNode.nodeValue.length;
833
831
 
834
- // now we check whether the selection starts or ends in the mother node of this
835
- if (rangeObject.startContainer === this.parentNode && rangeObject.startOffset > index) {
836
- // there will be one less object, so reduce the startOffset by one
837
- rangeObject.startOffset = rangeObject.startOffset - 1;
838
- // set the flag for range modification
839
- modifiedRange = true;
840
- }
841
- if (rangeObject.endContainer === this.parentNode && rangeObject.endOffset > index) {
842
- // there will be one less object, so reduce the endOffset by one
843
- rangeObject.endOffset = rangeObject.endOffset - 1;
844
- // set the flag for range modification
845
- modifiedRange = true;
846
- }
832
+ // set the flag for range modification
833
+ modifiedRange = true;
834
+ }
847
835
 
848
- // remove this text node
849
- jQuery(this).remove();
850
-
851
- break;
852
- }
853
- });
854
-
855
- // eventually remove the startnode itself
856
- // if (cleanup.removeempty
857
- // && GENTICS.Utils.Dom.isBlockLevelElement(start)
858
- // && (!start.childNodes || start.childNodes.length === 0)) {
859
- // if (rangeObject.startContainer == start) {
860
- // rangeObject.startContainer = start.parentNode;
861
- // rangeObject.startOffset = GENTICS.Utils.Dom.getIndexInParent(start);
862
- // }
863
- // if (rangeObject.endContainer == start) {
864
- // rangeObject.endContainer = start.parentNode;
865
- // rangeObject.endOffset = GENTICS.Utils.Dom.getIndexInParent(start);
866
- // }
867
- // startObject.remove();
868
- // modifiedRange = true;
869
- // }
870
-
871
- if (modifiedRange) {
872
- rangeObject.clearCaches();
873
- }
836
+ // now append the contents of the current text node into the previous
837
+ prevNode.data += this.data;
874
838
 
875
- return modifiedRange;
876
- },
839
+ // remove empty text nodes
840
+ } else if (!(this.nodeValue === '' && cleanup.removeempty)) {
841
+ prevNode = this;
842
+ // we are finish here don't delete this node
843
+ break;
844
+ }
877
845
 
878
- /**
879
- * Get the index of the given node within its parent node
880
- * @param {DOMObject} node node to check
881
- * @return {Integer} index in the parent node or false if no node given or node has no parent
882
- * @method
883
- */
884
- getIndexInParent: function (node) {
885
- if (!node) {
886
- return false;
887
- }
846
+ // now we check whether the selection starts or ends in the mother node of this
847
+ if (rangeObject.startContainer === this.parentNode && rangeObject.startOffset > index) {
848
+ // there will be one less object, so reduce the startOffset by one
849
+ rangeObject.startOffset = rangeObject.startOffset - 1;
850
+ // set the flag for range modification
851
+ modifiedRange = true;
852
+ }
853
+ if (rangeObject.endContainer === this.parentNode && rangeObject.endOffset > index) {
854
+ // there will be one less object, so reduce the endOffset by one
855
+ rangeObject.endOffset = rangeObject.endOffset - 1;
856
+ // set the flag for range modification
857
+ modifiedRange = true;
858
+ }
888
859
 
889
- var
890
- index = 0,
891
- check = node.previousSibling;
860
+ // remove this text node
861
+ jQuery(this).remove();
892
862
 
893
- while(check) {
894
- index++;
895
- check = check.previousSibling;
896
- }
863
+ // if this is the last text node in a sequence, we remove any zero-width spaces in the text node,
864
+ // unless it is the only character
865
+ if (prevNode && (!prevNode.nextSibling || prevNode.nextSibling.nodeType !== 3)) {
866
+ var pos;
867
+ for (pos = prevNode.data.length - 1; pos >= 0 && prevNode.data.length > 1; pos--) {
868
+ if (prevNode.data.charAt(pos) === '\u200b') {
869
+ prevNode.deleteData(pos, 1);
870
+ if (rangeObject.startContainer === prevNode && rangeObject.startOffset > pos) {
871
+ rangeObject.startOffset--;
872
+ modifiedRange = true;
873
+ }
874
+ if (rangeObject.endContainer === prevNode && rangeObject.endOffset > pos) {
875
+ rangeObject.endOffset--;
876
+ modifiedRange = true;
877
+ }
878
+ }
879
+ }
880
+ }
897
881
 
898
- return index;
899
- },
882
+ break;
883
+ }
884
+ });
900
885
 
901
- /**
902
- * Check whether the given node is a blocklevel element
903
- * @param {DOMObject} node node to check
904
- * @return {boolean} true if yes, false if not (or null)
905
- * @method
906
- */
907
- isBlockLevelElement: function (node) {
908
- if (!node) {
909
- return false;
910
- }
911
- if (node.nodeType === 1 && jQuery.inArray(node.nodeName.toLowerCase(), this.blockLevelElements) >= 0) {
912
- return true;
913
- } else {
914
- return false;
915
- }
916
- },
886
+ // eventually remove the startnode itself
887
+ // if (cleanup.removeempty
888
+ // && GENTICS.Utils.Dom.isBlockLevelElement(start)
889
+ // && (!start.childNodes || start.childNodes.length === 0)) {
890
+ // if (rangeObject.startContainer == start) {
891
+ // rangeObject.startContainer = start.parentNode;
892
+ // rangeObject.startOffset = GENTICS.Utils.Dom.getIndexInParent(start);
893
+ // }
894
+ // if (rangeObject.endContainer == start) {
895
+ // rangeObject.endContainer = start.parentNode;
896
+ // rangeObject.endOffset = GENTICS.Utils.Dom.getIndexInParent(start);
897
+ // }
898
+ // startObject.remove();
899
+ // modifiedRange = true;
900
+ // }
901
+
902
+ if (modifiedRange) {
903
+ rangeObject.clearCaches();
904
+ }
917
905
 
918
- /**
919
- * Check whether the given node is a linebreak element
920
- * @param {DOMObject} node node to check
921
- * @return {boolean} true for linebreak elements, false for everything else
922
- * @method
923
- */
924
- isLineBreakElement: function (node) {
925
- if (!node) {
926
- return false;
927
- }
928
- return node.nodeType === 1 && node.nodeName.toLowerCase() == 'br';
929
- },
906
+ return modifiedRange;
907
+ },
908
+
909
+ /**
910
+ * Get the index of the given node within its parent node
911
+ * @param {DOMObject} node node to check
912
+ * @return {Integer} index in the parent node or false if no node given or node has no parent
913
+ * @method
914
+ */
915
+ getIndexInParent: function (node) {
916
+ if (!node) {
917
+ return false;
918
+ }
930
919
 
931
- /**
932
- * Check whether the given node is a list element
933
- * @param {DOMObject} node node to check
934
- * @return {boolean} true for list elements (li, ul, ol), false for everything else
935
- * @method
936
- */
937
- isListElement: function (node) {
938
- if (!node) {
939
- return false;
940
- }
941
- return node.nodeType === 1 && jQuery.inArray(node.nodeName.toLowerCase(), this.listElements) >= 0;
942
- },
920
+ var index = 0,
921
+ check = node.previousSibling;
943
922
 
944
- /**
945
- * This method checks, whether the passed dom object is a dom object, that would
946
- * be split in cases of pressing enter. This currently is true for paragraphs
947
- * and headings
948
- * @param {DOMObject} el
949
- * dom object to check
950
- * @return {boolean} true for split objects, false for other
951
- * @method
952
- */
953
- isSplitObject: function(el) {
954
- if (el.nodeType === 1){
955
- switch(el.nodeName.toLowerCase()) {
956
- case 'p':
957
- case 'h1':
958
- case 'h2':
959
- case 'h3':
960
- case 'h4':
961
- case 'h5':
962
- case 'h6':
963
- case 'li':
964
- return true;
923
+ while (check) {
924
+ index++;
925
+ check = check.previousSibling;
965
926
  }
966
- }
967
- return false;
968
- },
969
927
 
970
- /**
971
- * Starting with the given position (between nodes), search in the given direction to an adjacent notempty text node
972
- * @param {DOMObject} parent parent node containing the position
973
- * @param {Integer} index index of the position within the parent node
974
- * @param {boolean} searchleft true when search direction is 'left' (default), false for 'right'
975
- * @param {object} stopat define at which types of element we shall stop, may contain the following properties
976
- * <pre>
977
- * - blocklevel (default: true)
978
- * - list (default: true)
979
- * - linebreak (default: true)
980
- * </pre>
981
- * @return {DOMObject} the found text node or false if none found
982
- * @method
983
- */
984
- searchAdjacentTextNode: function (parent, index, searchleft, stopat) {
985
- if (!parent || parent.nodeType !== 1 || index < 0 || index > parent.childNodes.length) {
928
+ return index;
929
+ },
930
+
931
+ /**
932
+ * Check whether the given node is a blocklevel element
933
+ * @param {DOMObject} node node to check
934
+ * @return {boolean} true if yes, false if not (or null)
935
+ * @method
936
+ */
937
+ isBlockLevelElement: function (node) {
938
+ if (!node) {
939
+ return false;
940
+ }
941
+ if (node.nodeType === 1 && jQuery.inArray(node.nodeName.toLowerCase(), this.blockLevelElements) >= 0) {
942
+ return true;
943
+ }
986
944
  return false;
987
- }
945
+ },
946
+
947
+ /**
948
+ * Check whether the given node is a linebreak element
949
+ * @param {DOMObject} node node to check
950
+ * @return {boolean} true for linebreak elements, false for everything else
951
+ * @method
952
+ */
953
+ isLineBreakElement: function (node) {
954
+ if (!node) {
955
+ return false;
956
+ }
957
+ return node.nodeType === 1 && node.nodeName.toLowerCase() == 'br';
958
+ },
959
+
960
+ /**
961
+ * Check whether the given node is a list element
962
+ * @param {DOMObject} node node to check
963
+ * @return {boolean} true for list elements (li, ul, ol), false for everything else
964
+ * @method
965
+ */
966
+ isListElement: function (node) {
967
+ if (!node) {
968
+ return false;
969
+ }
970
+ return node.nodeType === 1 && jQuery.inArray(node.nodeName.toLowerCase(), this.listElements) >= 0;
971
+ },
972
+
973
+ /**
974
+ * This method checks, whether the passed dom object is a dom object, that would
975
+ * be split in cases of pressing enter. This currently is true for paragraphs
976
+ * and headings
977
+ * @param {DOMObject} el
978
+ * dom object to check
979
+ * @return {boolean} true for split objects, false for other
980
+ * @method
981
+ */
982
+ isSplitObject: function (el) {
983
+ return el.nodeType === 1 && blockElementNames.hasOwnProperty(el.nodeName);
984
+ },
985
+
986
+ /**
987
+ * Starting with the given position (between nodes), search in the given direction to an adjacent notempty text node
988
+ * @param {DOMObject} parent parent node containing the position
989
+ * @param {Integer} index index of the position within the parent node
990
+ * @param {boolean} searchleft true when search direction is 'left' (default), false for 'right'
991
+ * @param {object} stopat define at which types of element we shall stop, may contain the following properties
992
+ * <pre>
993
+ * - blocklevel (default: true)
994
+ * - list (default: true)
995
+ * - linebreak (default: true)
996
+ * </pre>
997
+ * @return {DOMObject} the found text node or false if none found
998
+ * @method
999
+ */
1000
+ searchAdjacentTextNode: function (parent, index, searchleft, stopat) {
1001
+ if (!parent || parent.nodeType !== 1 || index < 0 || index > parent.childNodes.length) {
1002
+ return false;
1003
+ }
988
1004
 
989
- if (typeof stopat === 'undefined') {
990
- stopat = {'blocklevel' : true, 'list' : true, 'linebreak' : true};
991
- }
1005
+ if (typeof stopat === 'undefined') {
1006
+ stopat = {
1007
+ 'blocklevel': true,
1008
+ 'list': true,
1009
+ 'linebreak': true
1010
+ };
1011
+ }
992
1012
 
993
- if (typeof stopat.blocklevel === 'undefined') {
994
- stopat.blocklevel = true;
995
- }
996
- if (typeof stopat.list === 'undefined') {
997
- stopat.list = true;
998
- }
999
- if (typeof stopat.linebreak === 'undefined') {
1000
- stopat.linebreak = true;
1001
- }
1013
+ if (typeof stopat.blocklevel === 'undefined') {
1014
+ stopat.blocklevel = true;
1015
+ }
1016
+ if (typeof stopat.list === 'undefined') {
1017
+ stopat.list = true;
1018
+ }
1019
+ if (typeof stopat.linebreak === 'undefined') {
1020
+ stopat.linebreak = true;
1021
+ }
1002
1022
 
1003
- if (typeof searchleft === 'undefined') {
1004
- searchleft = true;
1005
- }
1023
+ if (typeof searchleft === 'undefined') {
1024
+ searchleft = true;
1025
+ }
1006
1026
 
1007
- var
1008
- nextNode,
1009
- currentParent = parent;
1027
+ var nextNode,
1028
+ currentParent = parent;
1010
1029
 
1011
- // start at the node left/right of the given position
1012
- if (searchleft && index > 0) {
1013
- nextNode = parent.childNodes[index - 1];
1014
- }
1015
- if (!searchleft && index < parent.childNodes.length) {
1016
- nextNode = parent.childNodes[index];
1017
- }
1018
-
1019
- //currentParent is not a number therefore it is sufficient to directly test for it with while(currentParent)
1020
- //otherwise there would be an error if the object is null
1021
- while (currentParent) {
1022
- //while (typeof currentParent !== 'undefined') {
1023
- if (!nextNode) {
1024
- // no next node found, check whether the parent is a blocklevel element
1025
- if (stopat.blocklevel && this.isBlockLevelElement(currentParent)) {
1026
- // do not leave block level elements
1027
- return false;
1028
- } else if (stopat.list && this.isListElement(currentParent)) {
1029
- // do not leave list elements
1030
- return false;
1031
- } else {
1030
+ // start at the node left/right of the given position
1031
+ if (searchleft && index > 0) {
1032
+ nextNode = parent.childNodes[index - 1];
1033
+ }
1034
+ if (!searchleft && index < parent.childNodes.length) {
1035
+ nextNode = parent.childNodes[index];
1036
+ }
1037
+
1038
+ //currentParent is not a number therefore it is sufficient to directly test for it with while(currentParent)
1039
+ //otherwise there would be an error if the object is null
1040
+ while (currentParent) {
1041
+ //while (typeof currentParent !== 'undefined') {
1042
+ if (!nextNode) {
1043
+ // no next node found, check whether the parent is a blocklevel element
1044
+ if (stopat.blocklevel && this.isBlockLevelElement(currentParent)) {
1045
+ // do not leave block level elements
1046
+ return false;
1047
+ }
1048
+ if (stopat.list && this.isListElement(currentParent)) {
1049
+ // do not leave list elements
1050
+ return false;
1051
+ }
1032
1052
  // continue with the parent
1033
1053
  nextNode = searchleft ? currentParent.previousSibling : currentParent.nextSibling;
1034
1054
  currentParent = currentParent.parentNode;
1055
+ continue;
1056
+ } else if (nextNode.nodeType === 3 && jQuery.trim(nextNode.data).length > 0) {
1057
+ // we are lucky and found a notempty text node
1058
+ return nextNode;
1035
1059
  }
1036
- } else if (nextNode.nodeType === 3 && jQuery.trim(nextNode.data).length > 0) {
1037
- // we are lucky and found a notempty text node
1038
- return nextNode;
1039
- } else if (stopat.blocklevel && this.isBlockLevelElement(nextNode)) {
1040
- // we found a blocklevel element, stop here
1041
- return false;
1042
- } else if (stopat.linebreak && this.isLineBreakElement(nextNode)) {
1043
- // we found a linebreak, stop here
1044
- return false;
1045
- } else if (stopat.list && this.isListElement(nextNode)) {
1046
- // we found a linebreak, stop here
1047
- return false;
1048
- } else if (nextNode.nodeType === 3) {
1049
- // we found an empty text node, so step to the next
1050
- nextNode = searchleft ? nextNode.previousSibling : nextNode.nextSibling;
1051
- } else {
1052
- // we found a non-blocklevel element, step into
1053
- currentParent = nextNode;
1054
- nextNode = searchleft ? nextNode.lastChild : nextNode.firstChild;
1055
- }
1056
- }
1057
- },
1058
-
1059
- /**
1060
- * Insert the given DOM Object into the start/end of the given range. The method
1061
- * will find the appropriate place in the DOM tree for inserting the given
1062
- * object, and will eventually split elements in between. The given range will
1063
- * be updated if necessary. The updated range will NOT embrace the inserted
1064
- * object, which means that the object is actually inserted before or after the
1065
- * given range (depending on the atEnd parameter)
1066
- *
1067
- * @param {jQuery}
1068
- * object object to insert into the DOM
1069
- * @param {GENTICS.Utils.RangeObject}
1070
- * range range where to insert the object (at start or end)
1071
- * @param {jQuery}
1072
- * limit limiting object(s) of the DOM modification
1073
- * @param {boolean}
1074
- * atEnd true when the object shall be inserted at the end, false for
1075
- * insertion at the start (default)
1076
- * @param {boolean}
1077
- * true when the insertion shall be done, even if inserting the element
1078
- * would not be allowed, false to deny inserting unallowed elements (default)
1079
- * @return true if the object could be inserted, false if not.
1080
- * @method
1081
- */
1082
- insertIntoDOM: function (object, range, limit, atEnd, force) {
1083
- // first find the appropriate place to insert the given object
1084
- var parentElements = range.getContainerParents(limit, atEnd),
1085
- that = this,
1086
- newParent,
1087
- container, offset, splitParts, contents;
1088
-
1089
- if (!limit) {
1090
- limit = jQuery(document.body);
1091
- }
1092
-
1093
- // if no parent elements exist (up to the limit), the new parent will be the
1094
- // limiter itself
1095
- if (parentElements.length === 0) {
1096
- newParent = limit.get(0);
1097
- } else {
1098
- jQuery.each(parentElements, function (index, parent) {
1099
- if (that.allowsNesting(parent, object.get(0))) {
1100
- newParent = parent;
1060
+ if (stopat.blocklevel && this.isBlockLevelElement(nextNode)) {
1061
+ // we found a blocklevel element, stop here
1101
1062
  return false;
1102
1063
  }
1103
- });
1104
- }
1064
+ if (stopat.linebreak && this.isLineBreakElement(nextNode)) {
1065
+ // we found a linebreak, stop here
1066
+ return false;
1067
+ }
1068
+ if (stopat.list && this.isListElement(nextNode)) {
1069
+ // we found a linebreak, stop here
1070
+ return false;
1071
+ }
1072
+ if (nextNode.nodeType === 3) {
1073
+ // we found an empty text node, so step to the next
1074
+ nextNode = searchleft ? nextNode.previousSibling : nextNode.nextSibling;
1075
+ } else {
1076
+ // we found a non-blocklevel element, step into
1077
+ currentParent = nextNode;
1078
+ nextNode = searchleft ? nextNode.lastChild : nextNode.firstChild;
1079
+ }
1080
+ }
1081
+ },
1082
+
1083
+ /**
1084
+ * Insert the given DOM Object into the start/end of the given range. The method
1085
+ * will find the appropriate place in the DOM tree for inserting the given
1086
+ * object, and will eventually split elements in between. The given range will
1087
+ * be updated if necessary. The updated range will NOT embrace the inserted
1088
+ * object, which means that the object is actually inserted before or after the
1089
+ * given range (depending on the atEnd parameter)
1090
+ *
1091
+ * @param {jQuery}
1092
+ * object object to insert into the DOM
1093
+ * @param {GENTICS.Utils.RangeObject}
1094
+ * range range where to insert the object (at start or end)
1095
+ * @param {jQuery}
1096
+ * limit limiting object(s) of the DOM modification
1097
+ * @param {boolean}
1098
+ * atEnd true when the object shall be inserted at the end, false for
1099
+ * insertion at the start (default)
1100
+ * @param {boolean}
1101
+ * true when the insertion shall be done, even if inserting the element
1102
+ * would not be allowed, false to deny inserting unallowed elements (default)
1103
+ * @return true if the object could be inserted, false if not.
1104
+ * @method
1105
+ */
1106
+ insertIntoDOM: function (object, range, limit, atEnd, force) {
1107
+ // first find the appropriate place to insert the given object
1108
+ var parentElements = range.getContainerParents(limit, atEnd),
1109
+ that = this,
1110
+ newParent,
1111
+ container,
1112
+ offset,
1113
+ splitParts,
1114
+ contents;
1115
+
1116
+ if (!limit) {
1117
+ limit = jQuery(document.body);
1118
+ }
1105
1119
 
1106
- if (typeof newParent === 'undefined' && limit.length > 0) {
1107
- // found no possible new parent, so split up to the limit object
1108
- newParent = limit.get(0);
1109
- }
1120
+ // if no parent elements exist (up to the limit), the new parent will be the
1121
+ // limiter itself
1122
+ if (parentElements.length === 0) {
1123
+ newParent = limit.get(0);
1124
+ } else {
1125
+ jQuery.each(parentElements, function (index, parent) {
1126
+ if (that.allowsNesting(parent, object.get(0))) {
1127
+ newParent = parent;
1128
+ return false;
1129
+ }
1130
+ });
1131
+ }
1110
1132
 
1111
- // check whether it is allowed to insert the element at all
1112
- if (!this.allowsNesting(newParent, object.get(0)) && !force) {
1113
- return false;
1114
- }
1133
+ if (typeof newParent === 'undefined' && limit.length > 0) {
1134
+ // found no possible new parent, so split up to the limit object
1135
+ newParent = limit.get(0);
1136
+ }
1115
1137
 
1116
- if (typeof newParent !== 'undefined') {
1117
- // we found a possible new parent, so we split the DOM up to the new parent
1118
- splitParts = this.split(range, jQuery(newParent), atEnd);
1119
- if (splitParts === true) {
1120
- // DOM was not split (there was no need to split it), insert the new object anyway
1121
- container = range.startContainer;
1122
- offset = range.startOffset;
1123
- if (atEnd) {
1124
- container = range.endContainer;
1125
- offset = range.endOffset;
1126
- }
1127
- if (offset === 0) {
1128
- // insert right before the first element in the container
1129
- contents = jQuery(container).contents();
1130
- if (contents.length > 0) {
1131
- contents.eq(0).before(object);
1132
- } else {
1133
- jQuery(container).append(object);
1138
+ // check whether it is allowed to insert the element at all
1139
+ if (!this.allowsNesting(newParent, object.get(0)) && !force) {
1140
+ return false;
1141
+ }
1142
+
1143
+ if (typeof newParent !== 'undefined') {
1144
+ // we found a possible new parent, so we split the DOM up to the new parent
1145
+ splitParts = this.split(range, jQuery(newParent), atEnd);
1146
+ if (splitParts === true) {
1147
+ // DOM was not split (there was no need to split it), insert the new object anyway
1148
+ container = range.startContainer;
1149
+ offset = range.startOffset;
1150
+ if (atEnd) {
1151
+ container = range.endContainer;
1152
+ offset = range.endOffset;
1153
+ }
1154
+ if (offset === 0) {
1155
+ // insert right before the first element in the container
1156
+ contents = jQuery(container).contents();
1157
+ if (contents.length > 0) {
1158
+ contents.eq(0).before(object);
1159
+ } else {
1160
+ jQuery(container).append(object);
1161
+ }
1162
+ return true;
1134
1163
  }
1135
- return true;
1136
- } else {
1137
1164
  // insert right after the element at offset-1
1138
- jQuery(container).contents().eq(offset-1).after(object);
1165
+ jQuery(container).contents().eq(offset - 1).after(object);
1166
+ return true;
1167
+ }
1168
+ if (splitParts) {
1169
+ // if the DOM could be split, we insert the new object in between the split parts
1170
+ splitParts.eq(0).after(object);
1139
1171
  return true;
1140
1172
  }
1141
- } else if (splitParts) {
1142
- // if the DOM could be split, we insert the new object in between the split parts
1143
- splitParts.eq(0).after(object);
1144
- return true;
1145
- } else {
1146
1173
  // could not split, so could not insert
1147
1174
  return false;
1148
1175
  }
1149
- } else {
1150
1176
  // found no possible new parent, so we shall not insert
1151
1177
  return false;
1152
- }
1153
- },
1154
-
1155
- /**
1156
- * Remove the given DOM object from the DOM and modify the given range to reflect the user expected range after the object was removed
1157
- * TODO: finish this
1158
- * @param {DOMObject} object DOM object to remove
1159
- * @param {GENTICS.Utils.RangeObject} range range which eventually be modified
1160
- * @param {boolean} preserveContent true if the contents of the removed DOM object shall be preserved, false if not (default: false)
1161
- * @return true if the DOM object could be removed, false if not
1162
- * @hide
1163
- */
1164
- removeFromDOM: function (object, range, preserveContent) {
1165
- if (preserveContent) {
1166
- // check whether the range will need modification
1167
- var indexInParent = this.getIndexInParent(object),
1168
- numChildren = jQuery(object).contents().length,
1169
- parent = object.parentNode;
1170
-
1171
- if (range.startContainer == parent && range.startOffset > indexInParent) {
1172
- range.startOffset += numChildren - 1;
1173
- } else if (range.startContainer == object) {
1174
- range.startContainer = parent;
1175
- range.startOffset = indexInParent + range.startOffset;
1176
- }
1177
-
1178
- if (range.endContainer == parent && range.endOffset > indexInParent) {
1179
- range.endOffset += numChildren - 1;
1180
- } else if (range.endContainer == object) {
1181
- range.endContainer = parent;
1182
- range.endOffset = indexInParent + range.endOffset;
1183
- }
1184
-
1185
- // we simply unwrap the children of the object
1186
- jQuery(object).contents().unwrap();
1187
-
1188
- // optionally do cleanup
1189
- this.doCleanup({'merge' : true}, range, parent);
1190
- } else {
1191
- // TODO
1192
- }
1193
- },
1194
-
1195
- /**
1196
- * Remove the content defined by the given range from the DOM. Update the given
1197
- * range object to be a collapsed selection at the place of the previous
1198
- * selection.
1199
- * @param rangeObject range object
1200
- * @return true if the range could be removed, false if not
1201
- */
1202
- removeRange: function (rangeObject) {
1203
- if (!rangeObject) {
1204
- // no range given
1205
- return false;
1206
- }
1207
- if (rangeObject.isCollapsed()) {
1208
- // the range is collapsed, nothing to delete
1209
- return false;
1210
- }
1211
-
1212
- // split partially contained text nodes at the start and end of the range
1213
- if (rangeObject.startContainer.nodeType == 3 && rangeObject.startOffset > 0
1214
- && rangeObject.startOffset < rangeObject.startContainer.data.length) {
1215
- this.split(rangeObject, jQuery(rangeObject.startContainer).parent(),
1216
- false);
1217
- }
1218
- if (rangeObject.endContainer.nodeType == 3 && rangeObject.endOffset > 0
1219
- && rangeObject.endOffset < rangeObject.endContainer.data.length) {
1220
- this.split(rangeObject, jQuery(rangeObject.endContainer).parent(),
1221
- true);
1222
- }
1178
+ },
1179
+
1180
+ /**
1181
+ * Remove the given DOM object from the DOM and modify the given range to reflect the user expected range after the object was removed
1182
+ * TODO: finish this
1183
+ * @param {DOMObject} object DOM object to remove
1184
+ * @param {GENTICS.Utils.RangeObject} range range which eventually be modified
1185
+ * @param {boolean} preserveContent true if the contents of the removed DOM object shall be preserved, false if not (default: false)
1186
+ * @return true if the DOM object could be removed, false if not
1187
+ * @hide
1188
+ */
1189
+ removeFromDOM: function (object, range, preserveContent) {
1190
+ if (preserveContent) {
1191
+ // check whether the range will need modification
1192
+ var indexInParent = this.getIndexInParent(object),
1193
+ numChildren = jQuery(object).contents().length,
1194
+ parent = object.parentNode;
1195
+
1196
+ if (range.startContainer == parent && range.startOffset > indexInParent) {
1197
+ range.startOffset += numChildren - 1;
1198
+ } else if (range.startContainer == object) {
1199
+ range.startContainer = parent;
1200
+ range.startOffset = indexInParent + range.startOffset;
1201
+ }
1223
1202
 
1224
- // construct the range tree
1225
- var rangeTree = rangeObject.getRangeTree();
1226
-
1227
- // collapse the range
1228
- rangeObject.endContainer = rangeObject.startContainer;
1229
- rangeObject.endOffset = rangeObject.startOffset;
1230
-
1231
- // remove the markup from the range tree
1232
- this.recursiveRemoveRange(rangeTree, rangeObject);
1233
-
1234
- // do some cleanup
1235
- this.doCleanup({'merge' : true}, rangeObject);
1236
- // this.doCleanup({'merge' : true, 'removeempty' : true}, rangeObject);
1237
-
1238
- // clear the caches of the range object
1239
- rangeObject.clearCaches();
1240
- },
1241
-
1242
- recursiveRemoveRange: function (rangeTree, rangeObject) {
1243
- // iterate over the rangetree objects of this level
1244
- for (var i = 0; i < rangeTree.length; ++i) {
1245
- // check for nodes fully in the range
1246
- if (rangeTree[i].type == 'full') {
1247
- // if the domobj is the startcontainer, or the startcontainer is inside the domobj, we need to update the rangeObject
1248
- if (jQuery(rangeObject.startContainer).parents().andSelf().filter(rangeTree[i].domobj).length > 0) {
1249
- rangeObject.startContainer = rangeObject.endContainer = rangeTree[i].domobj.parentNode;
1250
- rangeObject.startOffset = rangeObject.endOffset = this.getIndexInParent(rangeTree[i].domobj);
1203
+ if (range.endContainer == parent && range.endOffset > indexInParent) {
1204
+ range.endOffset += numChildren - 1;
1205
+ } else if (range.endContainer == object) {
1206
+ range.endContainer = parent;
1207
+ range.endOffset = indexInParent + range.endOffset;
1251
1208
  }
1252
1209
 
1253
- // remove the object from the DOM
1254
- jQuery(rangeTree[i].domobj).remove();
1255
- } else if (rangeTree[i].type == 'partial' && rangeTree[i].children) {
1256
- // node partially selected and has children, so do recursion
1257
- this.recursiveRemoveRange(rangeTree[i].children, rangeObject);
1258
- }
1259
- }
1260
- },
1210
+ // we simply unwrap the children of the object
1211
+ jQuery(object).contents().unwrap();
1261
1212
 
1262
- /**
1263
- * Extend the given range to have start and end at the nearest word boundaries to the left (start) and right (end)
1264
- * @param {GENTICS.Utils.RangeObject} range range to be extended
1265
- * @param {boolean} fromBoundaries true if extending will also be done, if one or both ends of the range already are at a word boundary, false if not, default: false
1266
- * @method
1267
- */
1268
- extendToWord: function (range, fromBoundaries) {
1269
- // search the word boundaries to the left and right
1270
- var leftBoundary = this.searchWordBoundary(range.startContainer, range.startOffset, true),
1271
- rightBoundary = this.searchWordBoundary(range.endContainer, range.endOffset, false);
1213
+ // optionally do cleanup
1214
+ this.doCleanup({
1215
+ 'merge': true
1216
+ }, range, parent);
1217
+ }
1218
+ },
1219
+
1220
+ /**
1221
+ * Remove the content defined by the given range from the DOM. Update the given
1222
+ * range object to be a collapsed selection at the place of the previous
1223
+ * selection.
1224
+ * @param rangeObject range object
1225
+ * @return true if the range could be removed, false if not
1226
+ */
1227
+ removeRange: function (rangeObject) {
1228
+ if (!rangeObject) {
1229
+ // no range given
1230
+ return false;
1231
+ }
1232
+ if (rangeObject.isCollapsed()) {
1233
+ // the range is collapsed, nothing to delete
1234
+ return false;
1235
+ }
1272
1236
 
1273
- // check whether we must not extend the range from word boundaries
1274
- if (!fromBoundaries) {
1275
- // we only extend the range if both ends would be different
1276
- if (range.startContainer == leftBoundary.container && range.startOffset == leftBoundary.offset) {
1277
- return;
1237
+ // split partially contained text nodes at the start and end of the range
1238
+ if (rangeObject.startContainer.nodeType == 3
1239
+ && rangeObject.startOffset > 0
1240
+ && rangeObject.startOffset < rangeObject.startContainer.data.length) {
1241
+ this.split(rangeObject, jQuery(rangeObject.startContainer).parent(), false);
1278
1242
  }
1279
- if (range.endContainer == rightBoundary.container && range.endOffset == rightBoundary.offset) {
1280
- return;
1243
+ if (rangeObject.endContainer.nodeType == 3 && rangeObject.endOffset > 0 && rangeObject.endOffset < rangeObject.endContainer.data.length) {
1244
+ this.split(rangeObject, jQuery(rangeObject.endContainer).parent(), true);
1281
1245
  }
1282
- }
1283
1246
 
1284
- // set the new boundaries
1285
- range.startContainer = leftBoundary.container;
1286
- range.startOffset = leftBoundary.offset;
1287
- range.endContainer = rightBoundary.container;
1288
- range.endOffset = rightBoundary.offset;
1247
+ // construct the range tree
1248
+ var rangeTree = rangeObject.getRangeTree();
1289
1249
 
1290
- // correct the range
1291
- range.correctRange();
1250
+ // collapse the range
1251
+ rangeObject.endContainer = rangeObject.startContainer;
1252
+ rangeObject.endOffset = rangeObject.startOffset;
1292
1253
 
1293
- // clear caches
1294
- range.clearCaches();
1295
- },
1254
+ // remove the markup from the range tree
1255
+ this.recursiveRemoveRange(rangeTree, rangeObject);
1296
1256
 
1297
- /**
1298
- * Helper method to check whether the given DOM object is a word boundary.
1299
- * @param {DOMObject} object DOM object in question
1300
- * @return {boolean} true when the DOM object is a word boundary, false if not
1301
- * @hide
1302
- */
1303
- isWordBoundaryElement: function (object) {
1304
- if (!object || !object.nodeName) {
1305
- return false;
1306
- }
1307
- return jQuery.inArray(object.nodeName.toLowerCase(), this.nonWordBoundaryTags) == -1;
1308
- },
1257
+ // do some cleanup
1258
+ this.doCleanup({
1259
+ 'merge': true
1260
+ }, rangeObject);
1261
+ // this.doCleanup({'merge' : true, 'removeempty' : true}, rangeObject);
1309
1262
 
1310
- /**
1311
- * Search for the next word boundary, starting at the given position
1312
- * @param {DOMObject} container container of the start position
1313
- * @param {Integer} offset offset of the start position
1314
- * @param {boolean} searchleft true for searching to the left, false for searching to the right (default: true)
1315
- * @return {object} object with properties 'container' and 'offset' marking the found word boundary
1316
- * @method
1317
- */
1318
- searchWordBoundary: function (container, offset, searchleft) {
1319
- if (typeof searchleft === 'undefined') {
1320
- searchleft = true;
1321
- }
1322
- var boundaryFound = false, wordBoundaryPos, tempWordBoundaryPos, textNode;
1323
- while (!boundaryFound) {
1324
- // check the node type
1325
- if (container.nodeType === 3) {
1326
- // we are currently in a text node
1327
-
1328
- // find the nearest word boundary character
1329
- if (!searchleft) {
1330
- // search right
1331
- wordBoundaryPos = container.data.substring(offset).search(this.nonWordRegex);
1332
- if (wordBoundaryPos != -1) {
1333
- // found a word boundary
1334
- offset = offset + wordBoundaryPos;
1335
- boundaryFound = true;
1336
- } else {
1337
- // found no word boundary, so we set the position after the container
1338
- offset = this.getIndexInParent(container) + 1;
1339
- container = container.parentNode;
1340
- }
1341
- } else {
1342
- // search left
1343
- wordBoundaryPos = container.data.substring(0, offset).search(this.nonWordRegex);
1344
- tempWordBoundaryPos = wordBoundaryPos;
1345
- while (tempWordBoundaryPos != -1) {
1346
- wordBoundaryPos = tempWordBoundaryPos;
1347
- tempWordBoundaryPos = container.data.substring(
1348
- wordBoundaryPos + 1, offset).search(this.nonWordRegex);
1349
- if (tempWordBoundaryPos != -1) {
1350
- tempWordBoundaryPos = tempWordBoundaryPos + wordBoundaryPos + 1;
1351
- }
1263
+ // clear the caches of the range object
1264
+ rangeObject.clearCaches();
1265
+ },
1266
+
1267
+ recursiveRemoveRange: function (rangeTree, rangeObject) {
1268
+ // iterate over the rangetree objects of this level
1269
+ var i;
1270
+ for (i = 0; i < rangeTree.length; ++i) {
1271
+ // check for nodes fully in the range
1272
+ if (rangeTree[i].type == 'full') {
1273
+ // if the domobj is the startcontainer, or the startcontainer is inside the domobj, we need to update the rangeObject
1274
+ if (jQuery(rangeObject.startContainer).parents().andSelf().filter(rangeTree[i].domobj).length > 0) {
1275
+ rangeObject.startContainer = rangeObject.endContainer = rangeTree[i].domobj.parentNode;
1276
+ rangeObject.startOffset = rangeObject.endOffset = this.getIndexInParent(rangeTree[i].domobj);
1352
1277
  }
1353
1278
 
1354
- if (wordBoundaryPos != -1) {
1355
- // found a word boundary
1356
- offset = wordBoundaryPos + 1;
1357
- boundaryFound = true;
1358
- } else {
1359
- // found no word boundary, so we set the position before the container
1360
- offset = this.getIndexInParent(container);
1361
- container = container.parentNode;
1362
- }
1279
+ // remove the object from the DOM
1280
+ jQuery(rangeTree[i].domobj).remove();
1281
+ } else if (rangeTree[i].type == 'partial' && rangeTree[i].children) {
1282
+ // node partially selected and has children, so do recursion
1283
+ this.recursiveRemoveRange(rangeTree[i].children, rangeObject);
1363
1284
  }
1364
- } else if (container.nodeType === 1) {
1365
- // we are currently in an element node (between nodes)
1366
-
1367
- if (!searchleft) {
1368
- // check whether there is an element to the right
1369
- if (offset < container.childNodes.length) {
1370
- // there is an element to the right, check whether it is a word boundary element
1371
- if (this.isWordBoundaryElement(container.childNodes[offset])) {
1372
- // we are done
1285
+ }
1286
+ },
1287
+
1288
+ /**
1289
+ * Extend the given range to have start and end at the nearest word boundaries to the left (start) and right (end)
1290
+ * @param {GENTICS.Utils.RangeObject} range range to be extended
1291
+ * @param {boolean} fromBoundaries true if extending will also be done, if one or both ends of the range already are at a word boundary, false if not, default: false
1292
+ * @method
1293
+ */
1294
+ extendToWord: function (range, fromBoundaries) {
1295
+ // search the word boundaries to the left and right
1296
+ var leftBoundary = this.searchWordBoundary(range.startContainer, range.startOffset, true),
1297
+ rightBoundary = this.searchWordBoundary(range.endContainer, range.endOffset, false);
1298
+
1299
+ // check whether we must not extend the range from word boundaries
1300
+ if (!fromBoundaries) {
1301
+ // we only extend the range if both ends would be different
1302
+ if (range.startContainer == leftBoundary.container && range.startOffset == leftBoundary.offset) {
1303
+ return;
1304
+ }
1305
+ if (range.endContainer == rightBoundary.container && range.endOffset == rightBoundary.offset) {
1306
+ return;
1307
+ }
1308
+ }
1309
+
1310
+ // set the new boundaries
1311
+ range.startContainer = leftBoundary.container;
1312
+ range.startOffset = leftBoundary.offset;
1313
+ range.endContainer = rightBoundary.container;
1314
+ range.endOffset = rightBoundary.offset;
1315
+
1316
+ // correct the range
1317
+ range.correctRange();
1318
+
1319
+ // clear caches
1320
+ range.clearCaches();
1321
+ },
1322
+
1323
+ /**
1324
+ * Helper method to check whether the given DOM object is a word boundary.
1325
+ * @param {DOMObject} object DOM object in question
1326
+ * @return {boolean} true when the DOM object is a word boundary, false if not
1327
+ * @hide
1328
+ */
1329
+ isWordBoundaryElement: function (object) {
1330
+ if (!object || !object.nodeName) {
1331
+ return false;
1332
+ }
1333
+ return jQuery.inArray(object.nodeName.toLowerCase(), this.nonWordBoundaryTags) == -1;
1334
+ },
1335
+
1336
+ /**
1337
+ * Search for the next word boundary, starting at the given position
1338
+ * @param {DOMObject} container container of the start position
1339
+ * @param {Integer} offset offset of the start position
1340
+ * @param {boolean} searchleft true for searching to the left, false for searching to the right (default: true)
1341
+ * @return {object} object with properties 'container' and 'offset' marking the found word boundary
1342
+ * @method
1343
+ */
1344
+ searchWordBoundary: function (container, offset, searchleft) {
1345
+ if (typeof searchleft === 'undefined') {
1346
+ searchleft = true;
1347
+ }
1348
+ var boundaryFound = false,
1349
+ wordBoundaryPos,
1350
+ tempWordBoundaryPos,
1351
+ textNode;
1352
+ while (!boundaryFound) {
1353
+ // check the node type
1354
+ if (container.nodeType === 3) {
1355
+ // we are currently in a text node
1356
+
1357
+ // find the nearest word boundary character
1358
+ if (!searchleft) {
1359
+ // search right
1360
+ wordBoundaryPos = container.data.substring(offset).search(this.nonWordRegex);
1361
+ if (wordBoundaryPos != -1) {
1362
+ // found a word boundary
1363
+ offset = offset + wordBoundaryPos;
1373
1364
  boundaryFound = true;
1374
1365
  } else {
1375
- // element to the right is no word boundary, so enter it
1376
- container = container.childNodes[offset];
1377
- offset = 0;
1366
+ // found no word boundary, so we set the position after the container
1367
+ offset = this.getIndexInParent(container) + 1;
1368
+ container = container.parentNode;
1378
1369
  }
1379
1370
  } else {
1380
- // no element to the right, check whether the element itself is a boundary element
1381
- if (this.isWordBoundaryElement(container)) {
1382
- // we are done
1371
+ // search left
1372
+ wordBoundaryPos = container.data.substring(0, offset).search(this.nonWordRegex);
1373
+ tempWordBoundaryPos = wordBoundaryPos;
1374
+ while (tempWordBoundaryPos != -1) {
1375
+ wordBoundaryPos = tempWordBoundaryPos;
1376
+ tempWordBoundaryPos = container.data.substring(wordBoundaryPos + 1, offset).search(this.nonWordRegex);
1377
+ if (tempWordBoundaryPos != -1) {
1378
+ tempWordBoundaryPos = tempWordBoundaryPos + wordBoundaryPos + 1;
1379
+ }
1380
+ }
1381
+
1382
+ if (wordBoundaryPos != -1) {
1383
+ // found a word boundary
1384
+ offset = wordBoundaryPos + 1;
1383
1385
  boundaryFound = true;
1384
1386
  } else {
1385
- // element itself is no boundary element, so go to parent
1386
- offset = this.getIndexInParent(container) + 1;
1387
+ // found no word boundary, so we set the position before the container
1388
+ offset = this.getIndexInParent(container);
1387
1389
  container = container.parentNode;
1388
1390
  }
1389
1391
  }
1390
- } else {
1391
- // check whether there is an element to the left
1392
- if (offset > 0) {
1393
- // there is an element to the left, check whether it is a word boundary element
1394
- if (this.isWordBoundaryElement(container.childNodes[offset - 1])) {
1395
- // we are done
1396
- boundaryFound = true;
1392
+ } else if (container.nodeType === 1) {
1393
+ // we are currently in an element node (between nodes)
1394
+
1395
+ if (!searchleft) {
1396
+ // check whether there is an element to the right
1397
+ if (offset < container.childNodes.length) {
1398
+ // there is an element to the right, check whether it is a word boundary element
1399
+ if (this.isWordBoundaryElement(container.childNodes[offset])) {
1400
+ // we are done
1401
+ boundaryFound = true;
1402
+ } else {
1403
+ // element to the right is no word boundary, so enter it
1404
+ container = container.childNodes[offset];
1405
+ offset = 0;
1406
+ }
1397
1407
  } else {
1398
- // element to the left is no word boundary, so enter it
1399
- container = container.childNodes[offset - 1];
1400
- offset = container.nodeType === 3 ? container.data.length : container.childNodes.length;
1408
+ // no element to the right, check whether the element itself is a boundary element
1409
+ if (this.isWordBoundaryElement(container)) {
1410
+ // we are done
1411
+ boundaryFound = true;
1412
+ } else {
1413
+ // element itself is no boundary element, so go to parent
1414
+ offset = this.getIndexInParent(container) + 1;
1415
+ container = container.parentNode;
1416
+ }
1401
1417
  }
1402
1418
  } else {
1403
- // no element to the left, check whether the element itself is a boundary element
1404
- if (this.isWordBoundaryElement(container)) {
1405
- // we are done
1406
- boundaryFound = true;
1419
+ // check whether there is an element to the left
1420
+ if (offset > 0) {
1421
+ // there is an element to the left, check whether it is a word boundary element
1422
+ if (this.isWordBoundaryElement(container.childNodes[offset - 1])) {
1423
+ // we are done
1424
+ boundaryFound = true;
1425
+ } else {
1426
+ // element to the left is no word boundary, so enter it
1427
+ container = container.childNodes[offset - 1];
1428
+ offset = container.nodeType === 3 ? container.data.length : container.childNodes.length;
1429
+ }
1407
1430
  } else {
1408
- // element itself is no boundary element, so go to parent
1409
- offset = this.getIndexInParent(container);
1410
- container = container.parentNode;
1431
+ // no element to the left, check whether the element itself is a boundary element
1432
+ if (this.isWordBoundaryElement(container)) {
1433
+ // we are done
1434
+ boundaryFound = true;
1435
+ } else {
1436
+ // element itself is no boundary element, so go to parent
1437
+ offset = this.getIndexInParent(container);
1438
+ container = container.parentNode;
1439
+ }
1411
1440
  }
1412
1441
  }
1413
1442
  }
1414
1443
  }
1415
- }
1416
1444
 
1417
- if (container.nodeType !== 3) {
1418
- textNode = this.searchAdjacentTextNode(container, offset, !searchleft);
1419
- if (textNode) {
1420
- container = textNode;
1421
- offset = searchleft ? 0 : container.data.length;
1445
+ if (container.nodeType !== 3) {
1446
+ textNode = this.searchAdjacentTextNode(container, offset, !searchleft);
1447
+ if (textNode) {
1448
+ container = textNode;
1449
+ offset = searchleft ? 0 : container.data.length;
1450
+ }
1422
1451
  }
1423
- }
1424
-
1425
- return {'container' : container, 'offset' : offset};
1426
- },
1427
1452
 
1428
- /**
1429
- * Check whether the given dom object is empty
1430
- * @param {DOMObject} domObject object to check
1431
- * @return {boolean} true when the object is empty, false if not
1432
- * @method
1433
- */
1434
- isEmpty: function (domObject) {
1435
- // a non dom object is considered empty
1436
- if (!domObject) {
1437
- return true;
1438
- }
1439
-
1440
- // some tags are considered to be non-empty
1441
- if (jQuery.inArray(domObject.nodeName.toLowerCase(), this.nonEmptyTags) != -1) {
1442
- return false;
1443
- }
1444
-
1445
- // text nodes are not empty, if they contain non-whitespace characters
1446
- if (domObject.nodeType === 3) {
1447
- return domObject.data.search(/\S/) == -1;
1448
- }
1453
+ return {
1454
+ 'container': container,
1455
+ 'offset': offset
1456
+ };
1457
+ },
1458
+
1459
+ /**
1460
+ * Check whether the given dom object is empty
1461
+ * @param {DOMObject} domObject object to check
1462
+ * @return {boolean} true when the object is empty, false if not
1463
+ * @method
1464
+ */
1465
+ isEmpty: function (domObject) {
1466
+ // a non dom object is considered empty
1467
+ if (!domObject) {
1468
+ return true;
1469
+ }
1449
1470
 
1450
- // all other nodes are not empty if they contain at least one child which is not empty
1451
- for (var i = 0, childNodes = domObject.childNodes.length; i < childNodes; ++i) {
1452
- if (!this.isEmpty(domObject.childNodes[i])) {
1471
+ // some tags are considered to be non-empty
1472
+ if (jQuery.inArray(domObject.nodeName.toLowerCase(), this.nonEmptyTags) != -1) {
1453
1473
  return false;
1454
1474
  }
1455
- }
1456
1475
 
1457
- // found no contents, so the element is empty
1458
- return true;
1459
- },
1460
-
1461
- /**
1462
- * Set the cursor (collapsed selection) right after the given DOM object
1463
- * @param domObject DOM object
1464
- * @method
1465
- */
1466
- setCursorAfter: function (domObject) {
1467
- var
1468
- newRange = new GENTICS.Utils.RangeObject(),
1469
- index = this.getIndexInParent(domObject),
1470
- targetNode,
1471
- offset;
1472
-
1473
- // selection cannot be set between to TEXT_NODEs
1474
- // if domOject is a Text node set selection at last position in that node
1475
- if ( domObject.nodeType == 3) {
1476
- targetNode = domObject;
1477
- offset = targetNode.nodeValue.length;
1478
-
1479
- // if domOject is a Text node set selection at last position in that node
1480
- } else if ( domObject.nextSibling && domObject.nextSibling.nodeType == 3) {
1481
- targetNode = domObject.nextSibling;
1482
- offset = 0;
1483
- } else {
1484
- targetNode = domObject.parentNode;
1485
- offset = this.getIndexInParent(domObject) + 1;
1486
- }
1487
-
1488
- newRange.startContainer = newRange.endContainer = targetNode;
1489
- newRange.startOffset = newRange.endOffset = offset;
1490
-
1491
- // select the range
1492
- newRange.select();
1493
-
1494
- return newRange;
1495
- },
1496
-
1497
- /**
1498
- * Select a DOM node
1499
- * will create a new range which spans the provided dom node and selects it afterwards
1500
- * @param domObject DOM object
1501
- * @method
1502
- */
1503
- selectDomNode: function (domObject) {
1504
- var newRange = new GENTICS.Utils.RangeObject();
1505
- newRange.startContainer = newRange.endContainer = domObject.parentNode;
1506
- newRange.startOffset = this.getIndexInParent(domObject);
1507
- newRange.endOffset = newRange.startOffset + 1;
1508
- newRange.select();
1509
- },
1510
-
1511
- /**
1512
- * Set the cursor (collapsed selection) at the start into the given DOM object
1513
- * @param domObject DOM object
1514
- * @method
1515
- */
1516
- setCursorInto: function (domObject) {
1517
- // set a new range into the given dom object
1518
- var newRange = new GENTICS.Utils.RangeObject();
1519
- newRange.startContainer = newRange.endContainer = domObject;
1520
- newRange.startOffset = newRange.endOffset = 0;
1521
-
1522
- // select the range
1523
- newRange.select();
1524
- },
1525
-
1526
-
1527
- /**
1528
- * "An editing host is a node that is either an Element with a contenteditable
1529
- * attribute set to the true state, or the Element child of a Document whose
1530
- * designMode is enabled."
1531
- * @param domObject DOM object
1532
- * @method
1533
- */
1534
- isEditingHost: function (node) {
1535
- return node
1536
- && node.nodeType == 1 //ELEMENT_NODE
1537
- && (node.contentEditable == "true"
1538
- || (node.parentNode
1539
- && node.parentNode.nodeType == 9 //DOCUEMENT_NODE
1540
- && node.parentNode.designMode == "on"));
1541
- },
1542
-
1543
- /**
1544
- * "Something is editable if it is a node which is not an editing host, does
1545
- * not have a contenteditable attribute set to the false state, and whose
1546
- * parent is an editing host or editable."
1547
- * @param domObject DOM object
1548
- * @method
1549
- */
1550
- isEditable: function (node) {
1551
- // This is slightly a lie, because we're excluding non-HTML elements with
1552
- // contentEditable attributes.
1553
- return node
1554
- && !this.isEditingHost(node)
1555
- && (node.nodeType != 1 || node.contentEditable != "false") // ELEMENT_NODE
1556
- && (this.isEditingHost(node.parentNode) || this.isEditable(node.parentNode));
1557
- },
1558
-
1559
- /**
1560
- * "The editing host of node is null if node is neither editable nor an editing
1561
- * host; node itself, if node is an editing host; or the nearest ancestor of
1562
- * node that is an editing host, if node is editable."
1563
- * @param domObject DOM object
1564
- * @method
1565
- */
1566
- getEditingHostOf: function(node) {
1567
- if (this.isEditingHost(node)) {
1568
- return node;
1569
- } else if (this.isEditable(node)) {
1570
- var ancestor = node.parentNode;
1571
- while (!this.isEditingHost(ancestor)) {
1572
- ancestor = ancestor.parentNode;
1573
- }
1574
- return ancestor;
1575
- } else {
1576
- return null;
1577
- }
1578
- },
1476
+ // text nodes are not empty, if they contain non-whitespace characters
1477
+ if (domObject.nodeType === 3) {
1478
+ return domObject.data.search(/\S/) == -1;
1479
+ }
1579
1480
 
1580
- /**
1581
- *
1582
- * "Two nodes are in the same editing host if the editing host of the first is
1583
- * non-null and the same as the editing host of the second."
1584
- * @param node1 DOM object
1585
- * @param node2 DOM object
1586
- * @method
1587
- */
1588
- inSameEditingHost: function (node1, node2) {
1589
- return this.getEditingHostOf(node1)
1590
- && this.getEditingHostOf(node1) == this.getEditingHostOf(node2);
1591
- },
1592
-
1593
- // "A block node is either an Element whose "display" property does not have
1594
- // resolved value "inline" or "inline-block" or "inline-table" or "none", or a
1595
- // Document, or a DocumentFragment."
1596
- isBlockNode: function (node) {
1597
- return node
1598
- && ((node.nodeType == $_.Node.ELEMENT_NODE && $_( ["inline", "inline-block", "inline-table", "none"] ).indexOf($_.getComputedStyle(node).display) == -1)
1599
- || node.nodeType == $_.Node.DOCUMENT_NODE
1600
- || node.nodeType == $_.Node.DOCUMENT_FRAGMENT_NODE);
1601
- },
1481
+ // all other nodes are not empty if they contain at least one child which is not empty
1482
+ var i, childNodes;
1483
+ for (i = 0, childNodes = domObject.childNodes.length; i < childNodes; ++i) {
1484
+ if (!this.isEmpty(domObject.childNodes[i])) {
1485
+ return false;
1486
+ }
1487
+ }
1602
1488
 
1603
- /**
1604
- * Get the first visible child of the given node.
1605
- * @param node node
1606
- * @param includeNode when set to true, the node itself may be returned, otherwise only children are allowed
1607
- * @return first visible child or null if none found
1608
- */
1609
- getFirstVisibleChild: function (node, includeNode) {
1610
- // no node -> no child
1611
- if (!node) {
1612
- return null;
1613
- }
1489
+ // found no contents, so the element is empty
1490
+ return true;
1491
+ },
1492
+
1493
+ /**
1494
+ * Set the cursor (collapsed selection) right after the given DOM object
1495
+ * @param domObject DOM object
1496
+ * @method
1497
+ */
1498
+ setCursorAfter: function (domObject) {
1499
+ var newRange = new GENTICS.Utils.RangeObject(),
1500
+ index = this.getIndexInParent(domObject),
1501
+ targetNode,
1502
+ offset;
1503
+
1504
+ // selection cannot be set between to TEXT_NODEs
1505
+ // if domOject is a Text node set selection at last position in that node
1506
+ if (domObject.nodeType == 3) {
1507
+ targetNode = domObject;
1508
+ offset = targetNode.nodeValue.length;
1509
+
1510
+ // if domOject is a Text node set selection at last position in that node
1511
+ } else if (domObject.nextSibling && domObject.nextSibling.nodeType == 3) {
1512
+ targetNode = domObject.nextSibling;
1513
+ offset = 0;
1514
+ } else {
1515
+ targetNode = domObject.parentNode;
1516
+ offset = this.getIndexInParent(domObject) + 1;
1517
+ }
1614
1518
 
1615
- // check whether the node itself is visible
1616
- if ((node.nodeType == $_.Node.TEXT_NODE && this.isEmpty(node))
1617
- || (node.nodeType == $_.Node.ELEMENT_NODE && node.offsetHeight == 0 && jQuery.inArray(node.nodeName.toLowerCase(), this.nonEmptyTags) === -1)) {
1519
+ newRange.startContainer = newRange.endContainer = targetNode;
1520
+ newRange.startOffset = newRange.endOffset = offset;
1521
+
1522
+ // select the range
1523
+ newRange.select();
1524
+
1525
+ return newRange;
1526
+ },
1527
+
1528
+ /**
1529
+ * Select a DOM node
1530
+ * will create a new range which spans the provided dom node and selects it afterwards
1531
+ * @param domObject DOM object
1532
+ * @method
1533
+ */
1534
+ selectDomNode: function (domObject) {
1535
+ var newRange = new GENTICS.Utils.RangeObject();
1536
+ newRange.startContainer = newRange.endContainer = domObject.parentNode;
1537
+ newRange.startOffset = this.getIndexInParent(domObject);
1538
+ newRange.endOffset = newRange.startOffset + 1;
1539
+ newRange.select();
1540
+ },
1541
+
1542
+ /**
1543
+ * Set the cursor (collapsed selection) at the start into the given DOM object
1544
+ * @param domObject DOM object
1545
+ * @method
1546
+ */
1547
+ setCursorInto: function (domObject) {
1548
+ // set a new range into the given dom object
1549
+ var newRange = new GENTICS.Utils.RangeObject();
1550
+ newRange.startContainer = newRange.endContainer = domObject;
1551
+ newRange.startOffset = newRange.endOffset = 0;
1552
+
1553
+ // select the range
1554
+ newRange.select();
1555
+ },
1556
+
1557
+
1558
+ /**
1559
+ * "An editing host is a node that is either an Element with a contenteditable
1560
+ * attribute set to the true state, or the Element child of a Document whose
1561
+ * designMode is enabled."
1562
+ * @param domObject DOM object
1563
+ * @method
1564
+ */
1565
+ isEditingHost: function (node) {
1566
+ return node
1567
+ && node.nodeType == 1 //ELEMENT_NODE
1568
+ && (node.contentEditable == "true" || (node.parentNode && node.parentNode.nodeType == 9 //DOCUEMENT_NODE
1569
+ && node.parentNode.designMode == "on"));
1570
+ },
1571
+
1572
+ /**
1573
+ * "Something is editable if it is a node which is not an editing host, does
1574
+ * not have a contenteditable attribute set to the false state, and whose
1575
+ * parent is an editing host or editable."
1576
+ * @param domObject DOM object
1577
+ * @method
1578
+ */
1579
+ isEditable: function (node) {
1580
+ // This is slightly a lie, because we're excluding non-HTML elements with
1581
+ // contentEditable attributes.
1582
+ return node
1583
+ && !this.isEditingHost(node)
1584
+ && (node.nodeType != 1 || node.contentEditable != "false") // ELEMENT_NODE
1585
+ && (this.isEditingHost(node.parentNode) || this.isEditable(node.parentNode));
1586
+ },
1587
+
1588
+ /**
1589
+ * "The editing host of node is null if node is neither editable nor an editing
1590
+ * host; node itself, if node is an editing host; or the nearest ancestor of
1591
+ * node that is an editing host, if node is editable."
1592
+ * @param domObject DOM object
1593
+ * @method
1594
+ */
1595
+ getEditingHostOf: function (node) {
1596
+ if (this.isEditingHost(node)) {
1597
+ return node;
1598
+ }
1599
+ if (this.isEditable(node)) {
1600
+ var ancestor = node.parentNode;
1601
+ while (!this.isEditingHost(ancestor)) {
1602
+ ancestor = ancestor.parentNode;
1603
+ }
1604
+ return ancestor;
1605
+ }
1618
1606
  return null;
1619
- }
1607
+ },
1608
+
1609
+ /**
1610
+ *
1611
+ * "Two nodes are in the same editing host if the editing host of the first is
1612
+ * non-null and the same as the editing host of the second."
1613
+ * @param node1 DOM object
1614
+ * @param node2 DOM object
1615
+ * @method
1616
+ */
1617
+ inSameEditingHost: function (node1, node2) {
1618
+ return this.getEditingHostOf(node1) && this.getEditingHostOf(node1) == this.getEditingHostOf(node2);
1619
+ },
1620
+
1621
+ // "A block node is either an Element whose "display" property does not have
1622
+ // resolved value "inline" or "inline-block" or "inline-table" or "none", or a
1623
+ // Document, or a DocumentFragment."
1624
+ isBlockNode: function (node) {
1625
+ return node && ((node.nodeType == $_.Node.ELEMENT_NODE && $_(["inline", "inline-block", "inline-table", "none"]).indexOf($_.getComputedStyle(node).display) == -1) || node.nodeType == $_.Node.DOCUMENT_NODE || node.nodeType == $_.Node.DOCUMENT_FRAGMENT_NODE);
1626
+ },
1627
+
1628
+ /**
1629
+ * Get the first visible child of the given node.
1630
+ * @param node node
1631
+ * @param includeNode when set to true, the node itself may be returned, otherwise only children are allowed
1632
+ * @return first visible child or null if none found
1633
+ */
1634
+ getFirstVisibleChild: function (node, includeNode) {
1635
+ // no node -> no child
1636
+ if (!node) {
1637
+ return null;
1638
+ }
1620
1639
 
1621
- // if the node is a text node, or does not have children, or is not editable, it is the first visible child
1622
- if (node.nodeType == $_.Node.TEXT_NODE
1623
- || (node.nodeType == $_.Node.ELEMENT_NODE && node.childNodes.length == 0)
1624
- || !jQuery(node).contentEditable()) {
1625
- return includeNode ? node : null;
1626
- }
1640
+ // check whether the node itself is visible
1641
+ if ((node.nodeType == $_.Node.TEXT_NODE && this.isEmpty(node)) || (node.nodeType == $_.Node.ELEMENT_NODE && node.offsetHeight == 0 && jQuery.inArray(node.nodeName.toLowerCase(), this.nonEmptyTags) === -1)) {
1642
+ return null;
1643
+ }
1627
1644
 
1628
- // otherwise traverse through the children
1629
- for (var i = 0; i < node.childNodes.length; ++i) {
1630
- var visibleChild = this.getFirstVisibleChild(node.childNodes[i], true);
1631
- if (visibleChild != null) {
1632
- return visibleChild;
1645
+ // if the node is a text node, or does not have children, or is not editable, it is the first visible child
1646
+ if (node.nodeType == $_.Node.TEXT_NODE || (node.nodeType == $_.Node.ELEMENT_NODE && node.childNodes.length == 0) || !jQuery(node).contentEditable()) {
1647
+ return includeNode ? node : null;
1633
1648
  }
1634
- }
1635
1649
 
1636
- return null;
1637
- },
1650
+ // otherwise traverse through the children
1651
+ var i;
1652
+ for (i = 0; i < node.childNodes.length; ++i) {
1653
+ var visibleChild = this.getFirstVisibleChild(node.childNodes[i], true);
1654
+ if (visibleChild != null) {
1655
+ return visibleChild;
1656
+ }
1657
+ }
1638
1658
 
1639
- /**
1640
- * Get the last visible child of the given node.
1641
- * @param node node
1642
- * @param includeNode when set to true, the node itself may be returned, otherwise only children are allowed
1643
- * @return last visible child or null if none found
1644
- */
1645
- getLastVisibleChild: function (node, includeNode) {
1646
- // no node -> no child
1647
- if (!node) {
1648
1659
  return null;
1649
- }
1660
+ },
1661
+
1662
+ /**
1663
+ * Get the last visible child of the given node.
1664
+ * @param node node
1665
+ * @param includeNode when set to true, the node itself may be returned, otherwise only children are allowed
1666
+ * @return last visible child or null if none found
1667
+ */
1668
+ getLastVisibleChild: function (node, includeNode) {
1669
+ // no node -> no child
1670
+ if (!node) {
1671
+ return null;
1672
+ }
1650
1673
 
1651
- // check whether the node itself is visible
1652
- if ((node.nodeType == $_.Node.TEXT_NODE && this.isEmpty(node))
1653
- || (node.nodeType == $_.Node.ELEMENT_NODE && node.offsetHeight == 0 && jQuery.inArray(node.nodeName.toLowerCase(), this.nonEmptyTags) === -1)) {
1654
- return null;
1655
- }
1674
+ // check whether the node itself is visible
1675
+ if ((node.nodeType == $_.Node.TEXT_NODE && this.isEmpty(node)) || (node.nodeType == $_.Node.ELEMENT_NODE && node.offsetHeight == 0 && jQuery.inArray(node.nodeName.toLowerCase(), this.nonEmptyTags) === -1)) {
1676
+ return null;
1677
+ }
1656
1678
 
1657
- // if the node is a text node, or does not have children, or is not editable, it is the first visible child
1658
- if (node.nodeType == $_.Node.TEXT_NODE
1659
- || (node.nodeType == $_.Node.ELEMENT_NODE && node.childNodes.length == 0)
1660
- || !jQuery(node).contentEditable()) {
1661
- return includeNode ? node : null;
1662
- }
1679
+ // if the node is a text node, or does not have children, or is not editable, it is the first visible child
1680
+ if (node.nodeType == $_.Node.TEXT_NODE || (node.nodeType == $_.Node.ELEMENT_NODE && node.childNodes.length == 0) || !jQuery(node).contentEditable()) {
1681
+ return includeNode ? node : null;
1682
+ }
1663
1683
 
1664
- // otherwise traverse through the children
1665
- for (var i = node.childNodes.length - 1; i >= 0; --i) {
1666
- var visibleChild = this.getLastVisibleChild(node.childNodes[i], true);
1667
- if (visibleChild != null) {
1668
- return visibleChild;
1684
+ // otherwise traverse through the children
1685
+ var i;
1686
+ for (i = node.childNodes.length - 1; i >= 0; --i) {
1687
+ var visibleChild = this.getLastVisibleChild(node.childNodes[i], true);
1688
+ if (visibleChild != null) {
1689
+ return visibleChild;
1690
+ }
1669
1691
  }
1670
- }
1671
1692
 
1672
- return null;
1673
- }
1674
- });
1693
+ return null;
1694
+ }
1695
+ });
1675
1696
 
1676
1697
 
1677
- /**
1678
- * Create the singleton object
1679
- * @hide
1680
- */
1681
- GENTICS.Utils.Dom = new Dom();
1698
+ /**
1699
+ * Create the singleton object
1700
+ * @hide
1701
+ */
1702
+ GENTICS.Utils.Dom = new Dom();
1682
1703
 
1683
- return GENTICS.Utils.Dom;
1704
+ return GENTICS.Utils.Dom;
1684
1705
 
1685
1706
  });