constructor-pages 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/constructor_pages/arrow_down.png +0 -0
- data/app/assets/images/constructor_pages/arrow_up.png +0 -0
- data/app/assets/images/constructor_pages/information.png +0 -0
- data/app/assets/images/constructor_pages/page_white_edit.png +0 -0
- data/app/assets/images/constructor_pages/photos.png +0 -0
- data/app/controllers/constructor_pages/fields_controller.rb +60 -0
- data/app/controllers/constructor_pages/pages_controller.rb +207 -0
- data/app/controllers/constructor_pages/templates_controller.rb +71 -0
- data/app/helpers/constructor_pages/fields_helper.rb +18 -0
- data/app/helpers/constructor_pages/pages_helper.rb +15 -0
- data/app/helpers/constructor_pages/templates_helper.rb +11 -0
- data/app/models/constructor_pages/field.rb +60 -0
- data/app/models/constructor_pages/page.rb +117 -0
- data/app/models/constructor_pages/template.rb +30 -0
- data/app/models/constructor_pages/types/boolean_type.rb +12 -0
- data/app/models/constructor_pages/types/date_type.rb +16 -0
- data/app/models/constructor_pages/types/float_type.rb +12 -0
- data/app/models/constructor_pages/types/html_type.rb +12 -0
- data/app/models/constructor_pages/types/image_type.rb +18 -0
- data/app/models/constructor_pages/types/integer_type.rb +12 -0
- data/app/models/constructor_pages/types/string_type.rb +12 -0
- data/app/models/constructor_pages/types/text_type.rb +12 -0
- data/app/views/constructor_pages/fields/_form.haml +28 -0
- data/app/views/constructor_pages/fields/edit.haml +6 -0
- data/app/views/constructor_pages/fields/new.haml +6 -0
- data/app/views/constructor_pages/fields/types/_boolean.haml +1 -0
- data/app/views/constructor_pages/fields/types/_date.haml +1 -0
- data/app/views/constructor_pages/fields/types/_float.haml +1 -0
- data/app/views/constructor_pages/fields/types/_html.haml +1 -0
- data/app/views/constructor_pages/fields/types/_image.haml +4 -0
- data/app/views/constructor_pages/fields/types/_integer.haml +1 -0
- data/app/views/constructor_pages/fields/types/_string.haml +1 -0
- data/app/views/constructor_pages/fields/types/_text.haml +1 -0
- data/app/views/constructor_pages/pages/_breadcrumbs.haml +7 -0
- data/app/views/constructor_pages/pages/_form.haml +98 -0
- data/app/views/constructor_pages/pages/_menu.haml +8 -0
- data/app/views/constructor_pages/pages/_submenu.haml +6 -0
- data/app/views/constructor_pages/pages/edit.haml +6 -0
- data/app/views/constructor_pages/pages/error_404.haml +23 -0
- data/app/views/constructor_pages/pages/index.haml +50 -0
- data/app/views/constructor_pages/pages/new.haml +6 -0
- data/app/views/constructor_pages/pages/show.haml +5 -0
- data/app/views/constructor_pages/pages/sitemap.haml +12 -0
- data/app/views/constructor_pages/templates/_form.haml +48 -0
- data/app/views/constructor_pages/templates/edit.haml +6 -0
- data/app/views/constructor_pages/templates/index.haml +38 -0
- data/app/views/constructor_pages/templates/new.haml +6 -0
- data/config/initializers/dragonfly.rb +9 -0
- data/config/locales/ru.yml +39 -0
- data/config/routes.rb +34 -0
- data/constructor-pages.gemspec +21 -0
- data/db/migrate/10_create_html_types.rb +15 -0
- data/db/migrate/11_create_image_types.rb +16 -0
- data/db/migrate/12_add_default_template.rb +13 -0
- data/db/migrate/1_create_pages.rb +27 -0
- data/db/migrate/2_create_templates.rb +18 -0
- data/db/migrate/3_create_fields.rb +17 -0
- data/db/migrate/4_create_string_types.rb +15 -0
- data/db/migrate/5_create_float_types.rb +15 -0
- data/db/migrate/6_create_boolean_types.rb +15 -0
- data/db/migrate/7_create_integer_types.rb +15 -0
- data/db/migrate/8_create_text_types.rb +15 -0
- data/db/migrate/9_create_date_types.rb +15 -0
- data/lib/constructor-pages.rb +7 -0
- data/lib/constructor_pages/engine.rb +6 -0
- data/public/hello.txt +1 -0
- data/spec/factories.rb +7 -0
- data/spec/models/page_model_spec.rb +113 -0
- metadata +210 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
!!!
|
2
|
+
%html{'class' => 'no-js', 'lang' => 'en'}
|
3
|
+
%head
|
4
|
+
%meta{'charset' => 'utf-8'}/
|
5
|
+
%meta{'http-equiv' => 'X-UA-Compatible', 'content' => 'IE=edge,chrome=1'}/
|
6
|
+
%title Страница не найдена
|
7
|
+
|
8
|
+
= stylesheet_link_tag 'styles'
|
9
|
+
= csrf_meta_tag
|
10
|
+
= favicon_link_tag
|
11
|
+
|
12
|
+
%body
|
13
|
+
.b-error-404
|
14
|
+
%h1.b-error-404__h1 Ошибка 404
|
15
|
+
%p.b-error-404__text
|
16
|
+
Не правильно набран адрес,
|
17
|
+
%br/
|
18
|
+
или такой страницы на сайте больше не существует.
|
19
|
+
%p
|
20
|
+
= link_to "Главная страница сайта", '/', :class => "b-error-404__link-home"
|
21
|
+
//%br/
|
22
|
+
//= link_to "Карта сайта", "/sitemap"
|
23
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
- content_for :page_title do
|
2
|
+
Структура
|
3
|
+
|
4
|
+
- content_for :actions do
|
5
|
+
.span4.clearfix.text-right
|
6
|
+
= link_to "<i class='icon-plus icon-white'></i>".html_safe, pages.new_page_path, :class => "btn btn-success"
|
7
|
+
|
8
|
+
%section.span8
|
9
|
+
%ul#tree.treeview-gray
|
10
|
+
- @roots.each do |root|
|
11
|
+
- level = root.level
|
12
|
+
- last_page = nil
|
13
|
+
|
14
|
+
- root.self_and_descendants.each do |page|
|
15
|
+
- if page.level > level
|
16
|
+
<ul>
|
17
|
+
- elsif page.level < level
|
18
|
+
</li>
|
19
|
+
= raw "</ul></li>" * (level-page.level)
|
20
|
+
- elsif !page.root?
|
21
|
+
</li>
|
22
|
+
|
23
|
+
<li>
|
24
|
+
- if page.active == true
|
25
|
+
= link_to page.name, page.full_url, :class => "btn"
|
26
|
+
- else
|
27
|
+
%button.btn.disabled= page.name
|
28
|
+
|
29
|
+
.btn-group
|
30
|
+
- if not page.right_sibling.nil? and page.move_possible?(page.right_sibling)
|
31
|
+
= link_to "<i class='icon-arrow-down'></i>".html_safe, page_move_down_path(page), :method => :post, :class => "btn btn-mini"
|
32
|
+
- if not page.left_sibling.nil? and page.move_possible?(page.left_sibling)
|
33
|
+
= link_to "<i class='icon-arrow-up'></i>".html_safe, page_move_up_path(page), :method => :post, :class => "btn btn-mini"
|
34
|
+
|
35
|
+
= link_to "<i class='icon-pencil icon-white'></i>".html_safe, edit_page_path(page), :class => "btn btn-primary btn-mini"
|
36
|
+
|
37
|
+
- unless page.template.nil?
|
38
|
+
- if page.template.child_id.nil?
|
39
|
+
- if !page.template.leaf?
|
40
|
+
= link_to "<i class='icon-plus icon-white'></i> #{page.template.descendants.first.name}".html_safe, new_child_page_path(page), :class => "btn btn-success btn-mini"
|
41
|
+
- else
|
42
|
+
= link_to "<i class='icon-plus icon-white'></i> #{ConstructorPages::Template.find(page.template.child_id).name}".html_safe, new_child_page_path(page), :class => "btn btn-success btn-mini"
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
- level = page.level
|
48
|
+
- last_page = page
|
49
|
+
</li>
|
50
|
+
= raw "</ul></li>" * last_page.level
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- content_for :header do
|
2
|
+
= @title
|
3
|
+
.sitemap
|
4
|
+
%p
|
5
|
+
%ul
|
6
|
+
- @pages.each do |page|
|
7
|
+
- if page.active and page.in_map
|
8
|
+
%li{:class => "level#{page.level}"}
|
9
|
+
- if page.link.empty?
|
10
|
+
= link_to page.name, page.full_url
|
11
|
+
- else
|
12
|
+
= link_to page.name, page.link
|
@@ -0,0 +1,48 @@
|
|
1
|
+
= form_for @template do |f|
|
2
|
+
- if @template.errors.any?
|
3
|
+
.alert.alert-error.fade.in.span12
|
4
|
+
= link_to "×", "#", :class => "close", 'data-dismiss' => 'alert'
|
5
|
+
- @template.errors.full_messages.each do |m|
|
6
|
+
= m
|
7
|
+
|
8
|
+
.form-horizontal
|
9
|
+
.control-group
|
10
|
+
= f.label :name, :class => 'control-label'
|
11
|
+
.controls= f.text_field :name, :class => "span4"
|
12
|
+
|
13
|
+
.control-group
|
14
|
+
= f.label :code_name, :class => 'control-label'
|
15
|
+
.controls= f.text_field :code_name, :class => "span4"
|
16
|
+
|
17
|
+
.control-group
|
18
|
+
= f.label :parent, :class => 'control-label'
|
19
|
+
.controls
|
20
|
+
= f.select :parent_id, options_for_select(for_select(@roots), :selected => @template.parent_id), :include_blank => 'Нет'
|
21
|
+
|
22
|
+
.control-group
|
23
|
+
= f.label :child, :class => 'control-label'
|
24
|
+
.controls
|
25
|
+
= f.select :child_id, options_for_select(for_select(@roots), :selected => @template.child_id), :include_blank => 'Нет'
|
26
|
+
|
27
|
+
- unless @template.new_record?
|
28
|
+
.control-group
|
29
|
+
.controls
|
30
|
+
= link_to "<i class='icon-plus icon-white'></i> Добавить поле".html_safe, new_field_path(@template.id), :class => "btn btn-mini btn-success"
|
31
|
+
|
32
|
+
- @template.fields.each do |field|
|
33
|
+
.control-group
|
34
|
+
= label_tag "", field.name, :class => 'control-label'
|
35
|
+
.controls
|
36
|
+
= link_to "<i class='icon-arrow-down'></i>".html_safe, field_move_down_path(field), :class => "btn btn-mini #{"disabled" if field.last?}"
|
37
|
+
= link_to "<i class='icon-arrow-up'></i>".html_safe, field_move_up_path(field), :class => "btn btn-mini #{"disabled" if field.first?}"
|
38
|
+
|
39
|
+
= link_to "<i class='icon-pencil icon-white'></i>".html_safe, edit_field_path(field, field.template), :class => "btn btn-mini btn-primary"
|
40
|
+
= link_to "<i class='icon-remove icon-white'></i>".html_safe, field_path(field), :method => :delete, :confirm => "Вы уверены?", :class => "btn btn-mini btn-danger"
|
41
|
+
|
42
|
+
.row-fluid
|
43
|
+
.span12
|
44
|
+
.form-actions
|
45
|
+
.btn-group
|
46
|
+
= f.submit :class => "btn btn-primary"
|
47
|
+
= link_to "Отмена", templates_url, :class => "btn"
|
48
|
+
= link_to "Удалить шаблон", @template, :confirm => 'Вы уверены?', :method => :delete, :class => "btn btn-danger pull-right" unless @template.new_record?
|
@@ -0,0 +1,38 @@
|
|
1
|
+
- content_for :page_title do
|
2
|
+
Шаблоны
|
3
|
+
|
4
|
+
- content_for :actions do
|
5
|
+
.span4.clearfix.text-right
|
6
|
+
= link_to 'Создать шаблон', new_template_path, :class => "btn btn-success btn-large"
|
7
|
+
|
8
|
+
%section.span8
|
9
|
+
%ul#tree.treeview-gray
|
10
|
+
- @roots.each do |root|
|
11
|
+
- level = root.level
|
12
|
+
- last_template = nil
|
13
|
+
|
14
|
+
- root.self_and_descendants.each do |template|
|
15
|
+
- if template.level > level
|
16
|
+
<ul>
|
17
|
+
- elsif template.level < level
|
18
|
+
</li>
|
19
|
+
= raw "</ul></li>" * (level-template.level)
|
20
|
+
- elsif !template.root?
|
21
|
+
</li>
|
22
|
+
|
23
|
+
<li>
|
24
|
+
%button.btn.disabled= template.name
|
25
|
+
|
26
|
+
.btn-group
|
27
|
+
- if not template.right_sibling.nil? and template.move_possible?(template.right_sibling)
|
28
|
+
= link_to "<i class='icon-arrow-down'></i>".html_safe, template_move_down_path(template), :method => :post, :class => "btn btn-mini"
|
29
|
+
- if not template.left_sibling.nil? and template.move_possible?(template.left_sibling)
|
30
|
+
= link_to "<i class='icon-arrow-up'></i>".html_safe, template_move_up_path(template), :method => :post, :class => "btn btn-mini"
|
31
|
+
|
32
|
+
= link_to "<i class='icon-pencil icon-white'></i>".html_safe, edit_template_path(template), :class => "btn btn-primary btn-mini"
|
33
|
+
|
34
|
+
|
35
|
+
- level = template.level
|
36
|
+
- last_template = template
|
37
|
+
</li>
|
38
|
+
= raw "</ul></li>" * last_template.level
|
@@ -0,0 +1,39 @@
|
|
1
|
+
ru:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
constructor_pages/field:
|
5
|
+
name: "Название"
|
6
|
+
code_name: "Кодовое имя"
|
7
|
+
type_value: "Тип"
|
8
|
+
constructor_pages/template:
|
9
|
+
name: "Название"
|
10
|
+
code_name: "Кодовое имя"
|
11
|
+
parent: "Родительский"
|
12
|
+
child: "Дочерний"
|
13
|
+
constructor_pages/page:
|
14
|
+
active: "Вкл./Выкл."
|
15
|
+
image: "Изображение"
|
16
|
+
name: "Название"
|
17
|
+
template: "Шаблон"
|
18
|
+
auto_url: "Авто-ссылка"
|
19
|
+
url: "Адрес"
|
20
|
+
in_menu: "Меню"
|
21
|
+
in_nav: "Хлебные крошки"
|
22
|
+
in_map: "Карта сайта"
|
23
|
+
parent: "Родитель"
|
24
|
+
parent_id: "Родительская страница"
|
25
|
+
link: "Ссылка"
|
26
|
+
title: "Заголовок"
|
27
|
+
keywords: "Ключевые слова"
|
28
|
+
description: "Описание"
|
29
|
+
errors:
|
30
|
+
models:
|
31
|
+
constructor_pages/image:
|
32
|
+
incorrect_size: "не может превышать 5MB"
|
33
|
+
incorrect_format: "должно быть в формате jpg, png или gif"
|
34
|
+
constructor_pages/page:
|
35
|
+
attributes:
|
36
|
+
title:
|
37
|
+
blank: "не может быть пустым"
|
38
|
+
url:
|
39
|
+
blank: "не может быть пустой"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
ConstructorPages::Engine.routes.draw do
|
2
|
+
scope '/admin' do
|
3
|
+
resources :pages, :except => [:show]
|
4
|
+
resources :templates, :except => [:show]
|
5
|
+
resources :fields, :except => [:show, :new, :edit]
|
6
|
+
|
7
|
+
scope '/fields' do
|
8
|
+
get ':template_id/new/' => 'fields#new', :as => :new_field
|
9
|
+
get ':id/:template_id/edit/' => 'fields#edit', :as => :edit_field
|
10
|
+
|
11
|
+
get 'move/up/:id' => "fields#move_up", :as => :field_move_up
|
12
|
+
get 'move/down/:id' => "fields#move_down", :as => :field_move_down
|
13
|
+
end
|
14
|
+
|
15
|
+
scope '/pages' do
|
16
|
+
post 'move/up/:id' => "pages#move_up", :as => :page_move_up
|
17
|
+
post 'move/down/:id' => "pages#move_down", :as => :page_move_down
|
18
|
+
|
19
|
+
get ':page/new' => "pages#new", :as => :new_child_page
|
20
|
+
end
|
21
|
+
|
22
|
+
scope '/templates' do
|
23
|
+
post 'move/up/:id' => "templates#move_up", :as => :template_move_up
|
24
|
+
post 'move/down/:id' => "templates#move_down", :as => :template_move_down
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
get '/sitemap' => "pages#sitemap", :as => :sitemap
|
29
|
+
|
30
|
+
root :to => "pages#show"
|
31
|
+
get '*all/search/:what_search' => "pages#search", :format => false
|
32
|
+
get '*all.:format' => "pages#show"
|
33
|
+
get '*all' => "pages#show"
|
34
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.platform = Gem::Platform::RUBY
|
5
|
+
s.name = %q{constructor-pages}
|
6
|
+
s.version = '0.2.1'
|
7
|
+
s.summary = %q{Pages for ConstructorCms}
|
8
|
+
s.authors = ['Ivan Zotov']
|
9
|
+
s.require_paths = %w(lib)
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
13
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
14
|
+
|
15
|
+
s.add_dependency 'dragonfly'
|
16
|
+
s.add_dependency 'rack-cache'
|
17
|
+
s.add_dependency 'awesome_nested_set', '~> 2.0'
|
18
|
+
s.add_dependency 'haml-rails'
|
19
|
+
s.add_dependency 'russian', '~> 0.6.0'
|
20
|
+
s.add_dependency 'RedCloth'
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateHtmlTypes < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table ConstructorPages::Types::HtmlType.table_name do |t|
|
4
|
+
t.text :value, :default => ""
|
5
|
+
t.references :field
|
6
|
+
t.references :page
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table ConstructorPages::Types::HtmlType.table_name
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateImageTypes < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table ConstructorPages::Types::ImageType.table_name do |t|
|
4
|
+
t.string :value_uid
|
5
|
+
t.string :value_name
|
6
|
+
t.references :field
|
7
|
+
t.references :page
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table ConstructorPages::Types::ImageType.table_name
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class CreatePages < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table ConstructorPages::Page.table_name do |t|
|
4
|
+
t.boolean :active, :default => true
|
5
|
+
t.string :name, :default => ""
|
6
|
+
t.boolean :auto_url, :default => true
|
7
|
+
t.string :full_url, :default => ""
|
8
|
+
t.string :url, :default => ""
|
9
|
+
t.string :link, :default => ""
|
10
|
+
t.string :title, :default => ""
|
11
|
+
t.string :keywords, :default => ""
|
12
|
+
t.text :description, :default => ""
|
13
|
+
t.boolean :in_menu, :default => true
|
14
|
+
t.boolean :in_nav, :default => true
|
15
|
+
t.boolean :in_map, :default => true
|
16
|
+
t.integer :parent_id
|
17
|
+
t.integer :lft
|
18
|
+
t.integer :rgt
|
19
|
+
t.references :template
|
20
|
+
t.timestamps
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.down
|
25
|
+
drop_table ConstructorPages::Page.table_name
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateTemplates < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table ConstructorPages::Template.table_name do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :code_name
|
6
|
+
t.integer :parent_id
|
7
|
+
t.integer :child_id
|
8
|
+
t.integer :lft
|
9
|
+
t.integer :rgt
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table ConstructorPages::Template.table_name
|
17
|
+
end
|
18
|
+
end
|