opal-jquery 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/Gemfile +2 -5
- data/lib/assets/javascripts/opal/jquery/document.rb +0 -24
- data/lib/assets/javascripts/opal/jquery/element.rb +54 -164
- data/lib/opal/jquery/version.rb +1 -1
- data/opal-jquery.gemspec +2 -0
- data/spec/document_spec.rb +0 -73
- data/spec/element/after_spec.rb +5 -5
- data/spec/element/animations_spec.rb +3 -3
- data/spec/element/append_spec.rb +5 -5
- data/spec/element/append_to_spec.rb +5 -5
- data/spec/element/at_spec.rb +3 -3
- data/spec/element/attributes_spec.rb +26 -26
- data/spec/element/before_spec.rb +5 -5
- data/spec/element/class_name_spec.rb +13 -13
- data/spec/element/css_spec.rb +6 -6
- data/spec/element/display_spec.rb +4 -4
- data/spec/element/inspect_spec.rb +3 -3
- data/spec/element/iterable_spec.rb +7 -8
- data/spec/element/method_missing_spec.rb +28 -0
- data/spec/element/traversing_spec.rb +28 -28
- data/spec/element_spec.rb +85 -10
- data/spec/event_spec.rb +5 -5
- data/spec/spec_helper.rb +4 -4
- metadata +22 -3
data/CHANGELOG.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
## 0.0.7 2013-02-20
|
2
|
+
|
3
|
+
* Add Element#method_missing which forwards missing calls to try and call
|
4
|
+
method as a native jquery function/plugin.
|
5
|
+
|
6
|
+
* Depreceate Document finder methods (Document.find, Document[]). The finder
|
7
|
+
methods on Element now replace them. Updated specs to suit.
|
data/Gemfile
CHANGED
@@ -1,28 +1,4 @@
|
|
1
1
|
module Document
|
2
|
-
def self.[](selector)
|
3
|
-
`$(#{selector})`
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.find(selector)
|
7
|
-
self[selector]
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.id(id)
|
11
|
-
%x{
|
12
|
-
var el = document.getElementById(id);
|
13
|
-
|
14
|
-
if (!el) {
|
15
|
-
return nil;
|
16
|
-
}
|
17
|
-
|
18
|
-
return $(el);
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.parse(str)
|
23
|
-
`$(str)`
|
24
|
-
end
|
25
|
-
|
26
2
|
def self.ready?(&block)
|
27
3
|
%x{
|
28
4
|
if (block === nil) {
|
@@ -2,11 +2,19 @@
|
|
2
2
|
# native dom elements.
|
3
3
|
class Element < `jQuery`
|
4
4
|
def self.find(selector)
|
5
|
-
`$(selector)`
|
5
|
+
`$(#{selector})`
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.id(id)
|
9
|
-
|
9
|
+
%x{
|
10
|
+
var el = document.getElementById(id);
|
11
|
+
|
12
|
+
if (!el) {
|
13
|
+
return nil;
|
14
|
+
}
|
15
|
+
|
16
|
+
return $(el);
|
17
|
+
}
|
10
18
|
end
|
11
19
|
|
12
20
|
def self.new(tag = 'div')
|
@@ -17,59 +25,50 @@ class Element < `jQuery`
|
|
17
25
|
`$(str)`
|
18
26
|
end
|
19
27
|
|
20
|
-
def
|
21
|
-
|
28
|
+
def self.expose(*methods)
|
29
|
+
%x{
|
30
|
+
for (var i = 0, length = methods.length, method; i < length; i++) {
|
31
|
+
method = methods[i];
|
32
|
+
#{self}.prototype['$' + method] = #{self}.prototype[method];
|
33
|
+
}
|
34
|
+
|
35
|
+
return nil;
|
36
|
+
}
|
22
37
|
end
|
23
38
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# content may be a HTML string or a `DOM` instance. The inserted
|
28
|
-
# content is added to the end of the receiver.
|
29
|
-
#
|
30
|
-
# @example Given HTML String
|
31
|
-
#
|
32
|
-
# DOM.find('ul').append '<li>list content</li>'
|
33
|
-
#
|
34
|
-
# @example Given an existing DOM node
|
35
|
-
#
|
36
|
-
# DOM.id('checkout') << Dom.id('total-price-label')
|
37
|
-
#
|
38
|
-
# @param [String, DOM] content HTML string or DOM content
|
39
|
-
# @return [DOM] returns receiver
|
40
|
-
alias_native :<<, :append
|
39
|
+
expose :after, :before, :parent, :parents, :prepend, :prev, :remove
|
40
|
+
expose :hide, :show, :toggle, :children, :blur, :closest, :data
|
41
|
+
expose :focus, :find, :next, :siblings, :text, :trigger, :append
|
41
42
|
|
43
|
+
alias_native :[]=, :attr
|
42
44
|
alias_native :add_class, :addClass
|
45
|
+
alias_native :append_to, :appendTo
|
46
|
+
alias_native :has_class?, :hasClass
|
47
|
+
alias_native :html=, :html
|
48
|
+
alias_native :remove_attr, :removeAttr
|
49
|
+
alias_native :remove_class, :removeClass
|
50
|
+
alias_native :text=, :text
|
51
|
+
alias_native :toggle_class, :toggleClass
|
52
|
+
alias_native :value=, :val
|
43
53
|
|
44
|
-
#
|
45
|
-
#
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
# @param [String, DOM] content HTML string or dom content
|
56
|
-
# @return [DOM] returns self
|
57
|
-
alias_native :after, :after
|
58
|
-
|
59
|
-
alias append <<
|
54
|
+
# Missing methods are assumed to be jquery plugins. These are called by
|
55
|
+
# the given symbol name.
|
56
|
+
def method_missing(symbol, *args, &block)
|
57
|
+
%x{
|
58
|
+
if (#{self}[#{symbol}]) {
|
59
|
+
return #{self}[#{symbol}].apply(#{self}, args);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
super
|
64
|
+
end
|
60
65
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
#
|
65
|
-
# @example
|
66
|
-
#
|
67
|
-
# DOM.parse('<p>Hello</p>').append_to DOM.id('foo')
|
68
|
-
#
|
69
|
-
# @param [DOM] target the target to insert into
|
70
|
-
# @return [DOM] returns the receiver
|
71
|
-
alias_native :append_to, :appendTo
|
66
|
+
def [](name)
|
67
|
+
`#{self}.attr(name) || ""`
|
68
|
+
end
|
72
69
|
|
70
|
+
alias << append
|
71
|
+
|
73
72
|
def append_to_body
|
74
73
|
`#{self}.appendTo(document.body)`
|
75
74
|
end
|
@@ -106,33 +105,6 @@ class Element < `jQuery`
|
|
106
105
|
}
|
107
106
|
end
|
108
107
|
|
109
|
-
# Insert the given content into the DOM before each element in #{self}
|
110
|
-
# collection. The content may be a raw HTML string or a `DOM`
|
111
|
-
# instance containing elements.
|
112
|
-
#
|
113
|
-
# @example
|
114
|
-
#
|
115
|
-
# # Given a string
|
116
|
-
# DOM('.foo').before '<p class="title"></p>'
|
117
|
-
#
|
118
|
-
# # Using an existing element
|
119
|
-
# DOM('.bar').before DOM('#other-title')
|
120
|
-
#
|
121
|
-
# @param [DOM, String] content the content to insert before
|
122
|
-
# @return [DOM] returns the receiver
|
123
|
-
alias_native :before, :before
|
124
|
-
|
125
|
-
# Returns a new collection containing the immediate children of each
|
126
|
-
# element in #{self} collection. The result may be empty if no children
|
127
|
-
# are present.
|
128
|
-
#
|
129
|
-
# @example
|
130
|
-
#
|
131
|
-
# DOM('#foo').children # => DOM instance
|
132
|
-
#
|
133
|
-
# @return [DOM] returns new DOM collection
|
134
|
-
alias_native :children, :children
|
135
|
-
|
136
108
|
# Returns the CSS class name of the firt element in #{self} collection.
|
137
109
|
# If the collection is empty then an empty string is returned. Only
|
138
110
|
# the class name of the first element will ever be returned.
|
@@ -146,12 +118,7 @@ class Element < `jQuery`
|
|
146
118
|
def class_name
|
147
119
|
%x{
|
148
120
|
var first = #{self}[0];
|
149
|
-
|
150
|
-
if (!first) {
|
151
|
-
return "";
|
152
|
-
}
|
153
|
-
|
154
|
-
return first.className || "";
|
121
|
+
return (first && first.className) || "";
|
155
122
|
}
|
156
123
|
end
|
157
124
|
|
@@ -226,12 +193,6 @@ class Element < `jQuery`
|
|
226
193
|
}
|
227
194
|
end
|
228
195
|
|
229
|
-
alias_native :blur, :blur
|
230
|
-
|
231
|
-
alias_native :closest, :closest
|
232
|
-
|
233
|
-
alias_native :data, :data
|
234
|
-
|
235
196
|
# Yields each element in #{self} collection in turn. The yielded element
|
236
197
|
# is wrapped as a `DOM` instance.
|
237
198
|
#
|
@@ -271,42 +232,18 @@ class Element < `jQuery`
|
|
271
232
|
map {|el| el }
|
272
233
|
end
|
273
234
|
|
274
|
-
# Find all the elements that match the given `selector` within the
|
275
|
-
# scope of elements in #{self} given collection. Might return an empty
|
276
|
-
# collection if no elements match.
|
277
|
-
#
|
278
|
-
# @example
|
279
|
-
#
|
280
|
-
# form = DOM('#login-form')
|
281
|
-
# form.find 'input, select'
|
282
|
-
#
|
283
|
-
# @param [String] selector the selector to match elements against
|
284
|
-
# @return [DOM] returns new collection
|
285
|
-
alias_native :find, :find
|
286
|
-
|
287
235
|
def first
|
288
236
|
`#{self}.length ? #{self}.first() : nil`
|
289
237
|
end
|
290
238
|
|
291
|
-
alias_native :focus, :focus
|
292
|
-
|
293
|
-
alias_native :has_class?, :hasClass
|
294
|
-
|
295
239
|
def html
|
296
240
|
`#{self}.html() || ""`
|
297
241
|
end
|
298
242
|
|
299
|
-
alias_native :html=, :html
|
300
|
-
|
301
243
|
def id
|
302
244
|
%x{
|
303
245
|
var first = #{self}[0];
|
304
|
-
|
305
|
-
if (!first) {
|
306
|
-
return "";
|
307
|
-
}
|
308
|
-
|
309
|
-
return first.id || "";
|
246
|
+
return (first && first.id) || "";
|
310
247
|
}
|
311
248
|
end
|
312
249
|
|
@@ -344,67 +281,20 @@ class Element < `jQuery`
|
|
344
281
|
`#{self}.length`
|
345
282
|
end
|
346
283
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
def on(name, selector = nil, &handler)
|
352
|
-
%x{
|
353
|
-
if (selector === nil) {
|
354
|
-
#{self}.on(name, handler);
|
355
|
-
}
|
356
|
-
else {
|
357
|
-
#{self}.on(name, selector, handler);
|
358
|
-
}
|
359
|
-
|
360
|
-
return handler;
|
361
|
-
}
|
284
|
+
def on(name, sel = nil, &block)
|
285
|
+
`sel === nil ? #{self}.on(name, block) : #{self}.on(name, sel, block)`
|
286
|
+
block
|
362
287
|
end
|
363
288
|
|
364
|
-
def off(name,
|
365
|
-
|
366
|
-
if (selector === nil) {
|
367
|
-
return #{self}.off(name, handler);
|
368
|
-
}
|
369
|
-
else {
|
370
|
-
return #{self}.off(name, selector, handler);
|
371
|
-
}
|
372
|
-
}
|
289
|
+
def off(name, sel = nil, &block)
|
290
|
+
`sel === nil ? #{self}.off(name, block) : #{self}.off(name, sel, block)`
|
373
291
|
end
|
374
292
|
|
375
|
-
alias_native :remove_attr, :removeAttr
|
376
|
-
|
377
|
-
alias_native :parent, :parent
|
378
|
-
|
379
|
-
alias_native :parents, :parents
|
380
|
-
|
381
|
-
alias_native :prepend, :prepend
|
382
|
-
|
383
|
-
alias_native :prev, :prev
|
384
|
-
|
385
|
-
alias_native :remove, :remove
|
386
|
-
|
387
|
-
alias_native :remove_class, :removeClass
|
388
|
-
|
389
293
|
alias size length
|
390
294
|
|
391
295
|
alias succ next
|
392
296
|
|
393
|
-
alias_native :text, :text
|
394
|
-
alias_native :text=, :text
|
395
|
-
|
396
|
-
alias_native :toggle_class, :toggleClass
|
397
|
-
|
398
|
-
alias_native :trigger, :trigger
|
399
|
-
|
400
297
|
def value
|
401
298
|
`#{self}.val() || ""`
|
402
299
|
end
|
403
|
-
|
404
|
-
alias_native :value=, :val
|
405
|
-
|
406
|
-
# display functions
|
407
|
-
alias_native :hide, :hide
|
408
|
-
alias_native :show, :show
|
409
|
-
alias_native :toggle, :toggle
|
410
300
|
end
|
data/lib/opal/jquery/version.rb
CHANGED
data/opal-jquery.gemspec
CHANGED
@@ -14,4 +14,6 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
16
|
s.require_paths = ['lib']
|
17
|
+
|
18
|
+
s.add_runtime_dependency 'opal', '~> 0.3.39'
|
17
19
|
end
|
data/spec/document_spec.rb
CHANGED
@@ -1,79 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Document do
|
4
|
-
html <<-HTML
|
5
|
-
<div id="foo" class="bar"></div>
|
6
|
-
<div class="woosh"></div>
|
7
|
-
<div class="woosh"></div>
|
8
|
-
<div class="find-foo"></div>
|
9
|
-
<div class="find-bar"></div>
|
10
|
-
<div class="find-foo"></div>
|
11
|
-
HTML
|
12
|
-
|
13
|
-
describe ".[]" do
|
14
|
-
it "should be able to find elements with given id" do
|
15
|
-
Document['#foo'].class_name.should == "bar"
|
16
|
-
Document['#foo'].size.should == 1
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should be able to match any valid CSS selector" do
|
20
|
-
Document['.woosh'].should be_kind_of(Element)
|
21
|
-
Document['.woosh'].size.should == 2
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should return an empty Elements instance when not matching any elements" do
|
25
|
-
dom = Document['.some-non-existing-class']
|
26
|
-
|
27
|
-
dom.should be_kind_of(Element)
|
28
|
-
dom.size.should == 0
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should accept an HTML string and parse it into a Elements instance" do
|
32
|
-
el = Document['<div id="foo-bar-baz"></div>']
|
33
|
-
|
34
|
-
el.should be_kind_of(Element)
|
35
|
-
el.id.should == "foo-bar-baz"
|
36
|
-
el.size.should == 1
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe ".find" do
|
41
|
-
it "should find all elements matching CSS selector" do
|
42
|
-
foo = Document.find '.find-foo'
|
43
|
-
foo.should be_kind_of(Element)
|
44
|
-
foo.length.should == 2
|
45
|
-
|
46
|
-
bar = Document.find '.find-bar'
|
47
|
-
bar.should be_kind_of(Element)
|
48
|
-
bar.length.should == 1
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should return an empty Element instance with length 0 when no matching" do
|
52
|
-
baz = Document.find '.find-baz'
|
53
|
-
baz.should be_kind_of(Element)
|
54
|
-
baz.length.should == 0
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '.id' do
|
59
|
-
it "should return a new instance with the element with given id" do
|
60
|
-
Document.id('foo').should be_kind_of(Element)
|
61
|
-
Document.id('foo').id.should == 'foo'
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should return nil if no element could be found" do
|
65
|
-
Document.id('bad-element-id').should be_nil
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe '.parse' do
|
70
|
-
it "should return a new instance with parsed element as single element" do
|
71
|
-
foo = Document.parse '<div id="foo" class="bar"></div>'
|
72
|
-
foo.id.should == 'foo'
|
73
|
-
foo.class_name.should == 'bar'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
4
|
describe '.title and .title=' do
|
78
5
|
it 'sets/gets the page title' do
|
79
6
|
current = Document.title
|
data/spec/element/after_spec.rb
CHANGED
@@ -9,17 +9,17 @@ describe "Element#after" do
|
|
9
9
|
HTML
|
10
10
|
|
11
11
|
it "should insert the given html string after each element" do
|
12
|
-
el =
|
12
|
+
el = Element.find('.after-spec-first')
|
13
13
|
el.size.should == 2
|
14
14
|
|
15
15
|
el.after '<p class="woosh"></p>'
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
Element.find('#foo').next.class_name.should == "woosh"
|
18
|
+
Element.find('#bar').next.class_name.should == "woosh"
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should insert the given DOM element after this element" do
|
22
|
-
|
23
|
-
|
22
|
+
Element.find('#baz').after Element.find('#some-header')
|
23
|
+
Element.find('#baz').next.id.should == "some-header"
|
24
24
|
end
|
25
25
|
end
|