constructor-pages 0.9.1 → 1.0.0beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/constructor_pages/fields_controller.rb +11 -8
- data/app/controllers/constructor_pages/pages_controller.rb +9 -4
- data/app/controllers/constructor_pages/templates_controller.rb +9 -5
- data/app/helpers/constructor_pages/for_select.rb +13 -0
- data/app/helpers/constructor_pages/pages_helper.rb +1 -1
- data/app/helpers/constructor_pages/templates_helper.rb +1 -1
- data/app/models/constructor_pages/page.rb +1 -0
- data/app/models/constructor_pages/template.rb +1 -0
- data/app/models/constructor_pages/types/image_type.rb +1 -0
- data/app/views/constructor_pages/fields/_field.html.slim +6 -11
- data/app/views/constructor_pages/fields/_form.html.slim +16 -20
- data/app/views/constructor_pages/fields/edit.html.slim +2 -3
- data/app/views/constructor_pages/fields/new.html.slim +2 -3
- data/app/views/constructor_pages/fields/types/_float.html.slim +1 -1
- data/app/views/constructor_pages/fields/types/_image.html.slim +1 -2
- data/app/views/constructor_pages/fields/types/_integer.html.slim +1 -1
- data/app/views/constructor_pages/pages/_field.html.slim +3 -4
- data/app/views/constructor_pages/pages/_form.html.slim +79 -96
- data/app/views/constructor_pages/pages/edit.html.slim +3 -4
- data/app/views/constructor_pages/pages/index.html.slim +5 -28
- data/app/views/constructor_pages/pages/new.html.slim +2 -3
- data/app/views/constructor_pages/templates/_form.html.slim +22 -29
- data/app/views/constructor_pages/templates/edit.html.slim +2 -3
- data/app/views/constructor_pages/templates/index.html.slim +5 -26
- data/app/views/constructor_pages/templates/new.html.slim +2 -3
- data/app/views/pages/expand_node.slim +8 -0
- data/app/views/templates/expand_node.slim +8 -0
- data/config/locales/en.yml +1 -3
- data/config/locales/fr.yml +1 -3
- data/config/locales/ru.yml +1 -2
- data/config/routes.rb +16 -7
- data/spec/features/constructor_pages/fields_spec.rb +0 -6
- data/spec/features/constructor_pages/pages_spec.rb +1 -96
- data/spec/features/constructor_pages/templates_spec.rb +1 -63
- metadata +9 -8
- data/app/controllers/constructor_pages/application_controller.rb +0 -20
- data/app/helpers/constructor_pages/treeview_helper.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 076592077cf4756361ca5c20ab57059950ffc7f5
|
4
|
+
data.tar.gz: b6fdd943392882e13f845a80b61a02696a449230
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad18e8a26816becc289dd612ddd8270cdc3babacb8deb4b792f0e108e557fcec13138135b49fc1ab2cf4c430f3f97e17c0c8ef3ef36d579a36594cbb487577d3
|
7
|
+
data.tar.gz: 72d2db5db1bd322ec155f42e77284b1e952f002692f485f848a5b1ef34afa42d62c442abddc5cb342fce915ab9a1fb81776fe812ec0e4b36c710fe8f9ff9a0d8
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module ConstructorPages
|
4
|
-
class FieldsController < ApplicationController
|
4
|
+
class FieldsController < ConstructorCore::ApplicationController
|
5
|
+
include TheSortableTreeController::Rebuild
|
6
|
+
include TheSortableTreeController::ExpandNode
|
7
|
+
|
5
8
|
def new
|
6
9
|
@field = Field.new.tap {|f| @template = f.template = Template.find(params[:template_id])}
|
7
10
|
end
|
@@ -50,7 +53,13 @@ module ConstructorPages
|
|
50
53
|
redirect_to edit_template_url(template), notice: t(:field_success_removed, name: name)
|
51
54
|
end
|
52
55
|
|
53
|
-
|
56
|
+
def sortable_model
|
57
|
+
Field
|
58
|
+
end
|
59
|
+
|
60
|
+
def sortable_collection
|
61
|
+
ConstructorPages::Field
|
62
|
+
end
|
54
63
|
|
55
64
|
private
|
56
65
|
|
@@ -62,11 +71,5 @@ module ConstructorPages
|
|
62
71
|
:type_value
|
63
72
|
)
|
64
73
|
end
|
65
|
-
|
66
|
-
def move_to(to)
|
67
|
-
@field = Field.find(params[:id])
|
68
|
-
to == :up ? @field.move_higher : @field.move_lower
|
69
|
-
redirect_to :back, notice: t(:field_success_moved, name: @field.name)
|
70
|
-
end
|
71
74
|
end
|
72
75
|
end
|
@@ -1,15 +1,16 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module ConstructorPages
|
4
|
-
class PagesController < ApplicationController
|
5
|
-
|
4
|
+
class PagesController < ConstructorCore::ApplicationController
|
5
|
+
include TheSortableTreeController::Rebuild
|
6
|
+
include TheSortableTreeController::ExpandNode
|
6
7
|
|
7
|
-
|
8
|
+
layout 'constructor_core/application_core', except: [:show]
|
8
9
|
|
9
10
|
before_filter -> {@pages = Page.all}, only: [:new, :edit]
|
10
11
|
|
11
12
|
def index
|
12
|
-
@pages = Page.includes(:template)
|
13
|
+
@pages = Page.nested_set.roots.includes(:template)
|
13
14
|
@pages_cache = Digest::MD5.hexdigest(@pages.map{|p| [p.id, p.name, p.full_url, p.in_url, p.template.lft, p.lft, p.template_id]}.join)
|
14
15
|
@template_exists = Template.count != 0
|
15
16
|
flash[:notice] = 'Create at least one template' unless @template_exists
|
@@ -83,6 +84,10 @@ module ConstructorPages
|
|
83
84
|
redirect_to pages_path, notice: t(:page_success_removed, name: @page.name)
|
84
85
|
end
|
85
86
|
|
87
|
+
def sortable_model
|
88
|
+
Page
|
89
|
+
end
|
90
|
+
|
86
91
|
private
|
87
92
|
|
88
93
|
def page_params
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module ConstructorPages
|
4
|
-
class TemplatesController < ApplicationController
|
5
|
-
include
|
4
|
+
class TemplatesController < ConstructorCore::ApplicationController
|
5
|
+
include TheSortableTreeController::Rebuild
|
6
|
+
include TheSortableTreeController::ExpandNode
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
before_filter -> {@templates = Template.all}, only: [:index, :new, :edit, :update, :create]
|
8
|
+
before_filter -> {@templates = Template.all}, only: [:new, :edit, :update, :create]
|
10
9
|
|
11
10
|
def index
|
11
|
+
@templates = Template.roots
|
12
12
|
@templates_cache = Digest::MD5.hexdigest(@templates.map{|t| [t.id, t.name, t.lft]}.join)
|
13
13
|
end
|
14
14
|
|
@@ -52,6 +52,10 @@ module ConstructorPages
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
def sortable_model
|
56
|
+
Template
|
57
|
+
end
|
58
|
+
|
55
59
|
private
|
56
60
|
|
57
61
|
def template_params
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ConstructorPages
|
2
|
+
module ForSelect
|
3
|
+
def for_select(items, full_url = false)
|
4
|
+
result = []
|
5
|
+
items && items.each do |i|
|
6
|
+
arr = ["#{'--'*i.level} #{i.name}", i.id]
|
7
|
+
arr << {'data-full_url' => i.full_url} if full_url
|
8
|
+
result.push(arr)
|
9
|
+
end
|
10
|
+
result
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,11 +1,6 @@
|
|
1
|
-
.
|
2
|
-
= label_tag '', field.name, class: '
|
3
|
-
.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
i.icon-arrow-up
|
8
|
-
= link_to edit_template_field_path(field.template, field), class: 'btn btn-mini btn-primary' do
|
9
|
-
i.icon-pencil
|
10
|
-
= link_to [field.template, field], method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'btn btn-mini btn-danger' do
|
11
|
-
i.icon-remove
|
1
|
+
.b-form__row
|
2
|
+
= label_tag '', field.name, class: 'b-form__label'
|
3
|
+
= link_to edit_template_field_path(field.template, field), class: 'b-button b-button_size_small b-button_color_light' do
|
4
|
+
i.fa.fa-pencil
|
5
|
+
= link_to [field.template, field], method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'b-button b-button_size_small b-button_color_light' do
|
6
|
+
i.fa.fa-times
|
@@ -1,29 +1,25 @@
|
|
1
1
|
= form_for [@template, @field] do |f|
|
2
2
|
- if @field.errors.any?
|
3
|
-
.
|
3
|
+
.b-error
|
4
4
|
= link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
|
5
5
|
- @field.errors.full_messages.each do |m|
|
6
6
|
= m
|
7
7
|
|
8
|
-
.
|
9
|
-
.
|
10
|
-
|
11
|
-
.controls= f.text_field :name, class: 'span4'
|
8
|
+
.b-form__row
|
9
|
+
= f.label :name, class: 'b-form__label'
|
10
|
+
= f.text_field :name, class: 'b-form__field'
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
.b-form__row
|
13
|
+
= f.label :code_name, class: 'b-form__label'
|
14
|
+
= f.text_field :code_name, class: 'b-form__field'
|
15
|
+
= f.hidden_field :template_id, value: @template.id
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
= f.select :type_value, options_for_select(types_value, selected: @field.type_value), class: 'span4'
|
17
|
+
- unless @field.type_value == 'image'
|
18
|
+
.b-form__row
|
19
|
+
= f.label :type_value, class: 'b-form__label'
|
20
|
+
= f.select :type_value, options_for_select(types_value, selected: @field.type_value), class: 'b-form__field'
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
= link_to t(:cancel), edit_template_path(@template), class: 'btn'
|
29
|
-
= link_to t(:delete_field), [@template, @field], method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'btn btn-danger pull-right' unless @field.new_record?
|
22
|
+
.b-form__actions
|
23
|
+
= f.submit class: 'b-button'
|
24
|
+
= link_to t(:cancel), edit_template_path(@template), class: 'b-button b-button_color_light'
|
25
|
+
= link_to t(:delete_field), [@template, @field], method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'btn btn-danger pull-right' unless @field.new_record?
|
@@ -1 +1 @@
|
|
1
|
-
= number_field_tag "fields[#{field.code_name}]", page.get_field_value(field.code_name), class: '
|
1
|
+
= number_field_tag "fields[#{field.code_name}]", page.get_field_value(field.code_name), class: 'b-form__field', step: 'any'
|
@@ -1 +1 @@
|
|
1
|
-
= number_field_tag "fields[#{field.code_name}]", page.get_field_value(field.code_name), class: '
|
1
|
+
= number_field_tag "fields[#{field.code_name}]", page.get_field_value(field.code_name), class: 'b-form__field'
|
@@ -1,4 +1,3 @@
|
|
1
|
-
.
|
2
|
-
= label_tag "fields[#{field.code_name}]", field.name, class: '
|
3
|
-
.
|
4
|
-
= render "constructor_pages/fields/types/#{field.type_value}", field: field, page: @page
|
1
|
+
.b-form__row
|
2
|
+
= label_tag "fields[#{field.code_name}]", field.name, class: 'b-form__label'
|
3
|
+
= render "constructor_pages/fields/types/#{field.type_value}", field: field, page: @page
|
@@ -1,97 +1,80 @@
|
|
1
|
-
= form_for @page, html: {multipart: @page.multipart
|
1
|
+
= form_for @page, html: {multipart: @page.multipart?, class: 'b-form'} do |f|
|
2
2
|
- if @page.errors.any?
|
3
|
-
.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
=
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
.controls
|
82
|
-
= f.text_field :title, class: 'span9'
|
83
|
-
.control-group
|
84
|
-
= f.label :keywords, class: 'control-label'
|
85
|
-
.controls
|
86
|
-
= f.text_field :keywords, class: 'span9'
|
87
|
-
.control-group
|
88
|
-
= f.label :description, class: 'control-label'
|
89
|
-
.controls
|
90
|
-
= f.text_area :description, class: 'span9', rows: 8
|
91
|
-
|
92
|
-
.row-fluid
|
93
|
-
.span12
|
94
|
-
.form-actions
|
95
|
-
= f.submit class: 'btn btn-primary'
|
96
|
-
= link_to t(:cancel), pages_url, class: 'btn'
|
97
|
-
= link_to t(:delete_page), @page, method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'btn btn-danger pull-right' unless @page.new_record?
|
3
|
+
.b-error
|
4
|
+
= link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
|
5
|
+
- @page.errors.full_messages.each do |m|
|
6
|
+
= m
|
7
|
+
|
8
|
+
.b-form__row
|
9
|
+
= f.label :active, class: 'b-form__label'
|
10
|
+
= f.check_box :active
|
11
|
+
|
12
|
+
.b-form__row
|
13
|
+
= f.label :name, class: 'b-form__label'
|
14
|
+
= f.text_field :name, class: 'b-form__field'
|
15
|
+
|
16
|
+
.b-form__row.auto_url
|
17
|
+
= f.label :auto_url, class: 'b-form__label'
|
18
|
+
= f.check_box :auto_url
|
19
|
+
|
20
|
+
.b-form__row.url
|
21
|
+
= f.label :url, class: 'b-form__label'
|
22
|
+
.b-inline.b-full-url
|
23
|
+
span.b-full-url__path
|
24
|
+
= @page.parent.full_url if @page.parent
|
25
|
+
| /
|
26
|
+
span.b-full-url__url= @page.url
|
27
|
+
= f.text_field :url, class: 'b-form__field'
|
28
|
+
i.fa.fa-pencil.b-full-url__icon
|
29
|
+
|
30
|
+
= render partial: 'field', collection: @page.fields
|
31
|
+
|
32
|
+
.b-form__row
|
33
|
+
= f.label :parent_id, class: 'b-form__label'
|
34
|
+
= f.select :parent_id, options_for_select(for_select(@pages, true), selected: @parent_id), disabled: @page.self_and_descendants.map(&:id), include_blank: '--'
|
35
|
+
|
36
|
+
.b-form__row
|
37
|
+
= f.label :template_id, class: 'b-form__label'
|
38
|
+
= f.select :template_id, options_for_select(templates, selected: @template_id)
|
39
|
+
|
40
|
+
.b-form__row
|
41
|
+
= f.label :redirect, class: 'b-form__label'
|
42
|
+
= f.text_field :redirect, class: 'b-form__field'
|
43
|
+
|
44
|
+
.b-form__row
|
45
|
+
label.b-form__label
|
46
|
+
=t :display_in
|
47
|
+
|
48
|
+
label for='in_menu'
|
49
|
+
= f.check_box :in_menu
|
50
|
+
=t :menu
|
51
|
+
|
52
|
+
label for='in_map'
|
53
|
+
= f.check_box :in_map
|
54
|
+
=t :sitemap
|
55
|
+
|
56
|
+
label for='in_nav'
|
57
|
+
= f.check_box :in_nav
|
58
|
+
=t :breadcrumbs
|
59
|
+
|
60
|
+
label for='in_url'
|
61
|
+
= f.check_box :in_url
|
62
|
+
=t :url
|
63
|
+
|
64
|
+
.b-form__row
|
65
|
+
= f.label :title, class: 'b-form__label'
|
66
|
+
= f.text_field :title, class: 'b-form__field'
|
67
|
+
|
68
|
+
|
69
|
+
.b-form__row
|
70
|
+
= f.label :keywords, class: 'b-form__label'
|
71
|
+
= f.text_field :keywords, class: 'b-form__field'
|
72
|
+
|
73
|
+
.b-form__row
|
74
|
+
= f.label :description, class: 'b-form__label'
|
75
|
+
= f.text_area :description, class: 'b-form__field', rows: 8
|
76
|
+
|
77
|
+
.b-form__actions
|
78
|
+
= f.submit class: 'b-button'
|
79
|
+
= link_to t(:cancel), pages_url, class: 'b-button b-button_color_light'
|
80
|
+
= link_to t(:delete_page), @page, method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'b-button b-button_color_light g-float_right' unless @page.new_record?
|
@@ -1,31 +1,8 @@
|
|
1
|
-
-
|
2
|
-
=t :structure
|
3
|
-
|
4
|
-
- content_for :actions do
|
1
|
+
.l-pages
|
5
2
|
- if @template_exists
|
6
|
-
|
7
|
-
=
|
8
|
-
i.icon-plus>
|
9
|
-
=t :new_page
|
10
|
-
|
11
|
-
section.b-tree.span12
|
12
|
-
ul
|
13
|
-
- cache @pages_cache do
|
14
|
-
- @pages.each do |page|
|
15
|
-
li class="level#{page.level}"
|
16
|
-
- if page.published?
|
17
|
-
= link_to page.name, page.full_url, class: 'btn btn-link'
|
18
|
-
- else
|
19
|
-
button.btn.disabled= page.name
|
20
|
-
|
21
|
-
.b-tree__buttons
|
22
|
-
= arrow_buttons_for(page)
|
3
|
+
= link_to new_page_path, class: 'b-button' do
|
4
|
+
=t :new_page
|
23
5
|
|
24
|
-
= link_to edit_page_path(page), class: 'btn btn-primary btn-mini' do
|
25
|
-
i.icon-pencil>
|
26
|
-
=>t :edit
|
27
|
-
= page.template.to_accusative
|
28
6
|
|
29
|
-
|
30
|
-
|
31
|
-
=t :delete
|
7
|
+
ol.b-block.b-tree.g-out data-rebuild_url="#{rebuild_pages_path}" data-expand-node-url="#{expand_node_pages_path}" data-cookie-store='true'
|
8
|
+
= expandable_tree(@pages, title: :name)
|
@@ -1,37 +1,30 @@
|
|
1
|
-
= form_for @template do |f|
|
1
|
+
= form_for @template, html: {class: 'b-form'} do |f|
|
2
2
|
- if @template.errors.any?
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
- @template.errors.full_messages.each do |m|
|
7
|
-
= m
|
3
|
+
= link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
|
4
|
+
- @template.errors.full_messages.each do |m|
|
5
|
+
= m
|
8
6
|
|
9
|
-
.
|
10
|
-
.
|
11
|
-
|
12
|
-
.controls= f.text_field :name, class: 'span4'
|
7
|
+
.b-form__row
|
8
|
+
= f.label :name, class: 'b-form__label'
|
9
|
+
= f.text_field :name, class: 'b-form__field'
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
.b-form__row
|
12
|
+
= f.label :code_name, class: 'b-form__label'
|
13
|
+
= f.text_field :code_name, class: 'b-form__field'
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
= f.select :parent_id, options_for_select(for_select(@templates), selected: @template.parent_id), disabled: @template.self_and_descendants.map(&:id), include_blank: '--'
|
15
|
+
.b-form__row
|
16
|
+
= f.label :parent_id, class: 'b-form__label'
|
17
|
+
= f.select :parent_id, options_for_select(for_select(@templates), selected: @template.parent_id), disabled: @template.self_and_descendants.map(&:id), include_blank: '--'
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
=t :new_field
|
19
|
+
- unless @template.new_record?
|
20
|
+
.b-form__row
|
21
|
+
.b-form__label
|
22
|
+
= link_to new_template_field_path(@template), class: 'b-button b-button_color_light b-button_size_small' do
|
23
|
+
=t :new_field
|
29
24
|
|
30
25
|
= render @template.fields
|
31
26
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
= link_to t(:cancel), templates_url, class: 'btn'
|
37
|
-
= link_to t(:delete_template), @template, method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'btn btn-danger pull-right' unless @template.new_record?
|
27
|
+
.b-form__actions
|
28
|
+
= f.submit class: 'b-button'
|
29
|
+
= link_to t(:cancel), templates_url, class: 'b-button b-button_color_light'
|
30
|
+
= link_to t(:delete_template), @template, method: :delete, data: {confirm: t(:are_you_sure?)}, class: 'b-button b-button_color_light g-float_right' unless @template.new_record?
|
@@ -1,27 +1,6 @@
|
|
1
|
-
-
|
2
|
-
=
|
1
|
+
.l-pages
|
2
|
+
= link_to new_template_path, class: 'b-button' do
|
3
|
+
=t :new_template
|
3
4
|
|
4
|
-
-
|
5
|
-
|
6
|
-
= link_to new_template_path, class: 'btn btn-link btn-large' do
|
7
|
-
i.icon-plus>
|
8
|
-
=t :new_template
|
9
|
-
|
10
|
-
section.b-tree.span12
|
11
|
-
ul
|
12
|
-
- cache @templates_cache do
|
13
|
-
- @templates.each do |template|
|
14
|
-
li class="level#{template.level}"
|
15
|
-
button.btn.btn-link.disabled= template.name
|
16
|
-
|
17
|
-
.b-tree__buttons
|
18
|
-
= arrow_buttons_for(template)
|
19
|
-
|
20
|
-
= link_to edit_template_path(template), class: 'btn btn-primary btn-mini' do
|
21
|
-
i.icon-pencil>
|
22
|
-
=>t :edit
|
23
|
-
= t(:template).mb_chars.downcase
|
24
|
-
|
25
|
-
= link_to template, method: :delete, class: 'btn btn-danger btn-mini pull-right', data: {confirm: t(:are_you_sure?)} do
|
26
|
-
i.icon-remove>
|
27
|
-
=t :delete
|
5
|
+
ol.b-block.b-tree.g-out data-rebuild_url="#{rebuild_templates_path}" data-expand-node-url="#{expand_node_templates_path}" data-cookie-store='true'
|
6
|
+
= expandable_tree(@templates, title: :name)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
ol.b-tree__nested-set
|
2
|
+
- @children.each do |child|
|
3
|
+
li.b-tree__li data-node-id="#{ child.id }"
|
4
|
+
.b-tree__item
|
5
|
+
i.fa.fa-bars.b-tree__handle
|
6
|
+
- unless child.leaf?
|
7
|
+
i.fa.fa-plus-square-o.b-tree__expand.b-tree__plus
|
8
|
+
= link_to child.name, edit_page_path(child), class: 'b-tree__link'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
ol.b-tree__nested-set
|
2
|
+
- @children.each do |child|
|
3
|
+
li.b-tree__li data-node-id="#{ child.id }"
|
4
|
+
.b-tree__item
|
5
|
+
i.fa.fa-bars.b-tree__handle
|
6
|
+
- unless child.leaf?
|
7
|
+
i.fa.fa-plus-square-o.b-tree__expand.b-tree__plus
|
8
|
+
= link_to child.name, edit_template_path(child), class: 'b-tree__link'
|
data/config/locales/en.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
en:
|
2
|
-
|
2
|
+
pages: Pages
|
3
3
|
templates: Templates
|
4
4
|
settings: Settings
|
5
5
|
new_field: New field
|
@@ -30,8 +30,6 @@ en:
|
|
30
30
|
menu: Menu
|
31
31
|
breadcrumbs: Breadcrumbs
|
32
32
|
|
33
|
-
are_you_sure?: Are you sure?
|
34
|
-
|
35
33
|
page_not_found: Page not found
|
36
34
|
|
37
35
|
new_page: New page
|
data/config/locales/fr.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
fr:
|
2
|
-
|
2
|
+
pages: Pages
|
3
3
|
templates: Modèles
|
4
4
|
settings: Réglages
|
5
5
|
new_field: Nouveau champ
|
@@ -29,8 +29,6 @@ fr:
|
|
29
29
|
menu: Menu
|
30
30
|
breadcrumbs: Chapelure
|
31
31
|
|
32
|
-
are_you_sure?: Etes-vous sûr?
|
33
|
-
|
34
32
|
page_not_found: Page introuvable
|
35
33
|
|
36
34
|
new_page: Nouvelle page
|
data/config/locales/ru.yml
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
ru:
|
2
|
-
|
2
|
+
pages: Страницы
|
3
3
|
templates: Шаблоны
|
4
4
|
settings: Настройки
|
5
5
|
new_field: Новое поле
|
6
6
|
edit_field: Редактирование поля
|
7
7
|
seo: Поисковая оптимизация
|
8
|
-
are_you_sure?: Вы уверены?
|
9
8
|
display_in: Отображать в
|
10
9
|
delete: Удалить
|
11
10
|
url: "Адрес"
|
data/config/routes.rb
CHANGED
@@ -1,18 +1,27 @@
|
|
1
1
|
ConstructorPages::Engine.routes.draw do
|
2
2
|
scope '/admin' do
|
3
|
-
resources :pages, except: [:show]
|
3
|
+
resources :pages, except: [:show] do
|
4
|
+
collection do
|
5
|
+
post :rebuild
|
6
|
+
post :expand_node
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
resources :templates, except: [:show] do
|
5
|
-
|
6
|
-
|
11
|
+
collection do
|
12
|
+
post :rebuild
|
13
|
+
post :expand_node
|
14
|
+
end
|
7
15
|
|
8
|
-
|
9
|
-
|
10
|
-
|
16
|
+
resources :fields, except: [:show, :index] do
|
17
|
+
collection do
|
18
|
+
post :rebuild
|
19
|
+
end
|
11
20
|
end
|
12
21
|
end
|
13
22
|
end
|
14
23
|
|
15
|
-
root :
|
24
|
+
root to: 'pages#show'
|
16
25
|
|
17
26
|
get '*all(.:format)' => 'pages#show', format: /(html|json|xml)/
|
18
27
|
end
|
@@ -47,12 +47,6 @@ module ConstructorPages
|
|
47
47
|
find("a[href='#{pages.template_field_path(@template, @content_field)}']").should be_true
|
48
48
|
find("a[href='#{pages.template_field_path(@template, @price_field)}']").should be_true
|
49
49
|
end
|
50
|
-
|
51
|
-
it 'should has move field link' do
|
52
|
-
visit pages.edit_template_path(@template)
|
53
|
-
find("a[href='#{pages.field_move_down_path(@content_field)}']").should be_true
|
54
|
-
find("a[href='#{pages.field_move_up_path(@price_field)}']").should be_true
|
55
|
-
end
|
56
50
|
end
|
57
51
|
|
58
52
|
describe 'New field' do
|
@@ -66,13 +66,7 @@ module ConstructorPages
|
|
66
66
|
it 'should has edit_page link' do
|
67
67
|
_page = Page.create name: 'Zanussi'
|
68
68
|
visit pages.pages_path
|
69
|
-
page.should have_link '
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'should has delete_page link' do
|
73
|
-
_page = Page.create name: 'Zanussi'
|
74
|
-
visit pages.pages_path
|
75
|
-
page.should have_link 'Delete', pages.page_path(_page)
|
69
|
+
page.should have_link 'Zanussi', pages.edit_page_path(_page)
|
76
70
|
end
|
77
71
|
end
|
78
72
|
|
@@ -111,52 +105,6 @@ module ConstructorPages
|
|
111
105
|
end
|
112
106
|
end
|
113
107
|
|
114
|
-
describe 'Moving' do
|
115
|
-
it 'should move page' do
|
116
|
-
_page_first = Page.create name: 'First'
|
117
|
-
_page_second = Page.create name: 'Second'
|
118
|
-
_page_third = Page.create name: 'Third'
|
119
|
-
|
120
|
-
_page_first.left_sibling.should be_nil
|
121
|
-
_page_first.right_sibling.should == _page_second
|
122
|
-
|
123
|
-
_page_second.left_sibling.should == _page_first
|
124
|
-
_page_second.right_sibling.should == _page_third
|
125
|
-
|
126
|
-
_page_third.left_sibling.should == _page_second
|
127
|
-
_page_third.right_sibling.should be_nil
|
128
|
-
|
129
|
-
visit pages.pages_path
|
130
|
-
find("a[href='#{pages.page_move_down_path(_page_first.id)}']").click
|
131
|
-
|
132
|
-
_page_first.reload
|
133
|
-
_page_first.left_sibling.should == _page_second
|
134
|
-
_page_first.right_sibling.should == _page_third
|
135
|
-
|
136
|
-
_page_second.reload
|
137
|
-
_page_second.left_sibling.should be_nil
|
138
|
-
_page_second.right_sibling.should == _page_first
|
139
|
-
|
140
|
-
_page_third.reload
|
141
|
-
_page_third.left_sibling.should == _page_first
|
142
|
-
_page_third.right_sibling.should be_nil
|
143
|
-
|
144
|
-
find("a[href='#{pages.page_move_up_path(_page_third.id)}']").click
|
145
|
-
|
146
|
-
_page_first.reload
|
147
|
-
_page_first.left_sibling.should == _page_third
|
148
|
-
_page_first.right_sibling.should be_nil
|
149
|
-
|
150
|
-
_page_second.reload
|
151
|
-
_page_second.left_sibling.should be_nil
|
152
|
-
_page_second.right_sibling.should == _page_third
|
153
|
-
|
154
|
-
_page_third.reload
|
155
|
-
_page_third.left_sibling.should == _page_second
|
156
|
-
_page_third.right_sibling.should == _page_first
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
108
|
describe 'New page' do
|
161
109
|
describe 'Access' do
|
162
110
|
it 'should be accessed by new_page_path if logged in' do
|
@@ -257,52 +205,9 @@ module ConstructorPages
|
|
257
205
|
@page.description.should == 'Zanussi conditioners Voronezh'
|
258
206
|
page.should have_text 'updated successfully'
|
259
207
|
end
|
260
|
-
|
261
|
-
describe 'regenerate descendants' do
|
262
|
-
before :each do
|
263
|
-
_template = Template.create name: 'Another page', code_name: 'another_page'
|
264
|
-
_page_first = Page.create name: 'First', template: _template
|
265
|
-
_page_second = Page.create name: 'Second', parent_id: _page_first.id, template: _template
|
266
|
-
_page_third = Page.create name: 'Third', parent_id: _page_second.id, template: _template
|
267
|
-
|
268
|
-
visit pages.pages_path
|
269
|
-
page.should have_link('First', '/first')
|
270
|
-
page.should have_link('Second', '/first/second')
|
271
|
-
page.should have_link('Third', '/first/second/third')
|
272
|
-
|
273
|
-
visit pages.edit_page_path(_page_first)
|
274
|
-
end
|
275
|
-
|
276
|
-
it 'should regenerate full_url of descendants without url if full_url or in_url changed' do
|
277
|
-
uncheck 'URL'
|
278
|
-
click_button 'Update Page'
|
279
|
-
|
280
|
-
page.should have_link('First', '/first')
|
281
|
-
page.should have_link('Second', '/second')
|
282
|
-
page.should have_link('Third', '/second/third')
|
283
|
-
end
|
284
|
-
|
285
|
-
it 'should regenerate full_url of descendants with url if full_url or in_url changed' do
|
286
|
-
uncheck 'URL'
|
287
|
-
click_button 'Update Page'
|
288
|
-
|
289
|
-
page.should have_link('First', '/first')
|
290
|
-
page.should have_link('Second', '/first/second')
|
291
|
-
page.should have_link('Third', '/first/second/third')
|
292
|
-
end
|
293
|
-
end
|
294
208
|
end
|
295
209
|
|
296
210
|
describe 'Delete page' do
|
297
|
-
it 'should delete from pages index' do
|
298
|
-
Page.create name: 'Page'
|
299
|
-
visit pages.pages_path
|
300
|
-
Page.count.should == 1
|
301
|
-
click_link 'Delete'
|
302
|
-
Page.count.should == 0
|
303
|
-
page.should have_text 'removed successfully'
|
304
|
-
end
|
305
|
-
|
306
211
|
it 'should delete from page' do
|
307
212
|
_page = Page.create name: 'Page'
|
308
213
|
visit pages.edit_page_path(_page)
|
@@ -51,60 +51,7 @@ module ConstructorPages
|
|
51
51
|
it 'should has edit_template link' do
|
52
52
|
_template = Template.create name: 'Page', code_name: 'page'
|
53
53
|
visit pages.templates_path
|
54
|
-
page.should have_link '
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should has delete_page link' do
|
58
|
-
_template = Template.create name: 'Page', code_name: 'page'
|
59
|
-
visit pages.templates_path
|
60
|
-
page.should have_link 'Delete', pages.template_path(_template)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe 'Moving' do
|
65
|
-
it 'should move template' do
|
66
|
-
_template_first = Template.create name: 'First', code_name: 'first'
|
67
|
-
_template_second = Template.create name: 'Second', code_name: 'second'
|
68
|
-
_template_third = Template.create name: 'Third', code_name: 'third'
|
69
|
-
|
70
|
-
_template_first.left_sibling.should be_nil
|
71
|
-
_template_first.right_sibling.should == _template_second
|
72
|
-
|
73
|
-
_template_second.left_sibling.should == _template_first
|
74
|
-
_template_second.right_sibling.should == _template_third
|
75
|
-
|
76
|
-
_template_third.left_sibling.should == _template_second
|
77
|
-
_template_third.right_sibling.should be_nil
|
78
|
-
|
79
|
-
visit pages.templates_path
|
80
|
-
|
81
|
-
find("a[href='#{pages.template_move_down_path(_template_first.id)}']").click
|
82
|
-
|
83
|
-
_template_first.reload
|
84
|
-
_template_first.left_sibling.should == _template_second
|
85
|
-
_template_first.right_sibling.should == _template_third
|
86
|
-
|
87
|
-
_template_second.reload
|
88
|
-
_template_second.left_sibling.should be_nil
|
89
|
-
_template_second.right_sibling.should == _template_first
|
90
|
-
|
91
|
-
_template_third.reload
|
92
|
-
_template_third.left_sibling.should == _template_first
|
93
|
-
_template_third.right_sibling.should be_nil
|
94
|
-
|
95
|
-
find("a[href='#{pages.template_move_up_path(_template_third.id)}']").click
|
96
|
-
|
97
|
-
_template_first.reload
|
98
|
-
_template_first.left_sibling.should == _template_third
|
99
|
-
_template_first.right_sibling.should be_nil
|
100
|
-
|
101
|
-
_template_second.reload
|
102
|
-
_template_second.left_sibling.should be_nil
|
103
|
-
_template_second.right_sibling.should == _template_third
|
104
|
-
|
105
|
-
_template_third.reload
|
106
|
-
_template_third.left_sibling.should == _template_second
|
107
|
-
_template_third.right_sibling.should == _template_first
|
54
|
+
page.should have_link 'Page', pages.edit_template_path(_template)
|
108
55
|
end
|
109
56
|
end
|
110
57
|
|
@@ -234,15 +181,6 @@ module ConstructorPages
|
|
234
181
|
end
|
235
182
|
|
236
183
|
describe 'Delete template' do
|
237
|
-
it 'should delete from templates index' do
|
238
|
-
Template.create name: 'Page', code_name: 'page'
|
239
|
-
visit pages.templates_path
|
240
|
-
Template.count.should == 1
|
241
|
-
click_link 'Delete'
|
242
|
-
Template.count.should == 0
|
243
|
-
page.should have_text 'removed successfully'
|
244
|
-
end
|
245
|
-
|
246
184
|
it 'should delete from template' do
|
247
185
|
_template = Template.create name: 'Page', code_name: 'page'
|
248
186
|
visit pages.edit_template_path(_template)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: constructor-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Zotov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: constructor-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 1.0.0beta1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 1.0.0beta1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dragonfly
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,15 +122,14 @@ files:
|
|
122
122
|
- app/assets/javascripts/constructor_pages/.keep
|
123
123
|
- app/assets/javascripts/constructor_pages/urlify.js
|
124
124
|
- app/assets/stylesheets/constructor_pages/.keep
|
125
|
-
- app/controllers/constructor_pages/application_controller.rb
|
126
125
|
- app/controllers/constructor_pages/fields_controller.rb
|
127
126
|
- app/controllers/constructor_pages/pages_controller.rb
|
128
127
|
- app/controllers/constructor_pages/templates_controller.rb
|
129
128
|
- app/helpers/constructor_pages/code_name_uniq.rb
|
130
129
|
- app/helpers/constructor_pages/fields_helper.rb
|
130
|
+
- app/helpers/constructor_pages/for_select.rb
|
131
131
|
- app/helpers/constructor_pages/pages_helper.rb
|
132
132
|
- app/helpers/constructor_pages/templates_helper.rb
|
133
|
-
- app/helpers/constructor_pages/treeview_helper.rb
|
134
133
|
- app/models/constructor_pages/field.rb
|
135
134
|
- app/models/constructor_pages/page.rb
|
136
135
|
- app/models/constructor_pages/template.rb
|
@@ -163,6 +162,8 @@ files:
|
|
163
162
|
- app/views/constructor_pages/templates/edit.html.slim
|
164
163
|
- app/views/constructor_pages/templates/index.html.slim
|
165
164
|
- app/views/constructor_pages/templates/new.html.slim
|
165
|
+
- app/views/pages/expand_node.slim
|
166
|
+
- app/views/templates/expand_node.slim
|
166
167
|
- config/initializers/dragonfly.rb
|
167
168
|
- config/locales/en.yml
|
168
169
|
- config/locales/fr.yml
|
@@ -217,9 +218,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
218
|
version: '0'
|
218
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
220
|
requirements:
|
220
|
-
- - '
|
221
|
+
- - '>'
|
221
222
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
223
|
+
version: 1.3.1
|
223
224
|
requirements: []
|
224
225
|
rubyforge_project:
|
225
226
|
rubygems_version: 2.1.11
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module ConstructorPages
|
4
|
-
class ApplicationController < ConstructorCore::ApplicationController
|
5
|
-
def self.movable(what)
|
6
|
-
%w{up down}.each {|m| define_method "move_#{m}" do move_to what, params[:id], m.to_sym end}
|
7
|
-
end
|
8
|
-
|
9
|
-
def move_to(what, id, to)
|
10
|
-
from = ('constructor_pages/'+what.to_s).classify.constantize.find(id)
|
11
|
-
to_sibling = to == :up ? from.left_sibling : from.right_sibling
|
12
|
-
|
13
|
-
if not to_sibling.nil? and from.move_possible?(to_sibling)
|
14
|
-
to == :up ? from.move_left : from.move_right
|
15
|
-
end
|
16
|
-
|
17
|
-
redirect_to :back
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module ConstructorPages
|
2
|
-
module TreeviewHelper
|
3
|
-
def arrow_buttons_for(item)
|
4
|
-
output = "<div class='btn-group'>"
|
5
|
-
|
6
|
-
{down: :right, up: :left}.each_pair do |a, b|
|
7
|
-
sibling = item.send(b.to_s+'_sibling')
|
8
|
-
if sibling and item.move_possible?(sibling)
|
9
|
-
output += link_to("<i class='icon-arrow-#{a}'></i>".html_safe, "/admin/#{item.class.to_s.demodulize.downcase.pluralize}/move/#{a}/#{item.id}", class: 'btn btn-mini')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
output += "</div>"
|
14
|
-
output.html_safe
|
15
|
-
end
|
16
|
-
|
17
|
-
def for_select(items, full_url = false)
|
18
|
-
result = []
|
19
|
-
items && items.each do |i|
|
20
|
-
arr = ["#{'--'*i.level} #{i.name}", i.id]
|
21
|
-
arr << {'data-full_url' => i.full_url} if full_url
|
22
|
-
result.push(arr)
|
23
|
-
end
|
24
|
-
result
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|