imagine_cms 4.1.4 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +2 -1
  3. data/app/assets/images/interface/form_loading.gif +0 -0
  4. data/app/assets/images/management/btn-top-delete.png +0 -0
  5. data/app/assets/images/management/btn-top-edit.png +0 -0
  6. data/app/assets/images/management/btn-top-exterminate.png +0 -0
  7. data/app/assets/images/management/btn-top-new.png +0 -0
  8. data/app/assets/images/management/btn-top-preview.png +0 -0
  9. data/app/assets/images/management/btn-top-properties.png +0 -0
  10. data/app/assets/javascripts/codemirror/modes-custom/imagine_cms.js +87 -0
  11. data/app/assets/javascripts/imagine_cms/core.js +510 -0
  12. data/app/assets/javascripts/imagine_cms/legacy/misc.js +537 -0
  13. data/app/assets/javascripts/imagine_cms/legacy/rollovers.js +193 -0
  14. data/app/assets/javascripts/imagine_cms/legacy/slideshow.js +116 -0
  15. data/app/assets/javascripts/imagine_cms/legacy/textfieldhints.js +55 -0
  16. data/app/assets/javascripts/imagine_cms.js +14 -1
  17. data/app/assets/javascripts/imagine_cms_compat.js +26 -0
  18. data/app/assets/javascripts/jquery-ui.js +16608 -0
  19. data/app/assets/javascripts/tag-it.js +591 -0
  20. data/app/assets/stylesheets/imagine_cms.css.scss +26 -10
  21. data/app/assets/stylesheets/imagine_controls.css.scss +8 -0
  22. data/app/assets/stylesheets/jquery-ui.css +1225 -0
  23. data/app/assets/stylesheets/jquery-ui.structure.css +833 -0
  24. data/app/assets/stylesheets/jquery-ui.theme.css +410 -0
  25. data/app/assets/stylesheets/jquery.tagit.css +69 -0
  26. data/app/assets/stylesheets/management.css.scss +7 -0
  27. data/app/assets/stylesheets/tagit.ui-imagine.css +100 -0
  28. data/app/controllers/cms/content_controller.rb +28 -45
  29. data/app/controllers/management/cms_controller.rb +116 -94
  30. data/app/helpers/cms_application_helper.rb +76 -39
  31. data/app/models/cms_page.rb +32 -14
  32. data/app/models/cms_page_object.rb +1 -1
  33. data/app/models/cms_page_tag.rb +2 -2
  34. data/app/models/cms_template.rb +1 -1
  35. data/app/models/user.rb +6 -6
  36. data/app/models/user_group.rb +1 -1
  37. data/app/views/cms/content/_photo_gallery.html.erb +12 -12
  38. data/app/views/cms/content/_search.html.erb +2 -2
  39. data/app/views/cms/content/_search_result.html.erb +16 -10
  40. data/app/views/layouts/management.html.erb +18 -17
  41. data/app/views/management/cms/_edit_page.html.erb +47 -33
  42. data/app/views/management/cms/_gallery_index.html.erb +4 -4
  43. data/app/views/management/cms/_image.html.erb +3 -3
  44. data/app/views/management/cms/_image_details.html.erb +9 -8
  45. data/app/views/management/cms/_list_page.html.erb +2 -2
  46. data/app/views/management/cms/_list_page_select.html.erb +1 -1
  47. data/app/views/management/cms/_page_list.html.erb +69 -48
  48. data/app/views/management/cms/_page_list_source_folder.html.erb +2 -2
  49. data/app/views/management/cms/_template_options.html.erb +4 -4
  50. data/app/views/management/cms/_template_reference.html.erb +13 -15
  51. data/app/views/management/cms/edit_page_content.html.erb +3 -3
  52. data/app/views/management/cms/edit_snippet.html.erb +19 -41
  53. data/app/views/management/cms/edit_template.html.erb +15 -38
  54. data/app/views/management/cms/pages.html.erb +17 -29
  55. data/app/views/management/cms/snippets.html.erb +2 -2
  56. data/app/views/management/cms/templates.html.erb +2 -2
  57. data/app/views/management/cms/toolbar_edit.html.erb +2 -0
  58. data/app/views/management/cms/toolbar_preview.html.erb +2 -2
  59. data/config/initializers/config_file.rb +1 -1
  60. data/imagine_cms.gemspec +7 -4
  61. data/lib/extensions/action_controller_extensions.rb +50 -19
  62. data/lib/imagine_cms/engine.rb +12 -8
  63. data/lib/imagine_cms/version.rb +1 -1
  64. data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +2 -2
  65. data/lib/tasks/imagine_cms_tasks.rake +8 -0
  66. metadata +69 -91
  67. data/app/assets/images/management/btn_archive.gif +0 -0
  68. data/app/assets/images/management/btn_delete.gif +0 -0
  69. data/app/assets/images/management/btn_duplicate.gif +0 -0
  70. data/app/assets/images/management/btn_edit.gif +0 -0
  71. data/app/assets/images/management/btn_new_page.gif +0 -0
  72. data/app/assets/images/management/btn_preview.gif +0 -0
  73. data/app/assets/images/management/btn_properties.gif +0 -0
  74. data/app/assets/images/management/btn_restore.gif +0 -0
  75. data/app/assets/images/management/btn_top_delete.gif +0 -0
  76. data/app/assets/images/management/btn_top_duplicate.gif +0 -0
  77. data/app/assets/images/management/btn_top_edit.gif +0 -0
  78. data/app/assets/images/management/btn_top_new.gif +0 -0
  79. data/app/assets/images/management/btn_top_preview.gif +0 -0
  80. data/app/assets/images/management/btn_top_properties.gif +0 -0
  81. data/app/assets/javascripts/codepress/codepress.html +0 -36
  82. data/app/assets/javascripts/codepress/codepress.js +0 -130
  83. data/app/assets/javascripts/codepress/engines/gecko.js +0 -240
  84. data/app/assets/javascripts/codepress/engines/khtml.js +0 -0
  85. data/app/assets/javascripts/codepress/engines/msie.js +0 -263
  86. data/app/assets/javascripts/codepress/engines/older.js +0 -0
  87. data/app/assets/javascripts/codepress/engines/opera.js +0 -259
  88. data/app/assets/javascripts/codepress/languages/css.js +0 -23
  89. data/app/assets/javascripts/codepress/languages/generic.js +0 -25
  90. data/app/assets/javascripts/codepress/languages/html.js +0 -63
  91. data/app/assets/javascripts/codepress/languages/java.js +0 -24
  92. data/app/assets/javascripts/codepress/languages/javascript.js +0 -30
  93. data/app/assets/javascripts/codepress/languages/perl.js +0 -27
  94. data/app/assets/javascripts/codepress/languages/php.js +0 -60
  95. data/app/assets/javascripts/codepress/languages/ruby.js +0 -26
  96. data/app/assets/javascripts/codepress/languages/sql.js +0 -30
  97. data/app/assets/javascripts/codepress/languages/text.js +0 -9
  98. data/app/assets/javascripts/imagine.js +0 -1393
  99. data/app/assets/stylesheets/codepress/codepress.css +0 -7
  100. data/app/assets/stylesheets/codepress/languages/css.css +0 -10
  101. data/app/assets/stylesheets/codepress/languages/generic.css +0 -9
  102. data/app/assets/stylesheets/codepress/languages/html.css +0 -18
  103. data/app/assets/stylesheets/codepress/languages/java.css +0 -7
  104. data/app/assets/stylesheets/codepress/languages/javascript.css +0 -8
  105. data/app/assets/stylesheets/codepress/languages/perl.css +0 -11
  106. data/app/assets/stylesheets/codepress/languages/php.css +0 -12
  107. data/app/assets/stylesheets/codepress/languages/ruby.css +0 -10
  108. data/app/assets/stylesheets/codepress/languages/sql.css +0 -10
  109. data/app/assets/stylesheets/codepress/languages/text.css +0 -5
@@ -2,46 +2,23 @@
2
2
 
3
3
  <h2>Edit Template</h2>
4
4
 
5
- <%= form_tag({}, { :onsubmit => "temp_content.toggleEditor();" }) do %>
6
- <table width="100%" height="100%">
7
- <col width="100" />
8
- <tr>
9
- <td>Name:</td>
10
- <td><%= text_field :temp, :name %></td>
11
- </tr>
12
- <tr>
13
- <td valign="top"><div style="margin-top: 2px">Content:</div></td>
14
- <td>
15
- <%= text_area :temp, :content, :class => 'codepress html autocomplete-off', :style => 'width: 100%; height: 600px;' %>
16
- </td>
17
- </tr>
18
- <tr>
19
- <td></td>
20
- <td>
21
- <%= submit_tag 'Save Template', :class => 'form_button' %>
22
- <button onclick="$('preview_frame').scrollIntoView(); temp_content.toggleEditor(); $('preview_content').value = $('temp_content_cp').value; $('preview_form').submit(); temp_content.toggleEditor(); return false;" class="form_button">Preview</button>
23
- <%= link_to 'Cancel', :action => 'templates' %>
24
- </td>
25
- </tr>
26
- </table>
27
- <br/>
28
-
29
- <%= render :partial => 'template_reference' %>
30
- <br/>
31
-
32
- <table width="100%">
33
- <col width="100" />
34
- <tr>
35
- <td valign="top"><div style="margin-top: 2px">Preview:</div></td>
36
- <td>
37
- <iframe id="preview_frame" name="preview_frame" style="width: 100%; height: 600px; border: 1px solid gray;"></iframe>
38
- <%= submit_tag 'Save Template', :class => 'form_button' %>
39
- </td>
40
- </tr>
41
- </table>
5
+ <%= form_tag do %>
6
+ <%= text_field :temp, :name, :placeholder => 'Template Name', :size => '50' %>
7
+ <div class="codemirror-html-container">
8
+ <%= text_area :temp, :content, :class => 'codemirror-html autocomplete-off' %>
9
+ </div>
10
+ <%= submit_tag 'Save Template', :class => 'form_button' %>
11
+ <button onclick="jQuery('#preview_frame').show(); jQuery('#preview_frame')[0].scrollIntoView(); jQuery('#preview_content').val(jQuery('#temp_content').val()); jQuery('#preview_form').submit(); return false;" class="form_button">Preview</button>
12
+ <%= link_to 'Cancel', :action => 'templates' %>
13
+ <br/>
14
+
15
+ <br/>
16
+ <%= render :partial => 'template_reference' %>
17
+ <br/>
18
+
19
+ <iframe id="preview_frame" name="preview_frame"></iframe>
42
20
  <% end %>
43
21
 
44
-
45
22
  <%= form_tag({ :controller => '/cms/content', :action => 'preview_template' }, :id => 'preview_form', :target => 'preview_frame') do %>
46
23
  <%= text_area_tag 'temp[content]', '', :id => 'preview_content', :style => 'display: none;' %>
47
24
  <%= hidden_field_tag 'mode', 'preview' %>
@@ -20,18 +20,12 @@ EOF
20
20
 
21
21
  <%= flash_message %>
22
22
 
23
- <div id="columnBrowserToolbar" style="background-color: #d0d0d0; padding: 4px; margin-bottom: 5px; ">
24
- <a id="new_link" href="#"><img src="/assets/management/btn_top_new.gif" style="margin-right: 2px;" /></a>
25
- <a id="edit_content_link" href="#" target="_blank"><img src="/assets/management/btn_top_edit.gif" style="margin-right: 2px;" /></a>
26
- <form id="edit_content_form" action="#" onsubmit="this.action = $('edit_content_link').href;" target="_blank" style="display: none">
27
- <button>dummy</button>
28
- </form>
29
- <a id="edit_link" href="#"><img src="/assets/management/btn_top_properties.gif" style="margin-right: 2px;" /></a>
30
- <a id="view_link" href="#" target="_blank"><img src="/assets/management/btn_top_preview.gif" style="margin-right: 2px;" /></a>
31
- <a id="delete_link" href="#" onclick="if (confirm('Are you sure you want to delete the selected page?')) { $('delete_form').submit(); } return false;"><img src="/assets/management/btn_top_delete.gif" style="margin: 0" /></a>
32
- <%= form_tag('', :id => "delete_form", :style => "display: none") do %>
33
- <button>dummy</button>
34
- <% end %>
23
+ <div id="columnBrowserToolbar" style="background-color: #ddd; padding: 5px 4px 0; margin: 0 0 5px;">
24
+ <%= link_to image_tag('management/btn-top-new.png', style: 'margin-right: 2px;'), '#', id: 'new_link' %>
25
+ <%= link_to image_tag('management/btn-top-edit.png', style: 'margin-right: 2px;'), '#', id: 'edit_content_link', target: '_blank' %>
26
+ <%= link_to image_tag('management/btn-top-properties.png', style: 'margin-right: 2px;'), '#', id: 'edit_link' %>
27
+ <%= link_to image_tag('management/btn-top-preview.png', style: 'margin-right: 2px;'), '#', id: 'view_link', target: '_blank' %>
28
+ <%= link_to image_tag('management/btn-top-delete.png', style: 'margin: 0;'), '#', id: 'delete_link', target: '_blank', method: :post, data: { confirm: 'Are you sure you want to delete the selected page?' } %>
35
29
  <div class="clearer"></div>
36
30
  </div>
37
31
 
@@ -39,8 +33,8 @@ EOF
39
33
  <div id="columnBrowser" style="width: <%= cbColWidthFull * (@page_levels.size) %>px;">
40
34
  <%- @page_levels.each_with_index do |name, i| -%>
41
35
  <%-
42
- if !name.blank?
43
- @path << '/' if !@path.blank?
36
+ if name.present?
37
+ @path << '/' if @path.present?
44
38
  @path << name
45
39
  end
46
40
  @parent = @page
@@ -51,23 +45,17 @@ EOF
51
45
  break_flag = false
52
46
 
53
47
  if !@page
54
- if @parent && @parent.children.first
55
- @page = @parent.children.first
56
- elsif @parent
57
- @page = @parent
58
- else
59
- @page = CmsPage.find(:first)
60
- end
48
+ @page = @parent.children.first || @parent || CmsPage.first
61
49
  break_flag = true
62
50
  end
63
51
  -%>
64
52
  <div id="columnBrowserLevel<%= i %>" style="width: <%= cbColWidth %>px; height: <%= cbColHeight %>px; overflow: auto; float: left; border-width: <%= cbBorderWidth %>px <%= cbBorderWidth %>px <%= cbBorderWidth %>px <%= i == 0 ? "#{cbBorderWidth}px" : '0' %>; border-style: solid; border-color: gray;">
65
53
  <%- if i == 0 -%>
66
- <%= render :partial => 'list_page', :locals => { :list_page => CmsPage.find(1) } %>
54
+ <%= render partial: 'list_page', locals: { list_page: CmsPage.first } %>
67
55
  <%- else -%>
68
- <%= render :partial => 'list_pages' %>
56
+ <%= render partial: 'list_pages' %>
69
57
  <%- end -%>
70
- <%= javascript_tag "$('cb_item_#{@parent.id}').className = 'cb_item cb_item_selected';" if @parent %>
58
+ <%= javascript_tag "jQuery('#cb_item_#{@parent.id}').addClass('cb_item_selected');" if @parent %>
71
59
  </div>
72
60
  <%- break if break_flag -%>
73
61
  <%- end -%>
@@ -80,10 +68,10 @@ EOF
80
68
  cbNumColumns = <%= @page_levels.size - 1 %>;
81
69
  $('columnBrowserLevel' + cbNumColumns).scrollIntoView();
82
70
  $('view_link').href = '<%= list_page.path.blank? ? '' : '/' + list_page.path %>/version/<%= list_page.published_version > 0 ? list_page.published_version : list_page.version %>';
83
- $('new_link').onclick = function () { editProperties('<%=raw url_for(:action => 'edit_page', :mode => 'ajax_new', :parent_id => list_page, :authenticity_token => form_authenticity_token.to_s) %>', 'Create New Page under /<%= list_page.path %>'); return false; };
84
- $('edit_link').onclick = function () { editProperties('<%=raw url_for :action => 'edit_page', :id => list_page, :mode => 'ajax_edit', :authenticity_token => form_authenticity_token.to_s %>', 'Page Properties: <%= list_page.name %>'); return false; };
85
- $('edit_content_link').href = '<%=raw url_for :action => 'edit_page_content', :id => list_page, :authenticity_token => form_authenticity_token.to_s %>';
86
- $('delete_form').action = '<%=raw url_for :action => 'delete_page', :id => list_page.id %>';
71
+ $('new_link').onclick = function () { editProperties('<%=raw url_for(action: 'edit_page', mode: 'ajax_new', parent_id: list_page, authenticity_token: form_authenticity_token.to_s) %>', 'Create New Page under /<%= list_page.path %>'); return false; };
72
+ $('edit_link').onclick = function () { editProperties('<%=raw url_for action: 'edit_page', id: list_page, mode: 'ajax_edit', authenticity_token: form_authenticity_token.to_s %>', 'Page Properties: <%= list_page.name %>'); return false; };
73
+ $('edit_content_link').href = '<%=raw url_for action: 'edit_page_content', id: list_page, authenticity_token: form_authenticity_token.to_s %>';
74
+ $('delete_link').href = '<%=raw url_for action: 'delete_page', id: list_page.id %>';
87
75
  </script>
88
76
 
89
- <%= render :partial => '/imagine_cms/dialogs' %>
77
+ <%= render '/imagine_cms/dialogs' %>
@@ -1,6 +1,6 @@
1
1
  <h2>CMS &raquo; Snippets</h2>
2
2
 
3
- <p><%= button_to 'Create New Snippet', { :action => 'edit_snippet' }, :method => :get %></p>
3
+ <p><%= button_to 'Create New Snippet', { action: 'edit_snippet' }, method: :get %></p>
4
4
 
5
5
  <%= flash_message %>
6
6
 
@@ -8,5 +8,5 @@
8
8
  <tr>
9
9
  <th>Name</th>
10
10
  </tr>
11
- <%= render :partial => 'snippet', :collection => @snippets %>
11
+ <%= render partial: 'snippet', collection: @snippets %>
12
12
  </table>
@@ -1,6 +1,6 @@
1
1
  <h2>CMS &raquo; Templates</h2>
2
2
 
3
- <p><%= button_to 'Create New Template', { :action => 'edit_template' }, :method => :get %></p>
3
+ <p><%= button_to 'Create New Template', { action: 'edit_template' }, method: :get %></p>
4
4
 
5
5
  <%= flash_message %>
6
6
 
@@ -8,5 +8,5 @@
8
8
  <tr>
9
9
  <th>Name</th>
10
10
  </tr>
11
- <%= render :partial => 'temp', :collection => @temps %>
11
+ <%= render partial: 'temp', collection: @temps %>
12
12
  </table>
@@ -56,6 +56,8 @@
56
56
  <option value="h2">Section Heading (H2)</option>
57
57
  <option value="h3">Sub-Heading (H3)</option>
58
58
  <option value="h4">Sub-Heading (H4)</option>
59
+ <option value="h5">Sub-Heading (H5)</option>
60
+ <option value="h6">Sub-Heading (H6)</option>
59
61
  <option value="blockquote">Block Quote</option>
60
62
  </select>
61
63
  </td>
@@ -70,7 +70,7 @@
70
70
  :complete => "$('set_page_version_loading').hide();" + (@pg ? "$('pg_published_version_container').style.borderColor = ($('pg_published_version').value == '0' || $('pg_published_version').value == '#{@pg.versions.last.version}') ? '#EBEBEB' : 'red';" : '')) do -%>
71
71
  <div id="pg_published_version_container" style="border-color: <%= @pg && (@pg.published_version == 0 || @pg.published_version == @pg.versions.last.version) ? '#EBEBEB' : 'red' %>; border-style: solid; border-width: 2px;">
72
72
  <select name="pg[published_version]" id="pg_published_version" style="font-size: 8pt; width: 210px;" onchange="this.form.onsubmit();">
73
- <%- [ [ '[ None (offline) ]', -1 ], [ '[ Latest ]', 0 ] ].concat(@pg.versions.reverse.map { |pg| [ "#{pg.version} - #{date_to_str(pg.updated_on)} #{time_to_str(pg.updated_on)}#{" by #{pg.updated_by_username}" unless pg.updated_by_username.blank? }", pg.version ] }).each do |label, version| %>
73
+ <%- [ @pg.path == '' ? nil : [ '[ None (offline) ]', -1 ], [ '[ Latest ]', 0 ] ].compact.concat(@pg.versions.reverse.map { |pg| [ "#{pg.version} - #{date_to_str(pg.updated_on)} #{time_to_str(pg.updated_on)}#{" by #{pg.updated_by_username}" unless pg.updated_by_username.blank? }", pg.version ] }).each do |label, version| %>
74
74
  <option value="<%= version %>"<%= (@pg && @pg.published_version == version.to_i) ? ' selected="selected"' : '' %>><%= label %></option>
75
75
  <%- end -%>
76
76
  </select>
@@ -89,7 +89,7 @@
89
89
  <%- end -%>
90
90
  </td>
91
91
  <td width="20">
92
- <div id="set_page_version_loading" style="display: none"><img src="/assets/interface/form_loading.gif" /></div>
92
+ <div id="set_page_version_loading" style="display: none"><%= image_tag "interface/form_loading.gif" %></div>
93
93
  </td>
94
94
  <% end -%>
95
95
 
@@ -1,6 +1,6 @@
1
1
  config_file = File.join(Rails.root, 'config', 'imagine_cms.yml')
2
2
 
3
- if File.exists?(config_file)
3
+ if File.exist?(config_file)
4
4
  ImagineCmsConfig = YAML.load(File.read(config_file))
5
5
 
6
6
  if ImagineCmsConfig['amazon_s3'] && ImagineCmsConfig['amazon_s3']['enabled']
data/imagine_cms.gemspec CHANGED
@@ -31,16 +31,19 @@ Gem::Specification.new do |s|
31
31
  s.add_dependency "rails-observers", "~> 0.1"
32
32
  s.add_dependency "actionpack-action_caching", "~> 1.0"
33
33
  s.add_dependency "actionpack-page_caching", "~> 1.0"
34
- s.add_dependency "non-stupid-digest-assets", "~> 1.0"
35
- s.add_dependency "prototype-rails", "~> 4.0.0"
36
34
  s.add_dependency "aws-sdk", "~> 2.0.0"
37
- s.add_dependency "rmagick", [ ">= 1.15.0", "< 3.0" ]
38
- s.add_dependency "mini_magick", "~> 3.3"
39
35
  s.add_dependency "rubyzip", "~> 1.0"
40
36
  s.add_dependency "rinku", "~> 1.7"
41
37
  s.add_dependency "net-dns", "~> 0.7"
42
38
  s.add_dependency "acts_as_tree", "~> 1.1"
43
39
  s.add_dependency "safe_yaml"
40
+ s.add_dependency "codemirror-rails"
41
+
42
+ # on the way out, but still needed for now
43
+ # s.add_dependency "prototype-rails", "~> 4.2.0"
44
+ s.add_dependency "rmagick", [ ">= 1.15.0", "< 3.0" ]
45
+ s.add_dependency "mini_magick", "~> 3.3"
46
+ s.add_dependency "non-stupid-digest-assets", "~> 1.0"
44
47
 
45
48
  s.add_development_dependency "sqlite3"
46
49
  end
@@ -144,10 +144,6 @@ module ActionControllerExtensions
144
144
 
145
145
  options[:wrapper_div] = true
146
146
 
147
- # make options specified in snippets and templates accessible to
148
- # page list segments and rss feeds
149
- @page_objects["#{key}-template"] = options[:template] if @page_objects["#{key}-template"].blank?
150
-
151
147
  render_page_list_segment(name, pages, options, html_options)
152
148
  end
153
149
  when :snippet
@@ -169,6 +165,20 @@ module ActionControllerExtensions
169
165
  end
170
166
  end
171
167
 
168
+ # shortcuts
169
+ def text_editor(name, options = {}, html_options = {})
170
+ insert_object(name, :text, options, html_options)
171
+ end
172
+ alias :texteditor :text_editor
173
+ def page_list(name, options = {}, html_options = {})
174
+ insert_object(name, :page_list, options, html_options)
175
+ end
176
+ alias :pagelist :page_list
177
+ def snippet(name, options = {}, html_options = {})
178
+ insert_object(name, :snippet, options, html_options)
179
+ end
180
+
181
+
172
182
  def render_page_list_segment(name, pages, options = {}, html_options = {})
173
183
  extend ActionView::Helpers::TagHelper
174
184
  extend ActionView::Helpers::TextHelper
@@ -204,27 +214,48 @@ module ActionControllerExtensions
204
214
  :page_list_name => name) : nil))
205
215
 
206
216
  num_segments = (pages.size.to_f / limit).ceil
207
- if @page_objects["#{key}-use-pagination"].to_i == 1 && num_segments > 1
208
- content << '<table style="margin-top: 4px;" align="right" cellpadding="0" cellspacing="0" border="0"><tr valign="bottom">'
209
- content << '<td>Page:&nbsp;</td>'
217
+ Rails.logger.info "Number of page list segments: #{num_segments}"
218
+ if first_non_empty(options[:use_pagination], @page_objects["#{key}-use-pagination"], 0).to_i == 1 && num_segments > 1
219
+ content << '<div class="imagine_cms-paginator">'
220
+ content << 'Page:&nbsp;'
210
221
  num_segments.times do |seg|
211
222
  start = seg * limit
212
- content << "<td><a href=\"#\""
223
+ content << "<a id=\"#{key}-segment-#{seg}\" href=\"#\""
213
224
  if offset >= start && offset < (start + limit)
214
- content << " class=\"page_list_segment page_list_segment_selected\""
225
+ content << " class=\"imagine_cms-paginator-link imagine_cms-paginator-link-selected\""
215
226
  else
216
- content << " class=\"page_list_segment\""
217
- content << " onmouseover=\"this.className = 'page_list_segment page_list_segment_selected'\""
218
- content << " onmouseout=\"this.className = 'page_list_segment'\""
219
- content << " onclick=\"$('#{key}').style.cursor = 'wait'; $('#{key}').style.opacity = 0.5; "
220
- # FIXME: Prototype
221
- content << " new Ajax.Updater('#{key}', '#{url_for(:content_path => @pg.path.split('/').concat([ 'segment', start.to_s, name ]), :only_path => true)}', {asynchronous:true, evalScripts:true, method:'get'});"
222
- content << "; window.scrollBy(0, - 20 + document.getElementById('#{key}').getBoundingClientRect().top); return false;\""
227
+ content << " class=\"imagine_cms-paginator-link\""
223
228
  end
224
- content << ">#{seg+1}</a></td>"
229
+ content << ">#{seg+1}</a>"
230
+ end
231
+ content << '</div>'
232
+ content << <<-EOT
233
+ <script type="text/javascript">
234
+ jQuery('##{key}').css({ opacity: '1', cursor: 'default' });
235
+ jQuery('.imagine_cms-paginator-link').not('.imagine_cms-paginator-link-selected').mouseover(function () {
236
+ jQuery(this).addClass('imagine_cms-paginator-link-selected');
237
+ }).mouseout(function () {
238
+ jQuery(this).removeClass('imagine_cms-paginator-link-selected');
239
+ });
240
+
241
+ EOT
242
+ num_segments.times do |seg|
243
+ start = seg * limit
244
+ content << <<-EOT
245
+ jQuery('##{key}-segment-#{seg}').click(function () {
246
+ jQuery('##{key}').css({ cursor: 'wait', opacity: '0.5' });
247
+ jQuery('html,body').animate({ scrollTop: jQuery('##{key}').position().top }, 200);
248
+ jQuery.get('#{url_for(:content_path => @pg.path.split('/').concat([ 'segment', start.to_s, name ]), :only_path => true)}', function (data) {
249
+ jQuery('##{key}').html(data);
250
+ jQuery('##{key}').css({ cursor: 'default', opacity: '1' });
251
+ });
252
+ return false;
253
+ })
254
+ EOT
225
255
  end
226
- content << '</tr></table>'
227
- content << "<script type=\"text/javascript\">$('#{key}').style.opacity = 1; $('#{key}').style.cursor = 'default';</script>"
256
+ content << <<-EOT
257
+ </script>
258
+ EOT
228
259
  end
229
260
 
230
261
  if options[:wrapper_div]
@@ -7,7 +7,8 @@ module ImagineCms
7
7
  middleware.use ::ActionDispatch::Static, "#{root}/public"
8
8
 
9
9
  initializer "imagine_cms.assets.precompile" do |config|
10
- Rails.application.config.assets.precompile += %w( codepress/** dojo/** management.css imagine_controls.css reset.css )
10
+ Rails.application.config.assets.precompile += %w( dojo/** management.css imagine_controls.css reset.css )
11
+ Rails.application.config.assets.precompile += ["codemirror*", "codemirror/**/*"]
11
12
  # Rails.application.config.load_paths << File.dirname(__FILE__) + "/../app/helpers"
12
13
  end
13
14
 
@@ -36,16 +37,19 @@ module ImagineCms
36
37
  require 'rails-observers'
37
38
  require 'actionpack/action_caching'
38
39
  require 'actionpack/page_caching'
39
- require 'non-stupid-digest-assets'
40
- require 'prototype-rails'
41
40
  require 'aws-sdk'
42
- require 'RMagick'
43
- require 'mini_magick'
44
41
  require 'zip'
45
42
  require 'rails_rinku'
46
- require 'net/dns'
47
- require 'acts_as_tree'
48
43
  require 'safe_yaml'
44
+ require 'acts_as_tree'
45
+ require 'net/dns'
46
+ require 'codemirror-rails'
47
+
48
+ # on the way out, but still needed for now
49
+ require 'prototype-rails'
50
+ require 'RMagick'
51
+ require 'mini_magick'
52
+ require 'non-stupid-digest-assets'
49
53
 
50
54
  #
51
55
  # rails plugins
@@ -86,7 +90,7 @@ module ImagineCms
86
90
 
87
91
  helper_method :user_has_permission?
88
92
  helper_method :user_has_permissions?
89
- helper_method :insert_object
93
+ helper_method :insert_object, :text_editor, :texteditor, :page_list, :pagelist, :snippet
90
94
 
91
95
  # before_filter :create_settings_object, :set_default_session_values, :check_ssl_requirement, :expire_session_data
92
96
  before_filter :expire_session_data
@@ -1,3 +1,3 @@
1
1
  module ImagineCms
2
- VERSION = "4.1.4"
2
+ VERSION = "4.2.0"
3
3
  end
@@ -175,7 +175,7 @@ module PrototypeHelper
175
175
  # { :update => "posts", :url => { :action => "destroy", :id => post.id } },
176
176
  # :href => url_for(:action => "destroy", :id => post.id)
177
177
  def link_to_remote(name, options = {}, html_options = nil)
178
- link_to_function(name, remote_function(options), html_options || options.delete(:html))
178
+ link_to_function(name, remote_function(options), html_options || options.delete(:html)).gsub('&amp;amp;', '&amp;').html_safe
179
179
  end
180
180
 
181
181
  # Returns a form tag that will submit using XMLHttpRequest in the
@@ -219,7 +219,7 @@ module PrototypeHelper
219
219
  (options[:html][:onsubmit] ? options[:html][:onsubmit] + "; " : "") +
220
220
  "#{remote_function(options)}; return false;"
221
221
 
222
- form_tag(options[:html].delete(:action) || url_for(options[:url]), options[:html], &block)
222
+ form_tag(options[:html].delete(:action) || url_for(options[:url]), options[:html], &block).gsub('&amp;amp;', '&amp;').html_safe
223
223
  end
224
224
 
225
225
  # Creates a form that will submit using XMLHttpRequest in the background
@@ -20,4 +20,12 @@ namespace :imagine_cms do
20
20
 
21
21
  end
22
22
 
23
+ desc "Copy dojo editor files to public"
24
+ task :install_dojo => :environment do
25
+ sourcedir = File.expand_path('../../../app/assets/javascripts/dojo', __FILE__)
26
+ targetdir = File.expand_path(File.join(Rails.root, 'public', 'assets'))
27
+ FileUtils.mkdir_p targetdir
28
+ FileUtils.cp_r sourcedir, targetdir
29
+ end
30
+
23
31
  end