th_simple_content_management 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +15 -0
  2. data/app/assets/javascripts/simple_content_management/simple_pages/form.js +4 -0
  3. data/app/assets/javascripts/th-page-editor/column.js +65 -6
  4. data/app/assets/javascripts/th-page-editor/index.js +244 -12
  5. data/app/assets/javascripts/th-page-editor/row.js +71 -1
  6. data/app/assets/stylesheets/simple_content_management/simple_menus.css.scss +1 -1
  7. data/app/assets/stylesheets/simple_content_management/simple_pages.css.scss +52 -20
  8. data/app/controllers/redactor_rails/documents_controller.rb +1 -2
  9. data/app/controllers/redactor_rails/pictures_controller.rb +1 -2
  10. data/app/controllers/simple_content_management/link_banners_controller.rb +14 -0
  11. data/app/controllers/simple_content_management/simple_menus_controller.rb +2 -0
  12. data/app/controllers/simple_content_management/simple_pages_controller.rb +7 -0
  13. data/app/controllers/simple_content_management/simple_posts_controller.rb +8 -0
  14. data/app/helpers/simple_content_management/simple_menus_helper.rb +1 -5
  15. data/app/helpers/simple_content_management/simple_pages_helper.rb +2 -2
  16. data/app/models/simple_content_management/image_uploader.rb +13 -0
  17. data/app/models/simple_content_management/link_banner.rb +13 -0
  18. data/app/models/simple_content_management/simple_menu_item.rb +14 -0
  19. data/app/models/simple_content_management/simple_page.rb +23 -9
  20. data/app/models/simple_content_management/simple_route.rb +1 -2
  21. data/app/views/simple_content_management/link_banners/_form.html.erb +26 -0
  22. data/app/views/simple_content_management/link_banners/edit.html.erb +2 -0
  23. data/app/views/simple_content_management/link_banners/new.html.erb +2 -0
  24. data/app/views/simple_content_management/link_banners/show.html.erb +3 -0
  25. data/app/views/simple_content_management/simple_menus/show.html.erb +1 -1
  26. data/app/views/simple_content_management/simple_pages/_form.html.erb +167 -10
  27. data/app/views/simple_content_management/simple_pages/index.html.erb +4 -2
  28. data/app/views/simple_content_management/simple_pages/show.html.erb +9 -1
  29. data/app/views/simple_content_management/simple_posts/preview.html.erb +13 -0
  30. data/config/locales/simple_content_management/nl/layouts.yml +6 -0
  31. data/config/locales/simple_content_management/nl/models/link_banner.yml +13 -0
  32. data/config/locales/simple_content_management/nl/models/simple_page.yml +3 -1
  33. data/config/routes.rb +7 -1
  34. data/lib/simple_content_management/breadcrumbs.rb +13 -0
  35. data/lib/simple_content_management/content_text.rb +2 -1
  36. data/lib/simple_content_management/version.rb +1 -1
  37. data/lib/simple_content_management.rb +1 -0
  38. data/vendor/assets/javascripts/jquery.ajaxform.js +1190 -0
  39. metadata +82 -83
@@ -4,8 +4,7 @@ class RedactorRails::DocumentsController < ApplicationController
4
4
  before_filter :redactor_authenticate_user! if RedactorRails.document_model.new.respond_to?(RedactorRails.devise_user)
5
5
 
6
6
  def index
7
- @documents = RedactorRails.document_model.where(
8
- RedactorRails.document_model.new.respond_to?(RedactorRails.devise_user) ? { RedactorRails.devise_user_key => redactor_current_user.id } : { })
7
+ @documents = RedactorRails.document_model.all
9
8
  render :json => @documents.to_json
10
9
  end
11
10
 
@@ -4,8 +4,7 @@ class RedactorRails::PicturesController < ApplicationController
4
4
  before_filter :redactor_authenticate_user! if RedactorRails.picture_model.new.respond_to?(RedactorRails.devise_user)
5
5
 
6
6
  def index
7
- @pictures = RedactorRails.picture_model.where(
8
- RedactorRails.picture_model.new.respond_to?(RedactorRails.devise_user) ? { RedactorRails.devise_user_key => redactor_current_user.id } : { })
7
+ @pictures = RedactorRails.picture_model.all
9
8
  render :json => @pictures.to_json
10
9
  end
11
10
 
@@ -0,0 +1,14 @@
1
+ class SimpleContentManagement::LinkBannersController < InheritedResources::Base
2
+ defaults :resource_class => SimpleContentManagement::LinkBanner
3
+ include SimpleAdminPanel::ControllerExtensions
4
+ alias_method_chain :collection, :search_and_pagination
5
+ layout false
6
+
7
+ def create
8
+ create! do |success, failure|
9
+ success.html do
10
+ render "show" and return
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,10 +1,12 @@
1
1
  class SimpleContentManagement::SimpleMenusController< InheritedResources::Base
2
2
  defaults :resource_class => SimpleContentManagement::SimpleMenu
3
3
  include SimpleAdminPanel::ControllerExtensions
4
+ include SimpleContentManagement::Breadcrumbs
4
5
  actions :index, :show, :update
5
6
 
6
7
  def update
7
8
  update!
9
+ reconstruct_breadcrumbs
8
10
  flash[:success] = "Menu gewijzigd."
9
11
  end
10
12
 
@@ -2,6 +2,13 @@ class SimpleContentManagement::SimplePagesController < InheritedResources::Base
2
2
  defaults :resource_class => SimpleContentManagement::SimplePage
3
3
  include SimpleAdminPanel::ControllerExtensions
4
4
  alias_method_chain :collection, :search_and_pagination
5
+ custom_actions resource: [:refresh]
6
+
7
+ def refresh
8
+ refresh! do
9
+ render "edit" and return
10
+ end
11
+ end
5
12
 
6
13
  protected
7
14
  def end_of_association_chain
@@ -0,0 +1,8 @@
1
+ class SimpleContentManagement::SimplePostsController < ApplicationController
2
+ include SimpleAdminPanel::ControllerExtensions
3
+
4
+ def preview
5
+ @simple_post = SimpleBlog::SimplePost.find params[:id]
6
+ render "preview", layout: request.xhr? ? false : "iframe"
7
+ end
8
+ end
@@ -12,16 +12,12 @@ module SimpleContentManagement::SimpleMenusHelper
12
12
  def simple_menu_item_link_for smi
13
13
  if smi.uri[0] == "$"
14
14
  smc = SimpleContentManagement::SimpleMenu.find_registered_menu_item smi.uri[1..-1]
15
- if self.instance_eval &smc.condition
15
+ if smc.condition.nil? || self.instance_eval(&smc.condition)
16
16
  link_to smi.name, *self.instance_eval(&smc.link)
17
17
  end
18
18
  else
19
19
  options = {}
20
20
  options[:target] = "_blank" if smi.is_target_blank?
21
- if smi.children.any?
22
- options[:class] = "dropdown-toggle"
23
- options[:"data-toggle"] = "dropdown"
24
- end
25
21
  link_to smi.name, smi.uri, options
26
22
  end
27
23
  end
@@ -1,9 +1,9 @@
1
1
  module SimpleContentManagement::SimplePagesHelper
2
2
  def render_page_by_name name
3
- SimpleContentManagement::SimplePage.where(name: name).first.try(:content_html).try(:html_safe)
3
+ SimpleContentManagement::SimplePage.active.where(name: name).first.try(:content_html).try(:html_safe)
4
4
  end
5
5
 
6
6
  def render_page_by_path path
7
- SimpleContentManagement::SimplePage.search(simple_routes_path_equals: path).first.try(:content_html).try(:html_safe)
7
+ SimpleContentManagement::SimplePage.active.search(simple_routes_path_equals: path).first.try(:content_html).try(:html_safe)
8
8
  end
9
9
  end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ class SimpleContentManagement::ImageUploader < CarrierWave::Uploader::Base
3
+ include CarrierWave::MiniMagick
4
+ storage :file
5
+
6
+ def store_dir
7
+ "system/redactor_assets/pictures/#{model.id}"
8
+ end
9
+
10
+ def extension_white_list
11
+ RedactorRails.image_file_types
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ class SimpleContentManagement::LinkBanner < ActiveRecord::Base
2
+ mount_uploader :background_image, SimpleContentManagement::ImageUploader
3
+
4
+ SIZES = {
5
+ "sub" => { w: 295, h: 160 },
6
+ "main" => { w: 895, h: 290 }
7
+ }
8
+
9
+ attr_accessible :secondary_title, :primary_title, :uri, :size, :background_image, :background_image_cache
10
+
11
+ validates_presence_of :background_image, :secondary_title, :primary_title, :uri, :size
12
+ validates_inclusion_of :size, in: SIZES.keys
13
+ end
@@ -9,4 +9,18 @@ class SimpleContentManagement::SimpleMenuItem < ActiveRecord::Base
9
9
  attr_accessible :name, :uri, :is_target_blank, :position, :simple_menu_id, :parent_id, :method
10
10
 
11
11
  scope :ordered, order("position")
12
+
13
+ def simple_menu
14
+ SimpleContentManagement::SimpleMenu.find simple_menu_id
15
+ end
16
+
17
+ def parents
18
+ parents = []
19
+ parent = self
20
+ while parent.parent.present?
21
+ parents << parent.parent
22
+ parent = self.parent
23
+ end
24
+ return parents
25
+ end
12
26
  end
@@ -1,12 +1,19 @@
1
1
  class SimpleContentManagement::SimplePage < ActiveRecord::Base
2
2
  include SimpleContentManagement::ContentText
3
+ include SimpleContentManagement::Breadcrumbs
3
4
 
4
5
  has_many :simple_routes, conditions: { deleted: false }, class_name: "SimpleContentManagement::SimpleRoute"
6
+ belongs_to :preferred_menu_item, class_name: "SimpleContentManagement::SimpleMenuItem"
5
7
 
6
- attr_accessible :name, :title, :content_html, :simple_routes_list
7
-
8
+ attr_accessible :name, :title, :content_html, :simple_routes_list, :section, :preferred_menu_item_id, :meta_description, :meta_keywords
8
9
  scope :active, where(deleted: false)
9
10
 
11
+ before_save :reconstruct_breadcrumbs
12
+
13
+ def simple_menu_items
14
+ SimpleContentManagement::SimpleMenuItem.where(uri: path_names.map{ |path| "/#{path}.html" } + (path_names.include?("prive") ? ["/"] : []))
15
+ end
16
+
10
17
  def simple_routes_list
11
18
  path_names.join ","
12
19
  end
@@ -16,15 +23,18 @@ class SimpleContentManagement::SimplePage < ActiveRecord::Base
16
23
 
17
24
  # destroy routes that are no longer required
18
25
  self.simple_routes.each do |simple_route|
19
- simple_route.destroy unless path_names.include? simple_route.path
26
+ if path_names.include? simple_route.path
27
+ path_names.delete simple_route.path
28
+ else
29
+ simple_route.destroy
30
+ end
20
31
  end
21
32
 
22
33
  # ensure any existing routes are set active to the current page.
23
- SimpleContentManagement::SimpleRoute.where(path: path_names).each do |simple_route|
24
- simple_route.simple_page = self
25
- simple_route.deleted = false
26
- simple_route.save
27
- path_names.delete simple_route.path
34
+ if id.nil?
35
+ SimpleContentManagement::SimpleRoute.where(path: path_names, deleted: false).update_all deleted: true
36
+ else
37
+ SimpleContentManagement::SimpleRoute.where(path: path_names, deleted: false).where("simple_page_id <> ?", id).update_all deleted: true
28
38
  end
29
39
 
30
40
  # create the remaining routes
@@ -34,7 +44,7 @@ class SimpleContentManagement::SimplePage < ActiveRecord::Base
34
44
  end
35
45
 
36
46
  def path_names
37
- simple_routes.pluck("path")
47
+ new_record? ? simple_routes.map(&:path) : simple_routes.active.pluck("path")
38
48
  end
39
49
 
40
50
  def destroy
@@ -45,6 +55,10 @@ class SimpleContentManagement::SimplePage < ActiveRecord::Base
45
55
  title
46
56
  end
47
57
 
58
+ def reconstruct_breadcrumbs
59
+ self.preferred_menu_item = simple_menu_items.first unless preferred_menu_item.present? || simple_menu_items.first.nil?
60
+ end
61
+
48
62
  class << self
49
63
  def registered_content_pages
50
64
  @registered_content_pages ||= YAML.load_file File.join Rails.root, "config", "content_pages.yml"
@@ -1,6 +1,4 @@
1
1
  class SimpleContentManagement::SimpleRoute < ActiveRecord::Base
2
- validates_uniqueness_of :path
3
-
4
2
  belongs_to :simple_page, class_name: "SimpleContentManagement::SimplePage"
5
3
 
6
4
  attr_accessible :path
@@ -16,5 +14,6 @@ class SimpleContentManagement::SimpleRoute < ActiveRecord::Base
16
14
  private
17
15
  def inform_simple_pages_constraint
18
16
  SimpleContentManagement::SimplePagesConstraint.instance.route_created_or_updated self
17
+ true
19
18
  end
20
19
  end
@@ -0,0 +1,26 @@
1
+ <%= simple_form_for @link_banner, remote: true do |f| %>
2
+ <div class="errors"><%= f.object.errors.full_messages.to_sentence %></div>
3
+ <%= f.input :secondary_title %>
4
+ <%= f.input :primary_title %>
5
+ <%= f.input :size, as: :radio_buttons, collection: SimpleContentManagement::LinkBanner::SIZES.map{ |name, size| ["#{size[:w]}x#{size[:h]}", name] } %>
6
+
7
+ <%= f.input :quick_search, label: "Bestaande link" do %>
8
+ <select id="link-banner-quick-select" data-placeholder="Kies een bestaande link">
9
+ <option></option>
10
+ <optgroup label="Pagina's">
11
+ <% SimpleContentManagement::SimplePage.includes(:simple_routes).where("name IS NULL").active.each do |simple_page| %>
12
+ <%= content_tag :option, simple_page.title, data: { routes: simple_page.path_names.map{ |path| "/#{path}.html" }.to_json, name: simple_page.title } %>
13
+ <% end %>
14
+ </optgroup>
15
+ </select>
16
+ <% end %>
17
+
18
+ <%= f.input :uri %>
19
+
20
+ <%= f.input :background_image, hint: "De achtergrond afbeelding van de linkbanner. Je afbeelding's afmetingen moeten gelijk zijn aan de gekozen afmeting van de linkbanner." do %>
21
+ <%= image_tag resource.background_image.url if resource.background_image.present? %>
22
+ <br>
23
+ <%= f.input_field :background_image %>
24
+ <%= f.hidden_field :background_image_cache %>
25
+ <% end %>
26
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <h2>Linkbanner bewerken</h2>
2
+ <%= render "form" %>
@@ -0,0 +1,2 @@
1
+ <h2>Linkbanner invoegen</h2>
2
+ <%= render "form" %>
@@ -0,0 +1,3 @@
1
+ <div data-link-banner-id="<%= @link_banner.id %>">
2
+ <%= render "shared/#{@link_banner.size}_bloc", primary_title: @link_banner.primary_title, secondary_title: @link_banner.secondary_title, target: @link_banner.uri, background_image: @link_banner.background_image.url %>
3
+ </div>
@@ -33,7 +33,7 @@
33
33
  <% end %>
34
34
  </optgroup>
35
35
  <optgroup label="Pagina's">
36
- <% SimpleContentManagement::SimplePage.includes(:simple_routes).where("name IS NULL").each do |simple_page| %>
36
+ <% SimpleContentManagement::SimplePage.active.includes(:simple_routes).where("name IS NULL").each do |simple_page| %>
37
37
  <%= content_tag :option, simple_page.title, data: { routes: simple_page.path_names.map{ |path| "/#{path}.html" }.to_json, name: simple_page.title } %>
38
38
  <% end %>
39
39
  </optgroup>
@@ -2,9 +2,22 @@
2
2
  <%= simple_form_for [:admin, @simple_page], url: @simple_page.new_record? ? simple_content_management_simple_pages_path : simple_content_management_simple_page_path(@simple_page), html: { class: "simple-page-form" } do |f| %>
3
3
  <%= f.input :simple_routes_list, input_html: { data: { simple_routes_list: true } }, wrapper_html: { class: "simple-routes-list" }, hint: "Voeg één of meerdere URL paden toe." %>
4
4
  <%= f.input :title, hint: "Wordt gebruikt als HTML titel." %>
5
+ <%= f.input :meta_description, as: :string, input_html: { class: "input-xxlarge" } %>
6
+ <%= f.input :meta_keywords, as: :string, input_html: { class: "input-xxlarge" } %>
7
+ <% if @simple_page.simple_menu_items.any? %>
8
+ <%= f.input :preferred_menu_item_id, include_blank: false, collection: @simple_page.simple_menu_items.map{ |smi| ["#{[smi.simple_menu.name, *smi.parents.map(&:name).reverse, smi.name].join(" / ")}", smi.id] } %>
9
+ <% else %>
10
+ <%= f.input :preferred_menu_item_id do %>
11
+ <div style="padding-top: 5px;">
12
+ Voeg deze pagina toe aan een menu om breadcrumbs ervoor te maken.
13
+ <br>Indien er meer dan één menuitem linkt naar deze pagina kan hier gekozen worden welke bepalend is voor de breadcrumbs.
14
+ </div>
15
+ <% end %>
16
+ <% end %>
17
+ <%= f.input :section, hint: "Bepalend voor welk menu er getoond wordt.", as: :radio_buttons, collection: { "Prive" => "private", "Zakelijk" => "corporate" } %>
5
18
  <%= f.input :content_html, as: :hidden %>
6
19
 
7
- <div class="content-html-container">
20
+ <div class="content-html-container content-html-preview">
8
21
  <%== @simple_page.content_html %>
9
22
  </div>
10
23
 
@@ -19,15 +32,22 @@
19
32
  <h3 id="content-editor-label">Inhoud bewerken</h3>
20
33
  <ul class="nav nav-tabs">
21
34
  <li class="active"><a href="#editor-html-content" data-toggle="tab">Tekst</a></li>
22
- <li><a href="#editor-container" data-toggle="tab">Container</a></li>
23
- <li><a href="#editor-bloc-component" data-toggle="tab">Linkbanner</a></li>
35
+ <li><a href="#editor-container" data-toggle="tab">Container</a></li>
36
+ <li><a href="#editor-link-banner" data-toggle="tab" data-path="<%= new_simple_content_management_link_banner_path %>">Linkbanner</a></li>
37
+ <li><a href="#editor-blog-links" data-toggle="tab">Bloglinks</a></li>
38
+ <li><a href="#editor-link-list" data-toggle="tab">Linklijst</a></li>
39
+ <li><a href="#editor-appointment" data-toggle="tab">Agenda</a></li>
40
+ <li><a href="#editor-blog-post-preview" data-toggle="tab">Blogpost</a></li>
41
+ <li><a href="#editor-offer" data-toggle="tab">Offerte</a></li>
24
42
  </ul>
25
43
  </div>
26
44
  <div class="modal-body">
27
45
  <div class="tab-content">
46
+
28
47
  <div class="tab-pane active" id="editor-html-content">
29
48
  <textarea cols=140 rows=12></textarea>
30
49
  </div>
50
+
31
51
  <div class="tab-pane" id="editor-container">
32
52
  <h2>Converteer dit blok naar een container</h2>
33
53
  <p class=lead>
@@ -37,13 +57,150 @@
37
57
  Klik op toepassen om dit blok te converteren. Er zal geen informatie verloren gaan, maar deze actie kan niet ongedaan worden.
38
58
  </p>
39
59
  </div>
40
- <div class="tab-pane" id="editor-bloc-component">
41
- <h2>Linkbanner</h2>
42
- Hier komen nog invulvelden voor:<br>
43
- - afbeelding<br>
44
- - koptekst regel 1 &amp; 2<br>
45
- - link
46
- - formaat (groot, 9 kolommen of klein, 3 kolommen)
60
+
61
+ <div class="tab-pane" id="editor-link-banner"></div>
62
+
63
+ <div class="tab-pane" id="editor-offer">
64
+ <h2>Offerte</h2>
65
+ <p class=lead>
66
+ Plaatst een offerte-berekenaar in dit blok.
67
+ </p>
68
+ <div style="display: none;">
69
+ <% @offer = Offer.new %>
70
+ <%= render "offers/form" %>
71
+ </div>
72
+ </div>
73
+
74
+ <div class="tab-pane" id="editor-link-list">
75
+ <h2>Linklijst</h2>
76
+ <p class="lead">
77
+ Blok met kopje en een lijst aan links.
78
+ </p>
79
+
80
+ <form target="#" id="editor-link-list-form" class="form-horizontal">
81
+
82
+ <div class="control-group">
83
+ <label class="control-label" for="editor-link-list-title">Titel</label>
84
+ <div class="controls">
85
+ <input type="text" id="editor-link-list-title" name="title">
86
+ </div>
87
+ </div>
88
+
89
+ <div class="control-group">
90
+ <label class="control-label" for="editor-link-list-title">Lijsttype</label>
91
+ <div class="controls">
92
+ <label class="radio"><input type="radio" name="listtype" value="linklist" checked="checked"> Linklijst</label>
93
+ <label class="radio"><input type="radio" name="listtype" value="dropdown"> Dropdown</label>
94
+ </div>
95
+ </div>
96
+
97
+ <h3>
98
+ <a href="#" id="add-link-button" class="pull-right btn btn-mini"><i class="icon-plus"></i> toevoegen</a>
99
+ Links
100
+ </h3>
101
+ <table class="table table-condensed" id="links-table">
102
+ <thead>
103
+ <tr>
104
+ <th>Bestaande link</th>
105
+ <th>Naam</th>
106
+ <th>URL</th>
107
+ </tr>
108
+ </thead>
109
+ <tbody>
110
+ <tr class="link-list-quick-select-container">
111
+ <td>
112
+ <select data-placeholder="Kies een bestaande link">
113
+ <option></option>
114
+ <optgroup label="Pagina's">
115
+ <% SimpleContentManagement::SimplePage.includes(:simple_routes).where("name IS NULL").active.each do |simple_page| %>
116
+ <%= content_tag :option, simple_page.title, data: { routes: simple_page.path_names.map{ |path| "/#{path}.html" }.to_json, name: simple_page.title } %>
117
+ <% end %>
118
+ </optgroup>
119
+ </select>
120
+ </td>
121
+ <td>
122
+ <input type="text" name="link-label[]">
123
+ </td>
124
+ <td>
125
+ <input type="text" name="link-uri[]">
126
+ </td>
127
+ </tr>
128
+ </tbody>
129
+ </table>
130
+
131
+ </form>
132
+ </div>
133
+
134
+ <div class="tab-pane" id="editor-blog-post-preview" data-path="<%= preview_simple_content_management_simple_post_path("simple_post_id") %>">
135
+ <h2>Blogpost preview blokje</h2>
136
+ <p class="lead">
137
+ Een blogpost preview blokje ter grootte van een kleine linkbanner.
138
+ </p>
139
+ <p>
140
+ <strong>Blogpost:</strong>
141
+ </p>
142
+ <%= select "", "blog_post_id", SimpleBlog::SimplePost.order("published_at desc").collect{ |p| [p.title, p.id] }, include_blank: true %>
143
+ </div>
144
+
145
+ <div class="tab-pane" id="editor-appointment">
146
+ <h2>Afspraak agenda</h2>
147
+ <p class="lead">
148
+ Een formulier met een grote agenda voor het maken van een afspraak op een datum en tijd.
149
+ </p>
150
+ <% @appointment_request = AppointmentRequest.new %>
151
+ <div style="display: none;">
152
+ <%= render "appointment_request/form" %>
153
+ </div>
154
+ </div>
155
+
156
+ <div class="tab-pane" id="editor-blog-links">
157
+ <h2>Blogposts linklijst</h2>
158
+ <p class="lead">
159
+ Blok met een kopje, links naar blogposts en een "alle openen" link.
160
+ </p>
161
+
162
+ <form target="#" id="editor-blog-links-form" class="form-horizontal">
163
+
164
+ <div class="control-group">
165
+ <label class="control-label" for="editor-blog-links-title">Titel</label>
166
+ <div class="controls">
167
+ <input type="text" id="editor-blog-links-title">
168
+ </div>
169
+ </div>
170
+
171
+ <div class="control-group">
172
+ <label class="control-label" for="editor-blog-links-title">Tags</label>
173
+ <div class="controls">
174
+ <select id="editor-blog-links-tags" multiple="multiple">
175
+ <% SimpleBlog::SimplePostTag.find_each do |tag| %>
176
+ <%= content_tag :option, tag.name, value: tag.id %>
177
+ <% end %>
178
+ </select>
179
+ <p class="help-block">
180
+ Kies één of meerdere tags waarvan de blogposts weergegeven moeten worden.
181
+ Alle posts met tenminste één van deze tags wordt toegevoegd. Laat leeg om alle posts te laden.
182
+ </p>
183
+ </div>
184
+ </div>
185
+
186
+ <div class="control-group">
187
+ <label class="control-label" for="editor-blog-links-amount">Aantal blogpost links</label>
188
+ <div class="controls">
189
+ <input type="number" id="editor-blog-links-amount" value="6" class="input-small">
190
+ </div>
191
+ </div>
192
+
193
+ <div class="control-group">
194
+ <label class="control-label" for="editor-blog-links-open-all">"Alle openen" link</label>
195
+ <div class="controls">
196
+ <input type="text" id="editor-blog-links-open-all" placeholder="Meer lezen...">
197
+ <p class="help-block">
198
+ Vul hier een naam in voor de link naar alle blogposts met de opgegeven tags. Laat leeg om geen link toe te voegen.
199
+ </p>
200
+ </div>
201
+ </div>
202
+
203
+ </form>
47
204
  </div>
48
205
  </div>
49
206
  </div>
@@ -1,4 +1,6 @@
1
- <%= table_list_for @simple_pages, sortable: false, resource_class: SimpleContentManagement::SimplePage do |t| %>
1
+ <%= paginate @simple_pages %>
2
+ <%= table_list_for @simple_pages, resource_class: SimpleContentManagement::SimplePage do |t| %>
2
3
  <%= t.item :title, as: :link %>
3
4
  <%= t.item as: :actions %>
4
- <% end %>
5
+ <% end %>
6
+ <%= paginate @simple_pages %>
@@ -2,4 +2,12 @@
2
2
  <%= link_to "/#{simple_route.path}.html", "/#{simple_route.path}.html", class: "btn btn-small", target: "_blank" %>
3
3
  <% end %>
4
4
 
5
- <%= @simple_page.content_html.html_safe %>
5
+ <br>
6
+ <br>
7
+
8
+ <pre>&lt;meta name="description" content="<%= CGI.escape_html @simple_page.meta_description %>"&gt;
9
+ &lt;meta name="keywords" content="<%= CGI.escape_html @simple_page.meta_keywords %>"&gt;</pre>
10
+
11
+ <div class="content-html-preview">
12
+ <%= @simple_page.content_html.html_safe %>
13
+ </div>
@@ -0,0 +1,13 @@
1
+ <div class="simple-post-preview">
2
+ <h3 class="title"><%= @simple_post.title.truncate(50) %></h3>
3
+
4
+ <div class="info">
5
+ Geschreven door <strong><%= @simple_post.author_name %></strong> op <strong><%= l @simple_post.published_at, format: :short %></strong>
6
+ </div>
7
+
8
+ <div class="content">
9
+ <%= @simple_post.content_text.truncate(150) %>
10
+ </div>
11
+
12
+ <%= link_to "&raquo; lees meer".html_safe, simple_post_path(@simple_post), class: "pull-right read-more" %>
13
+ </div>
@@ -0,0 +1,6 @@
1
+ nl:
2
+ layouts:
3
+ simple_admin_panel:
4
+ breadcrumb:
5
+ actions:
6
+ refresh: Verversen
@@ -0,0 +1,13 @@
1
+ nl:
2
+ activerecord:
3
+ models:
4
+ simple_content_management/link_banner:
5
+ one: Linkbanner
6
+ other: Linkbanners
7
+ attributes:
8
+ simple_content_management/link_banner:
9
+ primary_title: "Koptitel (regel 2)"
10
+ secondary_title: "Subtitel (regel 1)"
11
+ size: Formaat
12
+ uri: "URL"
13
+ background: Achtergrond afbeelding
@@ -9,4 +9,6 @@ nl:
9
9
  content_html: Inhoud
10
10
  title: Pagina titel
11
11
  name: Naam
12
- simple_routes_list: Routes
12
+ simple_routes_list: Routes
13
+ section: Afdeling
14
+ preferred_menu_item_id: Breadcrumbs
data/config/routes.rb CHANGED
@@ -5,7 +5,13 @@ Rails.application.routes.draw do
5
5
  end
6
6
  namespace :simple_content_management, path: "admin" do
7
7
  resources :simple_content_pages
8
- resources :simple_pages
8
+ resources :simple_pages do
9
+ get :refresh, on: :member
10
+ end
9
11
  resources :simple_menus
12
+ resources :link_banners, only: [:new, :create, :edit, :update, :show]
13
+ resources :simple_posts, only: [] do
14
+ get :preview, on: :member
15
+ end
10
16
  end
11
17
  end
@@ -0,0 +1,13 @@
1
+ module SimpleContentManagement::Breadcrumbs
2
+ def reconstruct_breadcrumbs
3
+ pages = SimpleContentManagement::SimplePage.active.all
4
+ menu_items = SimpleContentManagement::SimpleMenuItem.all
5
+ menu_item_ids = menu_items.map(&:id)
6
+
7
+ pages.each do |page|
8
+ next if menu_item_ids.include?(page.preferred_menu_item_id) || page.simple_menu_items.first.nil?
9
+ page.preferred_menu_item_id = page.simple_menu_items.first.id
10
+ page.save
11
+ end
12
+ end
13
+ end
@@ -15,7 +15,8 @@ module SimpleContentManagement::ContentText
15
15
  begin
16
16
  tmpfile.write self.content_html
17
17
  tmpfile.flush
18
- self.content_text = `lynx -dump -force_html "#{tmpfile.path}"`
18
+ # IO.popen for safe execution of commands within JRuby. backticks + utf8 = error
19
+ self.content_text = IO.popen(%{lynx -dump -force_html "#{tmpfile.path}"}, "rb").read
19
20
  ensure
20
21
  tmpfile.close true # `true` also deletes (unlinks) the file
21
22
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleContentManagement
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -5,6 +5,7 @@ require "redactor_rails_document_uploader"
5
5
  require "redactor_rails_picture_uploader"
6
6
 
7
7
  module SimpleContentManagement
8
+ require "simple_content_management/breadcrumbs"
8
9
  require "simple_content_management/content_text"
9
10
  require "simple_content_management/simple_pages_constraint"
10
11
  end