comfortable_mexican_sofa 1.6.23 → 1.6.24
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/assets/javascripts/comfortable_mexican_sofa/application.js +17 -16
- data/app/assets/stylesheets/comfortable_mexican_sofa/form.css +48 -0
- data/app/controllers/cms_admin/files_controller.rb +1 -1
- data/app/models/cms/file.rb +2 -1
- data/app/models/cms/page.rb +26 -6
- data/app/views/cms_admin/categories/_show.html.erb +1 -1
- data/app/views/cms_admin/files/_file.html.erb +1 -1
- data/app/views/cms_admin/files/index.html.erb +1 -1
- data/app/views/cms_admin/layouts/_index_branch.html.erb +1 -1
- data/app/views/cms_admin/pages/_form.html.erb +1 -0
- data/app/views/cms_admin/pages/_form_blocks.html.erb +29 -5
- data/app/views/cms_admin/pages/_index_branch.html.erb +1 -1
- data/app/views/cms_admin/pages/form_blocks.js.erb +2 -1
- data/app/views/cms_admin/sites/index.html.erb +1 -1
- data/app/views/cms_admin/snippets/index.html.erb +1 -1
- data/comfortable_mexican_sofa.gemspec +4 -3
- data/config/locales/ru.yml +235 -0
- data/lib/comfortable_mexican_sofa/configuration.rb +24 -23
- data/lib/comfortable_mexican_sofa/tag.rb +6 -1
- data/lib/comfortable_mexican_sofa/tags/asset.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/collection.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/field_datetime.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/field_integer.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/field_rich_text.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/field_string.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/field_text.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/file.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_datetime.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_file.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_files.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_integer.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_rich_text.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_string.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_text.rb +1 -1
- data/lib/comfortable_mexican_sofa/view_methods.rb +10 -1
- data/test/functional/cms_admin/pages_controller_test.rb +18 -18
- data/test/functional/cms_content_controller_test.rb +6 -6
- data/test/gemfiles/Gemfile.rails.3.0 +1 -1
- data/test/gemfiles/Gemfile.rails.3.1 +1 -1
- data/test/gemfiles/Gemfile.rails.3.2 +1 -1
- data/test/integration/fixtures_test.rb +1 -1
- data/test/integration/mirrors_test.rb +1 -1
- data/test/integration/render_cms_test.rb +7 -7
- data/test/integration/sites_test.rb +3 -3
- data/test/test_helper.rb +15 -0
- data/test/unit/fixtures_test.rb +10 -10
- data/test/unit/mirrors_test.rb +1 -1
- data/test/unit/models/block_test.rb +3 -3
- data/test/unit/models/categorization_test.rb +2 -2
- data/test/unit/models/file_test.rb +1 -1
- data/test/unit/models/layout_test.rb +3 -3
- data/test/unit/models/page_test.rb +21 -3
- data/test/unit/models/site_test.rb +1 -1
- data/test/unit/models/snippet_test.rb +1 -1
- data/test/unit/revisions_test.rb +5 -5
- data/test/unit/tag_test.rb +27 -1
- data/test/unit/tags/collection_test.rb +7 -0
- data/test/unit/tags/field_datetime_test.rb +6 -0
- data/test/unit/tags/field_integer_test.rb +6 -0
- data/test/unit/tags/field_rich_text_test.rb +6 -0
- data/test/unit/tags/field_string_test.rb +6 -0
- data/test/unit/tags/field_text_test.rb +6 -0
- data/test/unit/tags/page_datetime_test.rb +6 -0
- data/test/unit/tags/page_file_test.rb +10 -2
- data/test/unit/tags/page_files_test.rb +9 -1
- data/test/unit/tags/page_integer_test.rb +6 -0
- data/test/unit/tags/page_rich_text_test.rb +6 -0
- data/test/unit/tags/page_string_test.rb +6 -0
- data/test/unit/tags/page_text_test.rb +6 -0
- data/test/unit/view_methods_test.rb +21 -3
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.24
|
@@ -9,7 +9,7 @@
|
|
9
9
|
//= require comfortable_mexican_sofa/elrte/elrte.sofa_image.js
|
10
10
|
|
11
11
|
$.CMS = function(){
|
12
|
-
|
12
|
+
|
13
13
|
var current_path = window.location.pathname;
|
14
14
|
var admin_path_prefix = $('meta[name="cms-admin-path"]').attr('content');
|
15
15
|
|
@@ -21,15 +21,15 @@ $.CMS = function(){
|
|
21
21
|
$.CMS.enable_codemirror();
|
22
22
|
$.CMS.enable_date_picker();
|
23
23
|
$.CMS.enable_sortable_list();
|
24
|
-
if($('
|
25
|
-
if($('#mirrors').
|
26
|
-
if($('#page_save').
|
27
|
-
if($('#uploader_button').
|
28
|
-
if($('.categories_widget').
|
24
|
+
if($('#page_new, #page_edit, #new_page, #edit_page').length) $.CMS.enable_page_form();
|
25
|
+
if($('#mirrors').length) $.CMS.enable_mirrors_widget();
|
26
|
+
if($('#page_save').length) $.CMS.enable_page_save_widget();
|
27
|
+
if($('#uploader_button').length) $.CMS.enable_uploader();
|
28
|
+
if($('.categories_widget').length) $.CMS.enable_categories_widget();
|
29
29
|
});
|
30
30
|
|
31
31
|
return {
|
32
|
-
|
32
|
+
|
33
33
|
// Configuration that can be overriden from the outside. For example:
|
34
34
|
// $.CMS.config.elRTE.toolbar = ['undoredo']
|
35
35
|
config: {
|
@@ -86,16 +86,16 @@ $.CMS = function(){
|
|
86
86
|
})
|
87
87
|
});
|
88
88
|
},
|
89
|
-
|
89
|
+
|
90
90
|
enable_rich_text: function(){
|
91
91
|
elRTE.prototype.options.panels.sofa_style = ['bold', 'italic', 'underline'];
|
92
92
|
elRTE.prototype.options.panels.sofa_alignment = ['justifyleft', 'justifycenter', 'justifyright'];
|
93
93
|
elRTE.prototype.options.panels.sofa_format = ['formatblock'];
|
94
94
|
elRTE.prototype.options.panels.sofa_copypaste = ['pastetext'];
|
95
95
|
elRTE.prototype.options.panels.sofa_links = ['sofa_link', 'unlink'];
|
96
|
-
|
96
|
+
|
97
97
|
elRTE.prototype.options.toolbars.sofa = $.CMS.config.elRTE.toolbar;
|
98
|
-
|
98
|
+
|
99
99
|
// BUG: Need to set content to an empty <p> for IE
|
100
100
|
if ($.browser.msie){
|
101
101
|
$('textarea.rich_text').each(function(){
|
@@ -104,14 +104,14 @@ $.CMS = function(){
|
|
104
104
|
}
|
105
105
|
})
|
106
106
|
}
|
107
|
-
|
107
|
+
|
108
108
|
$('textarea.rich_text').elrte({
|
109
109
|
height: 300,
|
110
110
|
toolbar: 'sofa',
|
111
111
|
styleWithCSS: false
|
112
112
|
});
|
113
113
|
},
|
114
|
-
|
114
|
+
|
115
115
|
enable_codemirror: function(){
|
116
116
|
$('textarea.code').each(function(i, element){
|
117
117
|
var mode = 'htmlmixed';
|
@@ -149,7 +149,7 @@ $.CMS = function(){
|
|
149
149
|
})
|
150
150
|
});
|
151
151
|
},
|
152
|
-
|
152
|
+
|
153
153
|
enable_mirrors_widget: function(){
|
154
154
|
$('#mirrors select').change(function(){
|
155
155
|
window.location = $(this).val();
|
@@ -171,7 +171,8 @@ $.CMS = function(){
|
|
171
171
|
})
|
172
172
|
},
|
173
173
|
|
174
|
-
|
174
|
+
enable_page_form : function(){
|
175
|
+
$('#tag_namespaces').tabs();
|
175
176
|
$('input[name=commit]').click(function() {
|
176
177
|
$(this).parents('form').attr('target', '');
|
177
178
|
});
|
@@ -191,7 +192,7 @@ $.CMS = function(){
|
|
191
192
|
eval(xhr.responseText);
|
192
193
|
}
|
193
194
|
}
|
194
|
-
|
195
|
+
|
195
196
|
xhr.open('POST', action, true);
|
196
197
|
xhr.setRequestHeader('Accept', 'application/javascript');
|
197
198
|
xhr.setRequestHeader('X-CSRF-Token', $('meta[name=csrf-token]').attr('content'));
|
@@ -202,7 +203,7 @@ $.CMS = function(){
|
|
202
203
|
});
|
203
204
|
});
|
204
205
|
},
|
205
|
-
|
206
|
+
|
206
207
|
enable_categories_widget : function(){
|
207
208
|
$('.categories_widget a.action_link').click(function(){
|
208
209
|
if($(this).data('state') == 'edit'){
|
@@ -47,6 +47,17 @@
|
|
47
47
|
#cms_body .form_element.check_box_element input {
|
48
48
|
width: auto;
|
49
49
|
}
|
50
|
+
|
51
|
+
#cms_body .form_element .value input[disabled]{
|
52
|
+
background-color: #F1F1F1;
|
53
|
+
-webkit-touch-callout: none;
|
54
|
+
-webkit-user-select: none;
|
55
|
+
-khtml-user-select: none;
|
56
|
+
-moz-user-select: none;
|
57
|
+
-ms-user-select: none;
|
58
|
+
user-select: none;
|
59
|
+
}
|
60
|
+
|
50
61
|
#cms_body .page_form_extras {
|
51
62
|
margin-bottom: 10px;
|
52
63
|
}
|
@@ -179,4 +190,41 @@
|
|
179
190
|
}
|
180
191
|
#cms_body .form_element.simple_field .value input {
|
181
192
|
margin-bottom: 3px;
|
193
|
+
}
|
194
|
+
/* -- Tabs --------------------------------------------------------------- */
|
195
|
+
#cms_body #tag_namespaces {
|
196
|
+
padding: 0px;
|
197
|
+
border: 0px;
|
198
|
+
background: transparent;
|
199
|
+
}
|
200
|
+
#cms_body #tag_namespaces ul.ui-tabs-nav {
|
201
|
+
margin: 0px 0px 5px 150px;
|
202
|
+
padding: 5px 5px 0px 5px;
|
203
|
+
background: #484848;
|
204
|
+
border: 0px;
|
205
|
+
border-radius: 0px;
|
206
|
+
}
|
207
|
+
#cms_body #tag_namespaces ul.ui-tabs-nav li {
|
208
|
+
background: transparent;
|
209
|
+
border: 0px;
|
210
|
+
margin: 0px;
|
211
|
+
padding: 0px;
|
212
|
+
top: 0px;
|
213
|
+
}
|
214
|
+
#cms_body #tag_namespaces ul.ui-tabs-nav a {
|
215
|
+
margin-right: 2px;
|
216
|
+
font: 13px/19px 'Lucida Grande','Tahoma', sans-serif;
|
217
|
+
background-color: #252525;
|
218
|
+
color: #8a8a8a;
|
219
|
+
border-radius: 3px 3px 0px 0px;
|
220
|
+
}
|
221
|
+
#cms_body #tag_namespaces ul.ui-tabs-nav a:hover {
|
222
|
+
color: #fff;
|
223
|
+
}
|
224
|
+
#cms_body #tag_namespaces ul.ui-tabs-nav li.ui-tabs-selected a {
|
225
|
+
background-color: #fff;
|
226
|
+
color: #000;
|
227
|
+
}
|
228
|
+
#cms_body #tag_namespaces .ui-tabs-panel {
|
229
|
+
padding: 0px;
|
182
230
|
}
|
@@ -96,7 +96,7 @@ class CmsAdmin::FilesController < CmsAdmin::BaseController
|
|
96
96
|
def reorder
|
97
97
|
(params[:cms_file] || []).each_with_index do |id, index|
|
98
98
|
if (cms_file = Cms::File.find_by_id(id))
|
99
|
-
cms_file.
|
99
|
+
cms_file.update_attributes(:position => index)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
render :nothing => true
|
data/app/models/cms/file.rb
CHANGED
@@ -15,7 +15,8 @@ class Cms::File < ActiveRecord::Base
|
|
15
15
|
:dimensions,
|
16
16
|
:label,
|
17
17
|
:description,
|
18
|
-
:category_ids
|
18
|
+
:category_ids,
|
19
|
+
:position
|
19
20
|
|
20
21
|
# -- AR Extensions --------------------------------------------------------
|
21
22
|
has_attached_file :file, ComfortableMexicanSofa.config.upload_file_options.merge(
|
data/app/models/cms/page.rb
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
3
|
+
class ColumnLimitValidator < ActiveModel::EachValidator
|
4
|
+
# Ensuring that slug and full path are not longer than what database
|
5
|
+
# can store. We want to avoid magical invisible truncation
|
6
|
+
def validate_each(record, attribute, value)
|
7
|
+
column_limit = record.class.columns_hash[attribute.to_s].limit
|
8
|
+
if value.to_s.length > column_limit
|
9
|
+
record.errors.add(attribute, :too_long, :count => column_limit)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
2
14
|
class Cms::Page < ActiveRecord::Base
|
3
15
|
|
4
16
|
ComfortableMexicanSofa.establish_connection(self)
|
@@ -33,11 +45,11 @@ class Cms::Page < ActiveRecord::Base
|
|
33
45
|
|
34
46
|
# -- Callbacks ------------------------------------------------------------
|
35
47
|
before_validation :assigns_label,
|
36
|
-
:assign_parent
|
37
|
-
|
48
|
+
:assign_parent,
|
49
|
+
:escape_slug,
|
50
|
+
:assign_full_path
|
38
51
|
before_create :assign_position
|
39
|
-
before_save :
|
40
|
-
:set_cached_content
|
52
|
+
before_save :set_cached_content
|
41
53
|
after_save :sync_child_pages
|
42
54
|
after_find :unescape_slug_and_path
|
43
55
|
|
@@ -48,13 +60,15 @@ class Cms::Page < ActiveRecord::Base
|
|
48
60
|
:presence => true
|
49
61
|
validates :slug,
|
50
62
|
:presence => true,
|
51
|
-
:format => /^\p{Alnum}[\.\p{Alnum}\p{Mark}_-]*$/i,
|
52
63
|
:uniqueness => { :scope => :parent_id },
|
53
64
|
:unless => lambda{ |p| p.site && (p.site.pages.count == 0 || p.site.pages.root == self) }
|
54
65
|
validates :layout,
|
55
66
|
:presence => true
|
56
67
|
validate :validate_target_page
|
57
|
-
|
68
|
+
validate :validate_format_of_unescaped_slug
|
69
|
+
validates :slug, :full_path,
|
70
|
+
:column_limit => true
|
71
|
+
|
58
72
|
# -- Scopes ---------------------------------------------------------------
|
59
73
|
default_scope order('cms_pages.position')
|
60
74
|
scope :published, where(:is_published => true)
|
@@ -170,6 +184,12 @@ protected
|
|
170
184
|
end
|
171
185
|
end
|
172
186
|
|
187
|
+
def validate_format_of_unescaped_slug
|
188
|
+
return unless slug.present?
|
189
|
+
unescaped_slug = CGI::unescape(self.slug)
|
190
|
+
errors.add(:slug, :invalid) unless unescaped_slug =~ /^\p{Alnum}[\.\p{Alnum}\p{Mark}_-]*$/i
|
191
|
+
end
|
192
|
+
|
173
193
|
# NOTE: This can create 'phantom' page blocks as they are defined in the layout. This is normal.
|
174
194
|
def set_cached_content
|
175
195
|
write_attribute(:content, self.content(true))
|
@@ -11,6 +11,6 @@
|
|
11
11
|
<%= link_to category.label, "?#{{:category => categories}.to_param}" %>
|
12
12
|
<% else %>
|
13
13
|
<%= link_to category.label, edit_cms_admin_site_category_path(@site, category), :remote => true %>
|
14
|
-
<%= link_to 'x', cms_admin_site_category_path(@site, category), :method => :delete, :remote => true, :confirm => t('.are_you_sure'), :class => 'delete' %>
|
14
|
+
<%= link_to 'x', cms_admin_site_category_path(@site, category), :method => :delete, :remote => true, :data => {:confirm => t('.are_you_sure')}, :class => 'delete' %>
|
15
15
|
<% end %>
|
16
16
|
</div>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<div class='file_name'>
|
4
4
|
<%= link_to file.file_file_name, file.file.url, :target => '_blank', :class => 'filename' %>
|
5
|
-
<%= link_to span_tag('x'), cms_admin_site_file_path(@site, file), :method => :delete, :remote => true, :confirm => t('.are_you_sure'), :class => 'delete' %>
|
5
|
+
<%= link_to span_tag('x'), cms_admin_site_file_path(@site, file), :method => :delete, :remote => true, :data => {:confirm => t('.are_you_sure')}, :class => 'delete' %>
|
6
6
|
</div>
|
7
7
|
|
8
8
|
<div class='file_info' data-url='<%= file.file.url %>'>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
</div>
|
15
15
|
<div class='action_links'>
|
16
16
|
<%= link_to t('.edit'), edit_cms_admin_site_file_path(@site, file) %>
|
17
|
-
<%= link_to t('.delete'), cms_admin_site_file_path(@site, file), :method => :delete, :confirm => t('.are_you_sure') %>
|
17
|
+
<%= link_to t('.delete'), cms_admin_site_file_path(@site, file), :method => :delete, :data => {:confirm => t('.are_you_sure')} %>
|
18
18
|
</div>
|
19
19
|
<div class='label'>
|
20
20
|
<%= link_to file.label, edit_cms_admin_site_file_path(@site, file) %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<div class='action_links'>
|
11
11
|
<%= link_to t('.add_child_layout'), new_cms_admin_site_layout_path(@site, :parent_id => layout.id) %>
|
12
12
|
<%= link_to t('.edit'), edit_cms_admin_site_layout_path(@site, layout) %>
|
13
|
-
<%= link_to t('.delete'), cms_admin_site_layout_path(@site, layout), :method => :delete, :confirm => t('.are_you_sure') %>
|
13
|
+
<%= link_to t('.delete'), cms_admin_site_layout_path(@site, layout), :method => :delete, :data => {:confirm => t('.are_you_sure')} %>
|
14
14
|
</div>
|
15
15
|
<div class='label'>
|
16
16
|
<%= link_to layout.label, edit_cms_admin_site_layout_path(@site, layout) %>
|
@@ -14,6 +14,7 @@
|
|
14
14
|
<div class='page_form_extras'>
|
15
15
|
<% unless @site.pages.count == 0 || @site.pages.root == @page%>
|
16
16
|
<%= form.text_field :slug, :id => 'slug' %>
|
17
|
+
<%= form.text_field :full_path, :id => 'full-path', :disabled => true %>
|
17
18
|
<% end %>
|
18
19
|
<% if (options = Cms::Layout.options_for_select(@site)).present? %>
|
19
20
|
<%= form.select :layout_id, options, {}, 'data-url' => form_blocks_cms_admin_site_page_path(@site, @page.id.to_i) %>
|
@@ -1,16 +1,40 @@
|
|
1
|
-
<%
|
1
|
+
<%
|
2
|
+
namespace = { }
|
3
|
+
tags = @page.tags(true).select{ |t| t.is_cms_block? }.uniq_by{|t| t.identifier}
|
4
|
+
tags.each do |tag|
|
5
|
+
namespace[tag.namespace || 'default'] ||= []
|
6
|
+
namespace[tag.namespace || 'default'] << tag
|
7
|
+
end
|
8
|
+
%>
|
2
9
|
|
3
10
|
<div id='form_blocks'>
|
4
|
-
<% if
|
11
|
+
<% if tags.empty? %>
|
5
12
|
<div class='no_tags'>
|
6
13
|
<%= link_to @page.layout.label, edit_cms_admin_site_layout_path(@site, @page.layout) %>
|
7
14
|
<%= t('.no_tags').html_safe %>
|
8
15
|
</div>
|
16
|
+
|
9
17
|
<% else %>
|
10
18
|
<%= fields_for :blocks, nil, :builder => ComfortableMexicanSofa::FormBuilder do |cms_blocks| %>
|
11
|
-
|
12
|
-
|
13
|
-
|
19
|
+
<div id='tag_namespaces'>
|
20
|
+
<% if namespace.size > 1 %>
|
21
|
+
<ul>
|
22
|
+
<% namespace.each do |name, tags| %>
|
23
|
+
<li><%= link_to name.humanize, "#ns-#{name}" %></li>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
<% index = 0 %>
|
29
|
+
<% namespace.each do |name, tags| %>
|
30
|
+
<div id="ns-<%= name %>">
|
31
|
+
<% tags.each do |tag| %>
|
32
|
+
<%= cms_blocks.send(tag.class.to_s.demodulize.underscore, tag, index) rescue nil %>
|
33
|
+
<% index += 1 %>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
14
38
|
<% end %>
|
15
39
|
<% end %>
|
16
40
|
</div>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<div class='action_links'>
|
24
24
|
<%= link_to t('.add_child_page'), new_cms_admin_site_page_path(@site, :parent_id => page.id) %>
|
25
25
|
<%= link_to t('.edit'), edit_cms_admin_site_page_path(@site, page) %>
|
26
|
-
<%= link_to t('.delete'), cms_admin_site_page_path(@site, page), :method => :delete, :confirm => t('.are_you_sure') %>
|
26
|
+
<%= link_to t('.delete'), cms_admin_site_page_path(@site, page), :method => :delete, :data => {:confirm => t('.are_you_sure')} %>
|
27
27
|
</div>
|
28
28
|
<div class='label'>
|
29
29
|
<%= link_to page.label, edit_cms_admin_site_page_path(@site, page) %>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<div class='action_links'>
|
10
10
|
<%= link_to t('.select'), cms_admin_site_pages_path(site) %>
|
11
11
|
<%= link_to t('.edit'), edit_cms_admin_site_path(site) %>
|
12
|
-
<%= link_to t('.delete'), cms_admin_site_path(site), :method => :delete, :confirm => t('.are_you_sure') %>
|
12
|
+
<%= link_to t('.delete'), cms_admin_site_path(site), :method => :delete, :data => {:confirm => t('.are_you_sure')} %>
|
13
13
|
</div>
|
14
14
|
<div class='label'>
|
15
15
|
<%= link_to site.label, cms_admin_site_pages_path(site) %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
</div>
|
19
19
|
<div class='action_links'>
|
20
20
|
<%= link_to t('.edit'), edit_cms_admin_site_snippet_path(@site, snippet) %>
|
21
|
-
<%= link_to t('.delete'), cms_admin_site_snippet_path(@site, snippet), :method => :delete, :confirm => t('.are_you_sure') %>
|
21
|
+
<%= link_to t('.delete'), cms_admin_site_snippet_path(@site, snippet), :method => :delete, :data => {:confirm => t('.are_you_sure')} %>
|
22
22
|
</div>
|
23
23
|
<div class='label'>
|
24
24
|
<%= link_to snippet.label, edit_cms_admin_site_snippet_path(@site, snippet) %>
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "comfortable_mexican_sofa"
|
8
|
-
s.version = "1.6.
|
8
|
+
s.version = "1.6.24"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Oleg Khabarov", "The Working Group Inc"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-08-09"
|
13
13
|
s.description = ""
|
14
14
|
s.email = "oleg@theworkinggroup.ca"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -178,6 +178,7 @@ Gem::Specification.new do |s|
|
|
178
178
|
"config/locales/es.yml",
|
179
179
|
"config/locales/ja.yml",
|
180
180
|
"config/locales/pt-BR.yml",
|
181
|
+
"config/locales/ru.yml",
|
181
182
|
"config/locales/sv.yml",
|
182
183
|
"config/locales/zh-CN.yml",
|
183
184
|
"config/routes.rb",
|
@@ -323,7 +324,7 @@ Gem::Specification.new do |s|
|
|
323
324
|
]
|
324
325
|
s.homepage = "http://github.com/comfy/comfortable-mexican-sofa"
|
325
326
|
s.require_paths = ["lib"]
|
326
|
-
s.rubygems_version = "1.8.
|
327
|
+
s.rubygems_version = "1.8.23"
|
327
328
|
s.summary = "ComfortableMexicanSofa is a powerful CMS Engine for Ruby on Rails 3 applications"
|
328
329
|
|
329
330
|
if s.respond_to? :specification_version then
|
@@ -0,0 +1,235 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
ru:
|
3
|
+
# -- Models ---------------------------------------------------------------
|
4
|
+
attributes:
|
5
|
+
label: Название
|
6
|
+
slug: Ссылка
|
7
|
+
parent_id: Родитель
|
8
|
+
content: Контент
|
9
|
+
identifier: Идентификатор
|
10
|
+
activerecord:
|
11
|
+
models:
|
12
|
+
cms/site: Сайт
|
13
|
+
cms/layout: Шаблон
|
14
|
+
cms/page: Страница
|
15
|
+
cms/snippet: Сниппет
|
16
|
+
cms/file: Файл
|
17
|
+
attributes:
|
18
|
+
cms/site:
|
19
|
+
identifier: Идентификатор
|
20
|
+
hostname: Имя хоста
|
21
|
+
path: Путь
|
22
|
+
locale: Язык
|
23
|
+
is_mirrored: Синхронизирован с другими сайтами
|
24
|
+
cms/layout:
|
25
|
+
identifier: Идентификатор
|
26
|
+
label: Название шаблона
|
27
|
+
app_layout: Шаблон приложения
|
28
|
+
parent_id: Родительский шаблон
|
29
|
+
css: CSS
|
30
|
+
js: Javascript
|
31
|
+
cms/page:
|
32
|
+
label: Название
|
33
|
+
layout_id: Шаблон
|
34
|
+
slug: Ссылка
|
35
|
+
target_page_id: Редирект на страницу
|
36
|
+
is_published: Опубликована
|
37
|
+
cms/file:
|
38
|
+
file: Файл
|
39
|
+
description: Описание
|
40
|
+
cms/snippet:
|
41
|
+
identifier: Идентификатор
|
42
|
+
|
43
|
+
# -- Controllers ----------------------------------------------------------
|
44
|
+
cms:
|
45
|
+
base:
|
46
|
+
site_not_found: Сайт не найден
|
47
|
+
fixtures_enabled: CMS Fixtures включены. Все изменения, сделанные здесь, будут отменены.
|
48
|
+
|
49
|
+
sites:
|
50
|
+
created: Сайт создан
|
51
|
+
creation_failure: Не удалось создать сайт
|
52
|
+
updated: Сайт обновлен
|
53
|
+
update_failure: Не удалось обновить сайт
|
54
|
+
deleted: Сайт удален
|
55
|
+
not_found: Сайт не найден
|
56
|
+
|
57
|
+
layouts:
|
58
|
+
created: Шаблон создан
|
59
|
+
creation_failure: Не удалось создать шаблон
|
60
|
+
updated: Шаблон обновлен
|
61
|
+
update_failure: Не удалось обновить шаблон
|
62
|
+
deleted: Шаблон удален
|
63
|
+
not_found: Шаблон не найден
|
64
|
+
|
65
|
+
pages:
|
66
|
+
created: Страница создана
|
67
|
+
creation_failure: Не удалось создать страницу
|
68
|
+
updated: Страница обновлена
|
69
|
+
update_failure: Не удалось обновить страницу
|
70
|
+
deleted: Страница удалена
|
71
|
+
not_found: Страница не найдена
|
72
|
+
layout_not_found: Шаблоны не найдены. Пожалуйста, создайте хотя бы один шаблон.
|
73
|
+
|
74
|
+
snippets:
|
75
|
+
created: Сниппет создан
|
76
|
+
creation_failure: Не удалось создать сниппет
|
77
|
+
updated: Сниппет обновлен
|
78
|
+
update_failure: Не удалось обновить сниппет
|
79
|
+
deleted: Сниппет удален
|
80
|
+
not_found: Сниппет не найден
|
81
|
+
|
82
|
+
revisions:
|
83
|
+
reverted: Контент возвращен в прежнее состояние
|
84
|
+
record_not_found: Запись не найдена
|
85
|
+
not_found: Ревизия не найдена
|
86
|
+
|
87
|
+
files:
|
88
|
+
created: Файлы загружены
|
89
|
+
creation_failure: Не удалось загрузить файлы
|
90
|
+
updated: Файл обновлен
|
91
|
+
update_failure: Не удалось обновить файл
|
92
|
+
deleted: Файл удален
|
93
|
+
not_found: Файл не найден
|
94
|
+
|
95
|
+
content:
|
96
|
+
site_not_found: Сайт не найден
|
97
|
+
layout_not_found: Шаблон не найден
|
98
|
+
page_not_found: Страница не найдена
|
99
|
+
|
100
|
+
# -- Views ----------------------------------------------------------------
|
101
|
+
cms_admin:
|
102
|
+
base:
|
103
|
+
sites: Сайты
|
104
|
+
layouts: Шаблоны
|
105
|
+
pages: Страницы
|
106
|
+
snippets: Сниппеты
|
107
|
+
files: Файлы
|
108
|
+
|
109
|
+
sites:
|
110
|
+
index:
|
111
|
+
title: Сайты
|
112
|
+
new_link: Создать новый сайт
|
113
|
+
select: Выбрать сайт
|
114
|
+
edit: Редактировать
|
115
|
+
delete: Удалить
|
116
|
+
are_you_sure: Вы уверены, что хотите удалить этот сайт?
|
117
|
+
new:
|
118
|
+
title: Новый сайт
|
119
|
+
edit:
|
120
|
+
title: Редактирование сайта
|
121
|
+
form:
|
122
|
+
create: Создать сайт
|
123
|
+
update: Обновить сайт
|
124
|
+
|
125
|
+
layouts:
|
126
|
+
index:
|
127
|
+
title: Шаблоны
|
128
|
+
new_link: Создать новый шаблон
|
129
|
+
index_branch:
|
130
|
+
add_child_layout: Добавить дочерний шаблон
|
131
|
+
edit: Редактировать
|
132
|
+
delete: Удалить
|
133
|
+
are_you_sure: Вы уверены?
|
134
|
+
new:
|
135
|
+
title: Новый шаблон
|
136
|
+
edit:
|
137
|
+
title: Редактирование шаблона
|
138
|
+
revision: Ревизия
|
139
|
+
form:
|
140
|
+
select_parent_layout: Выбрать родительский шаблон
|
141
|
+
select_app_layout: Выбрать шаблон приложения
|
142
|
+
create: Создать шаблон
|
143
|
+
update: Обновить шаблон
|
144
|
+
|
145
|
+
pages:
|
146
|
+
index:
|
147
|
+
title: Страницы
|
148
|
+
new_link: Создать новую страницу
|
149
|
+
index_branch:
|
150
|
+
toggle: Toggle
|
151
|
+
add_child_page: Добавить дочернюю страницу
|
152
|
+
edit: Редактировать
|
153
|
+
delete: Удалить
|
154
|
+
are_you_sure: Вы уверены?
|
155
|
+
new:
|
156
|
+
title: Новая страница
|
157
|
+
edit:
|
158
|
+
title: Редактирование страницы
|
159
|
+
revision: Ревизия
|
160
|
+
form:
|
161
|
+
select_target_page: Без редиректа
|
162
|
+
preview: Предпросмотр
|
163
|
+
create: Создать страницу
|
164
|
+
update: Обновить страницу
|
165
|
+
form_blocks:
|
166
|
+
no_tags: |-
|
167
|
+
Шаблон не содержит ни одного контент-тега.<br/>
|
168
|
+
Отредактируйте контент, вставив тег страницы или поля. Например: <code>{{cms:page:content}}</code>
|
169
|
+
|
170
|
+
snippets:
|
171
|
+
index:
|
172
|
+
title: Сниппеты
|
173
|
+
new_link: Создать новый сниппет
|
174
|
+
edit: Редактировать
|
175
|
+
delete: Удалить
|
176
|
+
are_you_sure: Вы уверены?
|
177
|
+
new:
|
178
|
+
title: Новый сниппет
|
179
|
+
edit:
|
180
|
+
title: Редактирование сниппета
|
181
|
+
revision: Ревизия
|
182
|
+
form:
|
183
|
+
create: Создать сниппет
|
184
|
+
update: Обновить сниппет
|
185
|
+
|
186
|
+
revisions:
|
187
|
+
show:
|
188
|
+
title: Ревизии для
|
189
|
+
revision: Ревизия
|
190
|
+
full_path: Полный путь
|
191
|
+
slug: Ссылка
|
192
|
+
update: Обновить до этой ревизии
|
193
|
+
current: Текущая
|
194
|
+
|
195
|
+
files:
|
196
|
+
index:
|
197
|
+
title: Файлы
|
198
|
+
new_link: Загрузить новый файл
|
199
|
+
edit: Редактировать
|
200
|
+
delete: Удалить
|
201
|
+
are_you_sure: Вы уверены?
|
202
|
+
button: Загрузить файлы
|
203
|
+
new:
|
204
|
+
title: Новый файл
|
205
|
+
edit:
|
206
|
+
title: Редактирование файла
|
207
|
+
form:
|
208
|
+
current_file: Текущий файл
|
209
|
+
create: Загрузить файл
|
210
|
+
update: Обновить файл
|
211
|
+
page_form:
|
212
|
+
are_you_sure: Вы уверены?
|
213
|
+
file:
|
214
|
+
are_you_sure: Вы уверены?
|
215
|
+
|
216
|
+
categories:
|
217
|
+
index:
|
218
|
+
label: Категории
|
219
|
+
edit: Редактировать
|
220
|
+
done: Применить
|
221
|
+
all: Все
|
222
|
+
add: Добавить
|
223
|
+
show:
|
224
|
+
are_you_sure: Вы уверены?
|
225
|
+
edit:
|
226
|
+
save: Сохранить
|
227
|
+
form:
|
228
|
+
label: Категории
|
229
|
+
|
230
|
+
dialogs:
|
231
|
+
image:
|
232
|
+
insert: Вставить изображение
|
233
|
+
link:
|
234
|
+
create: Создать ссылку
|
235
|
+
|