red 4.1.0 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -22,6 +22,31 @@ lib/red/nodes/literal_nodes.rb
22
22
  lib/red/nodes/logic_nodes.rb
23
23
  lib/red/nodes/variable_nodes.rb
24
24
  lib/source/ruby.rb
25
+ lib/source/redshift
26
+ lib/source/redshift/accessors.rb
27
+ lib/source/redshift/browser.rb
28
+ lib/source/redshift/chainable.rb
29
+ lib/source/redshift/code_events.rb
30
+ lib/source/redshift/cookie.rb
31
+ lib/source/redshift/document.rb
32
+ lib/source/redshift/element.rb
33
+ lib/source/redshift/event.rb
34
+ lib/source/redshift/redshift.red
35
+ lib/source/redshift/request.rb
36
+ lib/source/redshift/selectors.rb
37
+ lib/source/redshift/situated.rb
38
+ lib/source/redshift/store.rb
39
+ lib/source/redshift/transform.rb
40
+ lib/source/redshift/tween.rb
41
+ lib/source/redshift/user_events.rb
42
+ lib/source/redshift/validator.rb
43
+ lib/source/redshift/window.rb
44
+ lib/source/redspec
45
+ lib/source/redspec/index.html
46
+ lib/source/redspec/lib
47
+ lib/source/redspec/lib/red_spec
48
+ lib/source/redspec/lib/red_spec/red_spec.red
49
+ lib/source/redspec/lib/stylesheets/specs.sass
25
50
  script/console
26
51
  script/destroy
27
52
  script/generate
data/lib/red/version.rb CHANGED
@@ -2,7 +2,7 @@ module Red
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 4
4
4
  MINOR = 1
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1,580 @@
1
+ require 'element'
2
+
3
+ class Element
4
+ `c$Element.__keyed_attributes__={class:'className',for:'htmlFor'}`
5
+ `c$Element.__boolean_attributes__={checked:'checked',declare:'declare',defer:'defer',disabled:'disabled',ismap:'ismap',multiple:'multiple',noresize:'noresize',noshade:'noshade',readonly:'readonly',selected:'selected'}`
6
+
7
+ # call-seq:
8
+ # elem.add_class(sym) -> elem
9
+ #
10
+ # Returns _elem_ with class name _sym_ added.
11
+ #
12
+ #
13
+ #
14
+ def add_class(sym)
15
+ `if(!this.m$has_class_bool(sym)){var el=this.__native__,c=el.className,s=sym.__value__;el.className=(c.length>0)?c+' '+s:s;}`
16
+ return self
17
+ end
18
+
19
+ # call-seq:
20
+ # elem.add_classes(sym, ...) -> elem
21
+ #
22
+ # Calls <tt>elem.add_class(sym)</tt> once for each argument.
23
+ #
24
+ #
25
+ #
26
+ def add_classes(*args)
27
+ args.each {|x| self.add_class(x) }
28
+ return self
29
+ end
30
+
31
+ # call-seq:
32
+ # elem.class -> string
33
+ #
34
+ # Returns a string representation of _elem_'s class names, separated by " ".
35
+ #
36
+ #
37
+ #
38
+ def class
39
+ `$q(this.__native__.className)`
40
+ end
41
+
42
+ # call-seq:
43
+ # elem.class = str -> str
44
+ #
45
+ # Sets _elem_'s HTML class property to _str_, which consists of one or many
46
+ # class names separated by " ".
47
+ #
48
+ #
49
+ #
50
+ def class=(str)
51
+ `this.__native__.className=str.__value__`
52
+ return str
53
+ end
54
+
55
+ # call-seq:
56
+ # elem.classes -> object
57
+ #
58
+ # Returns an Element::Classes accessor object, which represents the classes
59
+ # assigned to _elem_, and allows for operations such as
60
+ # <tt>elem.classes << :klass</tt>, <tt>elem.classes.include? :klass</tt>,
61
+ # and <tt>elem.classes.toggle(:klass)</tt>.
62
+ #
63
+ #
64
+ #
65
+ def classes
66
+ @class_list ||= Element::Classes.new(self)
67
+ end
68
+
69
+ # call-seq:
70
+ # elem.classes = [sym, ...] -> array
71
+ #
72
+ # Sets _elem_'s HTML class property to a string equivalent to the
73
+ # concatenation of each of the classes in _array_ joined by " ", then
74
+ # returns _array_.
75
+ #
76
+ #
77
+ #
78
+ def classes=(ary)
79
+ `for(var result=[],i=0,l=ary.length;i<l;++i){result.push(ary[i].__value__);}`
80
+ `this.__native__.className=result.join(' ')`
81
+ return ary
82
+ end
83
+
84
+ # call-seq:
85
+ # elem.clear_styles -> elem
86
+ #
87
+ # Removes the CSS styles that have been applied to _elem_.
88
+ #
89
+ #
90
+ #
91
+ def clear_styles
92
+ `this.__native__.style.cssText=''`
93
+ return self
94
+ end
95
+
96
+ # call-seq:
97
+ # elem.get_property(sym) -> object or nil
98
+ #
99
+ # Returns the value of _elem_'s property _sym_, or +nil+ if no value is set.
100
+ #
101
+ #
102
+ #
103
+ def get_property(attribute)
104
+ `var el=this.__native__,attr=attribute.__value__,key=c$Element.__keyed_attributes__[attr],bool=c$Element.__boolean_attributes__[attr]`
105
+ `var value=key||bool?el[key||bool]:el.getAttribute(attr,2)`
106
+ return `bool ? !!value : (value==null) ? nil : $q(value)`
107
+ end
108
+
109
+ # call-seq:
110
+ # elem.get_style(sym) -> object or nil
111
+ #
112
+ # Returns the value of the CSS style rule _sym_ applied to _elem_, or +nil+
113
+ # if no value is set.
114
+ #
115
+ #
116
+ #
117
+ def get_style(attribute)
118
+ `var el=this.__native__,attr=attribute.__value__.replace(/[_-]\\D/g, function(match){return match.charAt(1).toUpperCase();}),result=el.style[attr]`
119
+ `result===undefined?nil:$q(result)`
120
+ end
121
+
122
+ # call-seq:
123
+ # elem.has_class?(sym) -> true or false
124
+ #
125
+ # Returns +true+ if _elem_ has class _sym_, +false+ otherwise.
126
+ #
127
+ # <div id='div_a' class='container drop_target'></div>
128
+ #
129
+ # elem = Document['#div_a'] #=> #<Element: DIV id="div_element" class="container drop_target">
130
+ # elem.has_class?('container') #=> true
131
+ # elem.has_class?(:draggable) #=> false
132
+ #
133
+ def has_class?(sym)
134
+ `var str=' '+this.__native__.className+' ',match=' '+sym.__value__+' '`
135
+ `str.indexOf(match) > -1`
136
+ end
137
+
138
+ # call-seq:
139
+ # elem.html -> string
140
+ #
141
+ # Returns a string representation of the HTML inside _elem_.
142
+ #
143
+ #
144
+ #
145
+ def html
146
+ `$q(this.__native__.innerHTML)`
147
+ end
148
+
149
+ # call-seq:
150
+ # elem.html = str -> str
151
+ #
152
+ # Sets the HTML inside _elem_ to _str_.
153
+ #
154
+ #
155
+ #
156
+ def html=(str)
157
+ `this.__native__.innerHTML=str.__value__`
158
+ return str
159
+ end
160
+
161
+ # call-seq:
162
+ # elem.properties -> object
163
+ #
164
+ # Returns an Element::Properties accessor object, which represents the
165
+ # HTML properties assigned to _elem_, and allows for operations such as
166
+ # <tt>elem.properties[:title] = 'figure_1'</tt> and
167
+ # <tt>elem.properties.set? :name</tt>.
168
+ #
169
+ #
170
+ #
171
+ def properties
172
+ @properties ||= Element::Properties.new(self)
173
+ end
174
+
175
+ # call-seq:
176
+ # elem.remove_class(sym) -> elem
177
+ #
178
+ # Removes _sym_ from _elem_'s HTML class property if it was included, then
179
+ # returns _elem_.
180
+ #
181
+ #
182
+ #
183
+ def remove_class(sym)
184
+ `var el=this.__native__,klass=sym.__value__`
185
+ `el.className=el.className.replace(new(RegExp)('(^|\\\\s)'+klass+'(?:\\\\s|$)'),'$1')`
186
+ return self
187
+ end
188
+
189
+ # call-seq:
190
+ # elem.remove_classes(sym, ...) -> elem
191
+ #
192
+ # Calls <tt>elem.remove_class(sym)</tt> once for each argument.
193
+ #
194
+ #
195
+ #
196
+ def remove_classes(*args)
197
+ args.each {|x| self.remove_class(x) }
198
+ return self
199
+ end
200
+
201
+ # call-seq:
202
+ # elem.remove_property(sym) -> elem
203
+ #
204
+ # Unsets _elem_'s HTML property _sym_ if it was set, then returns _elem_.
205
+ #
206
+ #
207
+ #
208
+ def remove_property(attribute)
209
+ `var el=this.__native__,attr=attribute.__value__,bool=c$Element.__boolean_attributes__[attr],key=c$Element.__boolean_attributes__[attr]||bool`
210
+ `key ? el[key]=bool?false:'' : el.removeAttribute(attr)`
211
+ return self
212
+ end
213
+
214
+ # call-seq:
215
+ # elem.remove_properties(sym, ...) -> elem
216
+ #
217
+ # Calls <tt>elem.remove_property(sym)</tt> once for each argument.
218
+ #
219
+ #
220
+ #
221
+ def remove_properties(*args)
222
+ args.each {|x| self.remove_property(x) }
223
+ return self
224
+ end
225
+
226
+ # call-seq:
227
+ # elem.remove_style(sym) -> elem
228
+ #
229
+ # Unsets _elem_'s CSS style _sym_ if it was set, then returns _elem_.
230
+ #
231
+ #
232
+ #
233
+ def remove_style(attribute)
234
+ `var attr=attribute.__value__.replace(/[_-]\\D/g, function(match){return match.charAt(1).toUpperCase();})`
235
+ `this.__native__.style[attr]=null`
236
+ return self
237
+ end
238
+
239
+ # call-seq:
240
+ # elem.remove_styles(sym, ...) -> elem
241
+ #
242
+ # Calls <tt>elem.remove_style(sym)</tt> once for each argument.
243
+ #
244
+ #
245
+ #
246
+ def remove_styles(*args)
247
+ args.each {|x| self.remove_style(x) }
248
+ return self
249
+ end
250
+
251
+ # call-seq:
252
+ # elem.set_property(sym, value) -> elem
253
+ #
254
+ # Sets _elem_'s HTML property _sym_ to _value_, then returns _elem_.
255
+ #
256
+ #
257
+ #
258
+ def set_property(attribute, value)
259
+ `var el=this.__native__,attr=attribute.__value__,bool=c$Element.__boolean_attributes__[attr],key=c$Element.__boolean_attributes__[attr]||bool`
260
+ `key ? el[key]=bool?$T(value):value : el.setAttribute(attr,''+value)`
261
+ return self
262
+ end
263
+
264
+ # call-seq:
265
+ # elem.set_properties({key => value, ...}) -> elem
266
+ #
267
+ # Calls <tt>elem.set_property(key,value)</tt> once for each key-value pair.
268
+ #
269
+ #
270
+ #
271
+ def set_properties(hash)
272
+ hash.each {|k,v| self.set_property(k,v) }
273
+ return self
274
+ end
275
+
276
+ # call-seq:
277
+ # elem.set_style(sym, value) -> elem
278
+ #
279
+ # Sets _elem_'s CSS style _sym_ to _value_, then returns _elem_.
280
+ #
281
+ #
282
+ #
283
+ def set_style(attribute, value)
284
+ `var attr=attribute.__value__.replace(/[_-]\\D/g, function(match){return match.charAt(1).toUpperCase();}),val=value.__value__||value`
285
+ `if(attr==='float'){val=#{trident?}?'styleFloat':'cssFloat'}`
286
+ `if(attr==='opacity'){m$raise("nobody wrote the opacity setter yet!");}`
287
+ `if(val===String(Number(val))){val=Math.round(val)}`
288
+ `this.__native__.style[attr]=val`
289
+ return self
290
+ end
291
+
292
+ # call-seq:
293
+ # elem.set_styles({key => value, ...}) -> elem
294
+ #
295
+ # Calls <tt>elem.set_style(key,value)</tt> once for each key-value pair.
296
+ #
297
+ #
298
+ #
299
+ def set_styles(hash)
300
+ hash.each {|k,v| self.set_style(k,v) }
301
+ return self
302
+ end
303
+
304
+ # call-seq:
305
+ # elem.style -> string
306
+ #
307
+ # Returns the value of _elem_'s HTML style property.
308
+ #
309
+ #
310
+ #
311
+ def style
312
+ `$q(this.__native__.style.cssText)`
313
+ end
314
+
315
+ # call-seq:
316
+ # elem.style = str -> str
317
+ #
318
+ # Sets the value of _elem_'s HTML style property to _str_.
319
+ #
320
+ #
321
+ #
322
+ def style=(str)
323
+ `this.__native__.style.cssText=str.__value__`
324
+ return str
325
+ end
326
+
327
+ # call-seq:
328
+ # elem.styles -> object
329
+ #
330
+ # Returns an Element::Styles accessor object, which represents the CSS
331
+ # styles applied to _elem_, and allows for operations such as
332
+ # <tt>elem.styles[:color] = '#C80404'</tt> and
333
+ # <tt>elem.styles.set? :font_weight</tt>.
334
+ #
335
+ #
336
+ #
337
+ def styles
338
+ @styles ||= Element::Styles.new(self)
339
+ end
340
+
341
+ # call-seq:
342
+ # elem.text -> string
343
+ #
344
+ # Returns the text inside _elem_ as a string.
345
+ #
346
+ #
347
+ #
348
+ def text
349
+ `$q(#{trident?} ? this.__native__.innerText : this.__native__.textContent)`
350
+ end
351
+
352
+ # call-seq:
353
+ # elem.text = str -> str
354
+ #
355
+ # Sets the text inside _elem_ to the value _str_.
356
+ #
357
+ #
358
+ #
359
+ def text=(str)
360
+ trident? ? `this.__native__.innerText=str.__value__` : `this.__native__.textContent=str.__value__`
361
+ return str
362
+ end
363
+
364
+ # call-seq:
365
+ # elem.toggle_class(sym) -> elem
366
+ #
367
+ # Returns _elem_ with the HTML class _sym_ added to its HTML classes if
368
+ # they did not include _sym_, or with _sym_ removed from its HTML classes if
369
+ # they did include _sym_.
370
+ #
371
+ #
372
+ #
373
+ def toggle_class(sym)
374
+ self.has_class?(sym) ? self.remove_class(sym) : self.add_class(sym);
375
+ return self
376
+ end
377
+
378
+ #
379
+ #
380
+ class Classes
381
+ def initialize(element) # :nodoc:
382
+ @element = element
383
+ end
384
+
385
+ # call-seq:
386
+ # classes << sym -> classes
387
+ #
388
+ # Adds _sym_ to the HTML classes of the element represented by _classes_,
389
+ # then returns _classes_. See also <tt>Element#add_class</tt>.
390
+ #
391
+ #
392
+ #
393
+ def <<(sym)
394
+ `c$Element.prototype.m$add_class.call(#{@element},sym)`
395
+ return self
396
+ end
397
+
398
+ # call-seq:
399
+ # classes.include?(sym) -> true or false
400
+ #
401
+ # Returns +true+ if the element represented by _classes_ has the HTML
402
+ # class _sym_, +false+ otherwise. See also <tt>Element#has_class?</tt>.
403
+ #
404
+ #
405
+ #
406
+ def include?(sym)
407
+ `c$Element.prototype.m$has_class_bool.call(#{@element},sym)`
408
+ end
409
+
410
+ # call-seq:
411
+ # classes.toggle(sym) -> element
412
+ #
413
+ # If the element represented by _classes_ has the HTML class _sym_,
414
+ # removes _sym_; otherwise, adds _sym_ to the element's classes. See also
415
+ # <tt>Element#toggle_class</tt>.
416
+ #
417
+ #
418
+ #
419
+ def toggle(sym)
420
+ `c$Element.prototype.m$toggle_class.call(#{@element},sym)`
421
+ return @element
422
+ end
423
+ end
424
+
425
+ #
426
+ #
427
+ class Properties
428
+ def initialize(element) # :nodoc:
429
+ @element = element
430
+ end
431
+
432
+ # call-seq:
433
+ # properties[sym] -> object or nil
434
+ #
435
+ # Returns the value of the HTML property _sym_ for the element represented
436
+ # by _properties_, or +nil+ if the property is not set. See also
437
+ # <tt>Element#get_property</tt>.
438
+ #
439
+ #
440
+ #
441
+ def [](attribute)
442
+ `c$Element.prototype.m$get_property.call(#{@element},attribute)`
443
+ end
444
+
445
+ # call-seq:
446
+ # properties[sym] = value -> value
447
+ #
448
+ # Sets the value of the HTML property _sym_ to _value_ for the element
449
+ # represented by _properties_. See also <tt>Element#set_property</tt>.
450
+ #
451
+ #
452
+ #
453
+ def []=(attribute,value)
454
+ `c$Element.prototype.m$set_property.call(#{@element},attribute,value)`
455
+ end
456
+
457
+ # call-seq:
458
+ # properties.delete(sym) -> object or nil
459
+ #
460
+ # If the element represented by _properties_ has the HTML property _sym_,
461
+ # unsets the property and returns its value, otherwise returns +nil+. See
462
+ # also <tt>Element#remove_property</tt>.
463
+ #
464
+ #
465
+ #
466
+ def delete(attribute)
467
+ `c$Element.prototype.m$remove_property.call(#{@element},attribute)`
468
+ end
469
+
470
+ # call-seq:
471
+ # properties.set?(sym) -> true or false
472
+ #
473
+ # Returns +true+ if the HTML property _sym_ is set for the element
474
+ # represented by _properties_, +false+ otherwise.
475
+ #
476
+ #
477
+ #
478
+ def set?(attribute)
479
+ `$T(c$Element.prototype.m$get_property.call(#{@element},attribute))`
480
+ end
481
+
482
+ # call-seq:
483
+ # properties.update({key => value, ...}) -> properties
484
+ #
485
+ # Sets the value of the HTML property _key_ of the element represented by
486
+ # _properties_ to _value_ for each key-value pair, then returns
487
+ # _properties_. See also <tt>Element#set_properties</tt>.
488
+ #
489
+ #
490
+ #
491
+ def update(hash)
492
+ `c$Element.prototype.m$set_properties.call(#{@element},hash)`
493
+ return self
494
+ end
495
+ end
496
+
497
+ #
498
+ #
499
+ class Styles
500
+ def initialize(element) # :nodoc:
501
+ @element = element
502
+ end
503
+
504
+ # call-seq:
505
+ # styles[sym] -> object
506
+ #
507
+ # Returns the value of the CSS style _sym_ for the element represented by
508
+ # _styles_, or +nil+ if no such style is applied. See also
509
+ # <tt>Element#get_style</tt>.
510
+ #
511
+ #
512
+ #
513
+ def [](attribute)
514
+ `c$Element.prototype.m$get_style.call(#{@element},attribute)`
515
+ end
516
+
517
+ # call-seq:
518
+ # styles[sym] = value -> value
519
+ #
520
+ # Sets the value of the CSS style _sym_ to _value_ for the element
521
+ # represented by _styles_. See also <tt>Element#set_style</tt>.
522
+ #
523
+ #
524
+ #
525
+ def []=(attribute, value)
526
+ `c$Element.prototype.m$set_style.call(#{@element},attribute,value)`
527
+ end
528
+
529
+ # call-seq:
530
+ # styles.clear -> styles
531
+ #
532
+ # Removes the CSS styles that have been applied to the element represented
533
+ # by _styles_. See also <tt>Element#clear_styles</tt>.
534
+ #
535
+ #
536
+ #
537
+ def clear
538
+ `c$Element.prototype.m$clear_styles.call(#{@element})`
539
+ end
540
+
541
+ # call-seq:
542
+ # styles.delete(sym) -> object or nil
543
+ #
544
+ # If the element represented by _styles_ has the CSS style _sym_ applied,
545
+ # removes the style and returns its value, otherwise returns +nil+. See
546
+ # also <tt>Element#remove_style</tt>.
547
+ #
548
+ #
549
+ #
550
+ def delete(attribute)
551
+ `c$Element.prototype.m$remove_style.call(#{@element},attribute)`
552
+ end
553
+
554
+ # call-seq:
555
+ # styles.set?(sym) -> true or false
556
+ #
557
+ # Returns +true+ if the element represented by _styles_ has the CSS style
558
+ # _sym_ applied, +false+ otherwise.
559
+ #
560
+ #
561
+ #
562
+ def set?(attribute)
563
+ `$T(c$Element.prototype.m$get_style.call(#{@element},attribute))`
564
+ end
565
+
566
+ # call-seq:
567
+ # styles.update({key => value, ...}) -> styles
568
+ #
569
+ # Sets the value of the CSS style _key_ of the element represented by
570
+ # _styles_ to _value_ for each key-value pair, then returns _styles_.
571
+ # See also <tt>Element#set_styles</tt>.
572
+ #
573
+ #
574
+ #
575
+ def update(hash)
576
+ `c$Element.prototype.m$set_styles.call(#{@element},hash)`
577
+ return self
578
+ end
579
+ end
580
+ end