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,29 +1,111 @@
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
-
1
+ /* pluginmanager.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.
26
+ */
21
27
  // Do not add dependencies that require depend on aloha/core
22
- define(
23
- [ 'aloha/jquery', 'util/class' ],
24
- function( jQuery, Class ) {
25
-
26
-
28
+ define([
29
+ 'jquery',
30
+ 'util/class'
31
+ ], function (
32
+ $,
33
+ Class
34
+ ) {
35
+ 'use strict';
36
+
37
+ var Aloha = window.Aloha;
38
+
39
+ /**
40
+ * For each plugin setting, assigns it into its corresponding plugin.
41
+ *
42
+ * @param {Array.<Plugin>} plugins
43
+ * @param {object<string, object>} settings
44
+ */
45
+ function mapSettingsIntoPlugins(plugins, settings) {
46
+ var plugin;
47
+ for (plugin in settings) {
48
+ if (settings.hasOwnProperty(plugin) && plugins[plugin]) {
49
+ plugins[plugin].settings = settings[plugin] || {};
50
+ }
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Retrieves a set of plugins or the given `names' list, from among those
56
+ * specified in `plugins'.
57
+ *
58
+ * @param {object<string, object>} plugins
59
+ * @param {Array.<string>} names List of plugins names.
60
+ * @return {Array.<Plugins>} List of available plugins.
61
+ */
62
+ function getPlugins(plugins, names) {
63
+ var available = [];
64
+ var plugin;
65
+ var i;
66
+ for (i = 0; i < names.length; i++) {
67
+ plugin = plugins[names[i]];
68
+ if (plugin) {
69
+ available.push(plugin);
70
+ }
71
+ }
72
+ return available;
73
+ }
74
+
75
+ /**
76
+ * Initializes the plugins in the given list.
77
+ *
78
+ * @param {Array.<Plugins>} plugins Plugins to initialize.
79
+ * @param {function} callback Function to invoke once all plugins have been
80
+ * successfully initialized.
81
+ */
82
+ function initializePlugins(plugins, callback) {
83
+ var numToEnable = plugins.length;
84
+ var onInit = function () {
85
+ if (0 === --numToEnable && callback) {
86
+ callback();
87
+ }
88
+ };
89
+ var i;
90
+ var ret;
91
+ var plugin;
92
+ for (i = 0; i < plugins.length; i++) {
93
+ plugin = plugins[i];
94
+ plugin.settings = plugin.settings || {};
95
+ if (typeof plugin.settings.enabled === 'undefined') {
96
+ plugin.settings.enabled = true;
97
+ }
98
+ if (plugin.settings.enabled && plugin.checkDependencies()) {
99
+ ret = plugin.init();
100
+ if (ret && typeof ret.done === 'function') {
101
+ ret.done(onInit);
102
+ } else {
103
+ onInit();
104
+ }
105
+ }
106
+ }
107
+ }
108
+
27
109
  /**
28
110
  * The Plugin Manager controls the lifecycle of all Aloha Plugins.
29
111
  *
@@ -32,86 +114,54 @@ function( jQuery, Class ) {
32
114
  * @singleton
33
115
  */
34
116
  return new (Class.extend({
117
+
35
118
  plugins: {},
36
119
 
37
120
  /**
38
- * Initialize all registered plugins
39
- * @return void
40
- * @hide
121
+ * Initialize all registered plugins.
122
+ *
123
+ * @param {function} next Callback to invoke after plugins have
124
+ * succefully initialized.
125
+ * @param {Array.<string>} enabled A list of plugin names which are to
126
+ * be enable.
41
127
  */
42
- init: function(next, userPlugins) {
43
-
44
- var
45
- me = this,
46
- globalSettings = ( Aloha && Aloha.settings ) ? Aloha.settings.plugins||{}: {},
47
- i,
48
- plugin,
49
- pluginName;
50
-
51
- // Global to local settings
52
- for ( pluginName in globalSettings ) {
53
-
54
- if ( globalSettings.hasOwnProperty( pluginName ) ) {
55
-
56
- plugin = this.plugins[pluginName] || false;
57
-
58
- if ( plugin ) {
59
- plugin.settings = globalSettings[ pluginName ] || {};
60
- }
61
- }
62
- }
128
+ init: function (next, enabled) {
129
+ var manager = this;
130
+ var plugins = manager.plugins;
63
131
 
64
- // Default: All loaded plugins are enabled
65
- if ( !userPlugins.length ) {
66
-
67
- for ( pluginName in this.plugins ) {
68
-
69
- if ( this.plugins.hasOwnProperty( pluginName ) ) {
70
- userPlugins.push( pluginName );
71
- }
72
- }
73
- }
74
-
75
- // Enable Plugins specified by User
76
- for ( i=0; i < userPlugins.length; ++i ) {
77
-
78
- pluginName = userPlugins[ i ];
79
- plugin = this.plugins[ pluginName ]||false;
80
-
81
- if ( plugin ) {
82
-
83
- plugin.settings = plugin.settings || {};
84
-
85
- if ( typeof plugin.settings.enabled === 'undefined' ) {
86
- plugin.settings.enabled = true;
87
- }
88
-
89
- if ( plugin.settings.enabled ) {
90
- if ( plugin.checkDependencies() ) {
91
- plugin.init();
92
- }
132
+ mapSettingsIntoPlugins(plugins,
133
+ Aloha && Aloha.settings && Aloha.settings.plugins);
134
+
135
+ // Because all plugins are enabled by default if specific plugins
136
+ // are not specified.
137
+ var plugin;
138
+ if (plugins && 0 === enabled.length) {
139
+ enabled = [];
140
+ for (plugin in plugins) {
141
+ if (plugins.hasOwnProperty(plugin)) {
142
+ enabled.push(plugin);
93
143
  }
94
144
  }
95
145
  }
96
-
97
- next();
146
+
147
+ initializePlugins(getPlugins(plugins, enabled), next);
98
148
  },
99
149
 
100
150
  /**
101
151
  * Register a plugin
102
152
  * @param {Plugin} plugin plugin to register
103
153
  */
104
- register: function( plugin ) {
105
-
106
- if ( !plugin.name ) {
107
- throw new Error( 'Plugin does not have an name.' );
154
+ register: function (plugin) {
155
+
156
+ if (!plugin.name) {
157
+ throw new Error('Plugin does not have an name.');
108
158
  }
109
-
110
- if ( this.plugins[ plugin.name ]) {
111
- throw new Error( 'Already registered the plugin "' + plugin.name + '"!' );
159
+
160
+ if (this.plugins[plugin.name]) {
161
+ throw new Error('Already registered the plugin "' + plugin.name + '"!');
112
162
  }
113
-
114
- this.plugins[ plugin.name ] = plugin;
163
+
164
+ this.plugins[plugin.name] = plugin;
115
165
  },
116
166
 
117
167
  /**
@@ -120,14 +170,13 @@ function( jQuery, Class ) {
120
170
  * @return void
121
171
  * @hide
122
172
  */
123
- makeClean: function(obj) {
173
+ makeClean: function (obj) {
124
174
  var i, plugin;
125
175
  // iterate through all registered plugins
126
- for ( plugin in this.plugins ) {
127
- if ( this.plugins.hasOwnProperty( plugin ) ) {
176
+ for (plugin in this.plugins) {
177
+ if (this.plugins.hasOwnProperty(plugin)) {
128
178
  if (Aloha.Log.isDebugEnabled()) {
129
- Aloha.Log.debug(this, 'Passing contents of HTML Element with id { ' + obj.attr('id') +
130
- ' } for cleaning to plugin { ' + plugin + ' }');
179
+ Aloha.Log.debug(this, 'Passing contents of HTML Element with id { ' + obj.attr('id') + ' } for cleaning to plugin { ' + plugin + ' }');
131
180
  }
132
181
  this.plugins[plugin].makeClean(obj);
133
182
  }
@@ -138,9 +187,9 @@ function( jQuery, Class ) {
138
187
  * Expose a nice name for the Plugin Manager
139
188
  * @hide
140
189
  */
141
- toString: function() {
190
+ toString: function () {
142
191
  return 'pluginmanager';
143
192
  }
144
-
193
+
145
194
  }))();
146
- });
195
+ });
@@ -1,3242 +1,30 @@
1
- /**
2
- * @license Rangy, a cross-browser JavaScript range and selection library
3
- * http://code.google.com/p/rangy/
4
- *
5
- * Copyright 2011, Tim Down
6
- * Licensed under the MIT license.
7
- * Version: 1.2.1
8
- * Build date: 8 October 2011
9
- */
10
- define( 'aloha/rangy-core', [], function(){} );
11
- var rangy = (function() {
12
-
13
-
14
- var OBJECT = "object", FUNCTION = "function", UNDEFINED = "undefined";
15
-
16
- var domRangeProperties = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed",
17
- "commonAncestorContainer", "START_TO_START", "START_TO_END", "END_TO_START", "END_TO_END"];
18
-
19
- var domRangeMethods = ["setStart", "setStartBefore", "setStartAfter", "setEnd", "setEndBefore",
20
- "setEndAfter", "collapse", "selectNode", "selectNodeContents", "compareBoundaryPoints", "deleteContents",
21
- "extractContents", "cloneContents", "insertNode", "surroundContents", "cloneRange", "toString", "detach"];
22
-
23
- var textRangeProperties = ["boundingHeight", "boundingLeft", "boundingTop", "boundingWidth", "htmlText", "text"];
24
-
25
- // Subset of TextRange's full set of methods that we're interested in
26
- var textRangeMethods = ["collapse", "compareEndPoints", "duplicate", "getBookmark", "moveToBookmark",
27
- "moveToElementText", "parentElement", "pasteHTML", "select", "setEndPoint", "getBoundingClientRect"];
28
-
29
- /*----------------------------------------------------------------------------------------------------------------*/
30
-
31
- // Trio of functions taken from Peter Michaux's article:
32
- // http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting
33
- function isHostMethod(o, p) {
34
- var t = typeof o[p];
35
- return t == FUNCTION || (!!(t == OBJECT && o[p])) || t == "unknown";
36
- }
37
-
38
- function isHostObject(o, p) {
39
- return !!(typeof o[p] == OBJECT && o[p]);
40
- }
41
-
42
- function isHostProperty(o, p) {
43
- return typeof o[p] != UNDEFINED;
44
- }
45
-
46
- // Creates a convenience function to save verbose repeated calls to tests functions
47
- function createMultiplePropertyTest(testFunc) {
48
- return function(o, props) {
49
- var i = props.length;
50
- while (i--) {
51
- if (!testFunc(o, props[i])) {
52
- return false;
53
- }
54
- }
55
- return true;
56
- };
57
- }
58
-
59
- // Next trio of functions are a convenience to save verbose repeated calls to previous two functions
60
- var areHostMethods = createMultiplePropertyTest(isHostMethod);
61
- var areHostObjects = createMultiplePropertyTest(isHostObject);
62
- var areHostProperties = createMultiplePropertyTest(isHostProperty);
63
-
64
- function isTextRange(range) {
65
- return range && areHostMethods(range, textRangeMethods) && areHostProperties(range, textRangeProperties);
66
- }
67
-
68
- var api = {
69
- version: "1.2.1",
70
- initialized: false,
71
- supported: true,
72
-
73
- util: {
74
- isHostMethod: isHostMethod,
75
- isHostObject: isHostObject,
76
- isHostProperty: isHostProperty,
77
- areHostMethods: areHostMethods,
78
- areHostObjects: areHostObjects,
79
- areHostProperties: areHostProperties,
80
- isTextRange: isTextRange
81
- },
82
-
83
- features: {},
84
-
85
- modules: {},
86
- config: {
87
- alertOnWarn: false,
88
- preferTextRange: false
89
- }
90
- };
91
-
92
- function fail(reason) {
93
- window.alert("Rangy not supported in your browser. Reason: " + reason);
94
- api.initialized = true;
95
- api.supported = false;
96
- }
97
-
98
- api.fail = fail;
99
-
100
- function warn(msg) {
101
- var warningMessage = "Rangy warning: " + msg;
102
- if (api.config.alertOnWarn) {
103
- window.alert(warningMessage);
104
- } else if (typeof window.console != UNDEFINED && typeof window.console.log != UNDEFINED) {
105
- window.console.log(warningMessage);
106
- }
107
- }
108
-
109
- api.warn = warn;
110
-
111
- if ({}.hasOwnProperty) {
112
- api.util.extend = function(o, props) {
113
- for (var i in props) {
114
- if (props.hasOwnProperty(i)) {
115
- o[i] = props[i];
116
- }
117
- }
118
- };
119
- } else {
120
- fail("hasOwnProperty not supported");
121
- }
122
-
123
- var initListeners = [];
124
- var moduleInitializers = [];
125
-
126
- // Initialization
127
- function init() {
128
- if (api.initialized) {
129
- return;
130
- }
131
- var testRange;
132
- var implementsDomRange = false, implementsTextRange = false;
133
-
134
- // First, perform basic feature tests
135
-
136
- if (isHostMethod(document, "createRange")) {
137
- testRange = document.createRange();
138
- if (areHostMethods(testRange, domRangeMethods) && areHostProperties(testRange, domRangeProperties)) {
139
- implementsDomRange = true;
140
- }
141
- testRange.detach();
142
- }
143
-
144
- var body = isHostObject(document, "body") ? document.body : document.getElementsByTagName("body")[0];
145
-
146
- if (body && isHostMethod(body, "createTextRange")) {
147
- testRange = body.createTextRange();
148
- if (isTextRange(testRange)) {
149
- implementsTextRange = true;
150
- }
151
- }
152
-
153
- if (!implementsDomRange && !implementsTextRange) {
154
- fail("Neither Range nor TextRange are implemented");
155
- }
156
-
157
- api.initialized = true;
158
- api.features = {
159
- implementsDomRange: implementsDomRange,
160
- implementsTextRange: implementsTextRange
161
- };
162
-
163
- // Initialize modules and call init listeners
164
- var allListeners = moduleInitializers.concat(initListeners);
165
- for (var i = 0, len = allListeners.length; i < len; ++i) {
166
- try {
167
- allListeners[i](api);
168
- } catch (ex) {
169
- if (isHostObject(window, "console") && isHostMethod(window.console, "log")) {
170
- window.console.log("Init listener threw an exception. Continuing.", ex);
171
- }
172
-
173
- }
174
- }
175
- }
176
-
177
- // Allow external scripts to initialize this library in case it's loaded after the document has loaded
178
- api.init = init;
179
-
180
- // Execute listener immediately if already initialized
181
- api.addInitListener = function(listener) {
182
- if (api.initialized) {
183
- listener(api);
184
- } else {
185
- initListeners.push(listener);
186
- }
187
- };
188
-
189
- var createMissingNativeApiListeners = [];
190
-
191
- api.addCreateMissingNativeApiListener = function(listener) {
192
- createMissingNativeApiListeners.push(listener);
193
- };
194
-
195
- function createMissingNativeApi(win) {
196
- win = win || window;
197
- init();
198
-
199
- // Notify listeners
200
- for (var i = 0, len = createMissingNativeApiListeners.length; i < len; ++i) {
201
- createMissingNativeApiListeners[i](win);
202
- }
203
- }
204
-
205
- api.createMissingNativeApi = createMissingNativeApi;
206
-
207
- /**
208
- * @constructor
209
- */
210
- function Module(name) {
211
- this.name = name;
212
- this.initialized = false;
213
- this.supported = false;
214
- }
215
-
216
- Module.prototype.fail = function(reason) {
217
- this.initialized = true;
218
- this.supported = false;
219
-
220
- throw new Error("Module '" + this.name + "' failed to load: " + reason);
221
- };
222
-
223
- Module.prototype.warn = function(msg) {
224
- api.warn("Module " + this.name + ": " + msg);
225
- };
226
-
227
- Module.prototype.createError = function(msg) {
228
- return new Error("Error in Rangy " + this.name + " module: " + msg);
229
- };
230
-
231
- api.createModule = function(name, initFunc) {
232
- var module = new Module(name);
233
- api.modules[name] = module;
234
-
235
- moduleInitializers.push(function(api) {
236
- initFunc(api, module);
237
- module.initialized = true;
238
- module.supported = true;
239
- });
240
- };
241
-
242
- api.requireModules = function(modules) {
243
- for (var i = 0, len = modules.length, module, moduleName; i < len; ++i) {
244
- moduleName = modules[i];
245
- module = api.modules[moduleName];
246
- if (!module || !(module instanceof Module)) {
247
- throw new Error("Module '" + moduleName + "' not found");
248
- }
249
- if (!module.supported) {
250
- throw new Error("Module '" + moduleName + "' not supported");
251
- }
252
- }
253
- };
254
-
255
- /*----------------------------------------------------------------------------------------------------------------*/
256
-
257
- // Wait for document to load before running tests
258
-
259
- var docReady = false;
260
-
261
- var loadHandler = function(e) {
262
-
263
- if (!docReady) {
264
- docReady = true;
265
- if (!api.initialized) {
266
- init();
267
- }
268
- }
269
- };
270
-
271
- // Test whether we have window and document objects that we will need
272
- if (typeof window == UNDEFINED) {
273
- fail("No window found");
274
- return;
275
- }
276
- if (typeof document == UNDEFINED) {
277
- fail("No document found");
278
- return;
279
- }
280
-
281
- if (isHostMethod(document, "addEventListener")) {
282
- document.addEventListener("DOMContentLoaded", loadHandler, false);
283
- }
284
-
285
- // Add a fallback in case the DOMContentLoaded event isn't supported
286
- if (isHostMethod(window, "addEventListener")) {
287
- window.addEventListener("load", loadHandler, false);
288
- } else if (isHostMethod(window, "attachEvent")) {
289
- window.attachEvent("onload", loadHandler);
290
- } else {
291
- fail("Window does not have required addEventListener or attachEvent method");
292
- }
293
-
294
- return api;
295
- })();
296
- rangy.createModule("DomUtil", function(api, module) {
297
-
298
- var UNDEF = "undefined";
299
- var util = api.util;
300
-
301
- // Perform feature tests
302
- if (!util.areHostMethods(document, ["createDocumentFragment", "createElement", "createTextNode"])) {
303
- module.fail("document missing a Node creation method");
304
- }
305
-
306
- if (!util.isHostMethod(document, "getElementsByTagName")) {
307
- module.fail("document missing getElementsByTagName method");
308
- }
309
-
310
- var el = document.createElement("div");
311
- if (!util.areHostMethods(el, ["insertBefore", "appendChild", "cloneNode"] ||
312
- !util.areHostObjects(el, ["previousSibling", "nextSibling", "childNodes", "parentNode"]))) {
313
- module.fail("Incomplete Element implementation");
314
- }
315
-
316
- // innerHTML is required for Range's createContextualFragment method
317
- if (!util.isHostProperty(el, "innerHTML")) {
318
- module.fail("Element is missing innerHTML property");
319
- }
320
-
321
- var textNode = document.createTextNode("test");
322
- if (!util.areHostMethods(textNode, ["splitText", "deleteData", "insertData", "appendData", "cloneNode"] ||
323
- !util.areHostObjects(el, ["previousSibling", "nextSibling", "childNodes", "parentNode"]) ||
324
- !util.areHostProperties(textNode, ["data"]))) {
325
- module.fail("Incomplete Text Node implementation");
326
- }
327
-
328
- /*----------------------------------------------------------------------------------------------------------------*/
329
-
330
- // Removed use of indexOf because of a bizarre bug in Opera that is thrown in one of the Acid3 tests. I haven't been
331
- // able to replicate it outside of the test. The bug is that indexOf returns -1 when called on an Array that
332
- // contains just the document as a single element and the value searched for is the document.
333
- var arrayContains = /*Array.prototype.indexOf ?
334
- function(arr, val) {
335
- return arr.indexOf(val) > -1;
336
- }:*/
337
-
338
- function(arr, val) {
339
- var i = arr.length;
340
- while (i--) {
341
- if (arr[i] === val) {
342
- return true;
343
- }
344
- }
345
- return false;
346
- };
347
-
348
- // Opera 11 puts HTML elements in the null namespace, it seems, and IE 7 has undefined namespaceURI
349
- function isHtmlNamespace(node) {
350
- var ns;
351
- return typeof node.namespaceURI == UNDEF || ((ns = node.namespaceURI) === null || ns == "http://www.w3.org/1999/xhtml");
352
- }
353
-
354
- function parentElement(node) {
355
- var parent = node.parentNode;
356
- return (parent.nodeType == 1) ? parent : null;
357
- }
358
-
359
- function getNodeIndex(node) {
360
- var i = 0;
361
- while( (node = node.previousSibling) ) {
362
- i++;
363
- }
364
- return i;
365
- }
366
-
367
- function getNodeLength(node) {
368
- var childNodes;
369
- return isCharacterDataNode(node) ? node.length : ((childNodes = node.childNodes) ? childNodes.length : 0);
370
- }
371
-
372
- function getCommonAncestor(node1, node2) {
373
- var ancestors = [], n;
374
- for (n = node1; n; n = n.parentNode) {
375
- ancestors.push(n);
376
- }
377
-
378
- for (n = node2; n; n = n.parentNode) {
379
- if (arrayContains(ancestors, n)) {
380
- return n;
381
- }
382
- }
383
-
384
- return null;
385
- }
386
-
387
- function isAncestorOf(ancestor, descendant, selfIsAncestor) {
388
- var n = selfIsAncestor ? descendant : descendant.parentNode;
389
- while (n) {
390
- if (n === ancestor) {
391
- return true;
392
- } else {
393
- n = n.parentNode;
394
- }
395
- }
396
- return false;
397
- }
398
-
399
- function getClosestAncestorIn(node, ancestor, selfIsAncestor) {
400
- var p, n = selfIsAncestor ? node : node.parentNode;
401
- while (n) {
402
- p = n.parentNode;
403
- if (p === ancestor) {
404
- return n;
405
- }
406
- n = p;
407
- }
408
- return null;
409
- }
410
-
411
- function isCharacterDataNode(node) {
412
- var t = node.nodeType;
413
- return t == 3 || t == 4 || t == 8 ; // Text, CDataSection or Comment
414
- }
415
-
416
- function insertAfter(node, precedingNode) {
417
- var nextNode = precedingNode.nextSibling, parent = precedingNode.parentNode;
418
- if (nextNode) {
419
- parent.insertBefore(node, nextNode);
420
- } else {
421
- parent.appendChild(node);
422
- }
423
- return node;
424
- }
425
-
426
- // Note that we cannot use splitText() because it is bugridden in IE 9.
427
- function splitDataNode(node, index) {
428
- var newNode = node.cloneNode(false);
429
- newNode.deleteData(0, index);
430
- node.deleteData(index, node.length - index);
431
- insertAfter(newNode, node);
432
- return newNode;
433
- }
434
-
435
- function getDocument(node) {
436
- if (node.nodeType == 9) {
437
- return node;
438
- } else if (typeof node.ownerDocument != UNDEF) {
439
- return node.ownerDocument;
440
- } else if (typeof node.document != UNDEF) {
441
- return node.document;
442
- } else if (node.parentNode) {
443
- return getDocument(node.parentNode);
444
- } else {
445
- throw new Error("getDocument: no document found for node");
446
- }
447
- }
448
-
449
- function getWindow(node) {
450
- var doc = getDocument(node);
451
- if (typeof doc.defaultView != UNDEF) {
452
- return doc.defaultView;
453
- } else if (typeof doc.parentWindow != UNDEF) {
454
- return doc.parentWindow;
455
- } else {
456
- throw new Error("Cannot get a window object for node");
457
- }
458
- }
459
-
460
- function getIframeDocument(iframeEl) {
461
- if (typeof iframeEl.contentDocument != UNDEF) {
462
- return iframeEl.contentDocument;
463
- } else if (typeof iframeEl.contentWindow != UNDEF) {
464
- return iframeEl.contentWindow.document;
465
- } else {
466
- throw new Error("getIframeWindow: No Document object found for iframe element");
467
- }
468
- }
469
-
470
- function getIframeWindow(iframeEl) {
471
- if (typeof iframeEl.contentWindow != UNDEF) {
472
- return iframeEl.contentWindow;
473
- } else if (typeof iframeEl.contentDocument != UNDEF) {
474
- return iframeEl.contentDocument.defaultView;
475
- } else {
476
- throw new Error("getIframeWindow: No Window object found for iframe element");
477
- }
478
- }
479
-
480
- function getBody(doc) {
481
- return util.isHostObject(doc, "body") ? doc.body : doc.getElementsByTagName("body")[0];
482
- }
483
-
484
- function getRootContainer(node) {
485
- var parent;
486
- while ( (parent = node.parentNode) ) {
487
- node = parent;
488
- }
489
- return node;
490
- }
491
-
492
- /**
493
- * This is a very ugly workaround for an IE9 issue Before comparing DOM
494
- * elements "normalize" them. There are cases, where anchorNode and
495
- * focusNode in a nativeselection point to DOM elements with same
496
- * parentNode, same previousSibling and same nextSibling, but the nodes
497
- * themselves are not the same
498
- * If such nodes are compared in the comparePoints method, an error occurs.
499
- * To fix this, we move to the previousSibling/nextSibling/parentNode and back, to hopefully get
500
- * the "correct" node in the DOM
501
- * @param node node to fix
502
- * @return normalized node
503
- */
504
- function fixNode(node) {
505
- if (!node) {
506
- return;
507
- }
508
- if (node.previousSibling) {
509
- return node.previousSibling.nextSibling;
510
- } else if (node.nextSibling) {
511
- return node.nextSibling.previousSibling;
512
- } else if (node.parentNode) {
513
- return node.parentNode.firstChild;
514
- } else {
515
- return node;
516
- }
517
- }
518
-
519
- function comparePoints(nodeA, offsetA, nodeB, offsetB) {
520
- // fix the nodes before comparing them
521
- nodeA = fixNode(nodeA);
522
- nodeB = fixNode(nodeB);
523
- // See http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Comparing
524
- var nodeC, root, childA, childB, n;
525
- if (nodeA == nodeB) {
526
-
527
- // Case 1: nodes are the same
528
- return offsetA === offsetB ? 0 : (offsetA < offsetB) ? -1 : 1;
529
- } else if ( (nodeC = getClosestAncestorIn(nodeB, nodeA, true)) ) {
530
-
531
- // Case 2: node C (container B or an ancestor) is a child node of A
532
- return offsetA <= getNodeIndex(nodeC) ? -1 : 1;
533
- } else if ( (nodeC = getClosestAncestorIn(nodeA, nodeB, true)) ) {
534
-
535
- // Case 3: node C (container A or an ancestor) is a child node of B
536
- return getNodeIndex(nodeC) < offsetB ? -1 : 1;
537
- } else {
538
-
539
- // Case 4: containers are siblings or descendants of siblings
540
- root = getCommonAncestor(nodeA, nodeB);
541
- childA = (nodeA === root) ? root : getClosestAncestorIn(nodeA, root, true);
542
- childB = (nodeB === root) ? root : getClosestAncestorIn(nodeB, root, true);
543
-
544
- if (childA === childB) {
545
- // This shouldn't be possible
546
-
547
- throw new Error("comparePoints got to case 4 and childA and childB are the same!");
548
- } else {
549
- n = root.firstChild;
550
- while (n) {
551
- if (n === childA) {
552
- return -1;
553
- } else if (n === childB) {
554
- return 1;
555
- }
556
- n = n.nextSibling;
557
- }
558
- throw new Error("Should not be here!");
559
- }
560
- }
561
- }
562
-
563
- function fragmentFromNodeChildren(node) {
564
- var fragment = getDocument(node).createDocumentFragment(), child;
565
- while ( (child = node.firstChild) ) {
566
- fragment.appendChild(child);
567
- }
568
- return fragment;
569
- }
570
-
571
- function inspectNode(node) {
572
- if (!node) {
573
- return "[No node]";
574
- }
575
- if (isCharacterDataNode(node)) {
576
- return '"' + node.data + '"';
577
- } else if (node.nodeType == 1) {
578
- var idAttr = node.id ? ' id="' + node.id + '"' : "";
579
- return "<" + node.nodeName + idAttr + ">[" + node.childNodes.length + "]";
580
- } else {
581
- return node.nodeName;
582
- }
583
- }
584
-
585
- /**
586
- * @constructor
587
- */
588
- function NodeIterator(root) {
589
- this.root = root;
590
- this._next = root;
591
- }
592
-
593
- NodeIterator.prototype = {
594
- _current: null,
595
-
596
- hasNext: function() {
597
- return !!this._next;
598
- },
599
-
600
- next: function() {
601
- var n = this._current = this._next;
602
- var child, next;
603
- if (this._current) {
604
- child = n.firstChild;
605
- if (child) {
606
- this._next = child;
607
- } else {
608
- next = null;
609
- while ((n !== this.root) && !(next = n.nextSibling)) {
610
- n = n.parentNode;
611
- }
612
- this._next = next;
613
- }
614
- }
615
- return this._current;
616
- },
617
-
618
- detach: function() {
619
- this._current = this._next = this.root = null;
620
- }
621
- };
622
-
623
- function createIterator(root) {
624
- return new NodeIterator(root);
625
- }
626
-
627
- /**
628
- * @constructor
629
- */
630
- function DomPosition(node, offset) {
631
- this.node = node;
632
- this.offset = offset;
633
- }
634
-
635
- DomPosition.prototype = {
636
- equals: function(pos) {
637
- return this.node === pos.node & this.offset == pos.offset;
638
- },
639
-
640
- inspect: function() {
641
- return "[DomPosition(" + inspectNode(this.node) + ":" + this.offset + ")]";
642
- }
643
- };
644
-
645
- /**
646
- * @constructor
647
- */
648
- function DOMException(codeName) {
649
- this.code = this[codeName];
650
- this.codeName = codeName;
651
- this.message = "DOMException: " + this.codeName;
652
- }
653
-
654
- DOMException.prototype = {
655
- INDEX_SIZE_ERR: 1,
656
- HIERARCHY_REQUEST_ERR: 3,
657
- WRONG_DOCUMENT_ERR: 4,
658
- NO_MODIFICATION_ALLOWED_ERR: 7,
659
- NOT_FOUND_ERR: 8,
660
- NOT_SUPPORTED_ERR: 9,
661
- INVALID_STATE_ERR: 11
662
- };
663
-
664
- DOMException.prototype.toString = function() {
665
- return this.message;
666
- };
667
-
668
- api.dom = {
669
- arrayContains: arrayContains,
670
- isHtmlNamespace: isHtmlNamespace,
671
- parentElement: parentElement,
672
- getNodeIndex: getNodeIndex,
673
- getNodeLength: getNodeLength,
674
- getCommonAncestor: getCommonAncestor,
675
- isAncestorOf: isAncestorOf,
676
- getClosestAncestorIn: getClosestAncestorIn,
677
- isCharacterDataNode: isCharacterDataNode,
678
- insertAfter: insertAfter,
679
- splitDataNode: splitDataNode,
680
- getDocument: getDocument,
681
- getWindow: getWindow,
682
- getIframeWindow: getIframeWindow,
683
- getIframeDocument: getIframeDocument,
684
- getBody: getBody,
685
- getRootContainer: getRootContainer,
686
- comparePoints: comparePoints,
687
- inspectNode: inspectNode,
688
- fragmentFromNodeChildren: fragmentFromNodeChildren,
689
- createIterator: createIterator,
690
- DomPosition: DomPosition
691
- };
692
-
693
- api.DOMException = DOMException;
694
- });rangy.createModule("DomRange", function(api, module) {
695
- api.requireModules( ["DomUtil"] );
696
-
697
-
698
- var dom = api.dom;
699
- var DomPosition = dom.DomPosition;
700
- var DOMException = api.DOMException;
701
-
702
- /*----------------------------------------------------------------------------------------------------------------*/
703
-
704
- // Utility functions
705
-
706
- function isNonTextPartiallySelected(node, range) {
707
- return (node.nodeType != 3) &&
708
- (dom.isAncestorOf(node, range.startContainer, true) || dom.isAncestorOf(node, range.endContainer, true));
709
- }
710
-
711
- function getRangeDocument(range) {
712
- return dom.getDocument(range.startContainer);
713
- }
714
-
715
- function dispatchEvent(range, type, args) {
716
- var listeners = range._listeners[type];
717
- if (listeners) {
718
- for (var i = 0, len = listeners.length; i < len; ++i) {
719
- listeners[i].call(range, {target: range, args: args});
720
- }
721
- }
722
- }
723
-
724
- function getBoundaryBeforeNode(node) {
725
- return new DomPosition(node.parentNode, dom.getNodeIndex(node));
726
- }
727
-
728
- function getBoundaryAfterNode(node) {
729
- return new DomPosition(node.parentNode, dom.getNodeIndex(node) + 1);
730
- }
731
-
732
- function insertNodeAtPosition(node, n, o) {
733
- var firstNodeInserted = node.nodeType == 11 ? node.firstChild : node;
734
- if (dom.isCharacterDataNode(n)) {
735
- if (o == n.length) {
736
- dom.insertAfter(node, n);
737
- } else {
738
- n.parentNode.insertBefore(node, o == 0 ? n : dom.splitDataNode(n, o));
739
- }
740
- } else if (o >= n.childNodes.length) {
741
- n.appendChild(node);
742
- } else {
743
- n.insertBefore(node, n.childNodes[o]);
744
- }
745
- return firstNodeInserted;
746
- }
747
-
748
- function cloneSubtree(iterator) {
749
- var partiallySelected;
750
- for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) {
751
- partiallySelected = iterator.isPartiallySelectedSubtree();
752
-
753
- node = node.cloneNode(!partiallySelected);
754
- if (partiallySelected) {
755
- subIterator = iterator.getSubtreeIterator();
756
- node.appendChild(cloneSubtree(subIterator));
757
- subIterator.detach(true);
758
- }
759
-
760
- if (node.nodeType == 10) { // DocumentType
761
- throw new DOMException("HIERARCHY_REQUEST_ERR");
762
- }
763
- frag.appendChild(node);
764
- }
765
- return frag;
766
- }
767
-
768
- function iterateSubtree(rangeIterator, func, iteratorState) {
769
- var it, n;
770
- iteratorState = iteratorState || { stop: false };
771
- for (var node, subRangeIterator; node = rangeIterator.next(); ) {
772
- //log.debug("iterateSubtree, partially selected: " + rangeIterator.isPartiallySelectedSubtree(), nodeToString(node));
773
- if (rangeIterator.isPartiallySelectedSubtree()) {
774
- // The node is partially selected by the Range, so we can use a new RangeIterator on the portion of the
775
- // node selected by the Range.
776
- if (func(node) === false) {
777
- iteratorState.stop = true;
778
- return;
779
- } else {
780
- subRangeIterator = rangeIterator.getSubtreeIterator();
781
- iterateSubtree(subRangeIterator, func, iteratorState);
782
- subRangeIterator.detach(true);
783
- if (iteratorState.stop) {
784
- return;
785
- }
786
- }
787
- } else {
788
- // The whole node is selected, so we can use efficient DOM iteration to iterate over the node and its
789
- // descendant
790
- it = dom.createIterator(node);
791
- while ( (n = it.next()) ) {
792
- if (func(n) === false) {
793
- iteratorState.stop = true;
794
- return;
795
- }
796
- }
797
- }
798
- }
799
- }
800
-
801
- function deleteSubtree(iterator) {
802
- var subIterator;
803
- while (iterator.next()) {
804
- if (iterator.isPartiallySelectedSubtree()) {
805
- subIterator = iterator.getSubtreeIterator();
806
- deleteSubtree(subIterator);
807
- subIterator.detach(true);
808
- } else {
809
- iterator.remove();
810
- }
811
- }
812
- }
813
-
814
- function extractSubtree(iterator) {
815
-
816
- for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) {
817
-
818
-
819
- if (iterator.isPartiallySelectedSubtree()) {
820
- node = node.cloneNode(false);
821
- subIterator = iterator.getSubtreeIterator();
822
- node.appendChild(extractSubtree(subIterator));
823
- subIterator.detach(true);
824
- } else {
825
- iterator.remove();
826
- }
827
- if (node.nodeType == 10) { // DocumentType
828
- throw new DOMException("HIERARCHY_REQUEST_ERR");
829
- }
830
- frag.appendChild(node);
831
- }
832
- return frag;
833
- }
834
-
835
- function getNodesInRange(range, nodeTypes, filter) {
836
- //log.info("getNodesInRange, " + nodeTypes.join(","));
837
- var filterNodeTypes = !!(nodeTypes && nodeTypes.length), regex;
838
- var filterExists = !!filter;
839
- if (filterNodeTypes) {
840
- regex = new RegExp("^(" + nodeTypes.join("|") + ")$");
841
- }
842
-
843
- var nodes = [];
844
- iterateSubtree(new RangeIterator(range, false), function(node) {
845
- if ((!filterNodeTypes || regex.test(node.nodeType)) && (!filterExists || filter(node))) {
846
- nodes.push(node);
847
- }
848
- });
849
- return nodes;
850
- }
851
-
852
- function inspect(range) {
853
- var name = (typeof range.getName == "undefined") ? "Range" : range.getName();
854
- return "[" + name + "(" + dom.inspectNode(range.startContainer) + ":" + range.startOffset + ", " +
855
- dom.inspectNode(range.endContainer) + ":" + range.endOffset + ")]";
856
- }
857
-
858
- /*----------------------------------------------------------------------------------------------------------------*/
859
-
860
- // RangeIterator code partially borrows from IERange by Tim Ryan (http://github.com/timcameronryan/IERange)
861
-
862
- /**
863
- * @constructor
864
- */
865
- function RangeIterator(range, clonePartiallySelectedTextNodes) {
866
- this.range = range;
867
- this.clonePartiallySelectedTextNodes = clonePartiallySelectedTextNodes;
868
-
869
-
870
-
871
- if (!range.collapsed) {
872
- this.sc = range.startContainer;
873
- this.so = range.startOffset;
874
- this.ec = range.endContainer;
875
- this.eo = range.endOffset;
876
- var root = range.commonAncestorContainer;
877
-
878
- if (this.sc === this.ec && dom.isCharacterDataNode(this.sc)) {
879
- this.isSingleCharacterDataNode = true;
880
- this._first = this._last = this._next = this.sc;
881
- } else {
882
- this._first = this._next = (this.sc === root && !dom.isCharacterDataNode(this.sc)) ?
883
- this.sc.childNodes[this.so] : dom.getClosestAncestorIn(this.sc, root, true);
884
- this._last = (this.ec === root && !dom.isCharacterDataNode(this.ec)) ?
885
- this.ec.childNodes[this.eo - 1] : dom.getClosestAncestorIn(this.ec, root, true);
886
- }
887
-
888
- }
889
- }
890
-
891
- RangeIterator.prototype = {
892
- _current: null,
893
- _next: null,
894
- _first: null,
895
- _last: null,
896
- isSingleCharacterDataNode: false,
897
-
898
- reset: function() {
899
- this._current = null;
900
- this._next = this._first;
901
- },
902
-
903
- hasNext: function() {
904
- return !!this._next;
905
- },
906
-
907
- next: function() {
908
- // Move to next node
909
- var current = this._current = this._next;
910
- if (current) {
911
- this._next = (current !== this._last) ? current.nextSibling : null;
912
-
913
- // Check for partially selected text nodes
914
- if (dom.isCharacterDataNode(current) && this.clonePartiallySelectedTextNodes) {
915
- if (current === this.ec) {
916
-
917
- (current = current.cloneNode(true)).deleteData(this.eo, current.length - this.eo);
918
- }
919
- if (this._current === this.sc) {
920
-
921
- (current = current.cloneNode(true)).deleteData(0, this.so);
922
- }
923
- }
924
- }
925
-
926
- return current;
927
- },
928
-
929
- remove: function() {
930
- var current = this._current, start, end;
931
-
932
- if (dom.isCharacterDataNode(current) && (current === this.sc || current === this.ec)) {
933
- start = (current === this.sc) ? this.so : 0;
934
- end = (current === this.ec) ? this.eo : current.length;
935
- if (start != end) {
936
- current.deleteData(start, end - start);
937
- }
938
- } else {
939
- if (current.parentNode) {
940
- current.parentNode.removeChild(current);
941
- } else {
942
-
943
- }
944
- }
945
- },
946
-
947
- // Checks if the current node is partially selected
948
- isPartiallySelectedSubtree: function() {
949
- var current = this._current;
950
- return isNonTextPartiallySelected(current, this.range);
951
- },
952
-
953
- getSubtreeIterator: function() {
954
- var subRange;
955
- if (this.isSingleCharacterDataNode) {
956
- subRange = this.range.cloneRange();
957
- subRange.collapse();
958
- } else {
959
- subRange = new Range(getRangeDocument(this.range));
960
- var current = this._current;
961
- var startContainer = current, startOffset = 0, endContainer = current, endOffset = dom.getNodeLength(current);
962
-
963
- if (dom.isAncestorOf(current, this.sc, true)) {
964
- startContainer = this.sc;
965
- startOffset = this.so;
966
- }
967
- if (dom.isAncestorOf(current, this.ec, true)) {
968
- endContainer = this.ec;
969
- endOffset = this.eo;
970
- }
971
-
972
- updateBoundaries(subRange, startContainer, startOffset, endContainer, endOffset);
973
- }
974
- return new RangeIterator(subRange, this.clonePartiallySelectedTextNodes);
975
- },
976
-
977
- detach: function(detachRange) {
978
- if (detachRange) {
979
- this.range.detach();
980
- }
981
- this.range = this._current = this._next = this._first = this._last = this.sc = this.so = this.ec = this.eo = null;
982
- }
983
- };
984
-
985
- /*----------------------------------------------------------------------------------------------------------------*/
986
-
987
- // Exceptions
988
-
989
- /**
990
- * @constructor
991
- */
992
- function RangeException(codeName) {
993
- this.code = this[codeName];
994
- this.codeName = codeName;
995
- this.message = "RangeException: " + this.codeName;
996
- }
997
-
998
- RangeException.prototype = {
999
- BAD_BOUNDARYPOINTS_ERR: 1,
1000
- INVALID_NODE_TYPE_ERR: 2
1001
- };
1002
-
1003
- RangeException.prototype.toString = function() {
1004
- return this.message;
1005
- };
1006
-
1007
- /*----------------------------------------------------------------------------------------------------------------*/
1008
-
1009
- /**
1010
- * Currently iterates through all nodes in the range on creation until I think of a decent way to do it
1011
- * TODO: Look into making this a proper iterator, not requiring preloading everything first
1012
- * @constructor
1013
- */
1014
- function RangeNodeIterator(range, nodeTypes, filter) {
1015
- this.nodes = getNodesInRange(range, nodeTypes, filter);
1016
- this._next = this.nodes[0];
1017
- this._position = 0;
1018
- }
1019
-
1020
- RangeNodeIterator.prototype = {
1021
- _current: null,
1022
-
1023
- hasNext: function() {
1024
- return !!this._next;
1025
- },
1026
-
1027
- next: function() {
1028
- this._current = this._next;
1029
- this._next = this.nodes[ ++this._position ];
1030
- return this._current;
1031
- },
1032
-
1033
- detach: function() {
1034
- this._current = this._next = this.nodes = null;
1035
- }
1036
- };
1037
-
1038
- var beforeAfterNodeTypes = [1, 3, 4, 5, 7, 8, 10];
1039
- var rootContainerNodeTypes = [2, 9, 11];
1040
- var readonlyNodeTypes = [5, 6, 10, 12];
1041
- var insertableNodeTypes = [1, 3, 4, 5, 7, 8, 10, 11];
1042
- var surroundNodeTypes = [1, 3, 4, 5, 7, 8];
1043
-
1044
- function createAncestorFinder(nodeTypes) {
1045
- return function(node, selfIsAncestor) {
1046
- var t, n = selfIsAncestor ? node : node.parentNode;
1047
- while (n) {
1048
- t = n.nodeType;
1049
- if (dom.arrayContains(nodeTypes, t)) {
1050
- return n;
1051
- }
1052
- n = n.parentNode;
1053
- }
1054
- return null;
1055
- };
1056
- }
1057
-
1058
- var getRootContainer = dom.getRootContainer;
1059
- var getDocumentOrFragmentContainer = createAncestorFinder( [9, 11] );
1060
- var getReadonlyAncestor = createAncestorFinder(readonlyNodeTypes);
1061
- var getDocTypeNotationEntityAncestor = createAncestorFinder( [6, 10, 12] );
1062
-
1063
- function assertNoDocTypeNotationEntityAncestor(node, allowSelf) {
1064
- if (getDocTypeNotationEntityAncestor(node, allowSelf)) {
1065
- throw new RangeException("INVALID_NODE_TYPE_ERR");
1066
- }
1067
- }
1068
-
1069
- function assertNotDetached(range) {
1070
- if (!range.startContainer) {
1071
- throw new DOMException("INVALID_STATE_ERR");
1072
- }
1073
- }
1074
-
1075
- function assertValidNodeType(node, invalidTypes) {
1076
- if (!dom.arrayContains(invalidTypes, node.nodeType)) {
1077
- throw new RangeException("INVALID_NODE_TYPE_ERR");
1078
- }
1079
- }
1080
-
1081
- function assertValidOffset(node, offset) {
1082
- if (offset < 0 || offset > (dom.isCharacterDataNode(node) ? node.length : node.childNodes.length)) {
1083
- throw new DOMException("INDEX_SIZE_ERR");
1084
- }
1085
- }
1086
-
1087
- function assertSameDocumentOrFragment(node1, node2) {
1088
- if (getDocumentOrFragmentContainer(node1, true) !== getDocumentOrFragmentContainer(node2, true)) {
1089
- throw new DOMException("WRONG_DOCUMENT_ERR");
1090
- }
1091
- }
1092
-
1093
- function assertNodeNotReadOnly(node) {
1094
- if (getReadonlyAncestor(node, true)) {
1095
- throw new DOMException("NO_MODIFICATION_ALLOWED_ERR");
1096
- }
1097
- }
1098
-
1099
- function assertNode(node, codeName) {
1100
- if (!node) {
1101
- throw new DOMException(codeName);
1102
- }
1103
- }
1104
-
1105
- function isOrphan(node) {
1106
- return !dom.arrayContains(rootContainerNodeTypes, node.nodeType) && !getDocumentOrFragmentContainer(node, true);
1107
- }
1108
-
1109
- function isValidOffset(node, offset) {
1110
- return offset <= (dom.isCharacterDataNode(node) ? node.length : node.childNodes.length);
1111
- }
1112
-
1113
- function assertRangeValid(range) {
1114
- assertNotDetached(range);
1115
- if (isOrphan(range.startContainer) || isOrphan(range.endContainer) ||
1116
- !isValidOffset(range.startContainer, range.startOffset) ||
1117
- !isValidOffset(range.endContainer, range.endOffset)) {
1118
- throw new Error("Range error: Range is no longer valid after DOM mutation (" + range.inspect() + ")");
1119
- }
1120
- }
1121
-
1122
- /*----------------------------------------------------------------------------------------------------------------*/
1123
-
1124
- // Test the browser's innerHTML support to decide how to implement createContextualFragment
1125
- var styleEl = document.createElement("style");
1126
- var htmlParsingConforms = false;
1127
- try {
1128
- styleEl.innerHTML = "<b>x</b>";
1129
- htmlParsingConforms = (styleEl.firstChild.nodeType == 3); // Opera incorrectly creates an element node
1130
- } catch (e) {
1131
- // IE 6 and 7 throw
1132
- }
1133
-
1134
- api.features.htmlParsingConforms = htmlParsingConforms;
1135
-
1136
- var createContextualFragment = htmlParsingConforms ?
1137
-
1138
- // Implementation as per HTML parsing spec, trusting in the browser's implementation of innerHTML. See
1139
- // discussion and base code for this implementation at issue 67.
1140
- // Spec: http://html5.org/specs/dom-parsing.html#extensions-to-the-range-interface
1141
- // Thanks to Aleks Williams.
1142
- function(fragmentStr) {
1143
- // "Let node the context object's start's node."
1144
- var node = this.startContainer;
1145
- var doc = dom.getDocument(node);
1146
-
1147
- // "If the context object's start's node is null, raise an INVALID_STATE_ERR
1148
- // exception and abort these steps."
1149
- if (!node) {
1150
- throw new DOMException("INVALID_STATE_ERR");
1151
- }
1152
-
1153
- // "Let element be as follows, depending on node's interface:"
1154
- // Document, Document Fragment: null
1155
- var el = null;
1156
-
1157
- // "Element: node"
1158
- if (node.nodeType == 1) {
1159
- el = node;
1160
-
1161
- // "Text, Comment: node's parentElement"
1162
- } else if (dom.isCharacterDataNode(node)) {
1163
- el = dom.parentElement(node);
1164
- }
1165
-
1166
- // "If either element is null or element's ownerDocument is an HTML document
1167
- // and element's local name is "html" and element's namespace is the HTML
1168
- // namespace"
1169
- if (el === null || (
1170
- el.nodeName == "HTML"
1171
- && dom.isHtmlNamespace(dom.getDocument(el).documentElement)
1172
- && dom.isHtmlNamespace(el)
1173
- )) {
1174
-
1175
- // "let element be a new Element with "body" as its local name and the HTML
1176
- // namespace as its namespace.""
1177
- el = doc.createElement("body");
1178
- } else {
1179
- el = el.cloneNode(false);
1180
- }
1181
-
1182
- // "If the node's document is an HTML document: Invoke the HTML fragment parsing algorithm."
1183
- // "If the node's document is an XML document: Invoke the XML fragment parsing algorithm."
1184
- // "In either case, the algorithm must be invoked with fragment as the input
1185
- // and element as the context element."
1186
- el.innerHTML = fragmentStr;
1187
-
1188
- // "If this raises an exception, then abort these steps. Otherwise, let new
1189
- // children be the nodes returned."
1190
-
1191
- // "Let fragment be a new DocumentFragment."
1192
- // "Append all new children to fragment."
1193
- // "Return fragment."
1194
- return dom.fragmentFromNodeChildren(el);
1195
- } :
1196
-
1197
- // In this case, innerHTML cannot be trusted, so fall back to a simpler, non-conformant implementation that
1198
- // previous versions of Rangy used (with the exception of using a body element rather than a div)
1199
- function(fragmentStr) {
1200
- assertNotDetached(this);
1201
- var doc = getRangeDocument(this);
1202
- var el = doc.createElement("body");
1203
- el.innerHTML = fragmentStr;
1204
-
1205
- return dom.fragmentFromNodeChildren(el);
1206
- };
1207
-
1208
- /*----------------------------------------------------------------------------------------------------------------*/
1209
-
1210
- var rangeProperties = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed",
1211
- "commonAncestorContainer"];
1212
-
1213
- var s2s = 0, s2e = 1, e2e = 2, e2s = 3;
1214
- var n_b = 0, n_a = 1, n_b_a = 2, n_i = 3;
1215
-
1216
- function RangePrototype() {}
1217
-
1218
- RangePrototype.prototype = {
1219
- attachListener: function(type, listener) {
1220
- this._listeners[type].push(listener);
1221
- },
1222
-
1223
- compareBoundaryPoints: function(how, range) {
1224
- assertRangeValid(this);
1225
- assertSameDocumentOrFragment(this.startContainer, range.startContainer);
1226
-
1227
- var nodeA, offsetA, nodeB, offsetB;
1228
- var prefixA = (how == e2s || how == s2s) ? "start" : "end";
1229
- var prefixB = (how == s2e || how == s2s) ? "start" : "end";
1230
- nodeA = this[prefixA + "Container"];
1231
- offsetA = this[prefixA + "Offset"];
1232
- nodeB = range[prefixB + "Container"];
1233
- offsetB = range[prefixB + "Offset"];
1234
- return dom.comparePoints(nodeA, offsetA, nodeB, offsetB);
1235
- },
1236
-
1237
- insertNode: function(node) {
1238
- assertRangeValid(this);
1239
- assertValidNodeType(node, insertableNodeTypes);
1240
- assertNodeNotReadOnly(this.startContainer);
1241
-
1242
- if (dom.isAncestorOf(node, this.startContainer, true)) {
1243
- throw new DOMException("HIERARCHY_REQUEST_ERR");
1244
- }
1245
-
1246
- // No check for whether the container of the start of the Range is of a type that does not allow
1247
- // children of the type of node: the browser's DOM implementation should do this for us when we attempt
1248
- // to add the node
1249
-
1250
- var firstNodeInserted = insertNodeAtPosition(node, this.startContainer, this.startOffset);
1251
- this.setStartBefore(firstNodeInserted);
1252
- },
1253
-
1254
- cloneContents: function() {
1255
- assertRangeValid(this);
1256
-
1257
- var clone, frag;
1258
- if (this.collapsed) {
1259
- return getRangeDocument(this).createDocumentFragment();
1260
- } else {
1261
- if (this.startContainer === this.endContainer && dom.isCharacterDataNode(this.startContainer)) {
1262
- clone = this.startContainer.cloneNode(true);
1263
- clone.data = clone.data.slice(this.startOffset, this.endOffset);
1264
- frag = getRangeDocument(this).createDocumentFragment();
1265
- frag.appendChild(clone);
1266
- return frag;
1267
- } else {
1268
- var iterator = new RangeIterator(this, true);
1269
- clone = cloneSubtree(iterator);
1270
- iterator.detach();
1271
- }
1272
- return clone;
1273
- }
1274
- },
1275
-
1276
- canSurroundContents: function() {
1277
- assertRangeValid(this);
1278
- assertNodeNotReadOnly(this.startContainer);
1279
- assertNodeNotReadOnly(this.endContainer);
1280
-
1281
- // Check if the contents can be surrounded. Specifically, this means whether the range partially selects
1282
- // no non-text nodes.
1283
- var iterator = new RangeIterator(this, true);
1284
- var boundariesInvalid = (iterator._first && (isNonTextPartiallySelected(iterator._first, this)) ||
1285
- (iterator._last && isNonTextPartiallySelected(iterator._last, this)));
1286
- iterator.detach();
1287
- return !boundariesInvalid;
1288
- },
1289
-
1290
- surroundContents: function(node) {
1291
- assertValidNodeType(node, surroundNodeTypes);
1292
-
1293
- if (!this.canSurroundContents()) {
1294
- throw new RangeException("BAD_BOUNDARYPOINTS_ERR");
1295
- }
1296
-
1297
- // Extract the contents
1298
- var content = this.extractContents();
1299
-
1300
- // Clear the children of the node
1301
- if (node.hasChildNodes()) {
1302
- while (node.lastChild) {
1303
- node.removeChild(node.lastChild);
1304
- }
1305
- }
1306
-
1307
- // Insert the new node and add the extracted contents
1308
- insertNodeAtPosition(node, this.startContainer, this.startOffset);
1309
- node.appendChild(content);
1310
-
1311
- this.selectNode(node);
1312
- },
1313
-
1314
- cloneRange: function() {
1315
- assertRangeValid(this);
1316
- var range = new Range(getRangeDocument(this));
1317
- var i = rangeProperties.length, prop;
1318
- while (i--) {
1319
- prop = rangeProperties[i];
1320
- range[prop] = this[prop];
1321
- }
1322
- return range;
1323
- },
1324
-
1325
- toString: function() {
1326
- assertRangeValid(this);
1327
- var sc = this.startContainer;
1328
- if (sc === this.endContainer && dom.isCharacterDataNode(sc)) {
1329
- return (sc.nodeType == 3 || sc.nodeType == 4) ? sc.data.slice(this.startOffset, this.endOffset) : "";
1330
- } else {
1331
- var textBits = [], iterator = new RangeIterator(this, true);
1332
-
1333
- iterateSubtree(iterator, function(node) {
1334
- // Accept only text or CDATA nodes, not comments
1335
-
1336
- if (node.nodeType == 3 || node.nodeType == 4) {
1337
- textBits.push(node.data);
1338
- }
1339
- });
1340
- iterator.detach();
1341
- return textBits.join("");
1342
- }
1343
- },
1344
-
1345
- // The methods below are all non-standard. The following batch were introduced by Mozilla but have since
1346
- // been removed from Mozilla.
1347
-
1348
- compareNode: function(node) {
1349
- assertRangeValid(this);
1350
-
1351
- var parent = node.parentNode;
1352
- var nodeIndex = dom.getNodeIndex(node);
1353
-
1354
- if (!parent) {
1355
- throw new DOMException("NOT_FOUND_ERR");
1356
- }
1357
-
1358
- var startComparison = this.comparePoint(parent, nodeIndex),
1359
- endComparison = this.comparePoint(parent, nodeIndex + 1);
1360
-
1361
- if (startComparison < 0) { // Node starts before
1362
- return (endComparison > 0) ? n_b_a : n_b;
1363
- } else {
1364
- return (endComparison > 0) ? n_a : n_i;
1365
- }
1366
- },
1367
-
1368
- comparePoint: function(node, offset) {
1369
- assertRangeValid(this);
1370
- assertNode(node, "HIERARCHY_REQUEST_ERR");
1371
- assertSameDocumentOrFragment(node, this.startContainer);
1372
-
1373
- if (dom.comparePoints(node, offset, this.startContainer, this.startOffset) < 0) {
1374
- return -1;
1375
- } else if (dom.comparePoints(node, offset, this.endContainer, this.endOffset) > 0) {
1376
- return 1;
1377
- }
1378
- return 0;
1379
- },
1380
-
1381
- createContextualFragment: createContextualFragment,
1382
-
1383
- toHtml: function() {
1384
- assertRangeValid(this);
1385
- var container = getRangeDocument(this).createElement("div");
1386
- container.appendChild(this.cloneContents());
1387
- return container.innerHTML;
1388
- },
1389
-
1390
- // touchingIsIntersecting determines whether this method considers a node that borders a range intersects
1391
- // with it (as in WebKit) or not (as in Gecko pre-1.9, and the default)
1392
- intersectsNode: function(node, touchingIsIntersecting) {
1393
- assertRangeValid(this);
1394
- assertNode(node, "NOT_FOUND_ERR");
1395
- if (dom.getDocument(node) !== getRangeDocument(this)) {
1396
- return false;
1397
- }
1398
-
1399
- var parent = node.parentNode, offset = dom.getNodeIndex(node);
1400
- assertNode(parent, "NOT_FOUND_ERR");
1401
-
1402
- var startComparison = dom.comparePoints(parent, offset, this.endContainer, this.endOffset),
1403
- endComparison = dom.comparePoints(parent, offset + 1, this.startContainer, this.startOffset);
1404
-
1405
- return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0;
1406
- },
1407
-
1408
-
1409
- isPointInRange: function(node, offset) {
1410
- assertRangeValid(this);
1411
- assertNode(node, "HIERARCHY_REQUEST_ERR");
1412
- assertSameDocumentOrFragment(node, this.startContainer);
1413
-
1414
- return (dom.comparePoints(node, offset, this.startContainer, this.startOffset) >= 0) &&
1415
- (dom.comparePoints(node, offset, this.endContainer, this.endOffset) <= 0);
1416
- },
1417
-
1418
- // The methods below are non-standard and invented by me.
1419
-
1420
- // Sharing a boundary start-to-end or end-to-start does not count as intersection.
1421
- intersectsRange: function(range, touchingIsIntersecting) {
1422
- assertRangeValid(this);
1423
-
1424
- if (getRangeDocument(range) != getRangeDocument(this)) {
1425
- throw new DOMException("WRONG_DOCUMENT_ERR");
1426
- }
1427
-
1428
- var startComparison = dom.comparePoints(this.startContainer, this.startOffset, range.endContainer, range.endOffset),
1429
- endComparison = dom.comparePoints(this.endContainer, this.endOffset, range.startContainer, range.startOffset);
1430
-
1431
- return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0;
1432
- },
1433
-
1434
- intersection: function(range) {
1435
- if (this.intersectsRange(range)) {
1436
- var startComparison = dom.comparePoints(this.startContainer, this.startOffset, range.startContainer, range.startOffset),
1437
- endComparison = dom.comparePoints(this.endContainer, this.endOffset, range.endContainer, range.endOffset);
1438
-
1439
- var intersectionRange = this.cloneRange();
1440
-
1441
- if (startComparison == -1) {
1442
- intersectionRange.setStart(range.startContainer, range.startOffset);
1443
- }
1444
- if (endComparison == 1) {
1445
- intersectionRange.setEnd(range.endContainer, range.endOffset);
1446
- }
1447
- return intersectionRange;
1448
- }
1449
- return null;
1450
- },
1451
-
1452
- union: function(range) {
1453
- if (this.intersectsRange(range, true)) {
1454
- var unionRange = this.cloneRange();
1455
- if (dom.comparePoints(range.startContainer, range.startOffset, this.startContainer, this.startOffset) == -1) {
1456
- unionRange.setStart(range.startContainer, range.startOffset);
1457
- }
1458
- if (dom.comparePoints(range.endContainer, range.endOffset, this.endContainer, this.endOffset) == 1) {
1459
- unionRange.setEnd(range.endContainer, range.endOffset);
1460
- }
1461
- return unionRange;
1462
- } else {
1463
- throw new RangeException("Ranges do not intersect");
1464
- }
1465
- },
1466
-
1467
- containsNode: function(node, allowPartial) {
1468
- if (allowPartial) {
1469
- return this.intersectsNode(node, false);
1470
- } else {
1471
- return this.compareNode(node) == n_i;
1472
- }
1473
- },
1474
-
1475
- containsNodeContents: function(node) {
1476
- return this.comparePoint(node, 0) >= 0 && this.comparePoint(node, dom.getNodeLength(node)) <= 0;
1477
- },
1478
-
1479
- containsRange: function(range) {
1480
- return this.intersection(range).equals(range);
1481
- },
1482
-
1483
- containsNodeText: function(node) {
1484
- var nodeRange = this.cloneRange();
1485
- nodeRange.selectNode(node);
1486
- var textNodes = nodeRange.getNodes([3]);
1487
- if (textNodes.length > 0) {
1488
- nodeRange.setStart(textNodes[0], 0);
1489
- var lastTextNode = textNodes.pop();
1490
- nodeRange.setEnd(lastTextNode, lastTextNode.length);
1491
- var contains = this.containsRange(nodeRange);
1492
- nodeRange.detach();
1493
- return contains;
1494
- } else {
1495
- return this.containsNodeContents(node);
1496
- }
1497
- },
1498
-
1499
- createNodeIterator: function(nodeTypes, filter) {
1500
- assertRangeValid(this);
1501
- return new RangeNodeIterator(this, nodeTypes, filter);
1502
- },
1503
-
1504
- getNodes: function(nodeTypes, filter) {
1505
- assertRangeValid(this);
1506
- return getNodesInRange(this, nodeTypes, filter);
1507
- },
1508
-
1509
- getDocument: function() {
1510
- return getRangeDocument(this);
1511
- },
1512
-
1513
- collapseBefore: function(node) {
1514
- assertNotDetached(this);
1515
-
1516
- this.setEndBefore(node);
1517
- this.collapse(false);
1518
- },
1519
-
1520
- collapseAfter: function(node) {
1521
- assertNotDetached(this);
1522
-
1523
- this.setStartAfter(node);
1524
- this.collapse(true);
1525
- },
1526
-
1527
- getName: function() {
1528
- return "DomRange";
1529
- },
1530
-
1531
- equals: function(range) {
1532
- return Range.rangesEqual(this, range);
1533
- },
1534
-
1535
- inspect: function() {
1536
- return inspect(this);
1537
- }
1538
- };
1539
-
1540
- function copyComparisonConstantsToObject(obj) {
1541
- obj.START_TO_START = s2s;
1542
- obj.START_TO_END = s2e;
1543
- obj.END_TO_END = e2e;
1544
- obj.END_TO_START = e2s;
1545
-
1546
- obj.NODE_BEFORE = n_b;
1547
- obj.NODE_AFTER = n_a;
1548
- obj.NODE_BEFORE_AND_AFTER = n_b_a;
1549
- obj.NODE_INSIDE = n_i;
1550
- }
1551
-
1552
- function copyComparisonConstants(constructor) {
1553
- copyComparisonConstantsToObject(constructor);
1554
- copyComparisonConstantsToObject(constructor.prototype);
1555
- }
1556
-
1557
- function createRangeContentRemover(remover, boundaryUpdater) {
1558
- return function() {
1559
- assertRangeValid(this);
1560
-
1561
- var sc = this.startContainer, so = this.startOffset, root = this.commonAncestorContainer;
1562
-
1563
- var iterator = new RangeIterator(this, true);
1564
-
1565
- // Work out where to position the range after content removal
1566
- var node, boundary;
1567
- if (sc !== root) {
1568
- node = dom.getClosestAncestorIn(sc, root, true);
1569
- boundary = getBoundaryAfterNode(node);
1570
- sc = boundary.node;
1571
- so = boundary.offset;
1572
- }
1573
-
1574
- // Check none of the range is read-only
1575
- iterateSubtree(iterator, assertNodeNotReadOnly);
1576
-
1577
- iterator.reset();
1578
-
1579
- // Remove the content
1580
- var returnValue = remover(iterator);
1581
- iterator.detach();
1582
-
1583
- // Move to the new position
1584
- boundaryUpdater(this, sc, so, sc, so);
1585
-
1586
- return returnValue;
1587
- };
1588
- }
1589
-
1590
- function createPrototypeRange(constructor, boundaryUpdater, detacher) {
1591
- function createBeforeAfterNodeSetter(isBefore, isStart) {
1592
- return function(node) {
1593
- assertNotDetached(this);
1594
- assertValidNodeType(node, beforeAfterNodeTypes);
1595
- assertValidNodeType(getRootContainer(node), rootContainerNodeTypes);
1596
-
1597
- var boundary = (isBefore ? getBoundaryBeforeNode : getBoundaryAfterNode)(node);
1598
- (isStart ? setRangeStart : setRangeEnd)(this, boundary.node, boundary.offset);
1599
- };
1600
- }
1601
-
1602
- function setRangeStart(range, node, offset) {
1603
- var ec = range.endContainer, eo = range.endOffset;
1604
- if (node !== range.startContainer || offset !== this.startOffset) {
1605
- // Check the root containers of the range and the new boundary, and also check whether the new boundary
1606
- // is after the current end. In either case, collapse the range to the new position
1607
- if (getRootContainer(node) != getRootContainer(ec) || dom.comparePoints(node, offset, ec, eo) == 1) {
1608
- ec = node;
1609
- eo = offset;
1610
- }
1611
- boundaryUpdater(range, node, offset, ec, eo);
1612
- }
1613
- }
1614
-
1615
- function setRangeEnd(range, node, offset) {
1616
- var sc = range.startContainer, so = range.startOffset;
1617
- if (node !== range.endContainer || offset !== this.endOffset) {
1618
- // Check the root containers of the range and the new boundary, and also check whether the new boundary
1619
- // is after the current end. In either case, collapse the range to the new position
1620
- if (getRootContainer(node) != getRootContainer(sc) || dom.comparePoints(node, offset, sc, so) == -1) {
1621
- sc = node;
1622
- so = offset;
1623
- }
1624
- boundaryUpdater(range, sc, so, node, offset);
1625
- }
1626
- }
1627
-
1628
- function setRangeStartAndEnd(range, node, offset) {
1629
- if (node !== range.startContainer || offset !== this.startOffset || node !== range.endContainer || offset !== this.endOffset) {
1630
- boundaryUpdater(range, node, offset, node, offset);
1631
- }
1632
- }
1633
-
1634
- constructor.prototype = new RangePrototype();
1635
-
1636
- api.util.extend(constructor.prototype, {
1637
- setStart: function(node, offset) {
1638
- assertNotDetached(this);
1639
- assertNoDocTypeNotationEntityAncestor(node, true);
1640
- assertValidOffset(node, offset);
1641
-
1642
- setRangeStart(this, node, offset);
1643
- },
1644
-
1645
- setEnd: function(node, offset) {
1646
- assertNotDetached(this);
1647
- assertNoDocTypeNotationEntityAncestor(node, true);
1648
- assertValidOffset(node, offset);
1649
-
1650
- setRangeEnd(this, node, offset);
1651
- },
1652
-
1653
- setStartBefore: createBeforeAfterNodeSetter(true, true),
1654
- setStartAfter: createBeforeAfterNodeSetter(false, true),
1655
- setEndBefore: createBeforeAfterNodeSetter(true, false),
1656
- setEndAfter: createBeforeAfterNodeSetter(false, false),
1657
-
1658
- collapse: function(isStart) {
1659
- assertRangeValid(this);
1660
- if (isStart) {
1661
- boundaryUpdater(this, this.startContainer, this.startOffset, this.startContainer, this.startOffset);
1662
- } else {
1663
- boundaryUpdater(this, this.endContainer, this.endOffset, this.endContainer, this.endOffset);
1664
- }
1665
- },
1666
-
1667
- selectNodeContents: function(node) {
1668
- // This doesn't seem well specified: the spec talks only about selecting the node's contents, which
1669
- // could be taken to mean only its children. However, browsers implement this the same as selectNode for
1670
- // text nodes, so I shall do likewise
1671
- assertNotDetached(this);
1672
- assertNoDocTypeNotationEntityAncestor(node, true);
1673
-
1674
- boundaryUpdater(this, node, 0, node, dom.getNodeLength(node));
1675
- },
1676
-
1677
- selectNode: function(node) {
1678
- assertNotDetached(this);
1679
- assertNoDocTypeNotationEntityAncestor(node, false);
1680
- assertValidNodeType(node, beforeAfterNodeTypes);
1681
-
1682
- var start = getBoundaryBeforeNode(node), end = getBoundaryAfterNode(node);
1683
- boundaryUpdater(this, start.node, start.offset, end.node, end.offset);
1684
- },
1685
-
1686
- extractContents: createRangeContentRemover(extractSubtree, boundaryUpdater),
1687
-
1688
- deleteContents: createRangeContentRemover(deleteSubtree, boundaryUpdater),
1689
-
1690
- canSurroundContents: function() {
1691
- assertRangeValid(this);
1692
- assertNodeNotReadOnly(this.startContainer);
1693
- assertNodeNotReadOnly(this.endContainer);
1694
-
1695
- // Check if the contents can be surrounded. Specifically, this means whether the range partially selects
1696
- // no non-text nodes.
1697
- var iterator = new RangeIterator(this, true);
1698
- var boundariesInvalid = (iterator._first && (isNonTextPartiallySelected(iterator._first, this)) ||
1699
- (iterator._last && isNonTextPartiallySelected(iterator._last, this)));
1700
- iterator.detach();
1701
- return !boundariesInvalid;
1702
- },
1703
-
1704
- detach: function() {
1705
- detacher(this);
1706
- },
1707
-
1708
- splitBoundaries: function() {
1709
- assertRangeValid(this);
1710
-
1711
-
1712
- var sc = this.startContainer, so = this.startOffset, ec = this.endContainer, eo = this.endOffset;
1713
- var startEndSame = (sc === ec);
1714
-
1715
- if (dom.isCharacterDataNode(ec) && eo > 0 && eo < ec.length) {
1716
- dom.splitDataNode(ec, eo);
1717
-
1718
- }
1719
-
1720
- if (dom.isCharacterDataNode(sc) && so > 0 && so < sc.length) {
1721
-
1722
- sc = dom.splitDataNode(sc, so);
1723
- if (startEndSame) {
1724
- eo -= so;
1725
- ec = sc;
1726
- } else if (ec == sc.parentNode && eo >= dom.getNodeIndex(sc)) {
1727
- eo++;
1728
- }
1729
- so = 0;
1730
-
1731
- }
1732
- boundaryUpdater(this, sc, so, ec, eo);
1733
- },
1734
-
1735
- normalizeBoundaries: function() {
1736
- assertRangeValid(this);
1737
-
1738
- var sc = this.startContainer, so = this.startOffset, ec = this.endContainer, eo = this.endOffset;
1739
-
1740
- var mergeForward = function(node) {
1741
- var sibling = node.nextSibling;
1742
- if (sibling && sibling.nodeType == node.nodeType) {
1743
- ec = node;
1744
- eo = node.length;
1745
- node.appendData(sibling.data);
1746
- sibling.parentNode.removeChild(sibling);
1747
- }
1748
- };
1749
-
1750
- var mergeBackward = function(node) {
1751
- var sibling = node.previousSibling;
1752
- if (sibling && sibling.nodeType == node.nodeType) {
1753
- sc = node;
1754
- var nodeLength = node.length;
1755
- so = sibling.length;
1756
- node.insertData(0, sibling.data);
1757
- sibling.parentNode.removeChild(sibling);
1758
- if (sc == ec) {
1759
- eo += so;
1760
- ec = sc;
1761
- } else if (ec == node.parentNode) {
1762
- var nodeIndex = dom.getNodeIndex(node);
1763
- if (eo == nodeIndex) {
1764
- ec = node;
1765
- eo = nodeLength;
1766
- } else if (eo > nodeIndex) {
1767
- eo--;
1768
- }
1769
- }
1770
- }
1771
- };
1772
-
1773
- var normalizeStart = true;
1774
-
1775
- if (dom.isCharacterDataNode(ec)) {
1776
- if (ec.length == eo) {
1777
- mergeForward(ec);
1778
- }
1779
- } else {
1780
- if (eo > 0) {
1781
- var endNode = ec.childNodes[eo - 1];
1782
- if (endNode && dom.isCharacterDataNode(endNode)) {
1783
- mergeForward(endNode);
1784
- }
1785
- }
1786
- normalizeStart = !this.collapsed;
1787
- }
1788
-
1789
- if (normalizeStart) {
1790
- if (dom.isCharacterDataNode(sc)) {
1791
- if (so == 0) {
1792
- mergeBackward(sc);
1793
- }
1794
- } else {
1795
- if (so < sc.childNodes.length) {
1796
- var startNode = sc.childNodes[so];
1797
- if (startNode && dom.isCharacterDataNode(startNode)) {
1798
- mergeBackward(startNode);
1799
- }
1800
- }
1801
- }
1802
- } else {
1803
- sc = ec;
1804
- so = eo;
1805
- }
1806
-
1807
- boundaryUpdater(this, sc, so, ec, eo);
1808
- },
1809
-
1810
- collapseToPoint: function(node, offset) {
1811
- assertNotDetached(this);
1812
-
1813
- assertNoDocTypeNotationEntityAncestor(node, true);
1814
- assertValidOffset(node, offset);
1815
-
1816
- setRangeStartAndEnd(this, node, offset);
1817
- }
1818
- });
1819
-
1820
- copyComparisonConstants(constructor);
1821
- }
1822
-
1823
- /*----------------------------------------------------------------------------------------------------------------*/
1824
-
1825
- // Updates commonAncestorContainer and collapsed after boundary change
1826
- function updateCollapsedAndCommonAncestor(range) {
1827
- range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset);
1828
- range.commonAncestorContainer = range.collapsed ?
1829
- range.startContainer : dom.getCommonAncestor(range.startContainer, range.endContainer);
1830
- }
1831
-
1832
- function updateBoundaries(range, startContainer, startOffset, endContainer, endOffset) {
1833
- var startMoved = (range.startContainer !== startContainer || range.startOffset !== startOffset);
1834
- var endMoved = (range.endContainer !== endContainer || range.endOffset !== endOffset);
1835
-
1836
- range.startContainer = startContainer;
1837
- range.startOffset = startOffset;
1838
- range.endContainer = endContainer;
1839
- range.endOffset = endOffset;
1840
-
1841
- updateCollapsedAndCommonAncestor(range);
1842
- dispatchEvent(range, "boundarychange", {startMoved: startMoved, endMoved: endMoved});
1843
- }
1844
-
1845
- function detach(range) {
1846
- assertNotDetached(range);
1847
- range.startContainer = range.startOffset = range.endContainer = range.endOffset = null;
1848
- range.collapsed = range.commonAncestorContainer = null;
1849
- dispatchEvent(range, "detach", null);
1850
- range._listeners = null;
1851
- }
1852
-
1853
- /**
1854
- * @constructor
1855
- */
1856
- function Range(doc) {
1857
- this.startContainer = doc;
1858
- this.startOffset = 0;
1859
- this.endContainer = doc;
1860
- this.endOffset = 0;
1861
- this._listeners = {
1862
- boundarychange: [],
1863
- detach: []
1864
- };
1865
- updateCollapsedAndCommonAncestor(this);
1866
- }
1867
-
1868
- createPrototypeRange(Range, updateBoundaries, detach);
1869
-
1870
- api.rangePrototype = RangePrototype.prototype;
1871
-
1872
- Range.rangeProperties = rangeProperties;
1873
- Range.RangeIterator = RangeIterator;
1874
- Range.copyComparisonConstants = copyComparisonConstants;
1875
- Range.createPrototypeRange = createPrototypeRange;
1876
- Range.inspect = inspect;
1877
- Range.getRangeDocument = getRangeDocument;
1878
- Range.rangesEqual = function(r1, r2) {
1879
- return r1.startContainer === r2.startContainer &&
1880
- r1.startOffset === r2.startOffset &&
1881
- r1.endContainer === r2.endContainer &&
1882
- r1.endOffset === r2.endOffset;
1883
- };
1884
-
1885
- api.DomRange = Range;
1886
- api.RangeException = RangeException;
1887
- });rangy.createModule("WrappedRange", function(api, module) {
1888
- api.requireModules( ["DomUtil", "DomRange"] );
1889
-
1890
- /**
1891
- * @constructor
1892
- */
1893
- var WrappedRange;
1894
- var dom = api.dom;
1895
- var DomPosition = dom.DomPosition;
1896
- var DomRange = api.DomRange;
1897
-
1898
-
1899
-
1900
- /*----------------------------------------------------------------------------------------------------------------*/
1901
-
1902
- /*
1903
- This is a workaround for a bug where IE returns the wrong container element from the TextRange's parentElement()
1904
- method. For example, in the following (where pipes denote the selection boundaries):
1905
-
1906
- <ul id="ul"><li id="a">| a </li><li id="b"> b |</li></ul>
1907
-
1908
- var range = document.selection.createRange();
1909
- alert(range.parentElement().id); // Should alert "ul" but alerts "b"
1910
-
1911
- This method returns the common ancestor node of the following:
1912
- - the parentElement() of the textRange
1913
- - the parentElement() of the textRange after calling collapse(true)
1914
- - the parentElement() of the textRange after calling collapse(false)
1915
- */
1916
- function getTextRangeContainerElement(textRange) {
1917
- var parentEl = textRange.parentElement();
1918
-
1919
- var range = textRange.duplicate();
1920
- range.collapse(true);
1921
- var startEl = range.parentElement();
1922
- range = textRange.duplicate();
1923
- range.collapse(false);
1924
- var endEl = range.parentElement();
1925
- var startEndContainer = (startEl == endEl) ? startEl : dom.getCommonAncestor(startEl, endEl);
1926
-
1927
- return startEndContainer == parentEl ? startEndContainer : dom.getCommonAncestor(parentEl, startEndContainer);
1928
- }
1929
-
1930
- function textRangeIsCollapsed(textRange) {
1931
- return textRange.compareEndPoints("StartToEnd", textRange) == 0;
1932
- }
1933
-
1934
- // Gets the boundary of a TextRange expressed as a node and an offset within that node. This function started out as
1935
- // an improved version of code found in Tim Cameron Ryan's IERange (http://code.google.com/p/ierange/) but has
1936
- // grown, fixing problems with line breaks in preformatted text, adding workaround for IE TextRange bugs, handling
1937
- // for inputs and images, plus optimizations.
1938
- function getTextRangeBoundaryPosition(textRange, wholeRangeContainerElement, isStart, isCollapsed) {
1939
- var workingRange = textRange.duplicate();
1940
-
1941
- workingRange.collapse(isStart);
1942
- var containerElement = workingRange.parentElement();
1943
-
1944
- // Sometimes collapsing a TextRange that's at the start of a text node can move it into the previous node, so
1945
- // check for that
1946
- // TODO: Find out when. Workaround for wholeRangeContainerElement may break this
1947
- if (!dom.isAncestorOf(wholeRangeContainerElement, containerElement, true)) {
1948
- containerElement = wholeRangeContainerElement;
1949
-
1950
- }
1951
-
1952
-
1953
-
1954
- // Deal with nodes that cannot "contain rich HTML markup". In practice, this means form inputs, images and
1955
- // similar. See http://msdn.microsoft.com/en-us/library/aa703950%28VS.85%29.aspx
1956
- if (!containerElement.canHaveHTML) {
1957
- return new DomPosition(containerElement.parentNode, dom.getNodeIndex(containerElement));
1958
- }
1959
-
1960
- var workingNode = dom.getDocument(containerElement).createElement("span");
1961
- var comparison, workingComparisonType = isStart ? "StartToStart" : "StartToEnd";
1962
- var previousNode, nextNode, boundaryPosition, boundaryNode;
1963
-
1964
- // Move the working range through the container's children, starting at the end and working backwards, until the
1965
- // working range reaches or goes past the boundary we're interested in
1966
- do {
1967
- containerElement.insertBefore(workingNode, workingNode.previousSibling);
1968
- workingRange.moveToElementText(workingNode);
1969
- } while ( (comparison = workingRange.compareEndPoints(workingComparisonType, textRange)) > 0 &&
1970
- workingNode.previousSibling);
1971
-
1972
- // We've now reached or gone past the boundary of the text range we're interested in
1973
- // so have identified the node we want
1974
- boundaryNode = workingNode.nextSibling;
1975
-
1976
- if (comparison == -1 && boundaryNode && dom.isCharacterDataNode(boundaryNode)) {
1977
- // This is a character data node (text, comment, cdata). The working range is collapsed at the start of the
1978
- // node containing the text range's boundary, so we move the end of the working range to the boundary point
1979
- // and measure the length of its text to get the boundary's offset within the node.
1980
- workingRange.setEndPoint(isStart ? "EndToStart" : "EndToEnd", textRange);
1981
-
1982
-
1983
- var offset;
1984
-
1985
- if (/[\r\n]/.test(boundaryNode.data)) {
1986
- /*
1987
- For the particular case of a boundary within a text node containing line breaks (within a <pre> element,
1988
- for example), we need a slightly complicated approach to get the boundary's offset in IE. The facts:
1989
-
1990
- - Each line break is represented as \r in the text node's data/nodeValue properties
1991
- - Each line break is represented as \r\n in the TextRange's 'text' property
1992
- - The 'text' property of the TextRange does not contain trailing line breaks
1993
-
1994
- To get round the problem presented by the final fact above, we can use the fact that TextRange's
1995
- moveStart() and moveEnd() methods return the actual number of characters moved, which is not necessarily
1996
- the same as the number of characters it was instructed to move. The simplest approach is to use this to
1997
- store the characters moved when moving both the start and end of the range to the start of the document
1998
- body and subtracting the start offset from the end offset (the "move-negative-gazillion" method).
1999
- However, this is extremely slow when the document is large and the range is near the end of it. Clearly
2000
- doing the mirror image (i.e. moving the range boundaries to the end of the document) has the same
2001
- problem.
2002
-
2003
- Another approach that works is to use moveStart() to move the start boundary of the range up to the end
2004
- boundary one character at a time and incrementing a counter with the value returned by the moveStart()
2005
- call. However, the check for whether the start boundary has reached the end boundary is expensive, so
2006
- this method is slow (although unlike "move-negative-gazillion" is largely unaffected by the location of
2007
- the range within the document).
2008
-
2009
- The method below is a hybrid of the two methods above. It uses the fact that a string containing the
2010
- TextRange's 'text' property with each \r\n converted to a single \r character cannot be longer than the
2011
- text of the TextRange, so the start of the range is moved that length initially and then a character at
2012
- a time to make up for any trailing line breaks not contained in the 'text' property. This has good
2013
- performance in most situations compared to the previous two methods.
2014
- */
2015
- var tempRange = workingRange.duplicate();
2016
- var rangeLength = tempRange.text.replace(/\r\n/g, "\r").length;
2017
-
2018
- offset = tempRange.moveStart("character", rangeLength);
2019
- while ( (comparison = tempRange.compareEndPoints("StartToEnd", tempRange)) == -1) {
2020
- offset++;
2021
- tempRange.moveStart("character", 1);
2022
- }
2023
- } else {
2024
- offset = workingRange.text.length;
2025
- }
2026
- boundaryPosition = new DomPosition(boundaryNode, offset);
2027
- } else {
2028
-
2029
-
2030
- // If the boundary immediately follows a character data node and this is the end boundary, we should favour
2031
- // a position within that, and likewise for a start boundary preceding a character data node
2032
- previousNode = (isCollapsed || !isStart) && workingNode.previousSibling;
2033
- nextNode = (isCollapsed || isStart) && workingNode.nextSibling;
2034
-
2035
-
2036
-
2037
- if (nextNode && dom.isCharacterDataNode(nextNode)) {
2038
- boundaryPosition = new DomPosition(nextNode, 0);
2039
- } else if (previousNode && dom.isCharacterDataNode(previousNode)) {
2040
- boundaryPosition = new DomPosition(previousNode, previousNode.length);
2041
- } else {
2042
- boundaryPosition = new DomPosition(containerElement, dom.getNodeIndex(workingNode));
2043
- }
2044
- }
2045
-
2046
- // Clean up
2047
- workingNode.parentNode.removeChild(workingNode);
2048
-
2049
- return boundaryPosition;
2050
- }
2051
-
2052
- // Returns a TextRange representing the boundary of a TextRange expressed as a node and an offset within that node.
2053
- // This function started out as an optimized version of code found in Tim Cameron Ryan's IERange
2054
- // (http://code.google.com/p/ierange/)
2055
- function createBoundaryTextRange(boundaryPosition, isStart) {
2056
- var boundaryNode, boundaryParent, boundaryOffset = boundaryPosition.offset;
2057
- var doc = dom.getDocument(boundaryPosition.node);
2058
- var workingNode, childNodes, workingRange = doc.body.createTextRange();
2059
- var nodeIsDataNode = dom.isCharacterDataNode(boundaryPosition.node);
2060
-
2061
- if (nodeIsDataNode) {
2062
- boundaryNode = boundaryPosition.node;
2063
- boundaryParent = boundaryNode.parentNode;
2064
- } else {
2065
- childNodes = boundaryPosition.node.childNodes;
2066
- boundaryNode = (boundaryOffset < childNodes.length) ? childNodes[boundaryOffset] : null;
2067
- boundaryParent = boundaryPosition.node;
2068
- }
2069
-
2070
- // Position the range immediately before the node containing the boundary
2071
- workingNode = doc.createElement("span");
2072
-
2073
- // Making the working element non-empty element persuades IE to consider the TextRange boundary to be within the
2074
- // element rather than immediately before or after it, which is what we want
2075
- workingNode.innerHTML = "&#feff;";
2076
-
2077
- // insertBefore is supposed to work like appendChild if the second parameter is null. However, a bug report
2078
- // for IERange suggests that it can crash the browser: http://code.google.com/p/ierange/issues/detail?id=12
2079
- if (boundaryNode) {
2080
- boundaryParent.insertBefore(workingNode, boundaryNode);
2081
- } else {
2082
- boundaryParent.appendChild(workingNode);
2083
- }
2084
-
2085
- workingRange.moveToElementText(workingNode);
2086
- workingRange.collapse(!isStart);
2087
-
2088
- // Clean up
2089
- boundaryParent.removeChild(workingNode);
2090
-
2091
- // Move the working range to the text offset, if required
2092
- if (nodeIsDataNode) {
2093
- workingRange[isStart ? "moveStart" : "moveEnd"]("character", boundaryOffset);
2094
- }
2095
-
2096
- return workingRange;
2097
- }
2098
-
2099
- /*----------------------------------------------------------------------------------------------------------------*/
2100
-
2101
- if (api.features.implementsDomRange && (!api.features.implementsTextRange || !api.config.preferTextRange)) {
2102
- // This is a wrapper around the browser's native DOM Range. It has two aims:
2103
- // - Provide workarounds for specific browser bugs
2104
- // - provide convenient extensions, which are inherited from Rangy's DomRange
2105
-
2106
- (function() {
2107
- var rangeProto;
2108
- var rangeProperties = DomRange.rangeProperties;
2109
- var canSetRangeStartAfterEnd;
2110
-
2111
- function updateRangeProperties(range) {
2112
- var i = rangeProperties.length, prop;
2113
- while (i--) {
2114
- prop = rangeProperties[i];
2115
- range[prop] = range.nativeRange[prop];
2116
- }
2117
- }
2118
-
2119
- function updateNativeRange(range, startContainer, startOffset, endContainer,endOffset) {
2120
- var startMoved = (range.startContainer !== startContainer || range.startOffset != startOffset);
2121
- var endMoved = (range.endContainer !== endContainer || range.endOffset != endOffset);
2122
-
2123
- // Always set both boundaries for the benefit of IE9 (see issue 35)
2124
- if (startMoved || endMoved) {
2125
- range.setEnd(endContainer, endOffset);
2126
- range.setStart(startContainer, startOffset);
2127
- }
2128
- }
2129
-
2130
- function detach(range) {
2131
- range.nativeRange.detach();
2132
- range.detached = true;
2133
- var i = rangeProperties.length, prop;
2134
- while (i--) {
2135
- prop = rangeProperties[i];
2136
- range[prop] = null;
2137
- }
2138
- }
2139
-
2140
- var createBeforeAfterNodeSetter;
2141
-
2142
- WrappedRange = function(range) {
2143
- if (!range) {
2144
- throw new Error("Range must be specified");
2145
- }
2146
- this.nativeRange = range;
2147
- updateRangeProperties(this);
2148
- };
2149
-
2150
- DomRange.createPrototypeRange(WrappedRange, updateNativeRange, detach);
2151
-
2152
- rangeProto = WrappedRange.prototype;
2153
-
2154
- rangeProto.selectNode = function(node) {
2155
- this.nativeRange.selectNode(node);
2156
- updateRangeProperties(this);
2157
- };
2158
-
2159
- rangeProto.deleteContents = function() {
2160
- this.nativeRange.deleteContents();
2161
- updateRangeProperties(this);
2162
- };
2163
-
2164
- rangeProto.extractContents = function() {
2165
- var frag = this.nativeRange.extractContents();
2166
- updateRangeProperties(this);
2167
- return frag;
2168
- };
2169
-
2170
- rangeProto.cloneContents = function() {
2171
- return this.nativeRange.cloneContents();
2172
- };
2173
-
2174
- // TODO: Until I can find a way to programmatically trigger the Firefox bug (apparently long-standing, still
2175
- // present in 3.6.8) that throws "Index or size is negative or greater than the allowed amount" for
2176
- // insertNode in some circumstances, all browsers will have to use the Rangy's own implementation of
2177
- // insertNode, which works but is almost certainly slower than the native implementation.
2178
- /*
2179
- rangeProto.insertNode = function(node) {
2180
- this.nativeRange.insertNode(node);
2181
- updateRangeProperties(this);
2182
- };
2183
- */
2184
-
2185
- rangeProto.surroundContents = function(node) {
2186
- this.nativeRange.surroundContents(node);
2187
- updateRangeProperties(this);
2188
- };
2189
-
2190
- rangeProto.collapse = function(isStart) {
2191
- this.nativeRange.collapse(isStart);
2192
- updateRangeProperties(this);
2193
- };
2194
-
2195
- rangeProto.cloneRange = function() {
2196
- return new WrappedRange(this.nativeRange.cloneRange());
2197
- };
2198
-
2199
- rangeProto.refresh = function() {
2200
- updateRangeProperties(this);
2201
- };
2202
-
2203
- rangeProto.toString = function() {
2204
- return this.nativeRange.toString();
2205
- };
2206
-
2207
- // Create test range and node for feature detection
2208
-
2209
- var testTextNode = document.createTextNode("test");
2210
- dom.getBody(document).appendChild(testTextNode);
2211
- var range = document.createRange();
2212
-
2213
- /*--------------------------------------------------------------------------------------------------------*/
2214
-
2215
- // Test for Firefox 2 bug that prevents moving the start of a Range to a point after its current end and
2216
- // correct for it
2217
-
2218
- range.setStart(testTextNode, 0);
2219
- range.setEnd(testTextNode, 0);
2220
-
2221
- try {
2222
- range.setStart(testTextNode, 1);
2223
- canSetRangeStartAfterEnd = true;
2224
-
2225
- rangeProto.setStart = function(node, offset) {
2226
- this.nativeRange.setStart(node, offset);
2227
- updateRangeProperties(this);
2228
- };
2229
-
2230
- rangeProto.setEnd = function(node, offset) {
2231
- this.nativeRange.setEnd(node, offset);
2232
- updateRangeProperties(this);
2233
- };
2234
-
2235
- createBeforeAfterNodeSetter = function(name) {
2236
- return function(node) {
2237
- this.nativeRange[name](node);
2238
- updateRangeProperties(this);
2239
- };
2240
- };
2241
-
2242
- } catch(ex) {
2243
-
2244
-
2245
- canSetRangeStartAfterEnd = false;
2246
-
2247
- rangeProto.setStart = function(node, offset) {
2248
- try {
2249
- this.nativeRange.setStart(node, offset);
2250
- } catch (ex) {
2251
- this.nativeRange.setEnd(node, offset);
2252
- this.nativeRange.setStart(node, offset);
2253
- }
2254
- updateRangeProperties(this);
2255
- };
2256
-
2257
- rangeProto.setEnd = function(node, offset) {
2258
- try {
2259
- this.nativeRange.setEnd(node, offset);
2260
- } catch (ex) {
2261
- this.nativeRange.setStart(node, offset);
2262
- this.nativeRange.setEnd(node, offset);
2263
- }
2264
- updateRangeProperties(this);
2265
- };
2266
-
2267
- createBeforeAfterNodeSetter = function(name, oppositeName) {
2268
- return function(node) {
2269
- try {
2270
- this.nativeRange[name](node);
2271
- } catch (ex) {
2272
- this.nativeRange[oppositeName](node);
2273
- this.nativeRange[name](node);
2274
- }
2275
- updateRangeProperties(this);
2276
- };
2277
- };
2278
- }
2279
-
2280
- rangeProto.setStartBefore = createBeforeAfterNodeSetter("setStartBefore", "setEndBefore");
2281
- rangeProto.setStartAfter = createBeforeAfterNodeSetter("setStartAfter", "setEndAfter");
2282
- rangeProto.setEndBefore = createBeforeAfterNodeSetter("setEndBefore", "setStartBefore");
2283
- rangeProto.setEndAfter = createBeforeAfterNodeSetter("setEndAfter", "setStartAfter");
2284
-
2285
- /*--------------------------------------------------------------------------------------------------------*/
2286
-
2287
- // Test for and correct Firefox 2 behaviour with selectNodeContents on text nodes: it collapses the range to
2288
- // the 0th character of the text node
2289
- range.selectNodeContents(testTextNode);
2290
- if (range.startContainer == testTextNode && range.endContainer == testTextNode &&
2291
- range.startOffset == 0 && range.endOffset == testTextNode.length) {
2292
- rangeProto.selectNodeContents = function(node) {
2293
- this.nativeRange.selectNodeContents(node);
2294
- updateRangeProperties(this);
2295
- };
2296
- } else {
2297
- rangeProto.selectNodeContents = function(node) {
2298
- this.setStart(node, 0);
2299
- this.setEnd(node, DomRange.getEndOffset(node));
2300
- };
2301
- }
2302
-
2303
- /*--------------------------------------------------------------------------------------------------------*/
2304
-
2305
- // Test for WebKit bug that has the beahviour of compareBoundaryPoints round the wrong way for constants
2306
- // START_TO_END and END_TO_START: https://bugs.webkit.org/show_bug.cgi?id=20738
2307
-
2308
- range.selectNodeContents(testTextNode);
2309
- range.setEnd(testTextNode, 3);
2310
-
2311
- var range2 = document.createRange();
2312
- range2.selectNodeContents(testTextNode);
2313
- range2.setEnd(testTextNode, 4);
2314
- range2.setStart(testTextNode, 2);
2315
-
2316
- if (range.compareBoundaryPoints(range.START_TO_END, range2) == -1 &
2317
- range.compareBoundaryPoints(range.END_TO_START, range2) == 1) {
2318
- // This is the wrong way round, so correct for it
2319
-
2320
-
2321
- rangeProto.compareBoundaryPoints = function(type, range) {
2322
- range = range.nativeRange || range;
2323
- if (type == range.START_TO_END) {
2324
- type = range.END_TO_START;
2325
- } else if (type == range.END_TO_START) {
2326
- type = range.START_TO_END;
2327
- }
2328
- return this.nativeRange.compareBoundaryPoints(type, range);
2329
- };
2330
- } else {
2331
- rangeProto.compareBoundaryPoints = function(type, range) {
2332
- return this.nativeRange.compareBoundaryPoints(type, range.nativeRange || range);
2333
- };
2334
- }
2335
-
2336
- /*--------------------------------------------------------------------------------------------------------*/
2337
-
2338
- // Test for existence of createContextualFragment and delegate to it if it exists
2339
- if (api.util.isHostMethod(range, "createContextualFragment")) {
2340
- rangeProto.createContextualFragment = function(fragmentStr) {
2341
- return this.nativeRange.createContextualFragment(fragmentStr);
2342
- };
2343
- }
2344
-
2345
- /*--------------------------------------------------------------------------------------------------------*/
2346
-
2347
- // Clean up
2348
- dom.getBody(document).removeChild(testTextNode);
2349
- range.detach();
2350
- range2.detach();
2351
- })();
2352
-
2353
- api.createNativeRange = function(doc) {
2354
- doc = doc || document;
2355
- return doc.createRange();
2356
- };
2357
- } else if (api.features.implementsTextRange) {
2358
- // This is a wrapper around a TextRange, providing full DOM Range functionality using rangy's DomRange as a
2359
- // prototype
2360
-
2361
- WrappedRange = function(textRange) {
2362
- this.textRange = textRange;
2363
- this.refresh();
2364
- };
2365
-
2366
- WrappedRange.prototype = new DomRange(document);
2367
-
2368
- WrappedRange.prototype.refresh = function() {
2369
- var start, end;
2370
-
2371
- // TextRange's parentElement() method cannot be trusted. getTextRangeContainerElement() works around that.
2372
- var rangeContainerElement = getTextRangeContainerElement(this.textRange);
2373
-
2374
- if (textRangeIsCollapsed(this.textRange)) {
2375
- end = start = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true, true);
2376
- } else {
2377
-
2378
- start = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true, false);
2379
- end = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, false, false);
2380
- }
2381
-
2382
- this.setStart(start.node, start.offset);
2383
- this.setEnd(end.node, end.offset);
2384
- };
2385
-
2386
- DomRange.copyComparisonConstants(WrappedRange);
2387
-
2388
- // Add WrappedRange as the Range property of the global object to allow expression like Range.END_TO_END to work
2389
- var globalObj = (function() { return this; })();
2390
- if (typeof globalObj.Range == "undefined") {
2391
- globalObj.Range = WrappedRange;
2392
- }
2393
-
2394
- api.createNativeRange = function(doc) {
2395
- doc = doc || document;
2396
- return doc.body.createTextRange();
2397
- };
2398
- }
2399
-
2400
- if (api.features.implementsTextRange) {
2401
- WrappedRange.rangeToTextRange = function(range) {
2402
- if (range.collapsed) {
2403
- var tr = createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);
2404
-
2405
-
2406
-
2407
- return tr;
2408
-
2409
- //return createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);
2410
- } else {
2411
- var startRange = createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);
2412
- var endRange = createBoundaryTextRange(new DomPosition(range.endContainer, range.endOffset), false);
2413
- var textRange = dom.getDocument(range.startContainer).body.createTextRange();
2414
- textRange.setEndPoint("StartToStart", startRange);
2415
- textRange.setEndPoint("EndToEnd", endRange);
2416
- return textRange;
2417
- }
2418
- };
2419
- }
2420
-
2421
- WrappedRange.prototype.getName = function() {
2422
- return "WrappedRange";
2423
- };
2424
-
2425
- api.WrappedRange = WrappedRange;
2426
-
2427
- api.createRange = function(doc) {
2428
- doc = doc || document;
2429
- return new WrappedRange(api.createNativeRange(doc));
2430
- };
2431
-
2432
- api.createRangyRange = function(doc) {
2433
- doc = doc || document;
2434
- return new DomRange(doc);
2435
- };
2436
-
2437
- api.createIframeRange = function(iframeEl) {
2438
- return api.createRange(dom.getIframeDocument(iframeEl));
2439
- };
2440
-
2441
- api.createIframeRangyRange = function(iframeEl) {
2442
- return api.createRangyRange(dom.getIframeDocument(iframeEl));
2443
- };
2444
-
2445
- api.addCreateMissingNativeApiListener(function(win) {
2446
- var doc = win.document;
2447
- if (typeof doc.createRange == "undefined") {
2448
- doc.createRange = function() {
2449
- return api.createRange(this);
2450
- };
2451
- }
2452
- doc = win = null;
2453
- });
2454
- });rangy.createModule("WrappedSelection", function(api, module) {
2455
- // This will create a selection object wrapper that follows the Selection object found in the WHATWG draft DOM Range
2456
- // spec (http://html5.org/specs/dom-range.html)
2457
-
2458
- api.requireModules( ["DomUtil", "DomRange", "WrappedRange"] );
2459
-
2460
- api.config.checkSelectionRanges = true;
2461
-
2462
- var BOOLEAN = "boolean",
2463
- windowPropertyName = "_rangySelection",
2464
- dom = api.dom,
2465
- util = api.util,
2466
- DomRange = api.DomRange,
2467
- WrappedRange = api.WrappedRange,
2468
- DOMException = api.DOMException,
2469
- DomPosition = dom.DomPosition,
2470
- getSelection,
2471
- selectionIsCollapsed,
2472
- CONTROL = "Control";
2473
-
2474
-
2475
-
2476
- function getWinSelection(winParam) {
2477
- return (winParam || window).getSelection();
2478
- }
2479
-
2480
- function getDocSelection(winParam) {
2481
- return (winParam || window).document.selection;
2482
- }
2483
-
2484
- // Test for the Range/TextRange and Selection features required
2485
- // Test for ability to retrieve selection
2486
- var implementsWinGetSelection = api.util.isHostMethod(window, "getSelection"),
2487
- implementsDocSelection = api.util.isHostObject(document, "selection");
2488
-
2489
- var useDocumentSelection = implementsDocSelection && (!implementsWinGetSelection || api.config.preferTextRange);
2490
-
2491
- if (useDocumentSelection) {
2492
- getSelection = getDocSelection;
2493
- api.isSelectionValid = function(winParam) {
2494
- var doc = (winParam || window).document, nativeSel = doc.selection;
2495
-
2496
- // Check whether the selection TextRange is actually contained within the correct document
2497
- return (nativeSel.type != "None" || dom.getDocument(nativeSel.createRange().parentElement()) == doc);
2498
- };
2499
- } else if (implementsWinGetSelection) {
2500
- getSelection = getWinSelection;
2501
- api.isSelectionValid = function() {
2502
- return true;
2503
- };
2504
- } else {
2505
- module.fail("Neither document.selection or window.getSelection() detected.");
2506
- }
2507
-
2508
- api.getNativeSelection = getSelection;
2509
-
2510
- var testSelection = getSelection();
2511
- var testRange = api.createNativeRange(document);
2512
- var body = dom.getBody(document);
2513
-
2514
- // Obtaining a range from a selection
2515
- var selectionHasAnchorAndFocus = util.areHostObjects(testSelection, ["anchorNode", "focusNode"] &&
2516
- util.areHostProperties(testSelection, ["anchorOffset", "focusOffset"]));
2517
- api.features.selectionHasAnchorAndFocus = selectionHasAnchorAndFocus;
2518
-
2519
- // Test for existence of native selection extend() method
2520
- var selectionHasExtend = util.isHostMethod(testSelection, "extend");
2521
- api.features.selectionHasExtend = selectionHasExtend;
2522
-
2523
- // Test if rangeCount exists
2524
- var selectionHasRangeCount = (typeof testSelection.rangeCount == "number");
2525
- api.features.selectionHasRangeCount = selectionHasRangeCount;
2526
-
2527
- var selectionSupportsMultipleRanges = false;
2528
- var collapsedNonEditableSelectionsSupported = true;
2529
-
2530
- if (util.areHostMethods(testSelection, ["addRange", "getRangeAt", "removeAllRanges"]) &&
2531
- typeof testSelection.rangeCount == "number" && api.features.implementsDomRange) {
2532
-
2533
- (function() {
2534
- var iframe = document.createElement("iframe");
2535
- body.appendChild(iframe);
2536
-
2537
- var iframeDoc = dom.getIframeDocument(iframe);
2538
- iframeDoc.open();
2539
- iframeDoc.write("<html><head></head><body>12</body></html>");
2540
- iframeDoc.close();
2541
-
2542
- var sel = dom.getIframeWindow(iframe).getSelection();
2543
- var docEl = iframeDoc.documentElement;
2544
- var iframeBody = docEl.lastChild, textNode = iframeBody.firstChild;
2545
-
2546
- // Test whether the native selection will allow a collapsed selection within a non-editable element
2547
- var r1 = iframeDoc.createRange();
2548
- r1.setStart(textNode, 1);
2549
- r1.collapse(true);
2550
- sel.addRange(r1);
2551
- collapsedNonEditableSelectionsSupported = (sel.rangeCount == 1);
2552
- sel.removeAllRanges();
2553
-
2554
- // Test whether the native selection is capable of supporting multiple ranges
2555
- var r2 = r1.cloneRange();
2556
- r1.setStart(textNode, 0);
2557
- r2.setEnd(textNode, 2);
2558
- sel.addRange(r1);
2559
- sel.addRange(r2);
2560
-
2561
- selectionSupportsMultipleRanges = (sel.rangeCount == 2);
2562
-
2563
- // Clean up
2564
- r1.detach();
2565
- r2.detach();
2566
-
2567
- body.removeChild(iframe);
2568
- })();
2569
- }
2570
-
2571
- api.features.selectionSupportsMultipleRanges = selectionSupportsMultipleRanges;
2572
- api.features.collapsedNonEditableSelectionsSupported = collapsedNonEditableSelectionsSupported;
2573
-
2574
- // ControlRanges
2575
- var implementsControlRange = false, testControlRange;
2576
-
2577
- if (body && util.isHostMethod(body, "createControlRange")) {
2578
- testControlRange = body.createControlRange();
2579
- if (util.areHostProperties(testControlRange, ["item", "add"])) {
2580
- implementsControlRange = true;
2581
- }
2582
- }
2583
- api.features.implementsControlRange = implementsControlRange;
2584
-
2585
- // Selection collapsedness
2586
- if (selectionHasAnchorAndFocus) {
2587
- selectionIsCollapsed = function(sel) {
2588
- return sel.anchorNode === sel.focusNode && sel.anchorOffset === sel.focusOffset;
2589
- };
2590
- } else {
2591
- selectionIsCollapsed = function(sel) {
2592
- return sel.rangeCount ? sel.getRangeAt(sel.rangeCount - 1).collapsed : false;
2593
- };
2594
- }
2595
-
2596
- function updateAnchorAndFocusFromRange(sel, range, backwards) {
2597
- var anchorPrefix = backwards ? "end" : "start", focusPrefix = backwards ? "start" : "end";
2598
- sel.anchorNode = range[anchorPrefix + "Container"];
2599
- sel.anchorOffset = range[anchorPrefix + "Offset"];
2600
- sel.focusNode = range[focusPrefix + "Container"];
2601
- sel.focusOffset = range[focusPrefix + "Offset"];
2602
- }
2603
-
2604
- function updateAnchorAndFocusFromNativeSelection(sel) {
2605
- var nativeSel = sel.nativeSelection;
2606
- sel.anchorNode = nativeSel.anchorNode;
2607
- sel.anchorOffset = nativeSel.anchorOffset;
2608
- sel.focusNode = nativeSel.focusNode;
2609
- sel.focusOffset = nativeSel.focusOffset;
2610
- }
2611
-
2612
- function updateEmptySelection(sel) {
2613
- sel.anchorNode = sel.focusNode = null;
2614
- sel.anchorOffset = sel.focusOffset = 0;
2615
- sel.rangeCount = 0;
2616
- sel.isCollapsed = true;
2617
- sel._ranges.length = 0;
2618
- }
2619
-
2620
- function getNativeRange(range) {
2621
- var nativeRange;
2622
- if (range instanceof DomRange) {
2623
- nativeRange = range._selectionNativeRange;
2624
- if (!nativeRange) {
2625
- nativeRange = api.createNativeRange(dom.getDocument(range.startContainer));
2626
- nativeRange.setEnd(range.endContainer, range.endOffset);
2627
- nativeRange.setStart(range.startContainer, range.startOffset);
2628
- range._selectionNativeRange = nativeRange;
2629
- range.attachListener("detach", function() {
2630
-
2631
- this._selectionNativeRange = null;
2632
- });
2633
- }
2634
- } else if (range instanceof WrappedRange) {
2635
- nativeRange = range.nativeRange;
2636
- } else if (api.features.implementsDomRange && (range instanceof dom.getWindow(range.startContainer).Range)) {
2637
- nativeRange = range;
2638
- }
2639
- return nativeRange;
2640
- }
2641
-
2642
- function rangeContainsSingleElement(rangeNodes) {
2643
- if (!rangeNodes.length || rangeNodes[0].nodeType != 1) {
2644
- return false;
2645
- }
2646
- for (var i = 1, len = rangeNodes.length; i < len; ++i) {
2647
- if (!dom.isAncestorOf(rangeNodes[0], rangeNodes[i])) {
2648
- return false;
2649
- }
2650
- }
2651
- return true;
2652
- }
2653
-
2654
- function getSingleElementFromRange(range) {
2655
- var nodes = range.getNodes();
2656
- if (!rangeContainsSingleElement(nodes)) {
2657
- throw new Error("getSingleElementFromRange: range " + range.inspect() + " did not consist of a single element");
2658
- }
2659
- return nodes[0];
2660
- }
2661
-
2662
- function isTextRange(range) {
2663
- return !!range && typeof range.text != "undefined";
2664
- }
2665
-
2666
- function updateFromTextRange(sel, range) {
2667
- // Create a Range from the selected TextRange
2668
- var wrappedRange = new WrappedRange(range);
2669
- sel._ranges = [wrappedRange];
2670
-
2671
- updateAnchorAndFocusFromRange(sel, wrappedRange, false);
2672
- sel.rangeCount = 1;
2673
- sel.isCollapsed = wrappedRange.collapsed;
2674
- }
2675
-
2676
- function updateControlSelection(sel) {
2677
- // Update the wrapped selection based on what's now in the native selection
2678
- sel._ranges.length = 0;
2679
- if (sel.docSelection.type == "None") {
2680
- updateEmptySelection(sel);
2681
- } else {
2682
- var controlRange = sel.docSelection.createRange();
2683
- if (isTextRange(controlRange)) {
2684
- // This case (where the selection type is "Control" and calling createRange() on the selection returns
2685
- // a TextRange) can happen in IE 9. It happens, for example, when all elements in the selected
2686
- // ControlRange have been removed from the ControlRange and removed from the document.
2687
- updateFromTextRange(sel, controlRange);
2688
- } else {
2689
- sel.rangeCount = controlRange.length;
2690
- var range, doc = dom.getDocument(controlRange.item(0));
2691
- for (var i = 0; i < sel.rangeCount; ++i) {
2692
- range = api.createRange(doc);
2693
- range.selectNode(controlRange.item(i));
2694
- sel._ranges.push(range);
2695
- }
2696
- sel.isCollapsed = sel.rangeCount == 1 && sel._ranges[0].collapsed;
2697
- updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], false);
2698
- }
2699
- }
2700
- }
2701
-
2702
- function addRangeToControlSelection(sel, range) {
2703
- var controlRange = sel.docSelection.createRange();
2704
- var rangeElement = getSingleElementFromRange(range);
2705
-
2706
- // Create a new ControlRange containing all the elements in the selected ControlRange plus the element
2707
- // contained by the supplied range
2708
- var doc = dom.getDocument(controlRange.item(0));
2709
- var newControlRange = dom.getBody(doc).createControlRange();
2710
- for (var i = 0, len = controlRange.length; i < len; ++i) {
2711
- newControlRange.add(controlRange.item(i));
2712
- }
2713
- try {
2714
- newControlRange.add(rangeElement);
2715
- } catch (ex) {
2716
- throw new Error("addRange(): Element within the specified Range could not be added to control selection (does it have layout?)");
2717
- }
2718
- newControlRange.select();
2719
-
2720
- // Update the wrapped selection based on what's now in the native selection
2721
- updateControlSelection(sel);
2722
- }
2723
-
2724
- var getSelectionRangeAt;
2725
-
2726
- if (util.isHostMethod(testSelection, "getRangeAt")) {
2727
- getSelectionRangeAt = function(sel, index) {
2728
- try {
2729
- return sel.getRangeAt(index);
2730
- } catch(ex) {
2731
- return null;
2732
- }
2733
- };
2734
- } else if (selectionHasAnchorAndFocus) {
2735
- getSelectionRangeAt = function(sel) {
2736
- var doc = dom.getDocument(sel.anchorNode);
2737
- var range = api.createRange(doc);
2738
- range.setStart(sel.anchorNode, sel.anchorOffset);
2739
- range.setEnd(sel.focusNode, sel.focusOffset);
2740
-
2741
- // Handle the case when the selection was selected backwards (from the end to the start in the
2742
- // document)
2743
- if (range.collapsed !== this.isCollapsed) {
2744
- range.setStart(sel.focusNode, sel.focusOffset);
2745
- range.setEnd(sel.anchorNode, sel.anchorOffset);
2746
- }
2747
-
2748
- return range;
2749
- };
2750
- }
2751
-
2752
- /**
2753
- * @constructor
2754
- */
2755
- function WrappedSelection(selection, docSelection, win) {
2756
- this.nativeSelection = selection;
2757
- this.docSelection = docSelection;
2758
- this._ranges = [];
2759
- this.win = win;
2760
- this.refresh();
2761
- }
2762
-
2763
- api.getSelection = function(win) {
2764
- win = win || window;
2765
- var sel = win[windowPropertyName];
2766
- var nativeSel = getSelection(win), docSel = implementsDocSelection ? getDocSelection(win) : null;
2767
- if (sel) {
2768
- sel.nativeSelection = nativeSel;
2769
- sel.docSelection = docSel;
2770
- sel.refresh(win);
2771
- } else {
2772
- sel = new WrappedSelection(nativeSel, docSel, win);
2773
- win[windowPropertyName] = sel;
2774
- }
2775
- return sel;
2776
- };
2777
-
2778
- api.getIframeSelection = function(iframeEl) {
2779
- return api.getSelection(dom.getIframeWindow(iframeEl));
2780
- };
2781
-
2782
- var selProto = WrappedSelection.prototype;
2783
-
2784
- function createControlSelection(sel, ranges) {
2785
- // Ensure that the selection becomes of type "Control"
2786
- var doc = dom.getDocument(ranges[0].startContainer);
2787
- var controlRange = dom.getBody(doc).createControlRange();
2788
- for (var i = 0, el; i < rangeCount; ++i) {
2789
- el = getSingleElementFromRange(ranges[i]);
2790
- try {
2791
- controlRange.add(el);
2792
- } catch (ex) {
2793
- throw new Error("setRanges(): Element within the one of the specified Ranges could not be added to control selection (does it have layout?)");
2794
- }
2795
- }
2796
- controlRange.select();
2797
-
2798
- // Update the wrapped selection based on what's now in the native selection
2799
- updateControlSelection(sel);
2800
- }
2801
-
2802
- // Selecting a range
2803
- if (!useDocumentSelection && selectionHasAnchorAndFocus && util.areHostMethods(testSelection, ["removeAllRanges", "addRange"])) {
2804
- selProto.removeAllRanges = function() {
2805
- this.nativeSelection.removeAllRanges();
2806
- updateEmptySelection(this);
2807
- };
2808
-
2809
- var addRangeBackwards = function(sel, range) {
2810
- var doc = DomRange.getRangeDocument(range);
2811
- var endRange = api.createRange(doc);
2812
- endRange.collapseToPoint(range.endContainer, range.endOffset);
2813
- sel.nativeSelection.addRange(getNativeRange(endRange));
2814
- sel.nativeSelection.extend(range.startContainer, range.startOffset);
2815
- sel.refresh();
2816
- };
2817
-
2818
- if (selectionHasRangeCount) {
2819
- selProto.addRange = function(range, backwards) {
2820
- if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {
2821
- addRangeToControlSelection(this, range);
2822
- } else {
2823
- if (backwards && selectionHasExtend) {
2824
- addRangeBackwards(this, range);
2825
- } else {
2826
- var previousRangeCount;
2827
- if (selectionSupportsMultipleRanges) {
2828
- previousRangeCount = this.rangeCount;
2829
- } else {
2830
- this.removeAllRanges();
2831
- previousRangeCount = 0;
2832
- }
2833
- this.nativeSelection.addRange(getNativeRange(range));
2834
-
2835
- // Check whether adding the range was successful
2836
- this.rangeCount = this.nativeSelection.rangeCount;
2837
-
2838
- if (this.rangeCount == previousRangeCount + 1) {
2839
- // The range was added successfully
2840
-
2841
- // Check whether the range that we added to the selection is reflected in the last range extracted from
2842
- // the selection
2843
- if (api.config.checkSelectionRanges) {
2844
- var nativeRange = getSelectionRangeAt(this.nativeSelection, this.rangeCount - 1);
2845
- if (nativeRange && !DomRange.rangesEqual(nativeRange, range)) {
2846
- // Happens in WebKit with, for example, a selection placed at the start of a text node
2847
- range = new WrappedRange(nativeRange);
2848
- }
2849
- }
2850
- this._ranges[this.rangeCount - 1] = range;
2851
- updateAnchorAndFocusFromRange(this, range, selectionIsBackwards(this.nativeSelection));
2852
- this.isCollapsed = selectionIsCollapsed(this);
2853
- } else {
2854
- // The range was not added successfully. The simplest thing is to refresh
2855
- this.refresh();
2856
- }
2857
- }
2858
- }
2859
- };
2860
- } else {
2861
- selProto.addRange = function(range, backwards) {
2862
- if (backwards && selectionHasExtend) {
2863
- addRangeBackwards(this, range);
2864
- } else {
2865
- this.nativeSelection.addRange(getNativeRange(range));
2866
- this.refresh();
2867
- }
2868
- };
2869
- }
2870
-
2871
- selProto.setRanges = function(ranges) {
2872
- if (implementsControlRange && ranges.length > 1) {
2873
- createControlSelection(this, ranges);
2874
- } else {
2875
- this.removeAllRanges();
2876
- for (var i = 0, len = ranges.length; i < len; ++i) {
2877
- this.addRange(ranges[i]);
2878
- }
2879
- }
2880
- };
2881
- } else if (util.isHostMethod(testSelection, "empty") && util.isHostMethod(testRange, "select") &&
2882
- implementsControlRange && useDocumentSelection) {
2883
-
2884
- selProto.removeAllRanges = function() {
2885
- // Added try/catch as fix for issue #21
2886
- try {
2887
- this.docSelection.empty();
2888
-
2889
- // Check for empty() not working (issue #24)
2890
- if (this.docSelection.type != "None") {
2891
- // Work around failure to empty a control selection by instead selecting a TextRange and then
2892
- // calling empty()
2893
- var doc;
2894
- if (this.anchorNode) {
2895
- doc = dom.getDocument(this.anchorNode);
2896
- } else if (this.docSelection.type == CONTROL) {
2897
- var controlRange = this.docSelection.createRange();
2898
- if (controlRange.length) {
2899
- doc = dom.getDocument(controlRange.item(0)).body.createTextRange();
2900
- }
2901
- }
2902
- if (doc) {
2903
- var textRange = doc.body.createTextRange();
2904
- textRange.select();
2905
- this.docSelection.empty();
2906
- }
2907
- }
2908
- } catch(ex) {}
2909
- updateEmptySelection(this);
2910
- };
2911
-
2912
- selProto.addRange = function(range) {
2913
- if (this.docSelection.type == CONTROL) {
2914
- addRangeToControlSelection(this, range);
2915
- } else {
2916
- WrappedRange.rangeToTextRange(range).select();
2917
- this._ranges[0] = range;
2918
- this.rangeCount = 1;
2919
- this.isCollapsed = this._ranges[0].collapsed;
2920
- updateAnchorAndFocusFromRange(this, range, false);
2921
- }
2922
- };
2923
-
2924
- selProto.setRanges = function(ranges) {
2925
- this.removeAllRanges();
2926
- var rangeCount = ranges.length;
2927
- if (rangeCount > 1) {
2928
- createControlSelection(this, ranges);
2929
- } else if (rangeCount) {
2930
- this.addRange(ranges[0]);
2931
- }
2932
- };
2933
- } else {
2934
- module.fail("No means of selecting a Range or TextRange was found");
2935
- return false;
2936
- }
2937
-
2938
- selProto.getRangeAt = function(index) {
2939
- if (index < 0 || index >= this.rangeCount) {
2940
- throw new DOMException("INDEX_SIZE_ERR");
2941
- } else {
2942
- return this._ranges[index];
2943
- }
2944
- };
2945
-
2946
- var refreshSelection;
2947
-
2948
- if (useDocumentSelection) {
2949
- refreshSelection = function(sel) {
2950
- var range;
2951
- if (api.isSelectionValid(sel.win)) {
2952
- range = sel.docSelection.createRange();
2953
- } else {
2954
- range = dom.getBody(sel.win.document).createTextRange();
2955
- range.collapse(true);
2956
- }
2957
-
2958
-
2959
- if (sel.docSelection.type == CONTROL) {
2960
- updateControlSelection(sel);
2961
- } else if (isTextRange(range)) {
2962
- updateFromTextRange(sel, range);
2963
- } else {
2964
- updateEmptySelection(sel);
2965
- }
2966
- };
2967
- } else if (util.isHostMethod(testSelection, "getRangeAt") && typeof testSelection.rangeCount == "number") {
2968
- refreshSelection = function(sel) {
2969
- if (implementsControlRange && implementsDocSelection && sel.docSelection.type == CONTROL) {
2970
- updateControlSelection(sel);
2971
- } else {
2972
- sel._ranges.length = sel.rangeCount = sel.nativeSelection.rangeCount;
2973
- if (sel.rangeCount) {
2974
- for (var i = 0, len = sel.rangeCount; i < len; ++i) {
2975
- sel._ranges[i] = new api.WrappedRange(sel.nativeSelection.getRangeAt(i));
2976
- }
2977
- updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], selectionIsBackwards(sel.nativeSelection));
2978
- sel.isCollapsed = selectionIsCollapsed(sel);
2979
- } else {
2980
- updateEmptySelection(sel);
2981
- }
2982
- }
2983
- };
2984
- } else if (selectionHasAnchorAndFocus && typeof testSelection.isCollapsed == BOOLEAN && typeof testRange.collapsed == BOOLEAN && api.features.implementsDomRange) {
2985
- refreshSelection = function(sel) {
2986
- var range, nativeSel = sel.nativeSelection;
2987
- if (nativeSel.anchorNode) {
2988
- range = getSelectionRangeAt(nativeSel, 0);
2989
- sel._ranges = [range];
2990
- sel.rangeCount = 1;
2991
- updateAnchorAndFocusFromNativeSelection(sel);
2992
- sel.isCollapsed = selectionIsCollapsed(sel);
2993
- } else {
2994
- updateEmptySelection(sel);
2995
- }
2996
- };
2997
- } else {
2998
- module.fail("No means of obtaining a Range or TextRange from the user's selection was found");
2999
- return false;
3000
- }
3001
-
3002
- selProto.refresh = function(checkForChanges) {
3003
- var oldRanges = checkForChanges ? this._ranges.slice(0) : null;
3004
- refreshSelection(this);
3005
- if (checkForChanges) {
3006
- var i = oldRanges.length;
3007
- if (i != this._ranges.length) {
3008
- return false;
3009
- }
3010
- while (i--) {
3011
- if (!DomRange.rangesEqual(oldRanges[i], this._ranges[i])) {
3012
- return false;
3013
- }
3014
- }
3015
- return true;
3016
- }
3017
- };
3018
-
3019
- // Removal of a single range
3020
- var removeRangeManually = function(sel, range) {
3021
- var ranges = sel.getAllRanges(), removed = false;
3022
- sel.removeAllRanges();
3023
- for (var i = 0, len = ranges.length; i < len; ++i) {
3024
- if (removed || range !== ranges[i]) {
3025
- sel.addRange(ranges[i]);
3026
- } else {
3027
- // According to the draft WHATWG Range spec, the same range may be added to the selection multiple
3028
- // times. removeRange should only remove the first instance, so the following ensures only the first
3029
- // instance is removed
3030
- removed = true;
3031
- }
3032
- }
3033
- if (!sel.rangeCount) {
3034
- updateEmptySelection(sel);
3035
- }
3036
- };
3037
-
3038
- if (implementsControlRange) {
3039
- selProto.removeRange = function(range) {
3040
- if (this.docSelection.type == CONTROL) {
3041
- var controlRange = this.docSelection.createRange();
3042
- var rangeElement = getSingleElementFromRange(range);
3043
-
3044
- // Create a new ControlRange containing all the elements in the selected ControlRange minus the
3045
- // element contained by the supplied range
3046
- var doc = dom.getDocument(controlRange.item(0));
3047
- var newControlRange = dom.getBody(doc).createControlRange();
3048
- var el, removed = false;
3049
- for (var i = 0, len = controlRange.length; i < len; ++i) {
3050
- el = controlRange.item(i);
3051
- if (el !== rangeElement || removed) {
3052
- newControlRange.add(controlRange.item(i));
3053
- } else {
3054
- removed = true;
3055
- }
3056
- }
3057
- newControlRange.select();
3058
-
3059
- // Update the wrapped selection based on what's now in the native selection
3060
- updateControlSelection(this);
3061
- } else {
3062
- removeRangeManually(this, range);
3063
- }
3064
- };
3065
- } else {
3066
- selProto.removeRange = function(range) {
3067
- removeRangeManually(this, range);
3068
- };
3069
- }
3070
-
3071
- // Detecting if a selection is backwards
3072
- var selectionIsBackwards;
3073
- if (!useDocumentSelection && selectionHasAnchorAndFocus && api.features.implementsDomRange) {
3074
- selectionIsBackwards = function(sel) {
3075
- var backwards = false;
3076
- if (sel.anchorNode) {
3077
- backwards = (dom.comparePoints(sel.anchorNode, sel.anchorOffset, sel.focusNode, sel.focusOffset) == 1);
3078
- }
3079
- return backwards;
3080
- };
3081
-
3082
- selProto.isBackwards = function() {
3083
- return selectionIsBackwards(this);
3084
- };
3085
- } else {
3086
- selectionIsBackwards = selProto.isBackwards = function() {
3087
- return false;
3088
- };
3089
- }
3090
-
3091
- // Selection text
3092
- // This is conformant to the new WHATWG DOM Range draft spec but differs from WebKit and Mozilla's implementation
3093
- selProto.toString = function() {
3094
-
3095
- var rangeTexts = [];
3096
- for (var i = 0, len = this.rangeCount; i < len; ++i) {
3097
- rangeTexts[i] = "" + this._ranges[i];
3098
- }
3099
- return rangeTexts.join("");
3100
- };
3101
-
3102
- function assertNodeInSameDocument(sel, node) {
3103
- if (sel.anchorNode && (dom.getDocument(sel.anchorNode) !== dom.getDocument(node))) {
3104
- throw new DOMException("WRONG_DOCUMENT_ERR");
3105
- }
3106
- }
3107
-
3108
- // No current browsers conform fully to the HTML 5 draft spec for this method, so Rangy's own method is always used
3109
- selProto.collapse = function(node, offset) {
3110
- assertNodeInSameDocument(this, node);
3111
- var range = api.createRange(dom.getDocument(node));
3112
- range.collapseToPoint(node, offset);
3113
- this.removeAllRanges();
3114
- this.addRange(range);
3115
- this.isCollapsed = true;
3116
- };
3117
-
3118
- selProto.collapseToStart = function() {
3119
- if (this.rangeCount) {
3120
- var range = this._ranges[0];
3121
- this.collapse(range.startContainer, range.startOffset);
3122
- } else {
3123
- throw new DOMException("INVALID_STATE_ERR");
3124
- }
3125
- };
3126
-
3127
- selProto.collapseToEnd = function() {
3128
- if (this.rangeCount) {
3129
- var range = this._ranges[this.rangeCount - 1];
3130
- this.collapse(range.endContainer, range.endOffset);
3131
- } else {
3132
- throw new DOMException("INVALID_STATE_ERR");
3133
- }
3134
- };
3135
-
3136
- // The HTML 5 spec is very specific on how selectAllChildren should be implemented so the native implementation is
3137
- // never used by Rangy.
3138
- selProto.selectAllChildren = function(node) {
3139
- assertNodeInSameDocument(this, node);
3140
- var range = api.createRange(dom.getDocument(node));
3141
- range.selectNodeContents(node);
3142
- this.removeAllRanges();
3143
- this.addRange(range);
3144
- };
3145
-
3146
- selProto.deleteFromDocument = function() {
3147
- // Sepcial behaviour required for Control selections
3148
- if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {
3149
- var controlRange = this.docSelection.createRange();
3150
- var element;
3151
- while (controlRange.length) {
3152
- element = controlRange.item(0);
3153
- controlRange.remove(element);
3154
- element.parentNode.removeChild(element);
3155
- }
3156
- this.refresh();
3157
- } else if (this.rangeCount) {
3158
- var ranges = this.getAllRanges();
3159
- this.removeAllRanges();
3160
- for (var i = 0, len = ranges.length; i < len; ++i) {
3161
- ranges[i].deleteContents();
3162
- }
3163
- // The HTML5 spec says nothing about what the selection should contain after calling deleteContents on each
3164
- // range. Firefox moves the selection to where the final selected range was, so we emulate that
3165
- this.addRange(ranges[len - 1]);
3166
- }
3167
- };
3168
-
3169
- // The following are non-standard extensions
3170
- selProto.getAllRanges = function() {
3171
- return this._ranges.slice(0);
3172
- };
3173
-
3174
- selProto.setSingleRange = function(range) {
3175
- this.setRanges( [range] );
3176
- };
3177
-
3178
- selProto.containsNode = function(node, allowPartial) {
3179
- for (var i = 0, len = this._ranges.length; i < len; ++i) {
3180
- if (this._ranges[i].containsNode(node, allowPartial)) {
3181
- return true;
3182
- }
3183
- }
3184
- return false;
3185
- };
3186
-
3187
- selProto.toHtml = function() {
3188
- var html = "";
3189
- if (this.rangeCount) {
3190
- var container = DomRange.getRangeDocument(this._ranges[0]).createElement("div");
3191
- for (var i = 0, len = this._ranges.length; i < len; ++i) {
3192
- container.appendChild(this._ranges[i].cloneContents());
3193
- }
3194
- html = container.innerHTML;
3195
- }
3196
- return html;
3197
- };
3198
-
3199
- function inspect(sel) {
3200
- var rangeInspects = [];
3201
- var anchor = new DomPosition(sel.anchorNode, sel.anchorOffset);
3202
- var focus = new DomPosition(sel.focusNode, sel.focusOffset);
3203
- var name = (typeof sel.getName == "function") ? sel.getName() : "Selection";
3204
-
3205
- if (typeof sel.rangeCount != "undefined") {
3206
- for (var i = 0, len = sel.rangeCount; i < len; ++i) {
3207
- rangeInspects[i] = DomRange.inspect(sel.getRangeAt(i));
3208
- }
3209
- }
3210
- return "[" + name + "(Ranges: " + rangeInspects.join(", ") +
3211
- ")(anchor: " + anchor.inspect() + ", focus: " + focus.inspect() + "]";
3212
-
3213
- }
3214
-
3215
- selProto.getName = function() {
3216
- return "WrappedSelection";
3217
- };
3218
-
3219
- selProto.inspect = function() {
3220
- return inspect(this);
3221
- };
3222
-
3223
- selProto.detach = function() {
3224
- this.win[windowPropertyName] = null;
3225
- this.win = this.anchorNode = this.focusNode = null;
3226
- };
3227
-
3228
- WrappedSelection.inspect = inspect;
3229
-
3230
- api.Selection = WrappedSelection;
3231
-
3232
- api.selectionPrototype = selProto;
3233
-
3234
- api.addCreateMissingNativeApiListener(function(win) {
3235
- if (typeof win.getSelection == "undefined") {
3236
- win.getSelection = function() {
3237
- return api.getSelection(this);
3238
- };
3239
- }
3240
- win = null;
3241
- });
3242
- });
1
+ /* rangy-core.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.
26
+ */
27
+ define('aloha/rangy-core', ['jquery', 'vendor/rangy-core'], function (jQuery) {
28
+ 'use strict';
29
+ return window.rangy;
30
+ });