comfypress 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +22 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +175 -0
  6. data/LICENSE +20 -0
  7. data/README.md +79 -0
  8. data/Rakefile +5 -0
  9. data/app/assets/images/comfypress/arrow_bottom.gif +0 -0
  10. data/app/assets/images/comfypress/arrow_right.gif +0 -0
  11. data/app/assets/images/comfypress/bootstrap/glyphicons-halflings-white.png +0 -0
  12. data/app/assets/images/comfypress/bootstrap/glyphicons-halflings.png +0 -0
  13. data/app/assets/images/comfypress/checkerboard.gif +0 -0
  14. data/app/assets/images/comfypress/icon_draft.gif +0 -0
  15. data/app/assets/images/comfypress/icon_file.gif +0 -0
  16. data/app/assets/images/comfypress/icon_layout.gif +0 -0
  17. data/app/assets/images/comfypress/icon_move.gif +0 -0
  18. data/app/assets/images/comfypress/icon_page.gif +0 -0
  19. data/app/assets/images/comfypress/icon_site.gif +0 -0
  20. data/app/assets/images/comfypress/icon_snippet.gif +0 -0
  21. data/app/assets/images/comfypress/nav_arrow.png +0 -0
  22. data/app/assets/javascripts/comfypress/admin/application.js +1 -0
  23. data/app/assets/javascripts/comfypress/application.js.coffee +175 -0
  24. data/app/assets/javascripts/comfypress/lib/bootstrap-datetimepicker.js +21 -0
  25. data/app/assets/javascripts/comfypress/lib/bootstrap-wysihtml5.js +492 -0
  26. data/app/assets/javascripts/comfypress/lib/bootstrap.js +6 -0
  27. data/app/assets/javascripts/comfypress/lib/codemirror.js +10 -0
  28. data/app/assets/javascripts/comfypress/lib/wysihtml5.js +261 -0
  29. data/app/assets/stylesheets/comfypress/admin/application.css +1 -0
  30. data/app/assets/stylesheets/comfypress/application.css.sass +8 -0
  31. data/app/assets/stylesheets/comfypress/base.css.sass +333 -0
  32. data/app/assets/stylesheets/comfypress/bootstrap_overrides.css.sass +45 -0
  33. data/app/assets/stylesheets/comfypress/codemirror_overrides.css.sass +27 -0
  34. data/app/assets/stylesheets/comfypress/lib/bootstrap-datetimepicker.css +9 -0
  35. data/app/assets/stylesheets/comfypress/lib/bootstrap-wysihtml5.css +102 -0
  36. data/app/assets/stylesheets/comfypress/lib/bootstrap.css +9 -0
  37. data/app/assets/stylesheets/comfypress/lib/codemirror.css +240 -0
  38. data/app/assets/stylesheets/comfypress/wysihtml5_overrides.css.sass +5 -0
  39. data/app/controllers/application_controller.rb +5 -0
  40. data/app/controllers/cms_admin/base_controller.rb +51 -0
  41. data/app/controllers/cms_admin/categories_controller.rb +35 -0
  42. data/app/controllers/cms_admin/files_controller.rb +108 -0
  43. data/app/controllers/cms_admin/layouts_controller.rb +67 -0
  44. data/app/controllers/cms_admin/menu_items_controller.rb +65 -0
  45. data/app/controllers/cms_admin/menus_controller.rb +60 -0
  46. data/app/controllers/cms_admin/pages_controller.rb +112 -0
  47. data/app/controllers/cms_admin/revisions_controller.rb +57 -0
  48. data/app/controllers/cms_admin/sites_controller.rb +64 -0
  49. data/app/controllers/cms_admin/snippets_controller.rb +64 -0
  50. data/app/controllers/cms_content_controller.rb +79 -0
  51. data/app/helpers/application_helper.rb +16 -0
  52. data/app/models/cms/block.rb +48 -0
  53. data/app/models/cms/categorization.rb +21 -0
  54. data/app/models/cms/category.rb +30 -0
  55. data/app/models/cms/file.rb +75 -0
  56. data/app/models/cms/layout.rb +99 -0
  57. data/app/models/cms/menu.rb +26 -0
  58. data/app/models/cms/menu_item.rb +14 -0
  59. data/app/models/cms/page.rb +202 -0
  60. data/app/models/cms/revision.rb +17 -0
  61. data/app/models/cms/site.rb +113 -0
  62. data/app/models/cms/snippet.rb +58 -0
  63. data/app/models/cms.rb +5 -0
  64. data/app/views/cms_admin/categories/_categories.html.haml +3 -0
  65. data/app/views/cms_admin/categories/_edit.html.haml +6 -0
  66. data/app/views/cms_admin/categories/_form.html.haml +8 -0
  67. data/app/views/cms_admin/categories/_index.html.haml +24 -0
  68. data/app/views/cms_admin/categories/_show.html.haml +13 -0
  69. data/app/views/cms_admin/categories/create.js.erb +7 -0
  70. data/app/views/cms_admin/categories/destroy.js.erb +3 -0
  71. data/app/views/cms_admin/categories/edit.js.erb +3 -0
  72. data/app/views/cms_admin/categories/update.js.erb +6 -0
  73. data/app/views/cms_admin/files/_file.html.haml +13 -0
  74. data/app/views/cms_admin/files/_form.html.haml +14 -0
  75. data/app/views/cms_admin/files/_index.html.haml +14 -0
  76. data/app/views/cms_admin/files/_page_form.html.haml +9 -0
  77. data/app/views/cms_admin/files/destroy.js.coffee +2 -0
  78. data/app/views/cms_admin/files/edit.html.haml +5 -0
  79. data/app/views/cms_admin/files/index.html.haml +28 -0
  80. data/app/views/cms_admin/files/new.html.haml +5 -0
  81. data/app/views/cms_admin/layouts/_form.html.haml +17 -0
  82. data/app/views/cms_admin/layouts/_index_branch.html.haml +23 -0
  83. data/app/views/cms_admin/layouts/edit.html.haml +9 -0
  84. data/app/views/cms_admin/layouts/index.html.haml +9 -0
  85. data/app/views/cms_admin/layouts/new.html.haml +5 -0
  86. data/app/views/cms_admin/menu_items/_form.html.haml +22 -0
  87. data/app/views/cms_admin/menu_items/edit.html.haml +8 -0
  88. data/app/views/cms_admin/menu_items/index.html.haml +24 -0
  89. data/app/views/cms_admin/menu_items/new.html.haml +5 -0
  90. data/app/views/cms_admin/menus/_form.html.haml +8 -0
  91. data/app/views/cms_admin/menus/edit.html.haml +8 -0
  92. data/app/views/cms_admin/menus/index.html.haml +24 -0
  93. data/app/views/cms_admin/menus/new.html.haml +5 -0
  94. data/app/views/cms_admin/pages/_form.html.haml +38 -0
  95. data/app/views/cms_admin/pages/_form_blocks.html.haml +28 -0
  96. data/app/views/cms_admin/pages/_index_branch.html.haml +35 -0
  97. data/app/views/cms_admin/pages/edit.html.haml +9 -0
  98. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  99. data/app/views/cms_admin/pages/index.html.haml +11 -0
  100. data/app/views/cms_admin/pages/new.html.haml +5 -0
  101. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  102. data/app/views/cms_admin/revisions/show.html.haml +28 -0
  103. data/app/views/cms_admin/sites/_form.html.haml +14 -0
  104. data/app/views/cms_admin/sites/_mirrors.html.haml +17 -0
  105. data/app/views/cms_admin/sites/edit.html.haml +5 -0
  106. data/app/views/cms_admin/sites/index.html.haml +24 -0
  107. data/app/views/cms_admin/sites/new.html.haml +5 -0
  108. data/app/views/cms_admin/snippets/_form.html.haml +11 -0
  109. data/app/views/cms_admin/snippets/edit.html.haml +9 -0
  110. data/app/views/cms_admin/snippets/index.html.haml +28 -0
  111. data/app/views/cms_admin/snippets/new.html.haml +5 -0
  112. data/app/views/cms_content/_menu.html.haml +5 -0
  113. data/app/views/cms_content/render_sitemap.xml.builder +15 -0
  114. data/app/views/layouts/cms_admin/_body.html.haml +16 -0
  115. data/app/views/layouts/cms_admin/_center.html.haml +7 -0
  116. data/app/views/layouts/cms_admin/_footer.html.haml +3 -0
  117. data/app/views/layouts/cms_admin/_footer_js.html.haml +7 -0
  118. data/app/views/layouts/cms_admin/_head.html.haml +12 -0
  119. data/app/views/layouts/cms_admin/_left.html.haml +11 -0
  120. data/app/views/layouts/cms_admin/_right.html.haml +1 -0
  121. data/app/views/layouts/cms_admin.html.haml +4 -0
  122. data/comfypress.gemspec +28 -0
  123. data/config/application.rb +69 -0
  124. data/config/boot.rb +6 -0
  125. data/config/database.sqlite.yml +47 -0
  126. data/config/database.yml +47 -0
  127. data/config/environment.rb +5 -0
  128. data/config/environments/development.rb +39 -0
  129. data/config/environments/production.rb +67 -0
  130. data/config/environments/test.rb +39 -0
  131. data/config/initializers/comfypress.rb +100 -0
  132. data/config/initializers/paperclip.rb +3 -0
  133. data/config/locales/de.yml +236 -0
  134. data/config/locales/en.yml +285 -0
  135. data/config/locales/es.yml +236 -0
  136. data/config/locales/fr.yml +236 -0
  137. data/config/locales/ja.yml +237 -0
  138. data/config/locales/pl.yml +236 -0
  139. data/config/locales/pt-BR.yml +236 -0
  140. data/config/locales/ru.yml +236 -0
  141. data/config/locales/sv.yml +236 -0
  142. data/config/locales/zh-CN.yml +236 -0
  143. data/config/routes.rb +10 -0
  144. data/config.ru +4 -0
  145. data/db/cms_fixtures/sample-site/layouts/default/_default.yml +1 -0
  146. data/db/cms_fixtures/sample-site/layouts/default/content.html +5 -0
  147. data/db/cms_fixtures/sample-site/layouts/default/css.css +1 -0
  148. data/db/cms_fixtures/sample-site/layouts/default/js.js +1 -0
  149. data/db/cms_fixtures/sample-site/layouts/default/nested/_nested.yml +2 -0
  150. data/db/cms_fixtures/sample-site/layouts/default/nested/content.html +2 -0
  151. data/db/cms_fixtures/sample-site/layouts/default/nested/css.css +1 -0
  152. data/db/cms_fixtures/sample-site/layouts/default/nested/js.js +1 -0
  153. data/db/cms_fixtures/sample-site/pages/index/_index.yml +2 -0
  154. data/db/cms_fixtures/sample-site/pages/index/child/_child.yml +3 -0
  155. data/db/cms_fixtures/sample-site/pages/index/child/left.html +1 -0
  156. data/db/cms_fixtures/sample-site/pages/index/child/right.html +1 -0
  157. data/db/cms_fixtures/sample-site/pages/index/content.html +2 -0
  158. data/db/cms_fixtures/sample-site/snippets/default/_default.yml +1 -0
  159. data/db/cms_fixtures/sample-site/snippets/default/content.html +1 -0
  160. data/db/migrate/01_create_cms.rb +163 -0
  161. data/db/seeds.rb +9 -0
  162. data/db/upgrade_migrations/02_upgrade_to_1_1_0.rb +19 -0
  163. data/db/upgrade_migrations/03_upgrade_to_1_2_0.rb +15 -0
  164. data/db/upgrade_migrations/04_upgrade_to_1_3_0.rb +23 -0
  165. data/db/upgrade_migrations/05_upgrade_to_1_4_0.rb +33 -0
  166. data/db/upgrade_migrations/06_upgrade_to_1_5_0.rb +21 -0
  167. data/db/upgrade_migrations/07_upgrade_to_1_6_0.rb +25 -0
  168. data/doc/preview.png +0 -0
  169. data/doc/sofa.png +0 -0
  170. data/lib/comfypress/authentication/dummy_auth.rb +8 -0
  171. data/lib/comfypress/authentication/http_auth.rb +18 -0
  172. data/lib/comfypress/configuration.rb +99 -0
  173. data/lib/comfypress/engine.rb +18 -0
  174. data/lib/comfypress/error.rb +24 -0
  175. data/lib/comfypress/extensions/acts_as_tree.rb +102 -0
  176. data/lib/comfypress/extensions/has_revisions.rb +64 -0
  177. data/lib/comfypress/extensions/is_categorized.rb +49 -0
  178. data/lib/comfypress/extensions/is_mirrored.rb +85 -0
  179. data/lib/comfypress/extensions/rails.rb +24 -0
  180. data/lib/comfypress/fixtures.rb +289 -0
  181. data/lib/comfypress/form_builder.rb +97 -0
  182. data/lib/comfypress/render_methods.rb +85 -0
  183. data/lib/comfypress/routing.rb +62 -0
  184. data/lib/comfypress/sitemap.rb +27 -0
  185. data/lib/comfypress/tag.rb +154 -0
  186. data/lib/comfypress/tags/asset.rb +25 -0
  187. data/lib/comfypress/tags/collection.rb +64 -0
  188. data/lib/comfypress/tags/field_datetime.rb +17 -0
  189. data/lib/comfypress/tags/field_integer.rb +17 -0
  190. data/lib/comfypress/tags/field_rich_text.rb +17 -0
  191. data/lib/comfypress/tags/field_string.rb +17 -0
  192. data/lib/comfypress/tags/field_text.rb +17 -0
  193. data/lib/comfypress/tags/file.rb +29 -0
  194. data/lib/comfypress/tags/helper.rb +24 -0
  195. data/lib/comfypress/tags/menu.rb +27 -0
  196. data/lib/comfypress/tags/page_datetime.rb +13 -0
  197. data/lib/comfypress/tags/page_file.rb +51 -0
  198. data/lib/comfypress/tags/page_files.rb +52 -0
  199. data/lib/comfypress/tags/page_integer.rb +13 -0
  200. data/lib/comfypress/tags/page_markdown.rb +22 -0
  201. data/lib/comfypress/tags/page_rich_text.rb +13 -0
  202. data/lib/comfypress/tags/page_string.rb +13 -0
  203. data/lib/comfypress/tags/page_text.rb +13 -0
  204. data/lib/comfypress/tags/partial.rb +23 -0
  205. data/lib/comfypress/tags/snippet.rb +19 -0
  206. data/lib/comfypress/version.rb +3 -0
  207. data/lib/comfypress/view_hooks.rb +32 -0
  208. data/lib/comfypress/view_methods.rb +52 -0
  209. data/lib/comfypress.rb +66 -0
  210. data/lib/generators/comfy/cms/README +10 -0
  211. data/lib/generators/comfy/cms/cms_generator.rb +57 -0
  212. data/lib/tasks/comfypress.rake +45 -0
  213. data/script/rails +6 -0
  214. data/test/fixtures/cms/blocks.yml +12 -0
  215. data/test/fixtures/cms/categories.yml +4 -0
  216. data/test/fixtures/cms/categorizations.yml +3 -0
  217. data/test/fixtures/cms/files.yml +9 -0
  218. data/test/fixtures/cms/layouts.yml +40 -0
  219. data/test/fixtures/cms/menu_items.yml +15 -0
  220. data/test/fixtures/cms/menus.yml +9 -0
  221. data/test/fixtures/cms/pages.yml +39 -0
  222. data/test/fixtures/cms/revisions.yml +21 -0
  223. data/test/fixtures/cms/sites.yml +6 -0
  224. data/test/fixtures/cms/snippets.yml +6 -0
  225. data/test/fixtures/files/data.zip +0 -0
  226. data/test/fixtures/files/document.pdf +0 -0
  227. data/test/fixtures/files/image.gif +0 -0
  228. data/test/fixtures/files/image.jpg +0 -0
  229. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  230. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  231. data/test/fixtures/views/render_test/_test.html.erb +1 -0
  232. data/test/fixtures/views/render_test/new.html.erb +1 -0
  233. data/test/fixtures/views/render_test/render_layout.html.erb +1 -0
  234. data/test/functional/cms_admin/base_controller_test.rb +18 -0
  235. data/test/functional/cms_admin/categories_controller_test.rb +70 -0
  236. data/test/functional/cms_admin/files_controller_test.rb +216 -0
  237. data/test/functional/cms_admin/layouts_controller_test.rb +123 -0
  238. data/test/functional/cms_admin/pages_controller_test.rb +450 -0
  239. data/test/functional/cms_admin/revisions_controller_test.rb +138 -0
  240. data/test/functional/cms_admin/sites_controller_test.rb +105 -0
  241. data/test/functional/cms_admin/snippets_controller_test.rb +140 -0
  242. data/test/functional/cms_content_controller_test.rb +205 -0
  243. data/test/gemfiles/Gemfile.rails.3.1 +16 -0
  244. data/test/gemfiles/Gemfile.rails.3.2 +16 -0
  245. data/test/gemfiles/Gemfile.rails.4.0 +16 -0
  246. data/test/integration/authentication_test.rb +48 -0
  247. data/test/integration/fixtures_test.rb +61 -0
  248. data/test/integration/mirrors_test.rb +72 -0
  249. data/test/integration/render_cms_test.rb +233 -0
  250. data/test/integration/sites_test.rb +120 -0
  251. data/test/integration/view_hooks_test.rb +43 -0
  252. data/test/test_helper.rb +124 -0
  253. data/test/unit/cms/menu_item_test.rb +7 -0
  254. data/test/unit/cms/menu_test.rb +7 -0
  255. data/test/unit/configuration_test.rb +42 -0
  256. data/test/unit/fixtures_test.rb +357 -0
  257. data/test/unit/mirrors_test.rb +242 -0
  258. data/test/unit/models/block_test.rb +199 -0
  259. data/test/unit/models/categorization_test.rb +76 -0
  260. data/test/unit/models/category_test.rb +39 -0
  261. data/test/unit/models/file_test.rb +89 -0
  262. data/test/unit/models/layout_test.rb +125 -0
  263. data/test/unit/models/page_test.rb +255 -0
  264. data/test/unit/models/site_test.rb +152 -0
  265. data/test/unit/models/snippet_test.rb +49 -0
  266. data/test/unit/revisions_test.rb +185 -0
  267. data/test/unit/sitemap_test.rb +20 -0
  268. data/test/unit/tag_test.rb +308 -0
  269. data/test/unit/tags/asset_test.rb +56 -0
  270. data/test/unit/tags/collection_test.rb +116 -0
  271. data/test/unit/tags/field_datetime_test.rb +50 -0
  272. data/test/unit/tags/field_integer_test.rb +49 -0
  273. data/test/unit/tags/field_rich_text_test.rb +49 -0
  274. data/test/unit/tags/field_string_test.rb +52 -0
  275. data/test/unit/tags/field_text_test.rb +48 -0
  276. data/test/unit/tags/file_test.rb +67 -0
  277. data/test/unit/tags/helper_test.rb +86 -0
  278. data/test/unit/tags/page_datetime_test.rb +50 -0
  279. data/test/unit/tags/page_file_test.rb +119 -0
  280. data/test/unit/tags/page_files_test.rb +113 -0
  281. data/test/unit/tags/page_integer_test.rb +49 -0
  282. data/test/unit/tags/page_markdown_test.rb +48 -0
  283. data/test/unit/tags/page_rich_text_test.rb +49 -0
  284. data/test/unit/tags/page_string_test.rb +49 -0
  285. data/test/unit/tags/page_text_test.rb +52 -0
  286. data/test/unit/tags/partial_test.rb +76 -0
  287. data/test/unit/tags/snippet_test.rb +45 -0
  288. data/test/unit/view_methods_test.rb +80 -0
  289. metadata +457 -0
@@ -0,0 +1,58 @@
1
+ class Cms::Snippet < ActiveRecord::Base
2
+
3
+ ComfyPress.establish_connection(self)
4
+
5
+ self.table_name = 'cms_snippets'
6
+
7
+ cms_is_categorized
8
+ cms_is_mirrored
9
+ cms_has_revisions_for :content
10
+
11
+ attr_accessible :identifier,
12
+ :label,
13
+ :content,
14
+ :category_ids
15
+
16
+ # -- Relationships --------------------------------------------------------
17
+ belongs_to :site
18
+
19
+ # -- Callbacks ------------------------------------------------------------
20
+ before_validation :assign_label
21
+ before_create :assign_position
22
+ after_save :clear_cached_page_content
23
+ after_destroy :clear_cached_page_content
24
+
25
+ # -- Validations ----------------------------------------------------------
26
+ validates :site_id,
27
+ :presence => true
28
+ validates :label,
29
+ :presence => true
30
+ validates :identifier,
31
+ :presence => true,
32
+ :uniqueness => { :scope => :site_id },
33
+ :format => { :with => /^\w[a-z0-9_-]*$/i }
34
+
35
+ # -- Scopes ---------------------------------------------------------------
36
+ default_scope order('cms_snippets.position')
37
+
38
+ protected
39
+
40
+ def assign_label
41
+ self.label = self.label.blank?? self.identifier.try(:titleize) : self.label
42
+ end
43
+
44
+ # Note: This might be slow. We have no idea where the snippet is used, so
45
+ # gotta reload every single page. Kinda sucks, but might be ok unless there
46
+ # are hundreds of pages.
47
+ def clear_cached_page_content
48
+ site.pages.all.each do |p|
49
+ Cms::Page.where(:id => p.id).update_all(:content => p.content(true))
50
+ end
51
+ end
52
+
53
+ def assign_position
54
+ max = self.site.snippets.maximum(:position)
55
+ self.position = max ? max + 1 : 0
56
+ end
57
+
58
+ end
data/app/models/cms.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Cms
2
+ def self.table_name_prefix
3
+ 'cms_'
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ - object ||= categories
2
+ - object.categories.each do |category|
3
+ .category= category.label
@@ -0,0 +1,6 @@
1
+ - category ||= edit
2
+
3
+ = form_for @category, :as => :category, :url => cms_admin_site_category_path(@site, category), :remote => true, :html => {:id => dom_id(category)} do |form|
4
+ .input-append
5
+ = form.text_field :label
6
+ %button.btn.btn-mini= t('.save')
@@ -0,0 +1,8 @@
1
+ - object = form.object
2
+ - if (categories = @site.categories.of_type(object.class.to_s)).present?
3
+ = form.element t('.label'), nil, :class => 'categories' do
4
+ - categories.each do |category|
5
+ = hidden_field_tag "#{object.class.to_s.demodulize.underscore.downcase}[category_ids][#{category.id}]", 0, :id => nil
6
+ %label.checkbox.inline
7
+ = check_box_tag "#{object.class.to_s.demodulize.underscore.downcase}[category_ids][#{category.id}]", 1, object.categories.member?(category), :id => nil
8
+ = category.label
@@ -0,0 +1,24 @@
1
+ - type ||= index
2
+
3
+ .categories-widget
4
+ .categories-widget-label= t('.label')
5
+
6
+ .action-links
7
+ .edit= link_to t('.edit'), '#', :class => 'btn btn-mini'
8
+ .done= link_to t('.done'), '#', :class => 'btn btn-mini'
9
+
10
+ .categories.read
11
+ .category.all{:class => params[:category].blank?? 'active' : nil}
12
+ = link_to t('.all'), :category => nil
13
+ - @site.categories.of_type(type).each do |category|
14
+ = render :partial => 'cms_admin/categories/show', :object => category, :locals => { :read => true }
15
+
16
+ .categories.editable
17
+ - @site.categories.of_type(type).each do |category|
18
+ = render :partial => 'cms_admin/categories/show', :object => category
19
+
20
+ = form_for :category, :url => cms_admin_site_categories_path(@site), :remote => true, :html => {:id => 'new_category'} do |form|
21
+ = form.hidden_field :categorized_type, :value => type
22
+ .input-append
23
+ = form.text_field :label, :placeholder => 'Add Category'
24
+ %button.btn.btn-mini= t('.add')
@@ -0,0 +1,13 @@
1
+ - category ||= show
2
+ - read ||= false
3
+ - categories = [params[:category]].flatten.compact
4
+ - active = categories.flatten.member?(category.label)
5
+
6
+ .category{:class => (read && active ? 'active' : nil), :id => dom_id(category)}
7
+ - if read
8
+ - categories = active ? categories.reject{|c| c == category.label} : categories << category.label
9
+ = link_to category.label, "?#{{:category => categories}.to_param}"
10
+ - else
11
+ = link_to category.label, edit_cms_admin_site_category_path(@site, category), :remote => true
12
+ = link_to cms_admin_site_category_path(@site, category), :method => :delete, :remote => true, :data => {:confirm => t('.are_you_sure')}, :class => 'delete' do
13
+ %i.icon-remove-circle
@@ -0,0 +1,7 @@
1
+ $('.categories-widget .categories.editable form#new_category').before(
2
+ '<%= escape_javascript(render :partial => "show", :object => @category ) %>'
3
+ );
4
+ $('.categories-widget .categories.read').append(
5
+ '<%= escape_javascript(render :partial => "show", :object => @category, :locals => { :read => true }) %>'
6
+ );
7
+ $('.categories-widget .categories.editable form#new_category input#category_label').val('');
@@ -0,0 +1,3 @@
1
+ $('.categories .category#<%= dom_id(@category) %>').fadeOut('slow', function(){
2
+ $(this).remove()
3
+ })
@@ -0,0 +1,3 @@
1
+ $('.categories.editable .category#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render :partial => "edit", :object => @category ) %>'
3
+ );
@@ -0,0 +1,6 @@
1
+ $('.categories.editable form#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render :partial => "show", :object => @category ) %>'
3
+ );
4
+ $('.categories.read .category#<%= dom_id(@category) %>').replaceWith(
5
+ '<%= escape_javascript(render :partial => "show", :object => @category, :locals => { :read => true } ) %>'
6
+ );
@@ -0,0 +1,13 @@
1
+ .file{:class => "#{dom_id(file)} #{file.is_image?? 'image' : nil}"}
2
+ .file-name
3
+ = link_to cms_admin_site_file_path(@site, file), :method => :delete, :remote => true, :data => {:confirm => t('.are_you_sure')}, :class => 'delete' do
4
+ %i.icon-remove-circle
5
+ = link_to file.file_file_name, file.file.url, :target => '_blank', :class => 'filename'
6
+
7
+ .file-info{:data => {:url => file.file.url}}
8
+ .thumb
9
+ = image_tag file.file.url(:cms_thumb) if file.is_image?
10
+ .details
11
+ %input{:type => 'text', :value => file.file.url}
12
+ .file-type= file.file_content_type
13
+ .file-size= number_to_human_size(file.file_file_size, :locale => :en)
@@ -0,0 +1,14 @@
1
+ = form.text_field :label
2
+ = form.file_field :file, :multiple => @file.new_record?
3
+
4
+ - unless @file.new_record?
5
+ = form.element t('.current_file') do
6
+ = image_tag @file.file.url if @file.is_image?
7
+ = link_to @file.file.url, @file.file.url, :target => '_blank'
8
+
9
+ = form.text_area :description
10
+
11
+ = render :partial => 'cms_admin/categories/form', :object => form
12
+
13
+ .form-actions
14
+ = form.submit t(@file.new_record?? '.create' : '.update'), :class => 'btn btn-primary'
@@ -0,0 +1,14 @@
1
+ - type ||= nil
2
+ - files_scope = (type == 'image') ? @site.files.images : @site.files
3
+
4
+ .box.file-uploader
5
+ = form_for :file, :url => cms_admin_site_files_path(@site, :ajax => true), :html => {:multipart => true, :target => 'file-upload-frame'} do |form|
6
+ %span.btn.btn-file
7
+ = t('.button')
8
+ = form.file_field :file, :multiple => true, :id => nil
9
+
10
+ .uploaded-files
11
+ - files_scope.order(:label).each do |file|
12
+ = render :partial => 'cms_admin/files/file', :object => file
13
+
14
+ %iframe#file-upload-frame{:name => 'file-upload-frame', :src => ''}
@@ -0,0 +1,9 @@
1
+ - block ||= page_form
2
+
3
+ - if (files = block.files).present?
4
+ .files
5
+ - files.each do |file|
6
+ .file{:class => dom_id(file)}
7
+ = link_to file.file_file_name, file.file.url, :target => '_blank'
8
+ = link_to cms_admin_site_file_path(@site, file), :method => :delete, :remote => true, :confirm => t('.are_you_sure'), :class => 'delete' do
9
+ %i.icon-remove-circle
@@ -0,0 +1,2 @@
1
+ $(".file.<%= dom_id(@file) %>").fadeOut 'slow', ->
2
+ $(this).remove()
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @file, :as => :file, :url => {:action => :update} do |form|
5
+ = render form
@@ -0,0 +1,28 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_cms_admin_site_file_path(@site), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ = render :partial => 'cms_admin/categories/index', :object => 'Cms::File'
6
+
7
+ %table.table.table-hover.table-bordered
8
+ %tbody.sortable
9
+ - @files.each do |file|
10
+ %tr{:id => dom_id(file)}
11
+ %td
12
+ - if file.is_image?
13
+ - icon_style = "background: url('#{file.file.url(:cms_thumb)}') no-repeat center"
14
+ .icon{:style => icon_style}
15
+ - if !params[:category].present? && @site.files.count > 1
16
+ .dragger
17
+ %span &#8645;
18
+ %td.main
19
+ .item-title
20
+ = link_to file.label, edit_cms_admin_site_file_path(@site, file)
21
+ = render :partial => '/cms_admin/categories/categories', :object => file
22
+ .item-meta
23
+ = link_to file.file_file_name, file.file.url, :target => '_blank'
24
+
25
+ %td
26
+ .btn-group
27
+ = link_to t('.edit'), edit_cms_admin_site_file_path(@site, file), :class => 'btn btn-small'
28
+ = link_to t('.delete'), cms_admin_site_file_path(@site, file), :method => :delete, :data => {:confirm => t('.are_you_sure')}, :class => 'btn btn-small btn-danger'
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @file, :as => :file, :url => {:action => :create}, :html => {:multipart => true} do |form|
5
+ = render form
@@ -0,0 +1,17 @@
1
+ - content_for :right_column do
2
+ = render :partial => 'cms_admin/files/index'
3
+
4
+ = form.text_field :label, :data => {:slugify => @layout.new_record?}
5
+ = form.text_field :identifier, :data => {:slug => true}
6
+ - if (options = Cms::Layout.options_for_select(@site, @layout)).present?
7
+ = form.select :parent_id, [["---- #{t('.select_parent_layout')} ----", nil]] + options
8
+
9
+ - if (options = Cms::Layout.app_layouts_for_select).present?
10
+ = form.select :app_layout, [["---- #{t('.select_app_layout')} ----", nil]] + options
11
+
12
+ = form.text_area :content, :data => {:cm_mode => 'text/html'}
13
+ = form.text_area :css, :data => {:cm_mode => 'css'}
14
+ = form.text_area :js, :data => {:cm_mode => 'javascript'}
15
+
16
+ .form-actions
17
+ = form.submit t(@layout.new_record?? '.create' : '.update'), :class => 'btn btn-primary'
@@ -0,0 +1,23 @@
1
+ - layout ||= index_branch
2
+ - has_siblings = layout.siblings.select{|l| l.site_id == @site.id}.size > 0
3
+
4
+ %li{:id => dom_id(layout)}
5
+ .item
6
+ .icon
7
+ - if !params[:category].present? && has_siblings
8
+ .dragger
9
+ %span &#8645;
10
+
11
+ .btn-group
12
+ = link_to t('.add_child_layout'), new_cms_admin_site_layout_path(@site, :parent_id => layout.id), :class => 'btn btn-small'
13
+ = link_to t('.edit'), edit_cms_admin_site_layout_path(@site, layout), :class => 'btn btn-small'
14
+ = link_to t('.delete'), cms_admin_site_layout_path(@site, layout), :method => :delete, :data => {:confirm => t('.are_you_sure')}, :class => 'btn btn-small btn-danger'
15
+
16
+ .item-content
17
+ .item-title
18
+ = link_to layout.label, edit_cms_admin_site_layout_path(@site, layout)
19
+ .item-meta
20
+ = layout.identifier
21
+
22
+ - if layout.children.present?
23
+ %ul= render :partial => 'index_branch', :collection => layout.children
@@ -0,0 +1,9 @@
1
+ .page-header
2
+ = link_to pluralize(@layout.revisions.count, t('.revision')), cms_admin_site_layout_revisions_path(@site, @layout), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors', :object => @layout
7
+
8
+ = comfy_form_for @layout, :as => :layout, :url => {:action => :update} do |form|
9
+ = render form
@@ -0,0 +1,9 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_cms_admin_site_layout_path(@site), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors'
7
+
8
+ %ul.list.sortable
9
+ = render :partial => 'index_branch', :collection => @layouts
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @layout, :as => :layout, :url => {:action => :create} do |form|
5
+ = render form
@@ -0,0 +1,22 @@
1
+ - content_for :right_column do
2
+ = render :partial => 'cms_admin/files/index'
3
+
4
+ = form.text_field :label
5
+ .control-group
6
+ = form.label :menu_item_type, class: 'control-label'
7
+ .controls.menu-type-wrapper
8
+ %div
9
+ = label_tag 'menu_item_menu_item_type_page', class: 'radio inline' do
10
+ = radio_button_tag 'menu_item[menu_item_type]', 'page', @menu_item.menu_item_type == 'page', {data: {show: '.menu-type-page', hide: '.menu-type-link'}}
11
+ Page
12
+ = label_tag 'menu_item_menu_item_type_link', class: 'radio inline' do
13
+ = radio_button_tag 'menu_item[menu_item_type]', 'link', @menu_item.menu_item_type == 'link', {data: {show: '.menu-type-link', hide: '.menu-type-page'}}
14
+ link
15
+ .hidden.menu-type-link
16
+ = form.text_field :link
17
+ - if (options = Cms::Page.options_for_select(@site)).present?
18
+ .hidden.menu-type-page
19
+ = form.select :page_id, options, {:prompt => "Select page"}
20
+
21
+ .form-actions
22
+ = form.submit t(@menu_item.new_record?? '.create' : '.update'), :class => 'btn btn-primary'
@@ -0,0 +1,8 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ - content_for :right_column do
5
+ = render :partial => 'cms_admin/sites/mirrors', :object => @menu
6
+
7
+ = comfy_form_for @menu_item, :as => :menu_item, :url => {:action => :update} do |form|
8
+ = render form
@@ -0,0 +1,24 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_cms_admin_site_menu_menu_item_path(@site, @menu), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors'
7
+
8
+ %table.table.table-hover.table-bordered
9
+ %tbody.sortable
10
+ - @menu_items.try(:each) do |menu_item|
11
+ %tr{:id => dom_id(menu_item)}
12
+ %td
13
+ .icon
14
+ - if !params[:category].present? && @menu.menu_items.count > 1
15
+ .dragger
16
+ %span &#8645;
17
+ %td.main
18
+ .item-title
19
+ = link_to menu_item.label, edit_cms_admin_site_menu_menu_item_path(@site, @menu, menu_item)
20
+ %td
21
+ .btn-group
22
+ = link_to t('.edit'), edit_cms_admin_site_menu_menu_item_path(@site, @menu, menu_item), :class => 'btn btn-small'
23
+
24
+ = link_to t('.delete'), cms_admin_site_menu_menu_item_path(@site, @menu, menu_item), :method => :delete, :data => {:confirm => t('.are_you_sure')}, :class => 'btn btn-small btn-danger'
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @menu_item, :as => :menu_item, :url => {:action => :create} do |form|
5
+ = render form
@@ -0,0 +1,8 @@
1
+ - content_for :right_column do
2
+ = render :partial => 'cms_admin/files/index'
3
+
4
+ = form.text_field :label, :data => {:slugify => @menu.new_record?}
5
+ = form.text_field :identifier, :data => {:slug => true}
6
+
7
+ .form-actions
8
+ = form.submit t(@menu.new_record?? '.create' : '.update'), :class => 'btn btn-primary'
@@ -0,0 +1,8 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ - content_for :right_column do
5
+ = render :partial => 'cms_admin/sites/mirrors', :object => @menu
6
+
7
+ = comfy_form_for @menu, :as => :menu, :url => {:action => :update} do |form|
8
+ = render form
@@ -0,0 +1,24 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_cms_admin_site_menu_path(@site), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors'
7
+
8
+ %table.table.table-hover.table-bordered
9
+ %tbody.sortable
10
+ - @menus.each do |menu|
11
+ %tr{:id => dom_id(menu)}
12
+ %td
13
+ .icon
14
+ - if !params[:category].present? && @site.menus.count > 1
15
+ .dragger
16
+ %span &#8645;
17
+ %td.main
18
+ .item-title
19
+ = link_to menu.label, edit_cms_admin_site_menu_path(@site, menu)
20
+ %td
21
+ .btn-group
22
+ = link_to t('.edit'), edit_cms_admin_site_menu_path(@site, menu), :class => 'btn btn-small'
23
+ = link_to t('.menu_items'), cms_admin_site_menu_menu_items_path(@site, menu), :class => 'btn btn-small'
24
+ = link_to t('.delete'), cms_admin_site_menu_path(@site, menu), :method => :delete, :data => {:confirm => t('.are_you_sure')}, :class => 'btn btn-small btn-danger'
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @menu, :as => :menu, :url => {:action => :create} do |form|
5
+ = render form
@@ -0,0 +1,38 @@
1
+ - content_for :right_column do
2
+ #form-save.box
3
+ %label.checkbox.inline
4
+ %input{:type => 'checkbox'}
5
+ = Cms::Page.human_attribute_name(:is_published)
6
+ %button.btn.btn-small.btn-primary.pull-right
7
+ = render :partial => 'cms_admin/files/index'
8
+
9
+ = form.text_field :label, :data => {:slugify => @page.new_record?}
10
+
11
+ - unless @site.pages.count == 0 || @site.pages.root == @page
12
+ = form.text_field :slug, :data => {:slug => true}
13
+ - unless @page.new_record?
14
+ = form.text_field :full_path, :id => 'full-path', :disabled => true
15
+
16
+ - if (options = Cms::Layout.options_for_select(@site)).present?
17
+ = form.select :layout_id, options, {}, 'data-url' => form_blocks_cms_admin_site_page_path(@site, @page.id.to_i)
18
+
19
+ - if (options = Cms::Page.options_for_select(@site, @page)).present?
20
+ = form.select :parent_id, options
21
+
22
+ - if (options = Cms::Page.options_for_select(@site, @page, nil, 0, false)).present?
23
+ = form.select :target_page_id, [["---- #{t('.select_target_page')} ----", nil]] + options
24
+
25
+ - if (options = Cms::Menu.options_for_select(@site)).present?
26
+ = form.select :menu_id, options, {:prompt => "Select menu"}
27
+
28
+ = cms_hook :page_form, :object => form
29
+
30
+ = render :partial => 'cms_admin/categories/form', :object => form
31
+
32
+ = render :partial => 'form_blocks'
33
+
34
+ = form.check_box :is_published, :label => t('.is_published')
35
+
36
+ .form-actions
37
+ = form.submit t('.preview'), :name => 'preview', :id => nil, :class => 'btn'
38
+ = form.submit t(@page.new_record?? '.create' : '.update'), :class => 'btn btn-primary'
@@ -0,0 +1,28 @@
1
+ - namespace = { }
2
+ - tags = @page.tags(true).select{ |t| t.is_cms_block? }.uniq_by{|t| t.identifier}
3
+ - tags.each do |tag|
4
+ - namespace[tag.namespace || 'default'] ||= []
5
+ - namespace[tag.namespace || 'default'] << tag
6
+
7
+ #form-blocks
8
+ - if tags.empty?
9
+ .no-tags
10
+ = link_to @page.layout.label, edit_cms_admin_site_layout_path(@site, @page.layout)
11
+ = t('.no_tags').html_safe
12
+
13
+ - else
14
+ = fields_for :blocks, nil, :builder => ComfyPress::FormBuilder do |cms_blocks|
15
+
16
+ .tabbable
17
+ - if namespace.size > 1
18
+ %ul.nav.nav-tabs
19
+ - namespace.each_with_index do |(name, tags), index|
20
+ %li{:class => index == 0 ? 'active' : nil}
21
+ = link_to name.humanize, "#ns-#{name}", :data => {:toggle => 'tab'}
22
+ .tab-content
23
+ - block_index = 0
24
+ - namespace.each_with_index do |(name, tags), index|
25
+ .tab-pane{:id => "ns-#{name}", :class => index == 0 ? 'active' : nil}
26
+ - tags.each do |tag|
27
+ = cms_blocks.send(tag.class.to_s.demodulize.underscore, tag, block_index) rescue nil
28
+ - block_index += 1
@@ -0,0 +1,35 @@
1
+ - page ||= index_branch
2
+ - children = @pages_by_parent[page.id]
3
+ - siblings = @pages_by_parent[page.parent_id]
4
+ - has_children = children.present?
5
+ - has_siblings = siblings.size > 1
6
+ - branch_open = (session[:cms_page_tree] || []).member?(page.id.to_s) || page.root?
7
+ - category_view = params[:category].present?
8
+
9
+ %li{:id => dom_id(page)}
10
+ .item
11
+ .toggle{:class => branch_open ? 'open' : nil}
12
+ - if !category_view && has_children && !page.root?
13
+ = link_to toggle_branch_cms_admin_site_page_path(@site, page), :remote => true do
14
+ %span= t('.toggle')
15
+
16
+ .icon{:class => page.is_published?? 'published' : 'draft'}
17
+ - if !category_view && has_siblings
18
+ .dragger
19
+ %span &#8645;
20
+
21
+ .btn-group
22
+ = link_to t('.add_child_page'), new_cms_admin_site_page_path(@site, :parent_id => page.id), :class => 'btn btn-small'
23
+ = link_to t('.edit'), edit_cms_admin_site_page_path(@site, page), :class => 'btn btn-small'
24
+ = link_to t('.delete'), cms_admin_site_page_path(@site, page), :method => :delete, :data => {:confirm => t('.are_you_sure')}, :class => 'btn btn-small btn-danger'
25
+
26
+ .item-content
27
+ .item-title
28
+ = link_to page.label, edit_cms_admin_site_page_path(@site, page), :class => 'item-label'
29
+ = render :partial => '/cms_admin/categories/categories', :object => page
30
+ .item-meta
31
+ = link_to page.url, page.url, :target => '_blank'
32
+
33
+ - if !category_view && has_children && branch_open
34
+ %ul.children.sortable
35
+ = render :partial => 'index_branch', :collection => children
@@ -0,0 +1,9 @@
1
+ .page-header
2
+ = link_to pluralize(@page.revisions.count, t('.revision')), cms_admin_site_page_revisions_path(@site, @page), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors', :object => @page
7
+
8
+ = comfy_form_for @page, :as => :page, :url => {:action => :update}, :html => {:multipart => true} do |form|
9
+ = render form
@@ -0,0 +1,2 @@
1
+ $('#form-blocks').replaceWith('<%= escape_javascript(render(:partial => "form_blocks")) %>');
2
+ CMS.codemirror();
@@ -0,0 +1,11 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_cms_admin_site_page_path(@site), :class => 'btn pull-right'
3
+ %h2= t('.title')
4
+
5
+ - content_for :right_column do
6
+ = render :partial => 'cms_admin/sites/mirrors'
7
+
8
+ = render :partial => 'cms_admin/categories/index', :object => 'Cms::Page'
9
+
10
+ %ul.list.sortable
11
+ = render :partial => 'index_branch', :collection => @pages
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_for @page, :as => :page, :url => {:action => :create}, :html => {:multipart => true} do |form|
5
+ = render form
@@ -0,0 +1,11 @@
1
+ var li = $('li#cms_page_<%=@page.id%>');
2
+ li.find('.item .toggle').first().toggleClass('open');
3
+
4
+ <% if session[:cms_page_tree].member?(@page.id.to_s) %>
5
+ if(!li.find('ul.children')[0]) {
6
+ li.append('<ul class="children sortable"><%= escape_javascript(render :partial => "index_branch", :collection => @page.children) %></ul>');
7
+ CMS.sortable_list();
8
+ }
9
+ <% else %>
10
+ li.find('ul.children').remove();
11
+ <% end %>
@@ -0,0 +1,28 @@
1
+ .page-header
2
+ %h2
3
+ = t('.title')
4
+ = @record.class.to_s.demodulize
5
+ %h4
6
+ = @record.is_a?(Cms::Page) ? "#{t('.full_path')}: #{@record.full_path}" : "#{t('.slug')}: #{@record.identifier}"
7
+
8
+ - content_for :right_column do
9
+ .box.revisions
10
+ - @record.revisions.each do |revision|
11
+ = active_link_to l(revision.created_at), :id => revision.id
12
+
13
+
14
+ %table.table
15
+ %tr
16
+ %th
17
+ %th= t('.current')
18
+ %th= l(@revision.created_at)
19
+
20
+ - @current_content.each do |label, content|
21
+ %tr
22
+ %th= Cms::Layout.human_attribute_name(label)
23
+ %td.main= content
24
+ %td.main= @versioned_content[label]
25
+
26
+ = comfy_form_for @revision, :url => {:action => :revert} do |form|
27
+ .form-actions
28
+ = form.submit t('.update'), :class => 'btn btn-primary'