opal-jquery 0.0.6 → 0.0.7
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/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
|