puffer 0.1.0 → 0.1.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/.gitignore +3 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile.lock +98 -80
- data/README.md +6 -0
- data/Rakefile +1 -1
- data/app/assets/javascripts/puffer/puffer.js +15 -3
- data/app/assets/javascripts/puffer/right-sortable-src.js +28 -306
- data/app/assets/stylesheets/puffer/application.css +2 -0
- data/app/assets/stylesheets/puffer/file_input.css +59 -0
- data/app/assets/stylesheets/puffer/puffer.css +1 -0
- data/app/assets/stylesheets/puffer/puffer_grid.css +23 -0
- data/app/components/boolean/filter.html.erb +9 -0
- data/app/components/boolean_component.rb +4 -0
- data/app/components/carrierwave/form.html.erb +34 -0
- data/app/components/carrierwave/index.html.erb +6 -0
- data/app/components/carrierwave_component.rb +16 -0
- data/app/components/references_one/form.html.erb +2 -3
- data/app/controllers/admin/dashboard_controller.rb +0 -1
- data/app/controllers/admin/puffer_users_controller.rb +3 -7
- data/app/controllers/admin/sessions_controller.rb +1 -1
- data/app/models/puffer_user.rb +3 -18
- data/app/views/layouts/puffer.html.erb +2 -0
- data/app/views/puffer/base/_edit.html.erb +1 -1
- data/app/views/puffer/base/new.html.erb +1 -1
- data/app/views/puffer/grid_base/_grid.html.erb +9 -0
- data/app/views/puffer/grid_base/_index.html.erb +26 -0
- data/config/routes.rb +1 -1
- data/gemfiles/Gemfile-rails-3.1 +5 -0
- data/gemfiles/Gemfile-rails-3.1.lock +201 -0
- data/gemfiles/Gemfile-rails-3.2 +5 -0
- data/gemfiles/Gemfile-rails-3.2.lock +199 -0
- data/lib/puffer.rb +38 -12
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/base.rb +1 -2
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/dashboard_base.rb +0 -1
- data/lib/puffer/backends/controllers/grid_base.rb +12 -0
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/puffer_users_base.rb +0 -0
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/base.rb +0 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/clearance.rb +13 -5
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/devise.rb +1 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/simple.rb +1 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/tree_base.rb +0 -1
- data/lib/puffer/backends/models/user/active_record.rb +9 -0
- data/lib/puffer/backends/models/user/base.rb +30 -0
- data/lib/puffer/backends/models/user/mongoid.rb +15 -0
- data/lib/puffer/component.rb +2 -2
- data/lib/puffer/controller/auth.rb +48 -47
- data/lib/puffer/controller/config.rb +4 -6
- data/lib/puffer/controller/dsl.rb +2 -4
- data/lib/puffer/controller/mutate.rb +23 -26
- data/lib/puffer/extensions/directive_processor.rb +11 -16
- data/lib/puffer/extensions/engine.rb +7 -9
- data/lib/puffer/extensions/{mapper.rb → mapper31.rb} +10 -12
- data/lib/puffer/extensions/mapper32.rb +108 -0
- data/lib/puffer/filters.rb +15 -3
- data/lib/puffer/orm_adapter/active_record.rb +15 -2
- data/lib/puffer/orm_adapter/base.rb +4 -0
- data/lib/puffer/orm_adapter/mongoid.rb +15 -2
- data/lib/puffer/resource.rb +1 -1
- data/lib/puffer/version.rb +1 -1
- data/puffer.gemspec +10 -4
- data/spec/{app/components → components}/base_component_spec.rb +0 -0
- data/spec/{app/components → components}/boolean_component_spec.rb +0 -0
- data/spec/{app/components → components}/date_time_component_spec.rb +0 -0
- data/spec/{app/components → components}/file_component_spec.rb +0 -0
- data/spec/{app/components → components}/hidden_component_spec.rb +0 -0
- data/spec/{app/components → components}/password_component_spec.rb +0 -0
- data/spec/{app/components → components}/references_many_component_spec.rb +0 -0
- data/spec/{app/components → components}/references_one_component_spec.rb +0 -0
- data/spec/{app/components → components}/select_component_spec.rb +0 -0
- data/spec/{app/components → components}/string_component_spec.rb +0 -0
- data/spec/{app/components → components}/text_component_spec.rb +0 -0
- data/spec/controllers/sessions/base_shared.rb +66 -0
- data/spec/controllers/sessions/clearance_spec.rb +21 -0
- data/spec/controllers/sessions/simple_spec.rb +14 -0
- data/spec/dummy/app/controllers/admin/news_controller.rb +1 -1
- data/spec/dummy/app/controllers/admin/profiles_controller.rb +3 -1
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/orms/mongoid_orm_primals_controller.rb +16 -0
- data/spec/dummy/app/helpers/news_helper.rb +1 -1
- data/spec/dummy/app/models/clearance_user.rb +3 -0
- data/spec/dummy/app/models/mongoid_orm/embeds_many_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/embeds_one_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/has_many_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/has_one_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/primal.rb +8 -0
- data/spec/dummy/app/models/profile.rb +2 -0
- data/spec/dummy/app/uploaders/avatar_uploader.rb +8 -0
- data/spec/dummy/config/application.rb +5 -3
- data/spec/dummy/config/initializers/clearance.rb +3 -0
- data/spec/dummy/config/initializers/devise.rb +34 -22
- data/spec/dummy/config/locales/devise.en.yml +6 -7
- data/spec/dummy/config/routes.rb +0 -1
- data/spec/dummy/db/migrate/{20100930133425_create_admin_profiles.rb → 20100930133425_create_profiles.rb} +2 -1
- data/spec/dummy/db/migrate/20111208222355_create_clearance_users.rb +13 -0
- data/spec/dummy/db/migrate/20120129091339_upgrade_clearance_to_diesel.rb +19 -0
- data/spec/dummy/db/schema.rb +12 -1
- data/spec/fabricators/clearance_user_fabricator.rb +4 -0
- data/spec/fabricators/puffer_user_fabricator.rb +5 -0
- data/spec/lib/filters_spec.rb +1 -1
- data/spec/lib/orm_adapter/active_record_spec.rb +0 -1
- data/spec/lib/orm_adapter/base_shared.rb +80 -76
- data/spec/lib/orm_adapter/mongoid_spec.rb +0 -2
- data/spec/lib/resource/tree_spec.rb +0 -1
- data/spec/spec_helper.rb +5 -3
- metadata +150 -75
- data/VERSION +0 -1
- data/app/models/puffer/puffer_user.rb +0 -25
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
## 0.1.1 \[ In Development \] \[ Branch: master \]
|
2
|
+
|
3
|
+
### New Behavior
|
4
|
+
|
5
|
+
* Unified behavior for all built-in app classes (controller and models).
|
6
|
+
Now there are one or more versions inside modules and default version is inherited.
|
7
|
+
See more - [default behaviors](https://github.com/puffer/puffer/wiki/Default-behaviors)
|
8
|
+
No more autoconfig attempts.
|
9
|
+
|
10
|
+
### New features
|
11
|
+
|
12
|
+
* `per_page` config option.
|
13
|
+
* Grid index controller.
|
14
|
+
* Carrierwave component implemented.
|
data/Gemfile.lock
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
puffer (0.1.
|
4
|
+
puffer (0.1.1)
|
5
5
|
kaminari
|
6
6
|
orm_adapter
|
7
|
-
rails (~> 3.1
|
7
|
+
rails (~> 3.1)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
-
actionmailer (3.1
|
13
|
-
actionpack (= 3.1
|
14
|
-
mail (~> 2.
|
15
|
-
actionpack (3.1
|
16
|
-
activemodel (= 3.1
|
17
|
-
activesupport (= 3.1
|
12
|
+
actionmailer (3.2.1)
|
13
|
+
actionpack (= 3.2.1)
|
14
|
+
mail (~> 2.4.0)
|
15
|
+
actionpack (3.2.1)
|
16
|
+
activemodel (= 3.2.1)
|
17
|
+
activesupport (= 3.2.1)
|
18
18
|
builder (~> 3.0.0)
|
19
19
|
erubis (~> 2.7.0)
|
20
|
-
|
21
|
-
rack (~> 1.
|
20
|
+
journey (~> 1.0.1)
|
21
|
+
rack (~> 1.4.0)
|
22
22
|
rack-cache (~> 1.1)
|
23
|
-
rack-mount (~> 0.8.2)
|
24
23
|
rack-test (~> 0.6.1)
|
25
|
-
sprockets (~> 2.
|
26
|
-
activemodel (3.1
|
27
|
-
activesupport (= 3.1
|
24
|
+
sprockets (~> 2.1.2)
|
25
|
+
activemodel (3.2.1)
|
26
|
+
activesupport (= 3.2.1)
|
28
27
|
builder (~> 3.0.0)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
arel (~> 2.2.1)
|
28
|
+
activerecord (3.2.1)
|
29
|
+
activemodel (= 3.2.1)
|
30
|
+
activesupport (= 3.2.1)
|
31
|
+
arel (~> 3.0.0)
|
34
32
|
tzinfo (~> 0.3.29)
|
35
|
-
activeresource (3.1
|
36
|
-
activemodel (= 3.1
|
37
|
-
activesupport (= 3.1
|
38
|
-
activesupport (3.1
|
33
|
+
activeresource (3.2.1)
|
34
|
+
activemodel (= 3.2.1)
|
35
|
+
activesupport (= 3.2.1)
|
36
|
+
activesupport (3.2.1)
|
37
|
+
i18n (~> 0.6)
|
39
38
|
multi_json (~> 1.0)
|
40
|
-
ammeter (0.2.
|
41
|
-
activesupport (
|
42
|
-
railties (
|
43
|
-
rspec (
|
44
|
-
rspec-rails (
|
45
|
-
arel (
|
39
|
+
ammeter (0.2.2)
|
40
|
+
activesupport (>= 3.0)
|
41
|
+
railties (>= 3.0)
|
42
|
+
rspec (>= 2.2)
|
43
|
+
rspec-rails (>= 2.2)
|
44
|
+
arel (3.0.0)
|
46
45
|
bcrypt-ruby (3.0.1)
|
47
|
-
bson (1.
|
48
|
-
bson_ext (1.
|
46
|
+
bson (1.5.2)
|
47
|
+
bson_ext (1.5.2)
|
48
|
+
bson (= 1.5.2)
|
49
49
|
builder (3.0.0)
|
50
50
|
capybara (1.1.2)
|
51
51
|
mime-types (>= 1.16)
|
@@ -54,98 +54,112 @@ GEM
|
|
54
54
|
rack-test (>= 0.5.4)
|
55
55
|
selenium-webdriver (~> 2.0)
|
56
56
|
xpath (~> 0.1.4)
|
57
|
-
|
57
|
+
carrierwave (0.5.8)
|
58
|
+
activesupport (~> 3.0)
|
59
|
+
childprocess (0.3.0)
|
58
60
|
ffi (~> 1.0.6)
|
59
|
-
|
60
|
-
|
61
|
+
clearance (0.14.0)
|
62
|
+
diesel (~> 0.1.5)
|
63
|
+
rails (>= 3.0)
|
64
|
+
database_cleaner (0.7.1)
|
65
|
+
devise (2.0.0)
|
61
66
|
bcrypt-ruby (~> 3.0)
|
62
67
|
orm_adapter (~> 0.0.3)
|
68
|
+
railties (~> 3.1)
|
63
69
|
warden (~> 1.1)
|
70
|
+
diesel (0.1.5)
|
71
|
+
railties
|
64
72
|
diff-lcs (1.1.3)
|
65
73
|
erubis (2.7.0)
|
66
74
|
fabrication (1.2.0)
|
67
75
|
ffi (1.0.11)
|
68
76
|
forgery (0.5.0)
|
69
|
-
guard (0.
|
77
|
+
guard (1.0.0)
|
78
|
+
ffi (>= 0.5.0)
|
70
79
|
thor (~> 0.14.6)
|
71
|
-
guard-rspec (0.
|
72
|
-
guard (>= 0.
|
80
|
+
guard-rspec (0.6.0)
|
81
|
+
guard (>= 0.10.0)
|
73
82
|
hike (1.2.1)
|
74
83
|
i18n (0.6.0)
|
75
|
-
|
76
|
-
|
77
|
-
kaminari (0.
|
78
|
-
|
79
|
-
|
80
|
-
|
84
|
+
journey (1.0.1)
|
85
|
+
json (1.6.5)
|
86
|
+
kaminari (0.13.0)
|
87
|
+
actionpack (>= 3.0.0)
|
88
|
+
activesupport (>= 3.0.0)
|
89
|
+
railties (>= 3.0.0)
|
90
|
+
libnotify (0.7.2)
|
91
|
+
mail (2.4.1)
|
81
92
|
i18n (>= 0.4.0)
|
82
93
|
mime-types (~> 1.16)
|
83
94
|
treetop (~> 1.4.8)
|
84
95
|
mime-types (1.17.2)
|
85
|
-
|
86
|
-
|
87
|
-
|
96
|
+
mini_magick (3.4)
|
97
|
+
subexec (~> 0.2.1)
|
98
|
+
mongo (1.5.2)
|
99
|
+
bson (= 1.5.2)
|
100
|
+
mongoid (2.4.3)
|
88
101
|
activemodel (~> 3.1)
|
89
102
|
mongo (~> 1.3)
|
90
103
|
tzinfo (~> 0.3.22)
|
91
|
-
multi_json (1.0.
|
104
|
+
multi_json (1.0.4)
|
92
105
|
nested_set (1.6.8)
|
93
106
|
activerecord (>= 3.0.0)
|
94
107
|
railties (>= 3.0.0)
|
95
108
|
nokogiri (1.5.0)
|
96
|
-
orm_adapter (0.0.
|
109
|
+
orm_adapter (0.0.6)
|
97
110
|
polyglot (0.3.3)
|
98
|
-
rack (1.
|
111
|
+
rack (1.4.1)
|
99
112
|
rack-cache (1.1)
|
100
113
|
rack (>= 0.4)
|
101
|
-
rack-mount (0.8.3)
|
102
|
-
rack (>= 1.0.0)
|
103
114
|
rack-ssl (1.3.2)
|
104
115
|
rack
|
105
116
|
rack-test (0.6.1)
|
106
117
|
rack (>= 1.0)
|
107
|
-
rails (3.1
|
108
|
-
actionmailer (= 3.1
|
109
|
-
actionpack (= 3.1
|
110
|
-
activerecord (= 3.1
|
111
|
-
activeresource (= 3.1
|
112
|
-
activesupport (= 3.1
|
118
|
+
rails (3.2.1)
|
119
|
+
actionmailer (= 3.2.1)
|
120
|
+
actionpack (= 3.2.1)
|
121
|
+
activerecord (= 3.2.1)
|
122
|
+
activeresource (= 3.2.1)
|
123
|
+
activesupport (= 3.2.1)
|
113
124
|
bundler (~> 1.0)
|
114
|
-
railties (= 3.1
|
115
|
-
railties (3.1
|
116
|
-
actionpack (= 3.1
|
117
|
-
activesupport (= 3.1
|
125
|
+
railties (= 3.2.1)
|
126
|
+
railties (3.2.1)
|
127
|
+
actionpack (= 3.2.1)
|
128
|
+
activesupport (= 3.2.1)
|
118
129
|
rack-ssl (~> 1.3.2)
|
119
130
|
rake (>= 0.8.7)
|
120
131
|
rdoc (~> 3.4)
|
121
132
|
thor (~> 0.14.6)
|
122
133
|
rake (0.9.2.2)
|
123
|
-
|
134
|
+
rb-inotify (0.8.8)
|
135
|
+
ffi (>= 0.5.0)
|
136
|
+
rdoc (3.12)
|
124
137
|
json (~> 1.4)
|
125
|
-
rspec (2.
|
126
|
-
rspec-core (~> 2.
|
127
|
-
rspec-expectations (~> 2.
|
128
|
-
rspec-mocks (~> 2.
|
129
|
-
rspec-core (2.
|
130
|
-
rspec-expectations (2.
|
138
|
+
rspec (2.8.0)
|
139
|
+
rspec-core (~> 2.8.0)
|
140
|
+
rspec-expectations (~> 2.8.0)
|
141
|
+
rspec-mocks (~> 2.8.0)
|
142
|
+
rspec-core (2.8.0)
|
143
|
+
rspec-expectations (2.8.0)
|
131
144
|
diff-lcs (~> 1.1.2)
|
132
|
-
rspec-mocks (2.
|
133
|
-
rspec-rails (2.
|
134
|
-
actionpack (
|
135
|
-
activesupport (
|
136
|
-
railties (
|
137
|
-
rspec (~> 2.
|
138
|
-
rubyzip (0.9.
|
139
|
-
selenium-webdriver (2.
|
140
|
-
childprocess (>= 0.2.
|
145
|
+
rspec-mocks (2.8.0)
|
146
|
+
rspec-rails (2.8.1)
|
147
|
+
actionpack (>= 3.0)
|
148
|
+
activesupport (>= 3.0)
|
149
|
+
railties (>= 3.0)
|
150
|
+
rspec (~> 2.8.0)
|
151
|
+
rubyzip (0.9.5)
|
152
|
+
selenium-webdriver (2.18.0)
|
153
|
+
childprocess (>= 0.2.5)
|
141
154
|
ffi (~> 1.0.9)
|
142
|
-
|
155
|
+
multi_json (~> 1.0.4)
|
143
156
|
rubyzip
|
144
|
-
sprockets (2.
|
157
|
+
sprockets (2.1.2)
|
145
158
|
hike (~> 1.2)
|
146
159
|
rack (~> 1.0)
|
147
160
|
tilt (~> 1.1, != 1.3.0)
|
148
|
-
sqlite3 (1.3.
|
161
|
+
sqlite3 (1.3.5)
|
162
|
+
subexec (0.2.1)
|
149
163
|
thor (0.14.6)
|
150
164
|
tilt (1.3.3)
|
151
165
|
timecop (0.3.5)
|
@@ -165,6 +179,8 @@ DEPENDENCIES
|
|
165
179
|
ammeter
|
166
180
|
bson_ext
|
167
181
|
capybara
|
182
|
+
carrierwave
|
183
|
+
clearance
|
168
184
|
database_cleaner
|
169
185
|
devise
|
170
186
|
fabrication
|
@@ -172,9 +188,11 @@ DEPENDENCIES
|
|
172
188
|
guard
|
173
189
|
guard-rspec
|
174
190
|
libnotify
|
191
|
+
mini_magick
|
175
192
|
mongoid
|
176
193
|
nested_set
|
177
194
|
puffer!
|
195
|
+
rb-inotify
|
178
196
|
rspec-rails
|
179
197
|
sqlite3
|
180
198
|
timecop
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](http://travis-ci.org/puffer/puffer)
|
2
|
+
|
1
3
|
# Puffer — YARAI (Yet Another Rails Admin Interface)
|
2
4
|
|
3
5
|
Puffer was created to help a project owner or moderators view and
|
@@ -167,3 +169,7 @@ end
|
|
167
169
|
```
|
168
170
|
|
169
171
|
Have a nice day and let Puffer rock for you.
|
172
|
+
|
173
|
+
***
|
174
|
+
|
175
|
+
Thanks to [Dmitry Ustalov](http://eveel.ru) for the name of Puffer along with the Clearance integration.
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
var association_done = function(event) {
|
2
2
|
current = this.first('li.current');
|
3
|
-
this.input.next('input[type=hidden]').value(current.
|
3
|
+
this.input.next('input[type=hidden]').value(current.data('id'));
|
4
4
|
this.input.value(current.find('.title').first().html().stripTags()).disable();
|
5
5
|
}
|
6
6
|
|
@@ -18,7 +18,7 @@ var association_done = function(event) {
|
|
18
18
|
dialog = new Dialog({expandable: true});
|
19
19
|
}
|
20
20
|
|
21
|
-
dialog.load(this.
|
21
|
+
dialog.load(this.data('dialog-uri'));
|
22
22
|
});
|
23
23
|
|
24
24
|
'a[data-new-dialog-uri]'.on('click', function(event) {
|
@@ -26,4 +26,16 @@ var association_done = function(event) {
|
|
26
26
|
event.stop();
|
27
27
|
|
28
28
|
new Dialog({expandable: true}).load(this.get('data-new-dialog-uri'));
|
29
|
-
});
|
29
|
+
});
|
30
|
+
|
31
|
+
'a[data-sortable]'.on('mousedown', function(event) {
|
32
|
+
if (event.which != 1) return;
|
33
|
+
|
34
|
+
new Sortable(this, this.data('sortable'));
|
35
|
+
});
|
36
|
+
|
37
|
+
$(document).on('ready', function(event) {
|
38
|
+
$$('[data-sortable]').each(function(element) {
|
39
|
+
new Sortable(element);
|
40
|
+
});
|
41
|
+
});
|
@@ -1,10 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
* http://rightjs.org/ui/sortable
|
4
|
-
*
|
5
|
-
* Copyright (C) 2009-2011 Nikolay Nemshilov
|
6
|
-
*/
|
7
|
-
var Sortable = RightJS.Sortable = (function(document, RightJS) {
|
1
|
+
var Sortable = RightJS.Sortable = (function(document, Math, RightJS) {
|
2
|
+
|
8
3
|
/**
|
9
4
|
* This module defines the basic widgets constructor
|
10
5
|
* it creates an abstract proxy with the common functionality
|
@@ -105,326 +100,53 @@ function Widget(tag_name, methods) {
|
|
105
100
|
|
106
101
|
|
107
102
|
/**
|
108
|
-
*
|
103
|
+
* The filenames to include
|
109
104
|
*
|
110
105
|
* Copyright (C) 2010 Nikolay Nemshilov
|
111
106
|
*/
|
112
|
-
var R
|
113
|
-
$
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
107
|
+
var R = RightJS,
|
108
|
+
$ = RightJS.$,
|
109
|
+
$$ = RightJS.$$,
|
110
|
+
$w = RightJS.$w,
|
111
|
+
$E = RightJS.$E,
|
112
|
+
$A = RightJS.$A,
|
113
|
+
isHash = RightJS.isHash,
|
114
|
+
Element = RightJS.Element;
|
120
115
|
|
121
116
|
|
122
|
-
|
123
|
-
* The Sortable unit
|
124
|
-
*
|
125
|
-
* Copyright (C) 2009-2011 Nikolay Nemshilov
|
126
|
-
*/
|
127
|
-
var Sortable = new Widget('UL', {
|
117
|
+
var Sortable = new Widget({
|
128
118
|
extend: {
|
129
|
-
version: '2.2.
|
130
|
-
|
131
|
-
EVENTS: $w('start change finish'),
|
119
|
+
version: '2.2.3',
|
132
120
|
|
133
121
|
Options: {
|
134
|
-
|
135
|
-
method: 'put', // the Xhr requests method
|
136
|
-
|
137
|
-
Xhr: {}, // additional Xhr options
|
138
|
-
|
139
|
-
idParam: 'id', // the id value name
|
140
|
-
posParam: 'position', // the position value name
|
141
|
-
parseId: true, // if the id attribute should be converted into an integer before sending
|
142
|
-
|
143
|
-
dragClass: 'dragging', // the in-process class name
|
144
|
-
accept: null, // a reference or a list of references to the other sortables between which you can drag the items
|
145
|
-
minLength: 1, // minimum number of items on the list when the feature works
|
146
|
-
|
147
|
-
itemCss: 'li', // the draggable item's css rule
|
148
|
-
handleCss: 'li', // the draggables handle element css rule
|
149
|
-
|
150
|
-
cssRule: '*[data-sortable]' // css-rule for automatically initializable sortables
|
151
|
-
},
|
152
|
-
|
153
|
-
current: false, // a reference to the currently active sortable
|
154
|
-
|
155
|
-
/**
|
156
|
-
* Typecasting the list element for Sortable
|
157
|
-
*
|
158
|
-
* @param Element list
|
159
|
-
* @return Sortable list
|
160
|
-
*/
|
161
|
-
cast: function(element) {
|
162
|
-
element = $(element._);
|
163
|
-
if (!(element instanceof Sortable)) {
|
164
|
-
element = new Sortable(element);
|
165
|
-
}
|
166
|
-
return element;
|
122
|
+
itemCss: 'li'
|
167
123
|
}
|
168
124
|
},
|
169
125
|
|
170
|
-
|
171
|
-
|
172
|
-
*
|
173
|
-
* @param mixed element reference
|
174
|
-
* @param Object options
|
175
|
-
* @return void
|
176
|
-
*/
|
177
|
-
initialize: function(element, options) {
|
178
|
-
this.$super('sortable', element)
|
179
|
-
.setOptions(options)
|
180
|
-
.addClass('rui-sortable')
|
181
|
-
.on('finish', this._tryXhr)
|
182
|
-
.on('selectstart', 'stopEvent'); // disable select under IE
|
183
|
-
},
|
184
|
-
|
185
|
-
/**
|
186
|
-
* some additional options processing
|
187
|
-
*
|
188
|
-
* @param Object options
|
189
|
-
* @param Element optional context
|
190
|
-
* @return Sortable this
|
191
|
-
*/
|
192
|
-
setOptions: function(options, context) {
|
193
|
-
this.$super(options, context);
|
194
|
-
|
195
|
-
options = this.options;
|
196
|
-
|
197
|
-
// Preprocessing the acceptance list
|
198
|
-
var list = options.accept || [];
|
199
|
-
if (!isArray(list)) { list = [list]; }
|
200
|
-
|
201
|
-
options.accept = R([this].concat(list)).map($).uniq();
|
202
|
-
|
203
|
-
return this;
|
204
|
-
},
|
205
|
-
|
206
|
-
// returns a list of draggable items
|
207
|
-
items: function() {
|
208
|
-
return this.children(this.options.itemCss);
|
209
|
-
},
|
210
|
-
|
211
|
-
// protected
|
212
|
-
|
213
|
-
// starts the drag
|
214
|
-
startDrag: function(event) {
|
215
|
-
// don't let to drag out the last item
|
216
|
-
if (this.items().length <= this.options.minLength) { return; }
|
217
|
-
|
218
|
-
// trying to find the list-item upon which the user pressed the mouse
|
219
|
-
var item = event.find(this.options.itemCss),
|
220
|
-
handle = event.find(this.options.handleCss);
|
221
|
-
|
222
|
-
if (item && handle) {
|
223
|
-
this._initDrag(item, event.position());
|
224
|
-
Sortable.current = this;
|
225
|
-
this.fire('start', this._evOpts(event));
|
226
|
-
}
|
227
|
-
},
|
228
|
-
|
229
|
-
// moves the item
|
230
|
-
moveItem: function(event) {
|
231
|
-
var event_pos = event.position(),
|
232
|
-
item = this.itemClone._.style,
|
233
|
-
top = event_pos.y - this.yRDiff,
|
234
|
-
left = event_pos.x - this.xRDiff,
|
235
|
-
right = left + this.cloneWidth,
|
236
|
-
bottom = top + this.cloneHeight;
|
237
|
-
|
238
|
-
// moving the clone
|
239
|
-
item.top = (event_pos.y - this.yDiff) + 'px';
|
240
|
-
item.left = (event_pos.x - this.xDiff) + 'px';
|
241
|
-
|
242
|
-
// checking for an overlaping item
|
243
|
-
var over_item = this.suspects.first(function(suspect) {
|
244
|
-
return (
|
245
|
-
(top > suspect.top && top < suspect.topHalf) ||
|
246
|
-
(bottom < suspect.bottom && bottom > suspect.topHalf)
|
247
|
-
) && (
|
248
|
-
(left > suspect.left && left < suspect.leftHalf) ||
|
249
|
-
(right < suspect.right && right > suspect.leftHalf)
|
250
|
-
);
|
251
|
-
});
|
252
|
-
|
253
|
-
if (over_item) {
|
254
|
-
item = over_item.item;
|
255
|
-
item.insert(this.item, item.prevSiblings().include(this.item) ? 'after' : 'before');
|
256
|
-
this._findSuspects();
|
257
|
-
|
258
|
-
this.fire('change', this._evOpts(event, item));
|
259
|
-
}
|
260
|
-
},
|
126
|
+
initialize: function() {
|
127
|
+
var args = $A(arguments).compact(), options = args.pop(), element = args.pop();
|
261
128
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
this.itemClone.remove();
|
266
|
-
this.item.setStyle('visibility:visible');
|
129
|
+
if (!isHash(options) || options instanceof Element) {
|
130
|
+
element = $(element || options);
|
131
|
+
options = {};
|
267
132
|
}
|
268
|
-
Sortable.current = false;
|
269
|
-
this.fire('finish', this._evOpts(event));
|
270
|
-
},
|
271
|
-
|
272
|
-
// returns the event options
|
273
|
-
_evOpts: function(event, item) {
|
274
|
-
item = item || this.item;
|
275
|
-
var list = Sortable.cast(item.parent());
|
276
|
-
|
277
|
-
return {
|
278
|
-
list: list,
|
279
|
-
item: item,
|
280
|
-
event: event,
|
281
|
-
index: list.items().indexOf(item)
|
282
|
-
};
|
283
|
-
},
|
284
|
-
|
285
|
-
_initDrag: function(item, event_pos) {
|
286
|
-
var dims = this.dimensions(), item_dims = item.dimensions();
|
287
|
-
|
288
|
-
// creating the draggable clone
|
289
|
-
var clone = item.clone().setStyle({
|
290
|
-
margin: 0,
|
291
|
-
zIndex: 9999,
|
292
|
-
position: 'absolute',
|
293
|
-
top: '0px',
|
294
|
-
left: '0px'
|
295
|
-
})
|
296
|
-
.addClass(this.options.dragClass).insertTo(this)
|
297
|
-
.setHeight(this.cloneHeight = item_dims.height)
|
298
|
-
.setWidth(this.cloneWidth = item_dims.width);
|
299
|
-
|
300
|
-
// adjusting the clone position to compensate relative fields and margins
|
301
|
-
var clone_pos = clone.position(),
|
302
|
-
real_x = item_dims.left - clone_pos.x,
|
303
|
-
real_y = item_dims.top - clone_pos.y;
|
304
|
-
|
305
|
-
clone.moveTo(real_x, real_y);
|
306
133
|
|
307
|
-
this
|
308
|
-
this.itemClone = clone;
|
309
|
-
|
310
|
-
// mouse event-position diffs
|
311
|
-
this.xDiff = event_pos.x - real_x;
|
312
|
-
this.yDiff = event_pos.y - real_y;
|
313
|
-
this.xRDiff = event_pos.x - clone.position().x;
|
314
|
-
this.yRDiff = event_pos.y - clone.position().y;
|
315
|
-
|
316
|
-
// collecting the list of interchangable items with their positions
|
317
|
-
this._findSuspects();
|
318
|
-
},
|
319
|
-
|
320
|
-
// collects the precached list of suspects
|
321
|
-
_findSuspects: function() {
|
322
|
-
var suspects = this.suspects = R([]), item = this.item, clone = this.itemClone;
|
323
|
-
this.options.accept.each(function(list) {
|
324
|
-
Sortable.cast(list).items().each(function(element) {
|
325
|
-
if (element !== item && element !== clone) {
|
326
|
-
var dims = element.dimensions();
|
327
|
-
|
328
|
-
// caching the sizes
|
329
|
-
suspects.push({
|
330
|
-
item: element,
|
331
|
-
top: dims.top,
|
332
|
-
left: dims.left,
|
333
|
-
right: dims.left + dims.width,
|
334
|
-
bottom: dims.top + dims.height,
|
335
|
-
topHalf: dims.top + dims.height/2,
|
336
|
-
leftHalf: dims.left + dims.width/2
|
337
|
-
});
|
338
|
-
}
|
339
|
-
});
|
340
|
-
});
|
341
|
-
},
|
342
|
-
|
343
|
-
// tries to send an Xhr request about the element relocation
|
344
|
-
_tryXhr: function(event) {
|
345
|
-
if (this.options.url) {
|
346
|
-
var url = R(this.options.url), params = {}, item = event.item, position = event.index + 1;
|
347
|
-
|
348
|
-
// building the Xhr request options
|
349
|
-
var options = Object.merge({
|
350
|
-
method: this.options.method,
|
351
|
-
params: {}
|
352
|
-
}, this.options.Xhr);
|
353
|
-
|
354
|
-
// grabbing the id
|
355
|
-
var id = item.get('id') || '';
|
356
|
-
if (this.options.parseId && id) {
|
357
|
-
id = (id.match(/\d+/) || [''])[0];
|
358
|
-
}
|
134
|
+
this.$super('sortable', element).setOptions(options);
|
359
135
|
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
params[this.options.idParam] = id;
|
136
|
+
this.find(this.options.itemCss).each('makeDraggable', {
|
137
|
+
'revert': true,
|
138
|
+
'onDrag': function(draggable, event) {
|
139
|
+
console.log(event.find(this.options.itemCss).index())
|
365
140
|
}
|
366
|
-
|
367
|
-
|
368
|
-
// merging the params with possible Xhr params
|
369
|
-
if (isString(options.params)) {
|
370
|
-
options.params += '&'+Object.toQueryString(params);
|
371
|
-
} else {
|
372
|
-
options.params = Object.merge(options.params, params);
|
373
|
-
}
|
374
|
-
|
375
|
-
// calling the server
|
376
|
-
RightJS.Xhr.load(url, options);
|
377
|
-
}
|
141
|
+
});
|
378
142
|
}
|
379
143
|
});
|
380
144
|
|
381
|
-
|
382
|
-
/**
|
383
|
-
* Document level hooks for sortables
|
384
|
-
*
|
385
|
-
* Copyright (C) 2009-2010 Nikolay Nemshilov
|
386
|
-
*/
|
387
145
|
$(document).on({
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
if (element) {
|
392
|
-
Sortable.cast(element).startDrag(event);
|
393
|
-
}
|
394
|
-
},
|
395
|
-
|
396
|
-
mousemove: function(event) {
|
397
|
-
if (Sortable.current) {
|
398
|
-
Sortable.current.moveItem(event);
|
399
|
-
}
|
400
|
-
},
|
401
|
-
|
402
|
-
mouseup: function(event) {
|
403
|
-
if (Sortable.current) {
|
404
|
-
Sortable.current.finishDrag(event);
|
405
|
-
}
|
146
|
+
ready: function() {
|
147
|
+
|
406
148
|
}
|
407
149
|
});
|
408
150
|
|
409
|
-
$(window).onBlur(function() {
|
410
|
-
if (Sortable.current) {
|
411
|
-
Sortable.current.finishDrag();
|
412
|
-
}
|
413
|
-
});
|
414
|
-
|
415
|
-
|
416
|
-
var embed_style = document.createElement('style'),
|
417
|
-
embed_rules = document.createTextNode(".rui-sortable{user-select:none;-moz-user-select:none;-webkit-user-select:none}");
|
418
|
-
|
419
|
-
embed_style.type = 'text/css';
|
420
|
-
document.getElementsByTagName('head')[0].appendChild(embed_style);
|
421
|
-
|
422
|
-
if(embed_style.styleSheet) {
|
423
|
-
embed_style.styleSheet.cssText = embed_rules.nodeValue;
|
424
|
-
} else {
|
425
|
-
embed_style.appendChild(embed_rules);
|
426
|
-
}
|
427
|
-
|
428
|
-
|
429
151
|
return Sortable;
|
430
|
-
})(document, RightJS);
|
152
|
+
})(document, Math, RightJS);
|