rad_kit 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -2
- data/app/controllers/app.rb +5 -0
- data/app/controllers/base.rb +47 -0
- data/app/controllers/base_app.rb +18 -0
- data/app/controllers/comments.rb +49 -0
- data/app/controllers/items.rb +208 -0
- data/app/helpers/kit/authorization.rb +121 -0
- data/app/helpers/kit/captcha.rb +10 -0
- data/app/helpers/kit/controller_helper.rb +76 -0
- data/app/helpers/kit/item_helper.rb +110 -0
- data/app/helpers/kit/navigation_helper.rb +15 -0
- data/app/helpers/kit/pagination.rb +62 -0
- data/app/models/_item/attachments.rb +15 -0
- data/app/models/_item/container.rb +30 -0
- data/app/models/_item/slug.rb +28 -0
- data/app/models/attachment.rb +9 -0
- data/app/models/comment.rb +30 -0
- data/app/models/item.rb +136 -0
- data/app/models/secure_token.rb +45 -0
- data/app/models/tag.rb +71 -0
- data/app/static/kit/highlight.css +48 -0
- data/app/static/kit.css +3 -0
- data/app/static/kit.js +0 -0
- data/app/static/themes/default/objects.less +28 -0
- data/app/views/controllers/comments/_embedded.html.haml +13 -0
- data/app/views/controllers/comments/_form.html.haml +8 -0
- data/app/views/controllers/comments/actions.js.haml +22 -0
- data/app/views/controllers/comments/show.html.haml +11 -0
- data/app/views/controllers/items/_items.html.haml +2 -0
- data/app/views/controllers/items/actions.js.haml +23 -0
- data/app/views/controllers/items/all.html.haml +4 -0
- data/app/views/controllers/items/inherited_action.html.haml +1 -0
- data/app/views/kit/_bottom_panel.html.haml +9 -0
- data/app/views/kit/_debug.html.haml +13 -0
- data/app/views/kit/_messages.html.haml +4 -0
- data/app/views/kit/_navigation.html.haml +19 -0
- data/app/views/kit/_not_found.html.haml +1 -0
- data/app/views/kit/_top_panel.html.haml +19 -0
- data/app/views/kit/_web_analytics.html.erb +14 -0
- data/app/views/kit/aspects/_comments.html.haml +8 -0
- data/app/views/kit/captcha/_action.js.haml +2 -0
- data/app/views/kit/captcha/_form.html.haml +10 -0
- data/app/views/kit/layout.html.haml +22 -0
- data/app/views/kit/layout.js.haml +15 -0
- data/app/views/previews/_line.html.haml +8 -0
- data/app/views/previews/_thumb.html.haml +5 -0
- data/app/views/themes/default/file.html.haml +19 -0
- data/app/views/themes/default/folder.html.haml +15 -0
- data/app/views/themes/default/layout_definitions/default.yml +27 -0
- data/app/views/themes/default/list.html.haml +21 -0
- data/app/views/themes/default/list_item.html.haml +14 -0
- data/app/views/themes/default/page.html.haml +23 -0
- data/app/views/tools/_access.html.haml +12 -0
- data/app/views/tools/_buttons.html.haml +11 -0
- data/app/views/tools/_context_menu.html.haml +12 -0
- data/app/views/tools/_search.html.haml +5 -0
- data/app/views/tools/_tags.html.haml +10 -0
- data/config/locales/en.yml +136 -0
- data/config/locales/ru.yml +142 -0
- data/config/routes.rb +44 -0
- metadata +82 -23
@@ -0,0 +1,19 @@
|
|
1
|
+
- logo_url, the_title = rad.config.logo_url, rad.config.title
|
2
|
+
- b.top_panel do |o|
|
3
|
+
- o.logo_image tag(:a, image_tag(logo_url), href: '/') if logo_url
|
4
|
+
- o.logo_text tag(:a, the_title, href: '/') if the_title
|
5
|
+
|
6
|
+
- if breadcrumb?
|
7
|
+
- o.left do |a|
|
8
|
+
- breadcrumb.each do |o|
|
9
|
+
- a.add o
|
10
|
+
|
11
|
+
- o.right do |a|
|
12
|
+
- if Models::User.current.registered?
|
13
|
+
- a.add link_to(Models::User.current.name, user_path(Models::User.current))
|
14
|
+
- a.add link_to(t(:logout), logout_path)
|
15
|
+
- else
|
16
|
+
- a.add link_to(t(:anonymous), login_path)
|
17
|
+
- a.add link_to(t(:login), login_path)
|
18
|
+
- a.add link_to(t(:signup), signup_path)
|
19
|
+
- rad.extension(:user_menu, self, a)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% web_analytics_js = rad.config.web_analytics_js %>
|
2
|
+
<% if rad.production? and rad.space? and web_analytics_js %>
|
3
|
+
<script type="text/javascript">
|
4
|
+
var _gaq = _gaq || [];
|
5
|
+
_gaq.push(['_setAccount', '<%= js web_analytics_js %>']);
|
6
|
+
_gaq.push(['_trackPageview']);
|
7
|
+
|
8
|
+
(function() {
|
9
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
10
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
11
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
12
|
+
})();
|
13
|
+
</script>
|
14
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
- if @model and partials.show?(:comments)
|
2
|
+
- b.discussion do |o|
|
3
|
+
- o.controls do |a|
|
4
|
+
- a.add link_to(t(:comment_it), new_comment_path(item_id: @model, format: :js), method: :get) if can? :create_comment
|
5
|
+
|
6
|
+
- o.content do
|
7
|
+
- @model.comments.each do |comment|
|
8
|
+
= render '/controllers/comments/embedded', object: comment
|
@@ -0,0 +1,10 @@
|
|
1
|
+
= b.title t(:enter_captcha)
|
2
|
+
- b.form_tag action: request.path do |f|
|
3
|
+
= f.line tag(:div, '', id: :dynamic_recaptcha)
|
4
|
+
|
5
|
+
- request.raw_params.each do |k, v|
|
6
|
+
- next if %w(format recaptcha_challenge_field recaptcha_response_field).include?(k)
|
7
|
+
- next unless v.is_a? String
|
8
|
+
= hidden_field_tag k, v
|
9
|
+
|
10
|
+
= f.line ok_button, cancel_button
|
@@ -0,0 +1,22 @@
|
|
1
|
+
- content_for :nothing do
|
2
|
+
- content_for :head do
|
3
|
+
= stylesheet_link_tag '/kit.css'
|
4
|
+
= yield(:css) || stylesheet_link_tag('/themes/default/style.css')
|
5
|
+
|
6
|
+
- content_for :bottom do
|
7
|
+
= initialize_js_commons
|
8
|
+
= javascript_include_tag '/kit.js'
|
9
|
+
- if rad.captcha.enabled? and rad.user.anonymous?
|
10
|
+
= javascript_include_tag "http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"
|
11
|
+
= yield :js
|
12
|
+
= render '/kit/messages'
|
13
|
+
|
14
|
+
- content_for :analytics do
|
15
|
+
= render '/kit/web_analytics'
|
16
|
+
|
17
|
+
- prepend_to :top_aspects, b.message(type: :error, content: h(flash.sticky_error)) if flash.sticky_error?
|
18
|
+
- prepend_to :top_aspects, b.message(h(flash.sticky_info)) if flash.sticky_info?
|
19
|
+
- prepend_to :content, b.title(h(@title)) if @title
|
20
|
+
|
21
|
+
- build_layout(@model.try(:layout)) unless @build_layout == false
|
22
|
+
= render themed_partial('/application')
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= "try{"
|
2
|
+
|
3
|
+
- unless params._target.blank?
|
4
|
+
var target = $('#{params._target}');
|
5
|
+
- else
|
6
|
+
var target = $('body');
|
7
|
+
|
8
|
+
= yield
|
9
|
+
|
10
|
+
- if msg = flash.error || flash.sticky_error
|
11
|
+
rad.error("#{h(js(msg))}");
|
12
|
+
- if msg = flash.info || flash.sticky_info
|
13
|
+
rad.info("#{h(js(msg))}");
|
14
|
+
|
15
|
+
= "}catch(e){console.log(e)};"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
- b.line id: object._id do |o|
|
2
|
+
- o.name h(object.name.blank? ? t(:empty_title) : object.name)
|
3
|
+
- unless object.attachments_as_images.empty?
|
4
|
+
- o.image object.attachments_as_images.first
|
5
|
+
- o.url path(object)
|
6
|
+
- o.text object.teaser
|
7
|
+
- o.tags render_item_tags(object) + [tag(:div, t(object.class.alias.underscore), class: 'm_item_type')]
|
8
|
+
- o.details render_item_details(object)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- tag :div, object.merge_html_attributes(class: " the_file m_selectable") do
|
2
|
+
- if object.controls?
|
3
|
+
.m_hover_controls= object.controls.join(' ')
|
4
|
+
- body = capture do
|
5
|
+
- if object.name?
|
6
|
+
%a{href: object.url, class: 'l_title'}= object.name
|
7
|
+
- if object.url? and object.image?
|
8
|
+
%table.css_table
|
9
|
+
%tbody
|
10
|
+
%tr
|
11
|
+
%td.css_td1
|
12
|
+
.l_image
|
13
|
+
%a{href: object.url}
|
14
|
+
%img{src: object.image.icon_url}
|
15
|
+
%td.css_td2
|
16
|
+
= body
|
17
|
+
- else
|
18
|
+
= body
|
19
|
+
= render themed_partial('/shared/details'), object: object
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- tag :div, object.merge_html_attributes(class: " the_folder m_selectable") do
|
2
|
+
- if object.controls?
|
3
|
+
.m_hover_controls= object.controls.join(' ')
|
4
|
+
|
5
|
+
- if object.name?
|
6
|
+
%h1.m_title= object.name
|
7
|
+
- elsif object.content.blank?
|
8
|
+
%h1.m_title= "(#{t(:empty)})"
|
9
|
+
|
10
|
+
- if object.content?
|
11
|
+
.l_content
|
12
|
+
= object.content.to_a.join("\n")
|
13
|
+
.css_clear
|
14
|
+
|
15
|
+
= render themed_partial('/shared/details'), object: object
|
@@ -0,0 +1,27 @@
|
|
1
|
+
layout_template: default
|
2
|
+
slots:
|
3
|
+
top_panel: "/kit/top_panel"
|
4
|
+
navigation: "/kit/navigation"
|
5
|
+
bottom_aspects:
|
6
|
+
- "/kit/aspects/comments"
|
7
|
+
tools:
|
8
|
+
- "/tools/buttons"
|
9
|
+
- "/tools/search"
|
10
|
+
- "/tools/tags"
|
11
|
+
- "/tools/access"
|
12
|
+
- "/tools/context_menu"
|
13
|
+
bottom_panel: "/kit/bottom_panel"
|
14
|
+
|
15
|
+
# dashboard:
|
16
|
+
# navigation:
|
17
|
+
# - navigation
|
18
|
+
#
|
19
|
+
# tools:
|
20
|
+
# - buttons
|
21
|
+
# - search
|
22
|
+
# - tags
|
23
|
+
# - access
|
24
|
+
# - context_menu
|
25
|
+
#
|
26
|
+
# bottom_aspects:
|
27
|
+
# - comments
|
@@ -0,0 +1,21 @@
|
|
1
|
+
- tag :div, object.merge_html_attributes(class: " the_list m_selectable") do
|
2
|
+
- if object.controls?
|
3
|
+
.m_hover_controls= object.controls.join(' ')
|
4
|
+
|
5
|
+
- if object.name?
|
6
|
+
%h1.m_title= object.name
|
7
|
+
- elsif object.content.blank?
|
8
|
+
%h1.m_title= "(#{t(:empty)})"
|
9
|
+
|
10
|
+
- if object.content?
|
11
|
+
.l_content= object.content.to_a.join("\n")
|
12
|
+
|
13
|
+
/ Show or Hide Finished tasks
|
14
|
+
.l_controls
|
15
|
+
%a{href: '#', class: 'l_show_more hidden'}= t(:show_more)
|
16
|
+
%a{href: '#', class: 'l_show_less hidden'}= t(:show_less)
|
17
|
+
|
18
|
+
/ needed for JavaScript
|
19
|
+
.l_hidden_tasks.hidden
|
20
|
+
|
21
|
+
= render themed_partial('/shared/details'), object: object
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- classes = " l_item m_selectable "
|
2
|
+
- classes << " l_finished" if object.finished
|
3
|
+
- tag :div, object.merge_html_attributes(class: classes) do
|
4
|
+
- unless object.controls.blank?
|
5
|
+
.m_hover_controls= object.controls.join(' ')
|
6
|
+
|
7
|
+
- unless object.check_box.blank?
|
8
|
+
.l_check_box= object.check_box
|
9
|
+
.l_content= object.content
|
10
|
+
|
11
|
+
/ .m_tags= object.tags.join(' ') if object.tags?
|
12
|
+
- if object.details?
|
13
|
+
.m_details= object.details.to_a.join(', ')
|
14
|
+
.css_clear
|
@@ -0,0 +1,23 @@
|
|
1
|
+
- tag :div, object.merge_html_attributes(class: " the_page") do
|
2
|
+
- if object.controls?
|
3
|
+
.m_hover_controls= object.controls.join(' ')
|
4
|
+
|
5
|
+
- if object.toolbar?
|
6
|
+
%textarea.hidden
|
7
|
+
.toolbar
|
8
|
+
%br
|
9
|
+
.m_hover_controls
|
10
|
+
= t(:add_embedded_item) + ':'
|
11
|
+
= object.toolbar.join(' ')
|
12
|
+
|
13
|
+
- if object.name?
|
14
|
+
%h1.m_title= object.name
|
15
|
+
|
16
|
+
- if object.text?
|
17
|
+
.l_text.m_markup
|
18
|
+
= object.text
|
19
|
+
.css_clear
|
20
|
+
|
21
|
+
.l_content= object.content.to_a.join("\n")
|
22
|
+
|
23
|
+
= render themed_partial('/shared/details'), object: object
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- if partials.show?(:context_menu) and @model and can?(:update_access, @model)
|
2
|
+
- b.tool name: t(:access), id: 'access_tool' do |o|
|
3
|
+
- o.content do
|
4
|
+
- b.basic_list do
|
5
|
+
/ Viewers
|
6
|
+
- basic, more = viewers_controls_for(@model)
|
7
|
+
- b.basic_list_item do
|
8
|
+
= basic + " " + b.more(id: 'viewers_controls', name: t(:show_more), content: more)
|
9
|
+
|
10
|
+
- basic, more = collaborators_controls_for(@model)
|
11
|
+
- b.basic_list_item do
|
12
|
+
= basic + " " + b.more(id: 'collaborators_controls', name: t(:show_more), content: more)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
- if partials.show?(:buttons) and can?(:create)
|
2
|
+
- b.tool do
|
3
|
+
- buttons_html = rad.kit.items.collect{|name| link_to(t(name), send("new_#{name}_path", format: :js), method: :get)}.join(tag(:span, ', '))
|
4
|
+
- if rad.kit.default_item
|
5
|
+
- b.more id: 'add_buttons', name: t(:show_more), class: 'm_tiny' do |o|
|
6
|
+
- o.core do
|
7
|
+
= link_to(t(:add), send("new_#{rad.kit.default_item}_path", format: :js), method: :get) + ",\n"
|
8
|
+
- o.more do
|
9
|
+
= buttons_html
|
10
|
+
- else
|
11
|
+
= buttons_html
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- if @model and partials.show?(:context_menu)
|
2
|
+
- model_name = @model.class.alias.underscore
|
3
|
+
- b.tool name: t(:parameters), id: '_context_menu' do |o|
|
4
|
+
- o.content do
|
5
|
+
- b.more id: 'item_context_menu', name: t(:show_more), class: 'm_tiny' do
|
6
|
+
- b.basic_list do
|
7
|
+
= b.basic_list_item item_layout_selector if can?(:update, @model)
|
8
|
+
|
9
|
+
- common_controls = []
|
10
|
+
- common_controls << link_to(t(:edit), edit_path(@model, format: :js)) if can? :update, @model
|
11
|
+
- common_controls << link_to(t(:delete), destroy_path(@model, format: :js), method: :post, confirm: t(:are_you_shure)) if can? :destroy, @model
|
12
|
+
= b.basic_list_item common_controls.join(",\n") unless common_controls.empty?
|
@@ -0,0 +1,10 @@
|
|
1
|
+
- if partials.show?(:tags)
|
2
|
+
- b.tool name: t(:tags) do
|
3
|
+
- b.tag_selector do |o|
|
4
|
+
- o.selected @selected_tags
|
5
|
+
- o.selected_tag_to_link lambda{|tag| link_to tag.name, action_name, {_tags: remove_tag(tag.name)}}
|
6
|
+
/ TODO2 move this to somewhere else
|
7
|
+
- top_tags = Models::Tag.where(context: {_exists: false}).limit(rad.kit.tags_count).sort([:count, -1]).all
|
8
|
+
- o.tags top_tags.sort{|a, b| a.name <=> b.name}
|
9
|
+
/ - o.tag_to_link lambda{|tag| link_to tag.name, {_tags: add_tag(tag.name)}, title: t(:tags_count, count: tag.count)}
|
10
|
+
- o.tag_to_link lambda{|tag| tag_link(tag.name, tag.count)}
|
@@ -0,0 +1,136 @@
|
|
1
|
+
en:
|
2
|
+
# General
|
3
|
+
access_denied: "Access denied!"
|
4
|
+
add: "Add"
|
5
|
+
all_items: "All"
|
6
|
+
anonymous: "Welcome, Guest"
|
7
|
+
are_you_shure: "Are you sure?"
|
8
|
+
created_by: "%{owner}"
|
9
|
+
common: "Common"
|
10
|
+
comments: "Comments"
|
11
|
+
email: "eMail"
|
12
|
+
empty: "Empty"
|
13
|
+
empty_search_query: "Empty query"
|
14
|
+
empty_title: "Empty title"
|
15
|
+
enabled: "Enabled"
|
16
|
+
failed: "Operation failed"
|
17
|
+
file: "File"
|
18
|
+
files: "Files"
|
19
|
+
folder: "Folder"
|
20
|
+
folders: "Folders"
|
21
|
+
go: "Go to"
|
22
|
+
go_next: "Next"
|
23
|
+
go_prev: "Prev"
|
24
|
+
icon: "Icon"
|
25
|
+
item: "Item"
|
26
|
+
items: "Items"
|
27
|
+
layout: "Layout"
|
28
|
+
language: "Language"
|
29
|
+
line: "Line"
|
30
|
+
list: "List"
|
31
|
+
lists: "Lists"
|
32
|
+
login: "Login"
|
33
|
+
login_not_required: "You are already logged in"
|
34
|
+
login_required: "You need to be logged in"
|
35
|
+
logout: "Logout"
|
36
|
+
member_visibility: "Members"
|
37
|
+
miscellaneous: "Miscellaneous"
|
38
|
+
name: "Name"
|
39
|
+
no_search_result_for: "You searched for %{query}, nothing was found"
|
40
|
+
note: "Note"
|
41
|
+
notes: "Notes"
|
42
|
+
nothing_more: "Nothing more"
|
43
|
+
owner_visibility: "Private"
|
44
|
+
page: "Page"
|
45
|
+
page_not_found: "Page not found"
|
46
|
+
pages: "Pages"
|
47
|
+
parameters: "Parameters"
|
48
|
+
password: "Password"
|
49
|
+
search_result_for:
|
50
|
+
one: "You searched for %{query}, %{count} page found"
|
51
|
+
other: "You searched for %{query}, %{count} pages found"
|
52
|
+
security: "Security"
|
53
|
+
selector: "Selector"
|
54
|
+
selectors: "Selectors"
|
55
|
+
signup: "Signup"
|
56
|
+
slug: "Link"
|
57
|
+
slug_description: "You should manually update current page url after changing the link!"
|
58
|
+
show_less: "Hide"
|
59
|
+
show_more: "..."
|
60
|
+
tag: "Tag"
|
61
|
+
tags: "Tags"
|
62
|
+
task: "Task"
|
63
|
+
teaser: "Teaser"
|
64
|
+
thumb: "Thumbnail"
|
65
|
+
text: "Text"
|
66
|
+
title: "Title"
|
67
|
+
type: "Type"
|
68
|
+
username: "Username"
|
69
|
+
view: "View"
|
70
|
+
|
71
|
+
# Common actions
|
72
|
+
cancel: "Cancel"
|
73
|
+
delete: "Delete"
|
74
|
+
edit: "Edit"
|
75
|
+
move: "Move"
|
76
|
+
new: "New"
|
77
|
+
ok: "Ok"
|
78
|
+
|
79
|
+
# Tags
|
80
|
+
invalid_tags: "Invalid tags"
|
81
|
+
invalid_tag_name: "Invalid tag name"
|
82
|
+
tags_count:
|
83
|
+
one: "%{count} page"
|
84
|
+
other: "%{count} pages"
|
85
|
+
|
86
|
+
# Comments
|
87
|
+
comment_created: "Comment created"
|
88
|
+
comment_destroyed: "Comment deleted"
|
89
|
+
comment_it: "Leave a comment"
|
90
|
+
comment_updated: "Comment updated"
|
91
|
+
comments_count:
|
92
|
+
one: "%{count} comment"
|
93
|
+
other: "%{count} comments"
|
94
|
+
|
95
|
+
# Authorization
|
96
|
+
access: "Access"
|
97
|
+
collaborators: "Collaborators"
|
98
|
+
collaborators_updated: "Collaborators updated"
|
99
|
+
only_owner: "owner only"
|
100
|
+
member_role: "member"
|
101
|
+
user_role: "all"
|
102
|
+
viewers: "Visibility"
|
103
|
+
viewers_updated: "Access updated"
|
104
|
+
|
105
|
+
# Item
|
106
|
+
attachments: "Attachments"
|
107
|
+
# icon_updated: "Icon updated"
|
108
|
+
layout_updated: "Layout updated"
|
109
|
+
# set_icon: "Update icon"
|
110
|
+
|
111
|
+
# Authentication
|
112
|
+
access_denied: "Access Denied!"
|
113
|
+
|
114
|
+
# Other
|
115
|
+
powered_by: "Powered by %{company}"
|
116
|
+
|
117
|
+
# Captcha
|
118
|
+
registered_user_or_human_required: "Registered user or human required!"
|
119
|
+
enter_captcha: "Please enter symbols displayed on image"
|
120
|
+
|
121
|
+
# email_registration_title: "%{name}, ваш аккаунт для %{host} создан"
|
122
|
+
# email_registration_text: |
|
123
|
+
# Ваш аккаунт для %{host} зарегистрирован.
|
124
|
+
#
|
125
|
+
# Имя пользователя %{name}
|
126
|
+
# Пароль %{password}
|
127
|
+
#
|
128
|
+
# Чтобы активировать его пожалуйста перейдите по ссылке:
|
129
|
+
# %{url}
|
130
|
+
|
131
|
+
#
|
132
|
+
# Authorization
|
133
|
+
#
|
134
|
+
# member_role: "Сообществу"
|
135
|
+
# owner_role: "Только мне"
|
136
|
+
# user_role: "Всем"
|
@@ -0,0 +1,142 @@
|
|
1
|
+
ru:
|
2
|
+
# General
|
3
|
+
access_denied: "Доступ запрещен!"
|
4
|
+
add: "Добавить"
|
5
|
+
all_items: "Все"
|
6
|
+
anonymous: "Добро пожаловать, Гость"
|
7
|
+
are_you_shure: "Вы уверены?"
|
8
|
+
created_by: "%{owner}"
|
9
|
+
comments: "Комментарии"
|
10
|
+
common: "Общие"
|
11
|
+
email: "Почта"
|
12
|
+
empty: "Пусто"
|
13
|
+
empty_search_query: "Пустой запрос"
|
14
|
+
empty_title: "Нет заголовка"
|
15
|
+
enabled: "Активен"
|
16
|
+
failed: "Не удалось выполнить операцию"
|
17
|
+
file: "Файл"
|
18
|
+
files: "Файлы"
|
19
|
+
folder: "Папка"
|
20
|
+
folders: "Папки"
|
21
|
+
go: "Перейти"
|
22
|
+
go_next: "Вперед"
|
23
|
+
go_prev: "Назад"
|
24
|
+
icon: "Иконка"
|
25
|
+
item: "Элемент"
|
26
|
+
items: "Элементы"
|
27
|
+
layout: "Лайаут"
|
28
|
+
language: "Язык"
|
29
|
+
line: "Линия"
|
30
|
+
list: "Список"
|
31
|
+
lists: "Списки"
|
32
|
+
login: "Войти"
|
33
|
+
login_not_required: "Вы уже вошли"
|
34
|
+
login_required: "Для получения доступа необходимо войти в систему"
|
35
|
+
logout: "Выйти"
|
36
|
+
member_visibility: "Участники"
|
37
|
+
miscellaneous: "Разное"
|
38
|
+
name: "Имя"
|
39
|
+
no_search_result_for: "Вы искали %{query}, ничего не найдено"
|
40
|
+
note: "Заметка"
|
41
|
+
notes: "Заметки"
|
42
|
+
nothing_more: "Больше ничего нет"
|
43
|
+
owner_visibility: "Личное"
|
44
|
+
page: "Страница"
|
45
|
+
page_not_found: "Страница не найдена"
|
46
|
+
pages: "Страницы"
|
47
|
+
parameters: "Параметры"
|
48
|
+
password: "Пароль"
|
49
|
+
search_result_for:
|
50
|
+
one: "Вы искали %{query}, найдена %{count} страница"
|
51
|
+
few: "Вы искали %{query}, найдено %{count} страницы"
|
52
|
+
many: "Вы искали %{query}, найдено %{count} страниц"
|
53
|
+
other: "Вы искали %{query}, найдено %{count} страниц"
|
54
|
+
security: "Безопасность"
|
55
|
+
selector: "Селектор"
|
56
|
+
selectors: "Селекторы"
|
57
|
+
signup: "Регистрация"
|
58
|
+
slug: "Ссылка"
|
59
|
+
slug_description: "После изменения этого поля вы должны вручную обновить соответствующим образом URL страницы"
|
60
|
+
show_less: "Скрыть"
|
61
|
+
show_more: "..."
|
62
|
+
tag: "Тег"
|
63
|
+
tags: "Теги"
|
64
|
+
task: "Задача"
|
65
|
+
teaser: "Тизер"
|
66
|
+
thumb: "Картинка"
|
67
|
+
text: "Текст"
|
68
|
+
title: "Название"
|
69
|
+
type: "Тип"
|
70
|
+
username: "Логин"
|
71
|
+
view: "Вид"
|
72
|
+
|
73
|
+
# Common actions
|
74
|
+
cancel: "Отмена"
|
75
|
+
delete: "Удалить"
|
76
|
+
edit: "Редактировать"
|
77
|
+
move: "Двигать"
|
78
|
+
new: "Создать"
|
79
|
+
ok: "Ок"
|
80
|
+
|
81
|
+
# Tags
|
82
|
+
invalid_tags: "Неверное значение категории"
|
83
|
+
invalid_tag_name: "Неверное имя тега"
|
84
|
+
tags_count:
|
85
|
+
one: "%{count} страница"
|
86
|
+
few: "%{count} страницы"
|
87
|
+
many: "%{count} страниц"
|
88
|
+
other: "%{count} страниц"
|
89
|
+
|
90
|
+
# Comments
|
91
|
+
comment_created: "Комментарий создан"
|
92
|
+
comment_destroyed: "Комментарий удален"
|
93
|
+
comment_it: "Оставить комментарий"
|
94
|
+
comment_updated: "Комментарий обновлен"
|
95
|
+
comments_count:
|
96
|
+
one: "%{count} комментарий"
|
97
|
+
few: "%{count} комментария"
|
98
|
+
many: "%{count} комментариев"
|
99
|
+
other: "%{count} комментариев"
|
100
|
+
|
101
|
+
# Authorization
|
102
|
+
access: "Доступ"
|
103
|
+
collaborators: "Правят"
|
104
|
+
collaborators_updated: "Доступ изменен"
|
105
|
+
only_owner: "только владелец"
|
106
|
+
member_role: "участники"
|
107
|
+
user_role: "все"
|
108
|
+
viewers: "Видят"
|
109
|
+
viewers_updated: "Доступ изменен"
|
110
|
+
|
111
|
+
# Item
|
112
|
+
attachments: "Файлы"
|
113
|
+
# icon_updated: "Иконка изменена"
|
114
|
+
layout_updated: "Лайаут изменен"
|
115
|
+
# set_icon: "Изменить иконку"
|
116
|
+
|
117
|
+
# Authentication
|
118
|
+
access_denied: "Доступ запрещен!"
|
119
|
+
|
120
|
+
# Other
|
121
|
+
powered_by: "Сайт сделан %{company}"
|
122
|
+
|
123
|
+
# Captcha
|
124
|
+
registered_user_or_human_required: "Требуется зарегистрированный пользователь или человек!"
|
125
|
+
enter_captcha: "Пожалуйста введите символы изображенные на картинке"
|
126
|
+
|
127
|
+
# email_registration_title: "%{name}, ваш аккаунт для %{host} создан"
|
128
|
+
# email_registration_text: |
|
129
|
+
# Ваш аккаунт для %{host} зарегистрирован.
|
130
|
+
#
|
131
|
+
# Имя пользователя %{name}
|
132
|
+
# Пароль %{password}
|
133
|
+
#
|
134
|
+
# Чтобы активировать его пожалуйста перейдите по ссылке:
|
135
|
+
# %{url}
|
136
|
+
|
137
|
+
#
|
138
|
+
# Authorization
|
139
|
+
#
|
140
|
+
# member_role: "Сообществу"
|
141
|
+
# owner_role: "Только мне"
|
142
|
+
# user_role: "Всем"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# url_root = rad.config.kit.url_root('/kit')
|
2
|
+
|
3
|
+
persistent_params = rad.extension(:persistent_params){[]}
|
4
|
+
options = rad.extension(:routes_options){{}}
|
5
|
+
|
6
|
+
url_root = rad.http.url_root
|
7
|
+
rad.router.configure do |c|
|
8
|
+
c.persistent_params persistent_params + [:l, :theme]
|
9
|
+
|
10
|
+
c.skip(/^#{url_root}\/?(favicon|fs|packaged)/)
|
11
|
+
c.skip(/^#{url_root}\/?[^\/]+\/static\//)
|
12
|
+
|
13
|
+
c.alias url_root, class_name: 'Controllers::Items', method: :redirect
|
14
|
+
|
15
|
+
options[:url_root] ||= url_root
|
16
|
+
c.with_options options do |c|
|
17
|
+
# c.resource :comments, class_name: 'Controllers::Comments'
|
18
|
+
# c.resource :items, class_name: 'Controllers::Items'
|
19
|
+
|
20
|
+
|
21
|
+
#
|
22
|
+
# Special polymorphic routes
|
23
|
+
#
|
24
|
+
id_to_class = rad.extension :kit_id_to_class do
|
25
|
+
cache = {}
|
26
|
+
-> id, params {
|
27
|
+
model = Models::Item.by_param! id
|
28
|
+
rad.workspace.model = model
|
29
|
+
unless controller_class = cache[model.class]
|
30
|
+
controller_class = "Controllers::#{model.class.alias.pluralize}".constantize
|
31
|
+
cache[model.class] = controller_class
|
32
|
+
end
|
33
|
+
controller_class
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
c.objects(
|
38
|
+
default_class_name: 'Controllers::Items',
|
39
|
+
class_to_resource: -> klass {klass.alias},
|
40
|
+
resource_to_class: -> resource {"Controllers::#{resource}".constantize},
|
41
|
+
id_to_class: id_to_class
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|