inline_forms 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (712) hide show
  1. data/VERSION +1 -1
  2. data/app/helpers/form_elements/text_area.rb +4 -1
  3. data/inline_forms.gemspec +709 -2
  4. data/lib/otherstuff/Gemfile +58 -0
  5. data/lib/otherstuff/add_roles.sql +54 -0
  6. data/lib/otherstuff/database.yml +32 -0
  7. data/lib/otherstuff/diffie +2 -0
  8. data/lib/otherstuff/mk-ice-ts +26 -0
  9. data/lib/otherstuff/mk-new-app +24 -0
  10. data/lib/otherstuff/mkrole +7 -0
  11. data/lib/otherstuff/roles_users.sql +40 -0
  12. data/public/images/glass_plate.gif +0 -0
  13. data/public/images/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  14. data/public/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  15. data/public/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  16. data/public/images/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  17. data/public/images/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  18. data/public/images/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  19. data/public/images/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  20. data/public/images/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  21. data/public/images/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  22. data/public/images/ui-icons_3d3d3d_256x240.png +0 -0
  23. data/public/images/ui-icons_bd7b00_256x240.png +0 -0
  24. data/public/images/ui-icons_d19405_256x240.png +0 -0
  25. data/public/images/ui-icons_eb990f_256x240.png +0 -0
  26. data/public/images/ui-icons_ed9f26_256x240.png +0 -0
  27. data/public/images/ui-icons_fadc7a_256x240.png +0 -0
  28. data/public/images/ui-icons_ffe180_256x240.png +0 -0
  29. data/public/javascripts/application.js +2 -0
  30. data/public/javascripts/ckeditor/.htaccess +24 -0
  31. data/public/javascripts/ckeditor/CHANGES.html +1295 -0
  32. data/public/javascripts/ckeditor/INSTALL.html +92 -0
  33. data/public/javascripts/ckeditor/LICENSE.html +1334 -0
  34. data/public/javascripts/ckeditor/_samples/adobeair/application.xml +32 -0
  35. data/public/javascripts/ckeditor/_samples/adobeair/run.bat +9 -0
  36. data/public/javascripts/ckeditor/_samples/adobeair/run.sh +8 -0
  37. data/public/javascripts/ckeditor/_samples/adobeair/sample.html +45 -0
  38. data/public/javascripts/ckeditor/_samples/ajax.html +98 -0
  39. data/public/javascripts/ckeditor/_samples/api.html +192 -0
  40. data/public/javascripts/ckeditor/_samples/api_dialog.html +198 -0
  41. data/public/javascripts/ckeditor/_samples/api_dialog/my_dialog.js +28 -0
  42. data/public/javascripts/ckeditor/_samples/asp/index.html +103 -0
  43. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.fla +0 -0
  44. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.swf +0 -0
  45. data/public/javascripts/ckeditor/_samples/assets/output_xhtml.css +204 -0
  46. data/public/javascripts/ckeditor/_samples/assets/parsesample.css +70 -0
  47. data/public/javascripts/ckeditor/_samples/assets/swfobject.js +18 -0
  48. data/public/javascripts/ckeditor/_samples/autogrow.html +103 -0
  49. data/public/javascripts/ckeditor/_samples/bbcode.html +136 -0
  50. data/public/javascripts/ckeditor/_samples/devtools.html +94 -0
  51. data/public/javascripts/ckeditor/_samples/divreplace.html +154 -0
  52. data/public/javascripts/ckeditor/_samples/enterkey.html +115 -0
  53. data/public/javascripts/ckeditor/_samples/fullpage.html +82 -0
  54. data/public/javascripts/ckeditor/_samples/index.html +116 -0
  55. data/public/javascripts/ckeditor/_samples/jqueryadapter.html +99 -0
  56. data/public/javascripts/ckeditor/_samples/output_for_flash.html +275 -0
  57. data/public/javascripts/ckeditor/_samples/output_html.html +285 -0
  58. data/public/javascripts/ckeditor/_samples/output_xhtml.html +181 -0
  59. data/public/javascripts/ckeditor/_samples/php/index.html +47 -0
  60. data/public/javascripts/ckeditor/_samples/placeholder.html +81 -0
  61. data/public/javascripts/ckeditor/_samples/readonly.html +91 -0
  62. data/public/javascripts/ckeditor/_samples/replacebyclass.html +64 -0
  63. data/public/javascripts/ckeditor/_samples/replacebycode.html +97 -0
  64. data/public/javascripts/ckeditor/_samples/sample.css +163 -0
  65. data/public/javascripts/ckeditor/_samples/sample.js +65 -0
  66. data/public/javascripts/ckeditor/_samples/sharedspaces.html +153 -0
  67. data/public/javascripts/ckeditor/_samples/skins.html +110 -0
  68. data/public/javascripts/ckeditor/_samples/stylesheetparser.html +93 -0
  69. data/public/javascripts/ckeditor/_samples/tableresize.html +115 -0
  70. data/public/javascripts/ckeditor/_samples/ui_color.html +129 -0
  71. data/public/javascripts/ckeditor/_samples/ui_languages.html +134 -0
  72. data/public/javascripts/ckeditor/_source/adapters/jquery.js +306 -0
  73. data/public/javascripts/ckeditor/_source/core/_bootstrap.js +87 -0
  74. data/public/javascripts/ckeditor/_source/core/ckeditor.js +141 -0
  75. data/public/javascripts/ckeditor/_source/core/ckeditor_base.js +227 -0
  76. data/public/javascripts/ckeditor/_source/core/ckeditor_basic.js +238 -0
  77. data/public/javascripts/ckeditor/_source/core/command.js +209 -0
  78. data/public/javascripts/ckeditor/_source/core/commanddefinition.js +129 -0
  79. data/public/javascripts/ckeditor/_source/core/config.js +431 -0
  80. data/public/javascripts/ckeditor/_source/core/dataprocessor.js +65 -0
  81. data/public/javascripts/ckeditor/_source/core/dom.js +20 -0
  82. data/public/javascripts/ckeditor/_source/core/dom/comment.js +32 -0
  83. data/public/javascripts/ckeditor/_source/core/dom/document.js +251 -0
  84. data/public/javascripts/ckeditor/_source/core/dom/documentfragment.js +49 -0
  85. data/public/javascripts/ckeditor/_source/core/dom/domobject.js +258 -0
  86. data/public/javascripts/ckeditor/_source/core/dom/element.js +1663 -0
  87. data/public/javascripts/ckeditor/_source/core/dom/elementpath.js +119 -0
  88. data/public/javascripts/ckeditor/_source/core/dom/event.js +142 -0
  89. data/public/javascripts/ckeditor/_source/core/dom/node.js +690 -0
  90. data/public/javascripts/ckeditor/_source/core/dom/nodelist.js +26 -0
  91. data/public/javascripts/ckeditor/_source/core/dom/range.js +2032 -0
  92. data/public/javascripts/ckeditor/_source/core/dom/rangelist.js +213 -0
  93. data/public/javascripts/ckeditor/_source/core/dom/text.js +128 -0
  94. data/public/javascripts/ckeditor/_source/core/dom/walker.js +462 -0
  95. data/public/javascripts/ckeditor/_source/core/dom/window.js +96 -0
  96. data/public/javascripts/ckeditor/_source/core/dtd.js +237 -0
  97. data/public/javascripts/ckeditor/_source/core/editor.js +1041 -0
  98. data/public/javascripts/ckeditor/_source/core/editor_basic.js +186 -0
  99. data/public/javascripts/ckeditor/_source/core/env.js +282 -0
  100. data/public/javascripts/ckeditor/_source/core/event.js +342 -0
  101. data/public/javascripts/ckeditor/_source/core/eventInfo.js +120 -0
  102. data/public/javascripts/ckeditor/_source/core/focusmanager.js +152 -0
  103. data/public/javascripts/ckeditor/_source/core/htmlparser.js +224 -0
  104. data/public/javascripts/ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
  105. data/public/javascripts/ckeditor/_source/core/htmlparser/cdata.js +43 -0
  106. data/public/javascripts/ckeditor/_source/core/htmlparser/comment.js +60 -0
  107. data/public/javascripts/ckeditor/_source/core/htmlparser/element.js +249 -0
  108. data/public/javascripts/ckeditor/_source/core/htmlparser/filter.js +288 -0
  109. data/public/javascripts/ckeditor/_source/core/htmlparser/fragment.js +492 -0
  110. data/public/javascripts/ckeditor/_source/core/htmlparser/text.js +55 -0
  111. data/public/javascripts/ckeditor/_source/core/lang.js +157 -0
  112. data/public/javascripts/ckeditor/_source/core/loader.js +240 -0
  113. data/public/javascripts/ckeditor/_source/core/plugindefinition.js +83 -0
  114. data/public/javascripts/ckeditor/_source/core/plugins.js +103 -0
  115. data/public/javascripts/ckeditor/_source/core/resourcemanager.js +238 -0
  116. data/public/javascripts/ckeditor/_source/core/scriptloader.js +180 -0
  117. data/public/javascripts/ckeditor/_source/core/skins.js +184 -0
  118. data/public/javascripts/ckeditor/_source/core/themes.js +19 -0
  119. data/public/javascripts/ckeditor/_source/core/tools.js +734 -0
  120. data/public/javascripts/ckeditor/_source/core/ui.js +128 -0
  121. data/public/javascripts/ckeditor/_source/lang/_languages.js +84 -0
  122. data/public/javascripts/ckeditor/_source/lang/_translationstatus.txt +61 -0
  123. data/public/javascripts/ckeditor/_source/lang/af.js +810 -0
  124. data/public/javascripts/ckeditor/_source/lang/ar.js +810 -0
  125. data/public/javascripts/ckeditor/_source/lang/bg.js +810 -0
  126. data/public/javascripts/ckeditor/_source/lang/bn.js +810 -0
  127. data/public/javascripts/ckeditor/_source/lang/bs.js +810 -0
  128. data/public/javascripts/ckeditor/_source/lang/ca.js +810 -0
  129. data/public/javascripts/ckeditor/_source/lang/cs.js +810 -0
  130. data/public/javascripts/ckeditor/_source/lang/cy.js +810 -0
  131. data/public/javascripts/ckeditor/_source/lang/da.js +810 -0
  132. data/public/javascripts/ckeditor/_source/lang/de.js +810 -0
  133. data/public/javascripts/ckeditor/_source/lang/el.js +810 -0
  134. data/public/javascripts/ckeditor/_source/lang/en-au.js +810 -0
  135. data/public/javascripts/ckeditor/_source/lang/en-ca.js +810 -0
  136. data/public/javascripts/ckeditor/_source/lang/en-gb.js +810 -0
  137. data/public/javascripts/ckeditor/_source/lang/en.js +810 -0
  138. data/public/javascripts/ckeditor/_source/lang/eo.js +810 -0
  139. data/public/javascripts/ckeditor/_source/lang/es.js +810 -0
  140. data/public/javascripts/ckeditor/_source/lang/et.js +810 -0
  141. data/public/javascripts/ckeditor/_source/lang/eu.js +810 -0
  142. data/public/javascripts/ckeditor/_source/lang/fa.js +810 -0
  143. data/public/javascripts/ckeditor/_source/lang/fi.js +810 -0
  144. data/public/javascripts/ckeditor/_source/lang/fo.js +810 -0
  145. data/public/javascripts/ckeditor/_source/lang/fr-ca.js +810 -0
  146. data/public/javascripts/ckeditor/_source/lang/fr.js +810 -0
  147. data/public/javascripts/ckeditor/_source/lang/gl.js +810 -0
  148. data/public/javascripts/ckeditor/_source/lang/gu.js +810 -0
  149. data/public/javascripts/ckeditor/_source/lang/he.js +810 -0
  150. data/public/javascripts/ckeditor/_source/lang/hi.js +810 -0
  151. data/public/javascripts/ckeditor/_source/lang/hr.js +810 -0
  152. data/public/javascripts/ckeditor/_source/lang/hu.js +810 -0
  153. data/public/javascripts/ckeditor/_source/lang/is.js +810 -0
  154. data/public/javascripts/ckeditor/_source/lang/it.js +810 -0
  155. data/public/javascripts/ckeditor/_source/lang/ja.js +810 -0
  156. data/public/javascripts/ckeditor/_source/lang/ka.js +810 -0
  157. data/public/javascripts/ckeditor/_source/lang/km.js +810 -0
  158. data/public/javascripts/ckeditor/_source/lang/ko.js +810 -0
  159. data/public/javascripts/ckeditor/_source/lang/lt.js +810 -0
  160. data/public/javascripts/ckeditor/_source/lang/lv.js +810 -0
  161. data/public/javascripts/ckeditor/_source/lang/mn.js +810 -0
  162. data/public/javascripts/ckeditor/_source/lang/ms.js +810 -0
  163. data/public/javascripts/ckeditor/_source/lang/nb.js +810 -0
  164. data/public/javascripts/ckeditor/_source/lang/nl.js +810 -0
  165. data/public/javascripts/ckeditor/_source/lang/no.js +810 -0
  166. data/public/javascripts/ckeditor/_source/lang/pl.js +810 -0
  167. data/public/javascripts/ckeditor/_source/lang/pt-br.js +809 -0
  168. data/public/javascripts/ckeditor/_source/lang/pt.js +810 -0
  169. data/public/javascripts/ckeditor/_source/lang/ro.js +810 -0
  170. data/public/javascripts/ckeditor/_source/lang/ru.js +810 -0
  171. data/public/javascripts/ckeditor/_source/lang/sk.js +810 -0
  172. data/public/javascripts/ckeditor/_source/lang/sl.js +810 -0
  173. data/public/javascripts/ckeditor/_source/lang/sr-latn.js +810 -0
  174. data/public/javascripts/ckeditor/_source/lang/sr.js +810 -0
  175. data/public/javascripts/ckeditor/_source/lang/sv.js +809 -0
  176. data/public/javascripts/ckeditor/_source/lang/th.js +810 -0
  177. data/public/javascripts/ckeditor/_source/lang/tr.js +809 -0
  178. data/public/javascripts/ckeditor/_source/lang/uk.js +810 -0
  179. data/public/javascripts/ckeditor/_source/lang/vi.js +810 -0
  180. data/public/javascripts/ckeditor/_source/lang/zh-cn.js +810 -0
  181. data/public/javascripts/ckeditor/_source/lang/zh.js +810 -0
  182. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -0
  183. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
  184. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
  185. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/plugin.js +47 -0
  186. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/about.js +76 -0
  187. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/logo_ckeditor.png +0 -0
  188. data/public/javascripts/ckeditor/_source/plugins/about/plugin.js +24 -0
  189. data/public/javascripts/ckeditor/_source/plugins/adobeair/plugin.js +228 -0
  190. data/public/javascripts/ckeditor/_source/plugins/ajax/plugin.js +152 -0
  191. data/public/javascripts/ckeditor/_source/plugins/attachment/dialogs/attachment.js +384 -0
  192. data/public/javascripts/ckeditor/_source/plugins/attachment/images/attachment.png +0 -0
  193. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/en.js +10 -0
  194. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/ru.js +10 -0
  195. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/uk.js +10 -0
  196. data/public/javascripts/ckeditor/_source/plugins/attachment/plugin.js +44 -0
  197. data/public/javascripts/ckeditor/_source/plugins/autogrow/plugin.js +88 -0
  198. data/public/javascripts/ckeditor/_source/plugins/basicstyles/plugin.js +101 -0
  199. data/public/javascripts/ckeditor/_source/plugins/bbcode/plugin.js +924 -0
  200. data/public/javascripts/ckeditor/_source/plugins/bidi/plugin.js +331 -0
  201. data/public/javascripts/ckeditor/_source/plugins/blockquote/plugin.js +305 -0
  202. data/public/javascripts/ckeditor/_source/plugins/button/plugin.js +285 -0
  203. data/public/javascripts/ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -0
  204. data/public/javascripts/ckeditor/_source/plugins/clipboard/plugin.js +446 -0
  205. data/public/javascripts/ckeditor/_source/plugins/colorbutton/plugin.js +295 -0
  206. data/public/javascripts/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +340 -0
  207. data/public/javascripts/ckeditor/_source/plugins/colordialog/plugin.js +15 -0
  208. data/public/javascripts/ckeditor/_source/plugins/contextmenu/plugin.js +177 -0
  209. data/public/javascripts/ckeditor/_source/plugins/devtools/lang/en.js +16 -0
  210. data/public/javascripts/ckeditor/_source/plugins/devtools/plugin.js +173 -0
  211. data/public/javascripts/ckeditor/_source/plugins/dialog/dialogDefinition.js +1099 -0
  212. data/public/javascripts/ckeditor/_source/plugins/dialog/plugin.js +3235 -0
  213. data/public/javascripts/ckeditor/_source/plugins/dialogadvtab/plugin.js +205 -0
  214. data/public/javascripts/ckeditor/_source/plugins/dialogui/plugin.js +1537 -0
  215. data/public/javascripts/ckeditor/_source/plugins/div/dialogs/div.js +535 -0
  216. data/public/javascripts/ckeditor/_source/plugins/div/plugin.js +121 -0
  217. data/public/javascripts/ckeditor/_source/plugins/docprops/dialogs/docprops.js +686 -0
  218. data/public/javascripts/ckeditor/_source/plugins/docprops/plugin.js +22 -0
  219. data/public/javascripts/ckeditor/_source/plugins/domiterator/plugin.js +361 -0
  220. data/public/javascripts/ckeditor/_source/plugins/editingblock/plugin.js +269 -0
  221. data/public/javascripts/ckeditor/_source/plugins/elementspath/plugin.js +218 -0
  222. data/public/javascripts/ckeditor/_source/plugins/embed/dialogs/embed.js +65 -0
  223. data/public/javascripts/ckeditor/_source/plugins/embed/images/embed.png +0 -0
  224. data/public/javascripts/ckeditor/_source/plugins/embed/lang/en.js +9 -0
  225. data/public/javascripts/ckeditor/_source/plugins/embed/lang/ru.js +9 -0
  226. data/public/javascripts/ckeditor/_source/plugins/embed/lang/uk.js +9 -0
  227. data/public/javascripts/ckeditor/_source/plugins/embed/plugin.js +43 -0
  228. data/public/javascripts/ckeditor/_source/plugins/enterkey/plugin.js +399 -0
  229. data/public/javascripts/ckeditor/_source/plugins/entities/plugin.js +250 -0
  230. data/public/javascripts/ckeditor/_source/plugins/fakeobjects/plugin.js +126 -0
  231. data/public/javascripts/ckeditor/_source/plugins/filebrowser/plugin.js +524 -0
  232. data/public/javascripts/ckeditor/_source/plugins/find/dialogs/find.js +895 -0
  233. data/public/javascripts/ckeditor/_source/plugins/find/plugin.js +47 -0
  234. data/public/javascripts/ckeditor/_source/plugins/flash/dialogs/flash.js +698 -0
  235. data/public/javascripts/ckeditor/_source/plugins/flash/images/placeholder.png +0 -0
  236. data/public/javascripts/ckeditor/_source/plugins/flash/plugin.js +168 -0
  237. data/public/javascripts/ckeditor/_source/plugins/floatpanel/plugin.js +405 -0
  238. data/public/javascripts/ckeditor/_source/plugins/font/plugin.js +234 -0
  239. data/public/javascripts/ckeditor/_source/plugins/format/plugin.js +197 -0
  240. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/button.js +118 -0
  241. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/checkbox.js +153 -0
  242. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/form.js +177 -0
  243. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +100 -0
  244. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/radio.js +135 -0
  245. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/select.js +562 -0
  246. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textarea.js +114 -0
  247. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textfield.js +199 -0
  248. data/public/javascripts/ckeditor/_source/plugins/forms/images/hiddenfield.gif +0 -0
  249. data/public/javascripts/ckeditor/_source/plugins/forms/plugin.js +288 -0
  250. data/public/javascripts/ckeditor/_source/plugins/horizontalrule/plugin.js +36 -0
  251. data/public/javascripts/ckeditor/_source/plugins/htmldataprocessor/plugin.js +595 -0
  252. data/public/javascripts/ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
  253. data/public/javascripts/ckeditor/_source/plugins/iframe/dialogs/iframe.js +257 -0
  254. data/public/javascripts/ckeditor/_source/plugins/iframe/images/placeholder.png +0 -0
  255. data/public/javascripts/ckeditor/_source/plugins/iframe/plugin.js +106 -0
  256. data/public/javascripts/ckeditor/_source/plugins/iframedialog/plugin.js +188 -0
  257. data/public/javascripts/ckeditor/_source/plugins/image/dialogs/image.js +1403 -0
  258. data/public/javascripts/ckeditor/_source/plugins/image/plugin.js +81 -0
  259. data/public/javascripts/ckeditor/_source/plugins/indent/plugin.js +461 -0
  260. data/public/javascripts/ckeditor/_source/plugins/justify/plugin.js +253 -0
  261. data/public/javascripts/ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
  262. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/anchor.js +144 -0
  263. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/link.js +1400 -0
  264. data/public/javascripts/ckeditor/_source/plugins/link/images/anchor.gif +0 -0
  265. data/public/javascripts/ckeditor/_source/plugins/link/plugin.js +336 -0
  266. data/public/javascripts/ckeditor/_source/plugins/list/plugin.js +727 -0
  267. data/public/javascripts/ckeditor/_source/plugins/listblock/plugin.js +257 -0
  268. data/public/javascripts/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +204 -0
  269. data/public/javascripts/ckeditor/_source/plugins/liststyle/plugin.js +66 -0
  270. data/public/javascripts/ckeditor/_source/plugins/maximize/plugin.js +352 -0
  271. data/public/javascripts/ckeditor/_source/plugins/menu/plugin.js +505 -0
  272. data/public/javascripts/ckeditor/_source/plugins/menubutton/plugin.js +98 -0
  273. data/public/javascripts/ckeditor/_source/plugins/newpage/plugin.js +54 -0
  274. data/public/javascripts/ckeditor/_source/plugins/pagebreak/images/pagebreak.gif +0 -0
  275. data/public/javascripts/ckeditor/_source/plugins/pagebreak/plugin.js +164 -0
  276. data/public/javascripts/ckeditor/_source/plugins/panel/plugin.js +402 -0
  277. data/public/javascripts/ckeditor/_source/plugins/panelbutton/plugin.js +146 -0
  278. data/public/javascripts/ckeditor/_source/plugins/pastefromword/filter/default.js +1376 -0
  279. data/public/javascripts/ckeditor/_source/plugins/pastefromword/plugin.js +141 -0
  280. data/public/javascripts/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -0
  281. data/public/javascripts/ckeditor/_source/plugins/pastetext/plugin.js +98 -0
  282. data/public/javascripts/ckeditor/_source/plugins/placeholder/dialogs/placeholder.js +71 -0
  283. data/public/javascripts/ckeditor/_source/plugins/placeholder/lang/en.js +16 -0
  284. data/public/javascripts/ckeditor/_source/plugins/placeholder/lang/he.js +16 -0
  285. data/public/javascripts/ckeditor/_source/plugins/placeholder/placeholder.gif +0 -0
  286. data/public/javascripts/ckeditor/_source/plugins/placeholder/plugin.js +171 -0
  287. data/public/javascripts/ckeditor/_source/plugins/popup/plugin.js +64 -0
  288. data/public/javascripts/ckeditor/_source/plugins/preview/plugin.js +109 -0
  289. data/public/javascripts/ckeditor/_source/plugins/print/plugin.js +42 -0
  290. data/public/javascripts/ckeditor/_source/plugins/removeformat/plugin.js +185 -0
  291. data/public/javascripts/ckeditor/_source/plugins/resize/plugin.js +168 -0
  292. data/public/javascripts/ckeditor/_source/plugins/richcombo/plugin.js +378 -0
  293. data/public/javascripts/ckeditor/_source/plugins/save/plugin.js +56 -0
  294. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/options.js +537 -0
  295. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +71 -0
  296. data/public/javascripts/ckeditor/_source/plugins/scayt/plugin.js +964 -0
  297. data/public/javascripts/ckeditor/_source/plugins/selection/plugin.js +1563 -0
  298. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_address.png +0 -0
  299. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_blockquote.png +0 -0
  300. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_div.png +0 -0
  301. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h1.png +0 -0
  302. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h2.png +0 -0
  303. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h3.png +0 -0
  304. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h4.png +0 -0
  305. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h5.png +0 -0
  306. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h6.png +0 -0
  307. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_p.png +0 -0
  308. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_pre.png +0 -0
  309. data/public/javascripts/ckeditor/_source/plugins/showblocks/plugin.js +160 -0
  310. data/public/javascripts/ckeditor/_source/plugins/showborders/plugin.js +207 -0
  311. data/public/javascripts/ckeditor/_source/plugins/smiley/dialogs/smiley.js +224 -0
  312. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angel_smile.gif +0 -0
  313. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angry_smile.gif +0 -0
  314. data/public/javascripts/ckeditor/_source/plugins/smiley/images/broken_heart.gif +0 -0
  315. data/public/javascripts/ckeditor/_source/plugins/smiley/images/confused_smile.gif +0 -0
  316. data/public/javascripts/ckeditor/_source/plugins/smiley/images/cry_smile.gif +0 -0
  317. data/public/javascripts/ckeditor/_source/plugins/smiley/images/devil_smile.gif +0 -0
  318. data/public/javascripts/ckeditor/_source/plugins/smiley/images/embaressed_smile.gif +0 -0
  319. data/public/javascripts/ckeditor/_source/plugins/smiley/images/envelope.gif +0 -0
  320. data/public/javascripts/ckeditor/_source/plugins/smiley/images/heart.gif +0 -0
  321. data/public/javascripts/ckeditor/_source/plugins/smiley/images/kiss.gif +0 -0
  322. data/public/javascripts/ckeditor/_source/plugins/smiley/images/lightbulb.gif +0 -0
  323. data/public/javascripts/ckeditor/_source/plugins/smiley/images/omg_smile.gif +0 -0
  324. data/public/javascripts/ckeditor/_source/plugins/smiley/images/regular_smile.gif +0 -0
  325. data/public/javascripts/ckeditor/_source/plugins/smiley/images/sad_smile.gif +0 -0
  326. data/public/javascripts/ckeditor/_source/plugins/smiley/images/shades_smile.gif +0 -0
  327. data/public/javascripts/ckeditor/_source/plugins/smiley/images/teeth_smile.gif +0 -0
  328. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_down.gif +0 -0
  329. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_up.gif +0 -0
  330. data/public/javascripts/ckeditor/_source/plugins/smiley/images/tounge_smile.gif +0 -0
  331. data/public/javascripts/ckeditor/_source/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  332. data/public/javascripts/ckeditor/_source/plugins/smiley/images/wink_smile.gif +0 -0
  333. data/public/javascripts/ckeditor/_source/plugins/smiley/plugin.js +94 -0
  334. data/public/javascripts/ckeditor/_source/plugins/sourcearea/plugin.js +209 -0
  335. data/public/javascripts/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +350 -0
  336. data/public/javascripts/ckeditor/_source/plugins/specialchar/lang/en.js +89 -0
  337. data/public/javascripts/ckeditor/_source/plugins/specialchar/plugin.js +70 -0
  338. data/public/javascripts/ckeditor/_source/plugins/styles/plugin.js +1678 -0
  339. data/public/javascripts/ckeditor/_source/plugins/styles/styles/default.js +88 -0
  340. data/public/javascripts/ckeditor/_source/plugins/stylescombo/plugin.js +219 -0
  341. data/public/javascripts/ckeditor/_source/plugins/stylesheetparser/plugin.js +143 -0
  342. data/public/javascripts/ckeditor/_source/plugins/tab/plugin.js +367 -0
  343. data/public/javascripts/ckeditor/_source/plugins/table/dialogs/table.js +672 -0
  344. data/public/javascripts/ckeditor/_source/plugins/table/plugin.js +78 -0
  345. data/public/javascripts/ckeditor/_source/plugins/tableresize/plugin.js +450 -0
  346. data/public/javascripts/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -0
  347. data/public/javascripts/ckeditor/_source/plugins/tabletools/plugin.js +1191 -0
  348. data/public/javascripts/ckeditor/_source/plugins/templates/dialogs/templates.js +234 -0
  349. data/public/javascripts/ckeditor/_source/plugins/templates/plugin.js +99 -0
  350. data/public/javascripts/ckeditor/_source/plugins/templates/templates/default.js +94 -0
  351. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template1.gif +0 -0
  352. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template2.gif +0 -0
  353. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template3.gif +0 -0
  354. data/public/javascripts/ckeditor/_source/plugins/toolbar/plugin.js +545 -0
  355. data/public/javascripts/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +205 -0
  356. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/en.js +15 -0
  357. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/he.js +15 -0
  358. data/public/javascripts/ckeditor/_source/plugins/uicolor/plugin.js +37 -0
  359. data/public/javascripts/ckeditor/_source/plugins/uicolor/uicolor.gif +0 -0
  360. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  361. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  362. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  363. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  364. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +15 -0
  365. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/yui.js +71 -0
  366. data/public/javascripts/ckeditor/_source/plugins/undo/plugin.js +580 -0
  367. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/ciframe.html +49 -0
  368. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  369. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.css +82 -0
  370. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.js +192 -0
  371. data/public/javascripts/ckeditor/_source/plugins/wsc/plugin.js +33 -0
  372. data/public/javascripts/ckeditor/_source/plugins/wysiwygarea/plugin.js +1351 -0
  373. data/public/javascripts/ckeditor/_source/plugins/xml/plugin.js +170 -0
  374. data/public/javascripts/ckeditor/_source/skins/kama/dialog.css +920 -0
  375. data/public/javascripts/ckeditor/_source/skins/kama/editor.css +25 -0
  376. data/public/javascripts/ckeditor/_source/skins/kama/elementspath.css +73 -0
  377. data/public/javascripts/ckeditor/_source/skins/kama/icons.css +366 -0
  378. data/public/javascripts/ckeditor/_source/skins/kama/icons.png +0 -0
  379. data/public/javascripts/ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  380. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  381. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  382. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  383. data/public/javascripts/ckeditor/_source/skins/kama/images/mini.gif +0 -0
  384. data/public/javascripts/ckeditor/_source/skins/kama/images/noimage.png +0 -0
  385. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites.png +0 -0
  386. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  387. data/public/javascripts/ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  388. data/public/javascripts/ckeditor/_source/skins/kama/mainui.css +203 -0
  389. data/public/javascripts/ckeditor/_source/skins/kama/menu.css +232 -0
  390. data/public/javascripts/ckeditor/_source/skins/kama/panel.css +217 -0
  391. data/public/javascripts/ckeditor/_source/skins/kama/presets.css +49 -0
  392. data/public/javascripts/ckeditor/_source/skins/kama/reset.css +84 -0
  393. data/public/javascripts/ckeditor/_source/skins/kama/richcombo.css +287 -0
  394. data/public/javascripts/ckeditor/_source/skins/kama/skin.js +236 -0
  395. data/public/javascripts/ckeditor/_source/skins/kama/templates.css +88 -0
  396. data/public/javascripts/ckeditor/_source/skins/kama/toolbar.css +407 -0
  397. data/public/javascripts/ckeditor/_source/skins/office2003/dialog.css +826 -0
  398. data/public/javascripts/ckeditor/_source/skins/office2003/editor.css +25 -0
  399. data/public/javascripts/ckeditor/_source/skins/office2003/elementspath.css +74 -0
  400. data/public/javascripts/ckeditor/_source/skins/office2003/icons.css +363 -0
  401. data/public/javascripts/ckeditor/_source/skins/office2003/icons.png +0 -0
  402. data/public/javascripts/ckeditor/_source/skins/office2003/icons_rtl.png +0 -0
  403. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.gif +0 -0
  404. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.png +0 -0
  405. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides_rtl.png +0 -0
  406. data/public/javascripts/ckeditor/_source/skins/office2003/images/mini.gif +0 -0
  407. data/public/javascripts/ckeditor/_source/skins/office2003/images/noimage.png +0 -0
  408. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites.png +0 -0
  409. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites_ie6.png +0 -0
  410. data/public/javascripts/ckeditor/_source/skins/office2003/mainui.css +153 -0
  411. data/public/javascripts/ckeditor/_source/skins/office2003/menu.css +229 -0
  412. data/public/javascripts/ckeditor/_source/skins/office2003/panel.css +212 -0
  413. data/public/javascripts/ckeditor/_source/skins/office2003/presets.css +49 -0
  414. data/public/javascripts/ckeditor/_source/skins/office2003/reset.css +84 -0
  415. data/public/javascripts/ckeditor/_source/skins/office2003/richcombo.css +309 -0
  416. data/public/javascripts/ckeditor/_source/skins/office2003/skin.js +74 -0
  417. data/public/javascripts/ckeditor/_source/skins/office2003/templates.css +87 -0
  418. data/public/javascripts/ckeditor/_source/skins/office2003/toolbar.css +522 -0
  419. data/public/javascripts/ckeditor/_source/skins/v2/dialog.css +842 -0
  420. data/public/javascripts/ckeditor/_source/skins/v2/editor.css +25 -0
  421. data/public/javascripts/ckeditor/_source/skins/v2/elementspath.css +74 -0
  422. data/public/javascripts/ckeditor/_source/skins/v2/icons.css +363 -0
  423. data/public/javascripts/ckeditor/_source/skins/v2/icons.png +0 -0
  424. data/public/javascripts/ckeditor/_source/skins/v2/icons_rtl.png +0 -0
  425. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.gif +0 -0
  426. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.png +0 -0
  427. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides_rtl.png +0 -0
  428. data/public/javascripts/ckeditor/_source/skins/v2/images/mini.gif +0 -0
  429. data/public/javascripts/ckeditor/_source/skins/v2/images/noimage.png +0 -0
  430. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites.png +0 -0
  431. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites_ie6.png +0 -0
  432. data/public/javascripts/ckeditor/_source/skins/v2/images/toolbar_start.gif +0 -0
  433. data/public/javascripts/ckeditor/_source/skins/v2/mainui.css +162 -0
  434. data/public/javascripts/ckeditor/_source/skins/v2/menu.css +232 -0
  435. data/public/javascripts/ckeditor/_source/skins/v2/panel.css +212 -0
  436. data/public/javascripts/ckeditor/_source/skins/v2/presets.css +50 -0
  437. data/public/javascripts/ckeditor/_source/skins/v2/reset.css +84 -0
  438. data/public/javascripts/ckeditor/_source/skins/v2/richcombo.css +302 -0
  439. data/public/javascripts/ckeditor/_source/skins/v2/skin.js +70 -0
  440. data/public/javascripts/ckeditor/_source/skins/v2/templates.css +87 -0
  441. data/public/javascripts/ckeditor/_source/skins/v2/toolbar.css +465 -0
  442. data/public/javascripts/ckeditor/_source/themes/default/theme.js +394 -0
  443. data/public/javascripts/ckeditor/adapters/jquery.js +6 -0
  444. data/public/javascripts/ckeditor/ckeditor.js +145 -0
  445. data/public/javascripts/ckeditor/ckeditor.pack +211 -0
  446. data/public/javascripts/ckeditor/ckeditor_basic.js +8 -0
  447. data/public/javascripts/ckeditor/ckeditor_basic_source.js +20 -0
  448. data/public/javascripts/ckeditor/ckeditor_source.js +25 -0
  449. data/public/javascripts/ckeditor/config.js +28 -0
  450. data/public/javascripts/ckeditor/contents.css +23 -0
  451. data/public/javascripts/ckeditor/css/ckfinder.css +316 -0
  452. data/public/javascripts/ckeditor/css/fck_dialog.css +119 -0
  453. data/public/javascripts/ckeditor/css/fck_editor.css +448 -0
  454. data/public/javascripts/ckeditor/css/swfupload.css +94 -0
  455. data/public/javascripts/ckeditor/images/add.gif +0 -0
  456. data/public/javascripts/ckeditor/images/cancelbutton.gif +0 -0
  457. data/public/javascripts/ckeditor/images/ckfnothumb.gif +0 -0
  458. data/public/javascripts/ckeditor/images/doc.gif +0 -0
  459. data/public/javascripts/ckeditor/images/mp3.gif +0 -0
  460. data/public/javascripts/ckeditor/images/pdf.gif +0 -0
  461. data/public/javascripts/ckeditor/images/rar.gif +0 -0
  462. data/public/javascripts/ckeditor/images/refresh.gif +0 -0
  463. data/public/javascripts/ckeditor/images/select_files.png +0 -0
  464. data/public/javascripts/ckeditor/images/spacer.gif +0 -0
  465. data/public/javascripts/ckeditor/images/swf.gif +0 -0
  466. data/public/javascripts/ckeditor/images/toolbar.start.gif +0 -0
  467. data/public/javascripts/ckeditor/images/xls.gif +0 -0
  468. data/public/javascripts/ckeditor/lang/_languages.js +6 -0
  469. data/public/javascripts/ckeditor/lang/_translationstatus.txt +61 -0
  470. data/public/javascripts/ckeditor/lang/af.js +6 -0
  471. data/public/javascripts/ckeditor/lang/ar.js +6 -0
  472. data/public/javascripts/ckeditor/lang/bg.js +6 -0
  473. data/public/javascripts/ckeditor/lang/bn.js +6 -0
  474. data/public/javascripts/ckeditor/lang/bs.js +6 -0
  475. data/public/javascripts/ckeditor/lang/ca.js +6 -0
  476. data/public/javascripts/ckeditor/lang/cs.js +6 -0
  477. data/public/javascripts/ckeditor/lang/cy.js +6 -0
  478. data/public/javascripts/ckeditor/lang/da.js +6 -0
  479. data/public/javascripts/ckeditor/lang/de.js +6 -0
  480. data/public/javascripts/ckeditor/lang/el.js +6 -0
  481. data/public/javascripts/ckeditor/lang/en-au.js +6 -0
  482. data/public/javascripts/ckeditor/lang/en-ca.js +6 -0
  483. data/public/javascripts/ckeditor/lang/en-gb.js +6 -0
  484. data/public/javascripts/ckeditor/lang/en.js +6 -0
  485. data/public/javascripts/ckeditor/lang/eo.js +6 -0
  486. data/public/javascripts/ckeditor/lang/es.js +6 -0
  487. data/public/javascripts/ckeditor/lang/et.js +6 -0
  488. data/public/javascripts/ckeditor/lang/eu.js +6 -0
  489. data/public/javascripts/ckeditor/lang/fa.js +6 -0
  490. data/public/javascripts/ckeditor/lang/fi.js +6 -0
  491. data/public/javascripts/ckeditor/lang/fo.js +6 -0
  492. data/public/javascripts/ckeditor/lang/fr-ca.js +6 -0
  493. data/public/javascripts/ckeditor/lang/fr.js +6 -0
  494. data/public/javascripts/ckeditor/lang/gl.js +6 -0
  495. data/public/javascripts/ckeditor/lang/gu.js +6 -0
  496. data/public/javascripts/ckeditor/lang/he.js +6 -0
  497. data/public/javascripts/ckeditor/lang/hi.js +6 -0
  498. data/public/javascripts/ckeditor/lang/hr.js +6 -0
  499. data/public/javascripts/ckeditor/lang/hu.js +6 -0
  500. data/public/javascripts/ckeditor/lang/is.js +6 -0
  501. data/public/javascripts/ckeditor/lang/it.js +6 -0
  502. data/public/javascripts/ckeditor/lang/ja.js +6 -0
  503. data/public/javascripts/ckeditor/lang/ka.js +6 -0
  504. data/public/javascripts/ckeditor/lang/km.js +6 -0
  505. data/public/javascripts/ckeditor/lang/ko.js +6 -0
  506. data/public/javascripts/ckeditor/lang/lt.js +6 -0
  507. data/public/javascripts/ckeditor/lang/lv.js +6 -0
  508. data/public/javascripts/ckeditor/lang/mn.js +6 -0
  509. data/public/javascripts/ckeditor/lang/ms.js +6 -0
  510. data/public/javascripts/ckeditor/lang/nb.js +6 -0
  511. data/public/javascripts/ckeditor/lang/nl.js +6 -0
  512. data/public/javascripts/ckeditor/lang/no.js +6 -0
  513. data/public/javascripts/ckeditor/lang/pl.js +6 -0
  514. data/public/javascripts/ckeditor/lang/pt-br.js +6 -0
  515. data/public/javascripts/ckeditor/lang/pt.js +6 -0
  516. data/public/javascripts/ckeditor/lang/ro.js +6 -0
  517. data/public/javascripts/ckeditor/lang/ru.js +6 -0
  518. data/public/javascripts/ckeditor/lang/sk.js +6 -0
  519. data/public/javascripts/ckeditor/lang/sl.js +6 -0
  520. data/public/javascripts/ckeditor/lang/sr-latn.js +6 -0
  521. data/public/javascripts/ckeditor/lang/sr.js +6 -0
  522. data/public/javascripts/ckeditor/lang/sv.js +6 -0
  523. data/public/javascripts/ckeditor/lang/th.js +6 -0
  524. data/public/javascripts/ckeditor/lang/tr.js +6 -0
  525. data/public/javascripts/ckeditor/lang/uk.js +6 -0
  526. data/public/javascripts/ckeditor/lang/vi.js +6 -0
  527. data/public/javascripts/ckeditor/lang/zh-cn.js +6 -0
  528. data/public/javascripts/ckeditor/lang/zh.js +6 -0
  529. data/public/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +7 -0
  530. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/en.js +6 -0
  531. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/he.js +6 -0
  532. data/public/javascripts/ckeditor/plugins/about/dialogs/about.js +6 -0
  533. data/public/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  534. data/public/javascripts/ckeditor/plugins/adobeair/plugin.js +6 -0
  535. data/public/javascripts/ckeditor/plugins/ajax/plugin.js +6 -0
  536. data/public/javascripts/ckeditor/plugins/attachment/dialogs/attachment.js +1 -0
  537. data/public/javascripts/ckeditor/plugins/attachment/images/attachment.png +0 -0
  538. data/public/javascripts/ckeditor/plugins/attachment/lang/en.js +10 -0
  539. data/public/javascripts/ckeditor/plugins/attachment/lang/ru.js +10 -0
  540. data/public/javascripts/ckeditor/plugins/attachment/lang/uk.js +10 -0
  541. data/public/javascripts/ckeditor/plugins/attachment/plugin.js +1 -0
  542. data/public/javascripts/ckeditor/plugins/autogrow/plugin.js +6 -0
  543. data/public/javascripts/ckeditor/plugins/bbcode/plugin.js +9 -0
  544. data/public/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +7 -0
  545. data/public/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +7 -0
  546. data/public/javascripts/ckeditor/plugins/devtools/lang/en.js +6 -0
  547. data/public/javascripts/ckeditor/plugins/devtools/plugin.js +6 -0
  548. data/public/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  549. data/public/javascripts/ckeditor/plugins/div/dialogs/div.js +8 -0
  550. data/public/javascripts/ckeditor/plugins/docprops/dialogs/docprops.js +10 -0
  551. data/public/javascripts/ckeditor/plugins/docprops/plugin.js +6 -0
  552. data/public/javascripts/ckeditor/plugins/embed/dialogs/embed.js +1 -0
  553. data/public/javascripts/ckeditor/plugins/embed/images/embed.png +0 -0
  554. data/public/javascripts/ckeditor/plugins/embed/lang/en.js +9 -0
  555. data/public/javascripts/ckeditor/plugins/embed/lang/ru.js +9 -0
  556. data/public/javascripts/ckeditor/plugins/embed/lang/uk.js +9 -0
  557. data/public/javascripts/ckeditor/plugins/embed/plugin.js +1 -0
  558. data/public/javascripts/ckeditor/plugins/find/dialogs/find.js +9 -0
  559. data/public/javascripts/ckeditor/plugins/flash/dialogs/flash.js +9 -0
  560. data/public/javascripts/ckeditor/plugins/flash/images/placeholder.png +0 -0
  561. data/public/javascripts/ckeditor/plugins/forms/dialogs/button.js +6 -0
  562. data/public/javascripts/ckeditor/plugins/forms/dialogs/checkbox.js +6 -0
  563. data/public/javascripts/ckeditor/plugins/forms/dialogs/form.js +6 -0
  564. data/public/javascripts/ckeditor/plugins/forms/dialogs/hiddenfield.js +6 -0
  565. data/public/javascripts/ckeditor/plugins/forms/dialogs/radio.js +6 -0
  566. data/public/javascripts/ckeditor/plugins/forms/dialogs/select.js +9 -0
  567. data/public/javascripts/ckeditor/plugins/forms/dialogs/textarea.js +6 -0
  568. data/public/javascripts/ckeditor/plugins/forms/dialogs/textfield.js +6 -0
  569. data/public/javascripts/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  570. data/public/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +7 -0
  571. data/public/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  572. data/public/javascripts/ckeditor/plugins/iframedialog/plugin.js +6 -0
  573. data/public/javascripts/ckeditor/plugins/image/dialogs/image.js +13 -0
  574. data/public/javascripts/ckeditor/plugins/link/dialogs/anchor.js +6 -0
  575. data/public/javascripts/ckeditor/plugins/link/dialogs/link.js +11 -0
  576. data/public/javascripts/ckeditor/plugins/link/images/anchor.gif +0 -0
  577. data/public/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +6 -0
  578. data/public/javascripts/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  579. data/public/javascripts/ckeditor/plugins/pastefromword/filter/default.js +11 -0
  580. data/public/javascripts/ckeditor/plugins/pastetext/dialogs/pastetext.js +6 -0
  581. data/public/javascripts/ckeditor/plugins/placeholder/dialogs/placeholder.js +6 -0
  582. data/public/javascripts/ckeditor/plugins/placeholder/lang/en.js +6 -0
  583. data/public/javascripts/ckeditor/plugins/placeholder/lang/he.js +6 -0
  584. data/public/javascripts/ckeditor/plugins/placeholder/placeholder.gif +0 -0
  585. data/public/javascripts/ckeditor/plugins/placeholder/plugin.js +6 -0
  586. data/public/javascripts/ckeditor/plugins/scayt/dialogs/options.js +8 -0
  587. data/public/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +6 -0
  588. data/public/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  589. data/public/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  590. data/public/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  591. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  592. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  593. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  594. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  595. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  596. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  597. data/public/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  598. data/public/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  599. data/public/javascripts/ckeditor/plugins/smiley/dialogs/smiley.js +7 -0
  600. data/public/javascripts/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  601. data/public/javascripts/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  602. data/public/javascripts/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  603. data/public/javascripts/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  604. data/public/javascripts/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  605. data/public/javascripts/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  606. data/public/javascripts/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  607. data/public/javascripts/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  608. data/public/javascripts/ckeditor/plugins/smiley/images/heart.gif +0 -0
  609. data/public/javascripts/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  610. data/public/javascripts/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  611. data/public/javascripts/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  612. data/public/javascripts/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  613. data/public/javascripts/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  614. data/public/javascripts/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  615. data/public/javascripts/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  616. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  617. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  618. data/public/javascripts/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  619. data/public/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  620. data/public/javascripts/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  621. data/public/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +7 -0
  622. data/public/javascripts/ckeditor/plugins/specialchar/lang/en.js +6 -0
  623. data/public/javascripts/ckeditor/plugins/styles/styles/default.js +6 -0
  624. data/public/javascripts/ckeditor/plugins/stylesheetparser/plugin.js +6 -0
  625. data/public/javascripts/ckeditor/plugins/table/dialogs/table.js +9 -0
  626. data/public/javascripts/ckeditor/plugins/tableresize/plugin.js +7 -0
  627. data/public/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +8 -0
  628. data/public/javascripts/ckeditor/plugins/templates/dialogs/templates.js +7 -0
  629. data/public/javascripts/ckeditor/plugins/templates/templates/default.js +6 -0
  630. data/public/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  631. data/public/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  632. data/public/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  633. data/public/javascripts/ckeditor/plugins/uicolor/dialogs/uicolor.js +7 -0
  634. data/public/javascripts/ckeditor/plugins/uicolor/lang/en.js +6 -0
  635. data/public/javascripts/ckeditor/plugins/uicolor/lang/he.js +6 -0
  636. data/public/javascripts/ckeditor/plugins/uicolor/plugin.js +6 -0
  637. data/public/javascripts/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  638. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  639. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  640. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  641. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  642. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/yui.css +6 -0
  643. data/public/javascripts/ckeditor/plugins/uicolor/yui/yui.js +76 -0
  644. data/public/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
  645. data/public/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  646. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +6 -0
  647. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +7 -0
  648. data/public/javascripts/ckeditor/plugins/xml/plugin.js +6 -0
  649. data/public/javascripts/ckeditor/skins/kama/dialog.css +9 -0
  650. data/public/javascripts/ckeditor/skins/kama/editor.css +13 -0
  651. data/public/javascripts/ckeditor/skins/kama/icons.png +0 -0
  652. data/public/javascripts/ckeditor/skins/kama/icons_rtl.png +0 -0
  653. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  654. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  655. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  656. data/public/javascripts/ckeditor/skins/kama/images/mini.gif +0 -0
  657. data/public/javascripts/ckeditor/skins/kama/images/noimage.png +0 -0
  658. data/public/javascripts/ckeditor/skins/kama/images/sprites.png +0 -0
  659. data/public/javascripts/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  660. data/public/javascripts/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  661. data/public/javascripts/ckeditor/skins/kama/skin.js +7 -0
  662. data/public/javascripts/ckeditor/skins/kama/templates.css +6 -0
  663. data/public/javascripts/ckeditor/skins/office2003/dialog.css +9 -0
  664. data/public/javascripts/ckeditor/skins/office2003/editor.css +14 -0
  665. data/public/javascripts/ckeditor/skins/office2003/icons.png +0 -0
  666. data/public/javascripts/ckeditor/skins/office2003/icons_rtl.png +0 -0
  667. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  668. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  669. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  670. data/public/javascripts/ckeditor/skins/office2003/images/mini.gif +0 -0
  671. data/public/javascripts/ckeditor/skins/office2003/images/noimage.png +0 -0
  672. data/public/javascripts/ckeditor/skins/office2003/images/sprites.png +0 -0
  673. data/public/javascripts/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  674. data/public/javascripts/ckeditor/skins/office2003/skin.js +6 -0
  675. data/public/javascripts/ckeditor/skins/office2003/templates.css +6 -0
  676. data/public/javascripts/ckeditor/skins/v2/dialog.css +9 -0
  677. data/public/javascripts/ckeditor/skins/v2/editor.css +13 -0
  678. data/public/javascripts/ckeditor/skins/v2/icons.png +0 -0
  679. data/public/javascripts/ckeditor/skins/v2/icons_rtl.png +0 -0
  680. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  681. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  682. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  683. data/public/javascripts/ckeditor/skins/v2/images/mini.gif +0 -0
  684. data/public/javascripts/ckeditor/skins/v2/images/noimage.png +0 -0
  685. data/public/javascripts/ckeditor/skins/v2/images/sprites.png +0 -0
  686. data/public/javascripts/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  687. data/public/javascripts/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  688. data/public/javascripts/ckeditor/skins/v2/skin.js +6 -0
  689. data/public/javascripts/ckeditor/skins/v2/templates.css +6 -0
  690. data/public/javascripts/ckeditor/swfupload/fileprogress.js +266 -0
  691. data/public/javascripts/ckeditor/swfupload/handlers.js +181 -0
  692. data/public/javascripts/ckeditor/swfupload/jquery-1.5.1.min.js +16 -0
  693. data/public/javascripts/ckeditor/swfupload/querystring.js +40 -0
  694. data/public/javascripts/ckeditor/swfupload/rails.js +158 -0
  695. data/public/javascripts/ckeditor/swfupload/swfupload.js +1 -0
  696. data/public/javascripts/ckeditor/swfupload/swfupload.queue.js +1 -0
  697. data/public/javascripts/ckeditor/swfupload/swfupload.swf +0 -0
  698. data/public/javascripts/ckeditor/swfupload/swfupload.swfobject.js +111 -0
  699. data/public/javascripts/ckeditor/themes/default/theme.js +8 -0
  700. data/public/javascripts/jquery-ui.js +11603 -0
  701. data/public/javascripts/jquery-ui.min.js +406 -0
  702. data/public/javascripts/jquery.form.js +899 -0
  703. data/public/javascripts/jquery.js +8936 -0
  704. data/public/javascripts/jquery.min.js +18 -0
  705. data/public/javascripts/jquery.remotipart.js +79 -0
  706. data/public/javascripts/jquery_ujs.js +315 -0
  707. data/public/javascripts/rails.js +175 -0
  708. data/public/javascripts/slider.js +275 -0
  709. data/public/stylesheets/devise.css +94 -0
  710. data/public/stylesheets/inline_forms.css +16 -0
  711. data/public/stylesheets/jquery-ui-sunny.css +578 -0
  712. metadata +711 -4
@@ -0,0 +1,205 @@
1
+ /*
2
+ Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ (function()
7
+ {
8
+
9
+ function setupAdvParams( element )
10
+ {
11
+ var attrName = this.att;
12
+
13
+ var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';
14
+
15
+ if ( value !== undefined )
16
+ this.setValue( value );
17
+ }
18
+
19
+ function commitAdvParams()
20
+ {
21
+ // Dialogs may use different parameters in the commit list, so, by
22
+ // definition, we take the first CKEDITOR.dom.element available.
23
+ var element;
24
+
25
+ for ( var i = 0 ; i < arguments.length ; i++ )
26
+ {
27
+ if ( arguments[ i ] instanceof CKEDITOR.dom.element )
28
+ {
29
+ element = arguments[ i ];
30
+ break;
31
+ }
32
+ }
33
+
34
+ if ( element )
35
+ {
36
+ var attrName = this.att,
37
+ value = this.getValue();
38
+
39
+ if ( value )
40
+ element.setAttribute( attrName, value );
41
+ else
42
+ element.removeAttribute( attrName, value );
43
+ }
44
+ }
45
+
46
+ CKEDITOR.plugins.add( 'dialogadvtab',
47
+ {
48
+ /**
49
+ *
50
+ * @param tabConfig
51
+ * id, dir, classes, styles
52
+ */
53
+ createAdvancedTab : function( editor, tabConfig )
54
+ {
55
+ if ( !tabConfig )
56
+ tabConfig = { id:1, dir:1, classes:1, styles:1 };
57
+
58
+ var lang = editor.lang.common;
59
+
60
+ var result =
61
+ {
62
+ id : 'advanced',
63
+ label : lang.advancedTab,
64
+ title : lang.advancedTab,
65
+ elements :
66
+ [
67
+ {
68
+ type : 'vbox',
69
+ padding : 1,
70
+ children : []
71
+ }
72
+ ]
73
+ };
74
+
75
+ var contents = [];
76
+
77
+ if ( tabConfig.id || tabConfig.dir )
78
+ {
79
+ if ( tabConfig.id )
80
+ {
81
+ contents.push(
82
+ {
83
+ id : 'advId',
84
+ att : 'id',
85
+ type : 'text',
86
+ label : lang.id,
87
+ setup : setupAdvParams,
88
+ commit : commitAdvParams
89
+ });
90
+ }
91
+
92
+ if ( tabConfig.dir )
93
+ {
94
+ contents.push(
95
+ {
96
+ id : 'advLangDir',
97
+ att : 'dir',
98
+ type : 'select',
99
+ label : lang.langDir,
100
+ 'default' : '',
101
+ style : 'width:100%',
102
+ items :
103
+ [
104
+ [ lang.notSet, '' ],
105
+ [ lang.langDirLTR, 'ltr' ],
106
+ [ lang.langDirRTL, 'rtl' ]
107
+ ],
108
+ setup : setupAdvParams,
109
+ commit : commitAdvParams
110
+ });
111
+ }
112
+
113
+ result.elements[ 0 ].children.push(
114
+ {
115
+ type : 'hbox',
116
+ widths : [ '50%', '50%' ],
117
+ children : [].concat( contents )
118
+ });
119
+ }
120
+
121
+ if ( tabConfig.styles || tabConfig.classes )
122
+ {
123
+ contents = [];
124
+
125
+ if ( tabConfig.styles )
126
+ {
127
+ contents.push(
128
+ {
129
+ id : 'advStyles',
130
+ att : 'style',
131
+ type : 'text',
132
+ label : lang.styles,
133
+ 'default' : '',
134
+
135
+ getStyle : function( name, defaultValue )
136
+ {
137
+ var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') );
138
+ return match ? match[ 1 ] : defaultValue;
139
+ },
140
+
141
+ updateStyle : function( name, value )
142
+ {
143
+ var styles = this.getValue();
144
+
145
+ // Remove the current value.
146
+ if ( styles )
147
+ {
148
+ styles = styles
149
+ .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )
150
+ .replace( /^[;\s]+/, '' )
151
+ .replace( /\s+$/, '' );
152
+ }
153
+
154
+ if ( value )
155
+ {
156
+ styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );
157
+ styles += name + ': ' + value;
158
+ }
159
+
160
+ this.setValue( styles, 1 );
161
+
162
+ },
163
+
164
+ setup : setupAdvParams,
165
+
166
+ commit : commitAdvParams
167
+
168
+ });
169
+ }
170
+
171
+ if ( tabConfig.classes )
172
+ {
173
+ contents.push(
174
+ {
175
+ type : 'hbox',
176
+ widths : [ '45%', '55%' ],
177
+ children :
178
+ [
179
+ {
180
+ id : 'advCSSClasses',
181
+ att : 'class',
182
+ type : 'text',
183
+ label : lang.cssClasses,
184
+ 'default' : '',
185
+ setup : setupAdvParams,
186
+ commit : commitAdvParams
187
+
188
+ }
189
+ ]
190
+ });
191
+ }
192
+
193
+ result.elements[ 0 ].children.push(
194
+ {
195
+ type : 'hbox',
196
+ widths : [ '50%', '50%' ],
197
+ children : [].concat( contents )
198
+ });
199
+ }
200
+
201
+ return result;
202
+ }
203
+ });
204
+
205
+ })();
@@ -0,0 +1,1537 @@
1
+ /*
2
+ Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ /** @fileoverview The "dialogui" plugin. */
7
+
8
+ CKEDITOR.plugins.add( 'dialogui' );
9
+
10
+ (function()
11
+ {
12
+ var initPrivateObject = function( elementDefinition )
13
+ {
14
+ this._ || ( this._ = {} );
15
+ this._['default'] = this._.initValue = elementDefinition['default'] || '';
16
+ this._.required = elementDefinition[ 'required' ] || false;
17
+ var args = [ this._ ];
18
+ for ( var i = 1 ; i < arguments.length ; i++ )
19
+ args.push( arguments[i] );
20
+ args.push( true );
21
+ CKEDITOR.tools.extend.apply( CKEDITOR.tools, args );
22
+ return this._;
23
+ },
24
+ textBuilder =
25
+ {
26
+ build : function( dialog, elementDefinition, output )
27
+ {
28
+ return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output );
29
+ }
30
+ },
31
+ commonBuilder =
32
+ {
33
+ build : function( dialog, elementDefinition, output )
34
+ {
35
+ return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, elementDefinition, output );
36
+ }
37
+ },
38
+ containerBuilder =
39
+ {
40
+ build : function( dialog, elementDefinition, output )
41
+ {
42
+ var children = elementDefinition.children,
43
+ child,
44
+ childHtmlList = [],
45
+ childObjList = [];
46
+ for ( var i = 0 ; ( i < children.length && ( child = children[i] ) ) ; i++ )
47
+ {
48
+ var childHtml = [];
49
+ childHtmlList.push( childHtml );
50
+ childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) );
51
+ }
52
+ return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition );
53
+ }
54
+ },
55
+ commonPrototype =
56
+ {
57
+ isChanged : function()
58
+ {
59
+ return this.getValue() != this.getInitValue();
60
+ },
61
+
62
+ reset : function( noChangeEvent )
63
+ {
64
+ this.setValue( this.getInitValue(), noChangeEvent );
65
+ },
66
+
67
+ setInitValue : function()
68
+ {
69
+ this._.initValue = this.getValue();
70
+ },
71
+
72
+ resetInitValue : function()
73
+ {
74
+ this._.initValue = this._['default'];
75
+ },
76
+
77
+ getInitValue : function()
78
+ {
79
+ return this._.initValue;
80
+ }
81
+ },
82
+ commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,
83
+ {
84
+ onChange : function( dialog, func )
85
+ {
86
+ if ( !this._.domOnChangeRegistered )
87
+ {
88
+ dialog.on( 'load', function()
89
+ {
90
+ this.getInputElement().on( 'change', function()
91
+ {
92
+ // Make sure 'onchange' doesn't get fired after dialog closed. (#5719)
93
+ if ( !dialog.parts.dialog.isVisible() )
94
+ return;
95
+
96
+ this.fire( 'change', { value : this.getValue() } );
97
+ }, this );
98
+ }, this );
99
+ this._.domOnChangeRegistered = true;
100
+ }
101
+
102
+ this.on( 'change', func );
103
+ }
104
+ }, true ),
105
+ eventRegex = /^on([A-Z]\w+)/,
106
+ cleanInnerDefinition = function( def )
107
+ {
108
+ // An inner UI element should not have the parent's type, title or events.
109
+ for ( var i in def )
110
+ {
111
+ if ( eventRegex.test( i ) || i == 'title' || i == 'type' )
112
+ delete def[i];
113
+ }
114
+ return def;
115
+ };
116
+
117
+ CKEDITOR.tools.extend( CKEDITOR.ui.dialog,
118
+ /** @lends CKEDITOR.ui.dialog */
119
+ {
120
+ /**
121
+ * Base class for all dialog elements with a textual label on the left.
122
+ * @constructor
123
+ * @example
124
+ * @extends CKEDITOR.ui.dialog.uiElement
125
+ * @param {CKEDITOR.dialog} dialog
126
+ * Parent dialog object.
127
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
128
+ * The element definition. Accepted fields:
129
+ * <ul>
130
+ * <li><strong>label</strong> (Required) The label string.</li>
131
+ * <li><strong>labelLayout</strong> (Optional) Put 'horizontal' here if the
132
+ * label element is to be layed out horizontally. Otherwise a vertical
133
+ * layout will be used.</li>
134
+ * <li><strong>widths</strong> (Optional) This applies only for horizontal
135
+ * layouts - an 2-element array of lengths to specify the widths of the
136
+ * label and the content element.</li>
137
+ * </ul>
138
+ * @param {Array} htmlList
139
+ * List of HTML code to output to.
140
+ * @param {Function} contentHtml
141
+ * A function returning the HTML code string to be added inside the content
142
+ * cell.
143
+ */
144
+ labeledElement : function( dialog, elementDefinition, htmlList, contentHtml )
145
+ {
146
+ if ( arguments.length < 4 )
147
+ return;
148
+
149
+ var _ = initPrivateObject.call( this, elementDefinition );
150
+ _.labelId = CKEDITOR.tools.getNextId() + '_label';
151
+ var children = this._.children = [];
152
+ /** @ignore */
153
+ var innerHTML = function()
154
+ {
155
+ var html = [],
156
+ requiredClass = elementDefinition.required ? ' cke_required' : '' ;
157
+ if ( elementDefinition.labelLayout != 'horizontal' )
158
+ html.push( '<label class="cke_dialog_ui_labeled_label' + requiredClass + '" ',
159
+ ' id="'+ _.labelId + '"',
160
+ ' for="' + _.inputId + '"',
161
+ ' style="' + elementDefinition.labelStyle + '">',
162
+ elementDefinition.label,
163
+ '</label>',
164
+ '<div class="cke_dialog_ui_labeled_content" role="presentation">',
165
+ contentHtml.call( this, dialog, elementDefinition ),
166
+ '</div>' );
167
+ else
168
+ {
169
+ var hboxDefinition = {
170
+ type : 'hbox',
171
+ widths : elementDefinition.widths,
172
+ padding : 0,
173
+ children :
174
+ [
175
+ {
176
+ type : 'html',
177
+ html : '<label class="cke_dialog_ui_labeled_label' + requiredClass + '"' +
178
+ ' id="' + _.labelId + '"' +
179
+ ' for="' + _.inputId + '"' +
180
+ ' style="' + elementDefinition.labelStyle + '">' +
181
+ CKEDITOR.tools.htmlEncode( elementDefinition.label ) +
182
+ '</span>'
183
+ },
184
+ {
185
+ type : 'html',
186
+ html : '<span class="cke_dialog_ui_labeled_content">' +
187
+ contentHtml.call( this, dialog, elementDefinition ) +
188
+ '</span>'
189
+ }
190
+ ]
191
+ };
192
+ CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html );
193
+ }
194
+ return html.join( '' );
195
+ };
196
+ CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, { role : 'presentation' }, innerHTML );
197
+ },
198
+
199
+ /**
200
+ * A text input with a label. This UI element class represents both the
201
+ * single-line text inputs and password inputs in dialog boxes.
202
+ * @constructor
203
+ * @example
204
+ * @extends CKEDITOR.ui.dialog.labeledElement
205
+ * @param {CKEDITOR.dialog} dialog
206
+ * Parent dialog object.
207
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
208
+ * The element definition. Accepted fields:
209
+ * <ul>
210
+ * <li><strong>default</strong> (Optional) The default value.</li>
211
+ * <li><strong>validate</strong> (Optional) The validation function. </li>
212
+ * <li><strong>maxLength</strong> (Optional) The maximum length of text box
213
+ * contents.</li>
214
+ * <li><strong>size</strong> (Optional) The size of the text box. This is
215
+ * usually overridden by the size defined by the skin, however.</li>
216
+ * </ul>
217
+ * @param {Array} htmlList
218
+ * List of HTML code to output to.
219
+ */
220
+ textInput : function( dialog, elementDefinition, htmlList )
221
+ {
222
+ if ( arguments.length < 3 )
223
+ return;
224
+
225
+ initPrivateObject.call( this, elementDefinition );
226
+ var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput',
227
+ attributes = { 'class' : 'cke_dialog_ui_input_' + elementDefinition.type, id : domId, type : 'text' },
228
+ i;
229
+
230
+ // Set the validator, if any.
231
+ if ( elementDefinition.validate )
232
+ this.validate = elementDefinition.validate;
233
+
234
+ // Set the max length and size.
235
+ if ( elementDefinition.maxLength )
236
+ attributes.maxlength = elementDefinition.maxLength;
237
+ if ( elementDefinition.size )
238
+ attributes.size = elementDefinition.size;
239
+
240
+ if ( elementDefinition.controlStyle )
241
+ attributes.style = elementDefinition.controlStyle;
242
+
243
+ // If user presses Enter in a text box, it implies clicking OK for the dialog.
244
+ var me = this, keyPressedOnMe = false;
245
+ dialog.on( 'load', function()
246
+ {
247
+ me.getInputElement().on( 'keydown', function( evt )
248
+ {
249
+ if ( evt.data.getKeystroke() == 13 )
250
+ keyPressedOnMe = true;
251
+ } );
252
+
253
+ // Lower the priority this 'keyup' since 'ok' will close the dialog.(#3749)
254
+ me.getInputElement().on( 'keyup', function( evt )
255
+ {
256
+ if ( evt.data.getKeystroke() == 13 && keyPressedOnMe )
257
+ {
258
+ dialog.getButton( 'ok' ) && setTimeout( function ()
259
+ {
260
+ dialog.getButton( 'ok' ).click();
261
+ }, 0 );
262
+ keyPressedOnMe = false;
263
+ }
264
+ }, null, null, 1000 );
265
+ } );
266
+
267
+ /** @ignore */
268
+ var innerHTML = function()
269
+ {
270
+ // IE BUG: Text input fields in IE at 100% would exceed a <td> or inline
271
+ // container's width, so need to wrap it inside a <div>.
272
+ var html = [ '<div class="cke_dialog_ui_input_', elementDefinition.type, '" role="presentation"' ];
273
+
274
+ if ( elementDefinition.width )
275
+ html.push( 'style="width:'+ elementDefinition.width +'" ' );
276
+
277
+ html.push( '><input ' );
278
+
279
+ attributes[ 'aria-labelledby' ] = this._.labelId;
280
+ this._.required && ( attributes[ 'aria-required' ] = this._.required );
281
+ for ( var i in attributes )
282
+ html.push( i + '="' + attributes[i] + '" ' );
283
+ html.push( ' /></div>' );
284
+ return html.join( '' );
285
+ };
286
+ CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
287
+ },
288
+
289
+ /**
290
+ * A text area with a label on the top or left.
291
+ * @constructor
292
+ * @extends CKEDITOR.ui.dialog.labeledElement
293
+ * @example
294
+ * @param {CKEDITOR.dialog} dialog
295
+ * Parent dialog object.
296
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
297
+ * The element definition. Accepted fields:
298
+ * <ul>
299
+ * <li><strong>rows</strong> (Optional) The number of rows displayed.
300
+ * Defaults to 5 if not defined.</li>
301
+ * <li><strong>cols</strong> (Optional) The number of cols displayed.
302
+ * Defaults to 20 if not defined. Usually overridden by skins.</li>
303
+ * <li><strong>default</strong> (Optional) The default value.</li>
304
+ * <li><strong>validate</strong> (Optional) The validation function. </li>
305
+ * </ul>
306
+ * @param {Array} htmlList
307
+ * List of HTML code to output to.
308
+ */
309
+ textarea : function( dialog, elementDefinition, htmlList )
310
+ {
311
+ if ( arguments.length < 3 )
312
+ return;
313
+
314
+ initPrivateObject.call( this, elementDefinition );
315
+ var me = this,
316
+ domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea',
317
+ attributes = {};
318
+
319
+ if ( elementDefinition.validate )
320
+ this.validate = elementDefinition.validate;
321
+
322
+ // Generates the essential attributes for the textarea tag.
323
+ attributes.rows = elementDefinition.rows || 5;
324
+ attributes.cols = elementDefinition.cols || 20;
325
+
326
+ /** @ignore */
327
+ var innerHTML = function()
328
+ {
329
+ attributes[ 'aria-labelledby' ] = this._.labelId;
330
+ this._.required && ( attributes[ 'aria-required' ] = this._.required );
331
+ var html = [ '<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="', domId, '" ' ];
332
+ for ( var i in attributes )
333
+ html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ' );
334
+ html.push( '>', CKEDITOR.tools.htmlEncode( me._['default'] ), '</textarea></div>' );
335
+ return html.join( '' );
336
+ };
337
+ CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
338
+ },
339
+
340
+ /**
341
+ * A single checkbox with a label on the right.
342
+ * @constructor
343
+ * @extends CKEDITOR.ui.dialog.uiElement
344
+ * @example
345
+ * @param {CKEDITOR.dialog} dialog
346
+ * Parent dialog object.
347
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
348
+ * The element definition. Accepted fields:
349
+ * <ul>
350
+ * <li><strong>checked</strong> (Optional) Whether the checkbox is checked
351
+ * on instantiation. Defaults to false.</li>
352
+ * <li><strong>validate</strong> (Optional) The validation function.</li>
353
+ * <li><strong>label</strong> (Optional) The checkbox label.</li>
354
+ * </ul>
355
+ * @param {Array} htmlList
356
+ * List of HTML code to output to.
357
+ */
358
+ checkbox : function( dialog, elementDefinition, htmlList )
359
+ {
360
+ if ( arguments.length < 3 )
361
+ return;
362
+
363
+ var _ = initPrivateObject.call( this, elementDefinition, { 'default' : !!elementDefinition[ 'default' ] } );
364
+
365
+ if ( elementDefinition.validate )
366
+ this.validate = elementDefinition.validate;
367
+
368
+ /** @ignore */
369
+ var innerHTML = function()
370
+ {
371
+ var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
372
+ {
373
+ id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox'
374
+ }, true ),
375
+ html = [];
376
+
377
+ var labelId = CKEDITOR.tools.getNextId() + '_label';
378
+ var attributes = { 'class' : 'cke_dialog_ui_checkbox_input', type : 'checkbox', 'aria-labelledby' : labelId };
379
+ cleanInnerDefinition( myDefinition );
380
+ if ( elementDefinition[ 'default' ] )
381
+ attributes.checked = 'checked';
382
+
383
+ if ( typeof myDefinition.controlStyle != 'undefined' )
384
+ myDefinition.style = myDefinition.controlStyle;
385
+
386
+ _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes );
387
+ html.push( ' <label id="', labelId, '" for="', attributes.id, '">',
388
+ CKEDITOR.tools.htmlEncode( elementDefinition.label ),
389
+ '</label>' );
390
+ return html.join( '' );
391
+ };
392
+
393
+ CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML );
394
+ },
395
+
396
+ /**
397
+ * A group of radio buttons.
398
+ * @constructor
399
+ * @example
400
+ * @extends CKEDITOR.ui.dialog.labeledElement
401
+ * @param {CKEDITOR.dialog} dialog
402
+ * Parent dialog object.
403
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
404
+ * The element definition. Accepted fields:
405
+ * <ul>
406
+ * <li><strong>default</strong> (Required) The default value.</li>
407
+ * <li><strong>validate</strong> (Optional) The validation function.</li>
408
+ * <li><strong>items</strong> (Required) An array of options. Each option
409
+ * is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value'
410
+ * is missing, then the value would be assumed to be the same as the
411
+ * description.</li>
412
+ * </ul>
413
+ * @param {Array} htmlList
414
+ * List of HTML code to output to.
415
+ */
416
+ radio : function( dialog, elementDefinition, htmlList )
417
+ {
418
+ if ( arguments.length < 3)
419
+ return;
420
+
421
+ initPrivateObject.call( this, elementDefinition );
422
+ if ( !this._['default'] )
423
+ this._['default'] = this._.initValue = elementDefinition.items[0][1];
424
+ if ( elementDefinition.validate )
425
+ this.validate = elementDefinition.valdiate;
426
+ var children = [], me = this;
427
+
428
+ /** @ignore */
429
+ var innerHTML = function()
430
+ {
431
+ var inputHtmlList = [], html = [],
432
+ commonAttributes = { 'class' : 'cke_dialog_ui_radio_item', 'aria-labelledby' : this._.labelId },
433
+ commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextId() + '_radio';
434
+ for ( var i = 0 ; i < elementDefinition.items.length ; i++ )
435
+ {
436
+ var item = elementDefinition.items[i],
437
+ title = item[2] !== undefined ? item[2] : item[0],
438
+ value = item[1] !== undefined ? item[1] : item[0],
439
+ inputId = CKEDITOR.tools.getNextId() + '_radio_input',
440
+ labelId = inputId + '_label',
441
+ inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
442
+ {
443
+ id : inputId,
444
+ title : null,
445
+ type : null
446
+ }, true ),
447
+ labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition,
448
+ {
449
+ title : title
450
+ }, true ),
451
+ inputAttributes =
452
+ {
453
+ type : 'radio',
454
+ 'class' : 'cke_dialog_ui_radio_input',
455
+ name : commonName,
456
+ value : value,
457
+ 'aria-labelledby' : labelId
458
+ },
459
+ inputHtml = [];
460
+ if ( me._['default'] == value )
461
+ inputAttributes.checked = 'checked';
462
+ cleanInnerDefinition( inputDefinition );
463
+ cleanInnerDefinition( labelDefinition );
464
+
465
+ if ( typeof inputDefinition.controlStyle != 'undefined' )
466
+ inputDefinition.style = inputDefinition.controlStyle;
467
+
468
+ children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) );
469
+ inputHtml.push( ' ' );
470
+ new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { id : labelId, 'for' : inputAttributes.id },
471
+ item[0] );
472
+ inputHtmlList.push( inputHtml.join( '' ) );
473
+ }
474
+ new CKEDITOR.ui.dialog.hbox( dialog, [], inputHtmlList, html );
475
+ return html.join( '' );
476
+ };
477
+
478
+ CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
479
+ this._.children = children;
480
+ },
481
+
482
+ /**
483
+ * A button with a label inside.
484
+ * @constructor
485
+ * @example
486
+ * @extends CKEDITOR.ui.dialog.uiElement
487
+ * @param {CKEDITOR.dialog} dialog
488
+ * Parent dialog object.
489
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
490
+ * The element definition. Accepted fields:
491
+ * <ul>
492
+ * <li><strong>label</strong> (Required) The button label.</li>
493
+ * <li><strong>disabled</strong> (Optional) Set to true if you want the
494
+ * button to appear in disabled state.</li>
495
+ * </ul>
496
+ * @param {Array} htmlList
497
+ * List of HTML code to output to.
498
+ */
499
+ button : function( dialog, elementDefinition, htmlList )
500
+ {
501
+ if ( !arguments.length )
502
+ return;
503
+
504
+ if ( typeof elementDefinition == 'function' )
505
+ elementDefinition = elementDefinition( dialog.getParentEditor() );
506
+
507
+ initPrivateObject.call( this, elementDefinition, { disabled : elementDefinition.disabled || false } );
508
+
509
+ // Add OnClick event to this input.
510
+ CKEDITOR.event.implementOn( this );
511
+
512
+ var me = this;
513
+
514
+ // Register an event handler for processing button clicks.
515
+ dialog.on( 'load', function( eventInfo )
516
+ {
517
+ var element = this.getElement();
518
+
519
+ (function()
520
+ {
521
+ element.on( 'click', function( evt )
522
+ {
523
+ me.fire( 'click', { dialog : me.getDialog() } );
524
+ evt.data.preventDefault();
525
+ } );
526
+
527
+ element.on( 'keydown', function( evt )
528
+ {
529
+ if ( evt.data.getKeystroke() in { 32:1 } )
530
+ {
531
+ me.click();
532
+ evt.data.preventDefault();
533
+ }
534
+ } );
535
+ })();
536
+
537
+ element.unselectable();
538
+ }, this );
539
+
540
+ var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition );
541
+ delete outerDefinition.style;
542
+
543
+ var labelId = CKEDITOR.tools.getNextId() + '_label';
544
+ CKEDITOR.ui.dialog.uiElement.call(
545
+ this,
546
+ dialog,
547
+ outerDefinition,
548
+ htmlList,
549
+ 'a',
550
+ null,
551
+ {
552
+ style : elementDefinition.style,
553
+ href : 'javascript:void(0)',
554
+ title : elementDefinition.label,
555
+ hidefocus : 'true',
556
+ 'class' : elementDefinition['class'],
557
+ role : 'button',
558
+ 'aria-labelledby' : labelId
559
+ },
560
+ '<span id="' + labelId + '" class="cke_dialog_ui_button">' +
561
+ CKEDITOR.tools.htmlEncode( elementDefinition.label ) +
562
+ '</span>' );
563
+ },
564
+
565
+ /**
566
+ * A select box.
567
+ * @extends CKEDITOR.ui.dialog.uiElement
568
+ * @example
569
+ * @constructor
570
+ * @param {CKEDITOR.dialog} dialog
571
+ * Parent dialog object.
572
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
573
+ * The element definition. Accepted fields:
574
+ * <ul>
575
+ * <li><strong>default</strong> (Required) The default value.</li>
576
+ * <li><strong>validate</strong> (Optional) The validation function.</li>
577
+ * <li><strong>items</strong> (Required) An array of options. Each option
578
+ * is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value'
579
+ * is missing, then the value would be assumed to be the same as the
580
+ * description.</li>
581
+ * <li><strong>multiple</strong> (Optional) Set this to true if you'd like
582
+ * to have a multiple-choice select box.</li>
583
+ * <li><strong>size</strong> (Optional) The number of items to display in
584
+ * the select box.</li>
585
+ * </ul>
586
+ * @param {Array} htmlList
587
+ * List of HTML code to output to.
588
+ */
589
+ select : function( dialog, elementDefinition, htmlList )
590
+ {
591
+ if ( arguments.length < 3 )
592
+ return;
593
+
594
+ var _ = initPrivateObject.call( this, elementDefinition );
595
+
596
+ if ( elementDefinition.validate )
597
+ this.validate = elementDefinition.validate;
598
+
599
+ _.inputId = CKEDITOR.tools.getNextId() + '_select';
600
+ /** @ignore */
601
+ var innerHTML = function()
602
+ {
603
+ var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
604
+ {
605
+ id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select'
606
+ }, true ),
607
+ html = [],
608
+ innerHTML = [],
609
+ attributes = { 'id' : _.inputId, 'class' : 'cke_dialog_ui_input_select', 'aria-labelledby' : this._.labelId };
610
+
611
+ // Add multiple and size attributes from element definition.
612
+ if ( elementDefinition.size != undefined )
613
+ attributes.size = elementDefinition.size;
614
+ if ( elementDefinition.multiple != undefined )
615
+ attributes.multiple = elementDefinition.multiple;
616
+
617
+ cleanInnerDefinition( myDefinition );
618
+ for ( var i = 0, item ; i < elementDefinition.items.length && ( item = elementDefinition.items[i] ) ; i++ )
619
+ {
620
+ innerHTML.push( '<option value="',
621
+ CKEDITOR.tools.htmlEncode( item[1] !== undefined ? item[1] : item[0] ).replace( /"/g, '&quot;' ), '" /> ',
622
+ CKEDITOR.tools.htmlEncode( item[0] ) );
623
+ }
624
+
625
+ if ( typeof myDefinition.controlStyle != 'undefined' )
626
+ myDefinition.style = myDefinition.controlStyle;
627
+
628
+ _.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) );
629
+ return html.join( '' );
630
+ };
631
+
632
+ CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
633
+ },
634
+
635
+ /**
636
+ * A file upload input.
637
+ * @extends CKEDITOR.ui.dialog.labeledElement
638
+ * @example
639
+ * @constructor
640
+ * @param {CKEDITOR.dialog} dialog
641
+ * Parent dialog object.
642
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
643
+ * The element definition. Accepted fields:
644
+ * <ul>
645
+ * <li><strong>validate</strong> (Optional) The validation function.</li>
646
+ * </ul>
647
+ * @param {Array} htmlList
648
+ * List of HTML code to output to.
649
+ */
650
+ file : function( dialog, elementDefinition, htmlList )
651
+ {
652
+ if ( arguments.length < 3 )
653
+ return;
654
+
655
+ if ( elementDefinition['default'] === undefined )
656
+ elementDefinition['default'] = '';
657
+
658
+ var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition : elementDefinition, buttons : [] } );
659
+
660
+ if ( elementDefinition.validate )
661
+ this.validate = elementDefinition.validate;
662
+
663
+ /** @ignore */
664
+ var innerHTML = function()
665
+ {
666
+ _.frameId = CKEDITOR.tools.getNextId() + '_fileInput';
667
+
668
+ // Support for custom document.domain in IE.
669
+ var isCustomDomain = CKEDITOR.env.isCustomDomain();
670
+
671
+ var html = [
672
+ '<iframe' +
673
+ ' frameborder="0"' +
674
+ ' allowtransparency="0"' +
675
+ ' class="cke_dialog_ui_input_file"' +
676
+ ' id="', _.frameId, '"' +
677
+ ' title="', elementDefinition.label, '"' +
678
+ ' src="javascript:void(' ];
679
+
680
+ html.push(
681
+ isCustomDomain ?
682
+ '(function(){' +
683
+ 'document.open();' +
684
+ 'document.domain=\'' + document.domain + '\';' +
685
+ 'document.close();' +
686
+ '})()'
687
+ :
688
+ '0' );
689
+
690
+ html.push(
691
+ ')">' +
692
+ '</iframe>' );
693
+
694
+ return html.join( '' );
695
+ };
696
+
697
+ // IE BUG: Parent container does not resize to contain the iframe automatically.
698
+ dialog.on( 'load', function()
699
+ {
700
+ var iframe = CKEDITOR.document.getById( _.frameId ),
701
+ contentDiv = iframe.getParent();
702
+ contentDiv.addClass( 'cke_dialog_ui_input_file' );
703
+ } );
704
+
705
+ CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
706
+ },
707
+
708
+ /**
709
+ * A button for submitting the file in a file upload input.
710
+ * @extends CKEDITOR.ui.dialog.button
711
+ * @example
712
+ * @constructor
713
+ * @param {CKEDITOR.dialog} dialog
714
+ * Parent dialog object.
715
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
716
+ * The element definition. Accepted fields:
717
+ * <ul>
718
+ * <li><strong>for</strong> (Required) The file input's page and element Id
719
+ * to associate to, in a 2-item array format: [ 'page_id', 'element_id' ].
720
+ * </li>
721
+ * <li><strong>validate</strong> (Optional) The validation function.</li>
722
+ * </ul>
723
+ * @param {Array} htmlList
724
+ * List of HTML code to output to.
725
+ */
726
+ fileButton : function( dialog, elementDefinition, htmlList )
727
+ {
728
+ if ( arguments.length < 3 )
729
+ return;
730
+
731
+ var _ = initPrivateObject.call( this, elementDefinition ),
732
+ me = this;
733
+
734
+ if ( elementDefinition.validate )
735
+ this.validate = elementDefinition.validate;
736
+
737
+ var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition );
738
+ var onClick = myDefinition.onClick;
739
+ myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button';
740
+ myDefinition.onClick = function( evt )
741
+ {
742
+ var target = elementDefinition[ 'for' ]; // [ pageId, elementId ]
743
+ if ( !onClick || onClick.call( this, evt ) !== false )
744
+ {
745
+ dialog.getContentElement( target[0], target[1] ).submit();
746
+ this.disable();
747
+ }
748
+ };
749
+
750
+ dialog.on( 'load', function()
751
+ {
752
+ dialog.getContentElement( elementDefinition[ 'for' ][0], elementDefinition[ 'for' ][1] )._.buttons.push( me );
753
+ } );
754
+
755
+ CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList );
756
+ },
757
+
758
+ html : (function()
759
+ {
760
+ var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/,
761
+ theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,
762
+ emptyTagRe = /\/$/;
763
+ /**
764
+ * A dialog element made from raw HTML code.
765
+ * @extends CKEDITOR.ui.dialog.uiElement
766
+ * @name CKEDITOR.ui.dialog.html
767
+ * @param {CKEDITOR.dialog} dialog Parent dialog object.
768
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition.
769
+ * Accepted fields:
770
+ * <ul>
771
+ * <li><strong>html</strong> (Required) HTML code of this element.</li>
772
+ * </ul>
773
+ * @param {Array} htmlList List of HTML code to be added to the dialog's content area.
774
+ * @example
775
+ * @constructor
776
+ */
777
+ return function( dialog, elementDefinition, htmlList )
778
+ {
779
+ if ( arguments.length < 3 )
780
+ return;
781
+
782
+ var myHtmlList = [],
783
+ myHtml,
784
+ theirHtml = elementDefinition.html,
785
+ myMatch, theirMatch;
786
+
787
+ // If the HTML input doesn't contain any tags at the beginning, add a <span> tag around it.
788
+ if ( theirHtml.charAt( 0 ) != '<' )
789
+ theirHtml = '<span>' + theirHtml + '</span>';
790
+
791
+ // Look for focus function in definition.
792
+ var focus = elementDefinition.focus;
793
+ if ( focus )
794
+ {
795
+ var oldFocus = this.focus;
796
+ this.focus = function()
797
+ {
798
+ oldFocus.call( this );
799
+ typeof focus == 'function' && focus.call( this );
800
+ this.fire( 'focus' );
801
+ };
802
+ if ( elementDefinition.isFocusable )
803
+ {
804
+ var oldIsFocusable = this.isFocusable;
805
+ this.isFocusable = oldIsFocusable;
806
+ }
807
+ this.keyboardFocusable = true;
808
+ }
809
+
810
+ CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' );
811
+
812
+ // Append the attributes created by the uiElement call to the real HTML.
813
+ myHtml = myHtmlList.join( '' );
814
+ myMatch = myHtml.match( myHtmlRe );
815
+ theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ];
816
+
817
+ if ( emptyTagRe.test( theirMatch[1] ) )
818
+ {
819
+ theirMatch[1] = theirMatch[1].slice( 0, -1 );
820
+ theirMatch[2] = '/' + theirMatch[2];
821
+ }
822
+
823
+ htmlList.push( [ theirMatch[1], ' ', myMatch[1] || '', theirMatch[2] ].join( '' ) );
824
+ };
825
+ })(),
826
+
827
+ /**
828
+ * Form fieldset for grouping dialog UI elements.
829
+ * @constructor
830
+ * @extends CKEDITOR.ui.dialog.uiElement
831
+ * @param {CKEDITOR.dialog} dialog Parent dialog object.
832
+ * @param {Array} childObjList
833
+ * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this
834
+ * container.
835
+ * @param {Array} childHtmlList
836
+ * Array of HTML code that correspond to the HTML output of all the
837
+ * objects in childObjList.
838
+ * @param {Array} htmlList
839
+ * Array of HTML code that this element will output to.
840
+ * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
841
+ * The element definition. Accepted fields:
842
+ * <ul>
843
+ * <li><strong>label</strong> (Optional) The legend of the this fieldset.</li>
844
+ * <li><strong>children</strong> (Required) An array of dialog field definitions which will be grouped inside this fieldset. </li>
845
+ * </ul>
846
+ */
847
+ fieldset : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )
848
+ {
849
+ var legendLabel = elementDefinition.label;
850
+ /** @ignore */
851
+ var innerHTML = function()
852
+ {
853
+ var html = [];
854
+ legendLabel && html.push( '<legend>' + legendLabel + '</legend>' );
855
+ for ( var i = 0; i < childHtmlList.length; i++ )
856
+ html.push( childHtmlList[ i ] );
857
+ return html.join( '' );
858
+ };
859
+
860
+ this._ = { children : childObjList };
861
+ CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML );
862
+ }
863
+
864
+ }, true );
865
+
866
+ CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement;
867
+
868
+ CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
869
+ /** @lends CKEDITOR.ui.dialog.labeledElement.prototype */
870
+ {
871
+ /**
872
+ * Sets the label text of the element.
873
+ * @param {String} label The new label text.
874
+ * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element.
875
+ * @example
876
+ */
877
+ setLabel : function( label )
878
+ {
879
+ var node = CKEDITOR.document.getById( this._.labelId );
880
+ if ( node.getChildCount() < 1 )
881
+ ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node );
882
+ else
883
+ node.getChild( 0 ).$.nodeValue = label;
884
+ return this;
885
+ },
886
+
887
+ /**
888
+ * Retrieves the current label text of the elment.
889
+ * @returns {String} The current label text.
890
+ * @example
891
+ */
892
+ getLabel : function()
893
+ {
894
+ var node = CKEDITOR.document.getById( this._.labelId );
895
+ if ( !node || node.getChildCount() < 1 )
896
+ return '';
897
+ else
898
+ return node.getChild( 0 ).getText();
899
+ },
900
+
901
+ /**
902
+ * Defines the onChange event for UI element definitions.
903
+ * @field
904
+ * @type Object
905
+ * @example
906
+ */
907
+ eventProcessors : commonEventProcessors
908
+ }, true );
909
+
910
+ CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
911
+ /** @lends CKEDITOR.ui.dialog.button.prototype */
912
+ {
913
+ /**
914
+ * Simulates a click to the button.
915
+ * @example
916
+ * @returns {Object} Return value of the 'click' event.
917
+ */
918
+ click : function()
919
+ {
920
+ if ( !this._.disabled )
921
+ return this.fire( 'click', { dialog : this._.dialog } );
922
+ this.getElement().$.blur();
923
+ return false;
924
+ },
925
+
926
+ /**
927
+ * Enables the button.
928
+ * @example
929
+ */
930
+ enable : function()
931
+ {
932
+ this._.disabled = false;
933
+ var element = this.getElement();
934
+ element && element.removeClass( 'cke_disabled' );
935
+ },
936
+
937
+ /**
938
+ * Disables the button.
939
+ * @example
940
+ */
941
+ disable : function()
942
+ {
943
+ this._.disabled = true;
944
+ this.getElement().addClass( 'cke_disabled' );
945
+ },
946
+
947
+ isVisible : function()
948
+ {
949
+ return this.getElement().getFirst().isVisible();
950
+ },
951
+
952
+ isEnabled : function()
953
+ {
954
+ return !this._.disabled;
955
+ },
956
+
957
+ /**
958
+ * Defines the onChange event and onClick for button element definitions.
959
+ * @field
960
+ * @type Object
961
+ * @example
962
+ */
963
+ eventProcessors : CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,
964
+ {
965
+ /** @ignore */
966
+ onClick : function( dialog, func )
967
+ {
968
+ this.on( 'click', func );
969
+ }
970
+ }, true ),
971
+
972
+ /**
973
+ * Handler for the element's access key up event. Simulates a click to
974
+ * the button.
975
+ * @example
976
+ */
977
+ accessKeyUp : function()
978
+ {
979
+ this.click();
980
+ },
981
+
982
+ /**
983
+ * Handler for the element's access key down event. Simulates a mouse
984
+ * down to the button.
985
+ * @example
986
+ */
987
+ accessKeyDown : function()
988
+ {
989
+ this.focus();
990
+ },
991
+
992
+ keyboardFocusable : true
993
+ }, true );
994
+
995
+ CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,
996
+ /** @lends CKEDITOR.ui.dialog.textInput.prototype */
997
+ {
998
+ /**
999
+ * Gets the text input DOM element under this UI object.
1000
+ * @example
1001
+ * @returns {CKEDITOR.dom.element} The DOM element of the text input.
1002
+ */
1003
+ getInputElement : function()
1004
+ {
1005
+ return CKEDITOR.document.getById( this._.inputId );
1006
+ },
1007
+
1008
+ /**
1009
+ * Puts focus into the text input.
1010
+ * @example
1011
+ */
1012
+ focus : function()
1013
+ {
1014
+ var me = this.selectParentTab();
1015
+
1016
+ // GECKO BUG: setTimeout() is needed to workaround invisible selections.
1017
+ setTimeout( function()
1018
+ {
1019
+ var element = me.getInputElement();
1020
+ element && element.$.focus();
1021
+ }, 0 );
1022
+ },
1023
+
1024
+ /**
1025
+ * Selects all the text in the text input.
1026
+ * @example
1027
+ */
1028
+ select : function()
1029
+ {
1030
+ var me = this.selectParentTab();
1031
+
1032
+ // GECKO BUG: setTimeout() is needed to workaround invisible selections.
1033
+ setTimeout( function()
1034
+ {
1035
+ var e = me.getInputElement();
1036
+ if ( e )
1037
+ {
1038
+ e.$.focus();
1039
+ e.$.select();
1040
+ }
1041
+ }, 0 );
1042
+ },
1043
+
1044
+ /**
1045
+ * Handler for the text input's access key up event. Makes a select()
1046
+ * call to the text input.
1047
+ * @example
1048
+ */
1049
+ accessKeyUp : function()
1050
+ {
1051
+ this.select();
1052
+ },
1053
+
1054
+ /**
1055
+ * Sets the value of this text input object.
1056
+ * @param {Object} value The new value.
1057
+ * @returns {CKEDITOR.ui.dialog.textInput} The current UI element.
1058
+ * @example
1059
+ * uiElement.setValue( 'Blamo' );
1060
+ */
1061
+ setValue : function( value )
1062
+ {
1063
+ !value && ( value = '' );
1064
+ return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments );
1065
+ },
1066
+
1067
+ keyboardFocusable : true
1068
+ }, commonPrototype, true );
1069
+
1070
+ CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput();
1071
+
1072
+ CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,
1073
+ /** @lends CKEDITOR.ui.dialog.select.prototype */
1074
+ {
1075
+ /**
1076
+ * Gets the DOM element of the select box.
1077
+ * @returns {CKEDITOR.dom.element} The &lt;select&gt; element of this UI
1078
+ * element.
1079
+ * @example
1080
+ */
1081
+ getInputElement : function()
1082
+ {
1083
+ return this._.select.getElement();
1084
+ },
1085
+
1086
+ /**
1087
+ * Adds an option to the select box.
1088
+ * @param {String} label Option label.
1089
+ * @param {String} value (Optional) Option value, if not defined it'll be
1090
+ * assumed to be the same as the label.
1091
+ * @param {Number} index (Optional) Position of the option to be inserted
1092
+ * to. If not defined the new option will be inserted to the end of list.
1093
+ * @example
1094
+ * @returns {CKEDITOR.ui.dialog.select} The current select UI element.
1095
+ */
1096
+ add : function( label, value, index )
1097
+ {
1098
+ var option = new CKEDITOR.dom.element( 'option', this.getDialog().getParentEditor().document ),
1099
+ selectElement = this.getInputElement().$;
1100
+ option.$.text = label;
1101
+ option.$.value = ( value === undefined || value === null ) ? label : value;
1102
+ if ( index === undefined || index === null )
1103
+ {
1104
+ if ( CKEDITOR.env.ie )
1105
+ selectElement.add( option.$ );
1106
+ else
1107
+ selectElement.add( option.$, null );
1108
+ }
1109
+ else
1110
+ selectElement.add( option.$, index );
1111
+ return this;
1112
+ },
1113
+
1114
+ /**
1115
+ * Removes an option from the selection list.
1116
+ * @param {Number} index Index of the option to be removed.
1117
+ * @example
1118
+ * @returns {CKEDITOR.ui.dialog.select} The current select UI element.
1119
+ */
1120
+ remove : function( index )
1121
+ {
1122
+ var selectElement = this.getInputElement().$;
1123
+ selectElement.remove( index );
1124
+ return this;
1125
+ },
1126
+
1127
+ /**
1128
+ * Clears all options out of the selection list.
1129
+ * @returns {CKEDITOR.ui.dialog.select} The current select UI element.
1130
+ */
1131
+ clear : function()
1132
+ {
1133
+ var selectElement = this.getInputElement().$;
1134
+ while ( selectElement.length > 0 )
1135
+ selectElement.remove( 0 );
1136
+ return this;
1137
+ },
1138
+
1139
+ keyboardFocusable : true
1140
+ }, commonPrototype, true );
1141
+
1142
+ CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
1143
+ /** @lends CKEDITOR.ui.dialog.checkbox.prototype */
1144
+ {
1145
+ /**
1146
+ * Gets the checkbox DOM element.
1147
+ * @example
1148
+ * @returns {CKEDITOR.dom.element} The DOM element of the checkbox.
1149
+ */
1150
+ getInputElement : function()
1151
+ {
1152
+ return this._.checkbox.getElement();
1153
+ },
1154
+
1155
+ /**
1156
+ * Sets the state of the checkbox.
1157
+ * @example
1158
+ * @param {Boolean} true to tick the checkbox, false to untick it.
1159
+ * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
1160
+ */
1161
+ setValue : function( checked, noChangeEvent )
1162
+ {
1163
+ this.getInputElement().$.checked = checked;
1164
+ !noChangeEvent && this.fire( 'change', { value : checked } );
1165
+ },
1166
+
1167
+ /**
1168
+ * Gets the state of the checkbox.
1169
+ * @example
1170
+ * @returns {Boolean} true means the checkbox is ticked, false means it's not ticked.
1171
+ */
1172
+ getValue : function()
1173
+ {
1174
+ return this.getInputElement().$.checked;
1175
+ },
1176
+
1177
+ /**
1178
+ * Handler for the access key up event. Toggles the checkbox.
1179
+ * @example
1180
+ */
1181
+ accessKeyUp : function()
1182
+ {
1183
+ this.setValue( !this.getValue() );
1184
+ },
1185
+
1186
+ /**
1187
+ * Defines the onChange event for UI element definitions.
1188
+ * @field
1189
+ * @type Object
1190
+ * @example
1191
+ */
1192
+ eventProcessors :
1193
+ {
1194
+ onChange : function( dialog, func )
1195
+ {
1196
+ if ( !CKEDITOR.env.ie )
1197
+ return commonEventProcessors.onChange.apply( this, arguments );
1198
+ else
1199
+ {
1200
+ dialog.on( 'load', function()
1201
+ {
1202
+ var element = this._.checkbox.getElement();
1203
+ element.on( 'propertychange', function( evt )
1204
+ {
1205
+ evt = evt.data.$;
1206
+ if ( evt.propertyName == 'checked' )
1207
+ this.fire( 'change', { value : element.$.checked } );
1208
+ }, this );
1209
+ }, this );
1210
+ this.on( 'change', func );
1211
+ }
1212
+ return null;
1213
+ }
1214
+ },
1215
+
1216
+ keyboardFocusable : true
1217
+ }, commonPrototype, true );
1218
+
1219
+ CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
1220
+ /** @lends CKEDITOR.ui.dialog.radio.prototype */
1221
+ {
1222
+ /**
1223
+ * Checks one of the radio buttons in this button group.
1224
+ * @example
1225
+ * @param {String} value The value of the button to be chcked.
1226
+ * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
1227
+ */
1228
+ setValue : function( value, noChangeEvent )
1229
+ {
1230
+ var children = this._.children,
1231
+ item;
1232
+ for ( var i = 0 ; ( i < children.length ) && ( item = children[i] ) ; i++ )
1233
+ item.getElement().$.checked = ( item.getValue() == value );
1234
+ !noChangeEvent && this.fire( 'change', { value : value } );
1235
+ },
1236
+
1237
+ /**
1238
+ * Gets the value of the currently checked radio button.
1239
+ * @example
1240
+ * @returns {String} The currently checked button's value.
1241
+ */
1242
+ getValue : function()
1243
+ {
1244
+ var children = this._.children;
1245
+ for ( var i = 0 ; i < children.length ; i++ )
1246
+ {
1247
+ if ( children[i].getElement().$.checked )
1248
+ return children[i].getValue();
1249
+ }
1250
+ return null;
1251
+ },
1252
+
1253
+ /**
1254
+ * Handler for the access key up event. Focuses the currently
1255
+ * selected radio button, or the first radio button if none is
1256
+ * selected.
1257
+ * @example
1258
+ */
1259
+ accessKeyUp : function()
1260
+ {
1261
+ var children = this._.children, i;
1262
+ for ( i = 0 ; i < children.length ; i++ )
1263
+ {
1264
+ if ( children[i].getElement().$.checked )
1265
+ {
1266
+ children[i].getElement().focus();
1267
+ return;
1268
+ }
1269
+ }
1270
+ children[0].getElement().focus();
1271
+ },
1272
+
1273
+ /**
1274
+ * Defines the onChange event for UI element definitions.
1275
+ * @field
1276
+ * @type Object
1277
+ * @example
1278
+ */
1279
+ eventProcessors :
1280
+ {
1281
+ onChange : function( dialog, func )
1282
+ {
1283
+ if ( !CKEDITOR.env.ie )
1284
+ return commonEventProcessors.onChange.apply( this, arguments );
1285
+ else
1286
+ {
1287
+ dialog.on( 'load', function()
1288
+ {
1289
+ var children = this._.children, me = this;
1290
+ for ( var i = 0 ; i < children.length ; i++ )
1291
+ {
1292
+ var element = children[i].getElement();
1293
+ element.on( 'propertychange', function( evt )
1294
+ {
1295
+ evt = evt.data.$;
1296
+ if ( evt.propertyName == 'checked' && this.$.checked )
1297
+ me.fire( 'change', { value : this.getAttribute( 'value' ) } );
1298
+ } );
1299
+ }
1300
+ }, this );
1301
+ this.on( 'change', func );
1302
+ }
1303
+ return null;
1304
+ }
1305
+ },
1306
+
1307
+ keyboardFocusable : true
1308
+ }, commonPrototype, true );
1309
+
1310
+ CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,
1311
+ commonPrototype,
1312
+ /** @lends CKEDITOR.ui.dialog.file.prototype */
1313
+ {
1314
+ /**
1315
+ * Gets the &lt;input&gt; element of this file input.
1316
+ * @returns {CKEDITOR.dom.element} The file input element.
1317
+ * @example
1318
+ */
1319
+ getInputElement : function()
1320
+ {
1321
+ var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument();
1322
+ return frameDocument.$.forms.length > 0 ?
1323
+ new CKEDITOR.dom.element( frameDocument.$.forms[0].elements[0] ) :
1324
+ this.getElement();
1325
+ },
1326
+
1327
+ /**
1328
+ * Uploads the file in the file input.
1329
+ * @returns {CKEDITOR.ui.dialog.file} This object.
1330
+ * @example
1331
+ */
1332
+ submit : function()
1333
+ {
1334
+ this.getInputElement().getParent().$.submit();
1335
+ return this;
1336
+ },
1337
+
1338
+ /**
1339
+ * Get the action assigned to the form.
1340
+ * @returns {String} The value of the action.
1341
+ * @example
1342
+ */
1343
+ getAction : function()
1344
+ {
1345
+ return this.getInputElement().getParent().$.action;
1346
+ },
1347
+
1348
+ /**
1349
+ * The events must be applied on the inner input element, and
1350
+ * that must be done when the iframe & form has been loaded
1351
+ */
1352
+ registerEvents : function( definition )
1353
+ {
1354
+ var regex = /^on([A-Z]\w+)/,
1355
+ match;
1356
+
1357
+ var registerDomEvent = function( uiElement, dialog, eventName, func )
1358
+ {
1359
+ uiElement.on( 'formLoaded', function()
1360
+ {
1361
+ uiElement.getInputElement().on( eventName, func, uiElement );
1362
+ });
1363
+ };
1364
+
1365
+ for ( var i in definition )
1366
+ {
1367
+ if ( !( match = i.match( regex ) ) )
1368
+ continue;
1369
+
1370
+ if ( this.eventProcessors[i] )
1371
+ this.eventProcessors[i].call( this, this._.dialog, definition[i] );
1372
+ else
1373
+ registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] );
1374
+ }
1375
+
1376
+ return this;
1377
+ },
1378
+
1379
+ /**
1380
+ * Redraws the file input and resets the file path in the file input.
1381
+ * The redraw logic is necessary because non-IE browsers tend to clear
1382
+ * the &lt;iframe&gt; containing the file input after closing the dialog.
1383
+ * @example
1384
+ */
1385
+ reset : function()
1386
+ {
1387
+ var _ = this._,
1388
+ frameElement = CKEDITOR.document.getById( _.frameId ),
1389
+ frameDocument = frameElement.getFrameDocument(),
1390
+ elementDefinition = _.definition,
1391
+ buttons = _.buttons,
1392
+ callNumber = this.formLoadedNumber,
1393
+ unloadNumber = this.formUnloadNumber,
1394
+ langDir = _.dialog._.editor.lang.dir,
1395
+ langCode = _.dialog._.editor.langCode;
1396
+
1397
+ // The callback function for the iframe, but we must call tools.addFunction only once
1398
+ // so we store the function number in this.formLoadedNumber
1399
+ if ( !callNumber )
1400
+ {
1401
+ callNumber = this.formLoadedNumber = CKEDITOR.tools.addFunction(
1402
+ function()
1403
+ {
1404
+ // Now we can apply the events to the input type=file
1405
+ this.fire( 'formLoaded' ) ;
1406
+ }, this ) ;
1407
+
1408
+ // Remove listeners attached to the content of the iframe (the file input)
1409
+ unloadNumber = this.formUnloadNumber = CKEDITOR.tools.addFunction(
1410
+ function()
1411
+ {
1412
+ this.getInputElement().clearCustomData();
1413
+ }, this ) ;
1414
+
1415
+ this.getDialog()._.editor.on( 'destroy', function()
1416
+ {
1417
+ CKEDITOR.tools.removeFunction( callNumber );
1418
+ CKEDITOR.tools.removeFunction( unloadNumber );
1419
+ } );
1420
+ }
1421
+
1422
+ function generateFormField()
1423
+ {
1424
+ frameDocument.$.open();
1425
+
1426
+ // Support for custom document.domain in IE.
1427
+ if ( CKEDITOR.env.isCustomDomain() )
1428
+ frameDocument.$.domain = document.domain;
1429
+
1430
+ var size = '';
1431
+ if ( elementDefinition.size )
1432
+ size = elementDefinition.size - ( CKEDITOR.env.ie ? 7 : 0 ); // "Browse" button is bigger in IE.
1433
+
1434
+ frameDocument.$.write( [ '<html dir="' + langDir + '" lang="' + langCode + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">',
1435
+ '<form enctype="multipart/form-data" method="POST" dir="' + langDir + '" lang="' + langCode + '" action="',
1436
+ CKEDITOR.tools.htmlEncode( elementDefinition.action ),
1437
+ '">',
1438
+ '<input type="file" name="',
1439
+ CKEDITOR.tools.htmlEncode( elementDefinition.id || 'cke_upload' ),
1440
+ '" size="',
1441
+ CKEDITOR.tools.htmlEncode( size > 0 ? size : "" ),
1442
+ '" />',
1443
+ '</form>',
1444
+ '</body></html>',
1445
+ '<script>window.parent.CKEDITOR.tools.callFunction(' + callNumber + ');',
1446
+ 'window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(' + unloadNumber + ')}</script>' ].join( '' ) );
1447
+
1448
+ frameDocument.$.close();
1449
+
1450
+ for ( var i = 0 ; i < buttons.length ; i++ )
1451
+ buttons[i].enable();
1452
+ }
1453
+
1454
+ // #3465: Wait for the browser to finish rendering the dialog first.
1455
+ if ( CKEDITOR.env.gecko )
1456
+ setTimeout( generateFormField, 500 );
1457
+ else
1458
+ generateFormField();
1459
+ },
1460
+
1461
+ getValue : function()
1462
+ {
1463
+ return this.getInputElement().$.value || '';
1464
+ },
1465
+
1466
+ /***
1467
+ * The default value of input type="file" is an empty string, but during initialization
1468
+ * of this UI element, the iframe still isn't ready so it can't be read from that object
1469
+ * Setting it manually prevents later issues about the current value ("") being different
1470
+ * of the initial value (undefined as it asked for .value of a div)
1471
+ */
1472
+ setInitValue : function()
1473
+ {
1474
+ this._.initValue = '';
1475
+ },
1476
+
1477
+ /**
1478
+ * Defines the onChange event for UI element definitions.
1479
+ * @field
1480
+ * @type Object
1481
+ * @example
1482
+ */
1483
+ eventProcessors :
1484
+ {
1485
+ onChange : function( dialog, func )
1486
+ {
1487
+ // If this method is called several times (I'm not sure about how this can happen but the default
1488
+ // onChange processor includes this protection)
1489
+ // In order to reapply to the new element, the property is deleted at the beggining of the registerEvents method
1490
+ if ( !this._.domOnChangeRegistered )
1491
+ {
1492
+ // By listening for the formLoaded event, this handler will get reapplied when a new
1493
+ // form is created
1494
+ this.on( 'formLoaded', function()
1495
+ {
1496
+ this.getInputElement().on( 'change', function(){ this.fire( 'change', { value : this.getValue() } ); }, this );
1497
+ }, this );
1498
+ this._.domOnChangeRegistered = true;
1499
+ }
1500
+
1501
+ this.on( 'change', func );
1502
+ }
1503
+ },
1504
+
1505
+ keyboardFocusable : true
1506
+ }, true );
1507
+
1508
+ CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button;
1509
+
1510
+ CKEDITOR.ui.dialog.fieldset.prototype = CKEDITOR.tools.clone( CKEDITOR.ui.dialog.hbox.prototype );
1511
+
1512
+ CKEDITOR.dialog.addUIElement( 'text', textBuilder );
1513
+ CKEDITOR.dialog.addUIElement( 'password', textBuilder );
1514
+ CKEDITOR.dialog.addUIElement( 'textarea', commonBuilder );
1515
+ CKEDITOR.dialog.addUIElement( 'checkbox', commonBuilder );
1516
+ CKEDITOR.dialog.addUIElement( 'radio', commonBuilder );
1517
+ CKEDITOR.dialog.addUIElement( 'button', commonBuilder );
1518
+ CKEDITOR.dialog.addUIElement( 'select', commonBuilder );
1519
+ CKEDITOR.dialog.addUIElement( 'file', commonBuilder );
1520
+ CKEDITOR.dialog.addUIElement( 'fileButton', commonBuilder );
1521
+ CKEDITOR.dialog.addUIElement( 'html', commonBuilder );
1522
+ CKEDITOR.dialog.addUIElement( 'fieldset', containerBuilder );
1523
+ })();
1524
+
1525
+ /**
1526
+ * Fired when the value of the uiElement is changed
1527
+ * @name CKEDITOR.ui.dialog.uiElement#change
1528
+ * @event
1529
+ */
1530
+
1531
+ /**
1532
+ * Fired when the inner frame created by the element is ready.
1533
+ * Each time the button is used or the dialog is loaded a new
1534
+ * form might be created.
1535
+ * @name CKEDITOR.ui.dialog.fileButton#formLoaded
1536
+ * @event
1537
+ */