tribeca_cms 0.1.1

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 (565) hide show
  1. data/Gemfile +58 -0
  2. data/LICENSE +1 -0
  3. data/README.textile +0 -0
  4. data/app/assets/images/locomotive/background/body.png +0 -0
  5. data/app/assets/images/locomotive/datepicker/ui-widget-content-top.png +0 -0
  6. data/app/assets/images/locomotive/form/error-arrow.png +0 -0
  7. data/app/assets/images/locomotive/form/input-sep.png +0 -0
  8. data/app/assets/images/locomotive/icons/flags/de.png +0 -0
  9. data/app/assets/images/locomotive/icons/flags/en.png +0 -0
  10. data/app/assets/images/locomotive/icons/flags/es.png +0 -0
  11. data/app/assets/images/locomotive/icons/flags/et.png +0 -0
  12. data/app/assets/images/locomotive/icons/flags/fr.png +0 -0
  13. data/app/assets/images/locomotive/icons/flags/it.png +0 -0
  14. data/app/assets/images/locomotive/icons/flags/nb.png +0 -0
  15. data/app/assets/images/locomotive/icons/flags/nl.png +0 -0
  16. data/app/assets/images/locomotive/icons/flags/pl.png +0 -0
  17. data/app/assets/images/locomotive/icons/flags/pt-BR.png +0 -0
  18. data/app/assets/images/locomotive/icons/flags/ru.png +0 -0
  19. data/app/assets/images/locomotive/icons/start.png +0 -0
  20. data/app/assets/images/locomotive/list/empty.png +0 -0
  21. data/app/assets/images/locomotive/list/item-left.png +0 -0
  22. data/app/assets/images/locomotive/nocoffee.png +0 -0
  23. data/app/assets/images/locomotive/plugins/sites_picker_top_arrow.png +0 -0
  24. data/app/assets/images/locomotive/rails.png +0 -0
  25. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/css/image.css +3 -0
  26. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/img/image.gif +0 -0
  27. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/lib/locomotive_media-plugin.js +96 -0
  28. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/nls/fr/i18n.js +1 -0
  29. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/nls/i18n.js +4 -0
  30. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/package.json +1 -0
  31. data/app/assets/javascripts/locomotive.js +25 -0
  32. data/app/assets/javascripts/locomotive/aloha.js.coffee +2 -0
  33. data/app/assets/javascripts/locomotive/application.js.coffee +12 -0
  34. data/app/assets/javascripts/locomotive/inline_editor.js.coffee +22 -0
  35. data/app/assets/javascripts/locomotive/models/account.js.coffee +11 -0
  36. data/app/assets/javascripts/locomotive/models/content_asset.js.coffee +20 -0
  37. data/app/assets/javascripts/locomotive/models/content_entry.js.coffee +61 -0
  38. data/app/assets/javascripts/locomotive/models/content_type.js.coffee +26 -0
  39. data/app/assets/javascripts/locomotive/models/custom_field.js.coffee +38 -0
  40. data/app/assets/javascripts/locomotive/models/custom_field_select_option.js.coffee +16 -0
  41. data/app/assets/javascripts/locomotive/models/domain.js.coffee +3 -0
  42. data/app/assets/javascripts/locomotive/models/editable_element.js.coffee +27 -0
  43. data/app/assets/javascripts/locomotive/models/membership.js.coffee +13 -0
  44. data/app/assets/javascripts/locomotive/models/page.js.coffee +27 -0
  45. data/app/assets/javascripts/locomotive/models/site.js.coffee +34 -0
  46. data/app/assets/javascripts/locomotive/models/snippet.js.coffee +11 -0
  47. data/app/assets/javascripts/locomotive/models/theme_asset.js.coffee +11 -0
  48. data/app/assets/javascripts/locomotive/models/translation.js.coffee +5 -0
  49. data/app/assets/javascripts/locomotive/not_logged_in.js.coffee +1 -0
  50. data/app/assets/javascripts/locomotive/utils/aloha_settings.js.coffee +37 -0
  51. data/app/assets/javascripts/locomotive/utils/core_ext.js +75 -0
  52. data/app/assets/javascripts/locomotive/utils/growl.js +14 -0
  53. data/app/assets/javascripts/locomotive/utils/handlebar_helpers.js.coffee +9 -0
  54. data/app/assets/javascripts/locomotive/utils/tinymce_settings.js.coffee +48 -0
  55. data/app/assets/javascripts/locomotive/views/application_view.js.coffee +92 -0
  56. data/app/assets/javascripts/locomotive/views/content_assets/picker_item_view.js.coffee +30 -0
  57. data/app/assets/javascripts/locomotive/views/content_assets/picker_view.js.coffee +58 -0
  58. data/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee +144 -0
  59. data/app/assets/javascripts/locomotive/views/content_entries/_popup_form_view.js.coffee +90 -0
  60. data/app/assets/javascripts/locomotive/views/content_entries/edit_view.js.coffee +9 -0
  61. data/app/assets/javascripts/locomotive/views/content_entries/index_view.js.coffee +36 -0
  62. data/app/assets/javascripts/locomotive/views/content_entries/new_view.js.coffee +8 -0
  63. data/app/assets/javascripts/locomotive/views/content_types/_form_view.js.coffee +86 -0
  64. data/app/assets/javascripts/locomotive/views/content_types/custom_field_entry_view.js.coffee +104 -0
  65. data/app/assets/javascripts/locomotive/views/content_types/custom_fields_view.coffee +94 -0
  66. data/app/assets/javascripts/locomotive/views/content_types/edit_view.coffee +14 -0
  67. data/app/assets/javascripts/locomotive/views/content_types/new_view.js.coffee +11 -0
  68. data/app/assets/javascripts/locomotive/views/content_types/select_options_view.js.coffee +89 -0
  69. data/app/assets/javascripts/locomotive/views/current_site/edit_view.js.coffee +86 -0
  70. data/app/assets/javascripts/locomotive/views/editable_elements/control_view.js.coffee +24 -0
  71. data/app/assets/javascripts/locomotive/views/editable_elements/edit_all_view.js.coffee +83 -0
  72. data/app/assets/javascripts/locomotive/views/editable_elements/file_view.js.coffee +74 -0
  73. data/app/assets/javascripts/locomotive/views/editable_elements/long_text_view.js.coffee +36 -0
  74. data/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee +22 -0
  75. data/app/assets/javascripts/locomotive/views/inline_editor/application_view.js.coffee +124 -0
  76. data/app/assets/javascripts/locomotive/views/inline_editor/toolbar_view.js.coffee +145 -0
  77. data/app/assets/javascripts/locomotive/views/my_account/edit_view.js.coffee +24 -0
  78. data/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee +162 -0
  79. data/app/assets/javascripts/locomotive/views/pages/edit_view.js.coffee +31 -0
  80. data/app/assets/javascripts/locomotive/views/pages/index_view.js.coffee +11 -0
  81. data/app/assets/javascripts/locomotive/views/pages/list_view.js.coffee +40 -0
  82. data/app/assets/javascripts/locomotive/views/pages/new_view.js.coffee +8 -0
  83. data/app/assets/javascripts/locomotive/views/shared/asset_picker_view.js.coffee +92 -0
  84. data/app/assets/javascripts/locomotive/views/shared/fields/file_view.js.coffee +88 -0
  85. data/app/assets/javascripts/locomotive/views/shared/fields/has_many_view.js.coffee +125 -0
  86. data/app/assets/javascripts/locomotive/views/shared/fields/many_to_many_view.js.coffee +131 -0
  87. data/app/assets/javascripts/locomotive/views/shared/fields/select_view.js.coffee +83 -0
  88. data/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee +138 -0
  89. data/app/assets/javascripts/locomotive/views/shared/list_item_view.js.coffee +22 -0
  90. data/app/assets/javascripts/locomotive/views/shared/list_view.js.coffee +53 -0
  91. data/app/assets/javascripts/locomotive/views/sites/domain_entry_view.js.coffee +26 -0
  92. data/app/assets/javascripts/locomotive/views/sites/domains_view.js.coffee +84 -0
  93. data/app/assets/javascripts/locomotive/views/sites/membership_entry_view.js.coffee +31 -0
  94. data/app/assets/javascripts/locomotive/views/sites/memberships_view.js.coffee +41 -0
  95. data/app/assets/javascripts/locomotive/views/sites/new_view.js.coffee +43 -0
  96. data/app/assets/javascripts/locomotive/views/snippets/_form_view.js.coffee +75 -0
  97. data/app/assets/javascripts/locomotive/views/snippets/edit_view.js.coffee +6 -0
  98. data/app/assets/javascripts/locomotive/views/snippets/list_item_view.js.coffee +8 -0
  99. data/app/assets/javascripts/locomotive/views/snippets/list_view.js.coffee +17 -0
  100. data/app/assets/javascripts/locomotive/views/snippets/new_view.js.coffee +8 -0
  101. data/app/assets/javascripts/locomotive/views/theme_assets/_form_view.js.coffee +104 -0
  102. data/app/assets/javascripts/locomotive/views/theme_assets/edit_view.js.coffee +16 -0
  103. data/app/assets/javascripts/locomotive/views/theme_assets/image_picker_view.js.coffee +48 -0
  104. data/app/assets/javascripts/locomotive/views/theme_assets/index_view.js.coffee +91 -0
  105. data/app/assets/javascripts/locomotive/views/theme_assets/list_item_view.js.coffee +8 -0
  106. data/app/assets/javascripts/locomotive/views/theme_assets/list_view.js.coffee +17 -0
  107. data/app/assets/javascripts/locomotive/views/theme_assets/new_view.js.coffee +8 -0
  108. data/app/assets/javascripts/locomotive/views/translations/_form_view.js.coffee +20 -0
  109. data/app/assets/javascripts/locomotive/views/translations/edit_view.js.coffee +6 -0
  110. data/app/assets/javascripts/locomotive/views/translations/new_view.js.coffee +8 -0
  111. data/app/assets/javascripts/tinymce/plugins/jqueryinlinepopups/editor_plugin.js +240 -0
  112. data/app/assets/javascripts/tinymce/plugins/locomotive_media/editor_plugin.js +78 -0
  113. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/content.css +66 -0
  114. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/dialog.css.scss +78 -0
  115. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/butt2.png +0 -0
  116. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/button-bg.png +0 -0
  117. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/buttons.png +0 -0
  118. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/down_arrow.gif +0 -0
  119. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/fade-butt.png +0 -0
  120. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/icons.png +0 -0
  121. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/items.gif +0 -0
  122. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/menu-arrow.png +0 -0
  123. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/menu-check.png +0 -0
  124. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/progress.gif +0 -0
  125. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/tabs.gif +0 -0
  126. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/toolbarbg.png +0 -0
  127. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/ui.css +1018 -0
  128. data/app/assets/stylesheets/locomotive.css +16 -0
  129. data/app/assets/stylesheets/locomotive/backoffice/_box.css.scss +157 -0
  130. data/app/assets/stylesheets/locomotive/backoffice/_buttons.css.scss +178 -0
  131. data/app/assets/stylesheets/locomotive/backoffice/application.css.scss +332 -0
  132. data/app/assets/stylesheets/locomotive/backoffice/codemirror_changes.css.scss +19 -0
  133. data/app/assets/stylesheets/locomotive/backoffice/content_assets.css.scss +130 -0
  134. data/app/assets/stylesheets/locomotive/backoffice/datepicker.css.scss +178 -0
  135. data/app/assets/stylesheets/locomotive/backoffice/dialog_changes.css.scss +141 -0
  136. data/app/assets/stylesheets/locomotive/backoffice/editable_elements.css.scss +71 -0
  137. data/app/assets/stylesheets/locomotive/backoffice/formtastic_changes.css.scss +735 -0
  138. data/app/assets/stylesheets/locomotive/backoffice/layout.css.scss +205 -0
  139. data/app/assets/stylesheets/locomotive/backoffice/menu.css +8 -0
  140. data/app/assets/stylesheets/locomotive/backoffice/menu/_colors.css.scss +125 -0
  141. data/app/assets/stylesheets/locomotive/backoffice/menu/_helpers.css.scss +6 -0
  142. data/app/assets/stylesheets/locomotive/backoffice/menu/default.css.scss +32 -0
  143. data/app/assets/stylesheets/locomotive/backoffice/menu/main.css.scss +127 -0
  144. data/app/assets/stylesheets/locomotive/backoffice/menu/sub.css.scss +276 -0
  145. data/app/assets/stylesheets/locomotive/backoffice/sites_picker.css.scss +12 -0
  146. data/app/assets/stylesheets/locomotive/inline_editor.css +13 -0
  147. data/app/assets/stylesheets/locomotive/inline_editor/_buttons.css.scss +60 -0
  148. data/app/assets/stylesheets/locomotive/inline_editor/layout.css.scss +22 -0
  149. data/app/assets/stylesheets/locomotive/inline_editor/toolbar.css.scss +114 -0
  150. data/app/assets/stylesheets/locomotive/not_logged_in.css +8 -0
  151. data/app/assets/stylesheets/locomotive/not_logged_in/installation.css.scss +62 -0
  152. data/app/assets/stylesheets/locomotive/not_logged_in/layout.css.scss +185 -0
  153. data/app/assets/stylesheets/locomotive/shared/_helpers.css.scss +150 -0
  154. data/app/assets/stylesheets/locomotive/shared/_picker.css.scss +73 -0
  155. data/app/assets/stylesheets/locomotive/shared/common.css.scss +34 -0
  156. data/app/assets/stylesheets/locomotive/shared/content_locale_picker.css.scss +80 -0
  157. data/app/assets/stylesheets/locomotive/shared/growl.css.scss +29 -0
  158. data/app/cells/locomotive/content_locale_picker/show.html.haml +7 -0
  159. data/app/cells/locomotive/content_locale_picker_cell.rb +21 -0
  160. data/app/cells/locomotive/global_actions/show.html.haml +12 -0
  161. data/app/cells/locomotive/global_actions_cell.rb +36 -0
  162. data/app/cells/locomotive/main_menu/show.html.haml +13 -0
  163. data/app/cells/locomotive/main_menu_cell.rb +12 -0
  164. data/app/cells/locomotive/menu/show.html.haml +1 -0
  165. data/app/cells/locomotive/menu_cell.rb +102 -0
  166. data/app/cells/locomotive/settings_menu_cell.rb +14 -0
  167. data/app/cells/locomotive/sub_menu/show.html.haml +4 -0
  168. data/app/cells/locomotive/sub_menu_cell.rb +13 -0
  169. data/app/controllers/locomotive/accounts_controller.rb +18 -0
  170. data/app/controllers/locomotive/api/accounts_controller.rb +79 -0
  171. data/app/controllers/locomotive/api/base_controller.rb +50 -0
  172. data/app/controllers/locomotive/api/content_assets_controller.rb +39 -0
  173. data/app/controllers/locomotive/api/content_entries_controller.rb +45 -0
  174. data/app/controllers/locomotive/api/content_types_controller.rb +39 -0
  175. data/app/controllers/locomotive/api/current_site_controller.rb +58 -0
  176. data/app/controllers/locomotive/api/documentation_controller.rb +15 -0
  177. data/app/controllers/locomotive/api/memberships_controller.rb +97 -0
  178. data/app/controllers/locomotive/api/my_account_controller.rb +35 -0
  179. data/app/controllers/locomotive/api/pages_controller.rb +41 -0
  180. data/app/controllers/locomotive/api/sites_controller.rb +93 -0
  181. data/app/controllers/locomotive/api/snippets_controller.rb +40 -0
  182. data/app/controllers/locomotive/api/theme_assets_controller.rb +39 -0
  183. data/app/controllers/locomotive/api/tokens_controller.rb +54 -0
  184. data/app/controllers/locomotive/api/translations_controller.rb +31 -0
  185. data/app/controllers/locomotive/base_controller.rb +61 -0
  186. data/app/controllers/locomotive/content_assets_controller.rb +23 -0
  187. data/app/controllers/locomotive/content_entries_controller.rb +71 -0
  188. data/app/controllers/locomotive/content_types_controller.rb +40 -0
  189. data/app/controllers/locomotive/current_site_controller.rb +52 -0
  190. data/app/controllers/locomotive/installation_controller.rb +72 -0
  191. data/app/controllers/locomotive/memberships_controller.rb +29 -0
  192. data/app/controllers/locomotive/my_account_controller.rb +24 -0
  193. data/app/controllers/locomotive/pages_controller.rb +63 -0
  194. data/app/controllers/locomotive/passwords_controller.rb +19 -0
  195. data/app/controllers/locomotive/public/base_controller.rb +22 -0
  196. data/app/controllers/locomotive/public/content_entries_controller.rb +55 -0
  197. data/app/controllers/locomotive/public/pages_controller.rb +50 -0
  198. data/app/controllers/locomotive/public/robots_controller.rb +16 -0
  199. data/app/controllers/locomotive/public/sitemaps_controller.rb +14 -0
  200. data/app/controllers/locomotive/sessions_controller.rb +29 -0
  201. data/app/controllers/locomotive/sites_controller.rb +33 -0
  202. data/app/controllers/locomotive/snippets_controller.rb +47 -0
  203. data/app/controllers/locomotive/theme_assets_controller.rb +52 -0
  204. data/app/controllers/locomotive/translations_controller.rb +32 -0
  205. data/app/helpers/locomotive/accounts_helper.rb +13 -0
  206. data/app/helpers/locomotive/base_helper.rb +182 -0
  207. data/app/helpers/locomotive/content_entries_helper.rb +15 -0
  208. data/app/helpers/locomotive/content_types_helper.rb +72 -0
  209. data/app/helpers/locomotive/custom_fields_helper.rb +70 -0
  210. data/app/helpers/locomotive/installation_helper.rb +9 -0
  211. data/app/helpers/locomotive/pages_helper.rb +95 -0
  212. data/app/helpers/locomotive/sites_helper.rb +15 -0
  213. data/app/helpers/locomotive/snippets_helper.rb +20 -0
  214. data/app/helpers/locomotive/theme_assets_helper.rb +30 -0
  215. data/app/helpers/locomotive/translations_helper.rb +19 -0
  216. data/app/inputs/locomotive/code_input.rb +51 -0
  217. data/app/inputs/locomotive/empty_input.rb +35 -0
  218. data/app/inputs/locomotive/file_input.rb +45 -0
  219. data/app/inputs/locomotive/locale_input.rb +40 -0
  220. data/app/inputs/locomotive/locales_input.rb +60 -0
  221. data/app/inputs/locomotive/rte_input.rb +13 -0
  222. data/app/inputs/locomotive/small_code_input.rb +22 -0
  223. data/app/inputs/locomotive/subdomain_input.rb +22 -0
  224. data/app/inputs/locomotive/toggle_input.rb +13 -0
  225. data/app/mailers/locomotive/devise_mailer.rb +10 -0
  226. data/app/mailers/locomotive/notifications.rb +15 -0
  227. data/app/models/locomotive/ability.rb +89 -0
  228. data/app/models/locomotive/account.rb +117 -0
  229. data/app/models/locomotive/content_asset.rb +40 -0
  230. data/app/models/locomotive/content_entry.rb +197 -0
  231. data/app/models/locomotive/content_type.rb +224 -0
  232. data/app/models/locomotive/editable_control.rb +52 -0
  233. data/app/models/locomotive/editable_element.rb +122 -0
  234. data/app/models/locomotive/editable_file.rb +85 -0
  235. data/app/models/locomotive/editable_long_text.rb +5 -0
  236. data/app/models/locomotive/editable_short_text.rb +66 -0
  237. data/app/models/locomotive/extensions/asset/types.rb +31 -0
  238. data/app/models/locomotive/extensions/asset/vignette.rb +19 -0
  239. data/app/models/locomotive/extensions/content_type/default_values.rb +57 -0
  240. data/app/models/locomotive/extensions/content_type/item_template.rb +49 -0
  241. data/app/models/locomotive/extensions/content_type/sync.rb +62 -0
  242. data/app/models/locomotive/extensions/page/editable_elements.rb +105 -0
  243. data/app/models/locomotive/extensions/page/listed.rb +18 -0
  244. data/app/models/locomotive/extensions/page/parse.rb +125 -0
  245. data/app/models/locomotive/extensions/page/redirect.rb +25 -0
  246. data/app/models/locomotive/extensions/page/render.rb +93 -0
  247. data/app/models/locomotive/extensions/page/templatized.rb +163 -0
  248. data/app/models/locomotive/extensions/page/tree.rb +133 -0
  249. data/app/models/locomotive/extensions/shared/seo.rb +16 -0
  250. data/app/models/locomotive/extensions/site/first_installation.rb +20 -0
  251. data/app/models/locomotive/extensions/site/locales.rb +112 -0
  252. data/app/models/locomotive/extensions/site/subdomain_domains.rb +91 -0
  253. data/app/models/locomotive/membership.rb +75 -0
  254. data/app/models/locomotive/page.rb +130 -0
  255. data/app/models/locomotive/site.rb +79 -0
  256. data/app/models/locomotive/snippet.rb +70 -0
  257. data/app/models/locomotive/theme_asset.rb +175 -0
  258. data/app/models/locomotive/translation.rb +32 -0
  259. data/app/presenters/locomotive/account_presenter.rb +19 -0
  260. data/app/presenters/locomotive/base_presenter.rb +99 -0
  261. data/app/presenters/locomotive/content_asset_presenter.rb +43 -0
  262. data/app/presenters/locomotive/content_entry_presenter.rb +217 -0
  263. data/app/presenters/locomotive/content_field_presenter.rb +71 -0
  264. data/app/presenters/locomotive/content_type_presenter.rb +68 -0
  265. data/app/presenters/locomotive/editable_control_presenter.rb +19 -0
  266. data/app/presenters/locomotive/editable_element_presenter.rb +40 -0
  267. data/app/presenters/locomotive/editable_file_presenter.rb +29 -0
  268. data/app/presenters/locomotive/editable_long_text_presenter.rb +5 -0
  269. data/app/presenters/locomotive/editable_short_text_presenter.rb +27 -0
  270. data/app/presenters/locomotive/membership_presenter.rb +36 -0
  271. data/app/presenters/locomotive/page_presenter.rb +58 -0
  272. data/app/presenters/locomotive/site_presenter.rb +36 -0
  273. data/app/presenters/locomotive/snippet_presenter.rb +22 -0
  274. data/app/presenters/locomotive/theme_asset_presenter.rb +61 -0
  275. data/app/presenters/locomotive/translation_presenter.rb +9 -0
  276. data/app/uploaders/locomotive/content_asset_uploader.rb +13 -0
  277. data/app/uploaders/locomotive/editable_file_uploader.rb +15 -0
  278. data/app/uploaders/locomotive/theme_asset_uploader.rb +28 -0
  279. data/app/views/locomotive/accounts/new.html.haml +21 -0
  280. data/app/views/locomotive/content_assets/_asset.html.haml +5 -0
  281. data/app/views/locomotive/content_assets/_picker.html.haml +33 -0
  282. data/app/views/locomotive/content_entries/_form.html.haml +22 -0
  283. data/app/views/locomotive/content_entries/_list.html.haml +18 -0
  284. data/app/views/locomotive/content_entries/edit.html.haml +21 -0
  285. data/app/views/locomotive/content_entries/index.html.haml +32 -0
  286. data/app/views/locomotive/content_entries/new.html.haml +19 -0
  287. data/app/views/locomotive/content_types/_form.html.haml +39 -0
  288. data/app/views/locomotive/content_types/edit.html.haml +19 -0
  289. data/app/views/locomotive/content_types/new.html.haml +15 -0
  290. data/app/views/locomotive/current_site/_form.html.haml +36 -0
  291. data/app/views/locomotive/current_site/edit.html.haml +19 -0
  292. data/app/views/locomotive/custom_fields/_form.html.haml +61 -0
  293. data/app/views/locomotive/custom_fields/_select_templates.html.haml +16 -0
  294. data/app/views/locomotive/custom_fields/types/_belongs_to.html.haml +5 -0
  295. data/app/views/locomotive/custom_fields/types/_boolean.html.haml +4 -0
  296. data/app/views/locomotive/custom_fields/types/_date.html.haml +5 -0
  297. data/app/views/locomotive/custom_fields/types/_file.html.haml +4 -0
  298. data/app/views/locomotive/custom_fields/types/_has_many.html.haml +70 -0
  299. data/app/views/locomotive/custom_fields/types/_many_to_many.html.haml +41 -0
  300. data/app/views/locomotive/custom_fields/types/_select.html.haml +34 -0
  301. data/app/views/locomotive/custom_fields/types/_string.html.haml +4 -0
  302. data/app/views/locomotive/custom_fields/types/_text.html.haml +5 -0
  303. data/app/views/locomotive/devise_mailer/reset_password_instructions.html.haml +12 -0
  304. data/app/views/locomotive/errors/404.html.haml +7 -0
  305. data/app/views/locomotive/errors/500.html.haml +7 -0
  306. data/app/views/locomotive/errors/no_page.html.haml +1 -0
  307. data/app/views/locomotive/errors/no_site.html.haml +1 -0
  308. data/app/views/locomotive/installation/step_1.html.haml +23 -0
  309. data/app/views/locomotive/installation/step_2.html.haml +24 -0
  310. data/app/views/locomotive/layouts/application.html.haml +34 -0
  311. data/app/views/locomotive/layouts/error.html.haml +1 -0
  312. data/app/views/locomotive/layouts/not_logged_in.html.haml +18 -0
  313. data/app/views/locomotive/memberships/new.html.haml +14 -0
  314. data/app/views/locomotive/my_account/edit.html.haml +40 -0
  315. data/app/views/locomotive/notifications/new_content_entry.html.haml +29 -0
  316. data/app/views/locomotive/pages/_editable_elements.html.haml +64 -0
  317. data/app/views/locomotive/pages/_form.html.haml +61 -0
  318. data/app/views/locomotive/pages/_page.html.haml +42 -0
  319. data/app/views/locomotive/pages/edit.html.haml +18 -0
  320. data/app/views/locomotive/pages/index.html.haml +19 -0
  321. data/app/views/locomotive/pages/new.html.haml +15 -0
  322. data/app/views/locomotive/passwords/edit.html.haml +18 -0
  323. data/app/views/locomotive/passwords/new.html.haml +17 -0
  324. data/app/views/locomotive/public/pages/show_toolbar.html.haml +64 -0
  325. data/app/views/locomotive/public/sitemaps/show.xml.builder +29 -0
  326. data/app/views/locomotive/sessions/new.html.haml +17 -0
  327. data/app/views/locomotive/shared/_footer.html.haml +1 -0
  328. data/app/views/locomotive/shared/_form_actions.html.haml +14 -0
  329. data/app/views/locomotive/shared/_head.html.haml +38 -0
  330. data/app/views/locomotive/shared/_header.html.haml +10 -0
  331. data/app/views/locomotive/shared/_locale_picker_link.html.haml +6 -0
  332. data/app/views/locomotive/shared/_main_app_head.html.haml +1 -0
  333. data/app/views/locomotive/shared/_site_picker.html.haml +10 -0
  334. data/app/views/locomotive/shared/actions/_contents.html.haml +7 -0
  335. data/app/views/locomotive/shared/menu/_contents.html.haml +51 -0
  336. data/app/views/locomotive/sites/_domains.html.haml +22 -0
  337. data/app/views/locomotive/sites/_form.html.haml +12 -0
  338. data/app/views/locomotive/sites/_memberships.html.haml +27 -0
  339. data/app/views/locomotive/sites/new.html.haml +12 -0
  340. data/app/views/locomotive/snippets/_form.html.haml +13 -0
  341. data/app/views/locomotive/snippets/_snippet.html.haml +8 -0
  342. data/app/views/locomotive/snippets/edit.html.haml +18 -0
  343. data/app/views/locomotive/snippets/new.html.haml +15 -0
  344. data/app/views/locomotive/theme_assets/_asset.html.haml +11 -0
  345. data/app/views/locomotive/theme_assets/_form.html.haml +35 -0
  346. data/app/views/locomotive/theme_assets/_list.html.haml +7 -0
  347. data/app/views/locomotive/theme_assets/_picker.html.haml +25 -0
  348. data/app/views/locomotive/theme_assets/edit.html.haml +21 -0
  349. data/app/views/locomotive/theme_assets/index.html.haml +50 -0
  350. data/app/views/locomotive/theme_assets/new.html.haml +12 -0
  351. data/app/views/locomotive/translations/_form.html.haml +12 -0
  352. data/app/views/locomotive/translations/edit.html.haml +15 -0
  353. data/app/views/locomotive/translations/index.html.haml +26 -0
  354. data/app/views/locomotive/translations/new.html.haml +12 -0
  355. data/config/cucumber.yml +8 -0
  356. data/config/initializers/deny_phantomjs_ttf.rb +29 -0
  357. data/config/initializers/devise.rb +15 -0
  358. data/config/initializers/formtastic.rb +4 -0
  359. data/config/initializers/haml.rb +2 -0
  360. data/config/initializers/locomotive_loaded_first.rb +19 -0
  361. data/config/locales/admin_ui.de.yml +316 -0
  362. data/config/locales/admin_ui.en.yml +332 -0
  363. data/config/locales/admin_ui.es.yml +296 -0
  364. data/config/locales/admin_ui.et.yml +315 -0
  365. data/config/locales/admin_ui.fr.yml +326 -0
  366. data/config/locales/admin_ui.it.yml +295 -0
  367. data/config/locales/admin_ui.nb.yml +314 -0
  368. data/config/locales/admin_ui.nl.yml +279 -0
  369. data/config/locales/admin_ui.pl.yml +319 -0
  370. data/config/locales/admin_ui.pt-BR.yml +274 -0
  371. data/config/locales/admin_ui.ru.yml +313 -0
  372. data/config/locales/carrierwave.de.yml +4 -0
  373. data/config/locales/carrierwave.en.yml +4 -0
  374. data/config/locales/carrierwave.es.yml +4 -0
  375. data/config/locales/carrierwave.et.yml +4 -0
  376. data/config/locales/carrierwave.fr.yml +4 -0
  377. data/config/locales/carrierwave.it.yml +4 -0
  378. data/config/locales/carrierwave.nb.yml +4 -0
  379. data/config/locales/carrierwave.nl.yml +4 -0
  380. data/config/locales/carrierwave.pl.yml +4 -0
  381. data/config/locales/carrierwave.pt-BR.yml +4 -0
  382. data/config/locales/carrierwave.ru.yml +4 -0
  383. data/config/locales/default.de.yml +244 -0
  384. data/config/locales/default.en.yml +43 -0
  385. data/config/locales/default.es.yml +216 -0
  386. data/config/locales/default.et.yml +240 -0
  387. data/config/locales/default.fr.yml +224 -0
  388. data/config/locales/default.it.yml +243 -0
  389. data/config/locales/default.nb.yml +313 -0
  390. data/config/locales/default.nl.yml +170 -0
  391. data/config/locales/default.pl.yml +317 -0
  392. data/config/locales/default.pt-BR.yml +211 -0
  393. data/config/locales/default.ru.yml +279 -0
  394. data/config/locales/devise.de.yml +62 -0
  395. data/config/locales/devise.en.yml +63 -0
  396. data/config/locales/devise.es.yml +63 -0
  397. data/config/locales/devise.et.yml +64 -0
  398. data/config/locales/devise.fr.yml +67 -0
  399. data/config/locales/devise.it.yml +63 -0
  400. data/config/locales/devise.nb.yml +63 -0
  401. data/config/locales/devise.nl.yml +63 -0
  402. data/config/locales/devise.pl.yml +63 -0
  403. data/config/locales/devise.pt-BR.yml +61 -0
  404. data/config/locales/devise.ru.yml +63 -0
  405. data/config/locales/flash.de.yml +106 -0
  406. data/config/locales/flash.en.yml +115 -0
  407. data/config/locales/flash.es.yml +106 -0
  408. data/config/locales/flash.et.yml +106 -0
  409. data/config/locales/flash.fr.yml +106 -0
  410. data/config/locales/flash.it.yml +106 -0
  411. data/config/locales/flash.nb.yml +106 -0
  412. data/config/locales/flash.nl.yml +106 -0
  413. data/config/locales/flash.pl.yml +106 -0
  414. data/config/locales/flash.pt-BR.yml +106 -0
  415. data/config/locales/flash.ru.yml +106 -0
  416. data/config/locales/formtastic.de.yml +97 -0
  417. data/config/locales/formtastic.en.yml +105 -0
  418. data/config/locales/formtastic.es.yml +84 -0
  419. data/config/locales/formtastic.et.yml +103 -0
  420. data/config/locales/formtastic.fr.yml +94 -0
  421. data/config/locales/formtastic.it.yml +99 -0
  422. data/config/locales/formtastic.nb.yml +103 -0
  423. data/config/locales/formtastic.nl.yml +85 -0
  424. data/config/locales/formtastic.pl.yml +105 -0
  425. data/config/locales/formtastic.pt-BR.yml +70 -0
  426. data/config/locales/formtastic.ru.yml +103 -0
  427. data/config/routes.rb +116 -0
  428. data/lib/generators/locomotive/install/install_generator.rb +35 -0
  429. data/lib/generators/locomotive/install/templates/README +26 -0
  430. data/lib/generators/locomotive/install/templates/carrierwave.rb +28 -0
  431. data/lib/generators/locomotive/install/templates/dragonfly.rb +22 -0
  432. data/lib/generators/locomotive/install/templates/locomotive.rb +69 -0
  433. data/lib/generators/locomotive/install/templates/mongoid.yml +34 -0
  434. data/lib/locomotive.rb +136 -0
  435. data/lib/locomotive/action_controller.rb +5 -0
  436. data/lib/locomotive/action_controller/locale_helpers.rb +61 -0
  437. data/lib/locomotive/action_controller/public_responder.rb +17 -0
  438. data/lib/locomotive/action_controller/responder.rb +78 -0
  439. data/lib/locomotive/action_controller/section_helpers.rb +29 -0
  440. data/lib/locomotive/action_controller/url_helpers.rb +38 -0
  441. data/lib/locomotive/carrierwave.rb +10 -0
  442. data/lib/locomotive/carrierwave/asset.rb +72 -0
  443. data/lib/locomotive/carrierwave/base.rb +15 -0
  444. data/lib/locomotive/carrierwave/patches.rb +32 -0
  445. data/lib/locomotive/configuration.rb +122 -0
  446. data/lib/locomotive/core_ext.rb +64 -0
  447. data/lib/locomotive/custom_fields.rb +66 -0
  448. data/lib/locomotive/dependencies.rb +30 -0
  449. data/lib/locomotive/devise.rb +1 -0
  450. data/lib/locomotive/dragonfly.rb +38 -0
  451. data/lib/locomotive/engine.rb +37 -0
  452. data/lib/locomotive/formtastic.rb +13 -0
  453. data/lib/locomotive/haml.rb +1 -0
  454. data/lib/locomotive/httparty.rb +2 -0
  455. data/lib/locomotive/httparty/patches.rb +18 -0
  456. data/lib/locomotive/httparty/webservice.rb +42 -0
  457. data/lib/locomotive/kaminari.rb +35 -0
  458. data/lib/locomotive/liquid.rb +7 -0
  459. data/lib/locomotive/liquid/drops/base.rb +42 -0
  460. data/lib/locomotive/liquid/drops/content_entry.rb +76 -0
  461. data/lib/locomotive/liquid/drops/content_types.rb +50 -0
  462. data/lib/locomotive/liquid/drops/current_user.rb +21 -0
  463. data/lib/locomotive/liquid/drops/page.rb +55 -0
  464. data/lib/locomotive/liquid/drops/proxy_collection.rb +56 -0
  465. data/lib/locomotive/liquid/drops/site.rb +19 -0
  466. data/lib/locomotive/liquid/drops/uploader.rb +15 -0
  467. data/lib/locomotive/liquid/errors.rb +7 -0
  468. data/lib/locomotive/liquid/filters/base.rb +47 -0
  469. data/lib/locomotive/liquid/filters/date.rb +54 -0
  470. data/lib/locomotive/liquid/filters/html.rb +115 -0
  471. data/lib/locomotive/liquid/filters/misc.rb +65 -0
  472. data/lib/locomotive/liquid/filters/resize.rb +16 -0
  473. data/lib/locomotive/liquid/filters/text.rb +45 -0
  474. data/lib/locomotive/liquid/filters/translate.rb +16 -0
  475. data/lib/locomotive/liquid/patches.rb +21 -0
  476. data/lib/locomotive/liquid/tags/consume.rb +67 -0
  477. data/lib/locomotive/liquid/tags/csrf.rb +40 -0
  478. data/lib/locomotive/liquid/tags/editable.rb +5 -0
  479. data/lib/locomotive/liquid/tags/editable/base.rb +88 -0
  480. data/lib/locomotive/liquid/tags/editable/control.rb +31 -0
  481. data/lib/locomotive/liquid/tags/editable/file.rb +39 -0
  482. data/lib/locomotive/liquid/tags/editable/long_text.rb +33 -0
  483. data/lib/locomotive/liquid/tags/editable/short_text.rb +41 -0
  484. data/lib/locomotive/liquid/tags/extends.rb +47 -0
  485. data/lib/locomotive/liquid/tags/google_analytics.rb +39 -0
  486. data/lib/locomotive/liquid/tags/inherited_block.rb +31 -0
  487. data/lib/locomotive/liquid/tags/inline_editor.rb +40 -0
  488. data/lib/locomotive/liquid/tags/locale_switcher.rb +83 -0
  489. data/lib/locomotive/liquid/tags/nav.rb +155 -0
  490. data/lib/locomotive/liquid/tags/paginate.rb +111 -0
  491. data/lib/locomotive/liquid/tags/seo.rb +72 -0
  492. data/lib/locomotive/liquid/tags/snippet.rb +75 -0
  493. data/lib/locomotive/liquid/tags/with_scope.rb +47 -0
  494. data/lib/locomotive/logger.rb +11 -0
  495. data/lib/locomotive/middlewares.rb +4 -0
  496. data/lib/locomotive/middlewares/cache.rb +27 -0
  497. data/lib/locomotive/middlewares/fonts.rb +42 -0
  498. data/lib/locomotive/middlewares/inline_editor.rb +36 -0
  499. data/lib/locomotive/middlewares/seo_trailing_slash.rb +24 -0
  500. data/lib/locomotive/misc/api_documentation.rb +96 -0
  501. data/lib/locomotive/misc/api_documentation/bootstrap.html.haml +119 -0
  502. data/lib/locomotive/mongoid.rb +4 -0
  503. data/lib/locomotive/mongoid/document.rb +19 -0
  504. data/lib/locomotive/mongoid/liquid.rb +39 -0
  505. data/lib/locomotive/mongoid/patches.rb +106 -0
  506. data/lib/locomotive/mongoid/presenter.rb +73 -0
  507. data/lib/locomotive/presentable.rb +212 -0
  508. data/lib/locomotive/rails.rb +1 -0
  509. data/lib/locomotive/rails/action_view.rb +9 -0
  510. data/lib/locomotive/regexps.rb +11 -0
  511. data/lib/locomotive/render.rb +177 -0
  512. data/lib/locomotive/routing.rb +2 -0
  513. data/lib/locomotive/routing/default_constraint.rb +42 -0
  514. data/lib/locomotive/routing/site_dispatcher.rb +54 -0
  515. data/lib/locomotive/session_store.rb +64 -0
  516. data/lib/locomotive/version.rb +3 -0
  517. data/lib/locomotive_cms.rb +1 -0
  518. data/lib/tasks/cucumber.rake +66 -0
  519. data/lib/tasks/locomotive.rake +220 -0
  520. data/public/favicon.ico +0 -0
  521. data/vendor/assets/fonts/locomotive/fontawesome-webfont.eot +0 -0
  522. data/vendor/assets/fonts/locomotive/fontawesome-webfont.svg +255 -0
  523. data/vendor/assets/fonts/locomotive/fontawesome-webfont.ttf +0 -0
  524. data/vendor/assets/fonts/locomotive/fontawesome-webfont.woff +0 -0
  525. data/vendor/assets/javascripts/locomotive/ICanHandlebarz.js +88 -0
  526. data/vendor/assets/javascripts/locomotive/backbone.modelbinding.js +565 -0
  527. data/vendor/assets/javascripts/locomotive/backbone.sync.js +113 -0
  528. data/vendor/assets/javascripts/locomotive/cmd.js +31 -0
  529. data/vendor/assets/javascripts/locomotive/cookies.js +96 -0
  530. data/vendor/assets/javascripts/locomotive/datepicker_i18n.js.erb +28 -0
  531. data/vendor/assets/javascripts/locomotive/editable_field.js +50 -0
  532. data/vendor/assets/javascripts/locomotive/form_submit_notification.js +39 -0
  533. data/vendor/assets/javascripts/locomotive/growl.js +143 -0
  534. data/vendor/assets/javascripts/locomotive/handlebars.js +1493 -0
  535. data/vendor/assets/javascripts/locomotive/liquid_mode.js +42 -0
  536. data/vendor/assets/javascripts/locomotive/menu_toggler.js +37 -0
  537. data/vendor/assets/javascripts/locomotive/resize.js +9 -0
  538. data/vendor/assets/javascripts/locomotive/slugify.js +31 -0
  539. data/vendor/assets/javascripts/locomotive/smartupdater.js +296 -0
  540. data/vendor/assets/javascripts/locomotive/subscribe.js +367 -0
  541. data/vendor/assets/javascripts/locomotive/toggle.js +143 -0
  542. data/vendor/assets/javascripts/locomotive/vendor.js +1 -0
  543. data/vendor/assets/stylesheets/locomotive/blueprint/ie.css +26 -0
  544. data/vendor/assets/stylesheets/locomotive/blueprint/print.css +30 -0
  545. data/vendor/assets/stylesheets/locomotive/blueprint/screen.css +253 -0
  546. data/vendor/assets/stylesheets/locomotive/font-awesome.scss +329 -0
  547. data/vendor/assets/stylesheets/locomotive/jquery.css +3 -0
  548. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  549. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  550. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  551. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  552. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  553. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  554. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  555. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  556. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_222222_256x240.png +0 -0
  557. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  558. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_454545_256x240.png +0 -0
  559. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_888888_256x240.png +0 -0
  560. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  561. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_ffffff_256x240.png +0 -0
  562. data/vendor/assets/stylesheets/locomotive/jquery/ui.css +406 -0
  563. data/vendor/assets/stylesheets/locomotive/liquid_mode.css +7 -0
  564. data/vendor/assets/stylesheets/locomotive/toggle.css.scss +75 -0
  565. metadata +1171 -0
@@ -0,0 +1,42 @@
1
+ /*
2
+ This overlay provides a 'liquid' mode to the excellent CodeMirror editor (http://codemirror.net/).
3
+ Add something like this to your CSS:
4
+
5
+ .cm-liquid-tag {
6
+ color: #32273f;
7
+ background: #ead9ff;
8
+ }
9
+
10
+ .cm-liquid-variable {
11
+ color: #29739b
12
+ background: #c2e0f0;
13
+ }
14
+
15
+ https://gist.github.com/1356686
16
+ */
17
+
18
+ CodeMirror.defineMode("liquid", function(config, parserConfig) {
19
+ var liquidOverlay = {
20
+ token: function(stream, state) {
21
+
22
+ // Variables.
23
+ if (stream.match("{{")) {
24
+ while ((ch = stream.next()) != null)
25
+ if (ch == "}" && stream.next() == "}") break;
26
+ return "liquid-variable";
27
+ }
28
+
29
+ // Tags.
30
+ if(stream.match("{%")) {
31
+ while ((ch = stream.next()) != null)
32
+ if (ch == "%" && stream.next() == "}") break;
33
+ return "liquid-tag";
34
+ }
35
+
36
+ while (stream.next() != null && !stream.match("{{", false) && !stream.match("{%", false)) {}
37
+ return null;
38
+ }
39
+ };
40
+
41
+ return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), liquidOverlay);
42
+ });
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Version 1.0.1
3
+ * Init and deploy childs on menu (admin)
4
+ * Benjamin Athlan - Bewcultures
5
+ * Andrew Bennett - Delorum
6
+ * Didier Lafforgue - NoCoffee
7
+ */
8
+ $.fn.toggleMe = function(settings) {
9
+
10
+ settings = $.extend({}, settings);
11
+
12
+ var toggle = function(event) {
13
+ var toggler = $(this);
14
+ var children = toggler.parent().find('> ul.folder');
15
+ var openClass = toggler.data('open')
16
+ var closedClass = toggler.data('closed')
17
+
18
+ children.each(function() {
19
+ var child = $(this);
20
+
21
+ if (child.is(':visible')) {
22
+ child.slideUp('fast', function() {
23
+ toggler.removeClass(openClass).addClass(closedClass)
24
+ $.cookie(child.attr('id'), 'none');
25
+ });
26
+ } else {
27
+ child.slideDown('fast', function() {
28
+ toggler.removeClass(closedClass).addClass(openClass)
29
+ $.cookie(child.attr('id'), 'block');
30
+ });
31
+ }
32
+ });
33
+ };
34
+
35
+ return $(this).bind('click', toggle);
36
+
37
+ };
@@ -0,0 +1,9 @@
1
+ /*
2
+ * jQuery resize event - v1.1 - 3/14/2010
3
+ * http://benalman.com/projects/jquery-resize-plugin/
4
+ *
5
+ * Copyright (c) 2010 "Cowboy" Ben Alman
6
+ * Dual licensed under the MIT and GPL licenses.
7
+ * http://benalman.com/about/license/
8
+ */
9
+ (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Version 0.0.1
3
+ * Fill in an input field from another one (source)
4
+ * and apply a filter on the string (slugify)
5
+ * Didier Lafforgue
6
+ */
7
+ $.fn.slugify = function(settings) {
8
+
9
+ settings = $.extend({
10
+ sep: '-'
11
+ }, settings);
12
+
13
+ var target = $(settings.target);
14
+ target.data('touched', (target.val() != ''));
15
+
16
+ var makeSlug = function(event) {
17
+ var source = $(this);
18
+ var newVal = source.val().slugify(settings.sep);
19
+
20
+ if (!target.data('touched')) {
21
+ target.val(newVal);
22
+ target.trigger('change');
23
+ }
24
+ }
25
+
26
+ target.bind('keyup', function(event) {
27
+ $(this).data('touched', ($(this).val() != ''));
28
+ });
29
+
30
+ return $(this).bind('keyup', makeSlug);
31
+ };
@@ -0,0 +1,296 @@
1
+ /**
2
+ * smartupdater - jQuery Plugin
3
+ *
4
+ * Version - 4.0.beta
5
+ * Copyright (c) 2010 - 2011 Vadim Kiryukhin
6
+ * vkiryukhin @ gmail.com
7
+ *
8
+ * http://www.eslinstructor.net/smartupdater/
9
+ *
10
+ * Dual licensed under the MIT and GPL licenses:
11
+ * http://www.opensource.org/licenses/mit-license.php
12
+ * http://www.gnu.org/licenses/gpl.html
13
+ *
14
+ * USAGE:
15
+ *
16
+ * $("#myObject").smartupdater({
17
+ * url : "foo.php"
18
+ * }, function (data) {
19
+ * //process data here;
20
+ * }
21
+ * );
22
+ *
23
+ * Public functions:
24
+ * $("#myObject").smartupdater("stop")
25
+ * $("#myObject").smartupdater("restart");
26
+ * $("#myObject").smartupdater("setTimeout",timeout);
27
+ * $("#myObject").smartupdater("alterUrl"[,"foo.php"[,data]]);
28
+ * $("#myObject").smartupdater("alterCallback"[, foo]);
29
+ *
30
+ * Public Attributes:
31
+ * var status = $("#myObject").smartupdater("getState");
32
+ * var timeout = $("#myObject").smartupdater("getTimeout");
33
+ *
34
+ **/
35
+
36
+ (function($) {
37
+
38
+
39
+ var methods = {
40
+
41
+ init : function( options, callback) {
42
+ return this.each(function () {
43
+ var elem = this,
44
+ es = {};
45
+
46
+ elem.settings = jQuery.extend(true,{
47
+ url : '', // see jQuery.ajax for details
48
+ type : 'get', // see jQuery.ajax for details
49
+ data : '', // see jQuery.ajax for details
50
+ dataType : 'text', // see jQuery.ajax for details
51
+
52
+ minTimeout : 60000, // 1 minute
53
+ maxFailedRequests : 10, // max. number of consecutive ajax failures
54
+ maxFailedRequestsCb : false, // falure callback function
55
+ httpCache : false, // http cache
56
+ rCallback : false, // remote callback functions
57
+ selfStart : true, // start automatically after initializing
58
+ smartStop : { active: false, //disabled by default
59
+ monitorTimeout: 2500, // 2.5 seconds
60
+ minHeight: 1, // 1px
61
+ minWidth: 1 // 1px
62
+ }
63
+
64
+ }, options);
65
+
66
+ elem.smartupdaterStatus = {state:'',timeout:0};
67
+
68
+ es = elem.settings;
69
+
70
+ es.prevContent = '';
71
+ es.failedRequests = 0;
72
+ es.etag = '0';
73
+ es.lastModified = '0';
74
+ es.callback = callback;
75
+ es.origReq = {url:es.url,data:es.data,callback:callback};
76
+ es.stopFlag = false;
77
+
78
+
79
+ function start() {
80
+
81
+ /* check if element has been deleted and clean it up */
82
+ if(!$(elem).parents('body').length) {
83
+ clearInterval(elem.smartupdaterStatus.smartStop);
84
+ clearTimeout(elem.settings.h);
85
+ elem = {};
86
+ return;
87
+ }
88
+
89
+ $.ajax({
90
+ url : es.url,
91
+ type : es.type,
92
+ data : es.data,
93
+ dataType: es.dataType,
94
+ cache : false, // MUST be set to false to prevent IE caching issue.
95
+
96
+ success: function (data, statusText, xhr) {
97
+
98
+ var dataNotModified = false,
99
+ rCallback = false,
100
+ xSmart = jQuery.parseJSON(xhr.getResponseHeader("X-Smartupdater")),
101
+ xhrEtag, xhrLM;
102
+
103
+ if(xSmart) { // remote control
104
+
105
+ /* remote timeout */
106
+ es.minTimeout = xSmart.timeout ? xSmart.timeout : es.minTimeout;
107
+
108
+ /* remote callback */
109
+ rCallback = xSmart.callback ? xSmart.callback : false;
110
+ }
111
+
112
+ if(es.httpCache) { // http cache process here
113
+
114
+ xhrEtag = xhr.getResponseHeader("ETag");
115
+ xhrLM = xhr.getResponseHeader("Last-Modified");
116
+
117
+ dataNotModified = (es.etag == xhrEtag || es.lastModified == xhrLM) ? true : false;
118
+ es.etag = xhrEtag ? xhrEtag : es.etag;
119
+ es.lastModified = xhrLM ? xhrLM : es.lastModified;
120
+ }
121
+
122
+ if ( dataNotModified ||
123
+ es.prevContent == xhr.responseText ||
124
+ xhr.status == 304 ) { // data is not changed
125
+
126
+ if(!es.stopFlag) {
127
+ clearTimeout(es.h);
128
+ es.h = setTimeout(start, es.minTimeout);
129
+ }
130
+
131
+ } else { // data is changed
132
+
133
+ /* cache response data */
134
+ es.prevContent = xhr.responseText;
135
+
136
+ /* reset timeout */
137
+ if(!es.stopFlag) {
138
+ clearTimeout(es.h);
139
+ es.h = setTimeout(start, es.minTimeout);
140
+ }
141
+
142
+ /* run callback function */
143
+ if(es.rCallback && rCallback && es.rCallback.search(rCallback) != -1) {
144
+ window[rCallback](data);
145
+ } else {
146
+ es.callback(data);
147
+ }
148
+ }
149
+
150
+ elem.smartupdaterStatus.timeout = es.minTimeout;
151
+ es.failedRequests = 0;
152
+ },
153
+
154
+ error: function(xhr, textStatus, errorThrown) {
155
+ if ( ++es.failedRequests < es.maxFailedRequests ) {
156
+
157
+ /* increment falure counter and reset timeout */
158
+ if(!es.stopFlag) {
159
+ clearTimeout(es.h);
160
+ es.h = setTimeout(start, es.minTimeout);
161
+ elem.smartupdaterStatus.timeout = es.minTimeout;
162
+ }
163
+
164
+ } else {
165
+
166
+ /* stop smartupdater */
167
+ clearTimeout(es.h);
168
+ elem.smartupdaterStatus.state = 'OFF';
169
+ if( typeof(es.maxFailedRequestsCb)==='function') {
170
+ es.maxFailedRequestsCb(xhr, textStatus, errorThrown);
171
+ }
172
+ }
173
+ },
174
+
175
+ beforeSend: function(xhr, settings) {
176
+
177
+ if(es.httpCache) {
178
+
179
+ /* set http cache-related headers */
180
+ xhr.setRequestHeader("If-None-Match", es.etag );
181
+ xhr.setRequestHeader("If-Modified-Since", es.lastModified );
182
+ }
183
+
184
+ /* Feedback: Smartupdater sends it's current timeout to server */
185
+ xhr.setRequestHeader("X-Smartupdater", '{"timeout":"'+elem.smartupdaterStatus.timeout+'"}');
186
+ }
187
+ });
188
+
189
+ elem.smartupdaterStatus.state = 'ON';
190
+ }
191
+
192
+ es.fnStart = start;
193
+
194
+ if(es.selfStart) {
195
+ start();
196
+ }
197
+
198
+ if(es.smartStop.active) {
199
+
200
+ elem.smartupdaterStatus.smartStop = setInterval(function(){
201
+
202
+ // check if object has been deleted
203
+ if(!$(elem).parents('body').length) {
204
+ clearInterval(elem.smartupdaterStatus.smartStop);
205
+ clearTimeout(elem.settings.h);
206
+ elem = {};
207
+ return;
208
+ }
209
+
210
+ var $elem = $(elem);
211
+ var width = $elem.width(),
212
+ height = $elem.height(),
213
+ hidden = $elem.is(":hidden");
214
+
215
+ //element has been expanded, so smartupdater should be re-started.
216
+ if(!hidden && height > es.smartStop.minHeight && width > es.smartStop.minWidth
217
+ && elem.smartupdaterStatus.state=="OFF") {
218
+ $elem.smartupdater("restart");
219
+ } else
220
+ //element has been minimized, so smartupdater should be stopped.
221
+ if( (hidden || height <= es.smartStop.minHeight || width <= es.smartStop.minWidth)
222
+ && elem.smartupdaterStatus.state=="ON") {
223
+ $elem.smartupdater("stop");
224
+
225
+ }
226
+
227
+ },es.smartStop.monitorTimeout);
228
+ }
229
+
230
+ });
231
+
232
+ },// init()
233
+
234
+ stop : function () {
235
+ return this.each(function () {
236
+ this.settings.stopFlag = true;
237
+ clearTimeout(this.settings.h);
238
+ this.smartupdaterStatus.state = 'OFF';
239
+ });
240
+ },
241
+
242
+ restart : function () {
243
+ return this.each(function () {
244
+ this.settings.stopFlag = false;
245
+ clearTimeout(this.settings.h);
246
+ this.settings.failedRequests = 0;
247
+ this.settings.etag = "0";
248
+ this.settings.lastModified = "0";
249
+ this.settings.fnStart();
250
+ })
251
+ },
252
+
253
+ setTimeout : function (period) {
254
+ return this.each(function () {
255
+ clearTimeout(this.settings.h);
256
+ this.settings.minTimeout = period;
257
+ this.settings.fnStart();
258
+ });
259
+ },
260
+
261
+ alterCallback : function (callback) {
262
+ return this.each(function () {
263
+ this.settings.callback = callback ? callback : this.settings.origReq.callback;
264
+ });
265
+ },
266
+
267
+ alterUrl : function (url,data) {
268
+ return this.each(function () {
269
+ this.settings.url = url ? url : this.settings.origReq.url;
270
+ this.settings.data = data ? data : this.settings.origReq.data;
271
+ });
272
+ },
273
+
274
+ getTimeout : function () {
275
+ return this[0].smartupdaterStatus.timeout;
276
+ },
277
+
278
+ getState : function () {
279
+ return this[0].smartupdaterStatus.state;
280
+ }
281
+
282
+ }; //methods
283
+
284
+ jQuery.fn.smartupdater = function (options, callback) {
285
+
286
+ if ( methods[options] ) {
287
+ return methods[ options ].apply( this, Array.prototype.slice.call( arguments, 1 ));
288
+ } else if ( typeof options === 'object' || ! method ) {
289
+ return methods.init.apply( this, arguments );
290
+ } else {
291
+ $.error( 'Method ' + options + ' does not exist on jQuery.tooltip' );
292
+ }
293
+ };
294
+
295
+
296
+ })(jQuery);
@@ -0,0 +1,367 @@
1
+ /*
2
+ * jquery.subscribe.1.1
3
+ *
4
+ * Implementation of publish/subcription framework for jQuery
5
+ * Requires use of jQuery. Tested with jQuery 1.3 and above
6
+ *
7
+ *
8
+ * Copyright (c) 2008 Eric Chijioke (obinna a-t g mail dot c o m)
9
+ *
10
+ *
11
+ * Dual licensed under the MIT and GPL licenses:
12
+ * http://www.opensource.org/licenses/mit-license.php
13
+ * http://www.gnu.org/licenses/gpl.html
14
+ *
15
+ * Release Notes:
16
+ *
17
+ * version 1.1:
18
+ *
19
+ * Fixed unexpected behavior which can occur when a script in a embedded page (page loaded in div,tab etc.) subscribes a handler for a topic using
20
+ * the jQuery subscribe ($.subscribe) or a no-id element but this subscribe plugin is not reloaded within that embedded page (for example, when
21
+ * script is included in containing page) . In this case, if the embedded page is reloaded without reloading the entire page (and plugin), the
22
+ * subscription could be made multiple times for the topic, which will call the handler multiple times each time the topic is published.
23
+ * Code has been added to prevent this when the subscription is made using the non-element subscribe ($.subscribe()), which assures that only one
24
+ * subscription is made for a topic for a given window/frame. To prevent this from happening for an element subscription ($elem.subscribe()), make
25
+ * sure that the element has an id attribute.
26
+ */
27
+
28
+
29
+ (function($){
30
+
31
+ _subscribe_topics = {};
32
+ _subscribe_handlers = {};
33
+
34
+ _subscribe_getDocumentWindow = function(document){
35
+
36
+ return document.parentWindow || document.defaultView;
37
+ };
38
+
39
+ $.fn.extend({
40
+
41
+ /**
42
+ * Creates a new topic without any subscribers.
43
+ * Not usually used explicitly
44
+ */
45
+ createTopic : function(topic) {
46
+ if(topic && !_subscribe_topics[topic]) {
47
+
48
+ _subscribe_topics[topic] = {};
49
+ _subscribe_topics[topic].objects = {};
50
+ _subscribe_topics[topic].objects['__noId__'] = [];
51
+ }
52
+
53
+ return this;
54
+ },
55
+
56
+ /**
57
+ * Destroy an existing topic and unsubscribe all subscribers
58
+ */
59
+ destroyTopic : function(topic) {
60
+
61
+ if(topic && _subscribe_topics[topic]) {
62
+
63
+ for(i in _subscribe_topics[topic].objects) {
64
+
65
+ var object = _subscribe_topics[topic].objects[i];
66
+
67
+ if($.isArray(object)) { // handle '__noId__' elements
68
+
69
+ if(object.length > 0) {
70
+
71
+ for(j in object) {
72
+
73
+ object[j].unbind(topic);
74
+ }
75
+ }
76
+
77
+ } else {
78
+
79
+ object.unbind(topic,data);
80
+ }
81
+ }
82
+ }
83
+
84
+ delete _subscribe_topics[topic];
85
+
86
+ return this;
87
+ },
88
+
89
+ /**
90
+ * Subscribes an object to particular topic with a handler.
91
+ * When the topic is published, this handler will be executed.
92
+ *
93
+ * Parameters:
94
+ * -topic- is the string name of the topic
95
+ * -handler- is a handler function and is of the form function(event, data), in which the 'this' refers to the element itself.
96
+ * handler can be a function or can be a string referring to a function previously registered using the $.subscribeHandler() function
97
+ * Note: returning 'false' from the handler will prevent subsequent handlers from being executed on this element during
98
+ * this call.
99
+ * -data- (optional) is additional data that is passed to the event handler as event.data when the topic is published
100
+ *
101
+ * Note: Unexpected behavior can occur when a script in a embedded page (page loaded in div,tab etc.) subscribes a handler for a topic using
102
+ * the jQuery subscribe ($.subscribe) or a no-id element but this subscribe plugin is not reloaded within that embedded page (for example, when
103
+ * script is included in containing page) . In this case, if the embedded page is reloaded without reloading the entire page (and plugin), the
104
+ * subscription could be made multiple times for the topic, which will call the handler multiple times each time the topic is published.
105
+ * Code has been added to prevent this when the subscription is made using the non-element subscribe ($.subscribe()), which assures that only one
106
+ * subscription is made for a topic for a given window/frame. To prevent this from happening for an element subscription ($elem.subscribe()), make
107
+ * sure that the element has an id attribute.
108
+ */
109
+ subscribe : function(topic, handler, data) {
110
+
111
+ if(this[0] && topic && handler) {
112
+
113
+ this.createTopic(topic);
114
+
115
+ if(this.attr('id')) {
116
+
117
+ _subscribe_topics[topic].objects[this.attr('id')] = this;
118
+
119
+ } else {
120
+
121
+ //do not subscribe the same window/frame document multiple times, this causes unexpected behavior of executing embedded scripts multiple times
122
+ var noIdObjects = _subscribe_topics[topic].objects['__noId__'];
123
+
124
+ if(this[0].nodeType == 9) { //if document is being bound (the case for non-element jQuery subscribing ($.subscribe)
125
+
126
+ for ( var index in noIdObjects) {
127
+
128
+ var noIdObject = noIdObjects[index];
129
+
130
+ if(noIdObject[0].nodeType == 9 && _subscribe_getDocumentWindow(this[0]).frameElement == _subscribe_getDocumentWindow(noIdObject[0]).frameElement ) {
131
+
132
+ return this;
133
+ }
134
+ }
135
+ }
136
+
137
+ var exists = false;
138
+ for(var i = 0; i < noIdObjects.length; i++){
139
+ if(noIdObjects[i] == this){
140
+ exists = true;
141
+ break;
142
+ }
143
+ }
144
+
145
+ if(!exists) {
146
+
147
+ _subscribe_topics[topic].objects['__noId__'].push(this);
148
+ }
149
+ }
150
+
151
+ if(typeof(handler) == 'function') {
152
+
153
+ this.bind(topic, data, handler);
154
+
155
+ } else if(typeof(handler) == 'string' && typeof(_subscribe_handlers[handler]) == 'function') {
156
+
157
+ this.bind(topic, data, _subscribe_handlers[handler]);
158
+ }
159
+ }
160
+
161
+ return this;
162
+ },
163
+
164
+ /**
165
+ * Remove a subscription of an element to a topic.
166
+ * This will unbind stop all handlers from executing on this element when the topic
167
+ * is published
168
+ */
169
+ unsubscribe : function(topic) {
170
+
171
+ if(topic) {
172
+
173
+ if(_subscribe_topics[topic]) {
174
+
175
+ if(this.attr('id')) {
176
+
177
+ var object = _subscribe_topics[topic].objects[this.attr('id')];
178
+
179
+ if(object) {
180
+
181
+ delete _subscribe_topics[topic].objects[this.attr('id')];
182
+ }
183
+
184
+ } else {
185
+
186
+ var noIdObjects = _subscribe_topics[topic].objects['__noId__'];
187
+
188
+ for(var i = 0; i < noIdObjects.length; i++){
189
+
190
+ if(noIdObjects[i] == this){
191
+
192
+ subscribe_topics[topic].objects['__noId__'].splice(index,1);
193
+ break;
194
+ }
195
+ }
196
+ }
197
+ }
198
+
199
+ this.unbind(topic);
200
+ }
201
+
202
+ return this;
203
+ },
204
+
205
+ /**
206
+ * Publishes a topic (triggers handlers on all topic subscribers)
207
+ * This ends up calling any subscribed handlers which are functions of the form function (event, data)
208
+ * where: event - is a standard jQuery event object
209
+ * data - is the data parameter that was passed to this publish() method
210
+ * event.data - is the data parameter passed to the subscribe() function when this published topic was subscribed to
211
+ * event.target - is the dom element that subscribed to the event (or the document element if $.subscribe() was used)
212
+ *
213
+ * Parameters:
214
+ * -topic- is the string name of the topic
215
+ * -data- (optional) is additional data that is passed to the event handler 'data' parameter when the topic is published
216
+ * handler can be a function or can be a string referring to a function previously registered using the $.subscribeHandler() function
217
+ * -originalEvent- (optional) may be passed in a reference to an event which triggered this publishing. This will be passed as the
218
+ * 'originalEvent' field of the triggered event which will allow for controlling the propagation of higher level events
219
+ * from within the topic handler. In other words, this allows one to cancel execution of all subsequent handlers on the originalEvent
220
+ * for this element by return 'false' from a handler that is subscribed to the topic published here. This can be especially useful
221
+ * in conjunction with publishOnEvent(), where a topic is published when an event executes (such as a click) and we want our
222
+ * handler logic prevent additional topics from being published (For example if our topic displays a 'delete confirm' dialog on click and
223
+ * the user cancels, we may want to prevent subsequent topics bound to the original click event from being published).
224
+ */
225
+ publish : function(topic, data, originalEvent) {
226
+
227
+ if(topic) {
228
+
229
+ this.createTopic(topic);
230
+
231
+ //if an orginal event exists, need to modify the event object to prevent execution of all
232
+ //other handlers if the result of the handler is false (which calls stopPropagation())
233
+
234
+ var subscriberStopPropagation = function(){
235
+
236
+ this.isImmediatePropagationStopped = function(){
237
+ return true;
238
+ };
239
+
240
+ (new $.Event).stopPropagation();
241
+
242
+ if(this.originalEvent) {
243
+
244
+ this.originalEvent.isImmediatePropagationStopped = function(){
245
+ return true;
246
+ };
247
+
248
+ this.originalEvent.stopPropagation = subscriberStopPropagation;
249
+ }
250
+ }
251
+
252
+ var event = jQuery.Event(topic);
253
+ $.extend(event,{originalEvent: originalEvent, stopPropagation: subscriberStopPropagation});
254
+
255
+ for(i in _subscribe_topics[topic].objects) {
256
+
257
+ var object = _subscribe_topics[topic].objects[i];
258
+
259
+ if($.isArray(object)) { // handle '__noId__' elements (if any)
260
+
261
+ if(object.length > 0) {
262
+
263
+ for(j in object) {
264
+
265
+ object[j].trigger( event,data);
266
+ }
267
+ }
268
+
269
+ } else {
270
+
271
+ object.trigger( event,data);
272
+ }
273
+ }
274
+
275
+ }
276
+
277
+ return this;
278
+ },
279
+
280
+ /**
281
+ * Binds an objects event handler to a publish call
282
+ *
283
+ * Upon the event triggering, this ends up calling any subscribed handlers which are functions of the form function (event, data)
284
+ * where: event- is a standard jQuery event object
285
+ * event.data- is the data parameter passed to the subscribe() function when this published topic was subscribed to
286
+ * data- is the data parameter that was passed to this publishOnEvent() method
287
+ * Parameters:
288
+ * -event- is the string name of the event upon which to publish the topic
289
+ * -topic- is the string name of the topic to publish when the event occurs
290
+ * -data- (optional) is additional data which will be passed in to the publish() method ant hen available as the second ('data')
291
+ * parameter to the topic handler
292
+ */
293
+ publishOnEvent : function(event, topic, data) {
294
+
295
+ if(event && topic) {
296
+
297
+ this.createTopic(topic);
298
+
299
+ this.bind(event, data, function (e) {
300
+
301
+ $(this).publish(topic, e.data, e);
302
+ });
303
+ }
304
+
305
+ return this;
306
+ }
307
+ });
308
+
309
+ /**
310
+ * Make publish(), createTopic() and destroyTopic() callable without an element context
311
+ * Often don't need a context to subscribe, publish, create or destroy a topic.
312
+ * We will call from the document context
313
+ */
314
+ $.extend({
315
+
316
+ /**
317
+ * Subscribe an event handler to a topic without an element context
318
+ *
319
+ * Note: Caution about subscribing using same document to topic multiple time (maybe by loading subscribe script multiple times)
320
+ *
321
+ */
322
+ subscribe : function(topic, handler, data) {
323
+ return $(window).subscribe(topic, handler, data);
324
+
325
+ },
326
+
327
+ /**
328
+ * Unsubscribe an event handler for a topic without an element context
329
+ *
330
+ */
331
+ unsubscribe : function(topic, handler, data) {
332
+
333
+ return $(window).unsubscribe(topic, handler, data);
334
+
335
+ },
336
+
337
+ /**
338
+ * Register a handler function which can then be referenced by name when calling subscribe()
339
+ */
340
+ subscribeHandler: function(name, handler) {
341
+
342
+ if(name && handler && typeof(handler) == "function") {
343
+
344
+ _subscribe_handlers[name] = handler;
345
+ }
346
+
347
+ return $(window);
348
+ },
349
+
350
+ publish: function(topic, data) {
351
+
352
+ return $(window).publish(topic,data);
353
+ },
354
+
355
+ createTopic: function(topic) {
356
+
357
+ return $(window).createTopic(topic);
358
+ },
359
+
360
+ destroyTopic: function(topic) {
361
+
362
+ return $(window).destroyTopic(topic);
363
+ }
364
+
365
+ });
366
+
367
+ })(jQuery);