editorial_logic 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (797) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Capfile +4 -0
  4. data/Gemfile +32 -0
  5. data/Rakefile +33 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/admin/managed_contents_controller.rb +90 -0
  8. data/app/controllers/admin/publications_controller.rb +48 -0
  9. data/app/controllers/admin/sections_controller.rb +75 -0
  10. data/app/controllers/application_controller.rb +5 -0
  11. data/app/controllers/managed_contents_controller.rb +13 -0
  12. data/app/controllers/publications_controller.rb +20 -0
  13. data/app/controllers/sections_controller.rb +9 -0
  14. data/app/helpers/layout_helper.rb +23 -0
  15. data/app/models/faq_import.rb +34 -0
  16. data/app/models/managed_content.rb +145 -0
  17. data/app/models/publication.rb +95 -0
  18. data/app/models/section.rb +69 -0
  19. data/app/uploaders/document_uploader.rb +43 -0
  20. data/app/views/admin/managed_contents/_article_fields.html.erb +63 -0
  21. data/app/views/admin/managed_contents/_document_fields.html.erb +17 -0
  22. data/app/views/admin/managed_contents/_faq_fields.html.erb +21 -0
  23. data/app/views/admin/managed_contents/_faq_index.html.erb +39 -0
  24. data/app/views/admin/managed_contents/_form.html.erb +26 -0
  25. data/app/views/admin/managed_contents/_index.html.erb +29 -0
  26. data/app/views/admin/managed_contents/_term_fields.html.erb +36 -0
  27. data/app/views/admin/managed_contents/edit.html.erb +8 -0
  28. data/app/views/admin/managed_contents/import.html.erb +13 -0
  29. data/app/views/admin/managed_contents/new.html.erb +6 -0
  30. data/app/views/admin/managed_contents/show.html.erb +121 -0
  31. data/app/views/admin/publications/_form.html.erb +34 -0
  32. data/app/views/admin/publications/edit.html.erb +5 -0
  33. data/app/views/admin/publications/index.html.erb +33 -0
  34. data/app/views/admin/publications/new.html.erb +5 -0
  35. data/app/views/admin/publications/show.html.erb +34 -0
  36. data/app/views/admin/sections/_form.html.erb +35 -0
  37. data/app/views/admin/sections/_index.html.erb +37 -0
  38. data/app/views/admin/sections/edit.html.erb +5 -0
  39. data/app/views/admin/sections/new.html.erb +5 -0
  40. data/app/views/admin/sections/show.html.erb +26 -0
  41. data/app/views/layouts/application.html.erb +47 -0
  42. data/app/views/managed_contents/show.html.erb +34 -0
  43. data/app/views/publications/_articles.html.erb +7 -0
  44. data/app/views/publications/_documents.html.erb +7 -0
  45. data/app/views/publications/_faqs.html.erb +7 -0
  46. data/app/views/publications/_terms.html.erb +9 -0
  47. data/app/views/publications/feed.rss.builder +19 -0
  48. data/app/views/publications/show.html.erb +13 -0
  49. data/app/views/sections/_contents.html.erb +16 -0
  50. data/app/views/sections/show.html.erb +12 -0
  51. data/app/views/shared/_nav_tabs.html.erb +3 -0
  52. data/autotest/discover.rb +2 -0
  53. data/config.ru +4 -0
  54. data/config/application.rb +44 -0
  55. data/config/boot.rb +13 -0
  56. data/config/cucumber.yml +10 -0
  57. data/config/deploy.rb +40 -0
  58. data/config/environment.rb +9 -0
  59. data/config/environments/development.rb +28 -0
  60. data/config/environments/production.rb +49 -0
  61. data/config/environments/test.rb +35 -0
  62. data/config/initializers/ckeditor.rb +54 -0
  63. data/config/initializers/metric_fu.rb +9 -0
  64. data/config/initializers/secret_token.rb +7 -0
  65. data/config/initializers/session_store.rb +8 -0
  66. data/config/locales/en.yml +5 -0
  67. data/config/mongoid.yml +24 -0
  68. data/config/routes.rb +47 -0
  69. data/editorial_logic.gemspec +857 -0
  70. data/features/access_publications.feature +91 -0
  71. data/features/fixtures/test.pdf +0 -0
  72. data/features/manage_articles_content.feature +129 -0
  73. data/features/manage_documents_content.feature +58 -0
  74. data/features/manage_faq_content.feature +61 -0
  75. data/features/manage_glossary_content.feature +59 -0
  76. data/features/manage_publications.feature +55 -0
  77. data/features/step_definitions/content_steps.rb +20 -0
  78. data/features/step_definitions/general_steps.rb +17 -0
  79. data/features/step_definitions/publication_steps.rb +27 -0
  80. data/features/step_definitions/web_steps.rb +219 -0
  81. data/features/support/env.rb +42 -0
  82. data/features/support/hooks.rb +1 -0
  83. data/features/support/paths.rb +33 -0
  84. data/init.rb +1 -0
  85. data/lib/editorial_logic.rb +55 -0
  86. data/lib/editorial_logic/engine.rb +7 -0
  87. data/lib/editorial_logic/railtie.rb +10 -0
  88. data/lib/tasks/cucumber.rake +60 -0
  89. data/lib/tasks/rcov.rake +44 -0
  90. data/misc/images/src/black_bar.psd +0 -0
  91. data/misc/images/src/branding.psd +0 -0
  92. data/misc/images/src/legend_bg.psd +0 -0
  93. data/misc/images/src/menu_icons.psd +0 -0
  94. data/public/404.html +26 -0
  95. data/public/422.html +26 -0
  96. data/public/500.html +26 -0
  97. data/public/favicon.ico +0 -0
  98. data/public/images/icons/collapsed.gif +0 -0
  99. data/public/images/icons/delete.png +0 -0
  100. data/public/images/icons/drag.png +0 -0
  101. data/public/images/icons/edit.png +0 -0
  102. data/public/images/icons/expanded.gif +0 -0
  103. data/public/images/icons/help_icon.png +0 -0
  104. data/public/images/icons/link_icon.png +0 -0
  105. data/public/images/icons/move.png +0 -0
  106. data/public/images/icons/move_white.png +0 -0
  107. data/public/images/icons/note.png +0 -0
  108. data/public/images/icons/note_white.png +0 -0
  109. data/public/images/icons/notification_icon_sprite.png +0 -0
  110. data/public/images/icons/spinner.gif +0 -0
  111. data/public/images/icons/view.png +0 -0
  112. data/public/images/icons/warning.png +0 -0
  113. data/public/images/icons/warning_2.png +0 -0
  114. data/public/images/icons/warning_box.png +0 -0
  115. data/public/images/icons/warning_icon.png +0 -0
  116. data/public/images/icons/warning_white.png +0 -0
  117. data/public/images/layout/arrow_asc.png +0 -0
  118. data/public/images/layout/arrow_desc.png +0 -0
  119. data/public/images/layout/black_bar.png +0 -0
  120. data/public/images/layout/button_bg.png +0 -0
  121. data/public/images/layout/content_left_bg.png +0 -0
  122. data/public/images/layout/content_right_bg.png +0 -0
  123. data/public/images/layout/footer_bg.png +0 -0
  124. data/public/images/layout/h2_bg.png +0 -0
  125. data/public/images/layout/h2_bg_for_table.png +0 -0
  126. data/public/images/layout/header_bg_grey.png +0 -0
  127. data/public/images/layout/header_bg_purple.png +0 -0
  128. data/public/images/layout/legend_bg.png +0 -0
  129. data/public/images/layout/text_field_bg.jpg +0 -0
  130. data/public/images/layout/text_field_error_bg.png +0 -0
  131. data/public/images/layout/th_bg.png +0 -0
  132. data/public/images/layout/th_bg_selected.png +0 -0
  133. data/public/index.html +9 -0
  134. data/public/javascripts/application.js +2 -0
  135. data/public/javascripts/ckeditor/.htaccess +24 -0
  136. data/public/javascripts/ckeditor/CHANGES.html +993 -0
  137. data/public/javascripts/ckeditor/INSTALL.html +92 -0
  138. data/public/javascripts/ckeditor/LICENSE.html +1334 -0
  139. data/public/javascripts/ckeditor/_samples/ajax.html +87 -0
  140. data/public/javascripts/ckeditor/_samples/api.html +152 -0
  141. data/public/javascripts/ckeditor/_samples/api_dialog.html +188 -0
  142. data/public/javascripts/ckeditor/_samples/api_dialog/my_dialog.js +28 -0
  143. data/public/javascripts/ckeditor/_samples/asp/advanced.asp +105 -0
  144. data/public/javascripts/ckeditor/_samples/asp/events.asp +136 -0
  145. data/public/javascripts/ckeditor/_samples/asp/index.html +103 -0
  146. data/public/javascripts/ckeditor/_samples/asp/replace.asp +72 -0
  147. data/public/javascripts/ckeditor/_samples/asp/replaceall.asp +77 -0
  148. data/public/javascripts/ckeditor/_samples/asp/sample_posteddata.asp +46 -0
  149. data/public/javascripts/ckeditor/_samples/asp/standalone.asp +72 -0
  150. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.fla +0 -0
  151. data/public/javascripts/ckeditor/_samples/assets/output_for_flash.swf +0 -0
  152. data/public/javascripts/ckeditor/_samples/assets/output_xhtml.css +204 -0
  153. data/public/javascripts/ckeditor/_samples/assets/swfobject.js +18 -0
  154. data/public/javascripts/ckeditor/_samples/autogrow.html +75 -0
  155. data/public/javascripts/ckeditor/_samples/divreplace.html +137 -0
  156. data/public/javascripts/ckeditor/_samples/enterkey.html +88 -0
  157. data/public/javascripts/ckeditor/_samples/fullpage.html +62 -0
  158. data/public/javascripts/ckeditor/_samples/index.html +57 -0
  159. data/public/javascripts/ckeditor/_samples/jqueryadapter.html +73 -0
  160. data/public/javascripts/ckeditor/_samples/output_for_flash.html +257 -0
  161. data/public/javascripts/ckeditor/_samples/output_html.html +259 -0
  162. data/public/javascripts/ckeditor/_samples/output_xhtml.html +159 -0
  163. data/public/javascripts/ckeditor/_samples/php/advanced.php +93 -0
  164. data/public/javascripts/ckeditor/_samples/php/events.php +130 -0
  165. data/public/javascripts/ckeditor/_samples/php/replace.php +63 -0
  166. data/public/javascripts/ckeditor/_samples/php/replaceall.php +68 -0
  167. data/public/javascripts/ckeditor/_samples/php/standalone.php +64 -0
  168. data/public/javascripts/ckeditor/_samples/replacebyclass.html +49 -0
  169. data/public/javascripts/ckeditor/_samples/replacebycode.html +80 -0
  170. data/public/javascripts/ckeditor/_samples/sample.css +81 -0
  171. data/public/javascripts/ckeditor/_samples/sample.js +65 -0
  172. data/public/javascripts/ckeditor/_samples/sample_posteddata.php +59 -0
  173. data/public/javascripts/ckeditor/_samples/sharedspaces.html +131 -0
  174. data/public/javascripts/ckeditor/_samples/skins.html +83 -0
  175. data/public/javascripts/ckeditor/_samples/ui_color.html +87 -0
  176. data/public/javascripts/ckeditor/_samples/ui_languages.html +103 -0
  177. data/public/javascripts/ckeditor/_source/adapters/jquery.js +297 -0
  178. data/public/javascripts/ckeditor/_source/core/_bootstrap.js +96 -0
  179. data/public/javascripts/ckeditor/_source/core/ajax.js +142 -0
  180. data/public/javascripts/ckeditor/_source/core/ckeditor.js +133 -0
  181. data/public/javascripts/ckeditor/_source/core/ckeditor_base.js +196 -0
  182. data/public/javascripts/ckeditor/_source/core/ckeditor_basic.js +239 -0
  183. data/public/javascripts/ckeditor/_source/core/command.js +209 -0
  184. data/public/javascripts/ckeditor/_source/core/commanddefinition.js +129 -0
  185. data/public/javascripts/ckeditor/_source/core/config.js +430 -0
  186. data/public/javascripts/ckeditor/_source/core/dataprocessor.js +65 -0
  187. data/public/javascripts/ckeditor/_source/core/dom.js +20 -0
  188. data/public/javascripts/ckeditor/_source/core/dom/comment.js +32 -0
  189. data/public/javascripts/ckeditor/_source/core/dom/document.js +224 -0
  190. data/public/javascripts/ckeditor/_source/core/dom/documentfragment.js +49 -0
  191. data/public/javascripts/ckeditor/_source/core/dom/domobject.js +255 -0
  192. data/public/javascripts/ckeditor/_source/core/dom/element.js +1564 -0
  193. data/public/javascripts/ckeditor/_source/core/dom/elementpath.js +119 -0
  194. data/public/javascripts/ckeditor/_source/core/dom/event.js +142 -0
  195. data/public/javascripts/ckeditor/_source/core/dom/node.js +683 -0
  196. data/public/javascripts/ckeditor/_source/core/dom/nodelist.js +26 -0
  197. data/public/javascripts/ckeditor/_source/core/dom/range.js +1883 -0
  198. data/public/javascripts/ckeditor/_source/core/dom/rangelist.js +214 -0
  199. data/public/javascripts/ckeditor/_source/core/dom/text.js +123 -0
  200. data/public/javascripts/ckeditor/_source/core/dom/walker.js +445 -0
  201. data/public/javascripts/ckeditor/_source/core/dom/window.js +96 -0
  202. data/public/javascripts/ckeditor/_source/core/dtd.js +238 -0
  203. data/public/javascripts/ckeditor/_source/core/editor.js +924 -0
  204. data/public/javascripts/ckeditor/_source/core/editor_basic.js +182 -0
  205. data/public/javascripts/ckeditor/_source/core/env.js +270 -0
  206. data/public/javascripts/ckeditor/_source/core/event.js +342 -0
  207. data/public/javascripts/ckeditor/_source/core/eventInfo.js +120 -0
  208. data/public/javascripts/ckeditor/_source/core/focusmanager.js +152 -0
  209. data/public/javascripts/ckeditor/_source/core/htmlparser.js +224 -0
  210. data/public/javascripts/ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
  211. data/public/javascripts/ckeditor/_source/core/htmlparser/cdata.js +43 -0
  212. data/public/javascripts/ckeditor/_source/core/htmlparser/comment.js +60 -0
  213. data/public/javascripts/ckeditor/_source/core/htmlparser/element.js +240 -0
  214. data/public/javascripts/ckeditor/_source/core/htmlparser/filter.js +288 -0
  215. data/public/javascripts/ckeditor/_source/core/htmlparser/fragment.js +504 -0
  216. data/public/javascripts/ckeditor/_source/core/htmlparser/text.js +55 -0
  217. data/public/javascripts/ckeditor/_source/core/imagecacher.js +80 -0
  218. data/public/javascripts/ckeditor/_source/core/lang.js +156 -0
  219. data/public/javascripts/ckeditor/_source/core/loader.js +243 -0
  220. data/public/javascripts/ckeditor/_source/core/plugindefinition.js +66 -0
  221. data/public/javascripts/ckeditor/_source/core/plugins.js +85 -0
  222. data/public/javascripts/ckeditor/_source/core/resourcemanager.js +238 -0
  223. data/public/javascripts/ckeditor/_source/core/scriptloader.js +200 -0
  224. data/public/javascripts/ckeditor/_source/core/skins.js +212 -0
  225. data/public/javascripts/ckeditor/_source/core/themes.js +19 -0
  226. data/public/javascripts/ckeditor/_source/core/tools.js +734 -0
  227. data/public/javascripts/ckeditor/_source/core/ui.js +116 -0
  228. data/public/javascripts/ckeditor/_source/core/xml.js +165 -0
  229. data/public/javascripts/ckeditor/_source/lang/_languages.js +83 -0
  230. data/public/javascripts/ckeditor/_source/lang/_translationstatus.txt +60 -0
  231. data/public/javascripts/ckeditor/_source/lang/af.js +758 -0
  232. data/public/javascripts/ckeditor/_source/lang/ar.js +758 -0
  233. data/public/javascripts/ckeditor/_source/lang/bg.js +758 -0
  234. data/public/javascripts/ckeditor/_source/lang/bn.js +758 -0
  235. data/public/javascripts/ckeditor/_source/lang/bs.js +758 -0
  236. data/public/javascripts/ckeditor/_source/lang/ca.js +758 -0
  237. data/public/javascripts/ckeditor/_source/lang/cs.js +758 -0
  238. data/public/javascripts/ckeditor/_source/lang/cy.js +758 -0
  239. data/public/javascripts/ckeditor/_source/lang/da.js +758 -0
  240. data/public/javascripts/ckeditor/_source/lang/de.js +758 -0
  241. data/public/javascripts/ckeditor/_source/lang/el.js +758 -0
  242. data/public/javascripts/ckeditor/_source/lang/en-au.js +758 -0
  243. data/public/javascripts/ckeditor/_source/lang/en-ca.js +758 -0
  244. data/public/javascripts/ckeditor/_source/lang/en-gb.js +758 -0
  245. data/public/javascripts/ckeditor/_source/lang/en.js +758 -0
  246. data/public/javascripts/ckeditor/_source/lang/eo.js +758 -0
  247. data/public/javascripts/ckeditor/_source/lang/es.js +758 -0
  248. data/public/javascripts/ckeditor/_source/lang/et.js +758 -0
  249. data/public/javascripts/ckeditor/_source/lang/eu.js +758 -0
  250. data/public/javascripts/ckeditor/_source/lang/fa.js +758 -0
  251. data/public/javascripts/ckeditor/_source/lang/fi.js +758 -0
  252. data/public/javascripts/ckeditor/_source/lang/fo.js +758 -0
  253. data/public/javascripts/ckeditor/_source/lang/fr-ca.js +758 -0
  254. data/public/javascripts/ckeditor/_source/lang/fr.js +758 -0
  255. data/public/javascripts/ckeditor/_source/lang/gl.js +758 -0
  256. data/public/javascripts/ckeditor/_source/lang/gu.js +758 -0
  257. data/public/javascripts/ckeditor/_source/lang/he.js +758 -0
  258. data/public/javascripts/ckeditor/_source/lang/hi.js +758 -0
  259. data/public/javascripts/ckeditor/_source/lang/hr.js +758 -0
  260. data/public/javascripts/ckeditor/_source/lang/hu.js +758 -0
  261. data/public/javascripts/ckeditor/_source/lang/is.js +758 -0
  262. data/public/javascripts/ckeditor/_source/lang/it.js +758 -0
  263. data/public/javascripts/ckeditor/_source/lang/ja.js +758 -0
  264. data/public/javascripts/ckeditor/_source/lang/km.js +758 -0
  265. data/public/javascripts/ckeditor/_source/lang/ko.js +758 -0
  266. data/public/javascripts/ckeditor/_source/lang/lt.js +758 -0
  267. data/public/javascripts/ckeditor/_source/lang/lv.js +758 -0
  268. data/public/javascripts/ckeditor/_source/lang/mn.js +758 -0
  269. data/public/javascripts/ckeditor/_source/lang/ms.js +758 -0
  270. data/public/javascripts/ckeditor/_source/lang/nb.js +758 -0
  271. data/public/javascripts/ckeditor/_source/lang/nl.js +758 -0
  272. data/public/javascripts/ckeditor/_source/lang/no.js +758 -0
  273. data/public/javascripts/ckeditor/_source/lang/pl.js +758 -0
  274. data/public/javascripts/ckeditor/_source/lang/pt-br.js +757 -0
  275. data/public/javascripts/ckeditor/_source/lang/pt.js +758 -0
  276. data/public/javascripts/ckeditor/_source/lang/ro.js +758 -0
  277. data/public/javascripts/ckeditor/_source/lang/ru.js +758 -0
  278. data/public/javascripts/ckeditor/_source/lang/sk.js +758 -0
  279. data/public/javascripts/ckeditor/_source/lang/sl.js +758 -0
  280. data/public/javascripts/ckeditor/_source/lang/sr-latn.js +758 -0
  281. data/public/javascripts/ckeditor/_source/lang/sr.js +758 -0
  282. data/public/javascripts/ckeditor/_source/lang/sv.js +758 -0
  283. data/public/javascripts/ckeditor/_source/lang/th.js +758 -0
  284. data/public/javascripts/ckeditor/_source/lang/tr.js +757 -0
  285. data/public/javascripts/ckeditor/_source/lang/uk.js +758 -0
  286. data/public/javascripts/ckeditor/_source/lang/vi.js +758 -0
  287. data/public/javascripts/ckeditor/_source/lang/zh-cn.js +758 -0
  288. data/public/javascripts/ckeditor/_source/lang/zh.js +758 -0
  289. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +211 -0
  290. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
  291. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
  292. data/public/javascripts/ckeditor/_source/plugins/a11yhelp/plugin.js +46 -0
  293. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/about.js +73 -0
  294. data/public/javascripts/ckeditor/_source/plugins/about/dialogs/logo_ckeditor.png +0 -0
  295. data/public/javascripts/ckeditor/_source/plugins/about/plugin.js +23 -0
  296. data/public/javascripts/ckeditor/_source/plugins/ajax_save/plugin.js +44 -0
  297. data/public/javascripts/ckeditor/_source/plugins/attachment/dialogs/attachment.js +384 -0
  298. data/public/javascripts/ckeditor/_source/plugins/attachment/images/attachment.png +0 -0
  299. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/en.js +10 -0
  300. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/ru.js +10 -0
  301. data/public/javascripts/ckeditor/_source/plugins/attachment/lang/uk.js +10 -0
  302. data/public/javascripts/ckeditor/_source/plugins/attachment/plugin.js +44 -0
  303. data/public/javascripts/ckeditor/_source/plugins/autogrow/plugin.js +86 -0
  304. data/public/javascripts/ckeditor/_source/plugins/basicstyles/plugin.js +101 -0
  305. data/public/javascripts/ckeditor/_source/plugins/bidi/plugin.js +259 -0
  306. data/public/javascripts/ckeditor/_source/plugins/blockquote/plugin.js +301 -0
  307. data/public/javascripts/ckeditor/_source/plugins/button/plugin.js +277 -0
  308. data/public/javascripts/ckeditor/_source/plugins/clipboard/dialogs/paste.js +205 -0
  309. data/public/javascripts/ckeditor/_source/plugins/clipboard/plugin.js +412 -0
  310. data/public/javascripts/ckeditor/_source/plugins/colorbutton/plugin.js +250 -0
  311. data/public/javascripts/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +336 -0
  312. data/public/javascripts/ckeditor/_source/plugins/colordialog/plugin.js +13 -0
  313. data/public/javascripts/ckeditor/_source/plugins/contextmenu/plugin.js +290 -0
  314. data/public/javascripts/ckeditor/_source/plugins/dialog/dialogDefinition.js +315 -0
  315. data/public/javascripts/ckeditor/_source/plugins/dialog/plugin.js +3015 -0
  316. data/public/javascripts/ckeditor/_source/plugins/dialogadvtab/plugin.js +213 -0
  317. data/public/javascripts/ckeditor/_source/plugins/dialogui/plugin.js +1523 -0
  318. data/public/javascripts/ckeditor/_source/plugins/div/dialogs/div.js +535 -0
  319. data/public/javascripts/ckeditor/_source/plugins/div/plugin.js +121 -0
  320. data/public/javascripts/ckeditor/_source/plugins/domiterator/plugin.js +356 -0
  321. data/public/javascripts/ckeditor/_source/plugins/editingblock/plugin.js +229 -0
  322. data/public/javascripts/ckeditor/_source/plugins/elementspath/plugin.js +206 -0
  323. data/public/javascripts/ckeditor/_source/plugins/embed/dialogs/embed.js +65 -0
  324. data/public/javascripts/ckeditor/_source/plugins/embed/images/embed.png +0 -0
  325. data/public/javascripts/ckeditor/_source/plugins/embed/lang/en.js +9 -0
  326. data/public/javascripts/ckeditor/_source/plugins/embed/lang/ru.js +9 -0
  327. data/public/javascripts/ckeditor/_source/plugins/embed/lang/uk.js +9 -0
  328. data/public/javascripts/ckeditor/_source/plugins/embed/plugin.js +44 -0
  329. data/public/javascripts/ckeditor/_source/plugins/enterkey/plugin.js +363 -0
  330. data/public/javascripts/ckeditor/_source/plugins/entities/plugin.js +226 -0
  331. data/public/javascripts/ckeditor/_source/plugins/fakeobjects/plugin.js +122 -0
  332. data/public/javascripts/ckeditor/_source/plugins/filebrowser/plugin.js +501 -0
  333. data/public/javascripts/ckeditor/_source/plugins/find/dialogs/find.js +890 -0
  334. data/public/javascripts/ckeditor/_source/plugins/find/plugin.js +46 -0
  335. data/public/javascripts/ckeditor/_source/plugins/flash/dialogs/flash.js +698 -0
  336. data/public/javascripts/ckeditor/_source/plugins/flash/images/placeholder.png +0 -0
  337. data/public/javascripts/ckeditor/_source/plugins/flash/plugin.js +168 -0
  338. data/public/javascripts/ckeditor/_source/plugins/floatpanel/plugin.js +402 -0
  339. data/public/javascripts/ckeditor/_source/plugins/font/plugin.js +234 -0
  340. data/public/javascripts/ckeditor/_source/plugins/format/plugin.js +194 -0
  341. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/button.js +135 -0
  342. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/checkbox.js +153 -0
  343. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/form.js +177 -0
  344. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +98 -0
  345. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/radio.js +135 -0
  346. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/select.js +556 -0
  347. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textarea.js +114 -0
  348. data/public/javascripts/ckeditor/_source/plugins/forms/dialogs/textfield.js +199 -0
  349. data/public/javascripts/ckeditor/_source/plugins/forms/images/hiddenfield.gif +0 -0
  350. data/public/javascripts/ckeditor/_source/plugins/forms/plugin.js +284 -0
  351. data/public/javascripts/ckeditor/_source/plugins/horizontalrule/plugin.js +36 -0
  352. data/public/javascripts/ckeditor/_source/plugins/htmldataprocessor/plugin.js +502 -0
  353. data/public/javascripts/ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
  354. data/public/javascripts/ckeditor/_source/plugins/iframedialog/plugin.js +136 -0
  355. data/public/javascripts/ckeditor/_source/plugins/image/dialogs/image.js +1396 -0
  356. data/public/javascripts/ckeditor/_source/plugins/image/plugin.js +81 -0
  357. data/public/javascripts/ckeditor/_source/plugins/indent/plugin.js +455 -0
  358. data/public/javascripts/ckeditor/_source/plugins/justify/plugin.js +221 -0
  359. data/public/javascripts/ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
  360. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/anchor.js +99 -0
  361. data/public/javascripts/ckeditor/_source/plugins/link/dialogs/link.js +1424 -0
  362. data/public/javascripts/ckeditor/_source/plugins/link/images/anchor.gif +0 -0
  363. data/public/javascripts/ckeditor/_source/plugins/link/plugin.js +238 -0
  364. data/public/javascripts/ckeditor/_source/plugins/list/plugin.js +710 -0
  365. data/public/javascripts/ckeditor/_source/plugins/listblock/plugin.js +257 -0
  366. data/public/javascripts/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +204 -0
  367. data/public/javascripts/ckeditor/_source/plugins/liststyle/plugin.js +66 -0
  368. data/public/javascripts/ckeditor/_source/plugins/maximize/plugin.js +350 -0
  369. data/public/javascripts/ckeditor/_source/plugins/menu/plugin.js +408 -0
  370. data/public/javascripts/ckeditor/_source/plugins/menubutton/plugin.js +94 -0
  371. data/public/javascripts/ckeditor/_source/plugins/newpage/plugin.js +53 -0
  372. data/public/javascripts/ckeditor/_source/plugins/pagebreak/images/pagebreak.gif +0 -0
  373. data/public/javascripts/ckeditor/_source/plugins/pagebreak/plugin.js +121 -0
  374. data/public/javascripts/ckeditor/_source/plugins/panel/plugin.js +399 -0
  375. data/public/javascripts/ckeditor/_source/plugins/panelbutton/plugin.js +147 -0
  376. data/public/javascripts/ckeditor/_source/plugins/pastefromword/filter/default.js +1170 -0
  377. data/public/javascripts/ckeditor/_source/plugins/pastefromword/plugin.js +122 -0
  378. data/public/javascripts/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +70 -0
  379. data/public/javascripts/ckeditor/_source/plugins/pastetext/plugin.js +145 -0
  380. data/public/javascripts/ckeditor/_source/plugins/popup/plugin.js +64 -0
  381. data/public/javascripts/ckeditor/_source/plugins/preview/plugin.js +108 -0
  382. data/public/javascripts/ckeditor/_source/plugins/print/plugin.js +41 -0
  383. data/public/javascripts/ckeditor/_source/plugins/removeformat/plugin.js +184 -0
  384. data/public/javascripts/ckeditor/_source/plugins/resize/plugin.js +157 -0
  385. data/public/javascripts/ckeditor/_source/plugins/richcombo/plugin.js +370 -0
  386. data/public/javascripts/ckeditor/_source/plugins/save/plugin.js +55 -0
  387. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/options.js +534 -0
  388. data/public/javascripts/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +71 -0
  389. data/public/javascripts/ckeditor/_source/plugins/scayt/plugin.js +945 -0
  390. data/public/javascripts/ckeditor/_source/plugins/selection/plugin.js +1375 -0
  391. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_address.png +0 -0
  392. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_blockquote.png +0 -0
  393. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_div.png +0 -0
  394. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h1.png +0 -0
  395. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h2.png +0 -0
  396. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h3.png +0 -0
  397. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h4.png +0 -0
  398. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h5.png +0 -0
  399. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_h6.png +0 -0
  400. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_p.png +0 -0
  401. data/public/javascripts/ckeditor/_source/plugins/showblocks/images/block_pre.png +0 -0
  402. data/public/javascripts/ckeditor/_source/plugins/showblocks/plugin.js +155 -0
  403. data/public/javascripts/ckeditor/_source/plugins/showborders/plugin.js +201 -0
  404. data/public/javascripts/ckeditor/_source/plugins/smiley/dialogs/smiley.js +218 -0
  405. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angel_smile.gif +0 -0
  406. data/public/javascripts/ckeditor/_source/plugins/smiley/images/angry_smile.gif +0 -0
  407. data/public/javascripts/ckeditor/_source/plugins/smiley/images/broken_heart.gif +0 -0
  408. data/public/javascripts/ckeditor/_source/plugins/smiley/images/confused_smile.gif +0 -0
  409. data/public/javascripts/ckeditor/_source/plugins/smiley/images/cry_smile.gif +0 -0
  410. data/public/javascripts/ckeditor/_source/plugins/smiley/images/devil_smile.gif +0 -0
  411. data/public/javascripts/ckeditor/_source/plugins/smiley/images/embaressed_smile.gif +0 -0
  412. data/public/javascripts/ckeditor/_source/plugins/smiley/images/envelope.gif +0 -0
  413. data/public/javascripts/ckeditor/_source/plugins/smiley/images/heart.gif +0 -0
  414. data/public/javascripts/ckeditor/_source/plugins/smiley/images/kiss.gif +0 -0
  415. data/public/javascripts/ckeditor/_source/plugins/smiley/images/lightbulb.gif +0 -0
  416. data/public/javascripts/ckeditor/_source/plugins/smiley/images/omg_smile.gif +0 -0
  417. data/public/javascripts/ckeditor/_source/plugins/smiley/images/regular_smile.gif +0 -0
  418. data/public/javascripts/ckeditor/_source/plugins/smiley/images/sad_smile.gif +0 -0
  419. data/public/javascripts/ckeditor/_source/plugins/smiley/images/shades_smile.gif +0 -0
  420. data/public/javascripts/ckeditor/_source/plugins/smiley/images/teeth_smile.gif +0 -0
  421. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_down.gif +0 -0
  422. data/public/javascripts/ckeditor/_source/plugins/smiley/images/thumbs_up.gif +0 -0
  423. data/public/javascripts/ckeditor/_source/plugins/smiley/images/tounge_smile.gif +0 -0
  424. data/public/javascripts/ckeditor/_source/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  425. data/public/javascripts/ckeditor/_source/plugins/smiley/images/wink_smile.gif +0 -0
  426. data/public/javascripts/ckeditor/_source/plugins/smiley/plugin.js +94 -0
  427. data/public/javascripts/ckeditor/_source/plugins/sourcearea/plugin.js +207 -0
  428. data/public/javascripts/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +409 -0
  429. data/public/javascripts/ckeditor/_source/plugins/specialchar/plugin.js +29 -0
  430. data/public/javascripts/ckeditor/_source/plugins/styles/plugin.js +1479 -0
  431. data/public/javascripts/ckeditor/_source/plugins/styles/styles/default.js +88 -0
  432. data/public/javascripts/ckeditor/_source/plugins/stylescombo/plugin.js +206 -0
  433. data/public/javascripts/ckeditor/_source/plugins/tab/plugin.js +367 -0
  434. data/public/javascripts/ckeditor/_source/plugins/table/dialogs/table.js +672 -0
  435. data/public/javascripts/ckeditor/_source/plugins/table/plugin.js +78 -0
  436. data/public/javascripts/ckeditor/_source/plugins/tableresize/plugin.js +450 -0
  437. data/public/javascripts/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +533 -0
  438. data/public/javascripts/ckeditor/_source/plugins/tabletools/plugin.js +1120 -0
  439. data/public/javascripts/ckeditor/_source/plugins/templates/dialogs/templates.js +233 -0
  440. data/public/javascripts/ckeditor/_source/plugins/templates/plugin.js +99 -0
  441. data/public/javascripts/ckeditor/_source/plugins/templates/templates/default.js +94 -0
  442. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template1.gif +0 -0
  443. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template2.gif +0 -0
  444. data/public/javascripts/ckeditor/_source/plugins/templates/templates/images/template3.gif +0 -0
  445. data/public/javascripts/ckeditor/_source/plugins/toolbar/plugin.js +481 -0
  446. data/public/javascripts/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +205 -0
  447. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/en.js +15 -0
  448. data/public/javascripts/ckeditor/_source/plugins/uicolor/lang/he.js +15 -0
  449. data/public/javascripts/ckeditor/_source/plugins/uicolor/plugin.js +37 -0
  450. data/public/javascripts/ckeditor/_source/plugins/uicolor/uicolor.gif +0 -0
  451. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  452. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  453. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  454. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  455. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +15 -0
  456. data/public/javascripts/ckeditor/_source/plugins/uicolor/yui/yui.js +71 -0
  457. data/public/javascripts/ckeditor/_source/plugins/undo/plugin.js +554 -0
  458. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/ciframe.html +49 -0
  459. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  460. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.css +82 -0
  461. data/public/javascripts/ckeditor/_source/plugins/wsc/dialogs/wsc.js +176 -0
  462. data/public/javascripts/ckeditor/_source/plugins/wsc/plugin.js +33 -0
  463. data/public/javascripts/ckeditor/_source/plugins/wysiwygarea/plugin.js +1146 -0
  464. data/public/javascripts/ckeditor/_source/skins/kama/dialog.css +882 -0
  465. data/public/javascripts/ckeditor/_source/skins/kama/editor.css +25 -0
  466. data/public/javascripts/ckeditor/_source/skins/kama/elementspath.css +73 -0
  467. data/public/javascripts/ckeditor/_source/skins/kama/icons.css +357 -0
  468. data/public/javascripts/ckeditor/_source/skins/kama/icons.png +0 -0
  469. data/public/javascripts/ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  470. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  471. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  472. data/public/javascripts/ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  473. data/public/javascripts/ckeditor/_source/skins/kama/images/mini.gif +0 -0
  474. data/public/javascripts/ckeditor/_source/skins/kama/images/noimage.png +0 -0
  475. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites.png +0 -0
  476. data/public/javascripts/ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  477. data/public/javascripts/ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  478. data/public/javascripts/ckeditor/_source/skins/kama/mainui.css +195 -0
  479. data/public/javascripts/ckeditor/_source/skins/kama/menu.css +216 -0
  480. data/public/javascripts/ckeditor/_source/skins/kama/panel.css +217 -0
  481. data/public/javascripts/ckeditor/_source/skins/kama/presets.css +49 -0
  482. data/public/javascripts/ckeditor/_source/skins/kama/reset.css +84 -0
  483. data/public/javascripts/ckeditor/_source/skins/kama/richcombo.css +277 -0
  484. data/public/javascripts/ckeditor/_source/skins/kama/skin.js +268 -0
  485. data/public/javascripts/ckeditor/_source/skins/kama/templates.css +88 -0
  486. data/public/javascripts/ckeditor/_source/skins/kama/toolbar.css +409 -0
  487. data/public/javascripts/ckeditor/_source/skins/office2003/dialog.css +785 -0
  488. data/public/javascripts/ckeditor/_source/skins/office2003/editor.css +25 -0
  489. data/public/javascripts/ckeditor/_source/skins/office2003/elementspath.css +74 -0
  490. data/public/javascripts/ckeditor/_source/skins/office2003/icons.css +354 -0
  491. data/public/javascripts/ckeditor/_source/skins/office2003/icons.png +0 -0
  492. data/public/javascripts/ckeditor/_source/skins/office2003/icons_rtl.png +0 -0
  493. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.gif +0 -0
  494. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides.png +0 -0
  495. data/public/javascripts/ckeditor/_source/skins/office2003/images/dialog_sides_rtl.png +0 -0
  496. data/public/javascripts/ckeditor/_source/skins/office2003/images/mini.gif +0 -0
  497. data/public/javascripts/ckeditor/_source/skins/office2003/images/noimage.png +0 -0
  498. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites.png +0 -0
  499. data/public/javascripts/ckeditor/_source/skins/office2003/images/sprites_ie6.png +0 -0
  500. data/public/javascripts/ckeditor/_source/skins/office2003/mainui.css +145 -0
  501. data/public/javascripts/ckeditor/_source/skins/office2003/menu.css +213 -0
  502. data/public/javascripts/ckeditor/_source/skins/office2003/panel.css +212 -0
  503. data/public/javascripts/ckeditor/_source/skins/office2003/presets.css +49 -0
  504. data/public/javascripts/ckeditor/_source/skins/office2003/reset.css +84 -0
  505. data/public/javascripts/ckeditor/_source/skins/office2003/richcombo.css +297 -0
  506. data/public/javascripts/ckeditor/_source/skins/office2003/skin.js +81 -0
  507. data/public/javascripts/ckeditor/_source/skins/office2003/templates.css +87 -0
  508. data/public/javascripts/ckeditor/_source/skins/office2003/toolbar.css +470 -0
  509. data/public/javascripts/ckeditor/_source/skins/v2/dialog.css +800 -0
  510. data/public/javascripts/ckeditor/_source/skins/v2/editor.css +25 -0
  511. data/public/javascripts/ckeditor/_source/skins/v2/elementspath.css +74 -0
  512. data/public/javascripts/ckeditor/_source/skins/v2/icons.css +354 -0
  513. data/public/javascripts/ckeditor/_source/skins/v2/icons.png +0 -0
  514. data/public/javascripts/ckeditor/_source/skins/v2/icons_rtl.png +0 -0
  515. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.gif +0 -0
  516. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides.png +0 -0
  517. data/public/javascripts/ckeditor/_source/skins/v2/images/dialog_sides_rtl.png +0 -0
  518. data/public/javascripts/ckeditor/_source/skins/v2/images/mini.gif +0 -0
  519. data/public/javascripts/ckeditor/_source/skins/v2/images/noimage.png +0 -0
  520. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites.png +0 -0
  521. data/public/javascripts/ckeditor/_source/skins/v2/images/sprites_ie6.png +0 -0
  522. data/public/javascripts/ckeditor/_source/skins/v2/images/toolbar_start.gif +0 -0
  523. data/public/javascripts/ckeditor/_source/skins/v2/mainui.css +154 -0
  524. data/public/javascripts/ckeditor/_source/skins/v2/menu.css +215 -0
  525. data/public/javascripts/ckeditor/_source/skins/v2/panel.css +212 -0
  526. data/public/javascripts/ckeditor/_source/skins/v2/presets.css +50 -0
  527. data/public/javascripts/ckeditor/_source/skins/v2/reset.css +84 -0
  528. data/public/javascripts/ckeditor/_source/skins/v2/richcombo.css +297 -0
  529. data/public/javascripts/ckeditor/_source/skins/v2/skin.js +77 -0
  530. data/public/javascripts/ckeditor/_source/skins/v2/templates.css +87 -0
  531. data/public/javascripts/ckeditor/_source/skins/v2/toolbar.css +423 -0
  532. data/public/javascripts/ckeditor/_source/themes/default/theme.js +361 -0
  533. data/public/javascripts/ckeditor/adapters/jquery.js +6 -0
  534. data/public/javascripts/ckeditor/ckeditor.js +137 -0
  535. data/public/javascripts/ckeditor/ckeditor.pack +211 -0
  536. data/public/javascripts/ckeditor/ckeditor_basic.js +8 -0
  537. data/public/javascripts/ckeditor/ckeditor_basic_source.js +20 -0
  538. data/public/javascripts/ckeditor/ckeditor_source.js +25 -0
  539. data/public/javascripts/ckeditor/config.js +43 -0
  540. data/public/javascripts/ckeditor/contents.css +39 -0
  541. data/public/javascripts/ckeditor/css/ckfinder.css +299 -0
  542. data/public/javascripts/ckeditor/css/fck_dialog.css +119 -0
  543. data/public/javascripts/ckeditor/css/fck_editor.css +448 -0
  544. data/public/javascripts/ckeditor/css/swfupload.css +94 -0
  545. data/public/javascripts/ckeditor/images/add.gif +0 -0
  546. data/public/javascripts/ckeditor/images/cancelbutton.gif +0 -0
  547. data/public/javascripts/ckeditor/images/ckfnothumb.gif +0 -0
  548. data/public/javascripts/ckeditor/images/doc.gif +0 -0
  549. data/public/javascripts/ckeditor/images/mp3.gif +0 -0
  550. data/public/javascripts/ckeditor/images/pdf.gif +0 -0
  551. data/public/javascripts/ckeditor/images/rar.gif +0 -0
  552. data/public/javascripts/ckeditor/images/refresh.gif +0 -0
  553. data/public/javascripts/ckeditor/images/select_files.png +0 -0
  554. data/public/javascripts/ckeditor/images/spacer.gif +0 -0
  555. data/public/javascripts/ckeditor/images/swf.gif +0 -0
  556. data/public/javascripts/ckeditor/images/toolbar.start.gif +0 -0
  557. data/public/javascripts/ckeditor/images/xls.gif +0 -0
  558. data/public/javascripts/ckeditor/lang/_languages.js +6 -0
  559. data/public/javascripts/ckeditor/lang/_translationstatus.txt +60 -0
  560. data/public/javascripts/ckeditor/lang/af.js +6 -0
  561. data/public/javascripts/ckeditor/lang/ar.js +6 -0
  562. data/public/javascripts/ckeditor/lang/bg.js +6 -0
  563. data/public/javascripts/ckeditor/lang/bn.js +6 -0
  564. data/public/javascripts/ckeditor/lang/bs.js +6 -0
  565. data/public/javascripts/ckeditor/lang/ca.js +6 -0
  566. data/public/javascripts/ckeditor/lang/cs.js +6 -0
  567. data/public/javascripts/ckeditor/lang/cy.js +6 -0
  568. data/public/javascripts/ckeditor/lang/da.js +6 -0
  569. data/public/javascripts/ckeditor/lang/de.js +6 -0
  570. data/public/javascripts/ckeditor/lang/el.js +6 -0
  571. data/public/javascripts/ckeditor/lang/en-au.js +6 -0
  572. data/public/javascripts/ckeditor/lang/en-ca.js +6 -0
  573. data/public/javascripts/ckeditor/lang/en-gb.js +6 -0
  574. data/public/javascripts/ckeditor/lang/en.js +6 -0
  575. data/public/javascripts/ckeditor/lang/eo.js +6 -0
  576. data/public/javascripts/ckeditor/lang/es.js +6 -0
  577. data/public/javascripts/ckeditor/lang/et.js +6 -0
  578. data/public/javascripts/ckeditor/lang/eu.js +6 -0
  579. data/public/javascripts/ckeditor/lang/fa.js +6 -0
  580. data/public/javascripts/ckeditor/lang/fi.js +6 -0
  581. data/public/javascripts/ckeditor/lang/fo.js +6 -0
  582. data/public/javascripts/ckeditor/lang/fr-ca.js +6 -0
  583. data/public/javascripts/ckeditor/lang/fr.js +6 -0
  584. data/public/javascripts/ckeditor/lang/gl.js +6 -0
  585. data/public/javascripts/ckeditor/lang/gu.js +6 -0
  586. data/public/javascripts/ckeditor/lang/he.js +6 -0
  587. data/public/javascripts/ckeditor/lang/hi.js +6 -0
  588. data/public/javascripts/ckeditor/lang/hr.js +6 -0
  589. data/public/javascripts/ckeditor/lang/hu.js +6 -0
  590. data/public/javascripts/ckeditor/lang/is.js +6 -0
  591. data/public/javascripts/ckeditor/lang/it.js +6 -0
  592. data/public/javascripts/ckeditor/lang/ja.js +6 -0
  593. data/public/javascripts/ckeditor/lang/km.js +6 -0
  594. data/public/javascripts/ckeditor/lang/ko.js +6 -0
  595. data/public/javascripts/ckeditor/lang/lt.js +6 -0
  596. data/public/javascripts/ckeditor/lang/lv.js +6 -0
  597. data/public/javascripts/ckeditor/lang/mn.js +6 -0
  598. data/public/javascripts/ckeditor/lang/ms.js +6 -0
  599. data/public/javascripts/ckeditor/lang/nb.js +6 -0
  600. data/public/javascripts/ckeditor/lang/nl.js +6 -0
  601. data/public/javascripts/ckeditor/lang/no.js +6 -0
  602. data/public/javascripts/ckeditor/lang/pl.js +6 -0
  603. data/public/javascripts/ckeditor/lang/pt-br.js +6 -0
  604. data/public/javascripts/ckeditor/lang/pt.js +6 -0
  605. data/public/javascripts/ckeditor/lang/ro.js +6 -0
  606. data/public/javascripts/ckeditor/lang/ru.js +6 -0
  607. data/public/javascripts/ckeditor/lang/sk.js +6 -0
  608. data/public/javascripts/ckeditor/lang/sl.js +6 -0
  609. data/public/javascripts/ckeditor/lang/sr-latn.js +6 -0
  610. data/public/javascripts/ckeditor/lang/sr.js +6 -0
  611. data/public/javascripts/ckeditor/lang/sv.js +6 -0
  612. data/public/javascripts/ckeditor/lang/th.js +6 -0
  613. data/public/javascripts/ckeditor/lang/tr.js +6 -0
  614. data/public/javascripts/ckeditor/lang/uk.js +6 -0
  615. data/public/javascripts/ckeditor/lang/vi.js +6 -0
  616. data/public/javascripts/ckeditor/lang/zh-cn.js +6 -0
  617. data/public/javascripts/ckeditor/lang/zh.js +6 -0
  618. data/public/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +7 -0
  619. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/en.js +6 -0
  620. data/public/javascripts/ckeditor/plugins/a11yhelp/lang/he.js +6 -0
  621. data/public/javascripts/ckeditor/plugins/about/dialogs/about.js +6 -0
  622. data/public/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  623. data/public/javascripts/ckeditor/plugins/ajax_save/plugin.js +1 -0
  624. data/public/javascripts/ckeditor/plugins/attachment/dialogs/attachment.js +1 -0
  625. data/public/javascripts/ckeditor/plugins/attachment/images/attachment.png +0 -0
  626. data/public/javascripts/ckeditor/plugins/attachment/lang/en.js +10 -0
  627. data/public/javascripts/ckeditor/plugins/attachment/lang/ru.js +10 -0
  628. data/public/javascripts/ckeditor/plugins/attachment/lang/uk.js +10 -0
  629. data/public/javascripts/ckeditor/plugins/attachment/plugin.js +1 -0
  630. data/public/javascripts/ckeditor/plugins/autogrow/plugin.js +6 -0
  631. data/public/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +7 -0
  632. data/public/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +7 -0
  633. data/public/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  634. data/public/javascripts/ckeditor/plugins/div/dialogs/div.js +8 -0
  635. data/public/javascripts/ckeditor/plugins/embed/dialogs/embed.js +1 -0
  636. data/public/javascripts/ckeditor/plugins/embed/images/embed.png +0 -0
  637. data/public/javascripts/ckeditor/plugins/embed/lang/en.js +9 -0
  638. data/public/javascripts/ckeditor/plugins/embed/lang/ru.js +9 -0
  639. data/public/javascripts/ckeditor/plugins/embed/lang/uk.js +9 -0
  640. data/public/javascripts/ckeditor/plugins/embed/plugin.js +1 -0
  641. data/public/javascripts/ckeditor/plugins/find/dialogs/find.js +9 -0
  642. data/public/javascripts/ckeditor/plugins/flash/dialogs/flash.js +9 -0
  643. data/public/javascripts/ckeditor/plugins/flash/images/placeholder.png +0 -0
  644. data/public/javascripts/ckeditor/plugins/forms/dialogs/button.js +6 -0
  645. data/public/javascripts/ckeditor/plugins/forms/dialogs/checkbox.js +6 -0
  646. data/public/javascripts/ckeditor/plugins/forms/dialogs/form.js +6 -0
  647. data/public/javascripts/ckeditor/plugins/forms/dialogs/hiddenfield.js +6 -0
  648. data/public/javascripts/ckeditor/plugins/forms/dialogs/radio.js +6 -0
  649. data/public/javascripts/ckeditor/plugins/forms/dialogs/select.js +9 -0
  650. data/public/javascripts/ckeditor/plugins/forms/dialogs/textarea.js +6 -0
  651. data/public/javascripts/ckeditor/plugins/forms/dialogs/textfield.js +7 -0
  652. data/public/javascripts/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  653. data/public/javascripts/ckeditor/plugins/iframedialog/plugin.js +6 -0
  654. data/public/javascripts/ckeditor/plugins/image/dialogs/image.js +13 -0
  655. data/public/javascripts/ckeditor/plugins/link/dialogs/anchor.js +6 -0
  656. data/public/javascripts/ckeditor/plugins/link/dialogs/link.js +11 -0
  657. data/public/javascripts/ckeditor/plugins/link/images/anchor.gif +0 -0
  658. data/public/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +6 -0
  659. data/public/javascripts/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  660. data/public/javascripts/ckeditor/plugins/pastefromword/filter/default.js +10 -0
  661. data/public/javascripts/ckeditor/plugins/pastetext/dialogs/pastetext.js +6 -0
  662. data/public/javascripts/ckeditor/plugins/scayt/dialogs/options.js +8 -0
  663. data/public/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +6 -0
  664. data/public/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  665. data/public/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  666. data/public/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  667. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  668. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  669. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  670. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  671. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  672. data/public/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  673. data/public/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  674. data/public/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  675. data/public/javascripts/ckeditor/plugins/smiley/dialogs/smiley.js +7 -0
  676. data/public/javascripts/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  677. data/public/javascripts/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  678. data/public/javascripts/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  679. data/public/javascripts/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  680. data/public/javascripts/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  681. data/public/javascripts/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  682. data/public/javascripts/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  683. data/public/javascripts/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  684. data/public/javascripts/ckeditor/plugins/smiley/images/heart.gif +0 -0
  685. data/public/javascripts/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  686. data/public/javascripts/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  687. data/public/javascripts/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  688. data/public/javascripts/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  689. data/public/javascripts/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  690. data/public/javascripts/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  691. data/public/javascripts/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  692. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  693. data/public/javascripts/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  694. data/public/javascripts/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  695. data/public/javascripts/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  696. data/public/javascripts/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  697. data/public/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +7 -0
  698. data/public/javascripts/ckeditor/plugins/styles/styles/default.js +6 -0
  699. data/public/javascripts/ckeditor/plugins/table/dialogs/table.js +9 -0
  700. data/public/javascripts/ckeditor/plugins/tableresize/plugin.js +7 -0
  701. data/public/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +8 -0
  702. data/public/javascripts/ckeditor/plugins/templates/dialogs/templates.js +7 -0
  703. data/public/javascripts/ckeditor/plugins/templates/templates/default.js +6 -0
  704. data/public/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  705. data/public/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  706. data/public/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  707. data/public/javascripts/ckeditor/plugins/uicolor/dialogs/uicolor.js +7 -0
  708. data/public/javascripts/ckeditor/plugins/uicolor/lang/en.js +6 -0
  709. data/public/javascripts/ckeditor/plugins/uicolor/lang/he.js +6 -0
  710. data/public/javascripts/ckeditor/plugins/uicolor/plugin.js +6 -0
  711. data/public/javascripts/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  712. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  713. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  714. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  715. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  716. data/public/javascripts/ckeditor/plugins/uicolor/yui/assets/yui.css +6 -0
  717. data/public/javascripts/ckeditor/plugins/uicolor/yui/yui.js +76 -0
  718. data/public/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
  719. data/public/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  720. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +6 -0
  721. data/public/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +7 -0
  722. data/public/javascripts/ckeditor/skins/kama/dialog.css +9 -0
  723. data/public/javascripts/ckeditor/skins/kama/editor.css +12 -0
  724. data/public/javascripts/ckeditor/skins/kama/icons.png +0 -0
  725. data/public/javascripts/ckeditor/skins/kama/icons_rtl.png +0 -0
  726. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  727. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  728. data/public/javascripts/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  729. data/public/javascripts/ckeditor/skins/kama/images/mini.gif +0 -0
  730. data/public/javascripts/ckeditor/skins/kama/images/noimage.png +0 -0
  731. data/public/javascripts/ckeditor/skins/kama/images/sprites.png +0 -0
  732. data/public/javascripts/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  733. data/public/javascripts/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  734. data/public/javascripts/ckeditor/skins/kama/skin.js +7 -0
  735. data/public/javascripts/ckeditor/skins/kama/templates.css +6 -0
  736. data/public/javascripts/ckeditor/skins/office2003/dialog.css +9 -0
  737. data/public/javascripts/ckeditor/skins/office2003/editor.css +13 -0
  738. data/public/javascripts/ckeditor/skins/office2003/icons.png +0 -0
  739. data/public/javascripts/ckeditor/skins/office2003/icons_rtl.png +0 -0
  740. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  741. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  742. data/public/javascripts/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  743. data/public/javascripts/ckeditor/skins/office2003/images/mini.gif +0 -0
  744. data/public/javascripts/ckeditor/skins/office2003/images/noimage.png +0 -0
  745. data/public/javascripts/ckeditor/skins/office2003/images/sprites.png +0 -0
  746. data/public/javascripts/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  747. data/public/javascripts/ckeditor/skins/office2003/skin.js +6 -0
  748. data/public/javascripts/ckeditor/skins/office2003/templates.css +6 -0
  749. data/public/javascripts/ckeditor/skins/v2/dialog.css +9 -0
  750. data/public/javascripts/ckeditor/skins/v2/editor.css +12 -0
  751. data/public/javascripts/ckeditor/skins/v2/icons.png +0 -0
  752. data/public/javascripts/ckeditor/skins/v2/icons_rtl.png +0 -0
  753. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  754. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  755. data/public/javascripts/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  756. data/public/javascripts/ckeditor/skins/v2/images/mini.gif +0 -0
  757. data/public/javascripts/ckeditor/skins/v2/images/noimage.png +0 -0
  758. data/public/javascripts/ckeditor/skins/v2/images/sprites.png +0 -0
  759. data/public/javascripts/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  760. data/public/javascripts/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  761. data/public/javascripts/ckeditor/skins/v2/skin.js +6 -0
  762. data/public/javascripts/ckeditor/skins/v2/templates.css +6 -0
  763. data/public/javascripts/ckeditor/swfupload/fileprogress.js +275 -0
  764. data/public/javascripts/ckeditor/swfupload/handlers.js +170 -0
  765. data/public/javascripts/ckeditor/swfupload/mootools-1.2.3-core-yc.js +356 -0
  766. data/public/javascripts/ckeditor/swfupload/querystring.js +40 -0
  767. data/public/javascripts/ckeditor/swfupload/swfupload.js +1 -0
  768. data/public/javascripts/ckeditor/swfupload/swfupload.queue.js +1 -0
  769. data/public/javascripts/ckeditor/swfupload/swfupload.swf +0 -0
  770. data/public/javascripts/ckeditor/swfupload/swfupload.swfobject.js +111 -0
  771. data/public/javascripts/ckeditor/themes/default/theme.js +8 -0
  772. data/public/javascripts/controls.js +965 -0
  773. data/public/javascripts/dragdrop.js +974 -0
  774. data/public/javascripts/effects.js +1123 -0
  775. data/public/javascripts/prototype.js +6001 -0
  776. data/public/javascripts/rails.js +175 -0
  777. data/public/robots.txt +5 -0
  778. data/public/stylesheets/.gitkeep +0 -0
  779. data/public/stylesheets/application.css +688 -0
  780. data/public/stylesheets/core.css +1147 -0
  781. data/public/stylesheets/core_ie.css +52 -0
  782. data/public/stylesheets/csshover3.htc +14 -0
  783. data/script/cucumber +10 -0
  784. data/script/rails +6 -0
  785. data/spec/blueprints.rb +14 -0
  786. data/spec/controllers/admin/managed_contents_controller_spec.rb +57 -0
  787. data/spec/controllers/admin/publications_controller_spec.rb +62 -0
  788. data/spec/controllers/managed_contents_controller_spec.rb +18 -0
  789. data/spec/controllers/publications_controller_spec.rb +17 -0
  790. data/spec/editorial_logic_spec.rb +42 -0
  791. data/spec/models/managed_content_spec.rb +111 -0
  792. data/spec/models/publication_spec.rb +97 -0
  793. data/spec/models/section_spec.rb +47 -0
  794. data/spec/spec_helper.rb +13 -0
  795. data/spec/support/be_valid_asset.rb +5 -0
  796. data/tasks/editorial_logic.rake +30 -0
  797. metadata +1009 -0
@@ -0,0 +1,213 @@
1
+ /*
2
+ Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ (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
+ // Broadcast Lang Dir change
40
+ if ( attrName == 'dir' )
41
+ {
42
+ var dir = element.getAttribute( attrName, value );
43
+ if ( dir != value && element.getParent() )
44
+ this._.dialog._.editor.fire( 'dirChanged', element );
45
+ }
46
+
47
+ if ( value )
48
+ element.setAttribute( attrName, value );
49
+ else
50
+ element.removeAttribute( attrName, value );
51
+ }
52
+ }
53
+
54
+ CKEDITOR.plugins.add( 'dialogadvtab',
55
+ {
56
+ /**
57
+ *
58
+ * @param tabConfig
59
+ * id, dir, classes, styles
60
+ */
61
+ createAdvancedTab : function( editor, tabConfig )
62
+ {
63
+ if ( !tabConfig )
64
+ tabConfig = { id:1, dir:1, classes:1, styles:1 };
65
+
66
+ var lang = editor.lang.common;
67
+
68
+ var result =
69
+ {
70
+ id : 'advanced',
71
+ label : lang.advancedTab,
72
+ title : lang.advancedTab,
73
+ elements :
74
+ [
75
+ {
76
+ type : 'vbox',
77
+ padding : 1,
78
+ children : []
79
+ }
80
+ ]
81
+ };
82
+
83
+ var contents = [];
84
+
85
+ if ( tabConfig.id || tabConfig.dir )
86
+ {
87
+ if ( tabConfig.id )
88
+ {
89
+ contents.push(
90
+ {
91
+ id : 'advId',
92
+ att : 'id',
93
+ type : 'text',
94
+ label : lang.id,
95
+ setup : setupAdvParams,
96
+ commit : commitAdvParams
97
+ });
98
+ }
99
+
100
+ if ( tabConfig.dir )
101
+ {
102
+ contents.push(
103
+ {
104
+ id : 'advLangDir',
105
+ att : 'dir',
106
+ type : 'select',
107
+ label : lang.langDir,
108
+ 'default' : '',
109
+ style : 'width:100%',
110
+ items :
111
+ [
112
+ [ lang.notSet, '' ],
113
+ [ lang.langDirLTR, 'ltr' ],
114
+ [ lang.langDirRTL, 'rtl' ]
115
+ ],
116
+ setup : setupAdvParams,
117
+ commit : commitAdvParams
118
+ });
119
+ }
120
+
121
+ result.elements[ 0 ].children.push(
122
+ {
123
+ type : 'hbox',
124
+ widths : [ '50%', '50%' ],
125
+ children : [].concat( contents )
126
+ });
127
+ }
128
+
129
+ if ( tabConfig.styles || tabConfig.classes )
130
+ {
131
+ contents = [];
132
+
133
+ if ( tabConfig.styles )
134
+ {
135
+ contents.push(
136
+ {
137
+ id : 'advStyles',
138
+ att : 'style',
139
+ type : 'text',
140
+ label : lang.styles,
141
+ 'default' : '',
142
+
143
+ getStyle : function( name, defaultValue )
144
+ {
145
+ var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') );
146
+ return match ? match[ 1 ] : defaultValue;
147
+ },
148
+
149
+ updateStyle : function( name, value )
150
+ {
151
+ var styles = this.getValue();
152
+
153
+ // Remove the current value.
154
+ if ( styles )
155
+ {
156
+ styles = styles
157
+ .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )
158
+ .replace( /^[;\s]+/, '' )
159
+ .replace( /\s+$/, '' );
160
+ }
161
+
162
+ if ( value )
163
+ {
164
+ styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );
165
+ styles += name + ': ' + value;
166
+ }
167
+
168
+ this.setValue( styles, 1 );
169
+
170
+ },
171
+
172
+ setup : setupAdvParams,
173
+
174
+ commit : commitAdvParams
175
+
176
+ });
177
+ }
178
+
179
+ if ( tabConfig.classes )
180
+ {
181
+ contents.push(
182
+ {
183
+ type : 'hbox',
184
+ widths : [ '45%', '55%' ],
185
+ children :
186
+ [
187
+ {
188
+ id : 'advCSSClasses',
189
+ att : 'class',
190
+ type : 'text',
191
+ label : lang.cssClasses,
192
+ 'default' : '',
193
+ setup : setupAdvParams,
194
+ commit : commitAdvParams
195
+
196
+ }
197
+ ]
198
+ });
199
+ }
200
+
201
+ result.elements[ 0 ].children.push(
202
+ {
203
+ type : 'hbox',
204
+ widths : [ '50%', '50%' ],
205
+ children : [].concat( contents )
206
+ });
207
+ }
208
+
209
+ return result;
210
+ }
211
+ });
212
+
213
+ })();
@@ -0,0 +1,1523 @@
1
+ /*
2
+ Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
3
+ For licensing, see LICENSE.html or http://ckeditor.com/license
4
+ */
5
+
6
+ /** @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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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] ), '" /> ',
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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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.uiElementDefinition} 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
+ })();