forge-cli 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. checksums.yaml +7 -0
  2. data/lib/forge-cli/modules/base/manifest.yml +1 -1
  3. data/lib/forge-cli/modules/base/routes.rb +1 -1
  4. data/lib/forge-cli/modules/posts/routes.rb +3 -1
  5. data/lib/forge-cli/version.rb +1 -1
  6. data/lib/forge/Gemfile +1 -0
  7. data/lib/forge/app/assets/javascripts/ckeditor/config.js +35 -0
  8. data/lib/forge/{public → app/assets}/javascripts/ckeditor/contents.css +0 -0
  9. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +0 -0
  10. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/a11yhelp/lang/en.js +0 -0
  11. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/a11yhelp/lang/he.js +0 -0
  12. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/about/dialogs/about.js +0 -0
  13. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/about/dialogs/logo_ckeditor.png +0 -0
  14. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/ajax_save/plugin.js +0 -0
  15. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/attachment/dialogs/attachment.js +0 -0
  16. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/attachment/images/attachment.png +0 -0
  17. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/attachment/lang/en.js +0 -0
  18. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/attachment/lang/ru.js +0 -0
  19. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/attachment/lang/uk.js +0 -0
  20. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/attachment/plugin.js +0 -0
  21. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/autogrow/plugin.js +0 -0
  22. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +0 -0
  23. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +0 -0
  24. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +0 -0
  25. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/div/dialogs/div.js +0 -0
  26. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/embed/dialogs/embed.js +0 -0
  27. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/embed/images/embed.png +0 -0
  28. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/embed/lang/en.js +0 -0
  29. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/embed/lang/ru.js +0 -0
  30. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/embed/lang/uk.js +0 -0
  31. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/embed/plugin.js +0 -0
  32. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/find/dialogs/find.js +0 -0
  33. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/flash/dialogs/flash.js +0 -0
  34. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/flash/images/placeholder.png +0 -0
  35. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forge_assets/plugin.js +2 -2
  36. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/button.js +0 -0
  37. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/checkbox.js +0 -0
  38. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/form.js +0 -0
  39. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/hiddenfield.js +0 -0
  40. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/radio.js +0 -0
  41. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/select.js +0 -0
  42. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/textarea.js +0 -0
  43. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/forms/dialogs/textfield.js +0 -0
  44. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/forms/images/hiddenfield.gif +0 -0
  45. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/iframedialog/plugin.js +0 -0
  46. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/image/dialogs/image.js +0 -0
  47. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/link/dialogs/anchor.js +0 -0
  48. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/link/dialogs/link.js +0 -0
  49. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/link/images/anchor.gif +0 -0
  50. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +0 -0
  51. data/lib/forge/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/hidpi/mediaembed.png +0 -0
  52. data/lib/forge/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/mediaembed.png +0 -0
  53. data/lib/forge/app/assets/javascripts/ckeditor/plugins/mediaembed/plugin.js +64 -0
  54. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/pagebreak/images/pagebreak.gif +0 -0
  55. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/pastefromword/filter/default.js +0 -0
  56. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/pastetext/dialogs/pastetext.js +0 -0
  57. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/scayt/dialogs/options.js +0 -0
  58. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +0 -0
  59. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_address.png +0 -0
  60. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_blockquote.png +0 -0
  61. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_div.png +0 -0
  62. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h1.png +0 -0
  63. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h2.png +0 -0
  64. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h3.png +0 -0
  65. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h4.png +0 -0
  66. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h5.png +0 -0
  67. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_h6.png +0 -0
  68. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_p.png +0 -0
  69. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/showblocks/images/block_pre.png +0 -0
  70. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/smiley/dialogs/smiley.js +0 -0
  71. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/angel_smile.gif +0 -0
  72. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/angry_smile.gif +0 -0
  73. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/broken_heart.gif +0 -0
  74. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/confused_smile.gif +0 -0
  75. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/cry_smile.gif +0 -0
  76. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/devil_smile.gif +0 -0
  77. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/embaressed_smile.gif +0 -0
  78. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/envelope.gif +0 -0
  79. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/heart.gif +0 -0
  80. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/kiss.gif +0 -0
  81. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/lightbulb.gif +0 -0
  82. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/omg_smile.gif +0 -0
  83. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/regular_smile.gif +0 -0
  84. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/sad_smile.gif +0 -0
  85. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/shades_smile.gif +0 -0
  86. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/teeth_smile.gif +0 -0
  87. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/thumbs_down.gif +0 -0
  88. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/thumbs_up.gif +0 -0
  89. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/tounge_smile.gif +0 -0
  90. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  91. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/smiley/images/wink_smile.gif +0 -0
  92. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +0 -0
  93. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/styles/styles/default.js +0 -0
  94. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/table/dialogs/table.js +0 -0
  95. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/tableresize/plugin.js +0 -0
  96. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +0 -0
  97. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/templates/dialogs/templates.js +0 -0
  98. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/templates/templates/default.js +0 -0
  99. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/templates/templates/images/template1.gif +0 -0
  100. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/templates/templates/images/template2.gif +0 -0
  101. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/templates/templates/images/template3.gif +0 -0
  102. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/uicolor/dialogs/uicolor.js +0 -0
  103. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/uicolor/lang/en.js +0 -0
  104. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/uicolor/plugin.js +0 -0
  105. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/uicolor/uicolor.gif +0 -0
  106. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  107. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  108. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  109. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  110. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/uicolor/yui/assets/yui.css +0 -0
  111. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/uicolor/yui/yui.js +0 -0
  112. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/wsc/dialogs/ciframe.html +0 -0
  113. data/lib/forge/{public/javascripts/ckeditor/_source → app/assets/javascripts/ckeditor}/plugins/wsc/dialogs/tmpFrameset.html +0 -0
  114. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +0 -0
  115. data/lib/forge/{public → app/assets}/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +0 -0
  116. data/lib/forge/app/models/asset.rb +2 -1
  117. data/lib/forge/app/views/forge/pages/_form.html.haml +12 -5
  118. data/lib/forge/app/views/forge/posts/_form.html.haml +12 -6
  119. data/lib/forge/app/views/layouts/forge.html.haml +0 -3
  120. data/lib/forge/config/routes.rb +4 -2
  121. data/lib/forge/lib/assets/javascripts/forge/features/asset_dialog.js.erb +1 -1
  122. data/lib/forge/lib/assets/javascripts/forge/features/asset_drawer.js.erb +4 -4
  123. data/lib/forge/lib/assets/javascripts/forge/forge_manifest.js.erb +1 -0
  124. data/lib/forge/lib/generators/forge/scaffold/scaffold_generator.rb +1 -0
  125. data/lib/forge/lib/templates/active_record/model/model.rb +4 -1
  126. data/lib/forge/public/images/image_new.png +0 -0
  127. metadata +207 -699
  128. data/lib/forge/public/javascripts/ckeditor/CHANGES.html +0 -923
  129. data/lib/forge/public/javascripts/ckeditor/INSTALL.html +0 -92
  130. data/lib/forge/public/javascripts/ckeditor/LICENSE.html +0 -1334
  131. data/lib/forge/public/javascripts/ckeditor/_source/adapters/jquery.js +0 -297
  132. data/lib/forge/public/javascripts/ckeditor/_source/core/_bootstrap.js +0 -91
  133. data/lib/forge/public/javascripts/ckeditor/_source/core/ajax.js +0 -143
  134. data/lib/forge/public/javascripts/ckeditor/_source/core/ckeditor.js +0 -113
  135. data/lib/forge/public/javascripts/ckeditor/_source/core/ckeditor_base.js +0 -193
  136. data/lib/forge/public/javascripts/ckeditor/_source/core/ckeditor_basic.js +0 -242
  137. data/lib/forge/public/javascripts/ckeditor/_source/core/command.js +0 -73
  138. data/lib/forge/public/javascripts/ckeditor/_source/core/commanddefinition.js +0 -102
  139. data/lib/forge/public/javascripts/ckeditor/_source/core/config.js +0 -405
  140. data/lib/forge/public/javascripts/ckeditor/_source/core/dataprocessor.js +0 -66
  141. data/lib/forge/public/javascripts/ckeditor/_source/core/dom.js +0 -21
  142. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/comment.js +0 -32
  143. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/document.js +0 -224
  144. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/documentfragment.js +0 -49
  145. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/domobject.js +0 -251
  146. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/element.js +0 -1556
  147. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/elementpath.js +0 -116
  148. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/event.js +0 -142
  149. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/node.js +0 -683
  150. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/nodelist.js +0 -23
  151. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/range.js +0 -1880
  152. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/rangelist.js +0 -163
  153. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/text.js +0 -123
  154. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/walker.js +0 -445
  155. data/lib/forge/public/javascripts/ckeditor/_source/core/dom/window.js +0 -96
  156. data/lib/forge/public/javascripts/ckeditor/_source/core/dtd.js +0 -233
  157. data/lib/forge/public/javascripts/ckeditor/_source/core/editor.js +0 -759
  158. data/lib/forge/public/javascripts/ckeditor/_source/core/editor_basic.js +0 -182
  159. data/lib/forge/public/javascripts/ckeditor/_source/core/env.js +0 -229
  160. data/lib/forge/public/javascripts/ckeditor/_source/core/event.js +0 -336
  161. data/lib/forge/public/javascripts/ckeditor/_source/core/eventInfo.js +0 -120
  162. data/lib/forge/public/javascripts/ckeditor/_source/core/focusmanager.js +0 -137
  163. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser.js +0 -218
  164. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/basicwriter.js +0 -145
  165. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/cdata.js +0 -43
  166. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/comment.js +0 -60
  167. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/element.js +0 -240
  168. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/filter.js +0 -288
  169. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/fragment.js +0 -497
  170. data/lib/forge/public/javascripts/ckeditor/_source/core/htmlparser/text.js +0 -55
  171. data/lib/forge/public/javascripts/ckeditor/_source/core/imagecacher.js +0 -59
  172. data/lib/forge/public/javascripts/ckeditor/_source/core/lang.js +0 -152
  173. data/lib/forge/public/javascripts/ckeditor/_source/core/loader.js +0 -243
  174. data/lib/forge/public/javascripts/ckeditor/_source/core/plugindefinition.js +0 -66
  175. data/lib/forge/public/javascripts/ckeditor/_source/core/plugins.js +0 -85
  176. data/lib/forge/public/javascripts/ckeditor/_source/core/resourcemanager.js +0 -238
  177. data/lib/forge/public/javascripts/ckeditor/_source/core/scriptloader.js +0 -198
  178. data/lib/forge/public/javascripts/ckeditor/_source/core/skins.js +0 -204
  179. data/lib/forge/public/javascripts/ckeditor/_source/core/themes.js +0 -19
  180. data/lib/forge/public/javascripts/ckeditor/_source/core/tools.js +0 -747
  181. data/lib/forge/public/javascripts/ckeditor/_source/core/ui.js +0 -116
  182. data/lib/forge/public/javascripts/ckeditor/_source/core/xml.js +0 -165
  183. data/lib/forge/public/javascripts/ckeditor/_source/lang/_languages.js +0 -83
  184. data/lib/forge/public/javascripts/ckeditor/_source/lang/_translationstatus.txt +0 -60
  185. data/lib/forge/public/javascripts/ckeditor/_source/lang/af.js +0 -758
  186. data/lib/forge/public/javascripts/ckeditor/_source/lang/ar.js +0 -758
  187. data/lib/forge/public/javascripts/ckeditor/_source/lang/bg.js +0 -758
  188. data/lib/forge/public/javascripts/ckeditor/_source/lang/bn.js +0 -758
  189. data/lib/forge/public/javascripts/ckeditor/_source/lang/bs.js +0 -758
  190. data/lib/forge/public/javascripts/ckeditor/_source/lang/ca.js +0 -758
  191. data/lib/forge/public/javascripts/ckeditor/_source/lang/cs.js +0 -758
  192. data/lib/forge/public/javascripts/ckeditor/_source/lang/cy.js +0 -758
  193. data/lib/forge/public/javascripts/ckeditor/_source/lang/da.js +0 -758
  194. data/lib/forge/public/javascripts/ckeditor/_source/lang/de.js +0 -758
  195. data/lib/forge/public/javascripts/ckeditor/_source/lang/el.js +0 -758
  196. data/lib/forge/public/javascripts/ckeditor/_source/lang/en-au.js +0 -758
  197. data/lib/forge/public/javascripts/ckeditor/_source/lang/en-ca.js +0 -758
  198. data/lib/forge/public/javascripts/ckeditor/_source/lang/en-gb.js +0 -758
  199. data/lib/forge/public/javascripts/ckeditor/_source/lang/en.js +0 -758
  200. data/lib/forge/public/javascripts/ckeditor/_source/lang/eo.js +0 -758
  201. data/lib/forge/public/javascripts/ckeditor/_source/lang/es.js +0 -758
  202. data/lib/forge/public/javascripts/ckeditor/_source/lang/et.js +0 -758
  203. data/lib/forge/public/javascripts/ckeditor/_source/lang/eu.js +0 -758
  204. data/lib/forge/public/javascripts/ckeditor/_source/lang/fa.js +0 -758
  205. data/lib/forge/public/javascripts/ckeditor/_source/lang/fi.js +0 -758
  206. data/lib/forge/public/javascripts/ckeditor/_source/lang/fo.js +0 -758
  207. data/lib/forge/public/javascripts/ckeditor/_source/lang/fr-ca.js +0 -758
  208. data/lib/forge/public/javascripts/ckeditor/_source/lang/fr.js +0 -758
  209. data/lib/forge/public/javascripts/ckeditor/_source/lang/gl.js +0 -758
  210. data/lib/forge/public/javascripts/ckeditor/_source/lang/gu.js +0 -758
  211. data/lib/forge/public/javascripts/ckeditor/_source/lang/he.js +0 -758
  212. data/lib/forge/public/javascripts/ckeditor/_source/lang/hi.js +0 -758
  213. data/lib/forge/public/javascripts/ckeditor/_source/lang/hr.js +0 -758
  214. data/lib/forge/public/javascripts/ckeditor/_source/lang/hu.js +0 -758
  215. data/lib/forge/public/javascripts/ckeditor/_source/lang/is.js +0 -758
  216. data/lib/forge/public/javascripts/ckeditor/_source/lang/it.js +0 -758
  217. data/lib/forge/public/javascripts/ckeditor/_source/lang/ja.js +0 -758
  218. data/lib/forge/public/javascripts/ckeditor/_source/lang/km.js +0 -758
  219. data/lib/forge/public/javascripts/ckeditor/_source/lang/ko.js +0 -758
  220. data/lib/forge/public/javascripts/ckeditor/_source/lang/lt.js +0 -758
  221. data/lib/forge/public/javascripts/ckeditor/_source/lang/lv.js +0 -758
  222. data/lib/forge/public/javascripts/ckeditor/_source/lang/mn.js +0 -758
  223. data/lib/forge/public/javascripts/ckeditor/_source/lang/ms.js +0 -758
  224. data/lib/forge/public/javascripts/ckeditor/_source/lang/nb.js +0 -758
  225. data/lib/forge/public/javascripts/ckeditor/_source/lang/nl.js +0 -758
  226. data/lib/forge/public/javascripts/ckeditor/_source/lang/no.js +0 -758
  227. data/lib/forge/public/javascripts/ckeditor/_source/lang/pl.js +0 -758
  228. data/lib/forge/public/javascripts/ckeditor/_source/lang/pt-br.js +0 -757
  229. data/lib/forge/public/javascripts/ckeditor/_source/lang/pt.js +0 -758
  230. data/lib/forge/public/javascripts/ckeditor/_source/lang/ro.js +0 -758
  231. data/lib/forge/public/javascripts/ckeditor/_source/lang/ru.js +0 -758
  232. data/lib/forge/public/javascripts/ckeditor/_source/lang/sk.js +0 -758
  233. data/lib/forge/public/javascripts/ckeditor/_source/lang/sl.js +0 -758
  234. data/lib/forge/public/javascripts/ckeditor/_source/lang/sr-latn.js +0 -758
  235. data/lib/forge/public/javascripts/ckeditor/_source/lang/sr.js +0 -758
  236. data/lib/forge/public/javascripts/ckeditor/_source/lang/sv.js +0 -758
  237. data/lib/forge/public/javascripts/ckeditor/_source/lang/th.js +0 -758
  238. data/lib/forge/public/javascripts/ckeditor/_source/lang/tr.js +0 -757
  239. data/lib/forge/public/javascripts/ckeditor/_source/lang/uk.js +0 -758
  240. data/lib/forge/public/javascripts/ckeditor/_source/lang/vi.js +0 -758
  241. data/lib/forge/public/javascripts/ckeditor/_source/lang/zh-cn.js +0 -758
  242. data/lib/forge/public/javascripts/ckeditor/_source/lang/zh.js +0 -758
  243. data/lib/forge/public/javascripts/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +0 -211
  244. data/lib/forge/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/en.js +0 -108
  245. data/lib/forge/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/he.js +0 -216
  246. data/lib/forge/public/javascripts/ckeditor/_source/plugins/a11yhelp/plugin.js +0 -46
  247. data/lib/forge/public/javascripts/ckeditor/_source/plugins/about/dialogs/about.js +0 -73
  248. data/lib/forge/public/javascripts/ckeditor/_source/plugins/about/plugin.js +0 -23
  249. data/lib/forge/public/javascripts/ckeditor/_source/plugins/ajax_save/plugin.js +0 -43
  250. data/lib/forge/public/javascripts/ckeditor/_source/plugins/attachment/dialogs/attachment.js +0 -384
  251. data/lib/forge/public/javascripts/ckeditor/_source/plugins/attachment/plugin.js +0 -44
  252. data/lib/forge/public/javascripts/ckeditor/_source/plugins/autogrow/plugin.js +0 -79
  253. data/lib/forge/public/javascripts/ckeditor/_source/plugins/basicstyles/plugin.js +0 -101
  254. data/lib/forge/public/javascripts/ckeditor/_source/plugins/bidi/plugin.js +0 -247
  255. data/lib/forge/public/javascripts/ckeditor/_source/plugins/blockquote/plugin.js +0 -301
  256. data/lib/forge/public/javascripts/ckeditor/_source/plugins/button/plugin.js +0 -277
  257. data/lib/forge/public/javascripts/ckeditor/_source/plugins/clipboard/dialogs/paste.js +0 -205
  258. data/lib/forge/public/javascripts/ckeditor/_source/plugins/clipboard/plugin.js +0 -412
  259. data/lib/forge/public/javascripts/ckeditor/_source/plugins/colorbutton/plugin.js +0 -251
  260. data/lib/forge/public/javascripts/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +0 -340
  261. data/lib/forge/public/javascripts/ckeditor/_source/plugins/colordialog/plugin.js +0 -13
  262. data/lib/forge/public/javascripts/ckeditor/_source/plugins/contextmenu/plugin.js +0 -276
  263. data/lib/forge/public/javascripts/ckeditor/_source/plugins/dialog/dialogDefinition.js +0 -315
  264. data/lib/forge/public/javascripts/ckeditor/_source/plugins/dialog/plugin.js +0 -3016
  265. data/lib/forge/public/javascripts/ckeditor/_source/plugins/dialogadvtab/plugin.js +0 -207
  266. data/lib/forge/public/javascripts/ckeditor/_source/plugins/dialogui/plugin.js +0 -1522
  267. data/lib/forge/public/javascripts/ckeditor/_source/plugins/div/dialogs/div.js +0 -535
  268. data/lib/forge/public/javascripts/ckeditor/_source/plugins/div/plugin.js +0 -121
  269. data/lib/forge/public/javascripts/ckeditor/_source/plugins/domiterator/plugin.js +0 -350
  270. data/lib/forge/public/javascripts/ckeditor/_source/plugins/editingblock/plugin.js +0 -230
  271. data/lib/forge/public/javascripts/ckeditor/_source/plugins/elementspath/plugin.js +0 -206
  272. data/lib/forge/public/javascripts/ckeditor/_source/plugins/embed/dialogs/embed.js +0 -65
  273. data/lib/forge/public/javascripts/ckeditor/_source/plugins/embed/plugin.js +0 -43
  274. data/lib/forge/public/javascripts/ckeditor/_source/plugins/enterkey/plugin.js +0 -363
  275. data/lib/forge/public/javascripts/ckeditor/_source/plugins/entities/plugin.js +0 -227
  276. data/lib/forge/public/javascripts/ckeditor/_source/plugins/fakeobjects/plugin.js +0 -122
  277. data/lib/forge/public/javascripts/ckeditor/_source/plugins/filebrowser/plugin.js +0 -491
  278. data/lib/forge/public/javascripts/ckeditor/_source/plugins/find/dialogs/find.js +0 -885
  279. data/lib/forge/public/javascripts/ckeditor/_source/plugins/find/plugin.js +0 -46
  280. data/lib/forge/public/javascripts/ckeditor/_source/plugins/flash/dialogs/flash.js +0 -698
  281. data/lib/forge/public/javascripts/ckeditor/_source/plugins/flash/plugin.js +0 -174
  282. data/lib/forge/public/javascripts/ckeditor/_source/plugins/floatpanel/plugin.js +0 -398
  283. data/lib/forge/public/javascripts/ckeditor/_source/plugins/font/plugin.js +0 -234
  284. data/lib/forge/public/javascripts/ckeditor/_source/plugins/format/plugin.js +0 -194
  285. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/button.js +0 -135
  286. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/checkbox.js +0 -155
  287. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/form.js +0 -177
  288. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +0 -98
  289. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/radio.js +0 -135
  290. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/select.js +0 -556
  291. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textarea.js +0 -114
  292. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textfield.js +0 -199
  293. data/lib/forge/public/javascripts/ckeditor/_source/plugins/forms/plugin.js +0 -281
  294. data/lib/forge/public/javascripts/ckeditor/_source/plugins/horizontalrule/plugin.js +0 -36
  295. data/lib/forge/public/javascripts/ckeditor/_source/plugins/htmldataprocessor/plugin.js +0 -494
  296. data/lib/forge/public/javascripts/ckeditor/_source/plugins/htmlwriter/plugin.js +0 -314
  297. data/lib/forge/public/javascripts/ckeditor/_source/plugins/iframedialog/plugin.js +0 -136
  298. data/lib/forge/public/javascripts/ckeditor/_source/plugins/image/dialogs/image.js +0 -1396
  299. data/lib/forge/public/javascripts/ckeditor/_source/plugins/image/plugin.js +0 -81
  300. data/lib/forge/public/javascripts/ckeditor/_source/plugins/indent/plugin.js +0 -447
  301. data/lib/forge/public/javascripts/ckeditor/_source/plugins/justify/plugin.js +0 -190
  302. data/lib/forge/public/javascripts/ckeditor/_source/plugins/keystrokes/plugin.js +0 -229
  303. data/lib/forge/public/javascripts/ckeditor/_source/plugins/link/dialogs/anchor.js +0 -99
  304. data/lib/forge/public/javascripts/ckeditor/_source/plugins/link/dialogs/link.js +0 -1420
  305. data/lib/forge/public/javascripts/ckeditor/_source/plugins/link/plugin.js +0 -238
  306. data/lib/forge/public/javascripts/ckeditor/_source/plugins/list/plugin.js +0 -683
  307. data/lib/forge/public/javascripts/ckeditor/_source/plugins/listblock/plugin.js +0 -257
  308. data/lib/forge/public/javascripts/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +0 -203
  309. data/lib/forge/public/javascripts/ckeditor/_source/plugins/liststyle/plugin.js +0 -66
  310. data/lib/forge/public/javascripts/ckeditor/_source/plugins/maximize/plugin.js +0 -343
  311. data/lib/forge/public/javascripts/ckeditor/_source/plugins/menu/plugin.js +0 -409
  312. data/lib/forge/public/javascripts/ckeditor/_source/plugins/menubutton/plugin.js +0 -94
  313. data/lib/forge/public/javascripts/ckeditor/_source/plugins/newpage/plugin.js +0 -54
  314. data/lib/forge/public/javascripts/ckeditor/_source/plugins/pagebreak/plugin.js +0 -121
  315. data/lib/forge/public/javascripts/ckeditor/_source/plugins/panel/plugin.js +0 -398
  316. data/lib/forge/public/javascripts/ckeditor/_source/plugins/panelbutton/plugin.js +0 -147
  317. data/lib/forge/public/javascripts/ckeditor/_source/plugins/pastefromword/filter/default.js +0 -1170
  318. data/lib/forge/public/javascripts/ckeditor/_source/plugins/pastefromword/plugin.js +0 -122
  319. data/lib/forge/public/javascripts/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +0 -70
  320. data/lib/forge/public/javascripts/ckeditor/_source/plugins/pastetext/plugin.js +0 -145
  321. data/lib/forge/public/javascripts/ckeditor/_source/plugins/popup/plugin.js +0 -64
  322. data/lib/forge/public/javascripts/ckeditor/_source/plugins/preview/plugin.js +0 -108
  323. data/lib/forge/public/javascripts/ckeditor/_source/plugins/print/plugin.js +0 -41
  324. data/lib/forge/public/javascripts/ckeditor/_source/plugins/removeformat/plugin.js +0 -184
  325. data/lib/forge/public/javascripts/ckeditor/_source/plugins/resize/plugin.js +0 -157
  326. data/lib/forge/public/javascripts/ckeditor/_source/plugins/richcombo/plugin.js +0 -370
  327. data/lib/forge/public/javascripts/ckeditor/_source/plugins/save/plugin.js +0 -55
  328. data/lib/forge/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/options.js +0 -533
  329. data/lib/forge/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +0 -71
  330. data/lib/forge/public/javascripts/ckeditor/_source/plugins/scayt/plugin.js +0 -943
  331. data/lib/forge/public/javascripts/ckeditor/_source/plugins/selection/plugin.js +0 -1367
  332. data/lib/forge/public/javascripts/ckeditor/_source/plugins/showblocks/plugin.js +0 -156
  333. data/lib/forge/public/javascripts/ckeditor/_source/plugins/showborders/plugin.js +0 -201
  334. data/lib/forge/public/javascripts/ckeditor/_source/plugins/smiley/dialogs/smiley.js +0 -216
  335. data/lib/forge/public/javascripts/ckeditor/_source/plugins/smiley/plugin.js +0 -94
  336. data/lib/forge/public/javascripts/ckeditor/_source/plugins/sourcearea/plugin.js +0 -207
  337. data/lib/forge/public/javascripts/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +0 -409
  338. data/lib/forge/public/javascripts/ckeditor/_source/plugins/specialchar/plugin.js +0 -29
  339. data/lib/forge/public/javascripts/ckeditor/_source/plugins/styles/plugin.js +0 -1445
  340. data/lib/forge/public/javascripts/ckeditor/_source/plugins/styles/styles/default.js +0 -88
  341. data/lib/forge/public/javascripts/ckeditor/_source/plugins/stylescombo/plugin.js +0 -207
  342. data/lib/forge/public/javascripts/ckeditor/_source/plugins/tab/plugin.js +0 -367
  343. data/lib/forge/public/javascripts/ckeditor/_source/plugins/table/dialogs/table.js +0 -673
  344. data/lib/forge/public/javascripts/ckeditor/_source/plugins/table/plugin.js +0 -78
  345. data/lib/forge/public/javascripts/ckeditor/_source/plugins/tableresize/plugin.js +0 -450
  346. data/lib/forge/public/javascripts/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +0 -533
  347. data/lib/forge/public/javascripts/ckeditor/_source/plugins/tabletools/plugin.js +0 -1120
  348. data/lib/forge/public/javascripts/ckeditor/_source/plugins/templates/dialogs/templates.js +0 -231
  349. data/lib/forge/public/javascripts/ckeditor/_source/plugins/templates/plugin.js +0 -100
  350. data/lib/forge/public/javascripts/ckeditor/_source/plugins/templates/templates/default.js +0 -94
  351. data/lib/forge/public/javascripts/ckeditor/_source/plugins/toolbar/plugin.js +0 -481
  352. data/lib/forge/public/javascripts/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +0 -205
  353. data/lib/forge/public/javascripts/ckeditor/_source/plugins/uicolor/lang/en.js +0 -15
  354. data/lib/forge/public/javascripts/ckeditor/_source/plugins/uicolor/plugin.js +0 -37
  355. data/lib/forge/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +0 -15
  356. data/lib/forge/public/javascripts/ckeditor/_source/plugins/uicolor/yui/yui.js +0 -71
  357. data/lib/forge/public/javascripts/ckeditor/_source/plugins/undo/plugin.js +0 -555
  358. data/lib/forge/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.css +0 -82
  359. data/lib/forge/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.js +0 -176
  360. data/lib/forge/public/javascripts/ckeditor/_source/plugins/wsc/plugin.js +0 -33
  361. data/lib/forge/public/javascripts/ckeditor/_source/plugins/wysiwygarea/plugin.js +0 -1126
  362. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/dialog.css +0 -856
  363. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/editor.css +0 -25
  364. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/elementspath.css +0 -73
  365. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/icons.css +0 -357
  366. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/icons.png +0 -0
  367. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  368. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  369. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  370. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  371. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/mini.gif +0 -0
  372. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/noimage.png +0 -0
  373. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/sprites.png +0 -0
  374. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  375. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  376. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/mainui.css +0 -195
  377. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/menu.css +0 -202
  378. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/panel.css +0 -217
  379. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/presets.css +0 -49
  380. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/reset.css +0 -84
  381. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/richcombo.css +0 -277
  382. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/skin.js +0 -268
  383. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/templates.css +0 -88
  384. data/lib/forge/public/javascripts/ckeditor/_source/skins/kama/toolbar.css +0 -409
  385. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/dialog.css +0 -765
  386. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/editor.css +0 -25
  387. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/elementspath.css +0 -74
  388. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/icons.css +0 -354
  389. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/icons.png +0 -0
  390. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/icons_rtl.png +0 -0
  391. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.gif +0 -0
  392. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.png +0 -0
  393. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides_rtl.png +0 -0
  394. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/mini.gif +0 -0
  395. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/noimage.png +0 -0
  396. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/sprites.png +0 -0
  397. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/images/sprites_ie6.png +0 -0
  398. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/mainui.css +0 -145
  399. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/menu.css +0 -199
  400. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/panel.css +0 -212
  401. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/presets.css +0 -49
  402. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/reset.css +0 -84
  403. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/richcombo.css +0 -297
  404. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/skin.js +0 -81
  405. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/templates.css +0 -87
  406. data/lib/forge/public/javascripts/ckeditor/_source/skins/office2003/toolbar.css +0 -470
  407. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/dialog.css +0 -780
  408. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/editor.css +0 -25
  409. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/elementspath.css +0 -74
  410. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/icons.css +0 -354
  411. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/icons.png +0 -0
  412. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/icons_rtl.png +0 -0
  413. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.gif +0 -0
  414. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.png +0 -0
  415. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides_rtl.png +0 -0
  416. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/mini.gif +0 -0
  417. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/noimage.png +0 -0
  418. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/sprites.png +0 -0
  419. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/sprites_ie6.png +0 -0
  420. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/images/toolbar_start.gif +0 -0
  421. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/mainui.css +0 -154
  422. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/menu.css +0 -201
  423. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/panel.css +0 -212
  424. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/presets.css +0 -50
  425. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/reset.css +0 -84
  426. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/richcombo.css +0 -297
  427. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/skin.js +0 -77
  428. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/templates.css +0 -87
  429. data/lib/forge/public/javascripts/ckeditor/_source/skins/v2/toolbar.css +0 -423
  430. data/lib/forge/public/javascripts/ckeditor/_source/themes/default/theme.js +0 -356
  431. data/lib/forge/public/javascripts/ckeditor/adapters/jquery.js +0 -6
  432. data/lib/forge/public/javascripts/ckeditor/ckeditor.js +0 -135
  433. data/lib/forge/public/javascripts/ckeditor/ckeditor.pack +0 -211
  434. data/lib/forge/public/javascripts/ckeditor/ckeditor_basic.js +0 -8
  435. data/lib/forge/public/javascripts/ckeditor/ckeditor_basic_source.js +0 -20
  436. data/lib/forge/public/javascripts/ckeditor/ckeditor_source.js +0 -25
  437. data/lib/forge/public/javascripts/ckeditor/config.js +0 -47
  438. data/lib/forge/public/javascripts/ckeditor/css/ckfinder.css +0 -299
  439. data/lib/forge/public/javascripts/ckeditor/css/fck_dialog.css +0 -119
  440. data/lib/forge/public/javascripts/ckeditor/css/fck_editor.css +0 -448
  441. data/lib/forge/public/javascripts/ckeditor/css/swfupload.css +0 -94
  442. data/lib/forge/public/javascripts/ckeditor/images/add.gif +0 -0
  443. data/lib/forge/public/javascripts/ckeditor/images/cancelbutton.gif +0 -0
  444. data/lib/forge/public/javascripts/ckeditor/images/ckfnothumb.gif +0 -0
  445. data/lib/forge/public/javascripts/ckeditor/images/doc.gif +0 -0
  446. data/lib/forge/public/javascripts/ckeditor/images/image_new.gif +0 -0
  447. data/lib/forge/public/javascripts/ckeditor/images/mp3.gif +0 -0
  448. data/lib/forge/public/javascripts/ckeditor/images/pdf.gif +0 -0
  449. data/lib/forge/public/javascripts/ckeditor/images/rar.gif +0 -0
  450. data/lib/forge/public/javascripts/ckeditor/images/refresh.gif +0 -0
  451. data/lib/forge/public/javascripts/ckeditor/images/select_files.png +0 -0
  452. data/lib/forge/public/javascripts/ckeditor/images/spacer.gif +0 -0
  453. data/lib/forge/public/javascripts/ckeditor/images/swf.gif +0 -0
  454. data/lib/forge/public/javascripts/ckeditor/images/toolbar.start.gif +0 -0
  455. data/lib/forge/public/javascripts/ckeditor/images/xls.gif +0 -0
  456. data/lib/forge/public/javascripts/ckeditor/lang/_languages.js +0 -6
  457. data/lib/forge/public/javascripts/ckeditor/lang/_translationstatus.txt +0 -60
  458. data/lib/forge/public/javascripts/ckeditor/lang/af.js +0 -6
  459. data/lib/forge/public/javascripts/ckeditor/lang/ar.js +0 -6
  460. data/lib/forge/public/javascripts/ckeditor/lang/bg.js +0 -6
  461. data/lib/forge/public/javascripts/ckeditor/lang/bn.js +0 -6
  462. data/lib/forge/public/javascripts/ckeditor/lang/bs.js +0 -6
  463. data/lib/forge/public/javascripts/ckeditor/lang/ca.js +0 -6
  464. data/lib/forge/public/javascripts/ckeditor/lang/cs.js +0 -6
  465. data/lib/forge/public/javascripts/ckeditor/lang/cy.js +0 -6
  466. data/lib/forge/public/javascripts/ckeditor/lang/da.js +0 -6
  467. data/lib/forge/public/javascripts/ckeditor/lang/de.js +0 -6
  468. data/lib/forge/public/javascripts/ckeditor/lang/el.js +0 -6
  469. data/lib/forge/public/javascripts/ckeditor/lang/en-au.js +0 -6
  470. data/lib/forge/public/javascripts/ckeditor/lang/en-ca.js +0 -6
  471. data/lib/forge/public/javascripts/ckeditor/lang/en-gb.js +0 -6
  472. data/lib/forge/public/javascripts/ckeditor/lang/en.js +0 -6
  473. data/lib/forge/public/javascripts/ckeditor/lang/eo.js +0 -6
  474. data/lib/forge/public/javascripts/ckeditor/lang/es.js +0 -6
  475. data/lib/forge/public/javascripts/ckeditor/lang/et.js +0 -6
  476. data/lib/forge/public/javascripts/ckeditor/lang/eu.js +0 -6
  477. data/lib/forge/public/javascripts/ckeditor/lang/fa.js +0 -6
  478. data/lib/forge/public/javascripts/ckeditor/lang/fi.js +0 -6
  479. data/lib/forge/public/javascripts/ckeditor/lang/fo.js +0 -6
  480. data/lib/forge/public/javascripts/ckeditor/lang/fr-ca.js +0 -6
  481. data/lib/forge/public/javascripts/ckeditor/lang/fr.js +0 -6
  482. data/lib/forge/public/javascripts/ckeditor/lang/gl.js +0 -6
  483. data/lib/forge/public/javascripts/ckeditor/lang/gu.js +0 -6
  484. data/lib/forge/public/javascripts/ckeditor/lang/he.js +0 -6
  485. data/lib/forge/public/javascripts/ckeditor/lang/hi.js +0 -6
  486. data/lib/forge/public/javascripts/ckeditor/lang/hr.js +0 -6
  487. data/lib/forge/public/javascripts/ckeditor/lang/hu.js +0 -6
  488. data/lib/forge/public/javascripts/ckeditor/lang/is.js +0 -6
  489. data/lib/forge/public/javascripts/ckeditor/lang/it.js +0 -6
  490. data/lib/forge/public/javascripts/ckeditor/lang/ja.js +0 -6
  491. data/lib/forge/public/javascripts/ckeditor/lang/km.js +0 -6
  492. data/lib/forge/public/javascripts/ckeditor/lang/ko.js +0 -6
  493. data/lib/forge/public/javascripts/ckeditor/lang/lt.js +0 -6
  494. data/lib/forge/public/javascripts/ckeditor/lang/lv.js +0 -6
  495. data/lib/forge/public/javascripts/ckeditor/lang/mn.js +0 -6
  496. data/lib/forge/public/javascripts/ckeditor/lang/ms.js +0 -6
  497. data/lib/forge/public/javascripts/ckeditor/lang/nb.js +0 -6
  498. data/lib/forge/public/javascripts/ckeditor/lang/nl.js +0 -6
  499. data/lib/forge/public/javascripts/ckeditor/lang/no.js +0 -6
  500. data/lib/forge/public/javascripts/ckeditor/lang/pl.js +0 -6
  501. data/lib/forge/public/javascripts/ckeditor/lang/pt-br.js +0 -6
  502. data/lib/forge/public/javascripts/ckeditor/lang/pt.js +0 -6
  503. data/lib/forge/public/javascripts/ckeditor/lang/ro.js +0 -6
  504. data/lib/forge/public/javascripts/ckeditor/lang/ru.js +0 -6
  505. data/lib/forge/public/javascripts/ckeditor/lang/sk.js +0 -6
  506. data/lib/forge/public/javascripts/ckeditor/lang/sl.js +0 -6
  507. data/lib/forge/public/javascripts/ckeditor/lang/sr-latn.js +0 -6
  508. data/lib/forge/public/javascripts/ckeditor/lang/sr.js +0 -6
  509. data/lib/forge/public/javascripts/ckeditor/lang/sv.js +0 -6
  510. data/lib/forge/public/javascripts/ckeditor/lang/th.js +0 -6
  511. data/lib/forge/public/javascripts/ckeditor/lang/tr.js +0 -6
  512. data/lib/forge/public/javascripts/ckeditor/lang/uk.js +0 -6
  513. data/lib/forge/public/javascripts/ckeditor/lang/vi.js +0 -6
  514. data/lib/forge/public/javascripts/ckeditor/lang/zh-cn.js +0 -6
  515. data/lib/forge/public/javascripts/ckeditor/lang/zh.js +0 -6
  516. data/lib/forge/public/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  517. data/lib/forge/public/javascripts/ckeditor/plugins/attachment/images/attachment.png +0 -0
  518. data/lib/forge/public/javascripts/ckeditor/plugins/attachment/lang/en.js +0 -10
  519. data/lib/forge/public/javascripts/ckeditor/plugins/attachment/lang/ru.js +0 -10
  520. data/lib/forge/public/javascripts/ckeditor/plugins/attachment/lang/uk.js +0 -10
  521. data/lib/forge/public/javascripts/ckeditor/plugins/embed/images/embed.png +0 -0
  522. data/lib/forge/public/javascripts/ckeditor/plugins/embed/lang/en.js +0 -9
  523. data/lib/forge/public/javascripts/ckeditor/plugins/embed/lang/ru.js +0 -9
  524. data/lib/forge/public/javascripts/ckeditor/plugins/embed/lang/uk.js +0 -9
  525. data/lib/forge/public/javascripts/ckeditor/plugins/flash/images/placeholder.png +0 -0
  526. data/lib/forge/public/javascripts/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  527. data/lib/forge/public/javascripts/ckeditor/plugins/link/images/anchor.gif +0 -0
  528. data/lib/forge/public/javascripts/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  529. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  530. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  531. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  532. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  533. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  534. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  535. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  536. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  537. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  538. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  539. data/lib/forge/public/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  540. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  541. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  542. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  543. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  544. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  545. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  546. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  547. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  548. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/heart.gif +0 -0
  549. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  550. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  551. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  552. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  553. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  554. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  555. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  556. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  557. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  558. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  559. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  560. data/lib/forge/public/javascripts/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  561. data/lib/forge/public/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  562. data/lib/forge/public/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  563. data/lib/forge/public/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  564. data/lib/forge/public/javascripts/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  565. data/lib/forge/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  566. data/lib/forge/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  567. data/lib/forge/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  568. data/lib/forge/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  569. data/lib/forge/public/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +0 -49
  570. data/lib/forge/public/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +0 -52
  571. data/lib/forge/public/javascripts/ckeditor/skins/kama/dialog.css +0 -9
  572. data/lib/forge/public/javascripts/ckeditor/skins/kama/editor.css +0 -12
  573. data/lib/forge/public/javascripts/ckeditor/skins/kama/icons.png +0 -0
  574. data/lib/forge/public/javascripts/ckeditor/skins/kama/icons_rtl.png +0 -0
  575. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  576. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  577. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  578. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/mini.gif +0 -0
  579. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/noimage.png +0 -0
  580. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/sprites.png +0 -0
  581. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  582. data/lib/forge/public/javascripts/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  583. data/lib/forge/public/javascripts/ckeditor/skins/kama/skin.js +0 -7
  584. data/lib/forge/public/javascripts/ckeditor/skins/kama/templates.css +0 -6
  585. data/lib/forge/public/javascripts/ckeditor/skins/office2003/dialog.css +0 -9
  586. data/lib/forge/public/javascripts/ckeditor/skins/office2003/editor.css +0 -13
  587. data/lib/forge/public/javascripts/ckeditor/skins/office2003/icons.png +0 -0
  588. data/lib/forge/public/javascripts/ckeditor/skins/office2003/icons_rtl.png +0 -0
  589. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  590. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  591. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  592. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/mini.gif +0 -0
  593. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/noimage.png +0 -0
  594. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/sprites.png +0 -0
  595. data/lib/forge/public/javascripts/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  596. data/lib/forge/public/javascripts/ckeditor/skins/office2003/skin.js +0 -6
  597. data/lib/forge/public/javascripts/ckeditor/skins/office2003/templates.css +0 -6
  598. data/lib/forge/public/javascripts/ckeditor/skins/v2/dialog.css +0 -8
  599. data/lib/forge/public/javascripts/ckeditor/skins/v2/editor.css +0 -12
  600. data/lib/forge/public/javascripts/ckeditor/skins/v2/icons.png +0 -0
  601. data/lib/forge/public/javascripts/ckeditor/skins/v2/icons_rtl.png +0 -0
  602. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  603. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  604. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  605. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/mini.gif +0 -0
  606. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/noimage.png +0 -0
  607. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/sprites.png +0 -0
  608. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  609. data/lib/forge/public/javascripts/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  610. data/lib/forge/public/javascripts/ckeditor/skins/v2/skin.js +0 -6
  611. data/lib/forge/public/javascripts/ckeditor/skins/v2/templates.css +0 -6
  612. data/lib/forge/public/javascripts/ckeditor/swfupload/fileprogress.js +0 -275
  613. data/lib/forge/public/javascripts/ckeditor/swfupload/handlers.js +0 -170
  614. data/lib/forge/public/javascripts/ckeditor/swfupload/mootools-1.2.3-core-yc.js +0 -356
  615. data/lib/forge/public/javascripts/ckeditor/swfupload/querystring.js +0 -40
  616. data/lib/forge/public/javascripts/ckeditor/swfupload/swfupload.js +0 -1
  617. data/lib/forge/public/javascripts/ckeditor/swfupload/swfupload.queue.js +0 -1
  618. data/lib/forge/public/javascripts/ckeditor/swfupload/swfupload.swf +0 -0
  619. data/lib/forge/public/javascripts/ckeditor/swfupload/swfupload.swfobject.js +0 -111
  620. data/lib/forge/public/javascripts/ckeditor/themes/default/theme.js +0 -8
@@ -1,3016 +0,0 @@
1
- /*
2
- Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
3
- For licensing, see LICENSE.html or http://ckeditor.com/license
4
- */
5
-
6
- /**
7
- * @fileOverview The floating dialog plugin.
8
- */
9
-
10
- /**
11
- * No resize for this dialog.
12
- * @constant
13
- */
14
- CKEDITOR.DIALOG_RESIZE_NONE = 0;
15
-
16
- /**
17
- * Only allow horizontal resizing for this dialog, disable vertical resizing.
18
- * @constant
19
- */
20
- CKEDITOR.DIALOG_RESIZE_WIDTH = 1;
21
-
22
- /**
23
- * Only allow vertical resizing for this dialog, disable horizontal resizing.
24
- * @constant
25
- */
26
- CKEDITOR.DIALOG_RESIZE_HEIGHT = 2;
27
-
28
- /*
29
- * Allow the dialog to be resized in both directions.
30
- * @constant
31
- */
32
- CKEDITOR.DIALOG_RESIZE_BOTH = 3;
33
-
34
- (function()
35
- {
36
- function isTabVisible( tabId )
37
- {
38
- return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight;
39
- }
40
-
41
- function getPreviousVisibleTab()
42
- {
43
- var tabId = this._.currentTabId,
44
- length = this._.tabIdList.length,
45
- tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length;
46
-
47
- for ( var i = tabIndex - 1 ; i > tabIndex - length ; i-- )
48
- {
49
- if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) )
50
- return this._.tabIdList[ i % length ];
51
- }
52
-
53
- return null;
54
- }
55
-
56
- function getNextVisibleTab()
57
- {
58
- var tabId = this._.currentTabId,
59
- length = this._.tabIdList.length,
60
- tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId );
61
-
62
- for ( var i = tabIndex + 1 ; i < tabIndex + length ; i++ )
63
- {
64
- if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) )
65
- return this._.tabIdList[ i % length ];
66
- }
67
-
68
- return null;
69
- }
70
-
71
-
72
- function clearOrRecoverTextInputValue( container, isRecover )
73
- {
74
- var inputs = container.$.getElementsByTagName( 'input' );
75
- for ( var i = 0, length = inputs.length; i < length ; i++ )
76
- {
77
- var item = new CKEDITOR.dom.element( inputs[ i ] );
78
-
79
- if ( item.getAttribute( 'type' ).toLowerCase() == 'text' )
80
- {
81
- if ( isRecover )
82
- {
83
- item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' );
84
- item.removeCustomData( 'fake_value' );
85
- }
86
- else
87
- {
88
- item.setCustomData( 'fake_value', item.getAttribute( 'value' ) );
89
- item.setAttribute( 'value', '' );
90
- }
91
- }
92
- }
93
- }
94
-
95
- /**
96
- * This is the base class for runtime dialog objects. An instance of this
97
- * class represents a single named dialog for a single editor instance.
98
- * @param {Object} editor The editor which created the dialog.
99
- * @param {String} dialogName The dialog's registered name.
100
- * @constructor
101
- * @example
102
- * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' );
103
- */
104
- CKEDITOR.dialog = function( editor, dialogName )
105
- {
106
- // Load the dialog definition.
107
- var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];
108
-
109
- // Completes the definition with the default values.
110
- definition = CKEDITOR.tools.extend( definition( editor ), defaultDialogDefinition );
111
-
112
- // Clone a functionally independent copy for this dialog.
113
- definition = CKEDITOR.tools.clone( definition );
114
-
115
- // Create a complex definition object, extending it with the API
116
- // functions.
117
- definition = new definitionObject( this, definition );
118
-
119
-
120
- var doc = CKEDITOR.document;
121
-
122
- var themeBuilt = editor.theme.buildDialog( editor );
123
-
124
- // Initialize some basic parameters.
125
- this._ =
126
- {
127
- editor : editor,
128
- element : themeBuilt.element,
129
- name : dialogName,
130
- contentSize : { width : 0, height : 0 },
131
- size : { width : 0, height : 0 },
132
- updateSize : false,
133
- contents : {},
134
- buttons : {},
135
- accessKeyMap : {},
136
-
137
- // Initialize the tab and page map.
138
- tabs : {},
139
- tabIdList : [],
140
- currentTabId : null,
141
- currentTabIndex : null,
142
- pageCount : 0,
143
- lastTab : null,
144
- tabBarMode : false,
145
-
146
- // Initialize the tab order array for input widgets.
147
- focusList : [],
148
- currentFocusIndex : 0,
149
- hasFocus : false
150
- };
151
-
152
- this.parts = themeBuilt.parts;
153
-
154
- CKEDITOR.tools.setTimeout( function()
155
- {
156
- editor.fire( 'ariaWidget', this.parts.contents );
157
- },
158
- 0, this );
159
-
160
- // Set the startup styles for the dialog, avoiding it enlarging the
161
- // page size on the dialog creation.
162
- this.parts.dialog.setStyles(
163
- {
164
- position : CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed',
165
- top : 0,
166
- left: 0,
167
- visibility : 'hidden'
168
- });
169
-
170
- // Call the CKEDITOR.event constructor to initialize this instance.
171
- CKEDITOR.event.call( this );
172
-
173
- // Fire the "dialogDefinition" event, making it possible to customize
174
- // the dialog definition.
175
- this.definition = definition = CKEDITOR.fire( 'dialogDefinition',
176
- {
177
- name : dialogName,
178
- definition : definition
179
- }
180
- , editor ).definition;
181
- // Initialize load, show, hide, ok and cancel events.
182
- if ( definition.onLoad )
183
- this.on( 'load', definition.onLoad );
184
-
185
- if ( definition.onShow )
186
- this.on( 'show', definition.onShow );
187
-
188
- if ( definition.onHide )
189
- this.on( 'hide', definition.onHide );
190
-
191
- if ( definition.onOk )
192
- {
193
- this.on( 'ok', function( evt )
194
- {
195
- // Dialog confirm might probably introduce content changes (#5415).
196
- editor.fire( 'saveSnapshot' );
197
- setTimeout( function () { editor.fire( 'saveSnapshot' ); }, 0 );
198
- if ( definition.onOk.call( this, evt ) === false )
199
- evt.data.hide = false;
200
- });
201
- }
202
-
203
- if ( definition.onCancel )
204
- {
205
- this.on( 'cancel', function( evt )
206
- {
207
- if ( definition.onCancel.call( this, evt ) === false )
208
- evt.data.hide = false;
209
- });
210
- }
211
-
212
- var me = this;
213
-
214
- // Iterates over all items inside all content in the dialog, calling a
215
- // function for each of them.
216
- var iterContents = function( func )
217
- {
218
- var contents = me._.contents,
219
- stop = false;
220
-
221
- for ( var i in contents )
222
- {
223
- for ( var j in contents[i] )
224
- {
225
- stop = func.call( this, contents[i][j] );
226
- if ( stop )
227
- return;
228
- }
229
- }
230
- };
231
-
232
- this.on( 'ok', function( evt )
233
- {
234
- iterContents( function( item )
235
- {
236
- if ( item.validate )
237
- {
238
- var isValid = item.validate( this );
239
-
240
- if ( typeof isValid == 'string' )
241
- {
242
- alert( isValid );
243
- isValid = false;
244
- }
245
-
246
- if ( isValid === false )
247
- {
248
- if ( item.select )
249
- item.select();
250
- else
251
- item.focus();
252
-
253
- evt.data.hide = false;
254
- evt.stop();
255
- return true;
256
- }
257
- }
258
- });
259
- }, this, null, 0 );
260
-
261
- this.on( 'cancel', function( evt )
262
- {
263
- iterContents( function( item )
264
- {
265
- if ( item.isChanged() )
266
- {
267
- if ( !confirm( editor.lang.common.confirmCancel ) )
268
- evt.data.hide = false;
269
- return true;
270
- }
271
- });
272
- }, this, null, 0 );
273
-
274
- this.parts.close.on( 'click', function( evt )
275
- {
276
- if ( this.fire( 'cancel', { hide : true } ).hide !== false )
277
- this.hide();
278
- evt.data.preventDefault();
279
- }, this );
280
-
281
- // Sort focus list according to tab order definitions.
282
- function setupFocus()
283
- {
284
- var focusList = me._.focusList;
285
- focusList.sort( function( a, b )
286
- {
287
- // Mimics browser tab order logics;
288
- if ( a.tabIndex != b.tabIndex )
289
- return b.tabIndex - a.tabIndex;
290
- // Sort is not stable in some browsers,
291
- // fall-back the comparator to 'focusIndex';
292
- else
293
- return a.focusIndex - b.focusIndex;
294
- });
295
-
296
- var size = focusList.length;
297
- for ( var i = 0; i < size; i++ )
298
- focusList[ i ].focusIndex = i;
299
- }
300
-
301
- function changeFocus( forward )
302
- {
303
- var focusList = me._.focusList,
304
- offset = forward ? 1 : -1;
305
- if ( focusList.length < 1 )
306
- return;
307
-
308
- var current = me._.currentFocusIndex;
309
-
310
- // Trigger the 'blur' event of any input element before anything,
311
- // since certain UI updates may depend on it.
312
- try
313
- {
314
- focusList[ current ].getInputElement().$.blur();
315
- }
316
- catch( e ){}
317
-
318
- var startIndex = ( current + offset + focusList.length ) % focusList.length,
319
- currentIndex = startIndex;
320
- while ( !focusList[ currentIndex ].isFocusable() )
321
- {
322
- currentIndex = ( currentIndex + offset + focusList.length ) % focusList.length;
323
- if ( currentIndex == startIndex )
324
- break;
325
- }
326
- focusList[ currentIndex ].focus();
327
-
328
- // Select whole field content.
329
- if ( focusList[ currentIndex ].type == 'text' )
330
- focusList[ currentIndex ].select();
331
- }
332
-
333
- this.changeFocus = changeFocus;
334
-
335
- var processed;
336
-
337
- function focusKeydownHandler( evt )
338
- {
339
- // If I'm not the top dialog, ignore.
340
- if ( me != CKEDITOR.dialog._.currentTop )
341
- return;
342
-
343
- var keystroke = evt.data.getKeystroke(),
344
- rtl = editor.lang.dir == 'rtl';
345
-
346
- processed = 0;
347
- if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 )
348
- {
349
- var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 );
350
-
351
- // Handling Tab and Shift-Tab.
352
- if ( me._.tabBarMode )
353
- {
354
- // Change tabs.
355
- var nextId = shiftPressed ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me );
356
- me.selectPage( nextId );
357
- me._.tabs[ nextId ][ 0 ].focus();
358
- }
359
- else
360
- {
361
- // Change the focus of inputs.
362
- changeFocus( !shiftPressed );
363
- }
364
-
365
- processed = 1;
366
- }
367
- else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 )
368
- {
369
- // Alt-F10 puts focus into the current tab item in the tab bar.
370
- me._.tabBarMode = true;
371
- me._.tabs[ me._.currentTabId ][ 0 ].focus();
372
- processed = 1;
373
- }
374
- else if ( ( keystroke == 37 || keystroke == 39 ) && me._.tabBarMode )
375
- {
376
- // Arrow keys - used for changing tabs.
377
- nextId = ( keystroke == ( rtl ? 39 : 37 ) ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) );
378
- me.selectPage( nextId );
379
- me._.tabs[ nextId ][ 0 ].focus();
380
- processed = 1;
381
- }
382
- else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode )
383
- {
384
- this.selectPage( this._.currentTabId );
385
- this._.tabBarMode = false;
386
- this._.currentFocusIndex = -1;
387
- changeFocus( true );
388
- processed = 1;
389
- }
390
-
391
- if ( processed )
392
- {
393
- evt.stop();
394
- evt.data.preventDefault();
395
- }
396
- }
397
-
398
- function focusKeyPressHandler( evt )
399
- {
400
- processed && evt.data.preventDefault();
401
- }
402
-
403
- var dialogElement = this._.element;
404
- // Add the dialog keyboard handlers.
405
- this.on( 'show', function()
406
- {
407
- dialogElement.on( 'keydown', focusKeydownHandler, this, null, 0 );
408
- // Some browsers instead, don't cancel key events in the keydown, but in the
409
- // keypress. So we must do a longer trip in those cases. (#4531)
410
- if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )
411
- dialogElement.on( 'keypress', focusKeyPressHandler, this );
412
-
413
- } );
414
- this.on( 'hide', function()
415
- {
416
- dialogElement.removeListener( 'keydown', focusKeydownHandler );
417
- if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )
418
- dialogElement.removeListener( 'keypress', focusKeyPressHandler );
419
- } );
420
- this.on( 'iframeAdded', function( evt )
421
- {
422
- var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document );
423
- doc.on( 'keydown', focusKeydownHandler, this, null, 0 );
424
- } );
425
-
426
- // Auto-focus logic in dialog.
427
- this.on( 'show', function()
428
- {
429
- // Setup tabIndex on showing the dialog instead of on loading
430
- // to allow dynamic tab order happen in dialog definition.
431
- setupFocus();
432
-
433
- if ( editor.config.dialog_startupFocusTab
434
- && me._.pageCount > 1 )
435
- {
436
- me._.tabBarMode = true;
437
- me._.tabs[ me._.currentTabId ][ 0 ].focus();
438
- }
439
- else if ( !this._.hasFocus )
440
- {
441
- this._.currentFocusIndex = -1;
442
-
443
- // Decide where to put the initial focus.
444
- if ( definition.onFocus )
445
- {
446
- var initialFocus = definition.onFocus.call( this );
447
- // Focus the field that the user specified.
448
- initialFocus && initialFocus.focus();
449
- }
450
- // Focus the first field in layout order.
451
- else
452
- changeFocus( true );
453
-
454
- /*
455
- * IE BUG: If the initial focus went into a non-text element (e.g. button),
456
- * then IE would still leave the caret inside the editing area.
457
- */
458
- if ( this._.editor.mode == 'wysiwyg' && CKEDITOR.env.ie )
459
- {
460
- var $selection = editor.document.$.selection,
461
- $range = $selection.createRange();
462
-
463
- if ( $range )
464
- {
465
- if ( $range.parentElement && $range.parentElement().ownerDocument == editor.document.$
466
- || $range.item && $range.item( 0 ).ownerDocument == editor.document.$ )
467
- {
468
- var $myRange = document.body.createTextRange();
469
- $myRange.moveToElementText( this.getElement().getFirst().$ );
470
- $myRange.collapse( true );
471
- $myRange.select();
472
- }
473
- }
474
- }
475
- }
476
- }, this, null, 0xffffffff );
477
-
478
- // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661).
479
- // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken.
480
- if ( CKEDITOR.env.ie6Compat )
481
- {
482
- this.on( 'load', function( evt )
483
- {
484
- var outer = this.getElement(),
485
- inner = outer.getFirst();
486
- inner.remove();
487
- inner.appendTo( outer );
488
- }, this );
489
- }
490
-
491
- initDragAndDrop( this );
492
- initResizeHandles( this );
493
-
494
- // Insert the title.
495
- ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title );
496
-
497
- // Insert the tabs and contents.
498
- for ( var i = 0 ; i < definition.contents.length ; i++ )
499
- {
500
- var page = definition.contents[i];
501
- page && this.addPage( page );
502
- }
503
-
504
- this.parts['tabs'].on( 'click', function( evt )
505
- {
506
- var target = evt.data.getTarget();
507
- // If we aren't inside a tab, bail out.
508
- if ( target.hasClass( 'cke_dialog_tab' ) )
509
- {
510
- // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix.
511
- var id = target.$.id;
512
- this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) );
513
-
514
- if ( this._.tabBarMode )
515
- {
516
- this._.tabBarMode = false;
517
- this._.currentFocusIndex = -1;
518
- changeFocus( true );
519
- }
520
- evt.data.preventDefault();
521
- }
522
- }, this );
523
-
524
- // Insert buttons.
525
- var buttonsHtml = [],
526
- buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this,
527
- {
528
- type : 'hbox',
529
- className : 'cke_dialog_footer_buttons',
530
- widths : [],
531
- children : definition.buttons
532
- }, buttonsHtml ).getChild();
533
- this.parts.footer.setHtml( buttonsHtml.join( '' ) );
534
-
535
- for ( i = 0 ; i < buttons.length ; i++ )
536
- this._.buttons[ buttons[i].id ] = buttons[i];
537
- };
538
-
539
- // Focusable interface. Use it via dialog.addFocusable.
540
- function Focusable( dialog, element, index )
541
- {
542
- this.element = element;
543
- this.focusIndex = index;
544
- // TODO: support tabIndex for focusables.
545
- this.tabIndex = 0;
546
- this.isFocusable = function()
547
- {
548
- return !element.getAttribute( 'disabled' ) && element.isVisible();
549
- };
550
- this.focus = function()
551
- {
552
- dialog._.currentFocusIndex = this.focusIndex;
553
- this.element.focus();
554
- };
555
- // Bind events
556
- element.on( 'keydown', function( e )
557
- {
558
- if ( e.data.getKeystroke() in { 32:1, 13:1 } )
559
- this.fire( 'click' );
560
- } );
561
- element.on( 'focus', function()
562
- {
563
- this.fire( 'mouseover' );
564
- } );
565
- element.on( 'blur', function()
566
- {
567
- this.fire( 'mouseout' );
568
- } );
569
- }
570
-
571
- CKEDITOR.dialog.prototype =
572
- {
573
- destroy : function()
574
- {
575
- this.hide();
576
- this._.element.remove();
577
- },
578
-
579
- /**
580
- * Resizes the dialog.
581
- * @param {Number} width The width of the dialog in pixels.
582
- * @param {Number} height The height of the dialog in pixels.
583
- * @function
584
- * @example
585
- * dialogObj.resize( 800, 640 );
586
- */
587
- resize : (function()
588
- {
589
- return function( width, height )
590
- {
591
- if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height )
592
- return;
593
-
594
- CKEDITOR.dialog.fire( 'resize',
595
- {
596
- dialog : this,
597
- skin : this._.editor.skinName,
598
- width : width,
599
- height : height
600
- }, this._.editor );
601
-
602
- this._.contentSize = { width : width, height : height };
603
- this._.updateSize = true;
604
- };
605
- })(),
606
-
607
- /**
608
- * Gets the current size of the dialog in pixels.
609
- * @returns {Object} An object with "width" and "height" properties.
610
- * @example
611
- * var width = dialogObj.getSize().width;
612
- */
613
- getSize : function()
614
- {
615
- if ( !this._.updateSize )
616
- return this._.size;
617
- var element = this._.element.getFirst();
618
- var size = this._.size = { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0};
619
-
620
- // If either the offsetWidth or offsetHeight is 0, the element isn't visible.
621
- this._.updateSize = !size.width || !size.height;
622
-
623
- return size;
624
- },
625
-
626
- /**
627
- * Moves the dialog to an (x, y) coordinate relative to the window.
628
- * @function
629
- * @param {Number} x The target x-coordinate.
630
- * @param {Number} y The target y-coordinate.
631
- * @example
632
- * dialogObj.move( 10, 40 );
633
- */
634
- move : (function()
635
- {
636
- var isFixed;
637
- return function( x, y )
638
- {
639
- // The dialog may be fixed positioned or absolute positioned. Ask the
640
- // browser what is the current situation first.
641
- var element = this._.element.getFirst();
642
- if ( isFixed === undefined )
643
- isFixed = element.getComputedStyle( 'position' ) == 'fixed';
644
-
645
- if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y )
646
- return;
647
-
648
- // Save the current position.
649
- this._.position = { x : x, y : y };
650
-
651
- // If not fixed positioned, add scroll position to the coordinates.
652
- if ( !isFixed )
653
- {
654
- var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition();
655
- x += scrollPosition.x;
656
- y += scrollPosition.y;
657
- }
658
-
659
- element.setStyles(
660
- {
661
- 'left' : ( x > 0 ? x : 0 ) + 'px',
662
- 'top' : ( y > 0 ? y : 0 ) + 'px'
663
- });
664
- };
665
- })(),
666
-
667
- /**
668
- * Gets the dialog's position in the window.
669
- * @returns {Object} An object with "x" and "y" properties.
670
- * @example
671
- * var dialogX = dialogObj.getPosition().x;
672
- */
673
- getPosition : function(){ return CKEDITOR.tools.extend( {}, this._.position ); },
674
-
675
- /**
676
- * Shows the dialog box.
677
- * @example
678
- * dialogObj.show();
679
- */
680
- show : function()
681
- {
682
- var editor = this._.editor;
683
- if ( editor.mode == 'wysiwyg' && CKEDITOR.env.ie )
684
- {
685
- var selection = editor.getSelection();
686
- selection && selection.lock();
687
- }
688
-
689
- // Insert the dialog's element to the root document.
690
- var element = this._.element;
691
- var definition = this.definition;
692
- if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) )
693
- element.appendTo( CKEDITOR.document.getBody() );
694
- else
695
- element.setStyle( 'display', 'block' );
696
-
697
- // FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8.
698
- if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )
699
- {
700
- var dialogElement = this.parts.dialog;
701
- dialogElement.setStyle( 'position', 'absolute' );
702
- setTimeout( function()
703
- {
704
- dialogElement.setStyle( 'position', 'fixed' );
705
- }, 0 );
706
- }
707
-
708
-
709
- // First, set the dialog to an appropriate size.
710
- this.resize( definition.minWidth, definition.minHeight );
711
-
712
- // Reset all inputs back to their default value.
713
- this.reset();
714
-
715
- // Select the first tab by default.
716
- this.selectPage( this.definition.contents[0].id );
717
-
718
- // Set z-index.
719
- if ( CKEDITOR.dialog._.currentZIndex === null )
720
- CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex;
721
- this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 );
722
-
723
- // Maintain the dialog ordering and dialog cover.
724
- // Also register key handlers if first dialog.
725
- if ( CKEDITOR.dialog._.currentTop === null )
726
- {
727
- CKEDITOR.dialog._.currentTop = this;
728
- this._.parentDialog = null;
729
- showCover( this._.editor );
730
-
731
- element.on( 'keydown', accessKeyDownHandler );
732
- element.on( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler );
733
-
734
- // Prevent some keys from bubbling up. (#4269)
735
- for ( var event in { keyup :1, keydown :1, keypress :1 } )
736
- element.on( event, preventKeyBubbling );
737
- }
738
- else
739
- {
740
- this._.parentDialog = CKEDITOR.dialog._.currentTop;
741
- var parentElement = this._.parentDialog.getElement().getFirst();
742
- parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 );
743
- CKEDITOR.dialog._.currentTop = this;
744
- }
745
-
746
- // Register the Esc hotkeys.
747
- registerAccessKey( this, this, '\x1b', null, function()
748
- {
749
- this.getButton( 'cancel' ) && this.getButton( 'cancel' ).click();
750
- } );
751
-
752
- // Reset the hasFocus state.
753
- this._.hasFocus = false;
754
-
755
- // Rearrange the dialog to the middle of the window.
756
- CKEDITOR.tools.setTimeout( function()
757
- {
758
- var viewSize = CKEDITOR.document.getWindow().getViewPaneSize();
759
- var dialogSize = this.getSize();
760
-
761
- // We're using definition size for initial position because of
762
- // offten corrupted data in offsetWidth at this point. (#4084)
763
- this.move( ( viewSize.width - definition.minWidth ) / 2, ( viewSize.height - dialogSize.height ) / 2 );
764
-
765
- this.parts.dialog.setStyle( 'visibility', '' );
766
-
767
- // Execute onLoad for the first show.
768
- this.fireOnce( 'load', {} );
769
- this.fire( 'show', {} );
770
- this._.editor.fire( 'dialogShow', this );
771
-
772
- // Save the initial values of the dialog.
773
- this.foreach( function( contentObj ) { contentObj.setInitValue && contentObj.setInitValue(); } );
774
-
775
- },
776
- 100, this );
777
- },
778
-
779
- /**
780
- * Executes a function for each UI element.
781
- * @param {Function} fn Function to execute for each UI element.
782
- * @returns {CKEDITOR.dialog} The current dialog object.
783
- */
784
- foreach : function( fn )
785
- {
786
- for ( var i in this._.contents )
787
- {
788
- for ( var j in this._.contents[i] )
789
- fn( this._.contents[i][j] );
790
- }
791
- return this;
792
- },
793
-
794
- /**
795
- * Resets all input values in the dialog.
796
- * @example
797
- * dialogObj.reset();
798
- * @returns {CKEDITOR.dialog} The current dialog object.
799
- */
800
- reset : (function()
801
- {
802
- var fn = function( widget ){ if ( widget.reset ) widget.reset( 1 ); };
803
- return function(){ this.foreach( fn ); return this; };
804
- })(),
805
-
806
- setupContent : function()
807
- {
808
- var args = arguments;
809
- this.foreach( function( widget )
810
- {
811
- if ( widget.setup )
812
- widget.setup.apply( widget, args );
813
- });
814
- },
815
-
816
- commitContent : function()
817
- {
818
- var args = arguments;
819
- this.foreach( function( widget )
820
- {
821
- if ( widget.commit )
822
- widget.commit.apply( widget, args );
823
- });
824
- },
825
-
826
- /**
827
- * Hides the dialog box.
828
- * @example
829
- * dialogObj.hide();
830
- */
831
- hide : function()
832
- {
833
- if ( !this.parts.dialog.isVisible() )
834
- return;
835
-
836
- this.fire( 'hide', {} );
837
- this._.editor.fire( 'dialogHide', this );
838
- var element = this._.element;
839
- element.setStyle( 'display', 'none' );
840
- this.parts.dialog.setStyle( 'visibility', 'hidden' );
841
- // Unregister all access keys associated with this dialog.
842
- unregisterAccessKey( this );
843
-
844
- // Close any child(top) dialogs first.
845
- while( CKEDITOR.dialog._.currentTop != this )
846
- CKEDITOR.dialog._.currentTop.hide();
847
-
848
- // Maintain dialog ordering and remove cover if needed.
849
- if ( !this._.parentDialog )
850
- hideCover();
851
- else
852
- {
853
- var parentElement = this._.parentDialog.getElement().getFirst();
854
- parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) );
855
- }
856
- CKEDITOR.dialog._.currentTop = this._.parentDialog;
857
-
858
- // Deduct or clear the z-index.
859
- if ( !this._.parentDialog )
860
- {
861
- CKEDITOR.dialog._.currentZIndex = null;
862
-
863
- // Remove access key handlers.
864
- element.removeListener( 'keydown', accessKeyDownHandler );
865
- element.removeListener( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler );
866
-
867
- // Remove bubbling-prevention handler. (#4269)
868
- for ( var event in { keyup :1, keydown :1, keypress :1 } )
869
- element.removeListener( event, preventKeyBubbling );
870
-
871
- var editor = this._.editor;
872
- editor.focus();
873
-
874
- if ( editor.mode == 'wysiwyg' && CKEDITOR.env.ie )
875
- {
876
- var selection = editor.getSelection();
877
- selection && selection.unlock( true );
878
- }
879
- }
880
- else
881
- CKEDITOR.dialog._.currentZIndex -= 10;
882
-
883
- delete this._.parentDialog;
884
- // Reset the initial values of the dialog.
885
- this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } );
886
- },
887
-
888
- /**
889
- * Adds a tabbed page into the dialog.
890
- * @param {Object} contents Content definition.
891
- * @example
892
- */
893
- addPage : function( contents )
894
- {
895
- var pageHtml = [],
896
- titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '',
897
- elements = contents.elements,
898
- vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this,
899
- {
900
- type : 'vbox',
901
- className : 'cke_dialog_page_contents',
902
- children : contents.elements,
903
- expand : !!contents.expand,
904
- padding : contents.padding,
905
- style : contents.style || 'width: 100%; height: 100%;'
906
- }, pageHtml );
907
-
908
- // Create the HTML for the tab and the content block.
909
- var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) );
910
- page.setAttribute( 'role', 'tabpanel' );
911
-
912
- var env = CKEDITOR.env;
913
- var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(),
914
- tab = CKEDITOR.dom.element.createFromHtml( [
915
- '<a class="cke_dialog_tab"',
916
- ( this._.pageCount > 0 ? ' cke_last' : 'cke_first' ),
917
- titleHtml,
918
- ( !!contents.hidden ? ' style="display:none"' : '' ),
919
- ' id="', tabId, '"',
920
- env.gecko && env.version >= 10900 && !env.hc ? '' : ' href="javascript:void(0)"',
921
- ' tabIndex="-1"',
922
- ' hidefocus="true"',
923
- ' role="tab">',
924
- contents.label,
925
- '</a>'
926
- ].join( '' ) );
927
-
928
- page.setAttribute( 'aria-labelledby', tabId );
929
-
930
- // Take records for the tabs and elements created.
931
- this._.tabs[ contents.id ] = [ tab, page ];
932
- this._.tabIdList.push( contents.id );
933
- !contents.hidden && this._.pageCount++;
934
- this._.lastTab = tab;
935
- this.updateStyle();
936
-
937
- var contentMap = this._.contents[ contents.id ] = {},
938
- cursor,
939
- children = vbox.getChild();
940
-
941
- while ( ( cursor = children.shift() ) )
942
- {
943
- contentMap[ cursor.id ] = cursor;
944
- if ( typeof( cursor.getChild ) == 'function' )
945
- children.push.apply( children, cursor.getChild() );
946
- }
947
-
948
- // Attach the DOM nodes.
949
-
950
- page.setAttribute( 'name', contents.id );
951
- page.appendTo( this.parts.contents );
952
-
953
- tab.unselectable();
954
- this.parts.tabs.append( tab );
955
-
956
- // Add access key handlers if access key is defined.
957
- if ( contents.accessKey )
958
- {
959
- registerAccessKey( this, this, 'CTRL+' + contents.accessKey,
960
- tabAccessKeyDown, tabAccessKeyUp );
961
- this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id;
962
- }
963
- },
964
-
965
- /**
966
- * Activates a tab page in the dialog by its id.
967
- * @param {String} id The id of the dialog tab to be activated.
968
- * @example
969
- * dialogObj.selectPage( 'tab_1' );
970
- */
971
- selectPage : function( id )
972
- {
973
- if ( this._.currentTabId == id )
974
- return;
975
-
976
- // Returning true means that the event has been canceled
977
- if ( this.fire( 'selectPage', { page : id, currentPage : this._.currentTabId } ) === true )
978
- return;
979
-
980
- // Hide the non-selected tabs and pages.
981
- for ( var i in this._.tabs )
982
- {
983
- var tab = this._.tabs[i][0],
984
- page = this._.tabs[i][1];
985
- if ( i != id )
986
- {
987
- tab.removeClass( 'cke_dialog_tab_selected' );
988
- page.hide();
989
- }
990
- page.setAttribute( 'aria-hidden', i != id );
991
- }
992
-
993
- var selected = this._.tabs[id];
994
- selected[0].addClass( 'cke_dialog_tab_selected' );
995
-
996
- // [IE] a unvisible input[type='text'] will enlarge it's width
997
- // if it's value is long when it show( #5649 )
998
- // so we clear it's value before it shows and then recover it
999
- if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat )
1000
- {
1001
- clearOrRecoverTextInputValue( selected[1] );
1002
- selected[1].show();
1003
- setTimeout( function()
1004
- {
1005
- clearOrRecoverTextInputValue( selected[1], true );
1006
- }, 0 );
1007
- }
1008
- else
1009
- {
1010
- selected[1].show();
1011
- }
1012
-
1013
-
1014
- this._.currentTabId = id;
1015
- this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id );
1016
- },
1017
-
1018
- // Dialog state-specific style updates.
1019
- updateStyle : function()
1020
- {
1021
- // If only a single page shown, a different style is used in the central pane.
1022
- this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' );
1023
- },
1024
-
1025
- /**
1026
- * Hides a page's tab away from the dialog.
1027
- * @param {String} id The page's Id.
1028
- * @example
1029
- * dialog.hidePage( 'tab_3' );
1030
- */
1031
- hidePage : function( id )
1032
- {
1033
- var tab = this._.tabs[id] && this._.tabs[id][0];
1034
- if ( !tab || this._.pageCount == 1 )
1035
- return;
1036
- // Switch to other tab first when we're hiding the active tab.
1037
- else if ( id == this._.currentTabId )
1038
- this.selectPage( getPreviousVisibleTab.call( this ) );
1039
-
1040
- tab.hide();
1041
- this._.pageCount--;
1042
- this.updateStyle();
1043
- },
1044
-
1045
- /**
1046
- * Unhides a page's tab.
1047
- * @param {String} id The page's Id.
1048
- * @example
1049
- * dialog.showPage( 'tab_2' );
1050
- */
1051
- showPage : function( id )
1052
- {
1053
- var tab = this._.tabs[id] && this._.tabs[id][0];
1054
- if ( !tab )
1055
- return;
1056
- tab.show();
1057
- this._.pageCount++;
1058
- this.updateStyle();
1059
- },
1060
-
1061
- /**
1062
- * Gets the root DOM element of the dialog.
1063
- * @returns {CKEDITOR.dom.element} The &lt;span&gt; element containing this dialog.
1064
- * @example
1065
- * var dialogElement = dialogObj.getElement().getFirst();
1066
- * dialogElement.setStyle( 'padding', '5px' );
1067
- */
1068
- getElement : function()
1069
- {
1070
- return this._.element;
1071
- },
1072
-
1073
- /**
1074
- * Gets the name of the dialog.
1075
- * @returns {String} The name of this dialog.
1076
- * @example
1077
- * var dialogName = dialogObj.getName();
1078
- */
1079
- getName : function()
1080
- {
1081
- return this._.name;
1082
- },
1083
-
1084
- /**
1085
- * Gets a dialog UI element object from a dialog page.
1086
- * @param {String} pageId id of dialog page.
1087
- * @param {String} elementId id of UI element.
1088
- * @example
1089
- * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element.
1090
- */
1091
- getContentElement : function( pageId, elementId )
1092
- {
1093
- var page = this._.contents[ pageId ];
1094
- return page && page[ elementId ];
1095
- },
1096
-
1097
- /**
1098
- * Gets the value of a dialog UI element.
1099
- * @param {String} pageId id of dialog page.
1100
- * @param {String} elementId id of UI element.
1101
- * @example
1102
- * @returns {Object} The value of the UI element.
1103
- */
1104
- getValueOf : function( pageId, elementId )
1105
- {
1106
- return this.getContentElement( pageId, elementId ).getValue();
1107
- },
1108
-
1109
- /**
1110
- * Sets the value of a dialog UI element.
1111
- * @param {String} pageId id of the dialog page.
1112
- * @param {String} elementId id of the UI element.
1113
- * @param {Object} value The new value of the UI element.
1114
- * @example
1115
- */
1116
- setValueOf : function( pageId, elementId, value )
1117
- {
1118
- return this.getContentElement( pageId, elementId ).setValue( value );
1119
- },
1120
-
1121
- /**
1122
- * Gets the UI element of a button in the dialog's button row.
1123
- * @param {String} id The id of the button.
1124
- * @example
1125
- * @returns {CKEDITOR.ui.dialog.button} The button object.
1126
- */
1127
- getButton : function( id )
1128
- {
1129
- return this._.buttons[ id ];
1130
- },
1131
-
1132
- /**
1133
- * Simulates a click to a dialog button in the dialog's button row.
1134
- * @param {String} id The id of the button.
1135
- * @example
1136
- * @returns The return value of the dialog's "click" event.
1137
- */
1138
- click : function( id )
1139
- {
1140
- return this._.buttons[ id ].click();
1141
- },
1142
-
1143
- /**
1144
- * Disables a dialog button.
1145
- * @param {String} id The id of the button.
1146
- * @example
1147
- */
1148
- disableButton : function( id )
1149
- {
1150
- return this._.buttons[ id ].disable();
1151
- },
1152
-
1153
- /**
1154
- * Enables a dialog button.
1155
- * @param {String} id The id of the button.
1156
- * @example
1157
- */
1158
- enableButton : function( id )
1159
- {
1160
- return this._.buttons[ id ].enable();
1161
- },
1162
-
1163
- /**
1164
- * Gets the number of pages in the dialog.
1165
- * @returns {Number} Page count.
1166
- */
1167
- getPageCount : function()
1168
- {
1169
- return this._.pageCount;
1170
- },
1171
-
1172
- /**
1173
- * Gets the editor instance which opened this dialog.
1174
- * @returns {CKEDITOR.editor} Parent editor instances.
1175
- */
1176
- getParentEditor : function()
1177
- {
1178
- return this._.editor;
1179
- },
1180
-
1181
- /**
1182
- * Gets the element that was selected when opening the dialog, if any.
1183
- * @returns {CKEDITOR.dom.element} The element that was selected, or null.
1184
- */
1185
- getSelectedElement : function()
1186
- {
1187
- return this.getParentEditor().getSelection().getSelectedElement();
1188
- },
1189
-
1190
- /**
1191
- * Adds element to dialog's focusable list.
1192
- *
1193
- * @param {CKEDITOR.dom.element} element
1194
- * @param {Number} [index]
1195
- */
1196
- addFocusable: function( element, index ) {
1197
- if ( typeof index == 'undefined' )
1198
- {
1199
- index = this._.focusList.length;
1200
- this._.focusList.push( new Focusable( this, element, index ) );
1201
- }
1202
- else
1203
- {
1204
- this._.focusList.splice( index, 0, new Focusable( this, element, index ) );
1205
- for ( var i = index + 1 ; i < this._.focusList.length ; i++ )
1206
- this._.focusList[ i ].focusIndex++;
1207
- }
1208
- }
1209
- };
1210
-
1211
- CKEDITOR.tools.extend( CKEDITOR.dialog,
1212
- /**
1213
- * @lends CKEDITOR.dialog
1214
- */
1215
- {
1216
- /**
1217
- * Registers a dialog.
1218
- * @param {String} name The dialog's name.
1219
- * @param {Function|String} dialogDefinition
1220
- * A function returning the dialog's definition, or the URL to the .js file holding the function.
1221
- * The function should accept an argument "editor" which is the current editor instance, and
1222
- * return an object conforming to {@link CKEDITOR.dialog.dialogDefinition}.
1223
- * @example
1224
- * @see CKEDITOR.dialog.dialogDefinition
1225
- */
1226
- add : function( name, dialogDefinition )
1227
- {
1228
- // Avoid path registration from multiple instances override definition.
1229
- if ( !this._.dialogDefinitions[name]
1230
- || typeof dialogDefinition == 'function' )
1231
- this._.dialogDefinitions[name] = dialogDefinition;
1232
- },
1233
-
1234
- exists : function( name )
1235
- {
1236
- return !!this._.dialogDefinitions[ name ];
1237
- },
1238
-
1239
- getCurrent : function()
1240
- {
1241
- return CKEDITOR.dialog._.currentTop;
1242
- },
1243
-
1244
- /**
1245
- * The default OK button for dialogs. Fires the "ok" event and closes the dialog if the event succeeds.
1246
- * @static
1247
- * @field
1248
- * @example
1249
- * @type Function
1250
- */
1251
- okButton : (function()
1252
- {
1253
- var retval = function( editor, override )
1254
- {
1255
- override = override || {};
1256
- return CKEDITOR.tools.extend( {
1257
- id : 'ok',
1258
- type : 'button',
1259
- label : editor.lang.common.ok,
1260
- 'class' : 'cke_dialog_ui_button_ok',
1261
- onClick : function( evt )
1262
- {
1263
- var dialog = evt.data.dialog;
1264
- if ( dialog.fire( 'ok', { hide : true } ).hide !== false )
1265
- dialog.hide();
1266
- }
1267
- }, override, true );
1268
- };
1269
- retval.type = 'button';
1270
- retval.override = function( override )
1271
- {
1272
- return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); },
1273
- { type : 'button' }, true );
1274
- };
1275
- return retval;
1276
- })(),
1277
-
1278
- /**
1279
- * The default cancel button for dialogs. Fires the "cancel" event and closes the dialog if no UI element value changed.
1280
- * @static
1281
- * @field
1282
- * @example
1283
- * @type Function
1284
- */
1285
- cancelButton : (function()
1286
- {
1287
- var retval = function( editor, override )
1288
- {
1289
- override = override || {};
1290
- return CKEDITOR.tools.extend( {
1291
- id : 'cancel',
1292
- type : 'button',
1293
- label : editor.lang.common.cancel,
1294
- 'class' : 'cke_dialog_ui_button_cancel',
1295
- onClick : function( evt )
1296
- {
1297
- var dialog = evt.data.dialog;
1298
- if ( dialog.fire( 'cancel', { hide : true } ).hide !== false )
1299
- dialog.hide();
1300
- }
1301
- }, override, true );
1302
- };
1303
- retval.type = 'button';
1304
- retval.override = function( override )
1305
- {
1306
- return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); },
1307
- { type : 'button' }, true );
1308
- };
1309
- return retval;
1310
- })(),
1311
-
1312
- /**
1313
- * Registers a dialog UI element.
1314
- * @param {String} typeName The name of the UI element.
1315
- * @param {Function} builder The function to build the UI element.
1316
- * @example
1317
- */
1318
- addUIElement : function( typeName, builder )
1319
- {
1320
- this._.uiElementBuilders[ typeName ] = builder;
1321
- }
1322
- });
1323
-
1324
- CKEDITOR.dialog._ =
1325
- {
1326
- uiElementBuilders : {},
1327
-
1328
- dialogDefinitions : {},
1329
-
1330
- currentTop : null,
1331
-
1332
- currentZIndex : null
1333
- };
1334
-
1335
- // "Inherit" (copy actually) from CKEDITOR.event.
1336
- CKEDITOR.event.implementOn( CKEDITOR.dialog );
1337
- CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype, true );
1338
-
1339
- var defaultDialogDefinition =
1340
- {
1341
- resizable : CKEDITOR.DIALOG_RESIZE_BOTH,
1342
- minWidth : 600,
1343
- minHeight : 400,
1344
- buttons : [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]
1345
- };
1346
-
1347
- // The buttons in MacOS Apps are in reverse order #4750
1348
- CKEDITOR.env.mac && defaultDialogDefinition.buttons.reverse();
1349
-
1350
- // Tool function used to return an item from an array based on its id
1351
- // property.
1352
- var getById = function( array, id, recurse )
1353
- {
1354
- for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )
1355
- {
1356
- if ( item.id == id )
1357
- return item;
1358
- if ( recurse && item[ recurse ] )
1359
- {
1360
- var retval = getById( item[ recurse ], id, recurse ) ;
1361
- if ( retval )
1362
- return retval;
1363
- }
1364
- }
1365
- return null;
1366
- };
1367
-
1368
- // Tool function used to add an item into an array.
1369
- var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound )
1370
- {
1371
- if ( nextSiblingId )
1372
- {
1373
- for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )
1374
- {
1375
- if ( item.id == nextSiblingId )
1376
- {
1377
- array.splice( i, 0, newItem );
1378
- return newItem;
1379
- }
1380
-
1381
- if ( recurse && item[ recurse ] )
1382
- {
1383
- var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true );
1384
- if ( retval )
1385
- return retval;
1386
- }
1387
- }
1388
-
1389
- if ( nullIfNotFound )
1390
- return null;
1391
- }
1392
-
1393
- array.push( newItem );
1394
- return newItem;
1395
- };
1396
-
1397
- // Tool function used to remove an item from an array based on its id.
1398
- var removeById = function( array, id, recurse )
1399
- {
1400
- for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )
1401
- {
1402
- if ( item.id == id )
1403
- return array.splice( i, 1 );
1404
- if ( recurse && item[ recurse ] )
1405
- {
1406
- var retval = removeById( item[ recurse ], id, recurse );
1407
- if ( retval )
1408
- return retval;
1409
- }
1410
- }
1411
- return null;
1412
- };
1413
-
1414
- /**
1415
- * This class is not really part of the API. It is the "definition" property value
1416
- * passed to "dialogDefinition" event handlers.
1417
- * @constructor
1418
- * @name CKEDITOR.dialog.dialogDefinitionObject
1419
- * @extends CKEDITOR.dialog.dialogDefinition
1420
- * @example
1421
- * CKEDITOR.on( 'dialogDefinition', function( evt )
1422
- * {
1423
- * var definition = evt.data.definition;
1424
- * var content = definition.getContents( 'page1' );
1425
- * ...
1426
- * } );
1427
- */
1428
- var definitionObject = function( dialog, dialogDefinition )
1429
- {
1430
- // TODO : Check if needed.
1431
- this.dialog = dialog;
1432
-
1433
- // Transform the contents entries in contentObjects.
1434
- var contents = dialogDefinition.contents;
1435
- for ( var i = 0, content ; ( content = contents[i] ) ; i++ )
1436
- contents[ i ] = content && new contentObject( dialog, content );
1437
-
1438
- CKEDITOR.tools.extend( this, dialogDefinition );
1439
- };
1440
-
1441
- definitionObject.prototype =
1442
- /** @lends CKEDITOR.dialog.dialogDefinitionObject.prototype */
1443
- {
1444
- /**
1445
- * Gets a content definition.
1446
- * @param {String} id The id of the content definition.
1447
- * @returns {CKEDITOR.dialog.contentDefinition} The content definition
1448
- * matching id.
1449
- */
1450
- getContents : function( id )
1451
- {
1452
- return getById( this.contents, id );
1453
- },
1454
-
1455
- /**
1456
- * Gets a button definition.
1457
- * @param {String} id The id of the button definition.
1458
- * @returns {CKEDITOR.dialog.buttonDefinition} The button definition
1459
- * matching id.
1460
- */
1461
- getButton : function( id )
1462
- {
1463
- return getById( this.buttons, id );
1464
- },
1465
-
1466
- /**
1467
- * Adds a content definition object under this dialog definition.
1468
- * @param {CKEDITOR.dialog.contentDefinition} contentDefinition The
1469
- * content definition.
1470
- * @param {String} [nextSiblingId] The id of an existing content
1471
- * definition which the new content definition will be inserted
1472
- * before. Omit if the new content definition is to be inserted as
1473
- * the last item.
1474
- * @returns {CKEDITOR.dialog.contentDefinition} The inserted content
1475
- * definition.
1476
- */
1477
- addContents : function( contentDefinition, nextSiblingId )
1478
- {
1479
- return addById( this.contents, contentDefinition, nextSiblingId );
1480
- },
1481
-
1482
- /**
1483
- * Adds a button definition object under this dialog definition.
1484
- * @param {CKEDITOR.dialog.buttonDefinition} buttonDefinition The
1485
- * button definition.
1486
- * @param {String} [nextSiblingId] The id of an existing button
1487
- * definition which the new button definition will be inserted
1488
- * before. Omit if the new button definition is to be inserted as
1489
- * the last item.
1490
- * @returns {CKEDITOR.dialog.buttonDefinition} The inserted button
1491
- * definition.
1492
- */
1493
- addButton : function( buttonDefinition, nextSiblingId )
1494
- {
1495
- return addById( this.buttons, buttonDefinition, nextSiblingId );
1496
- },
1497
-
1498
- /**
1499
- * Removes a content definition from this dialog definition.
1500
- * @param {String} id The id of the content definition to be removed.
1501
- * @returns {CKEDITOR.dialog.contentDefinition} The removed content
1502
- * definition.
1503
- */
1504
- removeContents : function( id )
1505
- {
1506
- removeById( this.contents, id );
1507
- },
1508
-
1509
- /**
1510
- * Removes a button definition from the dialog definition.
1511
- * @param {String} id The id of the button definition to be removed.
1512
- * @returns {CKEDITOR.dialog.buttonDefinition} The removed button
1513
- * definition.
1514
- */
1515
- removeButton : function( id )
1516
- {
1517
- removeById( this.buttons, id );
1518
- }
1519
- };
1520
-
1521
- /**
1522
- * This class is not really part of the API. It is the template of the
1523
- * objects representing content pages inside the
1524
- * CKEDITOR.dialog.dialogDefinitionObject.
1525
- * @constructor
1526
- * @name CKEDITOR.dialog.contentDefinitionObject
1527
- * @example
1528
- * CKEDITOR.on( 'dialogDefinition', function( evt )
1529
- * {
1530
- * var definition = evt.data.definition;
1531
- * var content = definition.getContents( 'page1' );
1532
- * content.remove( 'textInput1' );
1533
- * ...
1534
- * } );
1535
- */
1536
- function contentObject( dialog, contentDefinition )
1537
- {
1538
- this._ =
1539
- {
1540
- dialog : dialog
1541
- };
1542
-
1543
- CKEDITOR.tools.extend( this, contentDefinition );
1544
- }
1545
-
1546
- contentObject.prototype =
1547
- /** @lends CKEDITOR.dialog.contentDefinitionObject.prototype */
1548
- {
1549
- /**
1550
- * Gets a UI element definition under the content definition.
1551
- * @param {String} id The id of the UI element definition.
1552
- * @returns {CKEDITOR.dialog.uiElementDefinition}
1553
- */
1554
- get : function( id )
1555
- {
1556
- return getById( this.elements, id, 'children' );
1557
- },
1558
-
1559
- /**
1560
- * Adds a UI element definition to the content definition.
1561
- * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition The
1562
- * UI elemnet definition to be added.
1563
- * @param {String} nextSiblingId The id of an existing UI element
1564
- * definition which the new UI element definition will be inserted
1565
- * before. Omit if the new button definition is to be inserted as
1566
- * the last item.
1567
- * @returns {CKEDITOR.dialog.uiElementDefinition} The element
1568
- * definition inserted.
1569
- */
1570
- add : function( elementDefinition, nextSiblingId )
1571
- {
1572
- return addById( this.elements, elementDefinition, nextSiblingId, 'children' );
1573
- },
1574
-
1575
- /**
1576
- * Removes a UI element definition from the content definition.
1577
- * @param {String} id The id of the UI element definition to be
1578
- * removed.
1579
- * @returns {CKEDITOR.dialog.uiElementDefinition} The element
1580
- * definition removed.
1581
- * @example
1582
- */
1583
- remove : function( id )
1584
- {
1585
- removeById( this.elements, id, 'children' );
1586
- }
1587
- };
1588
-
1589
- function initDragAndDrop( dialog )
1590
- {
1591
- var lastCoords = null,
1592
- abstractDialogCoords = null,
1593
- element = dialog.getElement().getFirst(),
1594
- editor = dialog.getParentEditor(),
1595
- magnetDistance = editor.config.dialog_magnetDistance,
1596
- margins = editor.skin.margins || [ 0, 0, 0, 0 ];
1597
-
1598
- if ( typeof magnetDistance == 'undefined' )
1599
- magnetDistance = 20;
1600
-
1601
- function mouseMoveHandler( evt )
1602
- {
1603
- var dialogSize = dialog.getSize(),
1604
- viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),
1605
- x = evt.data.$.screenX,
1606
- y = evt.data.$.screenY,
1607
- dx = x - lastCoords.x,
1608
- dy = y - lastCoords.y,
1609
- realX, realY;
1610
-
1611
- lastCoords = { x : x, y : y };
1612
- abstractDialogCoords.x += dx;
1613
- abstractDialogCoords.y += dy;
1614
-
1615
- if ( abstractDialogCoords.x + margins[3] < magnetDistance )
1616
- realX = - margins[3];
1617
- else if ( abstractDialogCoords.x - margins[1] > viewPaneSize.width - dialogSize.width - magnetDistance )
1618
- realX = viewPaneSize.width - dialogSize.width + margins[1];
1619
- else
1620
- realX = abstractDialogCoords.x;
1621
-
1622
- if ( abstractDialogCoords.y + margins[0] < magnetDistance )
1623
- realY = - margins[0];
1624
- else if ( abstractDialogCoords.y - margins[2] > viewPaneSize.height - dialogSize.height - magnetDistance )
1625
- realY = viewPaneSize.height - dialogSize.height + margins[2];
1626
- else
1627
- realY = abstractDialogCoords.y;
1628
-
1629
- dialog.move( realX, realY );
1630
-
1631
- evt.data.preventDefault();
1632
- }
1633
-
1634
- function mouseUpHandler( evt )
1635
- {
1636
- CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );
1637
- CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );
1638
-
1639
- if ( CKEDITOR.env.ie6Compat )
1640
- {
1641
- var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
1642
- coverDoc.removeListener( 'mousemove', mouseMoveHandler );
1643
- coverDoc.removeListener( 'mouseup', mouseUpHandler );
1644
- }
1645
- }
1646
-
1647
- dialog.parts.title.on( 'mousedown', function( evt )
1648
- {
1649
- dialog._.updateSize = true;
1650
-
1651
- lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };
1652
-
1653
- CKEDITOR.document.on( 'mousemove', mouseMoveHandler );
1654
- CKEDITOR.document.on( 'mouseup', mouseUpHandler );
1655
- abstractDialogCoords = dialog.getPosition();
1656
-
1657
- if ( CKEDITOR.env.ie6Compat )
1658
- {
1659
- var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
1660
- coverDoc.on( 'mousemove', mouseMoveHandler );
1661
- coverDoc.on( 'mouseup', mouseUpHandler );
1662
- }
1663
-
1664
- evt.data.preventDefault();
1665
- }, dialog );
1666
- }
1667
-
1668
- function initResizeHandles( dialog )
1669
- {
1670
- var definition = dialog.definition,
1671
- minWidth = definition.minWidth || 0,
1672
- minHeight = definition.minHeight || 0,
1673
- resizable = definition.resizable,
1674
- margins = dialog.getParentEditor().skin.margins || [ 0, 0, 0, 0 ];
1675
-
1676
- function topSizer( coords, dy )
1677
- {
1678
- coords.y += dy;
1679
- }
1680
-
1681
- function rightSizer( coords, dx )
1682
- {
1683
- coords.x2 += dx;
1684
- }
1685
-
1686
- function bottomSizer( coords, dy )
1687
- {
1688
- coords.y2 += dy;
1689
- }
1690
-
1691
- function leftSizer( coords, dx )
1692
- {
1693
- coords.x += dx;
1694
- }
1695
-
1696
- var lastCoords = null,
1697
- abstractDialogCoords = null,
1698
- magnetDistance = dialog._.editor.config.magnetDistance,
1699
- parts = [ 'tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br' ];
1700
-
1701
- function mouseDownHandler( evt )
1702
- {
1703
- var partName = evt.listenerData.part, size = dialog.getSize();
1704
- abstractDialogCoords = dialog.getPosition();
1705
- CKEDITOR.tools.extend( abstractDialogCoords,
1706
- {
1707
- x2 : abstractDialogCoords.x + size.width,
1708
- y2 : abstractDialogCoords.y + size.height
1709
- } );
1710
- lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };
1711
-
1712
- CKEDITOR.document.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );
1713
- CKEDITOR.document.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );
1714
-
1715
- if ( CKEDITOR.env.ie6Compat )
1716
- {
1717
- var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
1718
- coverDoc.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );
1719
- coverDoc.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );
1720
- }
1721
-
1722
- evt.data.preventDefault();
1723
- }
1724
-
1725
- function mouseMoveHandler( evt )
1726
- {
1727
- var x = evt.data.$.screenX,
1728
- y = evt.data.$.screenY,
1729
- dx = x - lastCoords.x,
1730
- dy = y - lastCoords.y,
1731
- viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),
1732
- partName = evt.listenerData.part;
1733
-
1734
- if ( partName.search( 't' ) != -1 )
1735
- topSizer( abstractDialogCoords, dy );
1736
- if ( partName.search( 'l' ) != -1 )
1737
- leftSizer( abstractDialogCoords, dx );
1738
- if ( partName.search( 'b' ) != -1 )
1739
- bottomSizer( abstractDialogCoords, dy );
1740
- if ( partName.search( 'r' ) != -1 )
1741
- rightSizer( abstractDialogCoords, dx );
1742
-
1743
- lastCoords = { x : x, y : y };
1744
-
1745
- var realX, realY, realX2, realY2;
1746
-
1747
- if ( abstractDialogCoords.x + margins[3] < magnetDistance )
1748
- realX = - margins[3];
1749
- else if ( partName.search( 'l' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )
1750
- realX = abstractDialogCoords.x2 - minWidth;
1751
- else
1752
- realX = abstractDialogCoords.x;
1753
-
1754
- if ( abstractDialogCoords.y + margins[0] < magnetDistance )
1755
- realY = - margins[0];
1756
- else if ( partName.search( 't' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )
1757
- realY = abstractDialogCoords.y2 - minHeight;
1758
- else
1759
- realY = abstractDialogCoords.y;
1760
-
1761
- if ( abstractDialogCoords.x2 - margins[1] > viewPaneSize.width - magnetDistance )
1762
- realX2 = viewPaneSize.width + margins[1] ;
1763
- else if ( partName.search( 'r' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )
1764
- realX2 = abstractDialogCoords.x + minWidth;
1765
- else
1766
- realX2 = abstractDialogCoords.x2;
1767
-
1768
- if ( abstractDialogCoords.y2 - margins[2] > viewPaneSize.height - magnetDistance )
1769
- realY2= viewPaneSize.height + margins[2] ;
1770
- else if ( partName.search( 'b' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )
1771
- realY2 = abstractDialogCoords.y + minHeight;
1772
- else
1773
- realY2 = abstractDialogCoords.y2 ;
1774
-
1775
- dialog.move( realX, realY );
1776
- dialog.resize( realX2 - realX, realY2 - realY );
1777
-
1778
- evt.data.preventDefault();
1779
- }
1780
-
1781
- function mouseUpHandler( evt )
1782
- {
1783
- CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );
1784
- CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );
1785
-
1786
- if ( CKEDITOR.env.ie6Compat )
1787
- {
1788
- var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
1789
- coverDoc.removeListener( 'mouseup', mouseUpHandler );
1790
- coverDoc.removeListener( 'mousemove', mouseMoveHandler );
1791
- }
1792
- }
1793
-
1794
- // TODO : Simplify the resize logic, having just a single resize grip <div>.
1795
- // var widthTest = /[lr]/,
1796
- // heightTest = /[tb]/;
1797
- // for ( var i = 0 ; i < parts.length ; i++ )
1798
- // {
1799
- // var element = dialog.parts[ parts[i] + '_resize' ];
1800
- // if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ||
1801
- // resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT && widthTest.test( parts[i] ) ||
1802
- // resizable == CKEDITOR.DIALOG_RESIZE_WIDTH && heightTest.test( parts[i] ) )
1803
- // {
1804
- // element.hide();
1805
- // continue;
1806
- // }
1807
- // element.on( 'mousedown', mouseDownHandler, dialog, { part : parts[i] } );
1808
- // }
1809
- }
1810
-
1811
- var resizeCover;
1812
- // Caching resuable covers and allowing only one cover
1813
- // on screen.
1814
- var covers = {},
1815
- currentCover;
1816
-
1817
- function showCover( editor )
1818
- {
1819
- var win = CKEDITOR.document.getWindow();
1820
- var backgroundColorStyle = editor.config.dialog_backgroundCoverColor || 'white',
1821
- backgroundCoverOpacity = editor.config.dialog_backgroundCoverOpacity,
1822
- baseFloatZIndex = editor.config.baseFloatZIndex,
1823
- coverKey = CKEDITOR.tools.genKey(
1824
- backgroundColorStyle,
1825
- backgroundCoverOpacity,
1826
- baseFloatZIndex ),
1827
- coverElement = covers[ coverKey ];
1828
-
1829
- if ( !coverElement )
1830
- {
1831
- var html = [
1832
- '<div style="position: ', ( CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed' ),
1833
- '; z-index: ', baseFloatZIndex,
1834
- '; top: 0px; left: 0px; ',
1835
- ( !CKEDITOR.env.ie6Compat ? 'background-color: ' + backgroundColorStyle : '' ),
1836
- '" class="cke_dialog_background_cover">'
1837
- ];
1838
-
1839
- if ( CKEDITOR.env.ie6Compat )
1840
- {
1841
- // Support for custom document.domain in IE.
1842
- var isCustomDomain = CKEDITOR.env.isCustomDomain(),
1843
- iframeHtml = '<html><body style=\\\'background-color:' + backgroundColorStyle + ';\\\'></body></html>';
1844
-
1845
- html.push(
1846
- '<iframe' +
1847
- ' hidefocus="true"' +
1848
- ' frameborder="0"' +
1849
- ' id="cke_dialog_background_iframe"' +
1850
- ' src="javascript:' );
1851
-
1852
- html.push( 'void((function(){' +
1853
- 'document.open();' +
1854
- ( isCustomDomain ? 'document.domain=\'' + document.domain + '\';' : '' ) +
1855
- 'document.write( \'' + iframeHtml + '\' );' +
1856
- 'document.close();' +
1857
- '})())' );
1858
-
1859
- html.push(
1860
- '"' +
1861
- ' style="' +
1862
- 'position:absolute;' +
1863
- 'left:0;' +
1864
- 'top:0;' +
1865
- 'width:100%;' +
1866
- 'height: 100%;' +
1867
- 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)">' +
1868
- '</iframe>' );
1869
- }
1870
-
1871
- html.push( '</div>' );
1872
-
1873
- coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) );
1874
- coverElement.setOpacity( backgroundCoverOpacity != undefined ? backgroundCoverOpacity : 0.5 );
1875
-
1876
- coverElement.appendTo( CKEDITOR.document.getBody() );
1877
- covers[ coverKey ] = coverElement;
1878
- }
1879
- else
1880
- coverElement. show();
1881
-
1882
- currentCover = coverElement;
1883
- var resizeFunc = function()
1884
- {
1885
- var size = win.getViewPaneSize();
1886
- coverElement.setStyles(
1887
- {
1888
- width : size.width + 'px',
1889
- height : size.height + 'px'
1890
- } );
1891
- };
1892
-
1893
- var scrollFunc = function()
1894
- {
1895
- var pos = win.getScrollPosition(),
1896
- cursor = CKEDITOR.dialog._.currentTop;
1897
- coverElement.setStyles(
1898
- {
1899
- left : pos.x + 'px',
1900
- top : pos.y + 'px'
1901
- });
1902
-
1903
- do
1904
- {
1905
- var dialogPos = cursor.getPosition();
1906
- cursor.move( dialogPos.x, dialogPos.y );
1907
- } while ( ( cursor = cursor._.parentDialog ) );
1908
- };
1909
-
1910
- resizeCover = resizeFunc;
1911
- win.on( 'resize', resizeFunc );
1912
- resizeFunc();
1913
- if ( CKEDITOR.env.ie6Compat )
1914
- {
1915
- // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll.
1916
- // So we need to invent a really funny way to make it work.
1917
- var myScrollHandler = function()
1918
- {
1919
- scrollFunc();
1920
- arguments.callee.prevScrollHandler.apply( this, arguments );
1921
- };
1922
- win.$.setTimeout( function()
1923
- {
1924
- myScrollHandler.prevScrollHandler = window.onscroll || function(){};
1925
- window.onscroll = myScrollHandler;
1926
- }, 0 );
1927
- scrollFunc();
1928
- }
1929
- }
1930
-
1931
- function hideCover()
1932
- {
1933
- if ( !currentCover )
1934
- return;
1935
-
1936
- var win = CKEDITOR.document.getWindow();
1937
- currentCover.hide();
1938
- win.removeListener( 'resize', resizeCover );
1939
-
1940
- if ( CKEDITOR.env.ie6Compat )
1941
- {
1942
- win.$.setTimeout( function()
1943
- {
1944
- var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler;
1945
- window.onscroll = prevScrollHandler || null;
1946
- }, 0 );
1947
- }
1948
- resizeCover = null;
1949
- }
1950
-
1951
- function removeCovers()
1952
- {
1953
- for ( var coverId in covers )
1954
- covers[ coverId ].remove();
1955
- covers = {};
1956
- }
1957
-
1958
- var accessKeyProcessors = {};
1959
-
1960
- var accessKeyDownHandler = function( evt )
1961
- {
1962
- var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,
1963
- alt = evt.data.$.altKey,
1964
- shift = evt.data.$.shiftKey,
1965
- key = String.fromCharCode( evt.data.$.keyCode ),
1966
- keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key];
1967
-
1968
- if ( !keyProcessor || !keyProcessor.length )
1969
- return;
1970
-
1971
- keyProcessor = keyProcessor[keyProcessor.length - 1];
1972
- keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );
1973
- evt.data.preventDefault();
1974
- };
1975
-
1976
- var accessKeyUpHandler = function( evt )
1977
- {
1978
- var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,
1979
- alt = evt.data.$.altKey,
1980
- shift = evt.data.$.shiftKey,
1981
- key = String.fromCharCode( evt.data.$.keyCode ),
1982
- keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key];
1983
-
1984
- if ( !keyProcessor || !keyProcessor.length )
1985
- return;
1986
-
1987
- keyProcessor = keyProcessor[keyProcessor.length - 1];
1988
- if ( keyProcessor.keyup )
1989
- {
1990
- keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );
1991
- evt.data.preventDefault();
1992
- }
1993
- };
1994
-
1995
- var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc )
1996
- {
1997
- var procList = accessKeyProcessors[key] || ( accessKeyProcessors[key] = [] );
1998
- procList.push( {
1999
- uiElement : uiElement,
2000
- dialog : dialog,
2001
- key : key,
2002
- keyup : upFunc || uiElement.accessKeyUp,
2003
- keydown : downFunc || uiElement.accessKeyDown
2004
- } );
2005
- };
2006
-
2007
- var unregisterAccessKey = function( obj )
2008
- {
2009
- for ( var i in accessKeyProcessors )
2010
- {
2011
- var list = accessKeyProcessors[i];
2012
- for ( var j = list.length - 1 ; j >= 0 ; j-- )
2013
- {
2014
- if ( list[j].dialog == obj || list[j].uiElement == obj )
2015
- list.splice( j, 1 );
2016
- }
2017
- if ( list.length === 0 )
2018
- delete accessKeyProcessors[i];
2019
- }
2020
- };
2021
-
2022
- var tabAccessKeyUp = function( dialog, key )
2023
- {
2024
- if ( dialog._.accessKeyMap[key] )
2025
- dialog.selectPage( dialog._.accessKeyMap[key] );
2026
- };
2027
-
2028
- var tabAccessKeyDown = function( dialog, key )
2029
- {
2030
- };
2031
-
2032
- // ESC, ENTER
2033
- var preventKeyBubblingKeys = { 27 :1, 13 :1 };
2034
- var preventKeyBubbling = function( e )
2035
- {
2036
- if ( e.data.getKeystroke() in preventKeyBubblingKeys )
2037
- e.data.stopPropagation();
2038
- };
2039
-
2040
- (function()
2041
- {
2042
- CKEDITOR.ui.dialog =
2043
- {
2044
- /**
2045
- * The base class of all dialog UI elements.
2046
- * @constructor
2047
- * @param {CKEDITOR.dialog} dialog Parent dialog object.
2048
- * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element
2049
- * definition. Accepted fields:
2050
- * <ul>
2051
- * <li><strong>id</strong> (Required) The id of the UI element. See {@link
2052
- * CKEDITOR.dialog#getContentElement}</li>
2053
- * <li><strong>type</strong> (Required) The type of the UI element. The
2054
- * value to this field specifies which UI element class will be used to
2055
- * generate the final widget.</li>
2056
- * <li><strong>title</strong> (Optional) The popup tooltip for the UI
2057
- * element.</li>
2058
- * <li><strong>hidden</strong> (Optional) A flag that tells if the element
2059
- * should be initially visible.</li>
2060
- * <li><strong>className</strong> (Optional) Additional CSS class names
2061
- * to add to the UI element. Separated by space.</li>
2062
- * <li><strong>style</strong> (Optional) Additional CSS inline styles
2063
- * to add to the UI element. A semicolon (;) is required after the last
2064
- * style declaration.</li>
2065
- * <li><strong>accessKey</strong> (Optional) The alphanumeric access key
2066
- * for this element. Access keys are automatically prefixed by CTRL.</li>
2067
- * <li><strong>on*</strong> (Optional) Any UI element definition field that
2068
- * starts with <em>on</em> followed immediately by a capital letter and
2069
- * probably more letters is an event handler. Event handlers may be further
2070
- * divided into registered event handlers and DOM event handlers. Please
2071
- * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and
2072
- * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more
2073
- * information.</li>
2074
- * </ul>
2075
- * @param {Array} htmlList
2076
- * List of HTML code to be added to the dialog's content area.
2077
- * @param {Function|String} nodeNameArg
2078
- * A function returning a string, or a simple string for the node name for
2079
- * the root DOM node. Default is 'div'.
2080
- * @param {Function|Object} stylesArg
2081
- * A function returning an object, or a simple object for CSS styles applied
2082
- * to the DOM node. Default is empty object.
2083
- * @param {Function|Object} attributesArg
2084
- * A fucntion returning an object, or a simple object for attributes applied
2085
- * to the DOM node. Default is empty object.
2086
- * @param {Function|String} contentsArg
2087
- * A function returning a string, or a simple string for the HTML code inside
2088
- * the root DOM node. Default is empty string.
2089
- * @example
2090
- */
2091
- uiElement : function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg )
2092
- {
2093
- if ( arguments.length < 4 )
2094
- return;
2095
-
2096
- var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div',
2097
- html = [ '<', nodeName, ' ' ],
2098
- styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {},
2099
- attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {},
2100
- innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '',
2101
- domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement',
2102
- id = this.id = elementDefinition.id,
2103
- i;
2104
-
2105
- // Set the id, a unique id is required for getElement() to work.
2106
- attributes.id = domId;
2107
-
2108
- // Set the type and definition CSS class names.
2109
- var classes = {};
2110
- if ( elementDefinition.type )
2111
- classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1;
2112
- if ( elementDefinition.className )
2113
- classes[ elementDefinition.className ] = 1;
2114
- var attributeClasses = ( attributes['class'] && attributes['class'].split ) ? attributes['class'].split( ' ' ) : [];
2115
- for ( i = 0 ; i < attributeClasses.length ; i++ )
2116
- {
2117
- if ( attributeClasses[i] )
2118
- classes[ attributeClasses[i] ] = 1;
2119
- }
2120
- var finalClasses = [];
2121
- for ( i in classes )
2122
- finalClasses.push( i );
2123
- attributes['class'] = finalClasses.join( ' ' );
2124
-
2125
- // Set the popup tooltop.
2126
- if ( elementDefinition.title )
2127
- attributes.title = elementDefinition.title;
2128
-
2129
- // Write the inline CSS styles.
2130
- var styleStr = ( elementDefinition.style || '' ).split( ';' );
2131
- for ( i in styles )
2132
- styleStr.push( i + ':' + styles[i] );
2133
- if ( elementDefinition.hidden )
2134
- styleStr.push( 'display:none' );
2135
- for ( i = styleStr.length - 1 ; i >= 0 ; i-- )
2136
- {
2137
- if ( styleStr[i] === '' )
2138
- styleStr.splice( i, 1 );
2139
- }
2140
- if ( styleStr.length > 0 )
2141
- attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' );
2142
-
2143
- // Write the attributes.
2144
- for ( i in attributes )
2145
- html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ');
2146
-
2147
- // Write the content HTML.
2148
- html.push( '>', innerHTML, '</', nodeName, '>' );
2149
-
2150
- // Add contents to the parent HTML array.
2151
- htmlList.push( html.join( '' ) );
2152
-
2153
- ( this._ || ( this._ = {} ) ).dialog = dialog;
2154
-
2155
- // Override isChanged if it is defined in element definition.
2156
- if ( typeof( elementDefinition.isChanged ) == 'boolean' )
2157
- this.isChanged = function(){ return elementDefinition.isChanged; };
2158
- if ( typeof( elementDefinition.isChanged ) == 'function' )
2159
- this.isChanged = elementDefinition.isChanged;
2160
-
2161
- // Add events.
2162
- CKEDITOR.event.implementOn( this );
2163
-
2164
- this.registerEvents( elementDefinition );
2165
- if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey )
2166
- registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey );
2167
-
2168
- var me = this;
2169
- dialog.on( 'load', function()
2170
- {
2171
- if ( me.getInputElement() )
2172
- {
2173
- me.getInputElement().on( 'focus', function()
2174
- {
2175
- dialog._.tabBarMode = false;
2176
- dialog._.hasFocus = true;
2177
- me.fire( 'focus' );
2178
- }, me );
2179
- }
2180
- } );
2181
-
2182
- // Register the object as a tab focus if it can be included.
2183
- if ( this.keyboardFocusable )
2184
- {
2185
- this.tabIndex = elementDefinition.tabIndex || 0;
2186
-
2187
- this.focusIndex = dialog._.focusList.push( this ) - 1;
2188
- this.on( 'focus', function()
2189
- {
2190
- dialog._.currentFocusIndex = me.focusIndex;
2191
- } );
2192
- }
2193
-
2194
- // Completes this object with everything we have in the
2195
- // definition.
2196
- CKEDITOR.tools.extend( this, elementDefinition );
2197
- },
2198
-
2199
- /**
2200
- * Horizontal layout box for dialog UI elements, auto-expends to available width of container.
2201
- * @constructor
2202
- * @extends CKEDITOR.ui.dialog.uiElement
2203
- * @param {CKEDITOR.dialog} dialog
2204
- * Parent dialog object.
2205
- * @param {Array} childObjList
2206
- * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this
2207
- * container.
2208
- * @param {Array} childHtmlList
2209
- * Array of HTML code that correspond to the HTML output of all the
2210
- * objects in childObjList.
2211
- * @param {Array} htmlList
2212
- * Array of HTML code that this element will output to.
2213
- * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
2214
- * The element definition. Accepted fields:
2215
- * <ul>
2216
- * <li><strong>widths</strong> (Optional) The widths of child cells.</li>
2217
- * <li><strong>height</strong> (Optional) The height of the layout.</li>
2218
- * <li><strong>padding</strong> (Optional) The padding width inside child
2219
- * cells.</li>
2220
- * <li><strong>align</strong> (Optional) The alignment of the whole layout
2221
- * </li>
2222
- * </ul>
2223
- * @example
2224
- */
2225
- hbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )
2226
- {
2227
- if ( arguments.length < 4 )
2228
- return;
2229
-
2230
- this._ || ( this._ = {} );
2231
-
2232
- var children = this._.children = childObjList,
2233
- widths = elementDefinition && elementDefinition.widths || null,
2234
- height = elementDefinition && elementDefinition.height || null,
2235
- styles = {},
2236
- i;
2237
- /** @ignore */
2238
- var innerHTML = function()
2239
- {
2240
- var html = [ '<tbody><tr class="cke_dialog_ui_hbox">' ];
2241
- for ( i = 0 ; i < childHtmlList.length ; i++ )
2242
- {
2243
- var className = 'cke_dialog_ui_hbox_child',
2244
- styles = [];
2245
- if ( i === 0 )
2246
- className = 'cke_dialog_ui_hbox_first';
2247
- if ( i == childHtmlList.length - 1 )
2248
- className = 'cke_dialog_ui_hbox_last';
2249
- html.push( '<td class="', className, '" role="presentation" ' );
2250
- if ( widths )
2251
- {
2252
- if ( widths[i] )
2253
- styles.push( 'width:' + CKEDITOR.tools.cssLength( widths[i] ) );
2254
- }
2255
- else
2256
- styles.push( 'width:' + Math.floor( 100 / childHtmlList.length ) + '%' );
2257
- if ( height )
2258
- styles.push( 'height:' + CKEDITOR.tools.cssLength( height ) );
2259
- if ( elementDefinition && elementDefinition.padding != undefined )
2260
- styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );
2261
- if ( styles.length > 0 )
2262
- html.push( 'style="' + styles.join('; ') + '" ' );
2263
- html.push( '>', childHtmlList[i], '</td>' );
2264
- }
2265
- html.push( '</tr></tbody>' );
2266
- return html.join( '' );
2267
- };
2268
-
2269
- var attribs = { role : 'presentation' };
2270
- elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align );
2271
-
2272
- CKEDITOR.ui.dialog.uiElement.call(
2273
- this,
2274
- dialog,
2275
- elementDefinition || { type : 'hbox' },
2276
- htmlList,
2277
- 'table',
2278
- styles,
2279
- attribs,
2280
- innerHTML );
2281
- },
2282
-
2283
- /**
2284
- * Vertical layout box for dialog UI elements.
2285
- * @constructor
2286
- * @extends CKEDITOR.ui.dialog.hbox
2287
- * @param {CKEDITOR.dialog} dialog
2288
- * Parent dialog object.
2289
- * @param {Array} childObjList
2290
- * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this
2291
- * container.
2292
- * @param {Array} childHtmlList
2293
- * Array of HTML code that correspond to the HTML output of all the
2294
- * objects in childObjList.
2295
- * @param {Array} htmlList
2296
- * Array of HTML code that this element will output to.
2297
- * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
2298
- * The element definition. Accepted fields:
2299
- * <ul>
2300
- * <li><strong>width</strong> (Optional) The width of the layout.</li>
2301
- * <li><strong>heights</strong> (Optional) The heights of individual cells.
2302
- * </li>
2303
- * <li><strong>align</strong> (Optional) The alignment of the layout.</li>
2304
- * <li><strong>padding</strong> (Optional) The padding width inside child
2305
- * cells.</li>
2306
- * <li><strong>expand</strong> (Optional) Whether the layout should expand
2307
- * vertically to fill its container.</li>
2308
- * </ul>
2309
- * @example
2310
- */
2311
- vbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )
2312
- {
2313
- if (arguments.length < 3 )
2314
- return;
2315
-
2316
- this._ || ( this._ = {} );
2317
-
2318
- var children = this._.children = childObjList,
2319
- width = elementDefinition && elementDefinition.width || null,
2320
- heights = elementDefinition && elementDefinition.heights || null;
2321
- /** @ignore */
2322
- var innerHTML = function()
2323
- {
2324
- var html = [ '<table role="presentation" cellspacing="0" border="0" ' ];
2325
- html.push( 'style="' );
2326
- if ( elementDefinition && elementDefinition.expand )
2327
- html.push( 'height:100%;' );
2328
- html.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ), ';' );
2329
- html.push( '"' );
2330
- html.push( 'align="', CKEDITOR.tools.htmlEncode(
2331
- ( elementDefinition && elementDefinition.align ) || ( dialog.getParentEditor().lang.dir == 'ltr' ? 'left' : 'right' ) ), '" ' );
2332
-
2333
- html.push( '><tbody>' );
2334
- for ( var i = 0 ; i < childHtmlList.length ; i++ )
2335
- {
2336
- var styles = [];
2337
- html.push( '<tr><td role="presentation" ' );
2338
- if ( width )
2339
- styles.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ) );
2340
- if ( heights )
2341
- styles.push( 'height:' + CKEDITOR.tools.cssLength( heights[i] ) );
2342
- else if ( elementDefinition && elementDefinition.expand )
2343
- styles.push( 'height:' + Math.floor( 100 / childHtmlList.length ) + '%' );
2344
- if ( elementDefinition && elementDefinition.padding != undefined )
2345
- styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );
2346
- if ( styles.length > 0 )
2347
- html.push( 'style="', styles.join( '; ' ), '" ' );
2348
- html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[i], '</td></tr>' );
2349
- }
2350
- html.push( '</tbody></table>' );
2351
- return html.join( '' );
2352
- };
2353
- CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type : 'vbox' }, htmlList, 'div', null, { role : 'presentation' }, innerHTML );
2354
- }
2355
- };
2356
- })();
2357
-
2358
- CKEDITOR.ui.dialog.uiElement.prototype =
2359
- {
2360
- /**
2361
- * Gets the root DOM element of this dialog UI object.
2362
- * @returns {CKEDITOR.dom.element} Root DOM element of UI object.
2363
- * @example
2364
- * uiElement.getElement().hide();
2365
- */
2366
- getElement : function()
2367
- {
2368
- return CKEDITOR.document.getById( this.domId );
2369
- },
2370
-
2371
- /**
2372
- * Gets the DOM element that the user inputs values.
2373
- * This function is used by setValue(), getValue() and focus(). It should
2374
- * be overrided in child classes where the input element isn't the root
2375
- * element.
2376
- * @returns {CKEDITOR.dom.element} The element where the user input values.
2377
- * @example
2378
- * var rawValue = textInput.getInputElement().$.value;
2379
- */
2380
- getInputElement : function()
2381
- {
2382
- return this.getElement();
2383
- },
2384
-
2385
- /**
2386
- * Gets the parent dialog object containing this UI element.
2387
- * @returns {CKEDITOR.dialog} Parent dialog object.
2388
- * @example
2389
- * var dialog = uiElement.getDialog();
2390
- */
2391
- getDialog : function()
2392
- {
2393
- return this._.dialog;
2394
- },
2395
-
2396
- /**
2397
- * Sets the value of this dialog UI object.
2398
- * @param {Object} value The new value.
2399
- * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
2400
- * @returns {CKEDITOR.dialog.uiElement} The current UI element.
2401
- * @example
2402
- * uiElement.setValue( 'Dingo' );
2403
- */
2404
- setValue : function( value, noChangeEvent )
2405
- {
2406
- this.getInputElement().setValue( value );
2407
- !noChangeEvent && this.fire( 'change', { value : value } );
2408
- return this;
2409
- },
2410
-
2411
- /**
2412
- * Gets the current value of this dialog UI object.
2413
- * @returns {Object} The current value.
2414
- * @example
2415
- * var myValue = uiElement.getValue();
2416
- */
2417
- getValue : function()
2418
- {
2419
- return this.getInputElement().getValue();
2420
- },
2421
-
2422
- /**
2423
- * Tells whether the UI object's value has changed.
2424
- * @returns {Boolean} true if changed, false if not changed.
2425
- * @example
2426
- * if ( uiElement.isChanged() )
2427
- * &nbsp;&nbsp;confirm( 'Value changed! Continue?' );
2428
- */
2429
- isChanged : function()
2430
- {
2431
- // Override in input classes.
2432
- return false;
2433
- },
2434
-
2435
- /**
2436
- * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods.
2437
- * @returns {CKEDITOR.dialog.uiElement} The current UI element.
2438
- * @example
2439
- * focus : function()
2440
- * {
2441
- * this.selectParentTab();
2442
- * // do something else.
2443
- * }
2444
- */
2445
- selectParentTab : function()
2446
- {
2447
- var element = this.getInputElement(),
2448
- cursor = element,
2449
- tabId;
2450
- while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 )
2451
- { /*jsl:pass*/ }
2452
-
2453
- // Some widgets don't have parent tabs (e.g. OK and Cancel buttons).
2454
- if ( !cursor )
2455
- return this;
2456
-
2457
- tabId = cursor.getAttribute( 'name' );
2458
- // Avoid duplicate select.
2459
- if ( this._.dialog._.currentTabId != tabId )
2460
- this._.dialog.selectPage( tabId );
2461
- return this;
2462
- },
2463
-
2464
- /**
2465
- * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page.
2466
- * @returns {CKEDITOR.dialog.uiElement} The current UI element.
2467
- * @example
2468
- * uiElement.focus();
2469
- */
2470
- focus : function()
2471
- {
2472
- this.selectParentTab().getInputElement().focus();
2473
- return this;
2474
- },
2475
-
2476
- /**
2477
- * Registers the on* event handlers defined in the element definition.
2478
- * The default behavior of this function is:
2479
- * <ol>
2480
- * <li>
2481
- * If the on* event is defined in the class's eventProcesors list,
2482
- * then the registration is delegated to the corresponding function
2483
- * in the eventProcessors list.
2484
- * </li>
2485
- * <li>
2486
- * If the on* event is not defined in the eventProcessors list, then
2487
- * register the event handler under the corresponding DOM event of
2488
- * the UI element's input DOM element (as defined by the return value
2489
- * of {@link CKEDITOR.ui.dialog.uiElement#getInputElement}).
2490
- * </li>
2491
- * </ol>
2492
- * This function is only called at UI element instantiation, but can
2493
- * be overridded in child classes if they require more flexibility.
2494
- * @param {CKEDITOR.dialog.uiElementDefinition} definition The UI element
2495
- * definition.
2496
- * @returns {CKEDITOR.dialog.uiElement} The current UI element.
2497
- * @example
2498
- */
2499
- registerEvents : function( definition )
2500
- {
2501
- var regex = /^on([A-Z]\w+)/,
2502
- match;
2503
-
2504
- var registerDomEvent = function( uiElement, dialog, eventName, func )
2505
- {
2506
- dialog.on( 'load', function()
2507
- {
2508
- uiElement.getInputElement().on( eventName, func, uiElement );
2509
- });
2510
- };
2511
-
2512
- for ( var i in definition )
2513
- {
2514
- if ( !( match = i.match( regex ) ) )
2515
- continue;
2516
- if ( this.eventProcessors[i] )
2517
- this.eventProcessors[i].call( this, this._.dialog, definition[i] );
2518
- else
2519
- registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] );
2520
- }
2521
-
2522
- return this;
2523
- },
2524
-
2525
- /**
2526
- * The event processor list used by
2527
- * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element
2528
- * instantiation. The default list defines three on* events:
2529
- * <ol>
2530
- * <li>onLoad - Called when the element's parent dialog opens for the
2531
- * first time</li>
2532
- * <li>onShow - Called whenever the element's parent dialog opens.</li>
2533
- * <li>onHide - Called whenever the element's parent dialog closes.</li>
2534
- * </ol>
2535
- * @field
2536
- * @type Object
2537
- * @example
2538
- * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick
2539
- * // handlers in the UI element's definitions.
2540
- * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {},
2541
- * &nbsp;&nbsp;CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,
2542
- * &nbsp;&nbsp;{ onClick : function( dialog, func ) { this.on( 'click', func ); } },
2543
- * &nbsp;&nbsp;true );
2544
- */
2545
- eventProcessors :
2546
- {
2547
- onLoad : function( dialog, func )
2548
- {
2549
- dialog.on( 'load', func, this );
2550
- },
2551
-
2552
- onShow : function( dialog, func )
2553
- {
2554
- dialog.on( 'show', func, this );
2555
- },
2556
-
2557
- onHide : function( dialog, func )
2558
- {
2559
- dialog.on( 'hide', func, this );
2560
- }
2561
- },
2562
-
2563
- /**
2564
- * The default handler for a UI element's access key down event, which
2565
- * tries to put focus to the UI element.<br />
2566
- * Can be overridded in child classes for more sophisticaed behavior.
2567
- * @param {CKEDITOR.dialog} dialog The parent dialog object.
2568
- * @param {String} key The key combination pressed. Since access keys
2569
- * are defined to always include the CTRL key, its value should always
2570
- * include a 'CTRL+' prefix.
2571
- * @example
2572
- */
2573
- accessKeyDown : function( dialog, key )
2574
- {
2575
- this.focus();
2576
- },
2577
-
2578
- /**
2579
- * The default handler for a UI element's access key up event, which
2580
- * does nothing.<br />
2581
- * Can be overridded in child classes for more sophisticated behavior.
2582
- * @param {CKEDITOR.dialog} dialog The parent dialog object.
2583
- * @param {String} key The key combination pressed. Since access keys
2584
- * are defined to always include the CTRL key, its value should always
2585
- * include a 'CTRL+' prefix.
2586
- * @example
2587
- */
2588
- accessKeyUp : function( dialog, key )
2589
- {
2590
- },
2591
-
2592
- /**
2593
- * Disables a UI element.
2594
- * @example
2595
- */
2596
- disable : function()
2597
- {
2598
- var element = this.getInputElement();
2599
- element.setAttribute( 'disabled', 'true' );
2600
- element.addClass( 'cke_disabled' );
2601
- },
2602
-
2603
- /**
2604
- * Enables a UI element.
2605
- * @example
2606
- */
2607
- enable : function()
2608
- {
2609
- var element = this.getInputElement();
2610
- element.removeAttribute( 'disabled' );
2611
- element.removeClass( 'cke_disabled' );
2612
- },
2613
-
2614
- /**
2615
- * Determines whether an UI element is enabled or not.
2616
- * @returns {Boolean} Whether the UI element is enabled.
2617
- * @example
2618
- */
2619
- isEnabled : function()
2620
- {
2621
- return !this.getInputElement().getAttribute( 'disabled' );
2622
- },
2623
-
2624
- /**
2625
- * Determines whether an UI element is visible or not.
2626
- * @returns {Boolean} Whether the UI element is visible.
2627
- * @example
2628
- */
2629
- isVisible : function()
2630
- {
2631
- return this.getInputElement().isVisible();
2632
- },
2633
-
2634
- /**
2635
- * Determines whether an UI element is focus-able or not.
2636
- * Focus-able is defined as being both visible and enabled.
2637
- * @returns {Boolean} Whether the UI element can be focused.
2638
- * @example
2639
- */
2640
- isFocusable : function()
2641
- {
2642
- if ( !this.isEnabled() || !this.isVisible() )
2643
- return false;
2644
- return true;
2645
- }
2646
- };
2647
-
2648
- CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
2649
- /**
2650
- * @lends CKEDITOR.ui.dialog.hbox.prototype
2651
- */
2652
- {
2653
- /**
2654
- * Gets a child UI element inside this container.
2655
- * @param {Array|Number} indices An array or a single number to indicate the child's
2656
- * position in the container's descendant tree. Omit to get all the children in an array.
2657
- * @returns {Array|CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container
2658
- * if no argument given, or the specified UI element if indices is given.
2659
- * @example
2660
- * var checkbox = hbox.getChild( [0,1] );
2661
- * checkbox.setValue( true );
2662
- */
2663
- getChild : function( indices )
2664
- {
2665
- // If no arguments, return a clone of the children array.
2666
- if ( arguments.length < 1 )
2667
- return this._.children.concat();
2668
-
2669
- // If indices isn't array, make it one.
2670
- if ( !indices.splice )
2671
- indices = [ indices ];
2672
-
2673
- // Retrieve the child element according to tree position.
2674
- if ( indices.length < 2 )
2675
- return this._.children[ indices[0] ];
2676
- else
2677
- return ( this._.children[ indices[0] ] && this._.children[ indices[0] ].getChild ) ?
2678
- this._.children[ indices[0] ].getChild( indices.slice( 1, indices.length ) ) :
2679
- null;
2680
- }
2681
- }, true );
2682
-
2683
- CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox();
2684
-
2685
-
2686
-
2687
- (function()
2688
- {
2689
- var commonBuilder = {
2690
- build : function( dialog, elementDefinition, output )
2691
- {
2692
- var children = elementDefinition.children,
2693
- child,
2694
- childHtmlList = [],
2695
- childObjList = [];
2696
- for ( var i = 0 ; ( i < children.length && ( child = children[i] ) ) ; i++ )
2697
- {
2698
- var childHtml = [];
2699
- childHtmlList.push( childHtml );
2700
- childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) );
2701
- }
2702
- return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, childObjList, childHtmlList, output, elementDefinition );
2703
- }
2704
- };
2705
-
2706
- CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder );
2707
- CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder );
2708
- })();
2709
-
2710
- /**
2711
- * Generic dialog command. It opens a specific dialog when executed.
2712
- * @constructor
2713
- * @augments CKEDITOR.commandDefinition
2714
- * @param {string} dialogName The name of the dialog to open when executing
2715
- * this command.
2716
- * @example
2717
- * // Register the "link" command, which opens the "link" dialog.
2718
- * editor.addCommand( 'link', <b>new CKEDITOR.dialogCommand( 'link' )</b> );
2719
- */
2720
- CKEDITOR.dialogCommand = function( dialogName )
2721
- {
2722
- this.dialogName = dialogName;
2723
- };
2724
-
2725
- CKEDITOR.dialogCommand.prototype =
2726
- {
2727
- /** @ignore */
2728
- exec : function( editor )
2729
- {
2730
- editor.openDialog( this.dialogName );
2731
- },
2732
-
2733
- // Dialog commands just open a dialog ui, thus require no undo logic,
2734
- // undo support should dedicate to specific dialog implementation.
2735
- canUndo: false,
2736
-
2737
- editorFocus : CKEDITOR.env.ie || CKEDITOR.env.webkit
2738
- };
2739
-
2740
- (function()
2741
- {
2742
- var notEmptyRegex = /^([a]|[^a])+$/,
2743
- integerRegex = /^\d*$/,
2744
- numberRegex = /^\d*(?:\.\d+)?$/;
2745
-
2746
- CKEDITOR.VALIDATE_OR = 1;
2747
- CKEDITOR.VALIDATE_AND = 2;
2748
-
2749
- CKEDITOR.dialog.validate =
2750
- {
2751
- functions : function()
2752
- {
2753
- return function()
2754
- {
2755
- /**
2756
- * It's important for validate functions to be able to accept the value
2757
- * as argument in addition to this.getValue(), so that it is possible to
2758
- * combine validate functions together to make more sophisticated
2759
- * validators.
2760
- */
2761
- var value = this && this.getValue ? this.getValue() : arguments[0];
2762
-
2763
- var msg = undefined,
2764
- relation = CKEDITOR.VALIDATE_AND,
2765
- functions = [], i;
2766
-
2767
- for ( i = 0 ; i < arguments.length ; i++ )
2768
- {
2769
- if ( typeof( arguments[i] ) == 'function' )
2770
- functions.push( arguments[i] );
2771
- else
2772
- break;
2773
- }
2774
-
2775
- if ( i < arguments.length && typeof( arguments[i] ) == 'string' )
2776
- {
2777
- msg = arguments[i];
2778
- i++;
2779
- }
2780
-
2781
- if ( i < arguments.length && typeof( arguments[i]) == 'number' )
2782
- relation = arguments[i];
2783
-
2784
- var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false );
2785
- for ( i = 0 ; i < functions.length ; i++ )
2786
- {
2787
- if ( relation == CKEDITOR.VALIDATE_AND )
2788
- passed = passed && functions[i]( value );
2789
- else
2790
- passed = passed || functions[i]( value );
2791
- }
2792
-
2793
- if ( !passed )
2794
- {
2795
- if ( msg !== undefined )
2796
- alert( msg );
2797
- if ( this && ( this.select || this.focus ) )
2798
- ( this.select || this.focus )();
2799
- return false;
2800
- }
2801
-
2802
- return true;
2803
- };
2804
- },
2805
-
2806
- regex : function( regex, msg )
2807
- {
2808
- /*
2809
- * Can be greatly shortened by deriving from functions validator if code size
2810
- * turns out to be more important than performance.
2811
- */
2812
- return function()
2813
- {
2814
- var value = this && this.getValue ? this.getValue() : arguments[0];
2815
- if ( !regex.test( value ) )
2816
- {
2817
- if ( msg !== undefined )
2818
- alert( msg );
2819
- if ( this && ( this.select || this.focus ) )
2820
- {
2821
- if ( this.select )
2822
- this.select();
2823
- else
2824
- this.focus();
2825
- }
2826
- return false;
2827
- }
2828
- return true;
2829
- };
2830
- },
2831
-
2832
- notEmpty : function( msg )
2833
- {
2834
- return this.regex( notEmptyRegex, msg );
2835
- },
2836
-
2837
- integer : function( msg )
2838
- {
2839
- return this.regex( integerRegex, msg );
2840
- },
2841
-
2842
- 'number' : function( msg )
2843
- {
2844
- return this.regex( numberRegex, msg );
2845
- },
2846
-
2847
- equals : function( value, msg )
2848
- {
2849
- return this.functions( function( val ){ return val == value; }, msg );
2850
- },
2851
-
2852
- notEqual : function( value, msg )
2853
- {
2854
- return this.functions( function( val ){ return val != value; }, msg );
2855
- }
2856
- };
2857
-
2858
- CKEDITOR.on( 'instanceDestroyed', function( evt )
2859
- {
2860
- // Remove dialog cover on last instance destroy.
2861
- if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) )
2862
- {
2863
- var currentTopDialog;
2864
- while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) )
2865
- currentTopDialog.hide();
2866
- removeCovers();
2867
- }
2868
-
2869
- var dialogs = evt.editor._.storedDialogs;
2870
- for ( var name in dialogs )
2871
- dialogs[ name ].destroy();
2872
-
2873
- });
2874
-
2875
- })();
2876
- })();
2877
-
2878
- // Extend the CKEDITOR.editor class with dialog specific functions.
2879
- CKEDITOR.tools.extend( CKEDITOR.editor.prototype,
2880
- /** @lends CKEDITOR.editor.prototype */
2881
- {
2882
- /**
2883
- * Loads and opens a registered dialog.
2884
- * @param {String} dialogName The registered name of the dialog.
2885
- * @param {Function} callback The function to be invoked after dialog instance created.
2886
- * @see CKEDITOR.dialog.add
2887
- * @example
2888
- * CKEDITOR.instances.editor1.openDialog( 'smiley' );
2889
- * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. null if the dialog name is not registered.
2890
- */
2891
- openDialog : function( dialogName, callback )
2892
- {
2893
- var dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ],
2894
- dialogSkin = this.skin.dialog;
2895
-
2896
- // If the dialogDefinition is already loaded, open it immediately.
2897
- if ( typeof dialogDefinitions == 'function' && dialogSkin._isLoaded )
2898
- {
2899
- var storedDialogs = this._.storedDialogs ||
2900
- ( this._.storedDialogs = {} );
2901
-
2902
- var dialog = storedDialogs[ dialogName ] ||
2903
- ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) );
2904
-
2905
- callback && callback.call( dialog, dialog );
2906
- dialog.show();
2907
-
2908
- return dialog;
2909
- }
2910
- else if ( dialogDefinitions == 'failed' )
2911
- throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' );
2912
-
2913
- // Not loaded? Load the .js file first.
2914
- var body = CKEDITOR.document.getBody(),
2915
- cursor = body.$.style.cursor,
2916
- me = this;
2917
-
2918
- body.setStyle( 'cursor', 'wait' );
2919
-
2920
- function onDialogFileLoaded( success )
2921
- {
2922
- var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ],
2923
- skin = me.skin.dialog;
2924
-
2925
- // Check if both skin part and definition is loaded.
2926
- if ( !skin._isLoaded || loadDefinition && typeof success == 'undefined' )
2927
- return;
2928
-
2929
- // In case of plugin error, mark it as loading failed.
2930
- if ( typeof dialogDefinition != 'function' )
2931
- CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed';
2932
-
2933
- me.openDialog( dialogName, callback );
2934
- body.setStyle( 'cursor', cursor );
2935
- }
2936
-
2937
- if ( typeof dialogDefinitions == 'string' )
2938
- {
2939
- var loadDefinition = 1;
2940
- CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), onDialogFileLoaded );
2941
- }
2942
-
2943
- CKEDITOR.skins.load( this, 'dialog', onDialogFileLoaded );
2944
-
2945
- return null;
2946
- }
2947
- });
2948
-
2949
- CKEDITOR.plugins.add( 'dialog',
2950
- {
2951
- requires : [ 'dialogui' ]
2952
- });
2953
-
2954
- // Dialog related configurations.
2955
-
2956
- /**
2957
- * The color of the dialog background cover. It should be a valid CSS color
2958
- * string.
2959
- * @name CKEDITOR.config.dialog_backgroundCoverColor
2960
- * @type String
2961
- * @default 'white'
2962
- * @example
2963
- * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)';
2964
- */
2965
-
2966
- /**
2967
- * The opacity of the dialog background cover. It should be a number within the
2968
- * range [0.0, 1.0].
2969
- * @name CKEDITOR.config.dialog_backgroundCoverOpacity
2970
- * @type Number
2971
- * @default 0.5
2972
- * @example
2973
- * config.dialog_backgroundCoverOpacity = 0.7;
2974
- */
2975
-
2976
- /**
2977
- * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened.
2978
- * @name CKEDITOR.config.dialog_startupFocusTab
2979
- * @type Boolean
2980
- * @default false
2981
- * @example
2982
- * config.dialog_startupFocusTab = true;
2983
- */
2984
-
2985
- /**
2986
- * The distance of magnetic borders used in moving and resizing dialogs,
2987
- * measured in pixels.
2988
- * @name CKEDITOR.config.dialog_magnetDistance
2989
- * @type Number
2990
- * @default 20
2991
- * @example
2992
- * config.dialog_magnetDistance = 30;
2993
- */
2994
-
2995
- /**
2996
- * Fired when a dialog definition is about to be used to create a dialog into
2997
- * an editor instance. This event makes it possible to customize the definition
2998
- * before creating it.
2999
- * <p>Note that this event is called only the first time a specific dialog is
3000
- * opened. Successive openings will use the cached dialog, and this event will
3001
- * not get fired.</p>
3002
- * @name CKEDITOR#dialogDefinition
3003
- * @event
3004
- * @param {CKEDITOR.dialog.dialogDefinition} data The dialog defination that
3005
- * is being loaded.
3006
- * @param {CKEDITOR.editor} editor The editor instance that will use the
3007
- * dialog.
3008
- */
3009
-
3010
- /**
3011
- * Fired when a tab is going to be selected in a dialog
3012
- * @name dialog#selectPage
3013
- * @event
3014
- * @param String page The id of the page that it's gonna be selected.
3015
- * @param String currentPage The id of the current page.
3016
- */