compass-jquery-plugin 0.3.2.pre.2 → 0.3.2.0
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/LICENSE.md +20 -20
- data/README.md +7 -2
- data/VERSION.yml +2 -2
- data/lib/jquery/gridify/grid.rb +1 -1
- data/lib/jquery/gridify/grid_column.rb +1 -1
- data/lib/jquery/gridify/grid_finder.rb +16 -1
- data/lib/jquery/gridify/grid_view.rb +1 -1
- data/lib/jquery/jqgrid.rb +4 -4
- data/lib/jquery/jqtouch.rb +3 -3
- data/lib/jquery/jquery.rb +431 -431
- data/lib/jquery/jquery_json_response.rb +28 -0
- data/lib/jquery/secret_sauce.rb +8 -8
- data/lib/jquery/secret_sauce/controller/ui_dialog_controls.rb +13 -13
- data/lib/jquery/secret_sauce/controller/ui_grid_controls.rb +18 -18
- data/lib/jquery/secret_sauce/helpers/ui_dialog_helper.rb +5 -5
- data/lib/jquery/secret_sauce/model/find_for_grid.rb +41 -41
- data/templates/dynatree/jquery.dynatree.js +111 -110
- data/templates/dynatree/jquery.dynatree.min.js +75 -77
- data/templates/dynatree/jquery/dynatree/aero.scss +1 -3
- data/templates/dynatree/jquery/dynatree/aqua.scss +1 -3
- data/templates/dynatree/jquery/dynatree/crystal.scss +1 -3
- data/templates/dynatree/jquery/dynatree/xp.scss +1 -3
- data/templates/emulators/emulators/iphone.landscape.png +0 -0
- data/templates/emulators/emulators/iphone.landscape.scss +4 -4
- data/templates/emulators/emulators/palm.landscape.scss +6 -6
- data/templates/emulators/emulators/palm.pre.landscape.png +0 -0
- data/templates/ical/jquery.ical.js +3202 -3197
- data/templates/ical/jquery.ical.min.js +185 -184
- data/templates/ical/jquery/ical.scss +3 -3
- data/templates/jqgrid/i18n/jqgrid/locale-ar.js +126 -0
- data/templates/jqgrid/i18n/jqgrid/locale-ar.min.js +6 -0
- data/templates/jqgrid/i18n/jqgrid/locale-fi.js +45 -47
- data/templates/jqgrid/i18n/jqgrid/locale-fi.min.js +6 -6
- data/templates/jqgrid/jquery.jqGrid.js +2047 -2036
- data/templates/jqgrid/jquery.jqGrid.min.js +48 -48
- data/templates/jqgrid/manifest.rb +2 -0
- data/templates/jqtouch/jquery.jqtouch.js +122 -113
- data/templates/jqtouch/jquery.jqtouch.min.js +1 -1
- data/templates/jquery/config/initializers/jquery.rb +4 -2
- data/templates/jquery/i18n/jquery.ui/datepicker-ar-DZ.js +23 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-ar-DZ.min.js +2 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-en-AU.js +23 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-en-AU.min.js +2 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-en-NZ.js +23 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-en-NZ.min.js +2 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-ml.js +23 -0
- data/templates/jquery/i18n/jquery.ui/datepicker-ml.min.js +2 -0
- data/templates/jquery/jquery-ui.js +354 -316
- data/templates/jquery/jquery-ui.min.js +544 -544
- data/templates/jquery/jquery.cookie.js +3 -3
- data/templates/jquery/jquery.form.js +271 -140
- data/templates/jquery/jquery.form.min.js +19 -17
- data/templates/jquery/jquery.layout.js +2435 -2437
- data/templates/jquery/jquery.layout.min.js +4 -3
- data/templates/jquery/jquery.mousewheel.js +78 -0
- data/templates/jquery/jquery.mousewheel.min.js +2 -0
- data/templates/jquery/jquery.offline.js +212 -0
- data/templates/jquery/jquery.offline.min.js +4 -0
- data/templates/jquery/jquery.tmpl.js +15 -22
- data/templates/jquery/jquery.tmpl.min.js +12 -12
- data/templates/jquery/jquery.tmplPlus.js +1 -0
- data/templates/jquery/jquery/ui/_theme.scss +27 -27
- data/templates/jquery/json.js +7 -0
- data/templates/jquery/json.min.js +7 -0
- data/templates/jquery/manifest.rb +14 -2
- data/templates/mobile/glyphish/{Read me first - license.txt → License.txt} +0 -0
- data/templates/mobile/jquery.mobile.js +1583 -1408
- data/templates/mobile/jquery.mobile.min.js +5 -5
- data/templates/mobile/jquery/mobile/_base.scss +938 -1038
- data/templates/mobile/jquery/mobile/default.scss +25 -26
- data/templates/mobile/jquery/mobile/valencia.scss +0 -1
- data/templates/mobile/manifest.rb +1 -1
- data/templates/tools/config/initializers/tools.rb +2 -0
- data/templates/tools/flowplayer.js +24 -0
- data/templates/tools/flowplayer.min.js +30 -0
- data/templates/tools/jquery.tools.js +4 -3
- data/templates/tools/jquery.tools.min.js +1 -1
- data/templates/tools/manifest.rb +4 -0
- data/templates/tools/swfobject.js +777 -0
- data/templates/tools/swfobject.min.js +19 -0
- metadata +31 -15
- data/templates/jquery/jquery.metadata.js +0 -122
- data/templates/jquery/jquery.metadata.min.js +0 -2
data/LICENSE.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
Copyright (c) 2009-2011 Kosmas Schuetz
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
-
a copy of this software and associated documentation files (the
|
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
-
the following conditions:
|
|
10
|
-
|
|
11
|
-
The above copyright notice and this permission notice shall be
|
|
12
|
-
included in all copies or substantial portions of the Software.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
1
|
+
Copyright (c) 2009-2011 Kosmas Schuetz
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Description
|
|
|
10
10
|
|
|
11
11
|
A Sass-based Meta-Framework for Compass that allows you to mix and match any of the following:
|
|
12
12
|
|
|
13
|
-
* jRails with jQuery 1.4.4 and jQuery.UI 1.8.
|
|
13
|
+
* jRails with jQuery 1.4.4 and jQuery.UI 1.8.9 including themes
|
|
14
14
|
* jQuery Tools 1.2.5
|
|
15
15
|
* jquery.jstree.js V1.0rc3
|
|
16
16
|
* jquery.dynatree.js V1.0.2
|
|
@@ -242,6 +242,8 @@ jQuery Plugins included:
|
|
|
242
242
|
* Takayuki Miwa for [jQuery history plugin][19]
|
|
243
243
|
* Ivan Bozhanov for [jQuery jsTree Plugin][20]
|
|
244
244
|
* Fabrizio Balliano and Fabrizio Balliano for [jQuery Layout Plugin][21]
|
|
245
|
+
* Brandon Aaron and Fabrizio Balliano for [jQuery Mousewheel Plugin][21]
|
|
246
|
+
* Yehuda Katz for [jQuery Offline Plugin][34]
|
|
245
247
|
* Andreas Eberhard for [jQuery PngFix Plugin][22] (for IE)
|
|
246
248
|
* Mikael Soederstroem for [jQuery Ribbon Plugin][23]
|
|
247
249
|
* Gareth Watts from Splunk Inc for [jQuery Sparklines plugin][24]
|
|
@@ -308,4 +310,7 @@ Copyright © 2009-2011 Kosmas Schuetz. See LICENSE for details.
|
|
|
308
310
|
[30]: http://acko.net/dev/farbtastic
|
|
309
311
|
[31]: http://arshaw.com/fullcalendar/
|
|
310
312
|
[32]: http://github.com/creationix/haml-js
|
|
311
|
-
[33]: http://github.com/rubyredrick/ri_cal/
|
|
313
|
+
[33]: http://github.com/rubyredrick/ri_cal/
|
|
314
|
+
[34]: http://github.com/wycats/jquery-offline
|
|
315
|
+
[35]: http://github.com/brandonaaron/jquery-mousewheel
|
|
316
|
+
|
data/VERSION.yml
CHANGED
data/lib/jquery/gridify/grid.rb
CHANGED
|
@@ -131,7 +131,7 @@ module Gridify
|
|
|
131
131
|
end.compact
|
|
132
132
|
|
|
133
133
|
if col_include
|
|
134
|
-
|
|
134
|
+
col_include.each do |sub_model|
|
|
135
135
|
my_model = sub_model.to_s
|
|
136
136
|
if klass.inheritable_attributes[:reflections][sub_model].options[:class_name]
|
|
137
137
|
my_class = klass.inheritable_attributes[:reflections][sub_model].options[:class_name].to_s
|
|
@@ -89,7 +89,7 @@ module Gridify
|
|
|
89
89
|
# note, we dont vals[:foo] = foo because dont want to bother generating key if its same as jqGrid default
|
|
90
90
|
def jqgrid_properties
|
|
91
91
|
vals = {
|
|
92
|
-
:name => name,
|
|
92
|
+
:name => name.gsub(".", "__"),
|
|
93
93
|
:index => name
|
|
94
94
|
}
|
|
95
95
|
#xmlmap not required when same as :name
|
|
@@ -111,7 +111,7 @@ module Gridify
|
|
|
111
111
|
save = ActiveRecord::Base.include_root_in_json
|
|
112
112
|
ActiveRecord::Base.include_root_in_json = false
|
|
113
113
|
if colInclude
|
|
114
|
-
json = data
|
|
114
|
+
json = build_json(data);
|
|
115
115
|
else
|
|
116
116
|
json = data.to_json
|
|
117
117
|
end
|
|
@@ -215,6 +215,21 @@ module Gridify
|
|
|
215
215
|
end
|
|
216
216
|
cond = [ expr ] + vals
|
|
217
217
|
end
|
|
218
|
+
|
|
219
|
+
def build_json(data)
|
|
220
|
+
raw_data = JSON.parse(data.to_json(:include => colInclude))
|
|
221
|
+
raw_data[resource].each do |row|
|
|
222
|
+
colInclude.each do |incl|
|
|
223
|
+
sm = incl.to_s
|
|
224
|
+
if row[sm]
|
|
225
|
+
row[sm].each do |k, v|
|
|
226
|
+
row[sm + "__" + k] = v
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
return raw_data.to_json()
|
|
232
|
+
end
|
|
218
233
|
end
|
|
219
234
|
end
|
|
220
235
|
|
data/lib/jquery/jqgrid.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
module JqGrid#:nodoc:
|
|
2
|
-
end
|
|
3
|
-
|
|
4
|
-
require 'jquery/jqgrid/jqgrid'
|
|
1
|
+
module JqGrid#:nodoc:
|
|
2
|
+
end
|
|
3
|
+
|
|
4
|
+
require 'jquery/jqgrid/jqgrid'
|
|
5
5
|
require 'handle_attributes'
|
data/lib/jquery/jqtouch.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module JqTouch#:nodoc:
|
|
2
|
-
end
|
|
3
|
-
|
|
1
|
+
module JqTouch#:nodoc:
|
|
2
|
+
end
|
|
3
|
+
|
|
4
4
|
#require 'jquery/jqtouch/controller/ui_dialog_controls'
|
data/lib/jquery/jquery.rb
CHANGED
|
@@ -1,431 +1,431 @@
|
|
|
1
|
-
module ActionView
|
|
2
|
-
module Helpers
|
|
3
|
-
|
|
4
|
-
def jquery_javascripts(locale)
|
|
5
|
-
if locale != 'en'
|
|
6
|
-
else
|
|
7
|
-
js = capture { javascript_include_tag "i18n/jquery.ui/datepicker-#{locale}.min.js" }
|
|
8
|
-
js << capture { '<script type="text/javascript">' }
|
|
9
|
-
js << capture { " jQuery.datepicker.setDefaults(jQuery.datepicker.regional['#{locale}']);" }
|
|
10
|
-
js << capture { '</script>' }
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
module JavaScriptHelper
|
|
15
|
-
|
|
16
|
-
# This function can be used to render rjs inline
|
|
17
|
-
#
|
|
18
|
-
# <%= javascript_function do |page|
|
|
19
|
-
# page.replace_html :list, :partial => 'list', :object => @list
|
|
20
|
-
# end %>
|
|
21
|
-
#
|
|
22
|
-
def javascript_function(*args, &block)
|
|
23
|
-
html_options = args.extract_options!
|
|
24
|
-
function = args[0] || ''
|
|
25
|
-
|
|
26
|
-
html_options.symbolize_keys!
|
|
27
|
-
function = update_page(&block) if block_given?
|
|
28
|
-
javascript_tag(function)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def jquery_id(id)
|
|
32
|
-
id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def jquery_ids(ids)
|
|
36
|
-
Array(ids).map{|id| jquery_id(id)}.join(',')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
module PrototypeHelper
|
|
42
|
-
|
|
43
|
-
USE_PROTECTION = const_defined?(:DISABLE_JQUERY_FORGERY_PROTECTION) ? !DISABLE_JQUERY_FORGERY_PROTECTION : true
|
|
44
|
-
|
|
45
|
-
unless const_defined? :JQUERY_VAR
|
|
46
|
-
JQUERY_VAR = 'jQuery'
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
unless const_defined? :JQCALLBACKS
|
|
50
|
-
JQCALLBACKS = Set.new([ :beforeSend, :complete, :error, :success ] + (100..599).to_a)
|
|
51
|
-
#instance_eval { remove_const :AJAX_OPTIONS }
|
|
52
|
-
remove_const(:AJAX_OPTIONS) if const_defined?(:AJAX_OPTIONS)
|
|
53
|
-
AJAX_OPTIONS = Set.new([ :before, :after, :condition, :url,
|
|
54
|
-
:asynchronous, :method, :insertion, :position,
|
|
55
|
-
:form, :with, :update, :script ]).merge(JQCALLBACKS)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def periodically_call_remote(options = {})
|
|
59
|
-
frequency = options[:frequency] || 10 # every ten seconds by default
|
|
60
|
-
code = "setInterval(function() {#{remote_function(options)}}, #{frequency} * 1000)"
|
|
61
|
-
javascript_tag(code)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def remote_function(options)
|
|
65
|
-
javascript_options = options_for_ajax(options)
|
|
66
|
-
|
|
67
|
-
update = ''
|
|
68
|
-
if options[:update] && options[:update].is_a?(Hash)
|
|
69
|
-
update = []
|
|
70
|
-
update << "success:'#{options[:update][:success]}'" if options[:update][:success]
|
|
71
|
-
update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure]
|
|
72
|
-
update = '{' + update.join(',') + '}'
|
|
73
|
-
elsif options[:update]
|
|
74
|
-
update << "'#{options[:update]}'"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
function = "#{JQUERY_VAR}.ajax(#{javascript_options})"
|
|
78
|
-
|
|
79
|
-
function = "#{options[:before]}; #{function}" if options[:before]
|
|
80
|
-
function = "#{function}; #{options[:after]}" if options[:after]
|
|
81
|
-
function = "if (#{options[:condition]}) { #{function}; }" if options[:condition]
|
|
82
|
-
function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm]
|
|
83
|
-
return function
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
class JavaScriptGenerator
|
|
87
|
-
module GeneratorMethods
|
|
88
|
-
|
|
89
|
-
def insert_html(position, id, *options_for_render)
|
|
90
|
-
insertion = position.to_s.downcase
|
|
91
|
-
insertion = 'append' if insertion == 'bottom'
|
|
92
|
-
insertion = 'prepend' if insertion == 'top'
|
|
93
|
-
call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").#{insertion}", render(*options_for_render)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def replace_html(id, *options_for_render)
|
|
97
|
-
insert_html(:html, id, *options_for_render)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def replace(id, *options_for_render)
|
|
101
|
-
call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").replaceWith", render(*options_for_render)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def remove(*ids)
|
|
105
|
-
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").remove"
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def show(*ids)
|
|
109
|
-
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").show"
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def hide(*ids)
|
|
113
|
-
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").hide"
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def toggle(*ids)
|
|
117
|
-
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").toggle"
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def jquery_id(id)
|
|
121
|
-
id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def jquery_ids(ids)
|
|
125
|
-
Array(ids).map{|id| jquery_id(id)}.join(',')
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
protected
|
|
132
|
-
def options_for_ajax(options)
|
|
133
|
-
js_options = build_callbacks(options)
|
|
134
|
-
|
|
135
|
-
url_options = options[:url]
|
|
136
|
-
url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash)
|
|
137
|
-
js_options['url'] = "'#{url_for(url_options)}'"
|
|
138
|
-
js_options['async'] = false if options[:type] == :synchronous
|
|
139
|
-
js_options['type'] = options[:method] ? method_option_to_s(options[:method]) : ( options[:form] ? "'post'" : nil )
|
|
140
|
-
js_options['dataType'] = options[:datatype] ? "'#{options[:datatype]}'" : (options[:update] ? nil : "'script'")
|
|
141
|
-
|
|
142
|
-
if options[:form]
|
|
143
|
-
js_options['data'] = "#{JQUERY_VAR}.param(#{JQUERY_VAR}(this).serializeArray())"
|
|
144
|
-
elsif options[:submit]
|
|
145
|
-
js_options['data'] = "#{JQUERY_VAR}(\"##{options[:submit]} :input\").serialize()"
|
|
146
|
-
elsif options[:with]
|
|
147
|
-
js_options['data'] = options[:with].gsub("Form.serialize(this.form)","#{JQUERY_VAR}.param(#{JQUERY_VAR}(this.form).serializeArray())")
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
js_options['type'] ||= "'post'"
|
|
151
|
-
if options[:method]
|
|
152
|
-
if method_option_to_s(options[:method]) == "'put'" || method_option_to_s(options[:method]) == "'delete'"
|
|
153
|
-
js_options['type'] = "'post'"
|
|
154
|
-
if js_options['data']
|
|
155
|
-
js_options['data'] << " + '&"
|
|
156
|
-
else
|
|
157
|
-
js_options['data'] = "'"
|
|
158
|
-
end
|
|
159
|
-
js_options['data'] << "_method=#{options[:method]}'"
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
if USE_PROTECTION && respond_to?('protect_against_forgery?') && protect_against_forgery?
|
|
164
|
-
if js_options['data']
|
|
165
|
-
js_options['data'] << " + '&"
|
|
166
|
-
else
|
|
167
|
-
js_options['data'] = "'"
|
|
168
|
-
end
|
|
169
|
-
js_options['data'] << "#{request_forgery_protection_token}=' + encodeURIComponent('#{escape_javascript form_authenticity_token}')"
|
|
170
|
-
end
|
|
171
|
-
js_options['data'] = "''" if js_options['type'] == "'post'" && js_options['data'].nil?
|
|
172
|
-
options_for_javascript(js_options.reject {|key, value| value.nil?})
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def build_update_for_success(html_id, insertion=nil)
|
|
176
|
-
insertion = build_insertion(insertion)
|
|
177
|
-
"#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request);"
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def build_update_for_error(html_id, insertion=nil)
|
|
181
|
-
insertion = build_insertion(insertion)
|
|
182
|
-
"#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request.responseText);"
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def build_insertion(insertion)
|
|
186
|
-
insertion = insertion ? insertion.to_s.downcase : 'html'
|
|
187
|
-
insertion = 'append' if insertion == 'bottom'
|
|
188
|
-
insertion = 'prepend' if insertion == 'top'
|
|
189
|
-
insertion
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def build_observer(klass, name, options = {})
|
|
193
|
-
if options[:with] && (options[:with] !~ /[\{=(.]/)
|
|
194
|
-
options[:with] = "'#{options[:with]}=' + value"
|
|
195
|
-
else
|
|
196
|
-
options[:with] ||= 'value' unless options[:function]
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
callback = options[:function] || remote_function(options)
|
|
200
|
-
javascript = "#{JQUERY_VAR}('#{jquery_id(name)}').delayedObserver("
|
|
201
|
-
javascript << "#{options[:frequency] || 0}, "
|
|
202
|
-
javascript << "function(element, value) {"
|
|
203
|
-
javascript << "#{callback}}"
|
|
204
|
-
#javascript << ", '#{options[:on]}'" if options[:on]
|
|
205
|
-
javascript << ")"
|
|
206
|
-
javascript_tag(javascript)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
def build_callbacks(options)
|
|
210
|
-
callbacks = {}
|
|
211
|
-
options[:beforeSend] = '';
|
|
212
|
-
[:uninitialized,:loading].each do |key|
|
|
213
|
-
options[:beforeSend] << (options[key].last == ';' ? options.delete(key) : options.delete(key) << ';') if options[key]
|
|
214
|
-
end
|
|
215
|
-
options.delete(:beforeSend) if options[:beforeSend].blank?
|
|
216
|
-
options[:complete] = options.delete(:loaded) if options[:loaded]
|
|
217
|
-
options[:error] = options.delete(:failure) if options[:failure]
|
|
218
|
-
if options[:update]
|
|
219
|
-
if options[:update].is_a?(Hash)
|
|
220
|
-
options[:update][:error] = options[:update].delete(:failure) if options[:update][:failure]
|
|
221
|
-
if options[:update][:success]
|
|
222
|
-
options[:success] = build_update_for_success(options[:update][:success], options[:position]) << (options[:success] ? options[:success] : '')
|
|
223
|
-
end
|
|
224
|
-
if options[:update][:error]
|
|
225
|
-
options[:error] = build_update_for_error(options[:update][:error], options[:position]) << (options[:error] ? options[:error] : '')
|
|
226
|
-
end
|
|
227
|
-
else
|
|
228
|
-
options[:success] = build_update_for_success(options[:update], options[:position]) << (options[:success] ? options[:success] : '')
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
options.each do |callback, code|
|
|
232
|
-
if JQCALLBACKS.include?(callback)
|
|
233
|
-
callbacks[callback] = "function(request){#{code}}"
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
callbacks
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
class JavaScriptElementProxy < JavaScriptProxy #:nodoc:
|
|
242
|
-
|
|
243
|
-
unless const_defined? :JQUERY_VAR
|
|
244
|
-
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
def initialize(generator, id)
|
|
248
|
-
id = id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
249
|
-
@id = id
|
|
250
|
-
super(generator, "#{JQUERY_VAR}(\"#{id}\")")
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
def replace_html(*options_for_render)
|
|
254
|
-
call 'html', @generator.send(:render, *options_for_render)
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
def replace(*options_for_render)
|
|
258
|
-
call 'replaceWith', @generator.send(:render, *options_for_render)
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
def reload(options_for_replace={})
|
|
262
|
-
replace(options_for_replace.merge({ :partial => @id.to_s.sub(/^#/,'') }))
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
def value()
|
|
266
|
-
call 'val()'
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
def value=(value)
|
|
270
|
-
call 'val', value
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
class JavaScriptElementCollectionProxy < JavaScriptCollectionProxy #:nodoc:\
|
|
276
|
-
|
|
277
|
-
unless const_defined? :JQUERY_VAR
|
|
278
|
-
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
def initialize(generator, pattern)
|
|
282
|
-
super(generator, "#{JQUERY_VAR}(#{pattern.to_json})")
|
|
283
|
-
end
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
module ScriptaculousHelper
|
|
287
|
-
|
|
288
|
-
unless const_defined? :JQUERY_VAR
|
|
289
|
-
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
unless const_defined? :SCRIPTACULOUS_EFFECTS
|
|
293
|
-
SCRIPTACULOUS_EFFECTS = {
|
|
294
|
-
:appear => {:method => 'fadeIn'},
|
|
295
|
-
:blind_down => {:method => 'blind', :mode => 'show', :options => {:direction => 'vertical'}},
|
|
296
|
-
:blind_up => {:method => 'blind', :mode => 'hide', :options => {:direction => 'vertical'}},
|
|
297
|
-
:blind_right => {:method => 'blind', :mode => 'show', :options => {:direction => 'horizontal'}},
|
|
298
|
-
:blind_left => {:method => 'blind', :mode => 'hide', :options => {:direction => 'horizontal'}},
|
|
299
|
-
:bounce_in => {:method => 'bounce', :mode => 'show', :options => {:direction => 'up'}},
|
|
300
|
-
:bounce_out => {:method => 'bounce', :mode => 'hide', :options => {:direction => 'up'}},
|
|
301
|
-
:drop_in => {:method => 'drop', :mode => 'show', :options => {:direction => 'up'}},
|
|
302
|
-
:drop_out => {:method => 'drop', :mode => 'hide', :options => {:direction => 'down'}},
|
|
303
|
-
:fade => {:method => 'fadeOut'},
|
|
304
|
-
:fold_in => {:method => 'fold', :mode => 'hide'},
|
|
305
|
-
:fold_out => {:method => 'fold', :mode => 'show'},
|
|
306
|
-
:grow => {:method => 'scale', :mode => 'show'},
|
|
307
|
-
:shrink => {:method => 'scale', :mode => 'hide'},
|
|
308
|
-
:slide_down => {:method => 'slide', :mode => 'show', :options => {:direction => 'up'}},
|
|
309
|
-
:slide_up => {:method => 'slide', :mode => 'hide', :options => {:direction => 'up'}},
|
|
310
|
-
:slide_right => {:method => 'slide', :mode => 'show', :options => {:direction => 'left'}},
|
|
311
|
-
:slide_left => {:method => 'slide', :mode => 'hide', :options => {:direction => 'left'}},
|
|
312
|
-
:squish => {:method => 'scale', :mode => 'hide', :options => {:origin => "['top','left']"}},
|
|
313
|
-
:switch_on => {:method => 'clip', :mode => 'show', :options => {:direction => 'vertical'}},
|
|
314
|
-
:switch_off => {:method => 'clip', :mode => 'hide', :options => {:direction => 'vertical'}},
|
|
315
|
-
:toggle_appear => {:method => 'fadeToggle'},
|
|
316
|
-
:toggle_slide => {:method => 'slide', :mode => 'toggle', :options => {:direction => 'up'}},
|
|
317
|
-
:toggle_blind => {:method => 'blind', :mode => 'toggle', :options => {:direction => 'vertical'}},
|
|
318
|
-
}
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
def visual_effect(name, element_id = false, js_options = {})
|
|
322
|
-
element = element_id ? element_id : "this"
|
|
323
|
-
|
|
324
|
-
if SCRIPTACULOUS_EFFECTS.has_key? name.to_sym
|
|
325
|
-
effect = SCRIPTACULOUS_EFFECTS[name.to_sym]
|
|
326
|
-
name = effect[:method]
|
|
327
|
-
mode = effect[:mode]
|
|
328
|
-
js_options = js_options.merge(effect[:options]) if effect[:options]
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
[:color, :direction, :startcolor, :endcolor].each do |option|
|
|
332
|
-
js_options[option] = "'#{js_options[option]}'" if js_options[option]
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
if js_options.has_key? :duration
|
|
336
|
-
speed = js_options.delete :duration
|
|
337
|
-
speed = (speed * 1000).to_i unless speed.nil?
|
|
338
|
-
else
|
|
339
|
-
speed = js_options.delete :speed
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
if ['fadeIn','fadeOut','fadeToggle'].include?(name)
|
|
343
|
-
# 090905 - Jake - changed ' to \" so it passes assert_select_rjs with an id
|
|
344
|
-
javascript = "#{JQUERY_VAR}(\"#{jquery_id(element_id)}\").#{name}("
|
|
345
|
-
javascript << "#{speed}" unless speed.nil?
|
|
346
|
-
javascript << ");"
|
|
347
|
-
else
|
|
348
|
-
# 090905 - Jake - changed ' to \" so it passes "assert_select_rjs :effect, ID"
|
|
349
|
-
javascript = "#{JQUERY_VAR}(\"#{jquery_id(element_id)}\").#{mode || 'effect'}('#{name}'"
|
|
350
|
-
javascript << ",#{options_for_javascript(js_options)}" unless speed.nil? && js_options.empty?
|
|
351
|
-
javascript << ",#{speed}" unless speed.nil?
|
|
352
|
-
javascript << ");"
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
def sortable_element_js(element_id, options = {}) #:nodoc:
|
|
358
|
-
#convert similar attributes
|
|
359
|
-
options[:handle] = ".#{options[:handle]}" if options[:handle]
|
|
360
|
-
if options[:tag] || options[:only]
|
|
361
|
-
options[:items] = "> "
|
|
362
|
-
options[:items] << options.delete(:tag) if options[:tag]
|
|
363
|
-
options[:items] << ".#{options.delete(:only)}" if options[:only]
|
|
364
|
-
end
|
|
365
|
-
options[:connectWith] = options.delete(:containment).map {|x| "##{x}"} if options[:containment]
|
|
366
|
-
options[:containment] = options.delete(:container) if options[:container]
|
|
367
|
-
options[:dropOnEmpty] = false unless options[:dropOnEmpty]
|
|
368
|
-
options[:helper] = "'clone'" if options[:ghosting] == true
|
|
369
|
-
options[:axis] = case options.delete(:constraint)
|
|
370
|
-
when "vertical", :vertical
|
|
371
|
-
"y"
|
|
372
|
-
when "horizontal", :horizontal
|
|
373
|
-
"x"
|
|
374
|
-
when false
|
|
375
|
-
nil
|
|
376
|
-
when nil
|
|
377
|
-
"y"
|
|
378
|
-
end
|
|
379
|
-
options.delete(:axis) if options[:axis].nil?
|
|
380
|
-
options.delete(:overlap)
|
|
381
|
-
options.delete(:ghosting)
|
|
382
|
-
|
|
383
|
-
if options[:onUpdate] || options[:url]
|
|
384
|
-
if options[:format]
|
|
385
|
-
options[:with] ||= "#{JQUERY_VAR}(this).sortable('serialize',{key:'#{element_id}[]', expression:#{options[:format]}})"
|
|
386
|
-
options.delete(:format)
|
|
387
|
-
else
|
|
388
|
-
options[:with] ||= "#{JQUERY_VAR}(this).sortable('serialize',{key:'#{element_id}[]'})"
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
options[:onUpdate] ||= "function(){" + remote_function(options) + "}"
|
|
392
|
-
end
|
|
393
|
-
|
|
394
|
-
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
|
395
|
-
options[:update] = options.delete(:onUpdate) if options[:onUpdate]
|
|
396
|
-
|
|
397
|
-
[:axis, :cancel, :containment, :cursor, :handle, :tolerance, :items, :placeholder].each do |option|
|
|
398
|
-
options[option] = "'#{options[option]}'" if options[option]
|
|
399
|
-
end
|
|
400
|
-
|
|
401
|
-
options[:connectWith] = array_or_string_for_javascript(options[:connectWith]) if options[:connectWith]
|
|
402
|
-
|
|
403
|
-
%(#{JQUERY_VAR}('#{jquery_id(element_id)}').sortable(#{options_for_javascript(options)});)
|
|
404
|
-
end
|
|
405
|
-
|
|
406
|
-
def draggable_element_js(element_id, options = {})
|
|
407
|
-
%(#{JQUERY_VAR}("#{jquery_id(element_id)}").draggable(#{options_for_javascript(options)});)
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
def drop_receiving_element_js(element_id, options = {})
|
|
411
|
-
#convert similar options
|
|
412
|
-
options[:hoverClass] = options.delete(:hoverclass) if options[:hoverclass]
|
|
413
|
-
options[:drop] = options.delete(:onDrop) if options[:onDrop]
|
|
414
|
-
|
|
415
|
-
if options[:drop] || options[:url]
|
|
416
|
-
options[:with] ||= "'id=' + encodeURIComponent(#{JQUERY_VAR}(ui.draggable).attr('id'))"
|
|
417
|
-
options[:drop] ||= "function(ev, ui){" + remote_function(options) + "}"
|
|
418
|
-
end
|
|
419
|
-
|
|
420
|
-
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
|
421
|
-
|
|
422
|
-
options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]
|
|
423
|
-
[:activeClass, :hoverClass, :tolerance].each do |option|
|
|
424
|
-
options[option] = "'#{options[option]}'" if options[option]
|
|
425
|
-
end
|
|
426
|
-
|
|
427
|
-
%(#{JQUERY_VAR}('#{jquery_id(element_id)}').droppable(#{options_for_javascript(options)});)
|
|
428
|
-
end
|
|
429
|
-
end
|
|
430
|
-
end
|
|
431
|
-
end
|
|
1
|
+
module ActionView
|
|
2
|
+
module Helpers
|
|
3
|
+
|
|
4
|
+
def jquery_javascripts(locale)
|
|
5
|
+
if locale != 'en'
|
|
6
|
+
else
|
|
7
|
+
js = capture { javascript_include_tag "i18n/jquery.ui/datepicker-#{locale}.min.js" }
|
|
8
|
+
js << capture { '<script type="text/javascript">' }
|
|
9
|
+
js << capture { " jQuery.datepicker.setDefaults(jQuery.datepicker.regional['#{locale}']);" }
|
|
10
|
+
js << capture { '</script>' }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module JavaScriptHelper
|
|
15
|
+
|
|
16
|
+
# This function can be used to render rjs inline
|
|
17
|
+
#
|
|
18
|
+
# <%= javascript_function do |page|
|
|
19
|
+
# page.replace_html :list, :partial => 'list', :object => @list
|
|
20
|
+
# end %>
|
|
21
|
+
#
|
|
22
|
+
def javascript_function(*args, &block)
|
|
23
|
+
html_options = args.extract_options!
|
|
24
|
+
function = args[0] || ''
|
|
25
|
+
|
|
26
|
+
html_options.symbolize_keys!
|
|
27
|
+
function = update_page(&block) if block_given?
|
|
28
|
+
javascript_tag(function)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def jquery_id(id)
|
|
32
|
+
id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def jquery_ids(ids)
|
|
36
|
+
Array(ids).map{|id| jquery_id(id)}.join(',')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
module PrototypeHelper
|
|
42
|
+
|
|
43
|
+
USE_PROTECTION = const_defined?(:DISABLE_JQUERY_FORGERY_PROTECTION) ? !DISABLE_JQUERY_FORGERY_PROTECTION : true
|
|
44
|
+
|
|
45
|
+
unless const_defined? :JQUERY_VAR
|
|
46
|
+
JQUERY_VAR = 'jQuery'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
unless const_defined? :JQCALLBACKS
|
|
50
|
+
JQCALLBACKS = Set.new([ :beforeSend, :complete, :error, :success ] + (100..599).to_a)
|
|
51
|
+
#instance_eval { remove_const :AJAX_OPTIONS }
|
|
52
|
+
remove_const(:AJAX_OPTIONS) if const_defined?(:AJAX_OPTIONS)
|
|
53
|
+
AJAX_OPTIONS = Set.new([ :before, :after, :condition, :url,
|
|
54
|
+
:asynchronous, :method, :insertion, :position,
|
|
55
|
+
:form, :with, :update, :script ]).merge(JQCALLBACKS)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def periodically_call_remote(options = {})
|
|
59
|
+
frequency = options[:frequency] || 10 # every ten seconds by default
|
|
60
|
+
code = "setInterval(function() {#{remote_function(options)}}, #{frequency} * 1000)"
|
|
61
|
+
javascript_tag(code)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def remote_function(options)
|
|
65
|
+
javascript_options = options_for_ajax(options)
|
|
66
|
+
|
|
67
|
+
update = ''
|
|
68
|
+
if options[:update] && options[:update].is_a?(Hash)
|
|
69
|
+
update = []
|
|
70
|
+
update << "success:'#{options[:update][:success]}'" if options[:update][:success]
|
|
71
|
+
update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure]
|
|
72
|
+
update = '{' + update.join(',') + '}'
|
|
73
|
+
elsif options[:update]
|
|
74
|
+
update << "'#{options[:update]}'"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
function = "#{JQUERY_VAR}.ajax(#{javascript_options})"
|
|
78
|
+
|
|
79
|
+
function = "#{options[:before]}; #{function}" if options[:before]
|
|
80
|
+
function = "#{function}; #{options[:after]}" if options[:after]
|
|
81
|
+
function = "if (#{options[:condition]}) { #{function}; }" if options[:condition]
|
|
82
|
+
function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm]
|
|
83
|
+
return function
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
class JavaScriptGenerator
|
|
87
|
+
module GeneratorMethods
|
|
88
|
+
|
|
89
|
+
def insert_html(position, id, *options_for_render)
|
|
90
|
+
insertion = position.to_s.downcase
|
|
91
|
+
insertion = 'append' if insertion == 'bottom'
|
|
92
|
+
insertion = 'prepend' if insertion == 'top'
|
|
93
|
+
call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").#{insertion}", render(*options_for_render)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def replace_html(id, *options_for_render)
|
|
97
|
+
insert_html(:html, id, *options_for_render)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def replace(id, *options_for_render)
|
|
101
|
+
call "#{JQUERY_VAR}(\"#{jquery_id(id)}\").replaceWith", render(*options_for_render)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def remove(*ids)
|
|
105
|
+
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").remove"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def show(*ids)
|
|
109
|
+
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").show"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def hide(*ids)
|
|
113
|
+
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").hide"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def toggle(*ids)
|
|
117
|
+
call "#{JQUERY_VAR}(\"#{jquery_ids(ids)}\").toggle"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def jquery_id(id)
|
|
121
|
+
id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def jquery_ids(ids)
|
|
125
|
+
Array(ids).map{|id| jquery_id(id)}.join(',')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
protected
|
|
132
|
+
def options_for_ajax(options)
|
|
133
|
+
js_options = build_callbacks(options)
|
|
134
|
+
|
|
135
|
+
url_options = options[:url]
|
|
136
|
+
url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash)
|
|
137
|
+
js_options['url'] = "'#{url_for(url_options)}'"
|
|
138
|
+
js_options['async'] = false if options[:type] == :synchronous
|
|
139
|
+
js_options['type'] = options[:method] ? method_option_to_s(options[:method]) : ( options[:form] ? "'post'" : nil )
|
|
140
|
+
js_options['dataType'] = options[:datatype] ? "'#{options[:datatype]}'" : (options[:update] ? nil : "'script'")
|
|
141
|
+
|
|
142
|
+
if options[:form]
|
|
143
|
+
js_options['data'] = "#{JQUERY_VAR}.param(#{JQUERY_VAR}(this).serializeArray())"
|
|
144
|
+
elsif options[:submit]
|
|
145
|
+
js_options['data'] = "#{JQUERY_VAR}(\"##{options[:submit]} :input\").serialize()"
|
|
146
|
+
elsif options[:with]
|
|
147
|
+
js_options['data'] = options[:with].gsub("Form.serialize(this.form)","#{JQUERY_VAR}.param(#{JQUERY_VAR}(this.form).serializeArray())")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
js_options['type'] ||= "'post'"
|
|
151
|
+
if options[:method]
|
|
152
|
+
if method_option_to_s(options[:method]) == "'put'" || method_option_to_s(options[:method]) == "'delete'"
|
|
153
|
+
js_options['type'] = "'post'"
|
|
154
|
+
if js_options['data']
|
|
155
|
+
js_options['data'] << " + '&"
|
|
156
|
+
else
|
|
157
|
+
js_options['data'] = "'"
|
|
158
|
+
end
|
|
159
|
+
js_options['data'] << "_method=#{options[:method]}'"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
if USE_PROTECTION && respond_to?('protect_against_forgery?') && protect_against_forgery?
|
|
164
|
+
if js_options['data']
|
|
165
|
+
js_options['data'] << " + '&"
|
|
166
|
+
else
|
|
167
|
+
js_options['data'] = "'"
|
|
168
|
+
end
|
|
169
|
+
js_options['data'] << "#{request_forgery_protection_token}=' + encodeURIComponent('#{escape_javascript form_authenticity_token}')"
|
|
170
|
+
end
|
|
171
|
+
js_options['data'] = "''" if js_options['type'] == "'post'" && js_options['data'].nil?
|
|
172
|
+
options_for_javascript(js_options.reject {|key, value| value.nil?})
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def build_update_for_success(html_id, insertion=nil)
|
|
176
|
+
insertion = build_insertion(insertion)
|
|
177
|
+
"#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request);"
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def build_update_for_error(html_id, insertion=nil)
|
|
181
|
+
insertion = build_insertion(insertion)
|
|
182
|
+
"#{JQUERY_VAR}('#{jquery_id(html_id)}').#{insertion}(request.responseText);"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def build_insertion(insertion)
|
|
186
|
+
insertion = insertion ? insertion.to_s.downcase : 'html'
|
|
187
|
+
insertion = 'append' if insertion == 'bottom'
|
|
188
|
+
insertion = 'prepend' if insertion == 'top'
|
|
189
|
+
insertion
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def build_observer(klass, name, options = {})
|
|
193
|
+
if options[:with] && (options[:with] !~ /[\{=(.]/)
|
|
194
|
+
options[:with] = "'#{options[:with]}=' + value"
|
|
195
|
+
else
|
|
196
|
+
options[:with] ||= 'value' unless options[:function]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
callback = options[:function] || remote_function(options)
|
|
200
|
+
javascript = "#{JQUERY_VAR}('#{jquery_id(name)}').delayedObserver("
|
|
201
|
+
javascript << "#{options[:frequency] || 0}, "
|
|
202
|
+
javascript << "function(element, value) {"
|
|
203
|
+
javascript << "#{callback}}"
|
|
204
|
+
#javascript << ", '#{options[:on]}'" if options[:on]
|
|
205
|
+
javascript << ")"
|
|
206
|
+
javascript_tag(javascript)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def build_callbacks(options)
|
|
210
|
+
callbacks = {}
|
|
211
|
+
options[:beforeSend] = '';
|
|
212
|
+
[:uninitialized,:loading].each do |key|
|
|
213
|
+
options[:beforeSend] << (options[key].last == ';' ? options.delete(key) : options.delete(key) << ';') if options[key]
|
|
214
|
+
end
|
|
215
|
+
options.delete(:beforeSend) if options[:beforeSend].blank?
|
|
216
|
+
options[:complete] = options.delete(:loaded) if options[:loaded]
|
|
217
|
+
options[:error] = options.delete(:failure) if options[:failure]
|
|
218
|
+
if options[:update]
|
|
219
|
+
if options[:update].is_a?(Hash)
|
|
220
|
+
options[:update][:error] = options[:update].delete(:failure) if options[:update][:failure]
|
|
221
|
+
if options[:update][:success]
|
|
222
|
+
options[:success] = build_update_for_success(options[:update][:success], options[:position]) << (options[:success] ? options[:success] : '')
|
|
223
|
+
end
|
|
224
|
+
if options[:update][:error]
|
|
225
|
+
options[:error] = build_update_for_error(options[:update][:error], options[:position]) << (options[:error] ? options[:error] : '')
|
|
226
|
+
end
|
|
227
|
+
else
|
|
228
|
+
options[:success] = build_update_for_success(options[:update], options[:position]) << (options[:success] ? options[:success] : '')
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
options.each do |callback, code|
|
|
232
|
+
if JQCALLBACKS.include?(callback)
|
|
233
|
+
callbacks[callback] = "function(request){#{code}}"
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
callbacks
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
class JavaScriptElementProxy < JavaScriptProxy #:nodoc:
|
|
242
|
+
|
|
243
|
+
unless const_defined? :JQUERY_VAR
|
|
244
|
+
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def initialize(generator, id)
|
|
248
|
+
id = id.to_s.count('#.*,>+~:[/ ') == 0 ? "##{id}" : id
|
|
249
|
+
@id = id
|
|
250
|
+
super(generator, "#{JQUERY_VAR}(\"#{id}\")")
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def replace_html(*options_for_render)
|
|
254
|
+
call 'html', @generator.send(:render, *options_for_render)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def replace(*options_for_render)
|
|
258
|
+
call 'replaceWith', @generator.send(:render, *options_for_render)
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def reload(options_for_replace={})
|
|
262
|
+
replace(options_for_replace.merge({ :partial => @id.to_s.sub(/^#/,'') }))
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def value()
|
|
266
|
+
call 'val()'
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def value=(value)
|
|
270
|
+
call 'val', value
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
class JavaScriptElementCollectionProxy < JavaScriptCollectionProxy #:nodoc:\
|
|
276
|
+
|
|
277
|
+
unless const_defined? :JQUERY_VAR
|
|
278
|
+
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def initialize(generator, pattern)
|
|
282
|
+
super(generator, "#{JQUERY_VAR}(#{pattern.to_json})")
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
module ScriptaculousHelper
|
|
287
|
+
|
|
288
|
+
unless const_defined? :JQUERY_VAR
|
|
289
|
+
JQUERY_VAR = PrototypeHelper::JQUERY_VAR
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
unless const_defined? :SCRIPTACULOUS_EFFECTS
|
|
293
|
+
SCRIPTACULOUS_EFFECTS = {
|
|
294
|
+
:appear => {:method => 'fadeIn'},
|
|
295
|
+
:blind_down => {:method => 'blind', :mode => 'show', :options => {:direction => 'vertical'}},
|
|
296
|
+
:blind_up => {:method => 'blind', :mode => 'hide', :options => {:direction => 'vertical'}},
|
|
297
|
+
:blind_right => {:method => 'blind', :mode => 'show', :options => {:direction => 'horizontal'}},
|
|
298
|
+
:blind_left => {:method => 'blind', :mode => 'hide', :options => {:direction => 'horizontal'}},
|
|
299
|
+
:bounce_in => {:method => 'bounce', :mode => 'show', :options => {:direction => 'up'}},
|
|
300
|
+
:bounce_out => {:method => 'bounce', :mode => 'hide', :options => {:direction => 'up'}},
|
|
301
|
+
:drop_in => {:method => 'drop', :mode => 'show', :options => {:direction => 'up'}},
|
|
302
|
+
:drop_out => {:method => 'drop', :mode => 'hide', :options => {:direction => 'down'}},
|
|
303
|
+
:fade => {:method => 'fadeOut'},
|
|
304
|
+
:fold_in => {:method => 'fold', :mode => 'hide'},
|
|
305
|
+
:fold_out => {:method => 'fold', :mode => 'show'},
|
|
306
|
+
:grow => {:method => 'scale', :mode => 'show'},
|
|
307
|
+
:shrink => {:method => 'scale', :mode => 'hide'},
|
|
308
|
+
:slide_down => {:method => 'slide', :mode => 'show', :options => {:direction => 'up'}},
|
|
309
|
+
:slide_up => {:method => 'slide', :mode => 'hide', :options => {:direction => 'up'}},
|
|
310
|
+
:slide_right => {:method => 'slide', :mode => 'show', :options => {:direction => 'left'}},
|
|
311
|
+
:slide_left => {:method => 'slide', :mode => 'hide', :options => {:direction => 'left'}},
|
|
312
|
+
:squish => {:method => 'scale', :mode => 'hide', :options => {:origin => "['top','left']"}},
|
|
313
|
+
:switch_on => {:method => 'clip', :mode => 'show', :options => {:direction => 'vertical'}},
|
|
314
|
+
:switch_off => {:method => 'clip', :mode => 'hide', :options => {:direction => 'vertical'}},
|
|
315
|
+
:toggle_appear => {:method => 'fadeToggle'},
|
|
316
|
+
:toggle_slide => {:method => 'slide', :mode => 'toggle', :options => {:direction => 'up'}},
|
|
317
|
+
:toggle_blind => {:method => 'blind', :mode => 'toggle', :options => {:direction => 'vertical'}},
|
|
318
|
+
}
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def visual_effect(name, element_id = false, js_options = {})
|
|
322
|
+
element = element_id ? element_id : "this"
|
|
323
|
+
|
|
324
|
+
if SCRIPTACULOUS_EFFECTS.has_key? name.to_sym
|
|
325
|
+
effect = SCRIPTACULOUS_EFFECTS[name.to_sym]
|
|
326
|
+
name = effect[:method]
|
|
327
|
+
mode = effect[:mode]
|
|
328
|
+
js_options = js_options.merge(effect[:options]) if effect[:options]
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
[:color, :direction, :startcolor, :endcolor].each do |option|
|
|
332
|
+
js_options[option] = "'#{js_options[option]}'" if js_options[option]
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
if js_options.has_key? :duration
|
|
336
|
+
speed = js_options.delete :duration
|
|
337
|
+
speed = (speed * 1000).to_i unless speed.nil?
|
|
338
|
+
else
|
|
339
|
+
speed = js_options.delete :speed
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
if ['fadeIn','fadeOut','fadeToggle'].include?(name)
|
|
343
|
+
# 090905 - Jake - changed ' to \" so it passes assert_select_rjs with an id
|
|
344
|
+
javascript = "#{JQUERY_VAR}(\"#{jquery_id(element_id)}\").#{name}("
|
|
345
|
+
javascript << "#{speed}" unless speed.nil?
|
|
346
|
+
javascript << ");"
|
|
347
|
+
else
|
|
348
|
+
# 090905 - Jake - changed ' to \" so it passes "assert_select_rjs :effect, ID"
|
|
349
|
+
javascript = "#{JQUERY_VAR}(\"#{jquery_id(element_id)}\").#{mode || 'effect'}('#{name}'"
|
|
350
|
+
javascript << ",#{options_for_javascript(js_options)}" unless speed.nil? && js_options.empty?
|
|
351
|
+
javascript << ",#{speed}" unless speed.nil?
|
|
352
|
+
javascript << ");"
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
def sortable_element_js(element_id, options = {}) #:nodoc:
|
|
358
|
+
#convert similar attributes
|
|
359
|
+
options[:handle] = ".#{options[:handle]}" if options[:handle]
|
|
360
|
+
if options[:tag] || options[:only]
|
|
361
|
+
options[:items] = "> "
|
|
362
|
+
options[:items] << options.delete(:tag) if options[:tag]
|
|
363
|
+
options[:items] << ".#{options.delete(:only)}" if options[:only]
|
|
364
|
+
end
|
|
365
|
+
options[:connectWith] = options.delete(:containment).map {|x| "##{x}"} if options[:containment]
|
|
366
|
+
options[:containment] = options.delete(:container) if options[:container]
|
|
367
|
+
options[:dropOnEmpty] = false unless options[:dropOnEmpty]
|
|
368
|
+
options[:helper] = "'clone'" if options[:ghosting] == true
|
|
369
|
+
options[:axis] = case options.delete(:constraint)
|
|
370
|
+
when "vertical", :vertical
|
|
371
|
+
"y"
|
|
372
|
+
when "horizontal", :horizontal
|
|
373
|
+
"x"
|
|
374
|
+
when false
|
|
375
|
+
nil
|
|
376
|
+
when nil
|
|
377
|
+
"y"
|
|
378
|
+
end
|
|
379
|
+
options.delete(:axis) if options[:axis].nil?
|
|
380
|
+
options.delete(:overlap)
|
|
381
|
+
options.delete(:ghosting)
|
|
382
|
+
|
|
383
|
+
if options[:onUpdate] || options[:url]
|
|
384
|
+
if options[:format]
|
|
385
|
+
options[:with] ||= "#{JQUERY_VAR}(this).sortable('serialize',{key:'#{element_id}[]', expression:#{options[:format]}})"
|
|
386
|
+
options.delete(:format)
|
|
387
|
+
else
|
|
388
|
+
options[:with] ||= "#{JQUERY_VAR}(this).sortable('serialize',{key:'#{element_id}[]'})"
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
options[:onUpdate] ||= "function(){" + remote_function(options) + "}"
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
|
395
|
+
options[:update] = options.delete(:onUpdate) if options[:onUpdate]
|
|
396
|
+
|
|
397
|
+
[:axis, :cancel, :containment, :cursor, :handle, :tolerance, :items, :placeholder].each do |option|
|
|
398
|
+
options[option] = "'#{options[option]}'" if options[option]
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
options[:connectWith] = array_or_string_for_javascript(options[:connectWith]) if options[:connectWith]
|
|
402
|
+
|
|
403
|
+
%(#{JQUERY_VAR}('#{jquery_id(element_id)}').sortable(#{options_for_javascript(options)});)
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
def draggable_element_js(element_id, options = {})
|
|
407
|
+
%(#{JQUERY_VAR}("#{jquery_id(element_id)}").draggable(#{options_for_javascript(options)});)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
def drop_receiving_element_js(element_id, options = {})
|
|
411
|
+
#convert similar options
|
|
412
|
+
options[:hoverClass] = options.delete(:hoverclass) if options[:hoverclass]
|
|
413
|
+
options[:drop] = options.delete(:onDrop) if options[:onDrop]
|
|
414
|
+
|
|
415
|
+
if options[:drop] || options[:url]
|
|
416
|
+
options[:with] ||= "'id=' + encodeURIComponent(#{JQUERY_VAR}(ui.draggable).attr('id'))"
|
|
417
|
+
options[:drop] ||= "function(ev, ui){" + remote_function(options) + "}"
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
|
421
|
+
|
|
422
|
+
options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]
|
|
423
|
+
[:activeClass, :hoverClass, :tolerance].each do |option|
|
|
424
|
+
options[option] = "'#{options[option]}'" if options[option]
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
%(#{JQUERY_VAR}('#{jquery_id(element_id)}').droppable(#{options_for_javascript(options)});)
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|