cmstyle 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/app/assets/images/novartis-micro.png +0 -0
- data/lib/app/assets/images/novartis-small.png +0 -0
- data/lib/app/assets/javascripts/application.js +16 -0
- data/lib/app/assets/stylesheets/application.css +96 -0
- data/lib/app/views/{cmstyle → layouts}/_footer.slim +0 -0
- data/lib/app/views/layouts/_header.slim +34 -0
- data/lib/app/views/layouts/_modals.slim +66 -0
- data/lib/app/views/layouts/application.slim +35 -0
- data/lib/assets/images/8020select.png +0 -0
- data/lib/assets/images/adoptahydrant.png +0 -0
- data/lib/assets/images/apple-touch-icon-114-precomposed.png +0 -0
- data/lib/assets/images/apple-touch-icon-144-precomposed.png +0 -0
- data/lib/assets/images/apple-touch-icon-57-precomposed.png +0 -0
- data/lib/assets/images/apple-touch-icon-72-precomposed.png +0 -0
- data/lib/assets/images/bootstrap-example-carousel.png +0 -0
- data/lib/assets/images/bootstrap-example-fluid.jpg +0 -0
- data/lib/assets/images/bootstrap-example-hero.jpg +0 -0
- data/lib/assets/images/bootstrap-example-marketing-narrow.png +0 -0
- data/lib/assets/images/bootstrap-example-signin.png +0 -0
- data/lib/assets/images/bootstrap-example-starter.jpg +0 -0
- data/lib/assets/images/bootstrap-example-sticky-footer.png +0 -0
- data/lib/assets/images/bootstrap-mdo-sfmoma-01.jpg +0 -0
- data/lib/assets/images/bootstrap-mdo-sfmoma-02.jpg +0 -0
- data/lib/assets/images/bootstrap-mdo-sfmoma-03.jpg +0 -0
- data/lib/assets/images/breakingnews.png +0 -0
- data/lib/assets/images/browser-icon-chrome.png +0 -0
- data/lib/assets/images/browser-icon-firefox.png +0 -0
- data/lib/assets/images/browser-icon-safari.png +0 -0
- data/lib/assets/images/bs-docs-bootstrap-features.png +0 -0
- data/lib/assets/images/bs-docs-masthead-pattern.png +0 -0
- data/lib/assets/images/bs-docs-responsive-illustrations.png +0 -0
- data/lib/assets/images/bs-docs-twitter-github.png +0 -0
- data/lib/assets/images/fleetio.png +0 -0
- data/lib/assets/images/gathercontent.png +0 -0
- data/lib/assets/images/glyphicons-halflings-white.png +0 -0
- data/lib/assets/images/glyphicons-halflings.png +0 -0
- data/lib/assets/images/grid-baseline-20px.png +0 -0
- data/lib/assets/images/jshint.png +0 -0
- data/lib/assets/images/kippt.png +0 -0
- data/lib/assets/images/less-logo-large.png +0 -0
- data/lib/assets/images/logo.png +0 -0
- data/lib/assets/images/noise.png +0 -0
- data/lib/assets/images/responsive-illustrations.png +0 -0
- data/lib/assets/images/slide-01.jpg +0 -0
- data/lib/assets/images/slide-02.jpg +0 -0
- data/lib/assets/images/slide-03.jpg +0 -0
- data/lib/assets/images/small-hogan-icon.png +0 -0
- data/lib/assets/images/soundready.png +0 -0
- data/lib/assets/images/stripes.png +0 -0
- data/lib/assets/javascripts/application.js +154 -0
- data/lib/assets/javascripts/bootstrap-affix.js +19 -0
- data/lib/assets/javascripts/bootstrap-alert.js +56 -0
- data/lib/assets/javascripts/bootstrap-button.js +96 -0
- data/lib/assets/javascripts/bootstrap-carousel.js +63 -0
- data/lib/assets/javascripts/bootstrap-collapse.js +88 -0
- data/lib/assets/javascripts/bootstrap-dropdown.js +145 -0
- data/lib/assets/javascripts/bootstrap-modal.js +114 -0
- data/lib/assets/javascripts/bootstrap-phantom.js +21 -0
- data/lib/assets/javascripts/bootstrap-popover.js +107 -0
- data/lib/assets/javascripts/bootstrap-scrollspy.js +31 -0
- data/lib/assets/javascripts/bootstrap-tab.js +80 -0
- data/lib/assets/javascripts/bootstrap-tooltip.js +153 -0
- data/lib/assets/javascripts/bootstrap-transition.js +13 -0
- data/lib/assets/javascripts/bootstrap-typeahead.js +199 -0
- data/lib/assets/javascripts/compiler.js +348 -0
- data/lib/assets/javascripts/hogan-1.0.5.amd.js +576 -0
- data/lib/assets/javascripts/hogan-1.0.5.common.js +576 -0
- data/lib/assets/javascripts/hogan-1.0.5.js +572 -0
- data/lib/assets/javascripts/hogan-1.0.5.mustache.js +619 -0
- data/lib/assets/javascripts/hogan.js +545 -0
- data/lib/assets/javascripts/index.js +848 -0
- data/lib/assets/javascripts/jquery.js +2 -0
- data/lib/assets/javascripts/mustache.js +90 -0
- data/lib/assets/javascripts/phantom.js +63 -0
- data/lib/assets/javascripts/prettify.js +0 -0
- data/lib/assets/javascripts/qunit.js +1510 -0
- data/lib/assets/javascripts/release.js +74 -0
- data/lib/assets/javascripts/server.js +14 -0
- data/lib/assets/javascripts/spec.js +77 -0
- data/lib/assets/javascripts/template-1.0.5.js +233 -0
- data/lib/assets/javascripts/template.js +233 -0
- data/lib/assets/javascripts/web_templates.js +32 -0
- data/lib/assets/stylesheets/bootstrap.css +2 -2
- data/lib/assets/stylesheets/css-tests.css +139 -0
- data/lib/assets/stylesheets/docs.css +1015 -0
- data/lib/assets/stylesheets/layout.css +206 -0
- data/lib/assets/stylesheets/prettify.css +0 -0
- data/lib/assets/stylesheets/qunit.css +232 -0
- data/lib/assets/stylesheets/skeleton.css +236 -0
- data/lib/cmstyle/railtie.rb +7 -0
- data/lib/cmstyle/version.rb +1 -1
- data/lib/cmstyle.rb +2 -1
- data/lib/tasks/cleanup.rake +52 -0
- data/lib/tasks/setup.rake +32 -0
- metadata +90 -6
- data/lib/app/views/cmstyle/_header.slim +0 -40
- data/lib/app/views/cmstyle/_modals.slim +0 -62
@@ -0,0 +1,96 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-buttons")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
ok($(document.body).button, 'button method is defined')
|
7
|
+
})
|
8
|
+
|
9
|
+
test("should return element", function () {
|
10
|
+
ok($(document.body).button()[0] == document.body, 'document.body returned')
|
11
|
+
})
|
12
|
+
|
13
|
+
test("should return set state to loading", function () {
|
14
|
+
var btn = $('<button class="btn" data-loading-text="fat">mdo</button>')
|
15
|
+
equals(btn.html(), 'mdo', 'btn text equals mdo')
|
16
|
+
btn.button('loading')
|
17
|
+
equals(btn.html(), 'fat', 'btn text equals fat')
|
18
|
+
stop()
|
19
|
+
setTimeout(function () {
|
20
|
+
ok(btn.attr('disabled'), 'btn is disabled')
|
21
|
+
ok(btn.hasClass('disabled'), 'btn has disabled class')
|
22
|
+
start()
|
23
|
+
}, 0)
|
24
|
+
})
|
25
|
+
|
26
|
+
test("should return reset state", function () {
|
27
|
+
var btn = $('<button class="btn" data-loading-text="fat">mdo</button>')
|
28
|
+
equals(btn.html(), 'mdo', 'btn text equals mdo')
|
29
|
+
btn.button('loading')
|
30
|
+
equals(btn.html(), 'fat', 'btn text equals fat')
|
31
|
+
stop()
|
32
|
+
setTimeout(function () {
|
33
|
+
ok(btn.attr('disabled'), 'btn is disabled')
|
34
|
+
ok(btn.hasClass('disabled'), 'btn has disabled class')
|
35
|
+
start()
|
36
|
+
stop()
|
37
|
+
}, 0)
|
38
|
+
btn.button('reset')
|
39
|
+
equals(btn.html(), 'mdo', 'btn text equals mdo')
|
40
|
+
setTimeout(function () {
|
41
|
+
ok(!btn.attr('disabled'), 'btn is not disabled')
|
42
|
+
ok(!btn.hasClass('disabled'), 'btn does not have disabled class')
|
43
|
+
start()
|
44
|
+
}, 0)
|
45
|
+
})
|
46
|
+
|
47
|
+
test("should toggle active", function () {
|
48
|
+
var btn = $('<button class="btn">mdo</button>')
|
49
|
+
ok(!btn.hasClass('active'), 'btn does not have active class')
|
50
|
+
btn.button('toggle')
|
51
|
+
ok(btn.hasClass('active'), 'btn has class active')
|
52
|
+
})
|
53
|
+
|
54
|
+
test("should toggle active when btn children are clicked", function () {
|
55
|
+
var btn = $('<button class="btn" data-toggle="button">mdo</button>')
|
56
|
+
, inner = $('<i></i>')
|
57
|
+
btn
|
58
|
+
.append(inner)
|
59
|
+
.appendTo($('#qunit-fixture'))
|
60
|
+
ok(!btn.hasClass('active'), 'btn does not have active class')
|
61
|
+
inner.click()
|
62
|
+
ok(btn.hasClass('active'), 'btn has class active')
|
63
|
+
})
|
64
|
+
|
65
|
+
test("should toggle active when btn children are clicked within btn-group", function () {
|
66
|
+
var btngroup = $('<div class="btn-group" data-toggle="buttons-checkbox"></div>')
|
67
|
+
, btn = $('<button class="btn">fat</button>')
|
68
|
+
, inner = $('<i></i>')
|
69
|
+
btngroup
|
70
|
+
.append(btn.append(inner))
|
71
|
+
.appendTo($('#qunit-fixture'))
|
72
|
+
ok(!btn.hasClass('active'), 'btn does not have active class')
|
73
|
+
inner.click()
|
74
|
+
ok(btn.hasClass('active'), 'btn has class active')
|
75
|
+
})
|
76
|
+
|
77
|
+
test("should check for closest matching toggle", function () {
|
78
|
+
var group = $("<div data-toggle='buttons-radio'></div>")
|
79
|
+
, btn1 = $("<button class='btn active'></button>")
|
80
|
+
, btn2 = $("<button class='btn'></button>")
|
81
|
+
, wrap = $("<div></div>")
|
82
|
+
|
83
|
+
wrap.append(btn1, btn2)
|
84
|
+
|
85
|
+
group
|
86
|
+
.append(wrap)
|
87
|
+
.appendTo($('#qunit-fixture'))
|
88
|
+
|
89
|
+
ok(btn1.hasClass('active'), 'btn1 has active class')
|
90
|
+
ok(!btn2.hasClass('active'), 'btn2 does not have active class')
|
91
|
+
btn2.click()
|
92
|
+
ok(!btn1.hasClass('active'), 'btn1 does not have active class')
|
93
|
+
ok(btn2.hasClass('active'), 'btn2 has active class')
|
94
|
+
})
|
95
|
+
|
96
|
+
})
|
@@ -0,0 +1,63 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-carousel")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
ok($(document.body).carousel, 'carousel method is defined')
|
7
|
+
})
|
8
|
+
|
9
|
+
test("should return element", function () {
|
10
|
+
ok($(document.body).carousel()[0] == document.body, 'document.body returned')
|
11
|
+
})
|
12
|
+
|
13
|
+
test("should not fire sliden when slide is prevented", function () {
|
14
|
+
$.support.transition = false
|
15
|
+
stop()
|
16
|
+
$('<div class="carousel"/>')
|
17
|
+
.bind('slide', function (e) {
|
18
|
+
e.preventDefault();
|
19
|
+
ok(true);
|
20
|
+
start();
|
21
|
+
})
|
22
|
+
.bind('slid', function () {
|
23
|
+
ok(false);
|
24
|
+
})
|
25
|
+
.carousel('next')
|
26
|
+
})
|
27
|
+
|
28
|
+
test("should fire slide event with relatedTarget", function () {
|
29
|
+
var template = '<div id="myCarousel" class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt=""><div class="carousel-caption"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a><a class="right carousel-control" href="#myCarousel" data-slide="next">›</a></div>'
|
30
|
+
$.support.transition = false
|
31
|
+
stop()
|
32
|
+
$(template)
|
33
|
+
.on('slide', function (e) {
|
34
|
+
e.preventDefault();
|
35
|
+
ok(e.relatedTarget);
|
36
|
+
ok($(e.relatedTarget).hasClass('item'));
|
37
|
+
start();
|
38
|
+
})
|
39
|
+
.carousel('next')
|
40
|
+
})
|
41
|
+
|
42
|
+
test("should set interval from data attribute", 3,function () {
|
43
|
+
var template = $('<div id="myCarousel" class="carousel slide"> <div class="carousel-inner"> <div class="item active"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}First Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class="item"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}Second Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class="item"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}Third Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> </div> <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> </div>');
|
44
|
+
template.attr("data-interval", 1814);
|
45
|
+
|
46
|
+
template.appendTo("body");
|
47
|
+
$('[data-slide]').first().click();
|
48
|
+
ok($('#myCarousel').data('carousel').options.interval == 1814);
|
49
|
+
$('#myCarousel').remove();
|
50
|
+
|
51
|
+
template.appendTo("body").attr("data-modal", "foobar");
|
52
|
+
$('[data-slide]').first().click();
|
53
|
+
ok($('#myCarousel').data('carousel').options.interval == 1814, "even if there is an data-modal attribute set");
|
54
|
+
$('#myCarousel').remove();
|
55
|
+
|
56
|
+
template.appendTo("body");
|
57
|
+
$('[data-slide]').first().click();
|
58
|
+
$('#myCarousel').attr('data-interval', 1860);
|
59
|
+
$('[data-slide]').first().click();
|
60
|
+
ok($('#myCarousel').data('carousel').options.interval == 1814, "attributes should be read only on intitialization");
|
61
|
+
$('#myCarousel').remove();
|
62
|
+
})
|
63
|
+
})
|
@@ -0,0 +1,88 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-collapse")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
ok($(document.body).collapse, 'collapse method is defined')
|
7
|
+
})
|
8
|
+
|
9
|
+
test("should return element", function () {
|
10
|
+
ok($(document.body).collapse()[0] == document.body, 'document.body returned')
|
11
|
+
})
|
12
|
+
|
13
|
+
test("should show a collapsed element", function () {
|
14
|
+
var el = $('<div class="collapse"></div>').collapse('show')
|
15
|
+
ok(el.hasClass('in'), 'has class in')
|
16
|
+
ok(/height/.test(el.attr('style')), 'has height set')
|
17
|
+
})
|
18
|
+
|
19
|
+
test("should hide a collapsed element", function () {
|
20
|
+
var el = $('<div class="collapse"></div>').collapse('hide')
|
21
|
+
ok(!el.hasClass('in'), 'does not have class in')
|
22
|
+
ok(/height/.test(el.attr('style')), 'has height set')
|
23
|
+
})
|
24
|
+
|
25
|
+
test("should not fire shown when show is prevented", function () {
|
26
|
+
$.support.transition = false
|
27
|
+
stop()
|
28
|
+
$('<div class="collapse"/>')
|
29
|
+
.bind('show', function (e) {
|
30
|
+
e.preventDefault();
|
31
|
+
ok(true);
|
32
|
+
start();
|
33
|
+
})
|
34
|
+
.bind('shown', function () {
|
35
|
+
ok(false);
|
36
|
+
})
|
37
|
+
.collapse('show')
|
38
|
+
})
|
39
|
+
|
40
|
+
test("should reset style to auto after finishing opening collapse", function () {
|
41
|
+
$.support.transition = false
|
42
|
+
stop()
|
43
|
+
$('<div class="collapse" style="height: 0px"/>')
|
44
|
+
.bind('show', function () {
|
45
|
+
ok(this.style.height == '0px')
|
46
|
+
})
|
47
|
+
.bind('shown', function () {
|
48
|
+
ok(this.style.height == 'auto')
|
49
|
+
start()
|
50
|
+
})
|
51
|
+
.collapse('show')
|
52
|
+
})
|
53
|
+
|
54
|
+
test("should add active class to target when collapse shown", function () {
|
55
|
+
$.support.transition = false
|
56
|
+
stop()
|
57
|
+
|
58
|
+
var target = $('<a data-toggle="collapse" href="#test1"></a>')
|
59
|
+
.appendTo($('#qunit-fixture'))
|
60
|
+
|
61
|
+
var collapsible = $('<div id="test1"></div>')
|
62
|
+
.appendTo($('#qunit-fixture'))
|
63
|
+
.on('show', function () {
|
64
|
+
ok(!target.hasClass('collapsed'))
|
65
|
+
start()
|
66
|
+
})
|
67
|
+
|
68
|
+
target.click()
|
69
|
+
})
|
70
|
+
|
71
|
+
test("should remove active class to target when collapse hidden", function () {
|
72
|
+
$.support.transition = false
|
73
|
+
stop()
|
74
|
+
|
75
|
+
var target = $('<a data-toggle="collapse" href="#test1"></a>')
|
76
|
+
.appendTo($('#qunit-fixture'))
|
77
|
+
|
78
|
+
var collapsible = $('<div id="test1" class="in"></div>')
|
79
|
+
.appendTo($('#qunit-fixture'))
|
80
|
+
.on('hide', function () {
|
81
|
+
ok(target.hasClass('collapsed'))
|
82
|
+
start()
|
83
|
+
})
|
84
|
+
|
85
|
+
target.click()
|
86
|
+
})
|
87
|
+
|
88
|
+
})
|
@@ -0,0 +1,145 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-dropdowns")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
ok($(document.body).dropdown, 'dropdown method is defined')
|
7
|
+
})
|
8
|
+
|
9
|
+
test("should return element", function () {
|
10
|
+
var el = $("<div />")
|
11
|
+
ok(el.dropdown()[0] === el[0], 'same element returned')
|
12
|
+
})
|
13
|
+
|
14
|
+
test("should not open dropdown if target is disabled", function () {
|
15
|
+
var dropdownHTML = '<ul class="tabs">'
|
16
|
+
+ '<li class="dropdown">'
|
17
|
+
+ '<button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>'
|
18
|
+
+ '<ul class="dropdown-menu">'
|
19
|
+
+ '<li><a href="#">Secondary link</a></li>'
|
20
|
+
+ '<li><a href="#">Something else here</a></li>'
|
21
|
+
+ '<li class="divider"></li>'
|
22
|
+
+ '<li><a href="#">Another link</a></li>'
|
23
|
+
+ '</ul>'
|
24
|
+
+ '</li>'
|
25
|
+
+ '</ul>'
|
26
|
+
, dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click()
|
27
|
+
|
28
|
+
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
29
|
+
})
|
30
|
+
|
31
|
+
test("should not open dropdown if target is disabled", function () {
|
32
|
+
var dropdownHTML = '<ul class="tabs">'
|
33
|
+
+ '<li class="dropdown">'
|
34
|
+
+ '<button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>'
|
35
|
+
+ '<ul class="dropdown-menu">'
|
36
|
+
+ '<li><a href="#">Secondary link</a></li>'
|
37
|
+
+ '<li><a href="#">Something else here</a></li>'
|
38
|
+
+ '<li class="divider"></li>'
|
39
|
+
+ '<li><a href="#">Another link</a></li>'
|
40
|
+
+ '</ul>'
|
41
|
+
+ '</li>'
|
42
|
+
+ '</ul>'
|
43
|
+
, dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click()
|
44
|
+
|
45
|
+
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
46
|
+
})
|
47
|
+
|
48
|
+
test("should add class open to menu if clicked", function () {
|
49
|
+
var dropdownHTML = '<ul class="tabs">'
|
50
|
+
+ '<li class="dropdown">'
|
51
|
+
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
|
52
|
+
+ '<ul class="dropdown-menu">'
|
53
|
+
+ '<li><a href="#">Secondary link</a></li>'
|
54
|
+
+ '<li><a href="#">Something else here</a></li>'
|
55
|
+
+ '<li class="divider"></li>'
|
56
|
+
+ '<li><a href="#">Another link</a></li>'
|
57
|
+
+ '</ul>'
|
58
|
+
+ '</li>'
|
59
|
+
+ '</ul>'
|
60
|
+
, dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click()
|
61
|
+
|
62
|
+
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
63
|
+
})
|
64
|
+
|
65
|
+
test("should test if element has a # before assuming it's a selector", function () {
|
66
|
+
var dropdownHTML = '<ul class="tabs">'
|
67
|
+
+ '<li class="dropdown">'
|
68
|
+
+ '<a href="/foo/" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
|
69
|
+
+ '<ul class="dropdown-menu">'
|
70
|
+
+ '<li><a href="#">Secondary link</a></li>'
|
71
|
+
+ '<li><a href="#">Something else here</a></li>'
|
72
|
+
+ '<li class="divider"></li>'
|
73
|
+
+ '<li><a href="#">Another link</a></li>'
|
74
|
+
+ '</ul>'
|
75
|
+
+ '</li>'
|
76
|
+
+ '</ul>'
|
77
|
+
, dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click()
|
78
|
+
|
79
|
+
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
80
|
+
})
|
81
|
+
|
82
|
+
|
83
|
+
test("should remove open class if body clicked", function () {
|
84
|
+
var dropdownHTML = '<ul class="tabs">'
|
85
|
+
+ '<li class="dropdown">'
|
86
|
+
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
|
87
|
+
+ '<ul class="dropdown-menu">'
|
88
|
+
+ '<li><a href="#">Secondary link</a></li>'
|
89
|
+
+ '<li><a href="#">Something else here</a></li>'
|
90
|
+
+ '<li class="divider"></li>'
|
91
|
+
+ '<li><a href="#">Another link</a></li>'
|
92
|
+
+ '</ul>'
|
93
|
+
+ '</li>'
|
94
|
+
+ '</ul>'
|
95
|
+
, dropdown = $(dropdownHTML)
|
96
|
+
.appendTo('#qunit-fixture')
|
97
|
+
.find('[data-toggle="dropdown"]')
|
98
|
+
.dropdown()
|
99
|
+
.click()
|
100
|
+
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
101
|
+
$('body').click()
|
102
|
+
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class removed')
|
103
|
+
dropdown.remove()
|
104
|
+
})
|
105
|
+
|
106
|
+
test("should remove open class if body clicked, with multiple drop downs", function () {
|
107
|
+
var dropdownHTML =
|
108
|
+
'<ul class="nav">'
|
109
|
+
+ ' <li><a href="#menu1">Menu 1</a></li>'
|
110
|
+
+ ' <li class="dropdown" id="testmenu">'
|
111
|
+
+ ' <a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <b class="caret"></b></a>'
|
112
|
+
+ ' <ul class="dropdown-menu" role="menu">'
|
113
|
+
+ ' <li><a href="#sub1">Submenu 1</a></li>'
|
114
|
+
+ ' </ul>'
|
115
|
+
+ ' </li>'
|
116
|
+
+ '</ul>'
|
117
|
+
+ '<div class="btn-group">'
|
118
|
+
+ ' <button class="btn">Actions</button>'
|
119
|
+
+ ' <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>'
|
120
|
+
+ ' <ul class="dropdown-menu">'
|
121
|
+
+ ' <li><a href="#">Action 1</a></li>'
|
122
|
+
+ ' </ul>'
|
123
|
+
+ '</div>'
|
124
|
+
, dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
|
125
|
+
, first = dropdowns.first()
|
126
|
+
, last = dropdowns.last()
|
127
|
+
|
128
|
+
ok(dropdowns.length == 2, "Should be two dropdowns")
|
129
|
+
|
130
|
+
first.click()
|
131
|
+
ok(first.parents('.open').length == 1, 'open class added on click')
|
132
|
+
ok($('#qunit-fixture .open').length == 1, 'only one object is open')
|
133
|
+
$('body').click()
|
134
|
+
ok($("#qunit-fixture .open").length === 0, 'open class removed')
|
135
|
+
|
136
|
+
last.click()
|
137
|
+
ok(last.parent('.open').length == 1, 'open class added on click')
|
138
|
+
ok($('#qunit-fixture .open').length == 1, 'only one object is open')
|
139
|
+
$('body').click()
|
140
|
+
ok($("#qunit-fixture .open").length === 0, 'open class removed')
|
141
|
+
|
142
|
+
$("#qunit-fixture").html("")
|
143
|
+
})
|
144
|
+
|
145
|
+
})
|
@@ -0,0 +1,114 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-modal")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
var div = $("<div id='modal-test'></div>")
|
7
|
+
ok(div.modal, 'modal method is defined')
|
8
|
+
})
|
9
|
+
|
10
|
+
test("should return element", function () {
|
11
|
+
var div = $("<div id='modal-test'></div>")
|
12
|
+
ok(div.modal() == div, 'document.body returned')
|
13
|
+
$('#modal-test').remove()
|
14
|
+
})
|
15
|
+
|
16
|
+
test("should expose defaults var for settings", function () {
|
17
|
+
ok($.fn.modal.defaults, 'default object exposed')
|
18
|
+
})
|
19
|
+
|
20
|
+
test("should insert into dom when show method is called", function () {
|
21
|
+
stop()
|
22
|
+
$.support.transition = false
|
23
|
+
$("<div id='modal-test'></div>")
|
24
|
+
.bind("shown", function () {
|
25
|
+
ok($('#modal-test').length, 'modal insterted into dom')
|
26
|
+
$(this).remove()
|
27
|
+
start()
|
28
|
+
})
|
29
|
+
.modal("show")
|
30
|
+
})
|
31
|
+
|
32
|
+
test("should fire show event", function () {
|
33
|
+
stop()
|
34
|
+
$.support.transition = false
|
35
|
+
$("<div id='modal-test'></div>")
|
36
|
+
.bind("show", function () {
|
37
|
+
ok(true, "show was called")
|
38
|
+
})
|
39
|
+
.bind("shown", function () {
|
40
|
+
$(this).remove()
|
41
|
+
start()
|
42
|
+
})
|
43
|
+
.modal("show")
|
44
|
+
})
|
45
|
+
|
46
|
+
test("should not fire shown when default prevented", function () {
|
47
|
+
stop()
|
48
|
+
$.support.transition = false
|
49
|
+
$("<div id='modal-test'></div>")
|
50
|
+
.bind("show", function (e) {
|
51
|
+
e.preventDefault()
|
52
|
+
ok(true, "show was called")
|
53
|
+
start()
|
54
|
+
})
|
55
|
+
.bind("shown", function () {
|
56
|
+
ok(false, "shown was called")
|
57
|
+
})
|
58
|
+
.modal("show")
|
59
|
+
})
|
60
|
+
|
61
|
+
test("should hide modal when hide is called", function () {
|
62
|
+
stop()
|
63
|
+
$.support.transition = false
|
64
|
+
|
65
|
+
$("<div id='modal-test'></div>")
|
66
|
+
.bind("shown", function () {
|
67
|
+
ok($('#modal-test').is(":visible"), 'modal visible')
|
68
|
+
ok($('#modal-test').length, 'modal insterted into dom')
|
69
|
+
$(this).modal("hide")
|
70
|
+
})
|
71
|
+
.bind("hidden", function() {
|
72
|
+
ok(!$('#modal-test').is(":visible"), 'modal hidden')
|
73
|
+
$('#modal-test').remove()
|
74
|
+
start()
|
75
|
+
})
|
76
|
+
.modal("show")
|
77
|
+
})
|
78
|
+
|
79
|
+
test("should toggle when toggle is called", function () {
|
80
|
+
stop()
|
81
|
+
$.support.transition = false
|
82
|
+
var div = $("<div id='modal-test'></div>")
|
83
|
+
div
|
84
|
+
.bind("shown", function () {
|
85
|
+
ok($('#modal-test').is(":visible"), 'modal visible')
|
86
|
+
ok($('#modal-test').length, 'modal insterted into dom')
|
87
|
+
div.modal("toggle")
|
88
|
+
})
|
89
|
+
.bind("hidden", function() {
|
90
|
+
ok(!$('#modal-test').is(":visible"), 'modal hidden')
|
91
|
+
div.remove()
|
92
|
+
start()
|
93
|
+
})
|
94
|
+
.modal("toggle")
|
95
|
+
})
|
96
|
+
|
97
|
+
test("should remove from dom when click [data-dismiss=modal]", function () {
|
98
|
+
stop()
|
99
|
+
$.support.transition = false
|
100
|
+
var div = $("<div id='modal-test'><span class='close' data-dismiss='modal'></span></div>")
|
101
|
+
div
|
102
|
+
.bind("shown", function () {
|
103
|
+
ok($('#modal-test').is(":visible"), 'modal visible')
|
104
|
+
ok($('#modal-test').length, 'modal insterted into dom')
|
105
|
+
div.find('.close').click()
|
106
|
+
})
|
107
|
+
.bind("hidden", function() {
|
108
|
+
ok(!$('#modal-test').is(":visible"), 'modal hidden')
|
109
|
+
div.remove()
|
110
|
+
start()
|
111
|
+
})
|
112
|
+
.modal("toggle")
|
113
|
+
})
|
114
|
+
})
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// Logging setup for phantom integration
|
2
|
+
// adapted from Modernizr
|
3
|
+
|
4
|
+
QUnit.begin = function () {
|
5
|
+
console.log("Starting test suite")
|
6
|
+
console.log("================================================\n")
|
7
|
+
}
|
8
|
+
|
9
|
+
QUnit.moduleDone = function (opts) {
|
10
|
+
if (opts.failed === 0) {
|
11
|
+
console.log("\u2714 All tests passed in '" + opts.name + "' module")
|
12
|
+
} else {
|
13
|
+
console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module")
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
QUnit.done = function (opts) {
|
18
|
+
console.log("\n================================================")
|
19
|
+
console.log("Tests completed in " + opts.runtime + " milliseconds")
|
20
|
+
console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.")
|
21
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
$(function () {
|
2
|
+
|
3
|
+
module("bootstrap-popover")
|
4
|
+
|
5
|
+
test("should be defined on jquery object", function () {
|
6
|
+
var div = $('<div></div>')
|
7
|
+
ok(div.popover, 'popover method is defined')
|
8
|
+
})
|
9
|
+
|
10
|
+
test("should return element", function () {
|
11
|
+
var div = $('<div></div>')
|
12
|
+
ok(div.popover() == div, 'document.body returned')
|
13
|
+
})
|
14
|
+
|
15
|
+
test("should render popover element", function () {
|
16
|
+
$.support.transition = false
|
17
|
+
var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
|
18
|
+
.appendTo('#qunit-fixture')
|
19
|
+
.popover('show')
|
20
|
+
|
21
|
+
ok($('.popover').length, 'popover was inserted')
|
22
|
+
popover.popover('hide')
|
23
|
+
ok(!$(".popover").length, 'popover removed')
|
24
|
+
})
|
25
|
+
|
26
|
+
test("should store popover instance in popover data object", function () {
|
27
|
+
$.support.transition = false
|
28
|
+
var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
|
29
|
+
.popover()
|
30
|
+
|
31
|
+
ok(!!popover.data('popover'), 'popover instance exists')
|
32
|
+
})
|
33
|
+
|
34
|
+
test("should get title and content from options", function () {
|
35
|
+
$.support.transition = false
|
36
|
+
var popover = $('<a href="#">@fat</a>')
|
37
|
+
.appendTo('#qunit-fixture')
|
38
|
+
.popover({
|
39
|
+
title: function () {
|
40
|
+
return '@fat'
|
41
|
+
}
|
42
|
+
, content: function () {
|
43
|
+
return 'loves writing tests (╯°□°)╯︵ ┻━┻'
|
44
|
+
}
|
45
|
+
})
|
46
|
+
|
47
|
+
popover.popover('show')
|
48
|
+
|
49
|
+
ok($('.popover').length, 'popover was inserted')
|
50
|
+
equals($('.popover .popover-title').text(), '@fat', 'title correctly inserted')
|
51
|
+
equals($('.popover .popover-content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
|
52
|
+
|
53
|
+
popover.popover('hide')
|
54
|
+
ok(!$('.popover').length, 'popover was removed')
|
55
|
+
$('#qunit-fixture').empty()
|
56
|
+
})
|
57
|
+
|
58
|
+
test("should get title and content from attributes", function () {
|
59
|
+
$.support.transition = false
|
60
|
+
var popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
|
61
|
+
.appendTo('#qunit-fixture')
|
62
|
+
.popover()
|
63
|
+
.popover('show')
|
64
|
+
|
65
|
+
ok($('.popover').length, 'popover was inserted')
|
66
|
+
equals($('.popover .popover-title').text(), '@mdo', 'title correctly inserted')
|
67
|
+
equals($('.popover .popover-content').text(), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted')
|
68
|
+
|
69
|
+
popover.popover('hide')
|
70
|
+
ok(!$('.popover').length, 'popover was removed')
|
71
|
+
$('#qunit-fixture').empty()
|
72
|
+
})
|
73
|
+
|
74
|
+
test("should respect custom classes", function() {
|
75
|
+
$.support.transition = false
|
76
|
+
var popover = $('<a href="#">@fat</a>')
|
77
|
+
.appendTo('#qunit-fixture')
|
78
|
+
.popover({
|
79
|
+
title: 'Test'
|
80
|
+
, content: 'Test'
|
81
|
+
, template: '<div class="popover foobar"><div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div></div>'
|
82
|
+
})
|
83
|
+
|
84
|
+
popover.popover('show')
|
85
|
+
|
86
|
+
ok($('.popover').length, 'popover was inserted')
|
87
|
+
ok($('.popover').hasClass('foobar'), 'custom class is present')
|
88
|
+
|
89
|
+
popover.popover('hide')
|
90
|
+
ok(!$('.popover').length, 'popover was removed')
|
91
|
+
$('#qunit-fixture').empty()
|
92
|
+
})
|
93
|
+
|
94
|
+
test("should destroy popover", function () {
|
95
|
+
var popover = $('<div/>').popover({trigger: 'hover'}).on('click.foo', function(){})
|
96
|
+
ok(popover.data('popover'), 'popover has data')
|
97
|
+
ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event')
|
98
|
+
ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event')
|
99
|
+
popover.popover('show')
|
100
|
+
popover.popover('destroy')
|
101
|
+
ok(!popover.hasClass('in'), 'popover is hidden')
|
102
|
+
ok(!popover.data('popover'), 'popover does not have data')
|
103
|
+
ok($._data(popover[0],'events').click[0].namespace == 'foo', 'popover still has click.foo')
|
104
|
+
ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events')
|
105
|
+
})
|
106
|
+
|
107
|
+
})
|