comfortable_mexican_sofa 1.12.8 → 1.12.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -3
  3. data/app/assets/fonts/comfy/admin/cms/lib/redactor-font.eot +0 -0
  4. data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +46 -11
  5. data/app/assets/javascripts/comfy/admin/cms/lib/redactor.js +1807 -570
  6. data/app/assets/stylesheets/comfy/admin/cms/bootstrap_overrides.sass +6 -1
  7. data/app/assets/stylesheets/comfy/admin/cms/lib/redactor.css +79 -52
  8. data/app/controllers/comfy/admin/cms/base_controller.rb +2 -1
  9. data/app/controllers/comfy/admin/cms/pages_controller.rb +4 -1
  10. data/app/controllers/comfy/cms/base_controller.rb +5 -5
  11. data/app/controllers/comfy/cms/content_controller.rb +4 -0
  12. data/app/helpers/comfy/cms_helper.rb +72 -70
  13. data/app/models/comfy/cms/file.rb +0 -1
  14. data/app/views/comfy/admin/cms/files/_file.html.haml +1 -1
  15. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +2 -1
  16. data/config/environments/test.rb +2 -0
  17. data/config/initializers/comfortable_mexican_sofa.rb +12 -0
  18. data/config/locales/cs.yml +2 -3
  19. data/config/locales/da.yml +2 -3
  20. data/config/locales/de.yml +2 -3
  21. data/config/locales/en.yml +2 -3
  22. data/config/locales/es.yml +2 -3
  23. data/config/locales/fr.yml +2 -3
  24. data/config/locales/it.yml +2 -3
  25. data/config/locales/ja.yml +2 -3
  26. data/config/locales/nb.yml +2 -3
  27. data/config/locales/nl.yml +2 -3
  28. data/config/locales/pl.yml +40 -41
  29. data/config/locales/pt-BR.yml +2 -3
  30. data/config/locales/ru.yml +2 -3
  31. data/config/locales/sv.yml +2 -3
  32. data/config/locales/uk.yml +2 -3
  33. data/config/locales/zh-CN.yml +2 -3
  34. data/config/locales/zh-TW.yml +16 -17
  35. data/db/migrate/01_create_cms.rb +18 -25
  36. data/db/upgrade_migrations/08_upgrade_to_1_12_0.rb +2 -2
  37. data/doc/preview.png +0 -0
  38. data/lib/comfortable_mexican_sofa.rb +1 -0
  39. data/lib/comfortable_mexican_sofa/access_control/admin_authentication.rb +3 -2
  40. data/lib/comfortable_mexican_sofa/access_control/public_authorization.rb +8 -0
  41. data/lib/comfortable_mexican_sofa/configuration.rb +4 -0
  42. data/lib/comfortable_mexican_sofa/engine.rb +5 -1
  43. data/lib/comfortable_mexican_sofa/fixture/file.rb +22 -22
  44. data/lib/comfortable_mexican_sofa/tags/asset.rb +8 -3
  45. data/lib/comfortable_mexican_sofa/version.rb +1 -1
  46. data/test/controllers/comfy/admin/cms/pages_controller_test.rb +22 -0
  47. data/test/controllers/comfy/cms/content_controller_test.rb +12 -0
  48. data/test/integration/access_control_test.rb +24 -1
  49. data/test/lib/fixtures/files_test.rb +29 -27
  50. data/test/lib/tags/asset_test.rb +42 -9
  51. data/test/test_helper.rb +8 -3
  52. metadata +5 -3
@@ -7,13 +7,15 @@ body#comfy
7
7
  h2
8
8
  margin-top: 0
9
9
  table.table
10
+ th
11
+ white-space: nowrap
10
12
  td
11
13
  white-space: nowrap
12
14
  .btn-group
13
15
  font-size: 0
14
16
  .btn
15
17
  float: none
16
- td.main
18
+ th.main, td.main
17
19
  width: 100%
18
20
  white-space: normal
19
21
  form
@@ -25,3 +27,6 @@ body#comfy
25
27
  padding: 15px 0
26
28
  border-top: 1px solid #eee
27
29
  background-color: #f5f5f5
30
+ form.form-inline
31
+ .form-group
32
+ margin-bottom: 0
@@ -1,10 +1,6 @@
1
1
  /*
2
2
  Icon font
3
3
  */
4
- @font-face {
5
- font-family: 'RedactorFont';
6
- src: url('redactor-font.eot');
7
- }
8
4
  @font-face {
9
5
  font-family: 'RedactorFont';
10
6
  src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
@@ -32,51 +28,37 @@
32
28
  box-shadow: none;
33
29
  color: #ccc;
34
30
  font-size: 13px;
35
- font-family: Menlo, Monaco, monospace, sans-serif;
31
+ font-family: Menlo, Monaco, monospace, sans-serif !important;
36
32
  resize: none;
37
33
  }
38
34
  .redactor-box textarea:focus {
39
35
  outline: none;
40
36
  }
41
- /*
42
- Z-index setup
43
- */
44
37
  .redactor-editor,
45
38
  .redactor-box {
46
39
  background: #fff;
47
40
  }
41
+ /*
42
+ Z-index setup
43
+ */
48
44
  .redactor-editor,
49
45
  .redactor-box,
50
46
  .redactor-box textarea {
51
- z-index: auto !important;
47
+ z-index: auto;
52
48
  }
53
49
  .redactor-box-fullscreen {
54
- z-index: 1052 !important;
50
+ z-index: 1051;
51
+ }
52
+ .redactor-toolbar {
53
+ z-index: 100;
55
54
  }
56
- .redactor-toolbar,
57
55
  .redactor-dropdown {
58
- z-index: 1053 !important;
56
+ z-index: 1052;
59
57
  }
60
58
  #redactor-modal-overlay,
61
59
  #redactor-modal-box,
62
60
  #redactor-modal {
63
- z-index: 1054 !important;
64
- }
65
- /*
66
- Resize
67
- */
68
- .redactor-resize {
69
- background: #f4f4f4;
70
- padding: 4px 0 3px 0;
71
- cursor: move;
72
- border: 1px solid #e3e3e3;
73
- border-top: none;
74
- }
75
- .redactor-resize div {
76
- width: 30px;
77
- margin: auto;
78
- border-top: 1px solid #bbb;
79
- border-bottom: 1px solid #fff;
61
+ z-index: 1053;
80
62
  }
81
63
  /*
82
64
  Fullscreen
@@ -90,8 +72,12 @@ body .redactor-box-fullscreen {
90
72
  /*
91
73
  Utils
92
74
  */
93
- .body-redactor-hidden {
94
- overflow: hidden;
75
+ .redactor-scrollbar-measure {
76
+ position: absolute;
77
+ top: -9999px;
78
+ width: 50px;
79
+ height: 50px;
80
+ overflow: scroll;
95
81
  }
96
82
  /*
97
83
  Editor
@@ -101,35 +87,33 @@ body .redactor-box-fullscreen {
101
87
  overflow: auto;
102
88
  margin: 0 !important;
103
89
  padding: 20px;
90
+ min-height: 80px;
104
91
  outline: none;
105
92
  white-space: normal;
106
93
  border: 1px solid #eee;
107
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
94
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
108
95
  font-size: 14px;
109
96
  line-height: 1.6em;
110
97
  }
111
98
  .redactor-editor:focus {
112
99
  outline: none;
113
100
  }
101
+ .toolbar-fixed-box + .redactor-editor {
102
+ padding-top: 32px !important;
103
+ }
114
104
  /*
115
105
  Placeholder
116
106
  */
117
- .redactor-placeholder {
118
- position: relative;
119
- }
120
107
  .redactor-placeholder:after {
121
108
  position: absolute;
122
109
  top: 20px;
123
110
  left: 20px;
124
111
  content: attr(placeholder);
112
+ display: block;
113
+ /* For Firefox */
125
114
  color: #999 !important;
126
115
  font-weight: normal !important;
127
116
  }
128
- /* Placeholder in linebreaks mode */
129
- .redactor-linebreaks.redactor-placeholder:after {
130
- top: 20px;
131
- left: 20px;
132
- }
133
117
  /*
134
118
  Toolbar
135
119
  */
@@ -222,6 +206,16 @@ body .redactor-box-fullscreen {
222
206
  background-color: transparent !important;
223
207
  cursor: default;
224
208
  }
209
+ .redactor-toolbar li a.redactor-button-focus {
210
+ color: #fff;
211
+ background: #000;
212
+ }
213
+ /*
214
+ CodeMirror
215
+ */
216
+ .redactor-box .CodeMirror {
217
+ display: none;
218
+ }
225
219
  /*
226
220
  Icons
227
221
  */
@@ -350,7 +344,7 @@ body .redactor-box-fullscreen {
350
344
  color: #fff;
351
345
  padding: 5px 8px;
352
346
  line-height: 1;
353
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
347
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
354
348
  font-size: 12px;
355
349
  border-radius: 2px;
356
350
  }
@@ -368,7 +362,7 @@ body .redactor-box-fullscreen {
368
362
  background-color: #fff;
369
363
  box-shadow: 0 1px 7px rgba(0, 0, 0, 0.25);
370
364
  font-size: 14px;
371
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
365
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
372
366
  line-height: 1.6em;
373
367
  }
374
368
  .redactor-dropdown a {
@@ -386,6 +380,23 @@ body .redactor-box-fullscreen {
386
380
  color: #fff !important;
387
381
  text-decoration: none;
388
382
  }
383
+ .redactor-dropdown a.selected {
384
+ background-color: #000;
385
+ color: #fff;
386
+ }
387
+ .redactor-dropdown a.redactor-dropdown-link-inactive,
388
+ .redactor-dropdown a.redactor-dropdown-link-inactive:hover {
389
+ background: none;
390
+ cursor: default;
391
+ color: #000 !important;
392
+ filter: alpha(opacity=40);
393
+ -moz-opacity: 0.4;
394
+ opacity: 0.4;
395
+ }
396
+ .redactor-dropdown a.redactor-dropdown-link-selected {
397
+ color: #fff;
398
+ background: #000;
399
+ }
389
400
  /*
390
401
  IMAGE BOX
391
402
  */
@@ -427,7 +438,7 @@ body .redactor-box-fullscreen {
427
438
  */
428
439
  .redactor-link-tooltip {
429
440
  position: absolute;
430
- z-index: 49999;
441
+ z-index: 99;
431
442
  padding: 10px;
432
443
  line-height: 1;
433
444
  display: inline-block;
@@ -437,7 +448,7 @@ body .redactor-box-fullscreen {
437
448
  .redactor-link-tooltip,
438
449
  .redactor-link-tooltip a {
439
450
  font-size: 12px;
440
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
451
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
441
452
  }
442
453
  .redactor-link-tooltip a {
443
454
  color: #ccc;
@@ -541,6 +552,7 @@ body .redactor-box-fullscreen {
541
552
  overflow-y: auto;
542
553
  }
543
554
  #redactor-modal {
555
+ outline: 0;
544
556
  position: relative;
545
557
  margin: auto;
546
558
  margin-bottom: 20px;
@@ -548,7 +560,7 @@ body .redactor-box-fullscreen {
548
560
  background: #fff;
549
561
  color: #000;
550
562
  font-size: 14px !important;
551
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
563
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
552
564
  box-shadow: 0 1px 70px rgba(0, 0, 0, 0.5);
553
565
  }
554
566
  #redactor-modal header {
@@ -590,7 +602,7 @@ body .redactor-box-fullscreen {
590
602
  color: #333;
591
603
  width: 100%;
592
604
  font-size: 14px;
593
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
605
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
594
606
  -moz-transition: border 0.3s ease-in;
595
607
  transition: border 0.3s ease-in;
596
608
  }
@@ -650,7 +662,7 @@ body .redactor-box-fullscreen {
650
662
  padding-left: 0;
651
663
  list-style: none;
652
664
  max-height: 250px;
653
- overflow-x: scroll;
665
+ overflow-x: auto;
654
666
  }
655
667
  #redactor-modal #redactor-modal-list li {
656
668
  border-bottom: 1px solid #ddd;
@@ -680,6 +692,11 @@ body .redactor-box-fullscreen {
680
692
  font-size: 30px;
681
693
  font-weight: 300;
682
694
  cursor: pointer;
695
+ -webkit-appearance: none;
696
+ padding: 0;
697
+ border: 0;
698
+ background: 0;
699
+ outline: none;
683
700
  }
684
701
  #redactor-modal-close:hover {
685
702
  color: #000;
@@ -697,7 +714,7 @@ body .redactor-box-fullscreen {
697
714
  text-decoration: none;
698
715
  font-weight: normal;
699
716
  font-size: 12px;
700
- font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif;
717
+ font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
701
718
  line-height: 1;
702
719
  cursor: pointer;
703
720
  }
@@ -773,7 +790,8 @@ body .redactor-box-fullscreen {
773
790
  */
774
791
  .redactor-editor code,
775
792
  .redactor-editor pre {
776
- font-family: Menlo, Monaco, monospace, sans-serif;
793
+ font-family: Menlo, Monaco, monospace, sans-serif !important;
794
+ cursor: text;
777
795
  }
778
796
  .redactor-editor div,
779
797
  .redactor-editor p,
@@ -823,10 +841,15 @@ body .redactor-box-fullscreen {
823
841
  }
824
842
  .redactor-editor blockquote {
825
843
  margin-left: 1.6em !important;
826
- padding-left: 0;
844
+ padding: 0;
845
+ text-align: left;
827
846
  color: #777;
828
847
  font-style: italic;
829
848
  }
849
+ .redactor-editor blockquote:before,
850
+ .redactor-editor blockquote:after {
851
+ content: '';
852
+ }
830
853
  .redactor-editor ul,
831
854
  .redactor-editor ol {
832
855
  padding-left: 2em;
@@ -840,6 +863,12 @@ body .redactor-box-fullscreen {
840
863
  padding-left: 2em;
841
864
  border: none;
842
865
  }
866
+ .redactor-editor ol ol li {
867
+ list-style-type: lower-alpha;
868
+ }
869
+ .redactor-editor ol ol ol li {
870
+ list-style-type: lower-roman;
871
+ }
843
872
  .redactor-editor dl dt {
844
873
  font-weight: bold;
845
874
  }
@@ -866,12 +895,10 @@ body .redactor-box-fullscreen {
866
895
  background-color: #d8d7d7;
867
896
  }
868
897
  .redactor-editor pre {
869
- overflow: auto;
870
898
  padding: 1em;
871
899
  border: 1px solid #ddd;
872
900
  border-radius: 3px;
873
901
  background: #f8f8f8;
874
- white-space: pre;
875
902
  font-size: 90%;
876
903
  }
877
904
  .redactor-editor hr {
@@ -32,7 +32,8 @@ class Comfy::Admin::Cms::BaseController < ComfortableMexicanSofa.config.base_con
32
32
  protected
33
33
 
34
34
  def load_admin_site
35
- if @site = ::Comfy::Cms::Site.find_by_id(params[:site_id] || session[:site_id]) || ::Comfy::Cms::Site.first
35
+ id_param = params[:site_id] || session[:site_id]
36
+ if @site = ::Comfy::Cms::Site.find_by(:id => id_param) || ::Comfy::Cms::Site.first
36
37
  session[:site_id] = @site.id
37
38
  else
38
39
  I18n.locale = ComfortableMexicanSofa.config.admin_locale || I18n.default_locale
@@ -1,5 +1,4 @@
1
1
  class Comfy::Admin::Cms::PagesController < Comfy::Admin::Cms::BaseController
2
-
3
2
  before_action :check_for_layouts, :only => [:new, :edit]
4
3
  before_action :build_cms_page, :only => [:new, :create]
5
4
  before_action :load_cms_page, :only => [:edit, :update, :destroy]
@@ -132,6 +131,10 @@ protected
132
131
  @cms_layout = @page.layout
133
132
  @cms_page = @page
134
133
 
134
+ # Make sure to use the site locale to render the preview becaue it might
135
+ # be different from the admin locale.
136
+ I18n.locale = @cms_site.locale
137
+
135
138
  # Chrome chokes on content with iframes. Issue #434
136
139
  response.headers['X-XSS-Protection'] = '0'
137
140
 
@@ -1,7 +1,7 @@
1
1
  class Comfy::Cms::BaseController < ApplicationController
2
-
2
+
3
3
  before_action :load_cms_site
4
-
4
+
5
5
  protected
6
6
 
7
7
  def load_cms_site
@@ -10,7 +10,7 @@ protected
10
10
  else
11
11
  ::Comfy::Cms::Site.find_site(request.host_with_port.downcase, request.fullpath)
12
12
  end
13
-
13
+
14
14
  if @cms_site
15
15
  if @cms_site.path.present? && !params[:site_id]
16
16
  if params[:cms_path] && params[:cms_path].match(/\A#{@cms_site.path}/)
@@ -20,9 +20,9 @@ protected
20
20
  raise ActionController::RoutingError.new('Site Not Found')
21
21
  end
22
22
  end
23
- I18n.locale = @cms_site.locale
23
+ I18n.locale = @locale = @cms_site.locale.to_sym
24
24
  else
25
- I18n.locale = I18n.default_locale
25
+ I18n.locale = @locale = I18n.default_locale
26
26
  raise ActionController::RoutingError.new('Site Not Found')
27
27
  end
28
28
  end
@@ -3,9 +3,13 @@ class Comfy::Cms::ContentController < Comfy::Cms::BaseController
3
3
  # Authentication module must have `authenticate` method
4
4
  include ComfortableMexicanSofa.config.public_auth.to_s.constantize
5
5
 
6
+ # Authorization module must have `authorize` method
7
+ include ComfortableMexicanSofa.config.public_authorization.to_s.constantize
8
+
6
9
  before_action :load_fixtures
7
10
  before_action :load_cms_page,
8
11
  :authenticate,
12
+ :authorize,
9
13
  :only => :show
10
14
 
11
15
  rescue_from ActiveRecord::RecordNotFound, :with => :page_not_found
@@ -1,83 +1,85 @@
1
- module Comfy::CmsHelper
1
+ module Comfy
2
+ module CmsHelper
2
3
 
3
- # Wrapper around ComfortableMexicanSofa::FormBuilder
4
- def comfy_form_for(record, options = {}, &proc)
5
- options[:builder] = ComfortableMexicanSofa::FormBuilder
6
- options[:layout] ||= :horizontal
7
- bootstrap_form_for(record, options, &proc)
8
- end
9
-
10
- # Injects some content somewhere inside cms admin area
11
- def cms_hook(name, options = {})
12
- ComfortableMexicanSofa::ViewHooks.render(name, self, options)
13
- end
4
+ # Wrapper around ComfortableMexicanSofa::FormBuilder
5
+ def comfy_form_for(record, options = {}, &proc)
6
+ options[:builder] = ComfortableMexicanSofa::FormBuilder
7
+ options[:layout] ||= :horizontal
8
+ bootstrap_form_for(record, options, &proc)
9
+ end
14
10
 
15
- # Content of a snippet. Examples:
16
- # cms_snippet_content(:my_snippet)
17
- # <%= cms_snippet_content(:my_snippet) do %>
18
- # Default content can go here.
19
- # <% end %>
20
- def cms_snippet_content(identifier, cms_site = @cms_site, &block)
21
- unless cms_site
22
- host, path = request.host_with_port.downcase, request.fullpath if respond_to?(:request) && request
23
- cms_site = Comfy::Cms::Site.find_site(host, path)
11
+ # Injects some content somewhere inside cms admin area
12
+ def cms_hook(name, options = {})
13
+ ComfortableMexicanSofa::ViewHooks.render(name, self, options)
24
14
  end
25
- return '' unless cms_site
26
15
 
27
- snippet = cms_site.snippets.find_by_identifier(identifier)
16
+ # Content of a snippet. Examples:
17
+ # cms_snippet_content(:my_snippet)
18
+ # <%= cms_snippet_content(:my_snippet) do %>
19
+ # Default content can go here.
20
+ # <% end %>
21
+ def cms_snippet_content(identifier, cms_site = @cms_site, &block)
22
+ unless cms_site
23
+ host, path = request.host_with_port.downcase, request.fullpath if respond_to?(:request) && request
24
+ cms_site = Comfy::Cms::Site.find_site(host, path)
25
+ end
26
+ return '' unless cms_site
28
27
 
29
- if !snippet && block_given?
30
- snippet = cms_site.snippets.create(
31
- :identifier => identifier,
32
- :label => identifier.to_s.titleize,
33
- :content => capture(&block)
34
- )
35
- end
28
+ snippet = cms_site.snippets.find_by_identifier(identifier)
36
29
 
37
- snippet ? snippet.content : ''
38
- end
30
+ if !snippet && block_given?
31
+ snippet = cms_site.snippets.create(
32
+ :identifier => identifier,
33
+ :label => identifier.to_s.titleize,
34
+ :content => capture(&block)
35
+ )
36
+ end
39
37
 
40
- # Same as cms_snippet_content but cms tags will be expanded
41
- def cms_snippet_render(identifier, cms_site = @cms_site, &block)
42
- return '' unless cms_site
43
- content = cms_snippet_content(identifier, cms_site, &block)
44
- render :inline => ComfortableMexicanSofa::Tag.process_content(
45
- cms_site.pages.build, ComfortableMexicanSofa::Tag.sanitize_irb(content)
46
- )
47
- end
38
+ snippet ? snippet.content : ''
39
+ end
48
40
 
49
- # Content of a page block. This is how you get content from page:field
50
- # Example:
51
- # cms_block_content(:left_column, CmsPage.first)
52
- # cms_block_content(:left_column) # if @cms_page is present
53
- def cms_block_content(identifier, blockable = @cms_page)
54
- tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
55
- return '' unless tag
56
- tag.content
57
- end
41
+ # Same as cms_snippet_content but cms tags will be expanded
42
+ def cms_snippet_render(identifier, cms_site = @cms_site, &block)
43
+ return '' unless cms_site
44
+ content = cms_snippet_content(identifier, cms_site, &block)
45
+ render :inline => ComfortableMexicanSofa::Tag.process_content(
46
+ cms_site.pages.build, ComfortableMexicanSofa::Tag.sanitize_irb(content)
47
+ )
48
+ end
58
49
 
59
- # For those times when we need to render content that shouldn't be renderable
60
- # Example: {{cms:field}} tags
61
- def cms_block_content_render(identifier, blockable = @cms_page)
62
- tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
63
- return '' unless tag
64
- render :inline => ComfortableMexicanSofa::Tag.process_content(blockable, tag.content)
65
- end
50
+ # Content of a page block. This is how you get content from page:field
51
+ # Example:
52
+ # cms_block_content(:left_column, CmsPage.first)
53
+ # cms_block_content(:left_column) # if @cms_page is present
54
+ def cms_block_content(identifier, blockable = @cms_page)
55
+ tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
56
+ return '' unless tag
57
+ tag.content
58
+ end
66
59
 
67
- # Same as cms_block_content but with cms tags expanded
68
- def cms_block_render(identifier, blockable = @cms_page)
69
- tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
70
- return '' unless tag
71
- render :inline => ComfortableMexicanSofa::Tag.process_content(blockable, tag.render)
72
- end
60
+ # For those times when we need to render content that shouldn't be renderable
61
+ # Example: {{cms:field}} tags
62
+ def cms_block_content_render(identifier, blockable = @cms_page)
63
+ tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
64
+ return '' unless tag
65
+ render :inline => ComfortableMexicanSofa::Tag.process_content(blockable, tag.content)
66
+ end
67
+
68
+ # Same as cms_block_content but with cms tags expanded
69
+ def cms_block_render(identifier, blockable = @cms_page)
70
+ tag = blockable && (block = blockable.blocks.find_by_identifier(identifier)) && block.tag
71
+ return '' unless tag
72
+ render :inline => ComfortableMexicanSofa::Tag.process_content(blockable, tag.render)
73
+ end
73
74
 
74
- # Wrapper to deal with Kaminari vs WillPaginate
75
- def comfy_paginate(collection)
76
- return unless collection
77
- if defined?(WillPaginate)
78
- will_paginate collection
79
- elsif defined?(Kaminari)
80
- paginate collection, :theme => 'comfy'
75
+ # Wrapper to deal with Kaminari vs WillPaginate
76
+ def comfy_paginate(collection)
77
+ return unless collection
78
+ if defined?(WillPaginate)
79
+ will_paginate collection
80
+ elsif defined?(Kaminari)
81
+ paginate collection, :theme => 'comfy'
82
+ end
81
83
  end
82
84
  end
83
- end
85
+ end