biovision-base 0.8.171029 → 0.9.171227
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +49 -0
- data/app/assets/images/biovision/base/icons/breadcrumb-hover.svg +1 -0
- data/app/assets/images/biovision/base/icons/breadcrumb.svg +1 -0
- data/app/assets/images/biovision/base/placeholders/file.svg +1 -0
- data/app/assets/javascripts/biovision/base/biovision-sliders.js +64 -0
- data/app/assets/stylesheets/biovision/base/admin.scss +66 -53
- data/app/assets/stylesheets/biovision/base/biovision.scss +107 -55
- data/app/assets/stylesheets/biovision/base/layout.scss +64 -54
- data/app/assets/stylesheets/biovision/base/tootik.scss +70 -56
- data/app/assets/stylesheets/biovision/base/track.scss +2 -10
- data/app/controllers/admin/feedback_requests_controller.rb +23 -0
- data/app/controllers/admin/media_files_controller.rb +25 -0
- data/app/controllers/admin/media_folders_controller.rb +31 -0
- data/app/controllers/errors_controller.rb +43 -0
- data/app/controllers/feedback_requests_controller.rb +23 -0
- data/app/controllers/media_files_controller.rb +104 -0
- data/app/controllers/media_folders_controller.rb +85 -0
- data/app/helpers/biovision_users_helper.rb +7 -0
- data/app/helpers/media_helper.rb +26 -0
- data/app/mailers/feedback_mailer.rb +10 -0
- data/app/models/editable_page.rb +1 -1
- data/app/models/feedback_request.rb +31 -0
- data/app/models/media_file.rb +48 -0
- data/app/models/media_folder.rb +114 -0
- data/app/models/metric.rb +4 -1
- data/app/models/privilege_group.rb +1 -1
- data/app/uploaders/media_file_uploader.rb +30 -0
- data/app/uploaders/media_snapshot_uploader.rb +32 -0
- data/app/views/admin/feedback_requests/_nav_item.html.erb +2 -0
- data/app/views/admin/feedback_requests/entity/_in_list.html.erb +18 -0
- data/app/views/admin/feedback_requests/index.html.erb +16 -0
- data/app/views/admin/index/_biovision_base.html.erb +6 -0
- data/app/views/admin/index/_custom_dashboard.html.erb +0 -0
- data/app/views/admin/index/dashboard/_biovision_feedback.html.erb +9 -0
- data/app/views/admin/index/dashboard/_biovision_region.html.erb +8 -0
- data/app/views/admin/index/dashboard/_biovision_track.html.erb +8 -0
- data/app/views/admin/index/dashboard/_biovision_user.html.erb +13 -0
- data/app/views/admin/index/dashboard/_editorial.html.erb +12 -0
- data/app/views/admin/index/dashboard/_settings.html.erb +9 -0
- data/app/views/admin/index/index.html.erb +2 -22
- data/app/views/admin/media_files/_nav_item.html.erb +2 -0
- data/app/views/admin/media_files/entity/_in_list.html.erb +26 -0
- data/app/views/admin/media_files/index.html.erb +17 -0
- data/app/views/admin/media_files/show.html.erb +60 -0
- data/app/views/admin/media_folders/_nav_item.html.erb +2 -0
- data/app/views/admin/media_folders/entity/_in_list.html.erb +32 -0
- data/app/views/admin/media_folders/files.html.erb +28 -0
- data/app/views/admin/media_folders/index.html.erb +21 -0
- data/app/views/admin/media_folders/show.html.erb +79 -0
- data/app/views/application/error.html.erb +9 -0
- data/app/views/editable_pages/_editable_page.html.erb +1 -8
- data/app/views/editable_pages/entity/_metadata.html.erb +14 -0
- data/app/views/editable_pages/form/_ckeditor.html.erb +1 -1
- data/app/views/errors/error.html.erb +7 -0
- data/app/views/feedback_mailer/new_feedback_request.html.erb +12 -0
- data/app/views/feedback_mailer/new_feedback_request.text.erb +5 -0
- data/app/views/feedback_requests/_form.html.erb +60 -0
- data/app/views/feedback_requests/create.js.erb +10 -0
- data/app/views/media_files/_form.html.erb +75 -0
- data/app/views/media_files/ckeditor.html.erb +8 -0
- data/app/views/media_files/edit.html.erb +19 -0
- data/app/views/media_files/edit.js.erb +1 -0
- data/app/views/media_files/new.html.erb +15 -0
- data/app/views/media_files/new.js.erb +1 -0
- data/app/views/media_folders/_form.html.erb +54 -0
- data/app/views/media_folders/edit.html.erb +22 -0
- data/app/views/media_folders/edit.js.erb +1 -0
- data/app/views/media_folders/new.html.erb +19 -0
- data/app/views/media_folders/new.js.erb +1 -0
- data/app/views/shared/_meta_texts.html.erb +3 -0
- data/app/views/shared/_pagination.jbuilder +3 -3
- data/app/views/shared/admin/_toggleable.html.erb +7 -0
- data/app/views/shared/editable_pages/_body.html.erb +1 -10
- data/app/views/shared/forms/_default_ajax_handler.html.erb +13 -0
- data/app/views/shared/forms/_list_of_errors.js.erb +19 -0
- data/config/locales/common-en.yml +152 -0
- data/config/locales/common-ru.yml +41 -0
- data/config/locales/feedback-en.yml +30 -0
- data/config/locales/feedback-ru.yml +36 -0
- data/config/locales/media-ru.yml +92 -0
- data/config/routes.rb +34 -0
- data/db/migrate/20170301000002_create_metric_values.rb +1 -1
- data/db/migrate/20170301000102_create_agents.rb +1 -1
- data/db/migrate/20170302000001_create_users.rb +2 -2
- data/db/migrate/20170302000002_create_user_profiles.rb +1 -1
- data/db/migrate/20170302000003_create_tokens.rb +2 -2
- data/db/migrate/20170302000005_create_codes.rb +3 -3
- data/db/migrate/20170302000102_create_user_privileges.rb +3 -3
- data/db/migrate/20170302000104_create_privilege_group_privileges.rb +2 -2
- data/db/migrate/20170425000002_create_foreign_users.rb +3 -3
- data/db/migrate/20170629120000_create_login_attempts.rb +2 -2
- data/db/migrate/20171202000000_create_media_folders.rb +28 -0
- data/db/migrate/20171202000001_create_media_files.rb +27 -0
- data/db/migrate/20171211000000_create_feedback_requests.rb +26 -0
- data/db/migrate/20171217222222_add_fields_to_feedback_requests.rb +10 -0
- data/db/migrate/20171223333333_amend_foreign_keys.rb +72 -0
- data/lib/biovision/base/base_methods.rb +1 -1
- data/lib/biovision/base/engine.rb +1 -1
- data/lib/biovision/base/version.rb +1 -1
- metadata +94 -26
@@ -0,0 +1,79 @@
|
|
1
|
+
<% content_for :meta_title, @entity.name %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_folders.nav_item.text'), admin_media_folders_path) %>
|
4
|
+
<% @entity.parents.each do |parent| %>
|
5
|
+
<%= admin_media_folder_link(parent) %>
|
6
|
+
<% end %>
|
7
|
+
<span><%= @entity.name %></span>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<article>
|
11
|
+
<h1><%= @entity.name %></h1>
|
12
|
+
|
13
|
+
<ul class="actions">
|
14
|
+
<li>
|
15
|
+
<% if @entity.parent.nil? %>
|
16
|
+
<%= return_icon(admin_media_folders_path) %>
|
17
|
+
<% else %>
|
18
|
+
<%= return_icon(admin_media_folder_path(@entity.parent_id)) %>
|
19
|
+
<% end %>
|
20
|
+
</li>
|
21
|
+
<li><%= edit_icon(edit_media_folder_path(@entity.id)) %></li>
|
22
|
+
</ul>
|
23
|
+
|
24
|
+
<% unless @entity.snapshot.blank? %>
|
25
|
+
<figure role="group">
|
26
|
+
<%= media_snapshot_preview(@entity) %>
|
27
|
+
<figcaption>
|
28
|
+
<%= t('activerecord.attributes.media_folder.snapshot') %>
|
29
|
+
</figcaption>
|
30
|
+
</figure>
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
<dl>
|
34
|
+
<% unless @entity.parent.nil? %>
|
35
|
+
<dt><%= t('activerecord.attributes.media_folder.parent') %></dt>
|
36
|
+
<dd><%= admin_media_folder_link(@entity.parent) %></dd>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<dt><%= t('activerecord.attributes.media_folder.name') %></dt>
|
40
|
+
<dd><%= @entity.name %></dd>
|
41
|
+
|
42
|
+
<dt><%= t('activerecord.attributes.media_folder.user') %></dt>
|
43
|
+
<dd><%= editor_user_link(@entity.user) %></dd>
|
44
|
+
|
45
|
+
<dt><%= t(:created_at) %></dt>
|
46
|
+
<dd><%= time_tag(@entity.created_at) %></dd>
|
47
|
+
|
48
|
+
<dt><%= t(:updated_at) %></dt>
|
49
|
+
<dd><%= time_tag(@entity.updated_at) %></dd>
|
50
|
+
|
51
|
+
<dt><%= t('activerecord.attributes.media_folder.uuid') %></dt>
|
52
|
+
<dd><%= @entity.uuid %></dd>
|
53
|
+
|
54
|
+
<dt><%= t('.media_files') %></dt>
|
55
|
+
<dd>
|
56
|
+
<%=
|
57
|
+
link_to(t(:media_file_count, count: @entity.media_files_count),
|
58
|
+
files_admin_media_folder_path(@entity.id))
|
59
|
+
%>
|
60
|
+
</dd>
|
61
|
+
|
62
|
+
<% if @collection.any? %>
|
63
|
+
<dt><%= t(:child_media_folder_count, count: @collection.count) %></dt>
|
64
|
+
<dd>
|
65
|
+
<%= render partial: 'shared/admin/list', locals: { collection: @collection } %>
|
66
|
+
</dd>
|
67
|
+
<% end %>
|
68
|
+
</dl>
|
69
|
+
|
70
|
+
<%= render partial: 'shared/track', locals: { item: @entity } %>
|
71
|
+
|
72
|
+
<% if @entity.depth < MediaFolder::MAX_DEPTH %>
|
73
|
+
<section>
|
74
|
+
<h2><%= t('.add_child') %></h2>
|
75
|
+
|
76
|
+
<%= render partial: 'media_folders/form', locals: { entity: MediaFolder.new(parent: @entity) } %>
|
77
|
+
</section>
|
78
|
+
<% end %>
|
79
|
+
</article>
|
@@ -1,11 +1,4 @@
|
|
1
|
-
|
2
|
-
<% content_for(:meta_keywords, entity.keywords) unless entity.keywords.blank? %>
|
3
|
-
<% content_for(:meta_description, entity.description) unless entity.description.blank? %>
|
4
|
-
<% content_for(:meta_image, request.protocol + request.host_with_port + entity.image.medium.url) unless entity.image.blank? %>
|
5
|
-
<% content_for :meta_twitter do %>
|
6
|
-
<meta name="twitter:card" content="summary_large_image" />
|
7
|
-
<meta name="twitter:description" content="<%= entity.description %>" />
|
8
|
-
<% end %>
|
1
|
+
<%= render partial: 'editable_pages/entity/metadata', locals: { entity: entity } %>
|
9
2
|
|
10
3
|
<article>
|
11
4
|
<h1><%= entity.title %></h1>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% content_for(:meta_title, entity.title) unless entity.title.blank? %>
|
2
|
+
<% content_for(:meta_keywords, entity.keywords) unless entity.keywords.blank? %>
|
3
|
+
<% content_for(:meta_description, entity.description) unless entity.description.blank? %>
|
4
|
+
<% unless entity.image.blank? %>
|
5
|
+
<% content_for :meta_image, (request.protocol + request.host_with_port + entity.image.url) %>
|
6
|
+
<% end %>
|
7
|
+
<% content_for :meta_type_extension do %>
|
8
|
+
<meta property="og:article:published_time" content="<%= entity.created_at.strftime('%F') %>"/>
|
9
|
+
<meta property="og:article:modified_time" content="<%= entity.updated_at.strftime('%F') %>"/>
|
10
|
+
<% end %>
|
11
|
+
<% content_for :meta_twitter do %>
|
12
|
+
<meta name="twitter:card" content="summary_large_image"/>
|
13
|
+
<meta name="twitter:description" content="<%= entity.description %>"/>
|
14
|
+
<% end %>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
const editor = document.getElementById('editable_page_body');
|
5
5
|
|
6
6
|
CKEDITOR.replace(editor, {
|
7
|
-
|
7
|
+
filebrowserUploadUrl: '/media_files/ckeditor',
|
8
8
|
removePlugins: 'forms,save,preview,flash,bidi,language,print,templates,newpage'
|
9
9
|
});
|
10
10
|
});
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h1><%= t('.title') %></h1>
|
2
|
+
|
3
|
+
<dl>
|
4
|
+
<dt><%= t('activerecord.attributes.feedback_request.name') %></dt>
|
5
|
+
<dd><%= @entity.name %></dd>
|
6
|
+
|
7
|
+
<dt><%= t('activerecord.attributes.feedback_request.email') %></dt>
|
8
|
+
<dd><%= @entity.email %></dd>
|
9
|
+
|
10
|
+
<dt><%= t('activerecord.attributes.feedback_request.phone') %></dt>
|
11
|
+
<dd><%= @entity.phone %></dd>
|
12
|
+
</dl>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<% form_id = 'feedback-request-form' unless local_assigns[:form_id] %>
|
2
|
+
<%= form_with model: entity, html: { id: form_id } do |f| %>
|
3
|
+
<div class="fields">
|
4
|
+
<%=
|
5
|
+
f.text_field(
|
6
|
+
:name,
|
7
|
+
size: nil,
|
8
|
+
maxlength: FeedbackRequest::NAME_LIMIT,
|
9
|
+
placeholder: t('activerecord.attributes.feedback_request.name'),
|
10
|
+
aria: { label: t('activerecord.attributes.feedback_request.name') },
|
11
|
+
required: true
|
12
|
+
)
|
13
|
+
%>
|
14
|
+
<%=
|
15
|
+
f.phone_field(
|
16
|
+
:phone,
|
17
|
+
size: nil,
|
18
|
+
maxlength: FeedbackRequest::PHONE_LIMIT,
|
19
|
+
placeholder: t('activerecord.attributes.feedback_request.phone'),
|
20
|
+
aria: {
|
21
|
+
label: t('activerecord.attributes.feedback_request.phone')
|
22
|
+
},
|
23
|
+
required: true
|
24
|
+
)
|
25
|
+
%>
|
26
|
+
<%=
|
27
|
+
f.email_field(
|
28
|
+
:email,
|
29
|
+
size: nil,
|
30
|
+
maxlength: FeedbackRequest::EMAIL_LIMIT,
|
31
|
+
placeholder: t('activerecord.attributes.feedback_request.email'),
|
32
|
+
aria: {
|
33
|
+
label: t('activerecord.attributes.feedback_request.email')
|
34
|
+
},
|
35
|
+
required: true
|
36
|
+
)
|
37
|
+
%>
|
38
|
+
<% if local_assigns[:accept_comment] %>
|
39
|
+
<%= f.text_area(
|
40
|
+
:comment,
|
41
|
+
cols: 20,
|
42
|
+
rows: 5,
|
43
|
+
maxlength: FeedbackRequest::COMMENT_LIMIT,
|
44
|
+
placeholder: t('activerecord.attributes.feedback_request.comment'),
|
45
|
+
aria: {
|
46
|
+
label: t('activerecord.attributes.feedback_request.comment')
|
47
|
+
}
|
48
|
+
)
|
49
|
+
%>
|
50
|
+
<% end %>
|
51
|
+
<%= hidden_field_tag 'form_id', form_id %>
|
52
|
+
</div>
|
53
|
+
<div class="button">
|
54
|
+
<%= button_tag(t(:submit), type: :submit) %>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="result hidden"><%= t('.result') %></div>
|
58
|
+
<% end %>
|
59
|
+
|
60
|
+
<%= render partial: 'shared/forms/default_ajax_handler', locals: { form_id: form_id } %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
const form = document.getElementById('<%= j(param_from_request(:form_id)) %>');
|
3
|
+
const fields = form.querySelector('.fields');
|
4
|
+
const button = form.querySelector('.button');
|
5
|
+
const result = form.querySelector('.result');
|
6
|
+
|
7
|
+
fields.classList.add('hidden');
|
8
|
+
button.classList.add('hidden')
|
9
|
+
result.classList.remove('hidden');
|
10
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<%= form_with model: entity, html: { id: 'media-file-form' } do |f| %>
|
2
|
+
<%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
|
3
|
+
|
4
|
+
<dl>
|
5
|
+
<% unless entity.id.nil? %>
|
6
|
+
<% unless entity.media_folder.nil? %>
|
7
|
+
<dt><%= t('activerecord.attributes.media_file.media_folder') %></dt>
|
8
|
+
<dd>
|
9
|
+
<%= admin_media_folder_link(entity.media_folder) %>
|
10
|
+
</dd>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<% if entity.id.nil? %>
|
15
|
+
<dt><%= f.label :file %></dt>
|
16
|
+
<dd>
|
17
|
+
<figure class="preview" id="media-file-file">
|
18
|
+
<% if entity.file.blank? %>
|
19
|
+
<% image = image_tag('biovision/base/placeholders/image.svg') %>
|
20
|
+
<% else %>
|
21
|
+
<% image = image_tag(entity.file.medium.url) %>
|
22
|
+
<% end %>
|
23
|
+
<%= f.label :file, image %>
|
24
|
+
<figcaption>
|
25
|
+
<%=
|
26
|
+
f.file_field(:file,
|
27
|
+
id: :media_file_file,
|
28
|
+
accept: 'image/jpeg,image/png,image/gif',
|
29
|
+
data: { image: 'media-file-file' },
|
30
|
+
required: true)
|
31
|
+
%>
|
32
|
+
</figcaption>
|
33
|
+
</figure>
|
34
|
+
<div class="guideline"><%= t('.guidelines.file') %></div>
|
35
|
+
</dd>
|
36
|
+
<% else %>
|
37
|
+
<dt><%= t('activerecord.attributes.media_file.file') %></dt>
|
38
|
+
<dd>
|
39
|
+
<figure role="group">
|
40
|
+
<%= media_file_medium(entity) %>
|
41
|
+
</figure>
|
42
|
+
</dd>
|
43
|
+
<% end %>
|
44
|
+
|
45
|
+
<dt><%= f.label :name %></dt>
|
46
|
+
<dd>
|
47
|
+
<%=
|
48
|
+
f.text_field(:name,
|
49
|
+
id: :media_file_name,
|
50
|
+
size: nil,
|
51
|
+
maxlength: MediaFile::NAME_LIMIT,
|
52
|
+
required: true)
|
53
|
+
%>
|
54
|
+
<div class="guideline"><%= t('.guidelines.name') %></div>
|
55
|
+
</dd>
|
56
|
+
|
57
|
+
<dt><%= f.label :description %></dt>
|
58
|
+
<dd>
|
59
|
+
<%=
|
60
|
+
f.text_field(:description,
|
61
|
+
id: :media_file_description,
|
62
|
+
size: nil,
|
63
|
+
maxlength: MediaFile::DESCRIPTION_LIMIT)
|
64
|
+
%>
|
65
|
+
<div class="guideline"><%= t('.guidelines.description') %></div>
|
66
|
+
</dd>
|
67
|
+
</dl>
|
68
|
+
|
69
|
+
<div class="buttons">
|
70
|
+
<%= f.hidden_field(:media_folder_id) if entity.id.nil? %>
|
71
|
+
<%= f.button t(:save), type: :submit, class: 'button-save' %>
|
72
|
+
</div>
|
73
|
+
<% end %>
|
74
|
+
|
75
|
+
<%= render partial: 'shared/forms/default_ajax_handler', locals: { form_id: 'media-file-form' } %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="<%= locale %>">
|
3
|
+
<body>
|
4
|
+
<script>
|
5
|
+
window.parent.CKEDITOR.tools.callFunction('<%= param_from_request(:CKEditorFuncNum) %>','<%= request.protocol + request.host_with_port + @entity.file.medium.url %>');
|
6
|
+
</script>
|
7
|
+
</body>
|
8
|
+
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% content_for :meta_title, t('.title') %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_files.nav_item.text'), admin_media_files_path) %>
|
4
|
+
<%= admin_media_file_link(@entity) %>
|
5
|
+
<span><%= t(:edit) %></span>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<article>
|
9
|
+
<h1><%= t('.heading') %></h1>
|
10
|
+
|
11
|
+
<ul class="actions">
|
12
|
+
<li><%= return_icon(admin_media_file_path(@entity.id)) %></li>
|
13
|
+
<% unless @entity.locked? %>
|
14
|
+
<li class="danger"><%= destroy_icon(@entity) %></li>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
<%= render partial: 'form', locals: { entity: @entity } %>
|
19
|
+
</article>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'media-file-form' } %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% content_for :meta_title, t('.title') %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_files.nav_item.text'), admin_media_files_path) %>
|
4
|
+
<span><%= t(:create) %></span>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<article>
|
8
|
+
<h1><%= t('.heading') %></h1>
|
9
|
+
|
10
|
+
<ul class="actions">
|
11
|
+
<li><%= return_icon(admin_media_files_path) %></li>
|
12
|
+
</ul>
|
13
|
+
|
14
|
+
<%= render partial: 'form', locals: { entity: @entity } %>
|
15
|
+
</article>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'media-file-form' } %>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<%= form_with model: entity, html: { id: 'media-folder-form' } do |f| %>
|
2
|
+
<%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
|
3
|
+
|
4
|
+
<dl>
|
5
|
+
<% unless entity.id.nil? %>
|
6
|
+
<% unless entity.parent_id.nil? %>
|
7
|
+
<dt><%= t('activerecord.attributes.media_folder.parent_id') %></dt>
|
8
|
+
<dd>
|
9
|
+
<%= admin_media_folder_link(entity.parent) %>
|
10
|
+
</dd>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<dt><%= f.label :snapshot %></dt>
|
15
|
+
<dd>
|
16
|
+
<figure class="preview" id="media-folder-snapshot">
|
17
|
+
<% if entity.snapshot.blank? %>
|
18
|
+
<% image = image_tag('biovision/base/placeholders/image.svg') %>
|
19
|
+
<% else %>
|
20
|
+
<% image = image_tag(entity.snapshot.preview_2x.url) %>
|
21
|
+
<% end %>
|
22
|
+
<%= f.label :snapshot, image %>
|
23
|
+
<figcaption>
|
24
|
+
<%=
|
25
|
+
f.file_field(:snapshot,
|
26
|
+
id: :media_folder_snapshot,
|
27
|
+
accept: 'image/jpeg,image/png',
|
28
|
+
data: { image: 'media-folder-snapshot' })
|
29
|
+
%>
|
30
|
+
</figcaption>
|
31
|
+
</figure>
|
32
|
+
<div class="guideline"><%= t('.guidelines.snapshot') %></div>
|
33
|
+
</dd>
|
34
|
+
|
35
|
+
<dt><%= f.label :name %></dt>
|
36
|
+
<dd>
|
37
|
+
<%=
|
38
|
+
f.text_field(:name,
|
39
|
+
id: :media_folder_name,
|
40
|
+
size: nil,
|
41
|
+
maxlength: MediaFolder::NAME_LIMIT,
|
42
|
+
required: true)
|
43
|
+
%>
|
44
|
+
<div class="guideline"><%= t('.guidelines.name') %></div>
|
45
|
+
</dd>
|
46
|
+
</dl>
|
47
|
+
|
48
|
+
<div class="buttons">
|
49
|
+
<%= f.hidden_field(:parent_id) if entity.id.nil? %>
|
50
|
+
<%= f.button t(:save), type: :submit, class: 'button-save' %>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
53
|
+
|
54
|
+
<%= render partial: 'shared/forms/default_ajax_handler', locals: { form_id: 'media-folder-form' } %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<% content_for :meta_title, t('.title') %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_folders.nav_item.text'), admin_media_folders_path) %>
|
4
|
+
<% @entity.parents.each do |parent| %>
|
5
|
+
<%= admin_media_folder_link(parent) %>
|
6
|
+
<% end %>
|
7
|
+
<%= admin_media_folder_link(@entity) %>
|
8
|
+
<span><%= t(:edit) %></span>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<article>
|
12
|
+
<h1><%= t('.heading') %></h1>
|
13
|
+
|
14
|
+
<ul class="actions">
|
15
|
+
<li><%= return_icon(admin_media_folder_path(@entity.id)) %></li>
|
16
|
+
<% if @entity.can_be_deleted? %>
|
17
|
+
<li class="danger"><%= destroy_icon(@entity) %></li>
|
18
|
+
<% end %>
|
19
|
+
</ul>
|
20
|
+
|
21
|
+
<%= render partial: 'form', locals: { entity: @entity } %>
|
22
|
+
</article>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'media-folder-form' } %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% content_for :meta_title, t('.title') %>
|
2
|
+
<% content_for :breadcrumbs do %>
|
3
|
+
<%= link_to(t('admin.media_folders.nav_item.text'), admin_media_folders_path) %>
|
4
|
+
<span><%= t(:create) %></span>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<article>
|
8
|
+
<h1><%= t('.heading') %></h1>
|
9
|
+
|
10
|
+
<ul class="actions">
|
11
|
+
<% if @entity.parent.nil? %>
|
12
|
+
<li><%= return_icon(admin_media_folders_path) %></li>
|
13
|
+
<% else %>
|
14
|
+
<li><%= return_icon(admin_media_folder_path(@entity.parent_id)) %></li>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
<%= render partial: 'form', locals: { entity: @entity } %>
|
19
|
+
</article>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'media-folder-form' } %>
|
@@ -10,6 +10,9 @@
|
|
10
10
|
<meta name="description" content="<%= yield :meta_description %>" />
|
11
11
|
<meta property="og:description" content="<%= yield :meta_description %>" />
|
12
12
|
<% end %>
|
13
|
+
<% if content_for? :meta_keywords %>
|
14
|
+
<meta name="keywords" content="<%= yield :meta_keywords %>" />
|
15
|
+
<% end %>
|
13
16
|
<meta property="og:site_name" content="<%= t('.site_name') %>" />
|
14
17
|
<meta property="twitter:title" content="<%= content_for :meta_title %>" />
|
15
18
|
<meta name="twitter:site" content="<%= t('.twitter_site') %>" />
|
@@ -1,9 +1,9 @@
|
|
1
1
|
if collection.respond_to?(:current_page)
|
2
2
|
json.links do
|
3
|
-
json.self url_for(page: collection.current_page)
|
3
|
+
json.self url_for(page: collection.current_page, format: :json)
|
4
4
|
unless collection.next_page.nil?
|
5
|
-
json.next url_for(page: collection.next_page)
|
5
|
+
json.next url_for(page: collection.next_page, format: :json)
|
6
6
|
end
|
7
|
-
json.last url_for(page: collection.total_pages)
|
7
|
+
json.last url_for(page: collection.total_pages, format: :json)
|
8
8
|
end
|
9
9
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<div class="toggleable" data-url="<%= url %>">
|
2
|
+
<% entity.class.toggleable_attributes.each do |flag| %>
|
3
|
+
<span class="<%= entity.attributes[flag.to_s] ? 'active' : 'inactive' %>" data-flag="<%= flag %>">
|
4
|
+
<%= t("activerecord.attributes.#{entity.class.to_s.underscore}.#{flag}") %>
|
5
|
+
</span>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
@@ -1,12 +1,3 @@
|
|
1
|
-
|
2
|
-
<% content_for :meta_description, entity.description %>
|
3
|
-
<% content_for :meta_keywords, entity.keywords %>
|
4
|
-
<% content_for :meta_type_extension do %>
|
5
|
-
<meta property="og:article:published_time" content="<%= entity.created_at.strftime('%Y-%m-%d') %>"/>
|
6
|
-
<meta property="og:article:modified_time" content="<%= entity.updated_at.strftime('%Y-%m-%d') %>"/>
|
7
|
-
<% end %>
|
8
|
-
<% unless entity.image.blank? %>
|
9
|
-
<% content_for :meta_image, (request.protocol + request.host_with_port + entity.image.url) %>
|
10
|
-
<% end %>
|
1
|
+
<%= render partial: 'editable_pages/entity/metadata', locals: { entity: entity } %>
|
11
2
|
|
12
3
|
<%= raw entity.body %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<script>
|
2
|
+
'use strict';
|
3
|
+
document.addEventListener('DOMContentLoaded', function () {
|
4
|
+
const form = document.getElementById('<%= form_id %>');
|
5
|
+
const button = form.querySelector('button[type=submit]');
|
6
|
+
form.addEventListener('ajax:before', function() {
|
7
|
+
button.disabled = true;
|
8
|
+
});
|
9
|
+
form.addEventListener('ajax:complete', function() {
|
10
|
+
button.disabled = false;
|
11
|
+
});
|
12
|
+
});
|
13
|
+
</script>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
const form = document.getElementById('<%= form_id %>');
|
3
|
+
|
4
|
+
let errors = form.querySelector('ol.errors');
|
5
|
+
let data = '';
|
6
|
+
|
7
|
+
if (!errors) {
|
8
|
+
errors = document.createElement('ol');
|
9
|
+
errors.classList.add('errors');
|
10
|
+
}
|
11
|
+
|
12
|
+
<% entity.errors.full_messages.each do |message| %>
|
13
|
+
data += '<li><%= j message %></li>';
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
errors.innerHTML = data;
|
17
|
+
|
18
|
+
form.prepend(errors);
|
19
|
+
}
|