activa 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ //= require jquery-ui
2
+ //= require activa/form
3
+ //= require jquery.mjs.nestedSortable
@@ -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 2em !important;
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.published.roots
11
+ @pages = Activa::Page.roots
12
12
  end
13
13
 
14
14
  def show
15
- # Just render view
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)
@@ -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.scoped : Activa::Page.where("id != ?", id)
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 self.retrieve(uri)
119
- uri = Activa::Page.normalize_uri(uri)
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 self.normalize_uri(uri)
125
- "/#{uri}".sub(/\/+/, '/')
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
- <script>
29
- $(function() {
30
- var activa;
31
- return activa = new Activa({
32
- title_input: $('#page_title'),
33
- slug_input: $('#page_slug'),
34
- toggle_btn: $('#activa-title-wrapper a'),
35
- toggle_wrapper: $('form.activa-page div.slug'),
36
- done_btn: $('form.activa-page button'),
37
- cancel_btn: $('form.activa-page a.cancel'),
38
- update_uri: '<%= slug_pages_path(:format => :json) %>',
39
- persisted: <%= @page.persisted? %>
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
- </script>
43
+ </script>
44
+ <% end %>
@@ -1,9 +1,15 @@
1
- <li>
2
- <%= link_to page.title, main_app.activa_page_path(page.path) %>
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.published %>
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>No pages yet.</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 %>
@@ -53,9 +53,13 @@ en:
53
53
  link: 'Edit'
54
54
  index:
55
55
  heading: 'Pages'
56
+ empty: 'No pages yet.'
56
57
  sidebar:
57
58
  heading: 'Actions'
58
59
  link: 'Create Page'
60
+ _page:
61
+ labels:
62
+ draft: 'Draft'
59
63
  shared:
60
64
  back_link: 'back'
61
65
  save_as_draft: 'Save as draft'
@@ -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: 'Сохранить как черновик'
@@ -4,7 +4,8 @@ Activa::Engine.routes.draw do
4
4
  #mount ImperaviRails::Engine => "/imperavi-rails"
5
5
 
6
6
  resources :pages do
7
- post 'slug', :on => :collection
7
+ post 'slug', :on => :collection
8
+ put 'position', :on => :collection
8
9
  end
9
10
 
10
11
  root :to => 'pages#index'
@@ -1,3 +1,3 @@
1
1
  module Activa
2
- VERSION = "0.0.11"
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.11
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-06-07 00:00:00.000000000 Z
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: &85507440 !ruby/object:Gem::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: *85507440
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: &85507220 !ruby/object:Gem::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: *85507220
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: &85506980 !ruby/object:Gem::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: *85506980
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: &85506760 !ruby/object:Gem::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: *85506760
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: &85506510 !ruby/object:Gem::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: *85506510
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: &85506280 !ruby/object:Gem::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: *85506280
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: &85506030 !ruby/object:Gem::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: *85506030
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: &85505790 !ruby/object:Gem::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: *85505790
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: &85505560 !ruby/object:Gem::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: *85505560
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: &85505330 !ruby/object:Gem::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: *85505330
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: &85505110 !ruby/object:Gem::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: *85505110
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: &85504900 !ruby/object:Gem::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: *85504900
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/activa.js.coffee
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.15
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: