right-rails 1.0.3 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -2
- data/Rakefile +28 -28
- data/lib/right_rails/java_script_generator.rb +59 -51
- data/public/images/{colorpicker.png → rightjs-ui/colorpicker.png} +0 -0
- data/public/images/{resizable.png → rightjs-ui/resizable.png} +0 -0
- data/public/javascripts/right-olds-src.js +47 -46
- data/public/javascripts/right-safe-src.js +103 -102
- data/public/javascripts/right-safe.js +1 -1
- data/public/javascripts/right-src.js +611 -541
- data/public/javascripts/right.js +86 -85
- data/public/javascripts/right/autocompleter-src.js +81 -77
- data/public/javascripts/right/autocompleter.js +1 -1
- data/public/javascripts/right/calendar-src.js +209 -197
- data/public/javascripts/right/calendar.js +6 -6
- data/public/javascripts/right/colorpicker-src.js +127 -117
- data/public/javascripts/right/colorpicker.js +6 -6
- data/public/javascripts/right/dnd-src.js +63 -63
- data/public/javascripts/right/dnd.js +2 -2
- data/public/javascripts/right/in-edit-src.js +53 -48
- data/public/javascripts/right/in-edit.js +2 -2
- data/public/javascripts/right/lightbox-src.js +107 -99
- data/public/javascripts/right/lightbox.js +2 -2
- data/public/javascripts/right/rater-src.js +48 -46
- data/public/javascripts/right/rater.js +3 -3
- data/public/javascripts/right/resizable-src.js +53 -61
- data/public/javascripts/right/resizable.js +4 -4
- data/public/javascripts/right/selectable-src.js +97 -95
- data/public/javascripts/right/selectable.js +2 -2
- data/public/javascripts/right/slider-src.js +47 -45
- data/public/javascripts/right/slider.js +8 -8
- data/public/javascripts/right/sortable-src.js +54 -52
- data/public/javascripts/right/tabs-src.js +181 -171
- data/public/javascripts/right/tooltip-src.js +39 -37
- data/public/javascripts/right/uploader-src.js +21 -19
- data/spec/lib/right_rails/java_script_generator_spec.rb +61 -56
- metadata +9 -7
data/CHANGELOG
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
+
2010-09-20 Nikolay Nemshilov
|
2
|
+
o Version 1.0.4
|
3
|
+
* RightJS 2.0.0 release updates
|
4
|
+
* page.document now returns '$(document)'
|
5
|
+
* page.window now returns '$(window)'
|
6
|
+
|
1
7
|
2010-09-06 Nikolay Nemshilov
|
2
8
|
o Version 1.0.0
|
3
9
|
* RightJS v2.0.0-rc2
|
4
10
|
* All new RightJS UI 2.0 widgets
|
5
11
|
* RightRails configuration interface
|
6
12
|
* Full Rails 3 support
|
7
|
-
|
13
|
+
|
8
14
|
|
9
15
|
2010-01-16 Nikolay V. Nemshilov aka St.
|
10
16
|
o Version 0.4.4
|
@@ -13,7 +19,7 @@
|
|
13
19
|
* Updated JSON and Events
|
14
20
|
* New in-place edit plugin
|
15
21
|
* Dutch i18n module
|
16
|
-
|
22
|
+
|
17
23
|
|
18
24
|
2009-12-26 Nikolay V. Nemshilov aka St.
|
19
25
|
o Version 0.4.3
|
data/Rakefile
CHANGED
@@ -48,15 +48,15 @@ end
|
|
48
48
|
#
|
49
49
|
namespace :rjs do
|
50
50
|
CURRENT_DIR = File.dirname(__FILE__)
|
51
|
-
|
51
|
+
|
52
52
|
OUTPUT_DIR = CURRENT_DIR + '/public'
|
53
53
|
OUTPUT_JSS_DIR = OUTPUT_DIR + "/javascripts"
|
54
|
-
OUTPUT_IMG_DIR = OUTPUT_DIR + "/images"
|
55
|
-
|
54
|
+
OUTPUT_IMG_DIR = OUTPUT_DIR + "/images/rightjs-ui"
|
55
|
+
|
56
56
|
RIGHTJS_CORE_DIR = CURRENT_DIR + '/../RightJS'
|
57
57
|
RIGHTJS_PLUGINS_DIR = CURRENT_DIR + '/../RightJSPlugins'
|
58
58
|
RIGHTJS_UI_DIR = CURRENT_DIR + '/../RightJSUI'
|
59
|
-
|
59
|
+
|
60
60
|
desc 'Builds all the RightJS files and tosses them into the directories'
|
61
61
|
task :build do
|
62
62
|
Rake::Task['rjs:nuke'].invoke
|
@@ -67,26 +67,26 @@ namespace :rjs do
|
|
67
67
|
Rake::Task['rjs:i18n'].invoke
|
68
68
|
Rake::Task['rjs:toss'].invoke
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
desc 'Nukes the RightJS sources directory'
|
72
72
|
task :nuke do
|
73
73
|
require 'fileutils'
|
74
|
-
|
74
|
+
|
75
75
|
puts "\e[31m<<<<<<<<<<<<< TERMAL CLEANING >>>>>>>>>>>>>>>>>\e[0m"
|
76
|
-
|
76
|
+
|
77
77
|
FileUtils.rm_rf OUTPUT_DIR if File.exists? OUTPUT_DIR
|
78
78
|
FileUtils.mkdir_p OUTPUT_DIR
|
79
79
|
FileUtils.mkdir_p OUTPUT_IMG_DIR
|
80
80
|
FileUtils.mkdir_p OUTPUT_JSS_DIR
|
81
81
|
FileUtils.mkdir_p OUTPUT_JSS_DIR + "/right"
|
82
|
-
|
82
|
+
|
83
83
|
puts "\e[32mDONE \e[0m"
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
desc 'Builds RightJS core and copies them in place'
|
87
87
|
task :'build:core' do
|
88
88
|
puts "\e[31m<<<<<<<<<<<< BUILDING THE CORE >>>>>>>>>>>>>>>>\e[0m"
|
89
|
-
|
89
|
+
|
90
90
|
system(%Q{
|
91
91
|
cd #{RIGHTJS_CORE_DIR};
|
92
92
|
rake build OPTIONS=no-olds;
|
@@ -94,49 +94,49 @@ namespace :rjs do
|
|
94
94
|
rake build OPTIONS=safe;
|
95
95
|
cp build/right-safe*.js #{OUTPUT_JSS_DIR};
|
96
96
|
})
|
97
|
-
|
97
|
+
|
98
98
|
puts "\e[32mDONE \e[0m"
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
desc 'Builds RightJS plugins and copies them in place'
|
102
102
|
task :'build:plugins' do
|
103
103
|
puts "\e[31m<<<<<<<<<<<<< BUILDING PLUGINS >>>>>>>>>>>>>>>>>\e[0m"
|
104
|
-
|
104
|
+
|
105
105
|
system(%Q{
|
106
106
|
cd #{RIGHTJS_PLUGINS_DIR};
|
107
107
|
rake build;
|
108
108
|
cp build/*.js #{OUTPUT_JSS_DIR}/right;
|
109
109
|
})
|
110
|
-
|
110
|
+
|
111
111
|
puts "\e[32mDONE \e[0m"
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
desc 'Builds RightJS UI modules and copies them in place'
|
115
115
|
task :'build:ui' do
|
116
116
|
puts "\e[31m<<<<<<<<<<< BUILDING UI MODULES >>>>>>>>>>>>>>>\e[0m"
|
117
|
-
|
117
|
+
|
118
118
|
system(%Q{
|
119
119
|
cd #{RIGHTJS_UI_DIR};
|
120
120
|
rake build;
|
121
121
|
cp build/*.js #{OUTPUT_JSS_DIR}/right;
|
122
122
|
})
|
123
|
-
|
123
|
+
|
124
124
|
system(%Q{
|
125
125
|
cd #{RIGHTJS_UI_DIR};
|
126
126
|
cp img/* #{OUTPUT_IMG_DIR};
|
127
127
|
})
|
128
|
-
|
128
|
+
|
129
129
|
puts "\e[32mDONE \e[0m"
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
desc 'Patches the RightJS UI modules for the Rails directories structure'
|
133
133
|
task :'patch' do
|
134
134
|
puts "\e[31m<<<<<<< PATCHING UI MODULES FOR RAILS >>>>>>>>>\e[0m"
|
135
|
-
|
135
|
+
|
136
136
|
FileList["#{OUTPUT_JSS_DIR}/right/*.js"].each do |filename|
|
137
137
|
old_content = File.read(filename)
|
138
138
|
new_content = old_content.gsub('url(../../img/', "url(/images/rightjs-ui/")
|
139
|
-
|
139
|
+
|
140
140
|
if old_content != new_content
|
141
141
|
puts "Patching: #{File.basename(filename)}"
|
142
142
|
File.open(filename, "w") do |f|
|
@@ -144,29 +144,29 @@ namespace :rjs do
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
puts "\e[32mDONE \e[0m"
|
149
149
|
end
|
150
|
-
|
150
|
+
|
151
151
|
desc 'Copies the RightJS UI i18n modules in place'
|
152
152
|
task :i18n do
|
153
153
|
puts "\e[31m<<<<<<<<<<< COPYING I18N MODULES >>>>>>>>>>>>>>\e[0m"
|
154
|
-
|
154
|
+
|
155
155
|
system(%Q{
|
156
156
|
cp -r #{RIGHTJS_UI_DIR}/i18n #{OUTPUT_JSS_DIR}/right;
|
157
157
|
})
|
158
|
-
|
158
|
+
|
159
159
|
puts "\e[32mDONE \e[0m"
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
desc 'Prepares the files as they will be placed in Rails'
|
163
163
|
task :toss do
|
164
164
|
puts "\e[31m<<<<<<<<< PREPARING FILES FOR RAILS >>>>>>>>>>>\e[0m"
|
165
|
-
|
165
|
+
|
166
166
|
FileList["#{OUTPUT_JSS_DIR}/right/right-*.js"].each do |filename|
|
167
167
|
system "mv #{filename.gsub('/right/right-', '/right/{right-,}')}"
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
puts "\e[32mDONE \e[0m"
|
171
171
|
end
|
172
172
|
end
|
@@ -2,14 +2,14 @@
|
|
2
2
|
# The right-rails scripts generator
|
3
3
|
#
|
4
4
|
class RightRails::JavaScriptGenerator
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(template, thread=nil)
|
7
7
|
@util = Util.new(template, thread)
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
# the top-level constants that the generator should respond to transparently
|
11
|
-
JS_CONSTANTS = [:
|
12
|
-
|
11
|
+
JS_CONSTANTS = [:top, :RR]
|
12
|
+
|
13
13
|
# method calls catchup
|
14
14
|
def method_missing(name, *args)
|
15
15
|
cmd = if JS_CONSTANTS.include?(name)
|
@@ -19,15 +19,15 @@ class RightRails::JavaScriptGenerator
|
|
19
19
|
else
|
20
20
|
"#{name}(#{@util.to_js_args(args)})"
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
@util.record(cmd)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
# returns the result script
|
27
27
|
def to_s
|
28
28
|
@util.build_script
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
#
|
32
32
|
# This module contains the predefined methods collection
|
33
33
|
#
|
@@ -58,15 +58,23 @@ class RightRails::JavaScriptGenerator
|
|
58
58
|
@util.record("var #{name}=#{@util.to_js_type(value)}")
|
59
59
|
end
|
60
60
|
|
61
|
+
def document
|
62
|
+
@util.record('$(document)')
|
63
|
+
end
|
64
|
+
|
65
|
+
def window
|
66
|
+
@util.record('$(window)')
|
67
|
+
end
|
68
|
+
|
61
69
|
# generates the redirection script
|
62
70
|
def redirect_to(location)
|
63
|
-
self.document[:location].href = (location.is_a?(String) ? location : @util.template.url_for(location))
|
71
|
+
self.get(:document)[:location].href = (location.is_a?(String) ? location : @util.template.url_for(location))
|
64
72
|
self
|
65
73
|
end
|
66
74
|
|
67
75
|
# generates the page reload script
|
68
76
|
def reload
|
69
|
-
self.document[:location].reload
|
77
|
+
self.get(:document)[:location].reload
|
70
78
|
self
|
71
79
|
end
|
72
80
|
|
@@ -74,7 +82,7 @@ class RightRails::JavaScriptGenerator
|
|
74
82
|
def insert(record, position=nil)
|
75
83
|
self.RR.insert(*[record.class.table_name, @util.render(record), position].compact)
|
76
84
|
end
|
77
|
-
|
85
|
+
|
78
86
|
# generates a script that inserts the record partial, then updates the form and the flashes block
|
79
87
|
def insert_and_care(record, position=nil)
|
80
88
|
insert(record, position)
|
@@ -108,93 +116,93 @@ class RightRails::JavaScriptGenerator
|
|
108
116
|
def replace_form_for(record)
|
109
117
|
self.RR.replace_form(@util.form_id_for(record), @util.render('form'))
|
110
118
|
end
|
111
|
-
|
119
|
+
|
112
120
|
# updates the flashes block
|
113
121
|
def update_flash(content=nil)
|
114
122
|
self.RR.update_flash(content || @util.template.flashes)
|
115
123
|
@util.template.flash.clear
|
116
124
|
end
|
117
125
|
end
|
118
|
-
|
126
|
+
|
119
127
|
include Methods
|
120
|
-
|
128
|
+
|
121
129
|
protected
|
122
130
|
|
123
131
|
#
|
124
132
|
# Keeps the javascript method calls sequence and then represents iteslf like a string of javascript
|
125
133
|
#
|
126
134
|
class MethodCall
|
127
|
-
|
135
|
+
|
128
136
|
def initialize(this, util, parent)
|
129
137
|
@this = this
|
130
138
|
@util = util
|
131
139
|
@parent = parent
|
132
140
|
end
|
133
|
-
|
141
|
+
|
134
142
|
# catches the properties request
|
135
143
|
def [](name)
|
136
144
|
@child = @util.make_call(".#{name}", self)
|
137
145
|
end
|
138
|
-
|
146
|
+
|
139
147
|
# attribute assignment hook
|
140
148
|
def []=(name, value)
|
141
149
|
send "#{name}=", value
|
142
150
|
end
|
143
|
-
|
151
|
+
|
144
152
|
OPERATIONS = %w{+ - * / % <<}
|
145
|
-
|
153
|
+
|
146
154
|
# catches all the method calls
|
147
155
|
def method_missing(name, *args, &block)
|
148
156
|
name = name.to_s
|
149
157
|
args << block if block_given?
|
150
|
-
|
151
|
-
|
158
|
+
|
159
|
+
|
152
160
|
cmd = if name[name.size-1, name.size] == '='
|
153
161
|
# assignments
|
154
162
|
".#{name[0,name.size-1]}=#{@util.to_js_type(args.first)}"
|
155
|
-
|
163
|
+
|
156
164
|
# operation calls
|
157
165
|
elsif OPERATIONS.include?(name)
|
158
166
|
name = "+=" if name == '<<'
|
159
167
|
"#{name}#{@util.to_js_type(args.first)}"
|
160
|
-
|
168
|
+
|
161
169
|
# usual method calls
|
162
170
|
else
|
163
171
|
".#{name}(#{@util.to_js_args(args)})"
|
164
172
|
end
|
165
|
-
|
173
|
+
|
166
174
|
@child = @util.make_call(cmd, self)
|
167
175
|
end
|
168
|
-
|
176
|
+
|
169
177
|
# exports the whole thing into a javascript string
|
170
178
|
def to_s
|
171
179
|
nodes = []
|
172
180
|
node = self
|
173
|
-
|
181
|
+
|
174
182
|
while node
|
175
183
|
nodes << node
|
176
184
|
node = node.instance_variable_get(@parent.nil? ? "@child" : "@parent")
|
177
185
|
end
|
178
|
-
|
186
|
+
|
179
187
|
# reversing the calls list if building from the right end
|
180
188
|
nodes.reverse! unless @parent.nil?
|
181
|
-
|
189
|
+
|
182
190
|
nodes.collect{|n| n.instance_variable_get("@this").to_s }.join('')
|
183
191
|
end
|
184
192
|
end
|
185
|
-
|
193
|
+
|
186
194
|
#
|
187
195
|
# We use this class to cleanup the main namespace of the JavaScriptGenerator instances
|
188
196
|
# So that the mesod_missing didn't interferate with the util methods
|
189
197
|
#
|
190
198
|
class Util
|
191
199
|
attr_reader :template
|
192
|
-
|
200
|
+
|
193
201
|
def initialize(template, thread=nil)
|
194
202
|
@template = template
|
195
203
|
@thread = thread || []
|
196
204
|
end
|
197
|
-
|
205
|
+
|
198
206
|
# returns a conventional dom id for the record
|
199
207
|
def dom_id(record)
|
200
208
|
if [String, Symbol].include?(record.class)
|
@@ -203,7 +211,7 @@ protected
|
|
203
211
|
@template.dom_id(record)
|
204
212
|
end
|
205
213
|
end
|
206
|
-
|
214
|
+
|
207
215
|
# generates the form-id for the given record
|
208
216
|
def form_id_for(record)
|
209
217
|
record.new_record? ? "new_#{record.class.table_name.singularize}" : "edit_#{dom_id(record)}"
|
@@ -213,29 +221,29 @@ protected
|
|
213
221
|
def render(what)
|
214
222
|
@template.render(what)
|
215
223
|
end
|
216
|
-
|
224
|
+
|
217
225
|
# builds a new method call object
|
218
226
|
def make_call(string, parent=nil)
|
219
227
|
MethodCall.new(string, self, parent)
|
220
228
|
end
|
221
|
-
|
229
|
+
|
222
230
|
# Records a new call
|
223
231
|
def record(command)
|
224
232
|
@thread << (line = make_call(command))
|
225
233
|
line
|
226
234
|
end
|
227
|
-
|
235
|
+
|
228
236
|
# writes a pline script code into the thread
|
229
237
|
def write(script)
|
230
238
|
@thread << script
|
231
239
|
end
|
232
|
-
|
240
|
+
|
233
241
|
# builds the end script
|
234
242
|
def build_script
|
235
243
|
list = @thread.collect do |line|
|
236
244
|
line.is_a?(String) ? line : (line.to_s + ';')
|
237
245
|
end
|
238
|
-
|
246
|
+
|
239
247
|
list.join('')
|
240
248
|
end
|
241
249
|
|
@@ -244,10 +252,10 @@ protected
|
|
244
252
|
list = args.collect do |value|
|
245
253
|
to_js_type(value)
|
246
254
|
end
|
247
|
-
|
255
|
+
|
248
256
|
list.join(',')
|
249
257
|
end
|
250
|
-
|
258
|
+
|
251
259
|
# converts any ruby type into an javascript type
|
252
260
|
def to_js_type(value)
|
253
261
|
case value.class.name.to_sym
|
@@ -256,7 +264,7 @@ protected
|
|
256
264
|
when :Array then "[#{to_js_args(value)}]"
|
257
265
|
when :Proc then proc_to_function(&value)
|
258
266
|
else
|
259
|
-
|
267
|
+
|
260
268
|
# the other method-calls processing
|
261
269
|
if value.is_a?(MethodCall)
|
262
270
|
# removing the call out of the calls thread
|
@@ -267,13 +275,13 @@ protected
|
|
267
275
|
parent = parent.instance_variable_get('@parent')
|
268
276
|
end
|
269
277
|
@thread.reject!{ |item| item == top }
|
270
|
-
|
278
|
+
|
271
279
|
value.to_s
|
272
|
-
|
280
|
+
|
273
281
|
# converting all sorts of strings
|
274
282
|
elsif value.is_a?(String)
|
275
283
|
"\"#{@template.escape_javascript(value)}\""
|
276
|
-
|
284
|
+
|
277
285
|
# simple hashes processing
|
278
286
|
elsif value.is_a?(Hash)
|
279
287
|
pairs = []
|
@@ -281,18 +289,18 @@ protected
|
|
281
289
|
pairs << "#{to_js_type(key)}:#{to_js_type(value)}"
|
282
290
|
end
|
283
291
|
"{#{pairs.sort.join(',')}}"
|
284
|
-
|
292
|
+
|
285
293
|
# JSON exportable values processing
|
286
294
|
elsif value.respond_to?(:to_json)
|
287
295
|
to_js_type(value.to_json)
|
288
|
-
|
296
|
+
|
289
297
|
# throwing an ansupported class name
|
290
298
|
else
|
291
299
|
throw "RightRails::JavaScriptGenerator doesn't support instances of #{value.class.name} yet"
|
292
300
|
end
|
293
301
|
end
|
294
302
|
end
|
295
|
-
|
303
|
+
|
296
304
|
# converts a proc into a javascript function
|
297
305
|
def proc_to_function(&block)
|
298
306
|
thread = []
|
@@ -300,24 +308,24 @@ protected
|
|
300
308
|
names = []
|
301
309
|
name = 'a'
|
302
310
|
page = RightRails::JavaScriptGenerator.new(@template, thread)
|
303
|
-
|
311
|
+
|
304
312
|
block.arity.times do |i|
|
305
313
|
args << page.get(name)
|
306
314
|
names << name
|
307
315
|
name = name.succ
|
308
316
|
end
|
309
|
-
|
317
|
+
|
310
318
|
# swapping the current thread with the block's one
|
311
319
|
old_thread = @thread
|
312
320
|
@thread = thread
|
313
|
-
|
321
|
+
|
314
322
|
yield(*args)
|
315
|
-
|
323
|
+
|
316
324
|
# swapping the current therad back
|
317
325
|
@thread = old_thread
|
318
|
-
|
326
|
+
|
319
327
|
"function(#{names.join(',')}){#{page.to_s}}"
|
320
328
|
end
|
321
329
|
end
|
322
|
-
|
330
|
+
|
323
331
|
end
|