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