fullstack-cms 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.5
@@ -1,16 +1,20 @@
1
1
  module MenusHelper
2
2
 
3
- def find_or_create_menu(uid)
4
- Menu.find_or_create_by_uid(uid, :name => "#{uid}".gsub("-", "_").humanize)
3
+ def find_or_create_menu(uid, locale = nil)
4
+ if locale
5
+ Menu.find_or_create_by_uid_and_locale(uid, locale.to_s, :name => "#{uid}".gsub("-", "_").humanize)
6
+ else
7
+ Menu.find_or_create_by_uid(uid, :name => "#{uid}".gsub("-", "_").humanize)
8
+ end
5
9
  end
6
10
 
7
- def nav_items_for(uid)
8
- menu = find_or_create_menu(uid)
11
+ def nav_items_for(uid, locale = nil)
12
+ menu = find_or_create_menu(uid, locale)
9
13
  html = ""
10
14
 
11
15
  menu.links.each do |link|
12
16
  unless block_given?
13
- html << nav_item(link.label, link_url(link))
17
+ html << nav_item(link.label, link_url(link), :rel => link.nofollow ? "nofollow" : nil)
14
18
  else
15
19
  html << yield(link)
16
20
  end
@@ -25,25 +29,7 @@ module MenusHelper
25
29
 
26
30
 
27
31
  def link_url(link)
28
- url = link.url
29
- if url.blank?
30
- "#"
31
-
32
- elsif url.starts_with?("content://")
33
- klass_name, id = url.gsub("content://", "").split("#")
34
- klass = klass_name.constantize
35
- resource = klass.find(id)
36
- if resource
37
- page_path_for(resource)
38
- else
39
- "#"
40
- end
41
-
42
- else
43
- url
44
-
45
- end
46
-
32
+ link.url.present? ? CGI::escape(link.url) : (link.linked ? page_path_for(link.linked) : "#")
47
33
  end
48
34
 
49
35
 
@@ -23,7 +23,7 @@ module PagesHelper
23
23
  end
24
24
 
25
25
  def page_path_for(resource_or_page)
26
- page = resource_or_page.is_a?(Page) ? resource_or_page : Page.find_by_resource_type(resource_or_page.class.name.underscore)
26
+ page = resource_or_page.is_a?(Page) ? resource_or_page : page_by_resource(resource_or_page)
27
27
  path = page.try(:path)
28
28
  if path.blank?
29
29
  "#not-found"
@@ -50,4 +50,18 @@ module PagesHelper
50
50
  request.path == "/"
51
51
  end
52
52
 
53
+
54
+ private
55
+ def page_by_resource(resource)
56
+ resource_type = resource.class.name.underscore
57
+
58
+ if Fullstack::Cms.config.localize
59
+ locale = resource.respond_to?(:locale) ? resource.send(:locale) : I18n.locale.to_s
60
+ Page.find_by_resource_type_and_locale(resource_type, locale)
61
+
62
+ else
63
+ Page.find_by_resource_type(resource_type)
64
+ end
65
+ end
66
+
53
67
  end
@@ -1,6 +1,6 @@
1
1
  class Linkable
2
2
 
3
- AJAX_COMBOBOX_MIN = 5
3
+ AJAX_COMBOBOX_MIN = 100
4
4
 
5
5
  class << self
6
6
 
data/app/models/menu.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  class Menu < ActiveRecord::Base
2
-
3
- field :uid, :string
4
- field :name, :string
2
+ include Uid
3
+ include Localized if Fullstack::Cms.config.localize
5
4
 
6
- attr_accessible :uid, :name, :links_attributes
5
+ field :name, :string
6
+
7
7
  has_many :links, :as => :link_owner, :dependent => :delete_all, :order=>'position ASC'
8
8
  accepts_nested_attributes_for :links, :allow_destroy => true
9
9
 
@@ -11,7 +11,6 @@ class Menu < ActiveRecord::Base
11
11
  validates_presence_of :uid
12
12
 
13
13
  timestamps
14
-
15
14
  end
16
15
 
17
16
 
data/app/models/page.rb CHANGED
@@ -1,20 +1,14 @@
1
1
  class Page < ActiveRecord::Base
2
2
  include Content
3
3
  include Nestable
4
+ include Localized if Fullstack::Cms.config.localize
5
+ include Uid
4
6
 
5
- if Fullstack::Cms.config.localize_pages
6
-
7
- include Localized
8
- index [:uid, :locale]
9
-
10
- end
11
-
12
- validates_presence_of :uid, :name
7
+ validates_presence_of :name
13
8
 
14
9
  field :name
15
10
  field :uid
16
11
  field :scope
17
- index :uid, :unique => true
18
12
 
19
13
  field :path
20
14
  field :resource_type
@@ -48,7 +48,11 @@ module Pageable
48
48
  module ClassMethods
49
49
  def page(name, path, options = {}, &block)
50
50
 
51
- page_definition_options = options.clone
51
+ # =================
52
+ # = Parse options =
53
+ # =================
54
+
55
+ localize = options.delete(:localize) == false ? false : Fullstack::Cms.config.localize
52
56
 
53
57
  this_controller_name = "#{self.name.underscore}".gsub("_controller", "")
54
58
  uid = "#{this_controller_name}##{name}"
@@ -66,37 +70,32 @@ module Pageable
66
70
  i18n_scope = "pages.#{self.name.underscore.split('/').last}##{name}"
67
71
  title = options.delete(:title) || I18n.t("#{i18n_scope}.title", :default => "#{name}".humanize)
68
72
 
73
+ # ======================
74
+ # = Create page record =
75
+ # ======================
76
+
69
77
  if Page.table_exists?
70
-
71
- page = unless Fullstack::Cms.config.localize_pages
72
- Page.find_or_create_by_uid(uid, :title => title, :name => name)
78
+ if localize
79
+ I18n.available_locales.each do |locale|
80
+ _page!(uid, _localize_path(path, locale), name, title, parent_uid, resource_type, locale.to_s)
81
+ end
73
82
  else
74
- Page.find_or_create_by_uid_and_locale(uid, I18n.locale || Fullstack::Cms.config.default_locale, :title => title, :name => name)
75
- end
76
-
77
- if parent_uid
78
- parent = unless Fullstack::Cms.config.localize_pages
79
- Page.find_by_uid(parent_uid)
80
- else
81
- Page.find_by_uid_and_locale(parent_uid, I18n.locale || Fullstack::Cms.config.default_locale)
82
- end
83
-
84
- page.move_to_child_of(parent) unless page.parent == parent
85
- end
86
-
87
- if resource_type
88
- page.update_attribute(:resource_type, resource_type) unless page.resource_type == resource_type
83
+ _page!(uid, path, name, title, parent_uid, resource_type)
89
84
  end
90
-
91
- if page.path != path
92
- page.update_attribute(:path, path)
85
+ end
86
+
87
+ # ===================
88
+ # = Map page routes =
89
+ # ===================
90
+
91
+ if localize
92
+ I18n.available_locales.each do |locale|
93
+ map(name, _localize_path(path, locale), options.reverse_merge({:locale => locale.to_s, :as => "#{name}_#{locale}"}), &block)
93
94
  end
94
-
95
+ else
96
+ map(name, path, options, &block)
95
97
  end
96
98
 
97
- map(name, path, options = {}, &block)
98
- @pages ||= ActiveSupport::HashWithIndifferentAccess.new
99
- @pages[name] = page
100
99
  end
101
100
 
102
101
  def page_names
@@ -107,6 +106,58 @@ module Pageable
107
106
  @pages ||= ActiveSupport::HashWithIndifferentAccess.new
108
107
  end
109
108
 
109
+
110
+ private
111
+
112
+ def _localize_path(path, locale)
113
+ path_segments = path.split("/")
114
+
115
+ path_segments.reject!(&:blank?)
116
+ path_segments.map! {|s|
117
+ if s =~ /^:/
118
+ s
119
+ else
120
+ I18n.t(s, :scope => "routing", :default => s, :locale => locale)
121
+ end
122
+ }
123
+
124
+ path_segments.unshift(locale.to_s)
125
+ "/" + path_segments.join("/")
126
+ end
127
+
128
+
129
+ def _page!(uid, path, name, title, parent_uid, resource_type, locale = nil)
130
+ # puts "_page!(#{[uid, path, name, title, parent_uid, resource_type, locale].map(&:inspect).join(",")})"
131
+
132
+ _page = if locale.nil?
133
+ Page.find_or_create_by_uid(uid, :title => title, :name => name)
134
+ else
135
+ Page.find_or_create_by_uid_and_locale(uid, locale.to_s, :title => title, :name => name)
136
+ end
137
+
138
+ if parent_uid
139
+ parent = if locale.nil?
140
+ Page.find_by_uid(parent_uid)
141
+ else
142
+ Page.find_by_uid_and_locale(parent_uid, locale.to_s)
143
+ end
144
+
145
+ _page.move_to_child_of(parent) unless _page.parent == parent
146
+ end
147
+
148
+ if resource_type
149
+ _page.update_attribute(:resource_type, resource_type) unless _page.resource_type == resource_type
150
+ end
151
+
152
+ if _page.path != path
153
+ _page.update_attribute(:path, path)
154
+ end
155
+
156
+ @pages ||= ActiveSupport::HashWithIndifferentAccess.new
157
+ @pages[name] = _page
158
+
159
+ end
160
+
110
161
  end
111
162
 
112
163
  def load_current_page
data/app/models/uid.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Uid
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+
6
+ field :uid, :string
7
+ validates_presence_of :uid
8
+
9
+ unless Fullstack::Cms.config.localize
10
+
11
+ index :uid, :unique => true
12
+ scope :uid, lambda {|uid| where(:uid => uid).first}
13
+
14
+ else
15
+
16
+ index [:uid, :locale], :unique => true
17
+ scope :uid, lambda {|uid| where(:uid => uid, :locale => (I18n.locale || Fullstack::Cms::config.default_locale).to_s).first}
18
+
19
+ end
20
+ end
21
+
22
+ end
@@ -6,8 +6,4 @@ $("#<%= @target %>").find("select[data-remote]").each ->
6
6
  data
7
7
  <% else %>
8
8
  $("select:not([data-remote]):not(.datetime-selector)").chosen()
9
- <% end %>
10
-
11
- # localize messages and labels
12
- # get rid of the black screen after window closing
13
- # double add problem
9
+ <% end %>
@@ -22,7 +22,7 @@
22
22
  <div class="linked-id-field-placeholder" id="linked_id_field_placeholder_<%= @linked_id_field_placeholder_uid = 1 + (@linked_id_field_placeholder_uid || 0)
23
23
  %>" data-current-id="<%= f.object.linked_id %>" data-current-type="<%= f.object.linked_type %>">
24
24
  </div>
25
- <%= f.input :url, :label => false, :input_html => {:style => "display: none", :class => "linked-url-field"} %>
25
+ <%= f.input :url, :label => false, :input_html => {:style => ("display: none" if f.object.persisted?), :class => "linked-url-field"} %>
26
26
  <% end %>
27
27
 
28
28
 
@@ -65,9 +65,11 @@
65
65
  $(".linked-fields").each ->
66
66
  linked_fields = $(@)
67
67
  update_linked_fields(linked_fields)
68
- linked_fields.find(".linked-type-field").live "change", ->
69
- update_linked_fields(linked_fields)
70
-
68
+
69
+ $(".linked-type-field").live "change", ->
70
+ update_linked_fields($(@).closest(".linked-fields"))
71
+
72
+
71
73
  <% end %>
72
74
  <% end %>
73
75
  <% end -%>
@@ -1,7 +1,17 @@
1
- <ul class="nav">
2
- <% Page.roots.each do |root| %>
3
- <% Page.each_with_level(root.self_and_descendants) do |page, level| %>
4
- <%= nav_item page.name, edit_admin_page_path(page), :icon => (page.root? ? "home" : "file"), :style => "line-height: 36px; padding-left:#{20 * level}px" %>
1
+ <%= tabs do |t| %>
2
+ <% I18n.available_locales.each do |locale| %>
3
+ <%= t.pane t("locale_names.#{locale}", :default => "#{locale}".humanize) do %>
4
+
5
+
6
+ <ul class="nav">
7
+ <% Page.where(:locale => "#{locale}").roots.each do |root| %>
8
+ <% Page.each_with_level(root.self_and_descendants) do |page, level| %>
9
+ <%= nav_item page.name, edit_admin_page_path(page), :icon => (page.root? ? "home" : "file"), :style => "line-height: 36px; padding-left:#{20 * level}px" %>
10
+ <% end %>
11
+ <% end %>
12
+ </ul>
13
+
14
+
15
+ <% end %>
5
16
  <% end %>
6
17
  <% end %>
7
- </ul>
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fullstack-cms"
8
- s.version = "0.2.4"
8
+ s.version = "0.2.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mcasimir"]
12
- s.date = "2012-09-01"
12
+ s.date = "2012-09-03"
13
13
  s.description = "CMS system built on fullstack"
14
14
  s.email = "maurizio.cas@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -51,6 +51,7 @@ Gem::Specification.new do |s|
51
51
  "app/models/text.rb",
52
52
  "app/models/text_page_part.rb",
53
53
  "app/models/text_with_title_page_part.rb",
54
+ "app/models/uid.rb",
54
55
  "app/views/admin/base/_fields.html.erb",
55
56
  "app/views/admin/base/_form.html.erb",
56
57
  "app/views/admin/base/_simple_form.html.erb",
@@ -7,7 +7,8 @@ module Fullstack
7
7
  @config ||= OpenStruct.new
8
8
  @config.resources ||= []
9
9
  @config.linkables ||= []
10
- @config.localize_pages = @config.localize_pages.nil? ? true : @config.localize_pages
10
+ @config.localize = @config.localize.nil? ? true : @config.localize
11
+ @config.localize_routes = @config.localize_routes.nil? ? true : @config.localize_routes
11
12
  @config.default_locale ||= "#{I18n.default_locale}" || "en"
12
13
  @config
13
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fullstack-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-01 00:00:00.000000000 Z
12
+ date: 2012-09-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fullstack-admin
@@ -245,6 +245,7 @@ files:
245
245
  - app/models/text.rb
246
246
  - app/models/text_page_part.rb
247
247
  - app/models/text_with_title_page_part.rb
248
+ - app/models/uid.rb
248
249
  - app/views/admin/base/_fields.html.erb
249
250
  - app/views/admin/base/_form.html.erb
250
251
  - app/views/admin/base/_simple_form.html.erb
@@ -329,7 +330,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
329
330
  version: '0'
330
331
  segments:
331
332
  - 0
332
- hash: -3826717670645353415
333
+ hash: 293567694538273846
333
334
  required_rubygems_version: !ruby/object:Gem::Requirement
334
335
  none: false
335
336
  requirements: