liquid_cms 0.2.0.13 → 0.2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +12 -0
- data/app/controllers/cms/assets_controller.rb +32 -10
- data/app/controllers/cms/components_controller.rb +3 -3
- data/app/controllers/cms/main_controller.rb +2 -0
- data/app/controllers/cms/pages_controller.rb +2 -2
- data/app/helpers/cms/pages_helper.rb +0 -12
- data/app/liquid/cms_paperclip_extension.rb +1 -1
- data/app/liquid/drops/cms_asset_drop.rb +15 -0
- data/app/liquid/filters/cms_filters.rb +1 -1
- data/app/liquid/tags/asset_search_tag.rb +26 -0
- data/app/liquid/tags/cms/tag_common.rb +29 -0
- data/app/liquid/tags/data_tag.rb +59 -0
- data/app/models/cms/asset.rb +109 -2
- data/app/models/cms/component.rb +21 -17
- data/app/models/cms/page.rb +1 -3
- data/app/models/cms/tag.rb +21 -0
- data/app/models/cms/taggable.rb +78 -0
- data/app/models/cms/tagging.rb +6 -0
- data/app/views/cms/assets/_asset.html.erb +2 -3
- data/app/views/cms/assets/_form.html.erb +53 -3
- data/app/views/cms/assets/_list.html.erb +16 -1
- data/app/views/cms/assets/_meta_field.html.erb +15 -0
- data/app/views/cms/documentation/_cms_drops.html.erb +18 -0
- data/app/views/cms/documentation/_cms_tags.html.erb +13 -0
- data/app/views/cms/pages/_page.html.erb +1 -3
- data/app/views/cms/shared/_sidebar.html.erb +30 -29
- data/generators/liquid_cms/lib/insert_commands.rb +14 -0
- data/generators/liquid_cms/liquid_cms_generator.rb +5 -1
- data/generators/liquid_cms/templates/config/initializers/cms/liquid_cms.rb +8 -0
- data/generators/liquid_cms/templates/config/locales/cms/en.yml +5 -0
- data/generators/liquid_cms/templates/migration_rev1.rb +38 -0
- data/generators/liquid_cms/templates/public/cms/stylesheets/sidebar.css +25 -7
- data/generators/liquid_cms/templates/public/cms/stylesheets/simple_form.css +79 -4
- data/generators/liquid_cms/templates/public/cms/stylesheets/styles.css +0 -8
- data/generators/liquid_cms/templates/public/cms/stylesheets/themes/dark.css +3 -0
- data/lib/liquid_cms/configuration.rb +12 -0
- data/lib/liquid_cms/version.rb +1 -1
- data/rails/init.rb +0 -1
- data/test/functional/assets_controller_test.rb +64 -16
- data/test/functional/components_controller_test.rb +90 -1
- data/test/functional/main_controller_test.rb +21 -0
- data/test/integration/pages_test.rb +124 -0
- data/test/integration/pages_test_no_context.rb +57 -0
- data/test/rails_app/db/migrate/20110329201435_create_liquid_cms_upgrade_rev1.rb +38 -0
- data/test/test_helper.rb +2 -0
- data/test/test_helpers/asset_helpers.rb +6 -4
- data/test/test_helpers/component_helpers.rb +35 -0
- data/test/test_helpers/file_helpers.rb +11 -0
- data/test/unit/asset_test.rb +114 -8
- data/test/unit/component_test.rb +65 -2
- data/test/unit/helpers/cms/common_helper_test.rb +4 -0
- metadata +35 -7
- data/app/views/cms/assets/destroy.js.rjs +0 -2
- data/generators/liquid_cms/templates/config/initializers/cms/vestal_versions.rb +0 -9
- data/test/rails_app/config/initializers/cms/vestal_versions.rb +0 -9
data/app/models/cms/component.rb
CHANGED
@@ -1,43 +1,46 @@
|
|
1
1
|
require 'zip/zip'
|
2
2
|
|
3
3
|
class Cms::Component
|
4
|
-
|
5
4
|
attr_reader :path
|
6
5
|
|
7
6
|
def initialize(context, path = nil)
|
8
7
|
@context = context
|
9
|
-
@path = clean_path(path) if path
|
8
|
+
@path = self.class.clean_path(path) if path
|
10
9
|
end
|
11
10
|
|
11
|
+
# base public path for components
|
12
12
|
def self.base_path(context)
|
13
|
-
File.join('cms', context.object ? File.join('components', context.object.id.to_s) : 'components')
|
13
|
+
Pathname.new(File.join('cms', context.object ? File.join('components', context.object.id.to_s) : 'components'))
|
14
14
|
end
|
15
15
|
|
16
|
+
# full component path on the local system
|
16
17
|
def self.full_path(context)
|
17
18
|
Rails.root.join 'public', base_path(context)
|
18
19
|
end
|
19
20
|
|
21
|
+
# the path for just the current component file as it existed in the original zip file
|
22
|
+
# returns empty if the path isn't in the main component directory which occurs if the zip contained relative references
|
23
|
+
# path: the full path of the component on the file system
|
20
24
|
def self.component_path(context, path)
|
21
|
-
path.sub(full_path(context).to_s + "/", '')
|
25
|
+
path.to_s.include?(full_path(context).to_s) ? path.sub(full_path(context).to_s + "/", '') : ''
|
22
26
|
end
|
23
27
|
|
24
28
|
def self.files(path)
|
25
29
|
Dir[File.expand_path(path) + "/*"]
|
26
30
|
end
|
27
31
|
|
28
|
-
def self.
|
29
|
-
|
32
|
+
def self.valid_ext?(file)
|
33
|
+
Cms.valid_component_exts.include?(File.extname(file).downcase)
|
30
34
|
end
|
31
35
|
|
32
|
-
def expand(file)
|
36
|
+
def self.expand(context, file)
|
33
37
|
Zip::ZipFile.open(file) do |zip_file|
|
34
38
|
zip_file.each do |f|
|
35
|
-
f_path =
|
36
|
-
|
37
|
-
|
38
|
-
FileUtils.
|
39
|
-
|
40
|
-
zip_file.extract(f, f_path)
|
39
|
+
f_path = full_path(context).join(f.name)
|
40
|
+
if valid_ext?(f_path) && component_path(context, f_path).present?
|
41
|
+
FileUtils.mkdir_p f_path.dirname
|
42
|
+
FileUtils.rm_rf(f_path.to_s) if f_path.exist?
|
43
|
+
zip_file.extract(f, f_path.to_s)
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|
@@ -46,7 +49,7 @@ class Cms::Component
|
|
46
49
|
def read
|
47
50
|
return '' if @path.blank? || !self.class.editable?(@path)
|
48
51
|
|
49
|
-
fname = self.class.full_path(@context).join(@path)
|
52
|
+
fname = self.class.full_path(@context).join(@path)
|
50
53
|
if File.exist?(fname)
|
51
54
|
File.open(fname).read
|
52
55
|
else
|
@@ -57,7 +60,7 @@ class Cms::Component
|
|
57
60
|
def write(content)
|
58
61
|
return false if content.blank? || @path.blank? || !self.class.editable?(@path)
|
59
62
|
|
60
|
-
fname = self.class.full_path(@context).join(@path)
|
63
|
+
fname = self.class.full_path(@context).join(@path)
|
61
64
|
File.exist?(fname).tap do |exist|
|
62
65
|
File.open(fname, 'w') do |f|
|
63
66
|
f.puts content
|
@@ -75,11 +78,12 @@ class Cms::Component
|
|
75
78
|
end
|
76
79
|
|
77
80
|
def self.editable?(file)
|
78
|
-
|
81
|
+
Cms.editable_component_exts.include?(File.extname(file).downcase)
|
79
82
|
end
|
80
83
|
|
81
84
|
protected
|
82
|
-
|
85
|
+
# cleans the path to remove relative references, etc. to other areas of the filesystem
|
86
|
+
def self.clean_path(path)
|
83
87
|
# don't do anything if the root path is present
|
84
88
|
return nil if path.blank? || path[0] == "/"
|
85
89
|
|
data/app/models/cms/page.rb
CHANGED
@@ -6,8 +6,6 @@ module Cms
|
|
6
6
|
|
7
7
|
NAME_REGEX = /^[^\/][a-zA-Z0-9_\-\.]+$/
|
8
8
|
|
9
|
-
versioned
|
10
|
-
|
11
9
|
belongs_to :layout_page, :class_name => self.to_s
|
12
10
|
has_many :content_pages, :class_name => self.to_s, :foreign_key => 'layout_page_id', :dependent => :nullify, :order => 'name ASC'
|
13
11
|
|
@@ -30,7 +28,7 @@ module Cms
|
|
30
28
|
named_scope :published, :conditions => {:published => true}
|
31
29
|
named_scope :unpublished, :conditions => {:published => false}
|
32
30
|
named_scope :layouts, :conditions => {:is_layout_page => true}
|
33
|
-
named_scope :ordered, :order => 'name ASC'
|
31
|
+
named_scope :ordered, :order => 'is_layout_page DESC, name ASC'
|
34
32
|
|
35
33
|
def to_s
|
36
34
|
name
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Cms::Tag < ActiveRecord::Base
|
2
|
+
unloadable
|
3
|
+
|
4
|
+
set_table_name 'cms_tags'
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def find_or_initialize_with_name_like(name)
|
8
|
+
with_name_like(name).first || new(:name => name)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
has_many :taggings, :dependent => :destroy, :class_name => 'Cms::Tagging'
|
13
|
+
|
14
|
+
validates_presence_of :name
|
15
|
+
|
16
|
+
named_scope :with_name_like, lambda { |name| { :conditions => ["name like ?", name] } }
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
name
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Cms::Taggable
|
2
|
+
class TagList < Array
|
3
|
+
def initialize(list)
|
4
|
+
list = list.is_a?(Array) ? list : list.split(/[,\W]+/).collect(&:strip).reject(&:blank?).collect(&:downcase)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
join ', '
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.included(klass)
|
14
|
+
klass.extend TaggableMethods::ClassMethods
|
15
|
+
|
16
|
+
klass.class_eval do
|
17
|
+
include TaggableMethods::InstanceMethods
|
18
|
+
|
19
|
+
has_many :taggings, :as => :taggable, :dependent => :destroy, :class_name => 'Cms::Tagging'
|
20
|
+
has_many :tags, :through => :taggings
|
21
|
+
|
22
|
+
after_save :save_tags
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module TaggableMethods
|
27
|
+
module ClassMethods
|
28
|
+
def define_tag_association(assoc)
|
29
|
+
source_klass = self.to_s
|
30
|
+
Cms::Tag.class_eval do
|
31
|
+
has_many assoc, :through => :taggings, :source => :taggable, :source_type => source_klass
|
32
|
+
end
|
33
|
+
|
34
|
+
self.named_scope :tagged_with, lambda{|tag| {:include => :tags, :conditions => ['cms_tags.name like ?', tag.to_s]}}
|
35
|
+
self.named_scope :tagged, :joins => "left outer join cms_taggings on cms_taggings.taggable_id = #{table_name}.id", :conditions => 'cms_taggings.id is not null'
|
36
|
+
self.named_scope :untagged, :joins => "left outer join cms_taggings on cms_taggings.taggable_id = #{table_name}.id", :conditions => 'cms_taggings.id is null'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module InstanceMethods
|
41
|
+
def tag_list
|
42
|
+
get_tag_list
|
43
|
+
end
|
44
|
+
|
45
|
+
def tag_list=(new_list)
|
46
|
+
set_tag_list new_list
|
47
|
+
end
|
48
|
+
|
49
|
+
protected
|
50
|
+
def set_tag_list(list)
|
51
|
+
@_tag_list = TagList.new(list)
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_tag_list
|
55
|
+
set_tag_list(tags.map(&:name)) if @_tag_list.nil?
|
56
|
+
@_tag_list
|
57
|
+
end
|
58
|
+
|
59
|
+
def save_tags
|
60
|
+
delete_unused_tags
|
61
|
+
add_new_tags
|
62
|
+
|
63
|
+
taggings.each(&:save)
|
64
|
+
end
|
65
|
+
|
66
|
+
def delete_unused_tags
|
67
|
+
tags.each { |t| tags.delete(t) unless get_tag_list.include?(t.name) }
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_new_tags
|
71
|
+
tag_names = tags.map(&:name)
|
72
|
+
get_tag_list.each do |tag_name|
|
73
|
+
tags << Cms::Tag.find_or_initialize_with_name_like(tag_name) unless tag_names.include?(tag_name)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
<% content_tag_for :li, asset, :class => cms_row_class do %>
|
2
2
|
<%= file_type_icon asset.asset_file_name %>
|
3
|
-
<%=
|
4
|
-
<%= link_to truncate(asset.asset_file_name, :length => 22),
|
5
|
-
<%= indicator dom_id(asset, 'progress') %>
|
3
|
+
<%= link_to cms_icon('delete.png', :title => 'Delete'), cms_asset_path(asset), :method => :delete, :confirm => "Are you sure you want to delete the \"#{asset}\" asset?" %>
|
4
|
+
<%= link_to truncate(asset.asset_file_name, :length => 22), edit_cms_asset_path(asset), :title => asset.asset_file_name %>
|
6
5
|
|
7
6
|
<span class="asset_size"><%= number_to_human_size asset.asset_file_size %></span>
|
8
7
|
|
@@ -1,4 +1,19 @@
|
|
1
1
|
<% simple_form_for @asset, :html => {:multipart => true} do |f| %>
|
2
|
+
<% unless f.object.new_record? %>
|
3
|
+
<div class="details">
|
4
|
+
<p><span class="label">Original</span> <%= link_to @asset.asset_file_name, @asset.asset.url %></p>
|
5
|
+
<p><span class="label">Filesize</span> <%= number_to_human_size(@asset.asset_file_size) %></p>
|
6
|
+
<p><span class="label">Last Updated</span> <%= @asset.asset_updated_at.to_formatted_s(:long) %></p>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% if f.object.image? %>
|
11
|
+
<div class="preview">
|
12
|
+
<span class="label">Preview</span>
|
13
|
+
<%= image_tag @asset.asset.url(:large) %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
|
2
17
|
<%= f.input :asset, :as => :file %>
|
3
18
|
|
4
19
|
<% if f.object.editable? %>
|
@@ -7,12 +22,47 @@
|
|
7
22
|
</p>
|
8
23
|
|
9
24
|
<div class="text required">
|
10
|
-
<%=
|
11
|
-
<span class="hint"><%= t('simple_form.hints.cms_asset.file_content') %></span>
|
25
|
+
<%= f.input :file_content, :as => :text, :input_html => {:rows => 40, :cols => nil} %>
|
12
26
|
</div>
|
13
27
|
|
14
|
-
<%= codemirror_edit Cms::Editable::content_type(@asset.asset_file_name), 'form.simple_form', '
|
28
|
+
<%= codemirror_edit Cms::Editable::content_type(@asset.asset_file_name), 'form.simple_form', 'cms_asset_file_content' %>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<div class="dimensions">
|
32
|
+
<%= f.label :custom_size, :required => false %>
|
33
|
+
<%= f.input :custom_width, :label => false, :required => false, :input_html => {:size => 4} %> x
|
34
|
+
<%= f.input :custom_height, :label => false, :required => false, :input_html => {:size => 4} %>
|
35
|
+
<span class="hint"><%= t('simple_form.hints.cms_asset.dimensions') %></span>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<%= f.input :tag_list, :as => :string, :required => false %>
|
39
|
+
|
40
|
+
<% field_set_tag 'Meta Data' do %>
|
41
|
+
<ul id="meta_fields">
|
42
|
+
<% f.object.meta.each_with_index do |meta,idx| %>
|
43
|
+
<%= render 'meta_field', :f => f, :obj => meta, :idx => idx %>
|
44
|
+
<% end %>
|
45
|
+
</ul>
|
46
|
+
<%= cms_icon 'table_add.png' %> <%= link_to 'Add meta data', nil, :id => 'add_meta', :title => 'Add new meta data' %>
|
15
47
|
<% end %>
|
16
48
|
|
17
49
|
<%= f.commit_button_or_cancel %>
|
50
|
+
|
51
|
+
<% javascript_tag do %>
|
52
|
+
function remove_element(evt) {
|
53
|
+
this.up('li').remove();
|
54
|
+
evt.stop();
|
55
|
+
}
|
56
|
+
|
57
|
+
$('add_meta').observe('click', function(evt) {
|
58
|
+
var new_field_id = "new_" + new Date().getTime();
|
59
|
+
$('meta_fields').insert({
|
60
|
+
bottom:
|
61
|
+
"<%= escape_javascript(render('meta_field', :f => f, :obj => nil)) %>".replace(/new_\d+/g, new_field_id)
|
62
|
+
}).select('.remove_meta').last().observe('click', remove_element);
|
63
|
+
evt.stop();
|
64
|
+
});
|
65
|
+
|
66
|
+
$$('.remove_meta').invoke('observe', 'click', remove_element);
|
67
|
+
<% end %>
|
18
68
|
<% end %>
|
@@ -11,7 +11,22 @@
|
|
11
11
|
<% end %>
|
12
12
|
|
13
13
|
<ul>
|
14
|
-
|
14
|
+
<% @context_asset_tags.each do |tag| %>
|
15
|
+
<li class="group tagged">
|
16
|
+
<h4><%= tag.to_s %> <%= link_to cms_icon('picture_add.png', :title => 'Add a new asset with this tag'), new_cms_asset_path(:tag => tag.to_s) %></h4>
|
17
|
+
<ul>
|
18
|
+
<%= render :partial => 'cms/assets/asset', :collection => @context.assets.tagged_with(tag).ordered %>
|
19
|
+
</ul>
|
20
|
+
</li>
|
21
|
+
<% end %>
|
22
|
+
<li class="group untagged">
|
23
|
+
<% unless @context_asset_tags.blank? %>
|
24
|
+
<h4>Untagged</h4>
|
25
|
+
<% end %>
|
26
|
+
<ul>
|
27
|
+
<%= render :partial => 'cms/assets/asset', :collection => @context.assets.untagged.ordered %>
|
28
|
+
</ul>
|
29
|
+
</li>
|
15
30
|
</ul>
|
16
31
|
<% end %>
|
17
32
|
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% f.simple_fields_for :meta, obj ? obj : nil, :index => obj ? idx : 'new_0' do |m| %>
|
2
|
+
<li>
|
3
|
+
<div class="field">
|
4
|
+
<%= m.input :name, :placeholder => 'field name', :size => 40 %>
|
5
|
+
<span class="hint"><%= t('simple_form.hints.cms_asset.meta.name') %></span>
|
6
|
+
</div>
|
7
|
+
<div class="field">
|
8
|
+
<%= m.input :value, :as => :text, :required => false, :input_html => {:rows => 2, :cols => 60, :placeholder => 'field value'} %>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<span class="delete">
|
12
|
+
<%= link_to cms_icon('table_delete.png'), nil, :class => 'remove_meta', :title => 'Delete this meta data' %>
|
13
|
+
</span>
|
14
|
+
</li>
|
15
|
+
<% end %>
|
@@ -11,3 +11,21 @@
|
|
11
11
|
{{ image.large.width }}
|
12
12
|
{{ image.large.height }}
|
13
13
|
</pre>
|
14
|
+
|
15
|
+
<a name="asset_drop"></a>
|
16
|
+
<h3>Asset</h3>
|
17
|
+
<ul>
|
18
|
+
<li><span class="attribute">meta</span> - Meta fields can be accessed from the meta attribute. Meta data is associated with an asset when creating or editing them.</li>
|
19
|
+
<li>
|
20
|
+
<span class="attribute">image</span> - Gives you access to the image fields if the asset an image. See the <a href="#image_drop">paperclip objects</a> drop for available fields.</a><br/>
|
21
|
+
The image attribute only contains the <em>'original'</em> size in addition to a <em>'custom'</em> size if custom dimensions were specified for the image.
|
22
|
+
</li>
|
23
|
+
</ul>
|
24
|
+
|
25
|
+
<pre>
|
26
|
+
{{ asset.meta.field_name }}
|
27
|
+
{{ asset.meta.location }}
|
28
|
+
|
29
|
+
{{ asset.image.custom.url }}
|
30
|
+
{{ asset.image.original.url }}
|
31
|
+
</pre>
|
@@ -7,3 +7,16 @@
|
|
7
7
|
{% include 'test' %}
|
8
8
|
</div>
|
9
9
|
</pre>
|
10
|
+
|
11
|
+
<h3><span class="function">asset_data</span> - Retrieves assets as a collection of asset drops.</h3>
|
12
|
+
<ul>
|
13
|
+
<li><span class="param required">tag</span> - The tag string used to search for the assets. Tags are associated with the asset when creating or editing them.</li>
|
14
|
+
<li><span class="param">random</span> - Return assets in a random order or most recent first. (true/false). false by default.</li>
|
15
|
+
<li><span class="param">limit</span> - The maximum number of records to return. Returns all by default.</li>
|
16
|
+
<li><span class="param">as</span> - Specify the name of the variable that the asset data will be saved in. The name is 'assets' by default.</li>
|
17
|
+
</ul>
|
18
|
+
|
19
|
+
<pre>
|
20
|
+
{% asset_data tag:'gallery' %}
|
21
|
+
{% asset_data tag:'customer' random:true %}
|
22
|
+
</pre>
|
@@ -3,15 +3,13 @@
|
|
3
3
|
<% if page.published? %>
|
4
4
|
<%= cms_icon 'accept.png' %>
|
5
5
|
<% else %>
|
6
|
-
<%=
|
6
|
+
<%= link_to cms_icon('delete.png', :title => 'Delete'), cms_page_path(page), :method => :delete, :confirm => "Are you sure you want to delete the \"#{page}\" page?" %>
|
7
7
|
<% end %>
|
8
8
|
<%= link_to truncate(page.to_s, :length => 24), edit_cms_page_path(page), :title => "Edit '#{page}'" %>
|
9
9
|
|
10
10
|
<%= cms_icon 'house.png', :title => 'Root/Home Page' if page.root? %>
|
11
11
|
<%= link_to cms_icon('magnifier.png', :title => 'View'), page.url, :class => 'external' if page.published? %>
|
12
12
|
|
13
|
-
<%= indicator dom_id(page, 'progress') %>
|
14
|
-
|
15
13
|
<% unless page.content_pages.empty? %>
|
16
14
|
<ul>
|
17
15
|
<%= render :partial => 'cms/pages/page', :collection => page.content_pages %>
|
@@ -1,35 +1,36 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<div id="sidebar_container">
|
2
|
+
<ul id="cms_menus" class="tabs clearfix">
|
3
|
+
<li><%= link_to t('pages.actions.index.title'), '#cms_pages' %></li>
|
4
|
+
<li><%= link_to t('assets.actions.index.title'), '#cms_assets' %></li>
|
5
|
+
<li><%= link_to t('components.actions.index.title'), '#cms_components' %></li>
|
6
|
+
</ul>
|
6
7
|
|
7
|
-
<div id="tab_container">
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
<div id="tab_container">
|
9
|
+
<div id="cms_pages">
|
10
|
+
<h2><%= t 'pages.actions.index.title' %></h2>
|
11
|
+
<%= render 'cms/pages/list' %>
|
12
|
+
</div>
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
<div id="cms_assets">
|
15
|
+
<h2><%= t 'assets.actions.index.title' %></h2>
|
16
|
+
<%= render 'cms/assets/list' %>
|
17
|
+
</div>
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
<div id="cms_components">
|
20
|
+
<h2><%= t 'components.actions.index.title' %></h2>
|
21
|
+
<%= render 'cms/components/list' %>
|
22
|
+
</div>
|
21
23
|
</div>
|
22
|
-
</div>
|
23
24
|
|
24
|
-
<% javascript_tag do %>
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
<% end %>
|
33
|
-
|
34
|
-
<p class="documentation"><%= cms_icon 'page.png' %> <%= link_to 'Documentation', cms_documentation_path %></p>
|
25
|
+
<% javascript_tag do %>
|
26
|
+
new Control.Tabs('cms_menus', {
|
27
|
+
defaultTab: jar.get('active_tab') || 'first',
|
28
|
+
afterChange: function(new_container) {
|
29
|
+
// save the active tab
|
30
|
+
jar.put('active_tab', new_container.getAttribute('id'));
|
31
|
+
}
|
32
|
+
});
|
33
|
+
<% end %>
|
35
34
|
|
35
|
+
<p class="documentation"><%= cms_icon 'page.png' %> <%= link_to 'Documentation', cms_documentation_path %></p>
|
36
|
+
</div>
|