activa 0.0.11 → 0.0.13
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/javascripts/activa/activa.js +3 -0
- data/app/assets/javascripts/activa/{activa.js.coffee → form.js.coffee} +0 -0
- data/app/assets/stylesheets/activa/activa.css.scss +31 -2
- data/app/controllers/activa/pages_controller.rb +10 -3
- data/app/models/activa/page.rb +40 -15
- data/app/views/activa/pages/_form.html.erb +16 -14
- data/app/views/activa/pages/_page.html.erb +9 -3
- data/app/views/activa/pages/index.html.erb +41 -2
- data/config/locales/en.yml +4 -0
- data/config/locales/ru.yml +5 -0
- data/config/routes.rb +2 -1
- data/lib/activa/version.rb +2 -2
- metadata +89 -29
File without changes
|
@@ -54,8 +54,37 @@ form.activa-page {
|
|
54
54
|
}
|
55
55
|
}
|
56
56
|
|
57
|
-
ul#pages {
|
57
|
+
ul#activa-pages {
|
58
|
+
margin-bottom: 25px;
|
59
|
+
|
58
60
|
ul {
|
59
|
-
padding: 0 0 0
|
61
|
+
padding: 0 0 0 1em !important;
|
62
|
+
}
|
63
|
+
|
64
|
+
li {
|
65
|
+
div {
|
66
|
+
border: 1px solid #efefef;
|
67
|
+
@include border-radius(4px);
|
68
|
+
padding: 4px 7px 4px 25px;
|
69
|
+
margin: 0 0 5px 0;
|
70
|
+
cursor: move;
|
71
|
+
@include background(linear-gradient(top, #fefefe 0%, #efefef 100%));
|
72
|
+
|
73
|
+
&:hover {
|
74
|
+
border: 1px solid #eee;
|
75
|
+
@include background(linear-gradient(top, #eee 0%, #ddd 100%));
|
76
|
+
}
|
77
|
+
|
78
|
+
span.label {
|
79
|
+
font-size: 80%;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
.placeholder {
|
85
|
+
border: 1px dashed #4183C4;
|
86
|
+
-webkit-border-radius: 3px;
|
87
|
+
-moz-border-radius: 3px;
|
88
|
+
border-radius: 3px;
|
60
89
|
}
|
61
90
|
}
|
@@ -8,11 +8,11 @@ class Activa::PagesController < Activa::ApplicationController
|
|
8
8
|
layout 'admin', :except => %w(index show)
|
9
9
|
|
10
10
|
def index
|
11
|
-
@pages = Activa::Page.
|
11
|
+
@pages = Activa::Page.roots
|
12
12
|
end
|
13
13
|
|
14
14
|
def show
|
15
|
-
|
15
|
+
|
16
16
|
end
|
17
17
|
|
18
18
|
def new
|
@@ -48,7 +48,6 @@ class Activa::PagesController < Activa::ApplicationController
|
|
48
48
|
|
49
49
|
def update
|
50
50
|
if params[:commit].present?
|
51
|
-
#@page.attributes = params[:page]
|
52
51
|
if @page.update_attributes(params[:page])#@page.publish#(params[:page])
|
53
52
|
flash.notice = I18n.t 'controllers.pages.create.published_notice'
|
54
53
|
smart_redirect_to(@page) and return
|
@@ -76,6 +75,14 @@ class Activa::PagesController < Activa::ApplicationController
|
|
76
75
|
render :json => { :slug => params[:title].to_s.to_url }
|
77
76
|
end
|
78
77
|
|
78
|
+
def position
|
79
|
+
render :json => Activa::Page.move(
|
80
|
+
params[:first_node_id],
|
81
|
+
params[:second_node_id],
|
82
|
+
params[:nesting]
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
79
86
|
private
|
80
87
|
|
81
88
|
def smart_redirect_to(page)
|
data/app/models/activa/page.rb
CHANGED
@@ -92,11 +92,7 @@ module Activa
|
|
92
92
|
|
93
93
|
# Retrieve list of all potential parents pages for current page
|
94
94
|
def potential_parents
|
95
|
-
new_record? ? Activa::Page.
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.has_root?
|
99
|
-
unscoped.count > 0
|
95
|
+
new_record? ? Activa::Page.published : Activa::Page.published.where("id != ?", id)
|
100
96
|
end
|
101
97
|
|
102
98
|
def regenerate_uri!
|
@@ -115,24 +111,53 @@ module Activa
|
|
115
111
|
self_and_siblings.select([:id, :parent_id, :title, :uri, :slug])
|
116
112
|
end
|
117
113
|
|
118
|
-
def
|
119
|
-
|
120
|
-
uri = '/' if uri == '/home'
|
121
|
-
Activa::Page.find_by_uri(Activa::Page.normalize_uri(uri))
|
114
|
+
def draft?
|
115
|
+
state == 'draft'
|
122
116
|
end
|
123
117
|
|
124
|
-
def
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
def self.normalize_path(path)
|
129
|
-
path.sub(/^\/+/, '')
|
118
|
+
def published?
|
119
|
+
state == 'published'
|
130
120
|
end
|
131
121
|
|
132
122
|
def to_s
|
133
123
|
title
|
134
124
|
end
|
135
125
|
|
126
|
+
# Singleton methods
|
127
|
+
class << self
|
128
|
+
def has_root?
|
129
|
+
unscoped.count > 0
|
130
|
+
end
|
131
|
+
|
132
|
+
def retrieve(uri)
|
133
|
+
uri = Activa::Page.normalize_uri(uri)
|
134
|
+
uri = '/' if uri == '/home'
|
135
|
+
Activa::Page.published.find_by_uri(Activa::Page.normalize_uri(uri))
|
136
|
+
end
|
137
|
+
|
138
|
+
def normalize_uri(uri)
|
139
|
+
"/#{uri}".sub(/\/+/, '/')
|
140
|
+
end
|
141
|
+
|
142
|
+
def normalize_path(path)
|
143
|
+
path.sub(/^\/+/, '')
|
144
|
+
end
|
145
|
+
|
146
|
+
# Move node as a neighbour of child of another node
|
147
|
+
def move(firstNodeId, secondNodeId, nesting)
|
148
|
+
firstNode = find(firstNodeId)
|
149
|
+
secondNode = find(secondNodeId)
|
150
|
+
|
151
|
+
if (nesting.to_i == 0)
|
152
|
+
firstNode.move_to_right_of(secondNode)
|
153
|
+
else
|
154
|
+
firstNode.move_to_child_of(secondNode)
|
155
|
+
end
|
156
|
+
|
157
|
+
return true
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
136
161
|
private
|
137
162
|
|
138
163
|
# После переноса узла запускается этот метод и успешно
|
@@ -25,18 +25,20 @@
|
|
25
25
|
</div>
|
26
26
|
<% end %>
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
<% content_for :javascript do %>
|
29
|
+
<script>
|
30
|
+
$(function() {
|
31
|
+
var activa;
|
32
|
+
return activa = new Activa({
|
33
|
+
title_input: $('#page_title'),
|
34
|
+
slug_input: $('#page_slug'),
|
35
|
+
toggle_btn: $('#activa-title-wrapper a'),
|
36
|
+
toggle_wrapper: $('form.activa-page div.slug'),
|
37
|
+
done_btn: $('form.activa-page button'),
|
38
|
+
cancel_btn: $('form.activa-page a.cancel'),
|
39
|
+
update_uri: '<%= slug_pages_path(:format => :json) %>',
|
40
|
+
persisted: <%= @page.persisted? %>
|
41
|
+
});
|
40
42
|
});
|
41
|
-
|
42
|
-
|
43
|
+
</script>
|
44
|
+
<% end %>
|
@@ -1,9 +1,15 @@
|
|
1
|
-
<li>
|
2
|
-
|
1
|
+
<li data-id="<%= page.id %>">
|
2
|
+
<div>
|
3
|
+
<% if page.draft? %>
|
4
|
+
<span class="label label-warning"><%= t('views.pages._page.labels.draft') %></span>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= link_to page.title, main_app.activa_page_path(page.path) %>
|
8
|
+
</div>
|
3
9
|
|
4
10
|
<% unless page.leaf? %>
|
5
11
|
<ul>
|
6
|
-
<%= render :partial => :page, :collection => page.children.
|
12
|
+
<%= render :partial => :page, :collection => page.children.scoped %>
|
7
13
|
</ul>
|
8
14
|
<% end %>
|
9
15
|
</li>
|
@@ -1,12 +1,51 @@
|
|
1
1
|
<%= heading_with_title t('views.pages.index.heading') %>
|
2
2
|
|
3
3
|
<% if @pages.any? %>
|
4
|
-
<ul id="pages">
|
4
|
+
<ul id="activa-pages">
|
5
5
|
<%= render :partial => :page, :collection => @pages %>
|
6
6
|
</ul>
|
7
7
|
<% else %>
|
8
|
-
<p
|
8
|
+
<p><%= t('views.pages.index.empty') %></p>
|
9
9
|
<% end %>
|
10
10
|
|
11
11
|
<%= render 'activa/pages/partials/menu/index' %>
|
12
12
|
|
13
|
+
<% content_for :javascript do %>
|
14
|
+
<script>
|
15
|
+
$(function() {
|
16
|
+
// see: https://github.com/mjsarfatti/nestedSortable
|
17
|
+
$('#activa-pages').nestedSortable({
|
18
|
+
handle : 'div',
|
19
|
+
items : 'li',
|
20
|
+
toleranceElement : '> div',
|
21
|
+
listType : 'ul',
|
22
|
+
protectRoot : true,
|
23
|
+
forcePlaceholderSize: true,
|
24
|
+
placeholder : 'placeholder',
|
25
|
+
helper : 'clone',
|
26
|
+
stop: function(event, ui) {
|
27
|
+
var item = $(ui.item[0])
|
28
|
+
var moveAfter = item.prev('li')
|
29
|
+
var nesting = 0
|
30
|
+
|
31
|
+
// Has nesting
|
32
|
+
if (!moveAfter.length) {
|
33
|
+
nesting = 1
|
34
|
+
moveAfter = item.parent('ul').parent('li')
|
35
|
+
}
|
36
|
+
|
37
|
+
var params = {
|
38
|
+
'first_node_id' : item.data('id'),
|
39
|
+
'second_node_id' : moveAfter.data('id'),
|
40
|
+
'nesting' : nesting,
|
41
|
+
'_method' : 'put'
|
42
|
+
}
|
43
|
+
|
44
|
+
$.post('<%= position_pages_path(:format => :json) %>', params, function(data) {
|
45
|
+
console.log(data)
|
46
|
+
})
|
47
|
+
}
|
48
|
+
});
|
49
|
+
});
|
50
|
+
</script>
|
51
|
+
<% end %>
|
data/config/locales/en.yml
CHANGED
data/config/locales/ru.yml
CHANGED
@@ -27,6 +27,7 @@ ru:
|
|
27
27
|
or: 'или'
|
28
28
|
page:
|
29
29
|
create: 'Опубликовать'
|
30
|
+
update: 'Сохранить и опубликовать изменения'
|
30
31
|
controllers:
|
31
32
|
pages:
|
32
33
|
create:
|
@@ -53,9 +54,13 @@ ru:
|
|
53
54
|
link: 'Редактировать'
|
54
55
|
index:
|
55
56
|
heading: 'Страницы'
|
57
|
+
empty: 'Еще нет ни одной страницы.'
|
56
58
|
sidebar:
|
57
59
|
heading: 'Действия'
|
58
60
|
link: 'Создать страницу'
|
61
|
+
_page:
|
62
|
+
labels:
|
63
|
+
draft: 'Черновик'
|
59
64
|
shared:
|
60
65
|
back_link: 'вернуться назад'
|
61
66
|
save_as_draft: 'Сохранить как черновик'
|
data/config/routes.rb
CHANGED
data/lib/activa/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Activa
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.13"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 3.2.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.3
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: stringex
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: awesome_nested_set
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: simple_form
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: cancan
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: compass-rails
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: rspec
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: sqlite3
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: shoulda-matchers
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: capybara
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ! '>='
|
@@ -120,10 +165,15 @@ dependencies:
|
|
120
165
|
version: '0'
|
121
166
|
type: :development
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
124
174
|
- !ruby/object:Gem::Dependency
|
125
175
|
name: pry
|
126
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
127
177
|
none: false
|
128
178
|
requirements:
|
129
179
|
- - ! '>='
|
@@ -131,10 +181,15 @@ dependencies:
|
|
131
181
|
version: '0'
|
132
182
|
type: :development
|
133
183
|
prerelease: false
|
134
|
-
version_requirements:
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
135
190
|
- !ruby/object:Gem::Dependency
|
136
191
|
name: gem-release
|
137
|
-
requirement:
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
138
193
|
none: false
|
139
194
|
requirements:
|
140
195
|
- - ! '>='
|
@@ -142,7 +197,12 @@ dependencies:
|
|
142
197
|
version: '0'
|
143
198
|
type: :development
|
144
199
|
prerelease: false
|
145
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
146
206
|
description: Rails 3.1+ dynamic page management
|
147
207
|
email:
|
148
208
|
- demerest@gmail.com
|
@@ -159,7 +219,8 @@ files:
|
|
159
219
|
- app/helpers/activa/pages_helper.rb
|
160
220
|
- app/controllers/activa/application_controller.rb
|
161
221
|
- app/controllers/activa/pages_controller.rb
|
162
|
-
- app/assets/javascripts/activa/
|
222
|
+
- app/assets/javascripts/activa/form.js.coffee
|
223
|
+
- app/assets/javascripts/activa/activa.js
|
163
224
|
- app/assets/images/input-bg.gif
|
164
225
|
- app/assets/images/rails.png
|
165
226
|
- app/assets/images/bg.jpg
|
@@ -612,9 +673,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
612
673
|
version: '0'
|
613
674
|
requirements: []
|
614
675
|
rubyforge_project:
|
615
|
-
rubygems_version: 1.8.
|
676
|
+
rubygems_version: 1.8.24
|
616
677
|
signing_key:
|
617
678
|
specification_version: 3
|
618
679
|
summary: Rails 3.1+ dynamic page management
|
619
680
|
test_files: []
|
620
|
-
has_rdoc:
|