refinerycms-core 2.1.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (449) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/refinery/add.png +0 -0
  3. data/app/assets/images/refinery/admin_bg.png +0 -0
  4. data/app/assets/images/refinery/ajax-loader.gif +0 -0
  5. data/app/assets/images/refinery/branch-end.gif +0 -0
  6. data/app/assets/images/refinery/branch.gif +0 -0
  7. data/app/assets/images/refinery/cross.png +0 -0
  8. data/app/assets/images/refinery/dialogLoadingAnimation.gif +0 -0
  9. data/app/assets/images/refinery/header_background.png +0 -0
  10. data/app/assets/images/refinery/hover-gradient.jpg +0 -0
  11. data/app/assets/images/refinery/icons/accept.png +0 -0
  12. data/app/assets/images/refinery/icons/add.png +0 -0
  13. data/app/assets/images/refinery/icons/ajax-loader.gif +0 -0
  14. data/app/assets/images/refinery/icons/application_edit.png +0 -0
  15. data/app/assets/images/refinery/icons/application_go.png +0 -0
  16. data/app/assets/images/refinery/icons/arrow_left.png +0 -0
  17. data/app/assets/images/refinery/icons/arrow_left_right.png +0 -0
  18. data/app/assets/images/refinery/icons/arrow_switch.png +0 -0
  19. data/app/assets/images/refinery/icons/arrow_up.png +0 -0
  20. data/app/assets/images/refinery/icons/arrow_up_down.png +0 -0
  21. data/app/assets/images/refinery/icons/bin.png +0 -0
  22. data/app/assets/images/refinery/icons/bin_closed.png +0 -0
  23. data/app/assets/images/refinery/icons/cancel.png +0 -0
  24. data/app/assets/images/refinery/icons/cog_add.png +0 -0
  25. data/app/assets/images/refinery/icons/cog_edit.png +0 -0
  26. data/app/assets/images/refinery/icons/cross.png +0 -0
  27. data/app/assets/images/refinery/icons/delete.png +0 -0
  28. data/app/assets/images/refinery/icons/doc.png +0 -0
  29. data/app/assets/images/refinery/icons/down.gif +0 -0
  30. data/app/assets/images/refinery/icons/edit.png +0 -0
  31. data/app/assets/images/refinery/icons/email.png +0 -0
  32. data/app/assets/images/refinery/icons/email_edit.png +0 -0
  33. data/app/assets/images/refinery/icons/email_go.png +0 -0
  34. data/app/assets/images/refinery/icons/email_open.png +0 -0
  35. data/app/assets/images/refinery/icons/eye.png +0 -0
  36. data/app/assets/images/refinery/icons/folder.png +0 -0
  37. data/app/assets/images/refinery/icons/folder_open.png +0 -0
  38. data/app/assets/images/refinery/icons/folder_page_white.png +0 -0
  39. data/app/assets/images/refinery/icons/image_add.png +0 -0
  40. data/app/assets/images/refinery/icons/image_edit.png +0 -0
  41. data/app/assets/images/refinery/icons/img.png +0 -0
  42. data/app/assets/images/refinery/icons/information.png +0 -0
  43. data/app/assets/images/refinery/icons/layout_add.png +0 -0
  44. data/app/assets/images/refinery/icons/layout_edit.png +0 -0
  45. data/app/assets/images/refinery/icons/locale-blue.svg +15 -0
  46. data/app/assets/images/refinery/icons/locale.svg +11 -0
  47. data/app/assets/images/refinery/icons/music.png +0 -0
  48. data/app/assets/images/refinery/icons/page.png +0 -0
  49. data/app/assets/images/refinery/icons/page_add.png +0 -0
  50. data/app/assets/images/refinery/icons/page_edit.png +0 -0
  51. data/app/assets/images/refinery/icons/page_white_edit.png +0 -0
  52. data/app/assets/images/refinery/icons/page_white_gear.png +0 -0
  53. data/app/assets/images/refinery/icons/page_white_put.png +0 -0
  54. data/app/assets/images/refinery/icons/pdf.png +0 -0
  55. data/app/assets/images/refinery/icons/ppt.png +0 -0
  56. data/app/assets/images/refinery/icons/star.png +0 -0
  57. data/app/assets/images/refinery/icons/tick.png +0 -0
  58. data/app/assets/images/refinery/icons/up.gif +0 -0
  59. data/app/assets/images/refinery/icons/user_add.png +0 -0
  60. data/app/assets/images/refinery/icons/user_comment.png +0 -0
  61. data/app/assets/images/refinery/icons/user_edit.png +0 -0
  62. data/app/assets/images/refinery/icons/xls.png +0 -0
  63. data/app/assets/images/refinery/icons/zip.png +0 -0
  64. data/app/assets/images/refinery/icons/zoom.png +0 -0
  65. data/app/assets/images/refinery/logo-large.png +0 -0
  66. data/app/assets/images/refinery/logo-medium.png +0 -0
  67. data/app/assets/images/refinery/logo-site-bar.png +0 -0
  68. data/app/assets/images/refinery/logo-small-medium.png +0 -0
  69. data/app/assets/images/refinery/logo-small.png +0 -0
  70. data/app/assets/images/refinery/logo-tiny.png +0 -0
  71. data/app/assets/images/refinery/logo.png +0 -0
  72. data/app/assets/images/refinery/nav-3-background.gif +0 -0
  73. data/app/assets/images/refinery/nav_inactive_background.png +0 -0
  74. data/app/assets/images/refinery/orange_button.png +0 -0
  75. data/app/assets/images/refinery/page_bg.png +0 -0
  76. data/app/assets/images/refinery/text_field_background.png +0 -0
  77. data/app/assets/images/refinery/tooltip-nib.gif +0 -0
  78. data/app/assets/images/refinery/tooltip-nib.png +0 -0
  79. data/app/assets/javascripts/admin.js +7 -6
  80. data/app/assets/javascripts/refinery/admin.js.erb +99 -60
  81. data/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee +2 -5
  82. data/app/assets/javascripts/refinery/application.js +8 -0
  83. data/app/assets/javascripts/refinery/core.js +4 -18
  84. data/app/assets/javascripts/refinery/interface.js.coffee.erb +5 -29
  85. data/app/assets/javascripts/refinery/modal_dialogs.js.erb +0 -105
  86. data/app/assets/javascripts/refinery/nestedsortables.js +183 -110
  87. data/app/assets/javascripts/refinery/refinery.js.erb +3 -9
  88. data/app/assets/javascripts/refinery/serializelist.js +1 -1
  89. data/app/assets/javascripts/refinery/site_bar.js +0 -5
  90. data/app/assets/javascripts/refinery/sortable_list.js +10 -11
  91. data/app/assets/javascripts/refinery/submit_continue.js.coffee.erb +1 -1
  92. data/app/assets/stylesheets/application.scss +2 -0
  93. data/app/assets/stylesheets/refinery/_colours.scss +18 -0
  94. data/app/assets/stylesheets/refinery/_icons.scss +85 -0
  95. data/app/assets/stylesheets/refinery/{layout.css.scss → _layout.scss} +306 -338
  96. data/app/assets/stylesheets/refinery/_mixins.scss +84 -0
  97. data/app/assets/stylesheets/refinery/{submenu.css.scss → _submenu.scss} +2 -2
  98. data/app/assets/stylesheets/refinery/{tooltips.css.scss → _tooltips.scss} +0 -0
  99. data/app/assets/stylesheets/refinery/_ui.scss +252 -0
  100. data/app/assets/stylesheets/refinery/{formatting.css.scss → formatting.scss} +0 -0
  101. data/app/assets/stylesheets/refinery/refinery.scss +10 -0
  102. data/app/assets/stylesheets/refinery/site_bar.scss +126 -0
  103. data/app/assets/stylesheets/refinery/{theme.css.scss → theme.scss} +0 -0
  104. data/app/controllers/refinery/admin/core_controller.rb +2 -7
  105. data/app/controllers/refinery/admin/dialogs_controller.rb +4 -3
  106. data/app/controllers/refinery/admin_controller.rb +0 -1
  107. data/app/controllers/refinery/fast_controller.rb +0 -4
  108. data/app/helpers/refinery/admin/visual_editor_helper.rb +13 -0
  109. data/app/helpers/refinery/admin_helper.rb +4 -0
  110. data/app/helpers/refinery/custom_assets_helper.rb +2 -2
  111. data/app/helpers/refinery/image_helper.rb +9 -8
  112. data/app/helpers/refinery/meta_helper.rb +1 -1
  113. data/app/helpers/refinery/site_bar_helper.rb +16 -2
  114. data/app/helpers/refinery/tag_helper.rb +38 -5
  115. data/app/models/refinery/core/base_model.rb +3 -1
  116. data/app/views/layouts/refinery/admin.html.erb +12 -10
  117. data/app/views/layouts/refinery/admin_dialog.html.erb +1 -4
  118. data/app/views/refinery/_content_page.html.erb +1 -1
  119. data/app/views/refinery/_google_analytics.html.erb +8 -9
  120. data/app/views/refinery/_head.html.erb +1 -1
  121. data/app/views/refinery/_javascripts.html.erb +0 -15
  122. data/app/views/refinery/_message.html.erb +1 -1
  123. data/app/views/refinery/_site_bar.html.erb +9 -6
  124. data/app/views/refinery/admin/_error_messages.html.erb +4 -4
  125. data/app/views/refinery/admin/_form_actions.html.erb +1 -0
  126. data/app/views/refinery/admin/_form_advanced_options_menu.html.erb +3 -4
  127. data/app/views/refinery/admin/_head.html.erb +3 -0
  128. data/app/views/refinery/admin/_image_picker.html.erb +4 -5
  129. data/app/views/refinery/admin/_javascripts.html.erb +4 -9
  130. data/app/views/refinery/admin/_locale_picker.html.erb +9 -2
  131. data/app/views/refinery/admin/_make_sortable.html.erb +8 -6
  132. data/app/views/refinery/admin/_menu.html.erb +2 -15
  133. data/app/views/refinery/admin/_menu_item.html.erb +3 -0
  134. data/app/views/refinery/admin/_resource_picker.html.erb +12 -22
  135. data/app/views/refinery/admin/_search.html.erb +1 -1
  136. data/app/views/refinery/admin/_tabbed_fields.html.erb +2 -2
  137. data/app/views/refinery/admin/_wysiwyg.html.erb +1 -1
  138. data/{lib/generators/refinery/cms/templates/app/decorators/controllers/refinery/.gitkeep → app/views/refinery/admin/dialog_success.html.erb} +0 -0
  139. data/app/views/refinery/admin/dialogs/show.html.erb +1 -19
  140. data/config/initializers/assets.rb +6 -0
  141. data/config/locales/ca.yml +84 -0
  142. data/config/locales/cs.yml +12 -5
  143. data/config/locales/en.yml +6 -2
  144. data/config/locales/fr.yml +15 -11
  145. data/config/locales/hu.yml +3 -1
  146. data/config/locales/it.yml +5 -1
  147. data/config/locales/ja.yml +2 -2
  148. data/config/locales/pt.yml +5 -3
  149. data/config/locales/ru.yml +7 -0
  150. data/config/locales/sl.yml +0 -3
  151. data/config/locales/tr.yml +43 -41
  152. data/config/routes.rb +1 -4
  153. data/lib/generators/refinery/cms/cms_generator.rb +68 -26
  154. data/lib/generators/refinery/cms/templates/app/decorators/{models/refinery/.gitkeep → controllers/refinery/.keep} +0 -0
  155. data/lib/generators/refinery/{form/templates/.gitkeep → cms/templates/app/decorators/models/refinery/.keep} +0 -0
  156. data/lib/generators/refinery/cms/templates/config/database.yml.mysql +3 -3
  157. data/lib/generators/refinery/cms/templates/config/database.yml.postgresql +3 -3
  158. data/lib/generators/refinery/core/templates/config/initializers/refinery/core.rb.erb +18 -5
  159. data/lib/generators/refinery/dummy/dummy_generator.rb +3 -1
  160. data/lib/generators/refinery/dummy/templates/rails/application.js +3 -0
  161. data/lib/generators/refinery/dummy/templates/rails/application.rb.erb +0 -2
  162. data/lib/generators/refinery/dummy/templates/rails/blank.png +0 -0
  163. data/lib/generators/refinery/dummy/templates/rails/routes.rb +1 -1
  164. data/lib/generators/refinery/engine/engine_generator.rb +3 -2
  165. data/lib/generators/refinery/engine/templates/Gemfile +9 -4
  166. data/lib/generators/refinery/engine/templates/Rakefile +3 -4
  167. data/lib/generators/refinery/engine/templates/app/controllers/refinery/namespace/admin/plural_name_controller.rb.erb +11 -2
  168. data/lib/generators/refinery/engine/templates/app/controllers/refinery/namespace/plural_name_controller.rb.erb +2 -2
  169. data/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb +5 -5
  170. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_actions.html.erb +7 -12
  171. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb +8 -8
  172. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +3 -3
  173. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_singular_name.html.erb +6 -11
  174. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/index.html.erb +1 -1
  175. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/plural_name/show.html.erb +4 -4
  176. data/lib/generators/refinery/engine/templates/db/migrate/1_create_namespace_plural_name.rb.erb +2 -9
  177. data/lib/generators/refinery/engine/templates/db/seeds.rb.erb +13 -19
  178. data/lib/generators/refinery/engine/templates/lib/refinery/plural_name/engine.rb.erb +0 -4
  179. data/lib/generators/refinery/engine/templates/readme.md +3 -3
  180. data/lib/generators/refinery/engine/templates/refinerycms-extension_plural_name.gemspec +1 -0
  181. data/lib/generators/refinery/engine/templates/spec/features/refinery/namespace/admin/plural_name_spec.rb.erb +25 -28
  182. data/lib/generators/refinery/engine/templates/spec/models/refinery/namespace/singular_name_spec.rb.erb +1 -1
  183. data/lib/generators/refinery/engine/templates/spec/spec_helper.rb +1 -1
  184. data/lib/refinery.rb +7 -9
  185. data/lib/refinery/admin/base_controller.rb +42 -32
  186. data/lib/refinery/application_controller.rb +25 -17
  187. data/lib/refinery/cli.rb +54 -19
  188. data/lib/refinery/core.rb +5 -0
  189. data/lib/refinery/core/authorisation_adapter.rb +11 -0
  190. data/lib/refinery/core/authorisation_manager.rb +14 -0
  191. data/lib/refinery/core/configuration.rb +25 -4
  192. data/lib/refinery/core/default_route.rb +16 -0
  193. data/lib/refinery/core/engine.rb +44 -25
  194. data/lib/refinery/core/nil_user.rb +42 -0
  195. data/lib/refinery/crud.rb +40 -29
  196. data/lib/refinery/extension_generation.rb +11 -22
  197. data/lib/refinery/generators/generated_attribute.rb +54 -0
  198. data/lib/refinery/generators/named_base.rb +16 -0
  199. data/lib/refinery/menu.rb +3 -2
  200. data/lib/refinery/menu_item.rb +1 -1
  201. data/lib/refinery/plugin.rb +27 -43
  202. data/lib/refinery/plugins.rb +22 -26
  203. data/lib/refinery/users_manager.rb +8 -0
  204. data/lib/refinery/version.rb +7 -3
  205. data/lib/tasks/refinery.rake +7 -0
  206. data/license.md +1 -1
  207. data/refinerycms-core.gemspec +11 -8
  208. data/spec/controllers/refinery/admin/dummy_controller_spec.rb +23 -11
  209. data/spec/controllers/refinery/sitemap_controller_spec.rb +2 -2
  210. data/spec/features/refinery/admin/custom_assets_spec.rb +12 -10
  211. data/spec/features/refinery/admin/dialogs_spec.rb +5 -5
  212. data/spec/features/refinery/admin/xhr_paging_spec.rb +24 -38
  213. data/spec/features/refinery/application_layout_spec.rb +3 -3
  214. data/spec/features/refinery/core_spec.rb +1 -1
  215. data/spec/features/refinery/site_bar_spec.rb +44 -23
  216. data/spec/helpers/refinery/admin_helper_spec.rb +15 -0
  217. data/spec/helpers/refinery/custom_assets_helper_spec.rb +15 -23
  218. data/spec/helpers/refinery/html_truncation_helper_spec.rb +10 -5
  219. data/spec/helpers/refinery/meta_helper_spec.rb +3 -3
  220. data/spec/helpers/refinery/pagination_helper_spec.rb +7 -7
  221. data/spec/helpers/refinery/tag_helper_spec.rb +4 -4
  222. data/spec/helpers/refinery/translation_helper_spec.rb +3 -3
  223. data/spec/lib/generators/refinery/cms/cms_generator_spec.rb +30 -25
  224. data/spec/lib/generators/refinery/core/core_generator_spec.rb +1 -1
  225. data/spec/lib/generators/refinery/engine/engine_generator_multiple_resources_spec.rb +7 -8
  226. data/spec/lib/generators/refinery/engine/engine_generator_sanity_check_spec.rb +15 -15
  227. data/spec/lib/generators/refinery/engine/engine_generator_spec.rb +9 -9
  228. data/spec/lib/generators/refinery/engine/engine_generator_with_i18n_spec.rb +1 -1
  229. data/spec/lib/generators/refinery/engine/engine_generator_without_frontend_spec.rb +1 -1
  230. data/spec/lib/refinery/application_controller_spec.rb +16 -16
  231. data/spec/lib/refinery/authorisation_manager_spec.rb +10 -0
  232. data/spec/lib/refinery/cli_spec.rb +83 -21
  233. data/spec/lib/refinery/core/configuration_spec.rb +5 -5
  234. data/spec/lib/refinery/core/nil_user_spec.rb +39 -0
  235. data/spec/lib/refinery/core_spec.rb +39 -30
  236. data/spec/lib/refinery/crud_spec.rb +70 -59
  237. data/spec/lib/refinery/menu_spec.rb +4 -4
  238. data/spec/lib/refinery/plugin_spec.rb +56 -45
  239. data/spec/lib/refinery/plugins_spec.rb +39 -87
  240. data/spec/lib/refinery/users_manager_spec.rb +9 -0
  241. data/spec/support/refinery.rb +3 -8
  242. data/vendor/assets/fonts/font-awesome/FontAwesome.otf +0 -0
  243. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.eot +0 -0
  244. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.svg +565 -0
  245. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
  246. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff +0 -0
  247. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff2 +0 -0
  248. data/vendor/assets/stylesheets/_font-awesome-compass.scss +5 -0
  249. data/vendor/assets/stylesheets/_font-awesome-sprockets.scss +5 -0
  250. data/vendor/assets/stylesheets/_font-awesome.scss +17 -0
  251. data/vendor/assets/stylesheets/font-awesome/_animated.scss +34 -0
  252. data/vendor/assets/stylesheets/font-awesome/_bordered-pulled.scss +16 -0
  253. data/vendor/assets/stylesheets/font-awesome/_core.scss +12 -0
  254. data/vendor/assets/stylesheets/font-awesome/_extras.scss +44 -0
  255. data/vendor/assets/stylesheets/font-awesome/_fixed-width.scss +6 -0
  256. data/vendor/assets/stylesheets/font-awesome/_icons.scss +596 -0
  257. data/vendor/assets/stylesheets/font-awesome/_larger.scss +13 -0
  258. data/vendor/assets/stylesheets/font-awesome/_list.scss +19 -0
  259. data/vendor/assets/stylesheets/font-awesome/_mixins.scss +26 -0
  260. data/vendor/assets/stylesheets/font-awesome/_path.scss +14 -0
  261. data/vendor/assets/stylesheets/font-awesome/_rotated-flipped.scss +20 -0
  262. data/vendor/assets/stylesheets/font-awesome/_stacked.scss +20 -0
  263. data/vendor/assets/stylesheets/font-awesome/_variables.scss +606 -0
  264. metadata +144 -441
  265. data/app/assets/images/refinery/carousel-left.png +0 -0
  266. data/app/assets/images/refinery/carousel-right.png +0 -0
  267. data/app/assets/images/wymeditor/skins/refinery/arrow_redo.png +0 -0
  268. data/app/assets/images/wymeditor/skins/refinery/arrow_undo.png +0 -0
  269. data/app/assets/images/wymeditor/skins/refinery/eye.png +0 -0
  270. data/app/assets/images/wymeditor/skins/refinery/html5/article.png +0 -0
  271. data/app/assets/images/wymeditor/skins/refinery/html5/aside.png +0 -0
  272. data/app/assets/images/wymeditor/skins/refinery/html5/blockquote.png +0 -0
  273. data/app/assets/images/wymeditor/skins/refinery/html5/command.png +0 -0
  274. data/app/assets/images/wymeditor/skins/refinery/html5/details.png +0 -0
  275. data/app/assets/images/wymeditor/skins/refinery/html5/figcaption.png +0 -0
  276. data/app/assets/images/wymeditor/skins/refinery/html5/figure.png +0 -0
  277. data/app/assets/images/wymeditor/skins/refinery/html5/footer.png +0 -0
  278. data/app/assets/images/wymeditor/skins/refinery/html5/h1.png +0 -0
  279. data/app/assets/images/wymeditor/skins/refinery/html5/h2.png +0 -0
  280. data/app/assets/images/wymeditor/skins/refinery/html5/h3.png +0 -0
  281. data/app/assets/images/wymeditor/skins/refinery/html5/h4.png +0 -0
  282. data/app/assets/images/wymeditor/skins/refinery/html5/h5.png +0 -0
  283. data/app/assets/images/wymeditor/skins/refinery/html5/h6.png +0 -0
  284. data/app/assets/images/wymeditor/skins/refinery/html5/header.png +0 -0
  285. data/app/assets/images/wymeditor/skins/refinery/html5/hgroup.png +0 -0
  286. data/app/assets/images/wymeditor/skins/refinery/html5/mark.png +0 -0
  287. data/app/assets/images/wymeditor/skins/refinery/html5/meter.png +0 -0
  288. data/app/assets/images/wymeditor/skins/refinery/html5/nav.png +0 -0
  289. data/app/assets/images/wymeditor/skins/refinery/html5/p.png +0 -0
  290. data/app/assets/images/wymeditor/skins/refinery/html5/pre.png +0 -0
  291. data/app/assets/images/wymeditor/skins/refinery/html5/progress.png +0 -0
  292. data/app/assets/images/wymeditor/skins/refinery/html5/readme.md +0 -1
  293. data/app/assets/images/wymeditor/skins/refinery/html5/rp.png +0 -0
  294. data/app/assets/images/wymeditor/skins/refinery/html5/rt.png +0 -0
  295. data/app/assets/images/wymeditor/skins/refinery/html5/ruby.png +0 -0
  296. data/app/assets/images/wymeditor/skins/refinery/html5/section.png +0 -0
  297. data/app/assets/images/wymeditor/skins/refinery/html5/summary.png +0 -0
  298. data/app/assets/images/wymeditor/skins/refinery/html5/time.png +0 -0
  299. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-blockquote.png +0 -0
  300. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h1.png +0 -0
  301. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h2.png +0 -0
  302. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h3.png +0 -0
  303. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h4.png +0 -0
  304. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h5.png +0 -0
  305. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-h6.png +0 -0
  306. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-p.png +0 -0
  307. data/app/assets/images/wymeditor/skins/refinery/iframe/lbl-pre.png +0 -0
  308. data/app/assets/images/wymeditor/skins/refinery/link_add.png +0 -0
  309. data/app/assets/images/wymeditor/skins/refinery/link_break.png +0 -0
  310. data/app/assets/images/wymeditor/skins/refinery/page_code.png +0 -0
  311. data/app/assets/images/wymeditor/skins/refinery/page_paste.png +0 -0
  312. data/app/assets/images/wymeditor/skins/refinery/photo_add.png +0 -0
  313. data/app/assets/images/wymeditor/skins/refinery/right.png +0 -0
  314. data/app/assets/images/wymeditor/skins/refinery/style.png +0 -0
  315. data/app/assets/images/wymeditor/skins/refinery/table_add.png +0 -0
  316. data/app/assets/images/wymeditor/skins/refinery/text_align_center.png +0 -0
  317. data/app/assets/images/wymeditor/skins/refinery/text_align_justify.png +0 -0
  318. data/app/assets/images/wymeditor/skins/refinery/text_align_left.png +0 -0
  319. data/app/assets/images/wymeditor/skins/refinery/text_align_right.png +0 -0
  320. data/app/assets/images/wymeditor/skins/refinery/text_bold.png +0 -0
  321. data/app/assets/images/wymeditor/skins/refinery/text_heading_1.png +0 -0
  322. data/app/assets/images/wymeditor/skins/refinery/text_heading_2.png +0 -0
  323. data/app/assets/images/wymeditor/skins/refinery/text_heading_3.png +0 -0
  324. data/app/assets/images/wymeditor/skins/refinery/text_heading_4.png +0 -0
  325. data/app/assets/images/wymeditor/skins/refinery/text_heading_5.png +0 -0
  326. data/app/assets/images/wymeditor/skins/refinery/text_heading_6.png +0 -0
  327. data/app/assets/images/wymeditor/skins/refinery/text_indent.png +0 -0
  328. data/app/assets/images/wymeditor/skins/refinery/text_indent_remove.png +0 -0
  329. data/app/assets/images/wymeditor/skins/refinery/text_italic.png +0 -0
  330. data/app/assets/images/wymeditor/skins/refinery/text_list_bullets.png +0 -0
  331. data/app/assets/images/wymeditor/skins/refinery/text_list_numbers.png +0 -0
  332. data/app/assets/images/wymeditor/skins/refinery/text_paragraph.png +0 -0
  333. data/app/assets/images/wymeditor/skins/refinery/text_strikethrough.png +0 -0
  334. data/app/assets/images/wymeditor/skins/refinery/text_subscript.png +0 -0
  335. data/app/assets/images/wymeditor/skins/refinery/text_superscript.png +0 -0
  336. data/app/assets/images/wymeditor/skins/refinery/text_underline.png +0 -0
  337. data/app/assets/images/wymeditor/skins/wymeditor_icon.png +0 -0
  338. data/app/assets/javascripts/refinery/boot_wym.js.erb +0 -285
  339. data/app/assets/javascripts/refinery/sortable_menu.js.coffee.erb +0 -20
  340. data/app/assets/javascripts/refinery/wymeditor.js +0 -37
  341. data/app/assets/javascripts/wymeditor/GPL-license.txt +0 -278
  342. data/app/assets/javascripts/wymeditor/MIT-license.txt +0 -20
  343. data/app/assets/javascripts/wymeditor/README +0 -35
  344. data/app/assets/javascripts/wymeditor/browsers/ie.js.erb +0 -224
  345. data/app/assets/javascripts/wymeditor/browsers/mozilla.js.erb +0 -292
  346. data/app/assets/javascripts/wymeditor/browsers/opera.js.erb +0 -123
  347. data/app/assets/javascripts/wymeditor/browsers/webkit.js.erb +0 -283
  348. data/app/assets/javascripts/wymeditor/classes.js.erb +0 -1575
  349. data/app/assets/javascripts/wymeditor/functions.js.erb +0 -222
  350. data/app/assets/javascripts/wymeditor/lang/bg.js +0 -57
  351. data/app/assets/javascripts/wymeditor/lang/ca.js +0 -45
  352. data/app/assets/javascripts/wymeditor/lang/cs.js +0 -58
  353. data/app/assets/javascripts/wymeditor/lang/da.js +0 -48
  354. data/app/assets/javascripts/wymeditor/lang/de.js +0 -45
  355. data/app/assets/javascripts/wymeditor/lang/en.js +0 -57
  356. data/app/assets/javascripts/wymeditor/lang/es.js +0 -58
  357. data/app/assets/javascripts/wymeditor/lang/fa.js +0 -46
  358. data/app/assets/javascripts/wymeditor/lang/fi.js +0 -57
  359. data/app/assets/javascripts/wymeditor/lang/fr.js +0 -58
  360. data/app/assets/javascripts/wymeditor/lang/he.js +0 -45
  361. data/app/assets/javascripts/wymeditor/lang/hu.js +0 -45
  362. data/app/assets/javascripts/wymeditor/lang/it.js +0 -48
  363. data/app/assets/javascripts/wymeditor/lang/ja.js +0 -47
  364. data/app/assets/javascripts/wymeditor/lang/lv.js +0 -47
  365. data/app/assets/javascripts/wymeditor/lang/nb.js +0 -48
  366. data/app/assets/javascripts/wymeditor/lang/nl.js +0 -57
  367. data/app/assets/javascripts/wymeditor/lang/nn.js +0 -45
  368. data/app/assets/javascripts/wymeditor/lang/pl.js +0 -56
  369. data/app/assets/javascripts/wymeditor/lang/pt-BR.js +0 -58
  370. data/app/assets/javascripts/wymeditor/lang/pt.js +0 -45
  371. data/app/assets/javascripts/wymeditor/lang/rs.js +0 -47
  372. data/app/assets/javascripts/wymeditor/lang/ru.js +0 -57
  373. data/app/assets/javascripts/wymeditor/lang/sk.js +0 -56
  374. data/app/assets/javascripts/wymeditor/lang/sl.js +0 -47
  375. data/app/assets/javascripts/wymeditor/lang/sv.js +0 -45
  376. data/app/assets/javascripts/wymeditor/lang/tr.js +0 -45
  377. data/app/assets/javascripts/wymeditor/lang/vi.js +0 -47
  378. data/app/assets/javascripts/wymeditor/lang/zh-CN.js +0 -47
  379. data/app/assets/javascripts/wymeditor/prototypes.js.erb +0 -1103
  380. data/app/assets/javascripts/wymeditor/setup.js.erb +0 -622
  381. data/app/assets/javascripts/wymeditor/skins/refinery/skin.js +0 -45
  382. data/app/assets/javascripts/wymeditor/validators.js.erb +0 -777
  383. data/app/assets/stylesheets/refinery/refinery.css +0 -15
  384. data/app/assets/stylesheets/refinery/site_bar.css.scss +0 -92
  385. data/app/assets/stylesheets/refinery/ui.css.scss +0 -103
  386. data/app/assets/stylesheets/wymeditor/skins/refinery/skin.css.scss +0 -530
  387. data/app/assets/stylesheets/wymeditor/skins/refinery/wymiframe.css.scss +0 -156
  388. data/app/helpers/refinery/admin/core_helper.rb +0 -6
  389. data/app/helpers/refinery/admin/dialogs_helper.rb +0 -6
  390. data/app/helpers/refinery/fast_helper.rb +0 -4
  391. data/app/helpers/refinery/sitemap_helper.rb +0 -4
  392. data/app/views/refinery/wymiframe.html.erb +0 -14
  393. data/lib/generators/refinery/form/USAGE +0 -20
  394. data/lib/generators/refinery/form/form_generator.rb +0 -25
  395. data/lib/generators/refinery/form/templates/.gitignore +0 -2
  396. data/lib/generators/refinery/form/templates/app/controllers/refinery/namespace/admin/plural_name_controller.rb.erb +0 -54
  397. data/lib/generators/refinery/form/templates/app/controllers/refinery/namespace/admin/settings_controller.rb.erb +0 -45
  398. data/lib/generators/refinery/form/templates/app/controllers/refinery/namespace/plural_name_controller.rb.erb +0 -53
  399. data/lib/generators/refinery/form/templates/app/mailers/refinery/namespace/mailer.rb.erb +0 -22
  400. data/lib/generators/refinery/form/templates/app/models/refinery/namespace/setting.rb.erb +0 -34
  401. data/lib/generators/refinery/form/templates/app/models/refinery/namespace/singular_name.rb.erb +0 -49
  402. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +0 -23
  403. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_singular_name.html.erb +0 -25
  404. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_submenu.html.erb +0 -29
  405. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/index.html.erb +0 -4
  406. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/show.html.erb +0 -52
  407. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/spam.html.erb +0 -27
  408. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/settings/_confirmation_email_form.html.erb +0 -51
  409. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/settings/_notification_recipients_form.html.erb +0 -21
  410. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/settings/edit.html.erb +0 -5
  411. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/mailer/confirmation.html.erb +0 -1
  412. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/mailer/notification.html.erb +0 -17
  413. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/plural_name/new.html.erb +0 -43
  414. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/plural_name/thank_you.html.erb +0 -1
  415. data/lib/generators/refinery/form/templates/config/locales/cs.yml +0 -78
  416. data/lib/generators/refinery/form/templates/config/locales/da.yml +0 -66
  417. data/lib/generators/refinery/form/templates/config/locales/de.yml +0 -78
  418. data/lib/generators/refinery/form/templates/config/locales/en.yml +0 -78
  419. data/lib/generators/refinery/form/templates/config/locales/es.yml +0 -66
  420. data/lib/generators/refinery/form/templates/config/locales/fr.yml +0 -78
  421. data/lib/generators/refinery/form/templates/config/locales/it.yml +0 -66
  422. data/lib/generators/refinery/form/templates/config/locales/lv.yml +0 -77
  423. data/lib/generators/refinery/form/templates/config/locales/nb.yml +0 -75
  424. data/lib/generators/refinery/form/templates/config/locales/nl.yml +0 -78
  425. data/lib/generators/refinery/form/templates/config/locales/pt-BR.yml +0 -78
  426. data/lib/generators/refinery/form/templates/config/locales/ru.yml +0 -77
  427. data/lib/generators/refinery/form/templates/config/locales/sk.yml +0 -78
  428. data/lib/generators/refinery/form/templates/config/locales/sl.yml +0 -67
  429. data/lib/generators/refinery/form/templates/config/locales/tr.yml +0 -78
  430. data/lib/generators/refinery/form/templates/config/locales/zh-CN.yml +0 -78
  431. data/lib/generators/refinery/form/templates/config/routes.rb.erb +0 -26
  432. data/lib/generators/refinery/form/templates/db/migrate/1_create_plural_name.rb.erb +0 -39
  433. data/lib/generators/refinery/form/templates/db/seeds.rb.erb +0 -31
  434. data/lib/generators/refinery/form/templates/lib/generators/refinery/plural_name_generator.rb.erb +0 -20
  435. data/lib/generators/refinery/form/templates/lib/refinery/plural_name.rb.erb +0 -18
  436. data/lib/generators/refinery/form/templates/lib/refinery/plural_name/engine.rb.erb +0 -27
  437. data/lib/generators/refinery/form/templates/lib/refinerycms-plural_name.rb.erb +0 -1
  438. data/lib/generators/refinery/form/templates/refinerycms-plural_name.gemspec +0 -16
  439. data/lib/generators/refinery/form/templates/script/rails +0 -10
  440. data/lib/refinery/activity.rb +0 -113
  441. data/lib/refinery/ext/action_view/helpers/form_builder.rb +0 -9
  442. data/lib/refinery/ext/action_view/helpers/form_helper.rb +0 -20
  443. data/lib/refinery/ext/action_view/helpers/form_tag_helper.rb +0 -10
  444. data/spec/controllers/refinery/admin/refinery_core_controller_spec.rb +0 -19
  445. data/spec/controllers/refinery/fast_controller_spec.rb +0 -12
  446. data/spec/lib/generators/refinery/form/form_generator_spec.rb +0 -99
  447. data/spec/lib/refinery/activity_spec.rb +0 -46
  448. data/spec/support/background_selenium_firefox_driver.rb +0 -14
  449. data/vendor/assets/javascripts/jquery/jquery.jcarousel.js +0 -900
@@ -1,1575 +0,0 @@
1
- /********** XHTML LEXER/PARSER **********/
2
-
3
- /*
4
- * @name xml
5
- * @description Use these methods to generate XML and XHTML compliant tags and
6
- * escape tag attributes correctly
7
- * @author Bermi Ferrer - http://bermi.org
8
- * @author David Heinemeier Hansson http://loudthinking.com
9
- */
10
- WYMeditor.XmlHelper = function()
11
- {
12
- this._entitiesDiv = document.createElement('div');
13
- return this;
14
- };
15
-
16
-
17
- /*
18
- * @name tag
19
- * @description
20
- * Returns an empty HTML tag of type *name* which by default is XHTML
21
- * compliant. Setting *open* to true will create an open tag compatible
22
- * with HTML 4.0 and below. Add HTML attributes by passing an attributes
23
- * array to *options*. For attributes with no value like (disabled and
24
- * readonly), give it a value of true in the *options* array.
25
- *
26
- * Examples:
27
- *
28
- * this.tag('br')
29
- * # => <br />
30
- * this.tag ('br', false, true)
31
- * # => <br>
32
- * this.tag ('input', $({type:'text',disabled:true }) )
33
- * # => <input type="text" disabled="disabled" />
34
- */
35
- WYMeditor.XmlHelper.prototype.tag = function(name, options, open)
36
- {
37
- options = options || false;
38
- open = open || false;
39
- return '<'+name+(options ? this.tagOptions(options) : '')+(open ? '>' : ' />');
40
- };
41
-
42
- /*
43
- * @name contentTag
44
- * @description
45
- * Returns a XML block tag of type *name* surrounding the *content*. Add
46
- * XML attributes by passing an attributes array to *options*. For attributes
47
- * with no value like (disabled and readonly), give it a value of true in
48
- * the *options* array. You can use symbols or strings for the attribute names.
49
- *
50
- * this.contentTag ('p', 'Hello world!' )
51
- * # => <p>Hello world!</p>
52
- * this.contentTag('div', this.contentTag('p', "Hello world!"), $({class : "strong"}))
53
- * # => <div class="strong"><p>Hello world!</p></div>
54
- * this.contentTag("select", options, $({multiple : true}))
55
- * # => <select multiple="multiple">...options...</select>
56
- */
57
- WYMeditor.XmlHelper.prototype.contentTag = function(name, content, options)
58
- {
59
- options = options || false;
60
- return '<'+name+(options ? this.tagOptions(options) : '')+'>'+content+'</'+name+'>';
61
- };
62
-
63
- /*
64
- * @name cdataSection
65
- * @description
66
- * Returns a CDATA section for the given +content+. CDATA sections
67
- * are used to escape blocks of text containing characters which would
68
- * otherwise be recognized as markup. CDATA sections begin with the string
69
- * <tt>&lt;![CDATA[</tt> and } with (and may not contain) the string
70
- * <tt>]]></tt>.
71
- */
72
- WYMeditor.XmlHelper.prototype.cdataSection = function(content)
73
- {
74
- return '<![CDATA['+content+']]>';
75
- };
76
-
77
-
78
- /*
79
- * @name escapeOnce
80
- * @description
81
- * Returns the escaped +xml+ without affecting existing escaped entities.
82
- *
83
- * this.escapeOnce( "1 > 2 &amp; 3")
84
- * # => "1 &gt; 2 &amp; 3"
85
- */
86
- WYMeditor.XmlHelper.prototype.escapeOnce = function(xml)
87
- {
88
- return this._fixDoubleEscape(this.escapeEntities(xml));
89
- };
90
-
91
- /*
92
- * @name _fixDoubleEscape
93
- * @description
94
- * Fix double-escaped entities, such as &amp;amp;, &amp;#123;, etc.
95
- */
96
- WYMeditor.XmlHelper.prototype._fixDoubleEscape = function(escaped)
97
- {
98
- return escaped.replace(/&amp;([a-z]+|(#\d+));/ig, "&$1;");
99
- };
100
-
101
- /*
102
- * @name tagOptions
103
- * @description
104
- * Takes an array like the one generated by Tag.parseAttributes
105
- * [["src", "http://www.editam.com/?a=b&c=d&amp;f=g"], ["title", "Editam, <Simplified> CMS"]]
106
- * or an object like {src:"http://www.editam.com/?a=b&c=d&amp;f=g", title:"Editam, <Simplified> CMS"}
107
- * and returns a string properly escaped like
108
- * ' src = "http://www.editam.com/?a=b&amp;c=d&amp;f=g" title = "Editam, &lt;Simplified&gt; CMS"'
109
- * which is valid for strict XHTML
110
- */
111
- WYMeditor.XmlHelper.prototype.tagOptions = function(options)
112
- {
113
- var xml = this;
114
- xml._formated_options = '';
115
-
116
- for (var key in options) {
117
- var formated_options = '';
118
- var value = options[key];
119
- if(typeof value != 'function' && value.length > 0) {
120
-
121
- if(parseInt(key) == key && typeof value == 'object'){
122
- key = value.shift();
123
- value = value.pop();
124
- }
125
- if(key != '' && value != ''){
126
- xml._formated_options += ' '+key+'="'+xml.escapeOnce(value)+'"';
127
- }
128
- }
129
- }
130
- return xml._formated_options;
131
- };
132
-
133
- /*
134
- * @name escapeEntities
135
- * @description
136
- * Escapes XML/HTML entities <, >, & and ". If seccond parameter is set to false it
137
- * will not escape ". If set to true it will also escape '
138
- */
139
- WYMeditor.XmlHelper.prototype.escapeEntities = function(string, escape_quotes)
140
- {
141
- this._entitiesDiv.innerHTML = string;
142
- this._entitiesDiv.textContent = string;
143
- var result = this._entitiesDiv.innerHTML;
144
- if(typeof escape_quotes == 'undefined'){
145
- if(escape_quotes != false) result = result.replace('"', '&quot;');
146
- if(escape_quotes == true) result = result.replace('"', '&#039;');
147
- }
148
- return result;
149
- };
150
-
151
- /*
152
- * Parses a string conatining tag attributes and values an returns an array formated like
153
- * [["src", "http://www.editam.com"], ["title", "Editam, Simplified CMS"]]
154
- */
155
- WYMeditor.XmlHelper.prototype.parseAttributes = function(tag_attributes)
156
- {
157
- // Use a compounded regex to match single quoted, double quoted and unquoted attribute pairs
158
- var result = [];
159
- var matches = tag_attributes.split(/((=\s*")(")("))|((=\s*\')(\')(\'))|((=\s*[^>\s]*))/g);
160
- if(matches.toString() != tag_attributes){
161
- for (var k in matches) {
162
- var v = matches[k];
163
- if(typeof v != 'function' && v.length != 0){
164
- var re = new RegExp('(\\w+)\\s*'+v);
165
- if(match = tag_attributes.match(re) ){
166
- var value = v.replace(/^[\s=]+/, "");
167
- var delimiter = value.charAt(0);
168
- delimiter = delimiter == '"' ? '"' : (delimiter=="'"?"'":'');
169
- if(delimiter != ''){
170
- value = delimiter == '"' ? value.replace(/^"|"+$/g, '') : value.replace(/^'|'+$/g, '');
171
- }
172
- tag_attributes = tag_attributes.replace(match[0],'');
173
- result.push([match[1] , value]);
174
- }
175
- }
176
- }
177
- }
178
- return result;
179
- };
180
-
181
- /**
182
- * Compounded regular expression. Any of
183
- * the contained patterns could match and
184
- * when one does, it's label is returned.
185
- *
186
- * Constructor. Starts with no patterns.
187
- * @param boolean case True for case sensitive, false
188
- * for insensitive.
189
- * @access public
190
- * @author Marcus Baker (http://lastcraft.com)
191
- * @author Bermi Ferrer (http://bermi.org)
192
- */
193
- WYMeditor.ParallelRegex = function(case_sensitive)
194
- {
195
- this._case = case_sensitive;
196
- this._patterns = [];
197
- this._labels = [];
198
- this._regex = null;
199
- return this;
200
- };
201
-
202
-
203
- /**
204
- * Adds a pattern with an optional label.
205
- * @param string pattern Perl style regex, but ( and )
206
- * lose the usual meaning.
207
- * @param string label Label of regex to be returned
208
- * on a match.
209
- * @access public
210
- */
211
- WYMeditor.ParallelRegex.prototype.addPattern = function(pattern, label)
212
- {
213
- label = label || true;
214
- var count = this._patterns.length;
215
- this._patterns[count] = pattern;
216
- this._labels[count] = label;
217
- this._regex = null;
218
- };
219
-
220
- /**
221
- * Attempts to match all patterns at once against
222
- * a string.
223
- * @param string subject String to match against.
224
- *
225
- * @return boolean True on success.
226
- * @return string match First matched portion of
227
- * subject.
228
- * @access public
229
- */
230
- WYMeditor.ParallelRegex.prototype.match = function(subject)
231
- {
232
- if (this._patterns.length == 0) {
233
- return [false, ''];
234
- }
235
- var matches = subject.match(this._getCompoundedRegex());
236
-
237
- if(!matches){
238
- return [false, ''];
239
- }
240
- var match = matches[0];
241
- for (var i = 1; i < matches.length; i++) {
242
- if (matches[i]) {
243
- return [this._labels[i-1], match];
244
- }
245
- }
246
- return [true, matches[0]];
247
- };
248
-
249
- /**
250
- * Compounds the patterns into a single
251
- * regular expression separated with the
252
- * "or" operator. Caches the regex.
253
- * Will automatically escape (, ) and / tokens.
254
- * @param array patterns List of patterns in order.
255
- * @access private
256
- */
257
- WYMeditor.ParallelRegex.prototype._getCompoundedRegex = function()
258
- {
259
- if (this._regex == null) {
260
- for (var i = 0, count = this._patterns.length; i < count; i++) {
261
- this._patterns[i] = '(' + this._untokenizeRegex(this._tokenizeRegex(this._patterns[i]).replace(/([\/\(\)])/g,'\\$1')) + ')';
262
- }
263
- this._regex = new RegExp(this._patterns.join("|") ,this._getPerlMatchingFlags());
264
- }
265
- return this._regex;
266
- };
267
-
268
- /**
269
- * Escape lookahead/lookbehind blocks
270
- */
271
- WYMeditor.ParallelRegex.prototype._tokenizeRegex = function(regex)
272
- {
273
- return regex.
274
- replace(/\(\?(i|m|s|x|U)\)/, '~~~~~~Tk1\$1~~~~~~').
275
- replace(/\(\?(\-[i|m|s|x|U])\)/, '~~~~~~Tk2\$1~~~~~~').
276
- replace(/\(\?\=(.*)\)/, '~~~~~~Tk3\$1~~~~~~').
277
- replace(/\(\?\!(.*)\)/, '~~~~~~Tk4\$1~~~~~~').
278
- replace(/\(\?\<\=(.*)\)/, '~~~~~~Tk5\$1~~~~~~').
279
- replace(/\(\?\<\!(.*)\)/, '~~~~~~Tk6\$1~~~~~~').
280
- replace(/\(\?\:(.*)\)/, '~~~~~~Tk7\$1~~~~~~');
281
- };
282
-
283
- /**
284
- * Unscape lookahead/lookbehind blocks
285
- */
286
- WYMeditor.ParallelRegex.prototype._untokenizeRegex = function(regex)
287
- {
288
- return regex.
289
- replace(/~~~~~~Tk1(.{1})~~~~~~/, "(?\$1)").
290
- replace(/~~~~~~Tk2(.{2})~~~~~~/, "(?\$1)").
291
- replace(/~~~~~~Tk3(.*)~~~~~~/, "(?=\$1)").
292
- replace(/~~~~~~Tk4(.*)~~~~~~/, "(?!\$1)").
293
- replace(/~~~~~~Tk5(.*)~~~~~~/, "(?<=\$1)").
294
- replace(/~~~~~~Tk6(.*)~~~~~~/, "(?<!\$1)").
295
- replace(/~~~~~~Tk7(.*)~~~~~~/, "(?:\$1)");
296
- };
297
-
298
-
299
- /**
300
- * Accessor for perl regex mode flags to use.
301
- * @return string Perl regex flags.
302
- * @access private
303
- */
304
- WYMeditor.ParallelRegex.prototype._getPerlMatchingFlags = function()
305
- {
306
- return (this._case ? "m" : "mi");
307
- };
308
-
309
-
310
-
311
- /**
312
- * States for a stack machine.
313
- *
314
- * Constructor. Starts in named state.
315
- * @param string start Starting state name.
316
- * @access public
317
- * @author Marcus Baker (http://lastcraft.com)
318
- * @author Bermi Ferrer (http://bermi.org)
319
- */
320
- WYMeditor.StateStack = function(start)
321
- {
322
- this._stack = [start];
323
- return this;
324
- };
325
-
326
- /**
327
- * Accessor for current state.
328
- * @return string State.
329
- * @access public
330
- */
331
- WYMeditor.StateStack.prototype.getCurrent = function()
332
- {
333
- return this._stack[this._stack.length - 1];
334
- };
335
-
336
- /**
337
- * Adds a state to the stack and sets it
338
- * to be the current state.
339
- * @param string state New state.
340
- * @access public
341
- */
342
- WYMeditor.StateStack.prototype.enter = function(state)
343
- {
344
- this._stack.push(state);
345
- };
346
-
347
- /**
348
- * Leaves the current state and reverts
349
- * to the previous one.
350
- * @return boolean False if we drop off
351
- * the bottom of the list.
352
- * @access public
353
- */
354
- WYMeditor.StateStack.prototype.leave = function()
355
- {
356
- if (this._stack.length == 1) {
357
- return false;
358
- }
359
- this._stack.pop();
360
- return true;
361
- };
362
-
363
-
364
- // GLOBALS
365
- WYMeditor.LEXER_ENTER = 1;
366
- WYMeditor.LEXER_MATCHED = 2;
367
- WYMeditor.LEXER_UNMATCHED = 3;
368
- WYMeditor.LEXER_EXIT = 4;
369
- WYMeditor.LEXER_SPECIAL = 5;
370
-
371
-
372
- /**
373
- * Accepts text and breaks it into tokens.
374
- * Some optimisation to make the sure the
375
- * content is only scanned by the PHP regex
376
- * parser once. Lexer modes must not start
377
- * with leading underscores.
378
- *
379
- * Sets up the lexer in case insensitive matching
380
- * by default.
381
- * @param Parser parser Handling strategy by reference.
382
- * @param string start Starting handler.
383
- * @param boolean case True for case sensitive.
384
- * @access public
385
- * @author Marcus Baker (http://lastcraft.com)
386
- * @author Bermi Ferrer (http://bermi.org)
387
- */
388
- WYMeditor.Lexer = function(parser, start, case_sensitive)
389
- {
390
- start = start || 'accept';
391
- this._case = case_sensitive || false;
392
- this._regexes = {};
393
- this._parser = parser;
394
- this._mode = new WYMeditor.StateStack(start);
395
- this._mode_handlers = {};
396
- this._mode_handlers[start] = start;
397
- return this;
398
- };
399
-
400
- /**
401
- * Adds a token search pattern for a particular
402
- * parsing mode. The pattern does not change the
403
- * current mode.
404
- * @param string pattern Perl style regex, but ( and )
405
- * lose the usual meaning.
406
- * @param string mode Should only apply this
407
- * pattern when dealing with
408
- * this type of input.
409
- * @access public
410
- */
411
- WYMeditor.Lexer.prototype.addPattern = function(pattern, mode)
412
- {
413
- var mode = mode || "accept";
414
- if (typeof this._regexes[mode] == 'undefined') {
415
- this._regexes[mode] = new WYMeditor.ParallelRegex(this._case);
416
- }
417
- this._regexes[mode].addPattern(pattern);
418
- if (typeof this._mode_handlers[mode] == 'undefined') {
419
- this._mode_handlers[mode] = mode;
420
- }
421
- };
422
-
423
- /**
424
- * Adds a pattern that will enter a new parsing
425
- * mode. Useful for entering parenthesis, strings,
426
- * tags, etc.
427
- * @param string pattern Perl style regex, but ( and )
428
- * lose the usual meaning.
429
- * @param string mode Should only apply this
430
- * pattern when dealing with
431
- * this type of input.
432
- * @param string new_mode Change parsing to this new
433
- * nested mode.
434
- * @access public
435
- */
436
- WYMeditor.Lexer.prototype.addEntryPattern = function(pattern, mode, new_mode)
437
- {
438
- if (typeof this._regexes[mode] == 'undefined') {
439
- this._regexes[mode] = new WYMeditor.ParallelRegex(this._case);
440
- }
441
- this._regexes[mode].addPattern(pattern, new_mode);
442
- if (typeof this._mode_handlers[new_mode] == 'undefined') {
443
- this._mode_handlers[new_mode] = new_mode;
444
- }
445
- };
446
-
447
- /**
448
- * Adds a pattern that will exit the current mode
449
- * and re-enter the previous one.
450
- * @param string pattern Perl style regex, but ( and )
451
- * lose the usual meaning.
452
- * @param string mode Mode to leave.
453
- * @access public
454
- */
455
- WYMeditor.Lexer.prototype.addExitPattern = function(pattern, mode)
456
- {
457
- if (typeof this._regexes[mode] == 'undefined') {
458
- this._regexes[mode] = new WYMeditor.ParallelRegex(this._case);
459
- }
460
- this._regexes[mode].addPattern(pattern, "__exit");
461
- if (typeof this._mode_handlers[mode] == 'undefined') {
462
- this._mode_handlers[mode] = mode;
463
- }
464
- };
465
-
466
- /**
467
- * Adds a pattern that has a special mode. Acts as an entry
468
- * and exit pattern in one go, effectively calling a special
469
- * parser handler for this token only.
470
- * @param string pattern Perl style regex, but ( and )
471
- * lose the usual meaning.
472
- * @param string mode Should only apply this
473
- * pattern when dealing with
474
- * this type of input.
475
- * @param string special Use this mode for this one token.
476
- * @access public
477
- */
478
- WYMeditor.Lexer.prototype.addSpecialPattern = function(pattern, mode, special)
479
- {
480
- if (typeof this._regexes[mode] == 'undefined') {
481
- this._regexes[mode] = new WYMeditor.ParallelRegex(this._case);
482
- }
483
- this._regexes[mode].addPattern(pattern, '_'+special);
484
- if (typeof this._mode_handlers[special] == 'undefined') {
485
- this._mode_handlers[special] = special;
486
- }
487
- };
488
-
489
- /**
490
- * Adds a mapping from a mode to another handler.
491
- * @param string mode Mode to be remapped.
492
- * @param string handler New target handler.
493
- * @access public
494
- */
495
- WYMeditor.Lexer.prototype.mapHandler = function(mode, handler)
496
- {
497
- this._mode_handlers[mode] = handler;
498
- };
499
-
500
- /**
501
- * Splits the page text into tokens. Will fail
502
- * if the handlers report an error or if no
503
- * content is consumed. If successful then each
504
- * unparsed and parsed token invokes a call to the
505
- * held listener.
506
- * @param string raw Raw HTML text.
507
- * @return boolean True on success, else false.
508
- * @access public
509
- */
510
- WYMeditor.Lexer.prototype.parse = function(raw)
511
- {
512
- if (typeof this._parser == 'undefined') {
513
- return false;
514
- }
515
-
516
- var length = raw.length;
517
- var parsed;
518
- while (typeof (parsed = this._reduce(raw)) == 'object') {
519
- var raw = parsed[0];
520
- var unmatched = parsed[1];
521
- var matched = parsed[2];
522
- var mode = parsed[3];
523
-
524
- if (! this._dispatchTokens(unmatched, matched, mode)) {
525
- return false;
526
- }
527
-
528
- if (raw == '') {
529
- return true;
530
- }
531
- if (raw.length == length) {
532
- return false;
533
- }
534
- length = raw.length;
535
- }
536
- if (! parsed ) {
537
- return false;
538
- }
539
-
540
- return this._invokeParser(raw, WYMeditor.LEXER_UNMATCHED);
541
- };
542
-
543
- /**
544
- * Sends the matched token and any leading unmatched
545
- * text to the parser changing the lexer to a new
546
- * mode if one is listed.
547
- * @param string unmatched Unmatched leading portion.
548
- * @param string matched Actual token match.
549
- * @param string mode Mode after match. A boolean
550
- * false mode causes no change.
551
- * @return boolean False if there was any error
552
- * from the parser.
553
- * @access private
554
- */
555
- WYMeditor.Lexer.prototype._dispatchTokens = function(unmatched, matched, mode)
556
- {
557
- mode = mode || false;
558
-
559
- if (! this._invokeParser(unmatched, WYMeditor.LEXER_UNMATCHED)) {
560
- return false;
561
- }
562
-
563
- if (typeof mode == 'boolean') {
564
- return this._invokeParser(matched, WYMeditor.LEXER_MATCHED);
565
- }
566
- if (this._isModeEnd(mode)) {
567
- if (! this._invokeParser(matched, WYMeditor.LEXER_EXIT)) {
568
- return false;
569
- }
570
- return this._mode.leave();
571
- }
572
- if (this._isSpecialMode(mode)) {
573
- this._mode.enter(this._decodeSpecial(mode));
574
- if (! this._invokeParser(matched, WYMeditor.LEXER_SPECIAL)) {
575
- return false;
576
- }
577
- return this._mode.leave();
578
- }
579
- this._mode.enter(mode);
580
-
581
- return this._invokeParser(matched, WYMeditor.LEXER_ENTER);
582
- };
583
-
584
- /**
585
- * Tests to see if the new mode is actually to leave
586
- * the current mode and pop an item from the matching
587
- * mode stack.
588
- * @param string mode Mode to test.
589
- * @return boolean True if this is the exit mode.
590
- * @access private
591
- */
592
- WYMeditor.Lexer.prototype._isModeEnd = function(mode)
593
- {
594
- return (mode === "__exit");
595
- };
596
-
597
- /**
598
- * Test to see if the mode is one where this mode
599
- * is entered for this token only and automatically
600
- * leaves immediately afterwoods.
601
- * @param string mode Mode to test.
602
- * @return boolean True if this is the exit mode.
603
- * @access private
604
- */
605
- WYMeditor.Lexer.prototype._isSpecialMode = function(mode)
606
- {
607
- return (mode.substring(0,1) == "_");
608
- };
609
-
610
- /**
611
- * Strips the magic underscore marking single token
612
- * modes.
613
- * @param string mode Mode to decode.
614
- * @return string Underlying mode name.
615
- * @access private
616
- */
617
- WYMeditor.Lexer.prototype._decodeSpecial = function(mode)
618
- {
619
- return mode.substring(1);
620
- };
621
-
622
- /**
623
- * Calls the parser method named after the current
624
- * mode. Empty content will be ignored. The lexer
625
- * has a parser handler for each mode in the lexer.
626
- * @param string content Text parsed.
627
- * @param boolean is_match Token is recognised rather
628
- * than unparsed data.
629
- * @access private
630
- */
631
- WYMeditor.Lexer.prototype._invokeParser = function(content, is_match)
632
- {
633
-
634
- if (content === '') {
635
- return true;
636
- }
637
- var current = this._mode.getCurrent();
638
- var handler = this._mode_handlers[current];
639
- return this._parser[handler](content, is_match);
640
- };
641
-
642
- /**
643
- * Tries to match a chunk of text and if successful
644
- * removes the recognised chunk and any leading
645
- * unparsed data. Empty strings will not be matched.
646
- * @param string raw The subject to parse. This is the
647
- * content that will be eaten.
648
- * @return array/boolean Three item list of unparsed
649
- * content followed by the
650
- * recognised token and finally the
651
- * action the parser is to take.
652
- * True if no match, false if there
653
- * is a parsing error.
654
- * @access private
655
- */
656
- WYMeditor.Lexer.prototype._reduce = function(raw)
657
- {
658
- var matched = this._regexes[this._mode.getCurrent()].match(raw);
659
- var match = matched[1];
660
- var action = matched[0];
661
- if (action) {
662
- var unparsed_character_count = raw.indexOf(match);
663
- var unparsed = raw.substr(0, unparsed_character_count);
664
- raw = raw.substring(unparsed_character_count + match.length);
665
- return [raw, unparsed, match, action];
666
- }
667
- return true;
668
- };
669
-
670
-
671
-
672
- /**
673
- * This are the rules for breaking the XHTML code into events
674
- * handled by the provided parser.
675
- *
676
- * @author Marcus Baker (http://lastcraft.com)
677
- * @author Bermi Ferrer (http://bermi.org)
678
- */
679
- WYMeditor.XhtmlLexer = function(parser)
680
- {
681
- $.extend(this, new WYMeditor.Lexer(parser, 'Text'));
682
-
683
- this.mapHandler('Text', 'Text');
684
-
685
- this.addTokens();
686
-
687
- this.init();
688
-
689
- return this;
690
- };
691
-
692
-
693
- WYMeditor.XhtmlLexer.prototype.init = function()
694
- {
695
- };
696
-
697
- WYMeditor.XhtmlLexer.prototype.addTokens = function()
698
- {
699
- this.addCommentTokens('Text');
700
- this.addScriptTokens('Text');
701
- this.addCssTokens('Text');
702
- this.addTagTokens('Text');
703
- };
704
-
705
- WYMeditor.XhtmlLexer.prototype.addCommentTokens = function(scope)
706
- {
707
- this.addEntryPattern("<!--", scope, 'Comment');
708
- this.addExitPattern("-->", 'Comment');
709
- };
710
-
711
- WYMeditor.XhtmlLexer.prototype.addScriptTokens = function(scope)
712
- {
713
- this.addEntryPattern("<script", scope, 'Script');
714
- this.addExitPattern("</script>", 'Script');
715
- };
716
-
717
- WYMeditor.XhtmlLexer.prototype.addCssTokens = function(scope)
718
- {
719
- this.addEntryPattern("<style", scope, 'Css');
720
- this.addExitPattern("</style>", 'Css');
721
- };
722
-
723
- WYMeditor.XhtmlLexer.prototype.addTagTokens = function(scope)
724
- {
725
- this.addSpecialPattern("<\\s*[a-z0-9:\-]+\\s*>", scope, 'OpeningTag');
726
- this.addEntryPattern("<[a-z0-9:\-]+"+'[\\\/ \\\>]+', scope, 'OpeningTag');
727
- this.addInTagDeclarationTokens('OpeningTag');
728
-
729
- this.addSpecialPattern("</\\s*[a-z0-9:\-]+\\s*>", scope, 'ClosingTag');
730
-
731
- };
732
-
733
- WYMeditor.XhtmlLexer.prototype.addInTagDeclarationTokens = function(scope)
734
- {
735
- this.addSpecialPattern('\\s+', scope, 'Ignore');
736
-
737
- this.addAttributeTokens(scope);
738
-
739
- this.addExitPattern('/>', scope);
740
- this.addExitPattern('>', scope);
741
-
742
- };
743
-
744
- WYMeditor.XhtmlLexer.prototype.addAttributeTokens = function(scope)
745
- {
746
- this.addSpecialPattern("\\s*[a-z-_0-9]*:?[a-z-_0-9]+\\s*(?=\=)\\s*", scope, 'TagAttributes');
747
-
748
- this.addEntryPattern('=\\s*"', scope, 'DoubleQuotedAttribute');
749
- this.addPattern("\\\\\"", 'DoubleQuotedAttribute');
750
- this.addExitPattern('"', 'DoubleQuotedAttribute');
751
-
752
- this.addEntryPattern("=\\s*'", scope, 'SingleQuotedAttribute');
753
- this.addPattern("\\\\'", 'SingleQuotedAttribute');
754
- this.addExitPattern("'", 'SingleQuotedAttribute');
755
-
756
- this.addSpecialPattern('=\\s*[^>\\s]*', scope, 'UnquotedAttribute');
757
- };
758
-
759
-
760
-
761
- /**
762
- * XHTML Parser.
763
- *
764
- * This XHTML parser will trigger the events available on on
765
- * current SaxListener
766
- *
767
- * @author Bermi Ferrer (http://bermi.org)
768
- */
769
- WYMeditor.XhtmlParser = function(Listener, mode)
770
- {
771
- var mode = mode || 'Text';
772
- this._Lexer = new WYMeditor.XhtmlLexer(this);
773
- this._Listener = Listener;
774
- this._mode = mode;
775
- this._matches = [];
776
- this._last_match = '';
777
- this._current_match = '';
778
-
779
- return this;
780
- };
781
-
782
- WYMeditor.XhtmlParser.prototype.parse = function(raw)
783
- {
784
- this._Lexer.parse(this.beforeParsing(raw));
785
- return this.afterParsing(this._Listener.getResult());
786
- };
787
-
788
- WYMeditor.XhtmlParser.prototype.beforeParsing = function(raw)
789
- {
790
- if(raw.match(/class="MsoNormal"/) || raw.match(/ns = "urn:schemas-microsoft-com/)){
791
- // Useful for cleaning up content pasted from other sources (MSWord)
792
- this._Listener.avoidStylingTagsAndAttributes();
793
- }
794
- return this._Listener.beforeParsing(raw);
795
- };
796
-
797
- WYMeditor.XhtmlParser.prototype.afterParsing = function(parsed)
798
- {
799
- if(this._Listener._avoiding_tags_implicitly){
800
- this._Listener.allowStylingTagsAndAttributes();
801
- }
802
- return this._Listener.afterParsing(parsed);
803
- };
804
-
805
-
806
- WYMeditor.XhtmlParser.prototype.Ignore = function(match, state)
807
- {
808
- return true;
809
- };
810
-
811
- WYMeditor.XhtmlParser.prototype.Text = function(text)
812
- {
813
- this._Listener.addContent(text);
814
- return true;
815
- };
816
-
817
- WYMeditor.XhtmlParser.prototype.Comment = function(match, status)
818
- {
819
- return this._addNonTagBlock(match, status, 'addComment');
820
- };
821
-
822
- WYMeditor.XhtmlParser.prototype.Script = function(match, status)
823
- {
824
- return this._addNonTagBlock(match, status, 'addScript');
825
- };
826
-
827
- WYMeditor.XhtmlParser.prototype.Css = function(match, status)
828
- {
829
- return this._addNonTagBlock(match, status, 'addCss');
830
- };
831
-
832
- WYMeditor.XhtmlParser.prototype._addNonTagBlock = function(match, state, type)
833
- {
834
- switch (state){
835
- case WYMeditor.LEXER_ENTER:
836
- this._non_tag = match;
837
- break;
838
- case WYMeditor.LEXER_UNMATCHED:
839
- this._non_tag += match;
840
- break;
841
- case WYMeditor.LEXER_EXIT:
842
- switch(type) {
843
- case 'addComment':
844
- this._Listener.addComment(this._non_tag+match);
845
- break;
846
- case 'addScript':
847
- this._Listener.addScript(this._non_tag+match);
848
- break;
849
- case 'addCss':
850
- this._Listener.addCss(this._non_tag+match);
851
- break;
852
- }
853
- }
854
- return true;
855
- };
856
-
857
- WYMeditor.XhtmlParser.prototype.OpeningTag = function(match, state)
858
- {
859
- switch (state){
860
- case WYMeditor.LEXER_ENTER:
861
- this._tag = this.normalizeTag(match);
862
- this._tag_attributes = {};
863
- break;
864
- case WYMeditor.LEXER_SPECIAL:
865
- this._callOpenTagListener(this.normalizeTag(match));
866
- break;
867
- case WYMeditor.LEXER_EXIT:
868
- this._callOpenTagListener(this._tag, this._tag_attributes);
869
- }
870
- return true;
871
- };
872
-
873
- WYMeditor.XhtmlParser.prototype.ClosingTag = function(match, state)
874
- {
875
- this._callCloseTagListener(this.normalizeTag(match));
876
- return true;
877
- };
878
-
879
- WYMeditor.XhtmlParser.prototype._callOpenTagListener = function(tag, attributes)
880
- {
881
- var attributes = attributes || {};
882
- this.autoCloseUnclosedBeforeNewOpening(tag);
883
-
884
- if(this._Listener.isBlockTag(tag)){
885
- this._Listener._tag_stack.push(tag);
886
- this._Listener.fixNestingBeforeOpeningBlockTag(tag, attributes);
887
- this._Listener.openBlockTag(tag, attributes);
888
- this._increaseOpenTagCounter(tag);
889
- }else if(this._Listener.isInlineTag(tag)){
890
- this._Listener.inlineTag(tag, attributes);
891
- }else{
892
- this._Listener.openUnknownTag(tag, attributes);
893
- this._increaseOpenTagCounter(tag);
894
- }
895
- this._Listener.last_tag = tag;
896
- this._Listener.last_tag_opened = true;
897
- this._Listener.last_tag_attributes = attributes;
898
- };
899
-
900
- WYMeditor.XhtmlParser.prototype._callCloseTagListener = function(tag)
901
- {
902
- if(this._decreaseOpenTagCounter(tag)){
903
- this.autoCloseUnclosedBeforeTagClosing(tag);
904
-
905
- if(this._Listener.isBlockTag(tag)){
906
- var expected_tag = this._Listener._tag_stack.pop();
907
- if(expected_tag == false){
908
- return;
909
- }else if(expected_tag != tag){
910
- tag = expected_tag;
911
- }
912
- this._Listener.closeBlockTag(tag);
913
- }else{
914
- this._Listener.closeUnknownTag(tag);
915
- }
916
- }else{
917
- this._Listener.closeUnopenedTag(tag);
918
- }
919
- this._Listener.last_tag = tag;
920
- this._Listener.last_tag_opened = false;
921
- };
922
-
923
- WYMeditor.XhtmlParser.prototype._increaseOpenTagCounter = function(tag)
924
- {
925
- this._Listener._open_tags[tag] = this._Listener._open_tags[tag] || 0;
926
- this._Listener._open_tags[tag]++;
927
- };
928
-
929
- WYMeditor.XhtmlParser.prototype._decreaseOpenTagCounter = function(tag)
930
- {
931
- if(this._Listener._open_tags[tag]){
932
- this._Listener._open_tags[tag]--;
933
- if(this._Listener._open_tags[tag] == 0){
934
- this._Listener._open_tags[tag] = undefined;
935
- }
936
- return true;
937
- }
938
- return false;
939
- };
940
-
941
- WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeNewOpening = function(new_tag)
942
- {
943
- this._autoCloseUnclosed(new_tag, false);
944
- };
945
-
946
- WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeTagClosing = function(tag)
947
- {
948
- this._autoCloseUnclosed(tag, true);
949
- };
950
-
951
- WYMeditor.XhtmlParser.prototype._autoCloseUnclosed = function(new_tag, closing)
952
- {
953
- var closing = closing || false;
954
- if(this._Listener._open_tags){
955
- for (var tag in this._Listener._open_tags) {
956
- var counter = this._Listener._open_tags[tag];
957
- if(counter > 0 && this._Listener.shouldCloseTagAutomatically(tag, new_tag, closing)){
958
- this._callCloseTagListener(tag, true);
959
- }
960
- }
961
- }
962
- };
963
-
964
- WYMeditor.XhtmlParser.prototype.getTagReplacements = function()
965
- {
966
- return this._Listener.getTagReplacements();
967
- };
968
-
969
- WYMeditor.XhtmlParser.prototype.normalizeTag = function(tag)
970
- {
971
- tag = tag.replace(/^([\s<\/>]*)|([\s<\/>]*)$/gm,'').toLowerCase();
972
- var tags = this._Listener.getTagReplacements();
973
- if(tags[tag]){
974
- return tags[tag];
975
- }
976
- return tag;
977
- };
978
-
979
- WYMeditor.XhtmlParser.prototype.TagAttributes = function(match, state)
980
- {
981
- if(WYMeditor.LEXER_SPECIAL == state){
982
- this._current_attribute = match;
983
- }
984
- return true;
985
- };
986
-
987
- WYMeditor.XhtmlParser.prototype.DoubleQuotedAttribute = function(match, state)
988
- {
989
- if(WYMeditor.LEXER_UNMATCHED == state){
990
- this._tag_attributes[this._current_attribute] = match;
991
- }
992
- return true;
993
- };
994
-
995
- WYMeditor.XhtmlParser.prototype.SingleQuotedAttribute = function(match, state)
996
- {
997
- if(WYMeditor.LEXER_UNMATCHED == state){
998
- this._tag_attributes[this._current_attribute] = match;
999
- }
1000
- return true;
1001
- };
1002
-
1003
- WYMeditor.XhtmlParser.prototype.UnquotedAttribute = function(match, state)
1004
- {
1005
- this._tag_attributes[this._current_attribute] = match.replace(/^=/,'');
1006
- return true;
1007
- };
1008
-
1009
-
1010
-
1011
- /**
1012
- * XHTML Sax parser.
1013
- *
1014
- * @author Bermi Ferrer (http://bermi.org)
1015
- */
1016
- WYMeditor.XhtmlSaxListener = function()
1017
- {
1018
- this.output = '';
1019
- this.helper = new WYMeditor.XmlHelper();
1020
- this._open_tags = {};
1021
- this.validator = WYMeditor.XhtmlValidator;
1022
- this._tag_stack = [];
1023
-
1024
- this.avoided_tags = ['area'];
1025
-
1026
- this.entities = {
1027
- '&nbsp;':'&#160;','&iexcl;':'&#161;','&cent;':'&#162;',
1028
- '&pound;':'&#163;','&curren;':'&#164;','&yen;':'&#165;',
1029
- '&brvbar;':'&#166;','&sect;':'&#167;','&uml;':'&#168;',
1030
- '&copy;':'&#169;','&ordf;':'&#170;','&laquo;':'&#171;',
1031
- '&not;':'&#172;','&shy;':'&#173;','&reg;':'&#174;',
1032
- '&macr;':'&#175;','&deg;':'&#176;','&plusmn;':'&#177;',
1033
- '&sup2;':'&#178;','&sup3;':'&#179;','&acute;':'&#180;',
1034
- '&micro;':'&#181;','&para;':'&#182;','&middot;':'&#183;',
1035
- '&cedil;':'&#184;','&sup1;':'&#185;','&ordm;':'&#186;',
1036
- '&raquo;':'&#187;','&frac14;':'&#188;','&frac12;':'&#189;',
1037
- '&frac34;':'&#190;','&iquest;':'&#191;','&Agrave;':'&#192;',
1038
- '&Aacute;':'&#193;','&Acirc;':'&#194;','&Atilde;':'&#195;',
1039
- '&Auml;':'&#196;','&Aring;':'&#197;','&AElig;':'&#198;',
1040
- '&Ccedil;':'&#199;','&Egrave;':'&#200;','&Eacute;':'&#201;',
1041
- '&Ecirc;':'&#202;','&Euml;':'&#203;','&Igrave;':'&#204;',
1042
- '&Iacute;':'&#205;','&Icirc;':'&#206;','&Iuml;':'&#207;',
1043
- '&ETH;':'&#208;','&Ntilde;':'&#209;','&Ograve;':'&#210;',
1044
- '&Oacute;':'&#211;','&Ocirc;':'&#212;','&Otilde;':'&#213;',
1045
- '&Ouml;':'&#214;','&times;':'&#215;','&Oslash;':'&#216;',
1046
- '&Ugrave;':'&#217;','&Uacute;':'&#218;','&Ucirc;':'&#219;',
1047
- '&Uuml;':'&#220;','&Yacute;':'&#221;','&THORN;':'&#222;',
1048
- '&szlig;':'&#223;','&agrave;':'&#224;','&aacute;':'&#225;',
1049
- '&acirc;':'&#226;','&atilde;':'&#227;','&auml;':'&#228;',
1050
- '&aring;':'&#229;','&aelig;':'&#230;','&ccedil;':'&#231;',
1051
- '&egrave;':'&#232;','&eacute;':'&#233;','&ecirc;':'&#234;',
1052
- '&euml;':'&#235;','&igrave;':'&#236;','&iacute;':'&#237;',
1053
- '&icirc;':'&#238;','&iuml;':'&#239;','&eth;':'&#240;',
1054
- '&ntilde;':'&#241;','&ograve;':'&#242;','&oacute;':'&#243;',
1055
- '&ocirc;':'&#244;','&otilde;':'&#245;','&ouml;':'&#246;',
1056
- '&divide;':'&#247;','&oslash;':'&#248;','&ugrave;':'&#249;',
1057
- '&uacute;':'&#250;','&ucirc;':'&#251;','&uuml;':'&#252;',
1058
- '&yacute;':'&#253;','&thorn;':'&#254;','&yuml;':'&#255;',
1059
- '&OElig;':'&#338;','&oelig;':'&#339;','&Scaron;':'&#352;',
1060
- '&scaron;':'&#353;','&Yuml;':'&#376;','&fnof;':'&#402;',
1061
- '&circ;':'&#710;','&tilde;':'&#732;','&Alpha;':'&#913;',
1062
- '&Beta;':'&#914;','&Gamma;':'&#915;','&Delta;':'&#916;',
1063
- '&Epsilon;':'&#917;','&Zeta;':'&#918;','&Eta;':'&#919;',
1064
- '&Theta;':'&#920;','&Iota;':'&#921;','&Kappa;':'&#922;',
1065
- '&Lambda;':'&#923;','&Mu;':'&#924;','&Nu;':'&#925;',
1066
- '&Xi;':'&#926;','&Omicron;':'&#927;','&Pi;':'&#928;',
1067
- '&Rho;':'&#929;','&Sigma;':'&#931;','&Tau;':'&#932;',
1068
- '&Upsilon;':'&#933;','&Phi;':'&#934;','&Chi;':'&#935;',
1069
- '&Psi;':'&#936;','&Omega;':'&#937;','&alpha;':'&#945;',
1070
- '&beta;':'&#946;','&gamma;':'&#947;','&delta;':'&#948;',
1071
- '&epsilon;':'&#949;','&zeta;':'&#950;','&eta;':'&#951;',
1072
- '&theta;':'&#952;','&iota;':'&#953;','&kappa;':'&#954;',
1073
- '&lambda;':'&#955;','&mu;':'&#956;','&nu;':'&#957;',
1074
- '&xi;':'&#958;','&omicron;':'&#959;','&pi;':'&#960;',
1075
- '&rho;':'&#961;','&sigmaf;':'&#962;','&sigma;':'&#963;',
1076
- '&tau;':'&#964;','&upsilon;':'&#965;','&phi;':'&#966;',
1077
- '&chi;':'&#967;','&psi;':'&#968;','&omega;':'&#969;',
1078
- '&thetasym;':'&#977;','&upsih;':'&#978;','&piv;':'&#982;',
1079
- '&ensp;':'&#8194;','&emsp;':'&#8195;','&thinsp;':'&#8201;',
1080
- '&zwnj;':'&#8204;','&zwj;':'&#8205;','&lrm;':'&#8206;',
1081
- '&rlm;':'&#8207;','&ndash;':'&#8211;','&mdash;':'&#8212;',
1082
- '&lsquo;':'&#8216;','&rsquo;':'&#8217;','&sbquo;':'&#8218;',
1083
- '&ldquo;':'&#8220;','&rdquo;':'&#8221;','&bdquo;':'&#8222;',
1084
- '&dagger;':'&#8224;','&Dagger;':'&#8225;','&bull;':'&#8226;',
1085
- '&hellip;':'&#8230;','&permil;':'&#8240;','&prime;':'&#8242;',
1086
- '&Prime;':'&#8243;','&lsaquo;':'&#8249;','&rsaquo;':'&#8250;',
1087
- '&oline;':'&#8254;','&frasl;':'&#8260;','&euro;':'&#8364;',
1088
- '&image;':'&#8465;','&weierp;':'&#8472;','&real;':'&#8476;',
1089
- '&trade;':'&#8482;','&alefsym;':'&#8501;','&larr;':'&#8592;',
1090
- '&uarr;':'&#8593;','&rarr;':'&#8594;','&darr;':'&#8595;',
1091
- '&harr;':'&#8596;','&crarr;':'&#8629;','&lArr;':'&#8656;',
1092
- '&uArr;':'&#8657;','&rArr;':'&#8658;','&dArr;':'&#8659;',
1093
- '&hArr;':'&#8660;','&forall;':'&#8704;','&part;':'&#8706;',
1094
- '&exist;':'&#8707;','&empty;':'&#8709;','&nabla;':'&#8711;',
1095
- '&isin;':'&#8712;','&notin;':'&#8713;','&ni;':'&#8715;',
1096
- '&prod;':'&#8719;','&sum;':'&#8721;','&minus;':'&#8722;',
1097
- '&lowast;':'&#8727;','&radic;':'&#8730;','&prop;':'&#8733;',
1098
- '&infin;':'&#8734;','&ang;':'&#8736;','&and;':'&#8743;',
1099
- '&or;':'&#8744;','&cap;':'&#8745;','&cup;':'&#8746;',
1100
- '&int;':'&#8747;','&there4;':'&#8756;','&sim;':'&#8764;',
1101
- '&cong;':'&#8773;','&asymp;':'&#8776;','&ne;':'&#8800;',
1102
- '&equiv;':'&#8801;','&le;':'&#8804;','&ge;':'&#8805;',
1103
- '&sub;':'&#8834;','&sup;':'&#8835;','&nsub;':'&#8836;',
1104
- '&sube;':'&#8838;','&supe;':'&#8839;','&oplus;':'&#8853;',
1105
- '&otimes;':'&#8855;','&perp;':'&#8869;','&sdot;':'&#8901;',
1106
- '&lceil;':'&#8968;','&rceil;':'&#8969;','&lfloor;':'&#8970;',
1107
- '&rfloor;':'&#8971;','&lang;':'&#9001;','&rang;':'&#9002;',
1108
- '&loz;':'&#9674;','&spades;':'&#9824;','&clubs;':'&#9827;',
1109
- '&hearts;':'&#9829;','&diams;':'&#9830;'};
1110
-
1111
- this.block_tags = ["a", "abbr", "acronym", "address", "area", "b",
1112
- "base", "bdo", "big", "blockquote", "body", "button",
1113
- "caption", "cite", "code", "col", "colgroup", "dd", "del", "div",
1114
- "dfn", "dl", "dt", "em", "fieldset", "form", "head", "h1", "h2",
1115
- "h3", "h4", "h5", "h6", "html", "i", "iframe", "ins",
1116
- "kbd", "label", "legend", "li", "map", "noscript",
1117
- "object", "ol", "optgroup", "option", "p", "pre", "q",
1118
- "samp", "script", "select", "small", "span", "strong", "style",
1119
- "sub", "sup", "table", "tbody", "td", "textarea", "tfoot", "th",
1120
- "thead", "title", "tr", "tt", "ul", "var", "extends", "meter",
1121
- "section", "article", "aside", "details", "header", "footer",
1122
- "nav", "dialog", "figure", "figcaption", "address", "hgroup",
1123
- "mark", "time", "canvas", "audio", "video", "output",
1124
- "progress", "ruby", "rt", "rp", "summary", "command"];
1125
-
1126
-
1127
- // Defines self-closing tags.
1128
- this.inline_tags = ["br", "embed", "hr", "img", "input", "param", "source", "wbr"];
1129
-
1130
- return this;
1131
- };
1132
-
1133
- WYMeditor.XhtmlSaxListener.prototype.shouldCloseTagAutomatically = function(tag, now_on_tag, closing)
1134
- {
1135
- var closing = closing || false;
1136
- if(tag == 'td'){
1137
- if((closing && now_on_tag == 'tr') || (!closing && now_on_tag == 'td')){
1138
- return true;
1139
- }
1140
- }
1141
- if(tag == 'option'){
1142
- if((closing && now_on_tag == 'select') || (!closing && now_on_tag == 'option')){
1143
- return true;
1144
- }
1145
- }
1146
- return false;
1147
- };
1148
-
1149
- WYMeditor.XhtmlSaxListener.prototype.beforeParsing = function(raw)
1150
- {
1151
- this.output = '';
1152
- return raw;
1153
- };
1154
-
1155
- WYMeditor.XhtmlSaxListener.prototype.afterParsing = function(xhtml)
1156
- {
1157
- xhtml = this.replaceNamedEntities(xhtml);
1158
- xhtml = this.joinRepeatedEntities(xhtml);
1159
- xhtml = this.removeEmptyTags(xhtml);
1160
- return xhtml;
1161
- };
1162
-
1163
- WYMeditor.XhtmlSaxListener.prototype.replaceNamedEntities = function(xhtml)
1164
- {
1165
- for (var entity in this.entities) {
1166
- xhtml = xhtml.replace(new RegExp(entity, 'g'), this.entities[entity]);
1167
- }
1168
- return xhtml;
1169
- };
1170
-
1171
- WYMeditor.XhtmlSaxListener.prototype.joinRepeatedEntities = function(xhtml)
1172
- {
1173
- var tags = 'em|strong|sub|sup|acronym|pre|del|address';
1174
- return xhtml.replace(new RegExp('<\/('+tags+')><\\1>' ,''),'').
1175
- replace(new RegExp('(\s*<('+tags+')>\s*){2}(.*)(\s*<\/\\2>\s*){2}' ,''),'<\$2>\$3<\$2>');
1176
- };
1177
-
1178
- WYMeditor.XhtmlSaxListener.prototype.removeEmptyTags = function(xhtml)
1179
- {
1180
- return xhtml.replace(new RegExp('<('+this.block_tags.join("|").replace(/\|td/,'').replace(/\|th/, '')+')>(<br \/>|&#160;|&nbsp;|\\s)*<\/\\1>' ,'g'),'');
1181
- };
1182
-
1183
- WYMeditor.XhtmlSaxListener.prototype.removeBrInPre = function(xhtml)
1184
- {
1185
- var matches = xhtml.match(new RegExp('<pre[^>]*>(.*?)<\/pre>','gmi'));
1186
- if(matches) {
1187
- for(var i=0; i<matches.length; i++) {
1188
- xhtml = xhtml.replace(matches[i], matches[i].replace(new RegExp('<br \/>', 'g'), String.fromCharCode(13,10)));
1189
- }
1190
- }
1191
- return xhtml;
1192
- };
1193
-
1194
- WYMeditor.XhtmlSaxListener.prototype.getResult = function()
1195
- {
1196
- return this.output;
1197
- };
1198
-
1199
- WYMeditor.XhtmlSaxListener.prototype.getTagReplacements = function()
1200
- {
1201
- return {'b':'strong', 'i':'em'};
1202
- };
1203
-
1204
- WYMeditor.XhtmlSaxListener.prototype.addContent = function(text)
1205
- {
1206
- this.output += text;
1207
- };
1208
-
1209
- WYMeditor.XhtmlSaxListener.prototype.addComment = function(text)
1210
- {
1211
- if(this.remove_comments){
1212
- this.output += text;
1213
- }
1214
- };
1215
-
1216
- WYMeditor.XhtmlSaxListener.prototype.addScript = function(text)
1217
- {
1218
- if(!this.remove_scripts){
1219
- this.output += text;
1220
- }
1221
- };
1222
-
1223
- WYMeditor.XhtmlSaxListener.prototype.addCss = function(text)
1224
- {
1225
- if(!this.remove_embeded_styles){
1226
- this.output += text;
1227
- }
1228
- };
1229
-
1230
- WYMeditor.XhtmlSaxListener.prototype.openBlockTag = function(tag, attributes)
1231
- {
1232
- this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes), true);
1233
- };
1234
-
1235
- WYMeditor.XhtmlSaxListener.prototype.inlineTag = function(tag, attributes)
1236
- {
1237
- this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes));
1238
- };
1239
-
1240
- WYMeditor.XhtmlSaxListener.prototype.openUnknownTag = function(tag, attributes)
1241
- {
1242
- if(tag === 'area') {
1243
- this.output += this.helper.tag(tag, attributes, true);
1244
- }
1245
- };
1246
-
1247
- WYMeditor.XhtmlSaxListener.prototype.closeBlockTag = function(tag)
1248
- {
1249
- this.output = this.output.replace(/<br \/>$/, '')+this._getClosingTagContent('before', tag)+"</"+tag+">"+this._getClosingTagContent('after', tag);
1250
- };
1251
-
1252
- WYMeditor.XhtmlSaxListener.prototype.closeUnknownTag = function(tag)
1253
- {
1254
- //this.output += "</"+tag+">";
1255
- };
1256
-
1257
- WYMeditor.XhtmlSaxListener.prototype.closeUnopenedTag = function(tag)
1258
- {
1259
- this.output += "</"+tag+">";
1260
- };
1261
-
1262
- WYMeditor.XhtmlSaxListener.prototype.avoidStylingTagsAndAttributes = function()
1263
- {
1264
- this.avoided_tags = ['div','span'];
1265
- this.validator.skipped_attributes = ['style'];
1266
- this.validator.skipped_attribute_values = ['MsoNormal','main1']; // MS Word attributes for class
1267
- this._avoiding_tags_implicitly = true;
1268
- };
1269
-
1270
- WYMeditor.XhtmlSaxListener.prototype.allowStylingTagsAndAttributes = function()
1271
- {
1272
- this.avoided_tags = [];
1273
- this.validator.skipped_attributes = [];
1274
- this.validator.skipped_attribute_values = [];
1275
- this._avoiding_tags_implicitly = false;
1276
- };
1277
-
1278
- WYMeditor.XhtmlSaxListener.prototype.isBlockTag = function(tag)
1279
- {
1280
- return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.block_tags, tag);
1281
- };
1282
-
1283
- WYMeditor.XhtmlSaxListener.prototype.isInlineTag = function(tag)
1284
- {
1285
- return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.inline_tags, tag);
1286
- };
1287
-
1288
- WYMeditor.XhtmlSaxListener.prototype.insertContentAfterClosingTag = function(tag, content)
1289
- {
1290
- this._insertContentWhenClosingTag('after', tag, content);
1291
- };
1292
-
1293
- WYMeditor.XhtmlSaxListener.prototype.insertContentBeforeClosingTag = function(tag, content)
1294
- {
1295
- this._insertContentWhenClosingTag('before', tag, content);
1296
- };
1297
-
1298
- WYMeditor.XhtmlSaxListener.prototype.fixNestingBeforeOpeningBlockTag = function(tag, attributes)
1299
- {
1300
- if(tag != 'li' && (tag == 'ul' || tag == 'ol') && this.last_tag && !this.last_tag_opened && this.last_tag == 'li'){
1301
- this.output = this.output.replace(/<\/li>$/, '');
1302
- this.insertContentAfterClosingTag(tag, '</li>');
1303
- }
1304
- };
1305
-
1306
- WYMeditor.XhtmlSaxListener.prototype._insertContentWhenClosingTag = function(position, tag, content)
1307
- {
1308
- if(!this['_insert_'+position+'_closing']){
1309
- this['_insert_'+position+'_closing'] = [];
1310
- }
1311
- if(!this['_insert_'+position+'_closing'][tag]){
1312
- this['_insert_'+position+'_closing'][tag] = [];
1313
- }
1314
- this['_insert_'+position+'_closing'][tag].push(content);
1315
- };
1316
-
1317
- WYMeditor.XhtmlSaxListener.prototype._getClosingTagContent = function(position, tag)
1318
- {
1319
- if( this['_insert_'+position+'_closing'] &&
1320
- this['_insert_'+position+'_closing'][tag] &&
1321
- this['_insert_'+position+'_closing'][tag].length > 0){
1322
- return this['_insert_'+position+'_closing'][tag].pop();
1323
- }
1324
- return '';
1325
- };
1326
-
1327
-
1328
- /********** CSS PARSER **********/
1329
-
1330
-
1331
- WYMeditor.WymCssLexer = function(parser, only_wym_blocks)
1332
- {
1333
- var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? true : only_wym_blocks);
1334
-
1335
- $.extend(this, new WYMeditor.Lexer(parser, (only_wym_blocks?'Ignore':'WymCss')));
1336
-
1337
- this.mapHandler('WymCss', 'Ignore');
1338
-
1339
- if(only_wym_blocks == true){
1340
- this.addEntryPattern("/\\\x2a[<\\s]*WYMeditor[>\\s]*\\\x2a/", 'Ignore', 'WymCss');
1341
- this.addExitPattern("/\\\x2a[<\/\\s]*WYMeditor[>\\s]*\\\x2a/", 'WymCss');
1342
- }
1343
-
1344
- this.addSpecialPattern("[\\sa-z1-6]*\\\x2e[a-z-_0-9]+", 'WymCss', 'WymCssStyleDeclaration');
1345
-
1346
- this.addEntryPattern("/\\\x2a", 'WymCss', 'WymCssComment');
1347
- this.addExitPattern("\\\x2a/", 'WymCssComment');
1348
-
1349
- this.addEntryPattern("\x7b", 'WymCss', 'WymCssStyle');
1350
- this.addExitPattern("\x7d", 'WymCssStyle');
1351
-
1352
- this.addEntryPattern("/\\\x2a", 'WymCssStyle', 'WymCssFeedbackStyle');
1353
- this.addExitPattern("\\\x2a/", 'WymCssFeedbackStyle');
1354
-
1355
- return this;
1356
- };
1357
-
1358
- WYMeditor.WymCssParser = function()
1359
- {
1360
- this._in_style = false;
1361
- this._has_title = false;
1362
- this.only_wym_blocks = true;
1363
- this.css_settings = {'classesItems':[], 'editorStyles':[], 'dialogStyles':[]};
1364
- return this;
1365
- };
1366
-
1367
- WYMeditor.WymCssParser.prototype.parse = function(raw, only_wym_blocks)
1368
- {
1369
- var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? this.only_wym_blocks : only_wym_blocks);
1370
- this._Lexer = new WYMeditor.WymCssLexer(this, only_wym_blocks);
1371
- this._Lexer.parse(raw);
1372
- };
1373
-
1374
- WYMeditor.WymCssParser.prototype.Ignore = function(match, state)
1375
- {
1376
- return true;
1377
- };
1378
-
1379
- WYMeditor.WymCssParser.prototype.WymCssComment = function(text, status)
1380
- {
1381
- if(text.match(/end[a-z0-9\s]*wym[a-z0-9\s]*/mi)){
1382
- return false;
1383
- }
1384
- if(status == WYMeditor.LEXER_UNMATCHED){
1385
- if(!this._in_style){
1386
- this._has_title = true;
1387
- this._current_item = {'title':WYMeditor.Helper.trim(text)};
1388
- }else{
1389
- if(this._current_item[this._current_element]){
1390
- if(!this._current_item[this._current_element].expressions){
1391
- this._current_item[this._current_element].expressions = [text];
1392
- }else{
1393
- this._current_item[this._current_element].expressions.push(text);
1394
- }
1395
- }
1396
- }
1397
- this._in_style = true;
1398
- }
1399
- return true;
1400
- };
1401
-
1402
- WYMeditor.WymCssParser.prototype.WymCssStyle = function(match, status)
1403
- {
1404
- if(status == WYMeditor.LEXER_UNMATCHED){
1405
- match = WYMeditor.Helper.trim(match);
1406
- if(match != ''){
1407
- this._current_item[this._current_element].style = match;
1408
- }
1409
- }else if (status == WYMeditor.LEXER_EXIT){
1410
- this._in_style = false;
1411
- this._has_title = false;
1412
- this.addStyleSetting(this._current_item);
1413
- }
1414
- return true;
1415
- };
1416
-
1417
- WYMeditor.WymCssParser.prototype.WymCssFeedbackStyle = function(match, status)
1418
- {
1419
- if(status == WYMeditor.LEXER_UNMATCHED){
1420
- this._current_item[this._current_element].feedback_style = match.replace(/^([\s\/\*]*)|([\s\/\*]*)$/gm,'');
1421
- }
1422
- return true;
1423
- };
1424
-
1425
- WYMeditor.WymCssParser.prototype.WymCssStyleDeclaration = function(match)
1426
- {
1427
- match = match.replace(/^([\s\.]*)|([\s\.*]*)$/gm, '');
1428
-
1429
- var tag = '';
1430
- if(match.indexOf('.') > 0){
1431
- var parts = match.split('.');
1432
- this._current_element = parts[1];
1433
- var tag = parts[0];
1434
- }else{
1435
- this._current_element = match;
1436
- }
1437
-
1438
- if(!this._has_title){
1439
- this._current_item = {'title':(!tag?'':tag.toUpperCase()+': ')+this._current_element};
1440
- this._has_title = true;
1441
- }
1442
-
1443
- if(!this._current_item[this._current_element]){
1444
- this._current_item[this._current_element] = {'name':this._current_element};
1445
- }
1446
- if(tag){
1447
- if(!this._current_item[this._current_element].tags){
1448
- this._current_item[this._current_element].tags = [tag];
1449
- }else{
1450
- this._current_item[this._current_element].tags.push(tag);
1451
- }
1452
- }
1453
- return true;
1454
- };
1455
-
1456
- WYMeditor.WymCssParser.prototype.addStyleSetting = function(style_details)
1457
- {
1458
- for (var name in style_details){
1459
- var details = style_details[name];
1460
- if(typeof details == 'object' && name != 'title'){
1461
-
1462
- this.css_settings.classesItems.push({
1463
- 'name': WYMeditor.Helper.trim(details.name),
1464
- 'title': style_details.title,
1465
- 'expr' : WYMeditor.Helper.trim((details.expressions||details.tags).join(', '))
1466
- });
1467
- if(details.feedback_style){
1468
- this.css_settings.editorStyles.push({
1469
- 'name': '.'+ WYMeditor.Helper.trim(details.name),
1470
- 'css': details.feedback_style
1471
- });
1472
- }
1473
- if(details.style){
1474
- this.css_settings.dialogStyles.push({
1475
- 'name': '.'+ WYMeditor.Helper.trim(details.name),
1476
- 'css': details.style
1477
- });
1478
- }
1479
- }
1480
- }
1481
- };
1482
-
1483
- /********** HELPERS **********/
1484
-
1485
- // Returns true if it is a text node with whitespaces only
1486
- $.fn.isPhantomNode = function() {
1487
- if (this[0].nodeType == 3)
1488
- return !(/[^\t\n\r ]/.test(this[0].data));
1489
-
1490
- return false;
1491
- };
1492
-
1493
- WYMeditor.isPhantomNode = function(n) {
1494
- if (n.nodeType == 3)
1495
- return !(/[^\t\n\r ]/.test(n.data));
1496
-
1497
- return false;
1498
- };
1499
-
1500
- WYMeditor.isPhantomString = function(str) {
1501
- return !(/[^\t\n\r ]/.test(str));
1502
- };
1503
-
1504
- // Returns the Parents or the node itself
1505
- // jqexpr = a jQuery expression
1506
- $.fn.parentsOrSelf = function(jqexpr) {
1507
- var n = this;
1508
-
1509
- if (n[0].nodeType == 3)
1510
- n = n.parents().slice(0,1);
1511
-
1512
- // if (n.is(jqexpr)) // XXX should work, but doesn't (probably a jQuery bug)
1513
- if (n.filter(jqexpr).size() == 1)
1514
- return n;
1515
- else
1516
- return n.parents(jqexpr).slice(0,1);
1517
- };
1518
-
1519
- // String & array helpers
1520
-
1521
- WYMeditor.Helper = {
1522
-
1523
- //replace all instances of 'old' by 'rep' in 'str' string
1524
- replaceAll: function(str, old, rep) {
1525
- return(str.replace(new RegExp(old, "g"), rep));
1526
- },
1527
-
1528
- //insert 'inserted' at position 'pos' in 'str' string
1529
- insertAt: function(str, inserted, pos) {
1530
- return(str.substr(0,pos) + inserted + str.substring(pos));
1531
- },
1532
-
1533
- //trim 'str' string
1534
- trim: function(str) {
1535
- return str.replace(/^(\s*)|(\s*)$/gm,'');
1536
- },
1537
-
1538
- //return true if 'arr' array contains 'elem', or false
1539
- contains: function(arr, elem) {
1540
- for (var i = 0; i < arr.length; i++) {
1541
- if (arr[i] === elem) return true;
1542
- }
1543
- return false;
1544
- },
1545
-
1546
- //return 'item' position in 'arr' array, or -1
1547
- indexOf: function(arr, item) {
1548
- var ret=-1;
1549
- for(var i = 0; i < arr.length; i++) {
1550
- if (arr[i] == item) {
1551
- ret = i;
1552
- break;
1553
- }
1554
- }
1555
- return ret;
1556
- },
1557
-
1558
- //return 'item' object in 'arr' array, checking its 'name' property, or null
1559
- findByName: function(arr, name) {
1560
- for(var i = 0; i < arr.length; i++) {
1561
- var item = arr[i];
1562
- if(item.name == name) return(item);
1563
- }
1564
- return null;
1565
- }
1566
- };
1567
-
1568
- function titleize(words) {
1569
- if (words == null) return words;
1570
- parts = [];
1571
- $.each(words.replace(/\./, '').replace(/[-_]/, ' ').split(' '), function(index, part){
1572
- parts.push(part.substring(0,1).toUpperCase() + part.substring(1));
1573
- });
1574
- return parts.join(" ");
1575
- }