Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Bootstrap
bootstrap
Commits
34891de1
Commit
34891de1
authored
10 years ago
by
Mark Otto
Browse files
Options
Download
Plain Diff
grunt
parents
d66b65dd
1e3b9380
Changes
65
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
js/modal.js
+9
-6
js/modal.js
js/popover.js
+1
-1
js/popover.js
js/scrollspy.js
+18
-15
js/scrollspy.js
js/tab.js
+1
-1
js/tab.js
js/tests/unit/.jshintrc
+5
-0
js/tests/unit/.jshintrc
js/tests/unit/affix.js
+8
-5
js/tests/unit/affix.js
js/tests/unit/alert.js
+7
-6
js/tests/unit/alert.js
js/tests/unit/button.js
+8
-7
js/tests/unit/button.js
js/tests/unit/carousel.js
+3
-2
js/tests/unit/carousel.js
js/tests/unit/collapse.js
+3
-2
js/tests/unit/collapse.js
js/tests/unit/dropdown.js
+21
-20
js/tests/unit/dropdown.js
js/tests/unit/modal.js
+54
-2
js/tests/unit/modal.js
js/tests/unit/phantom.js
+0
-1
js/tests/unit/phantom.js
js/tests/unit/popover.js
+18
-5
js/tests/unit/popover.js
js/tests/unit/scrollspy.js
+48
-12
js/tests/unit/scrollspy.js
js/tests/unit/tab.js
+3
-2
js/tests/unit/tab.js
js/tests/unit/tooltip.js
+147
-69
js/tests/unit/tooltip.js
js/tooltip.js
+21
-7
js/tooltip.js
js/transition.js
+2
-1
js/transition.js
less/forms.less
+20
-4
less/forms.less
with
397 additions
and
168 deletions
+397
-168
js/modal.js
+
9
-
6
View file @
34891de1
...
...
@@ -188,7 +188,7 @@
}
else
if
(
!
this
.
isShown
&&
this
.
$backdrop
)
{
this
.
$backdrop
.
removeClass
(
'
in
'
)
var
callbackRemove
=
function
()
{
var
callbackRemove
=
function
()
{
that
.
removeBackdrop
()
callback
&&
callback
()
}
...
...
@@ -208,8 +208,8 @@
this
.
scrollbarWidth
=
this
.
scrollbarWidth
||
this
.
measureScrollbar
()
}
Modal
.
prototype
.
setScrollbar
=
function
()
{
var
bodyPad
=
parseInt
(
this
.
$body
.
css
(
'
padding-right
'
)
||
0
)
Modal
.
prototype
.
setScrollbar
=
function
()
{
var
bodyPad
=
parseInt
(
(
this
.
$body
.
css
(
'
padding-right
'
)
||
0
)
,
10
)
if
(
this
.
scrollbarWidth
)
this
.
$body
.
css
(
'
padding-right
'
,
bodyPad
+
this
.
scrollbarWidth
)
}
...
...
@@ -268,10 +268,13 @@
if
(
$this
.
is
(
'
a
'
))
e
.
preventDefault
()
Plugin
.
call
(
$target
,
option
,
this
)
$target
.
one
(
'
hide.bs.modal
'
,
function
()
{
$this
.
is
(
'
:visible
'
)
&&
$this
.
trigger
(
'
focus
'
)
$target
.
one
(
'
show.bs.modal
'
,
function
(
showEvent
)
{
if
(
showEvent
.
isDefaultPrevented
())
return
// only register focus restorer if modal will actually get shown
$target
.
one
(
'
hidden.bs.modal
'
,
function
()
{
$this
.
is
(
'
:visible
'
)
&&
$this
.
trigger
(
'
focus
'
)
})
})
Plugin
.
call
(
$target
,
option
,
this
)
})
}(
jQuery
);
This diff is collapsed.
Click to expand it.
js/popover.js
+
1
-
1
View file @
34891de1
...
...
@@ -72,7 +72,7 @@
}
Popover
.
prototype
.
arrow
=
function
()
{
return
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'
.arrow
'
)
return
(
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'
.arrow
'
)
)
}
Popover
.
prototype
.
tip
=
function
()
{
...
...
This diff is collapsed.
Click to expand it.
js/scrollspy.js
+
18
-
15
View file @
34891de1
...
...
@@ -14,20 +14,17 @@
// ==========================
function
ScrollSpy
(
element
,
options
)
{
var
href
var
process
=
$
.
proxy
(
this
.
process
,
this
)
this
.
$element
=
$
(
element
).
is
(
'
body
'
)
?
$
(
window
)
:
$
(
element
)
this
.
$body
=
$
(
'
body
'
)
this
.
$scrollElement
=
this
.
$element
.
on
(
'
scroll.bs.scrollspy
'
,
process
)
this
.
$scrollElement
=
$
(
element
).
is
(
'
body
'
)
?
$
(
window
)
:
$
(
element
)
this
.
options
=
$
.
extend
({},
ScrollSpy
.
DEFAULTS
,
options
)
this
.
selector
=
(
this
.
options
.
target
||
((
href
=
$
(
element
).
attr
(
'
href
'
))
&&
href
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
''
))
//strip for ie7
||
''
)
+
'
.nav li > a
'
this
.
offsets
=
$
([])
this
.
targets
=
$
([])
this
.
selector
=
(
this
.
options
.
target
||
''
)
+
'
.nav li > a
'
this
.
offsets
=
[]
this
.
targets
=
[]
this
.
activeTarget
=
null
this
.
$scrollElement
.
on
(
'
scroll.bs.scrollspy
'
,
process
)
this
.
refresh
()
this
.
process
()
}
...
...
@@ -39,10 +36,16 @@
}
ScrollSpy
.
prototype
.
refresh
=
function
()
{
var
offsetMethod
=
this
.
$element
[
0
]
==
window
?
'
offset
'
:
'
position
'
var
offsetMethod
=
'
offset
'
var
offsetBase
=
0
this
.
offsets
=
$
([])
this
.
targets
=
$
([])
if
(
!
$
.
isWindow
(
this
.
$scrollElement
[
0
]))
{
offsetMethod
=
'
position
'
offsetBase
=
this
.
$scrollElement
.
scrollTop
()
}
this
.
offsets
=
[]
this
.
targets
=
[]
var
self
=
this
...
...
@@ -57,7 +60,7 @@
return
(
$href
&&
$href
.
length
&&
$href
.
is
(
'
:visible
'
)
&&
[[
$href
[
offsetMethod
]().
top
+
(
!
$
.
isWindow
(
self
.
$scrollElement
.
get
(
0
))
&&
self
.
$scrollElement
.
scrollTop
())
,
href
]])
||
null
&&
[[
$href
[
offsetMethod
]().
top
+
offsetBase
,
href
]])
||
null
})
.
sort
(
function
(
a
,
b
)
{
return
a
[
0
]
-
b
[
0
]
})
.
each
(
function
()
{
...
...
@@ -69,14 +72,14 @@
ScrollSpy
.
prototype
.
process
=
function
()
{
var
scrollTop
=
this
.
$scrollElement
.
scrollTop
()
+
this
.
options
.
offset
var
scrollHeight
=
this
.
$scrollElement
[
0
].
scrollHeight
||
Math
.
max
(
this
.
$body
[
0
].
scrollHeight
,
document
.
documentElement
.
scrollHeight
)
var
maxScroll
=
scrollHeight
-
this
.
$scrollElement
.
height
()
var
maxScroll
=
this
.
options
.
offset
+
scrollHeight
-
this
.
$scrollElement
.
height
()
var
offsets
=
this
.
offsets
var
targets
=
this
.
targets
var
activeTarget
=
this
.
activeTarget
var
i
if
(
scrollTop
>=
maxScroll
)
{
return
activeTarget
!=
(
i
=
targets
.
last
()[
0
])
&&
this
.
activate
(
i
)
return
activeTarget
!=
(
i
=
targets
[
targets
.
length
-
1
])
&&
this
.
activate
(
i
)
}
if
(
activeTarget
&&
scrollTop
<=
offsets
[
0
])
{
...
...
@@ -87,7 +90,7 @@
activeTarget
!=
targets
[
i
]
&&
scrollTop
>=
offsets
[
i
]
&&
(
!
offsets
[
i
+
1
]
||
scrollTop
<=
offsets
[
i
+
1
])
&&
this
.
activate
(
targets
[
i
]
)
&&
this
.
activate
(
targets
[
i
])
}
}
...
...
This diff is collapsed.
Click to expand it.
js/tab.js
+
1
-
1
View file @
34891de1
...
...
@@ -92,7 +92,7 @@
// TAB PLUGIN DEFINITION
// =====================
function
Plugin
(
option
)
{
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'
bs.tab
'
)
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/.jshintrc
0 → 100644
+
5
-
0
View file @
34891de1
{
"extends" : "../../.jshintrc",
"devel" : true,
"qunit" : true
}
This diff is collapsed.
Click to expand it.
js/tests/unit/affix.js
+
8
-
5
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
affix plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
affix
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapAffix
=
$
.
fn
.
affix
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
affix
=
$
.
fn
.
bootstrapAffix
delete
$
.
fn
.
bootstrapAffix
}
...
...
@@ -45,7 +46,7 @@ $(function () {
.
on
(
'
affix.bs.affix
'
,
function
()
{
ok
(
true
,
'
affix event triggered
'
)
}).
on
(
'
affixed.bs.affix
'
,
function
()
{
ok
(
true
,
'
affixed event triggered
'
)
ok
(
true
,
'
affixed event triggered
'
)
$
(
'
#affixTarget
'
).
remove
()
$
(
'
#affixAfter
'
).
remove
()
start
()
...
...
@@ -53,7 +54,9 @@ $(function () {
setTimeout
(
function
()
{
window
.
scrollTo
(
0
,
document
.
body
.
scrollHeight
)
setTimeout
(
function
()
{
window
.
scroll
(
0
,
0
)
},
0
)
},
0
)
setTimeout
(
function
()
{
window
.
scroll
(
0
,
0
)
},
0
)
},
0
)
})
})
This diff is collapsed.
Click to expand it.
js/tests/unit/alert.js
+
7
-
6
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
alert plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
alert
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapAlert
=
$
.
fn
.
alert
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
alert
=
$
.
fn
.
bootstrapAlert
delete
$
.
fn
.
bootstrapAlert
}
...
...
@@ -29,8 +30,8 @@ $(function () {
var
alertHTML
=
'
<div class="alert-message warning fade in">
'
+
'
<a class="close" href="#" data-dismiss="alert">×</a>
'
+
'
<p><strong>Holy guacamole!</strong> Best check yo self, you
\'
re not looking too good.</p>
'
+
'
</div>
'
,
alert
=
$
(
alertHTML
).
bootstrapAlert
()
'
</div>
'
var
alert
=
$
(
alertHTML
).
bootstrapAlert
()
alert
.
find
(
'
.close
'
).
click
()
...
...
@@ -43,8 +44,8 @@ $(function () {
var
alertHTML
=
'
<div class="alert-message warning fade in">
'
+
'
<a class="close" href="#" data-dismiss="alert">×</a>
'
+
'
<p><strong>Holy guacamole!</strong> Best check yo self, you
\'
re not looking too good.</p>
'
+
'
</div>
'
,
alert
=
$
(
alertHTML
).
appendTo
(
'
#qunit-fixture
'
).
bootstrapAlert
()
'
</div>
'
var
alert
=
$
(
alertHTML
).
appendTo
(
'
#qunit-fixture
'
).
bootstrapAlert
()
ok
(
$
(
'
#qunit-fixture
'
).
find
(
'
.alert-message
'
).
length
,
'
element added to dom
'
)
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/button.js
+
8
-
7
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
button plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
button
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapButton
=
$
.
fn
.
button
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
button
=
$
.
fn
.
bootstrapButton
delete
$
.
fn
.
bootstrapButton
}
...
...
@@ -88,8 +89,8 @@ $(function () {
})
test
(
'
should toggle active when btn children are clicked
'
,
function
()
{
var
btn
=
$
(
'
<button class="btn" data-toggle="button">mdo</button>
'
)
,
inner
=
$
(
'
<i></i>
'
)
var
btn
=
$
(
'
<button class="btn" data-toggle="button">mdo</button>
'
)
var
inner
=
$
(
'
<i></i>
'
)
btn
.
append
(
inner
)
.
appendTo
(
$
(
'
#qunit-fixture
'
))
...
...
@@ -99,9 +100,9 @@ $(function () {
})
test
(
'
should toggle active when btn children are clicked within btn-group
'
,
function
()
{
var
btngroup
=
$
(
'
<div class="btn-group" data-toggle="buttons"></div>
'
)
,
btn
=
$
(
'
<button class="btn">fat</button>
'
)
,
inner
=
$
(
'
<i></i>
'
)
var
btngroup
=
$
(
'
<div class="btn-group" data-toggle="buttons"></div>
'
)
var
btn
=
$
(
'
<button class="btn">fat</button>
'
)
var
inner
=
$
(
'
<i></i>
'
)
btngroup
.
append
(
btn
.
append
(
inner
))
.
appendTo
(
$
(
'
#qunit-fixture
'
))
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/carousel.js
+
3
-
2
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
carousel plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
carousel
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapCarousel
=
$
.
fn
.
carousel
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
carousel
=
$
.
fn
.
bootstrapCarousel
delete
$
.
fn
.
bootstrapCarousel
}
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/collapse.js
+
3
-
2
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
collapse plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
collapse
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapCollapse
=
$
.
fn
.
collapse
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
collapse
=
$
.
fn
.
bootstrapCollapse
delete
$
.
fn
.
bootstrapCollapse
}
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/dropdown.js
+
21
-
20
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
dropdowns plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
dropdowns
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapDropdown
=
$
.
fn
.
dropdown
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
dropdown
=
$
.
fn
.
bootstrapDropdown
delete
$
.
fn
.
bootstrapDropdown
}
...
...
@@ -37,8 +38,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
ok
(
!
dropdown
.
parent
(
'
.dropdown
'
).
hasClass
(
'
open
'
),
'
open class added on click
'
)
})
...
...
@@ -54,8 +55,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
ok
(
!
dropdown
.
parent
(
'
.dropdown
'
).
hasClass
(
'
open
'
),
'
open class added on click
'
)
})
...
...
@@ -71,8 +72,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
ok
(
dropdown
.
parent
(
'
.dropdown
'
).
hasClass
(
'
open
'
),
'
open class added on click
'
)
})
...
...
@@ -88,8 +89,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
).
find
(
'
[data-toggle="dropdown"]
'
).
bootstrapDropdown
().
click
()
ok
(
dropdown
.
parent
(
'
.dropdown
'
).
hasClass
(
'
open
'
),
'
open class added on click
'
)
})
...
...
@@ -106,8 +107,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
)
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
)
.
appendTo
(
'
#qunit-fixture
'
)
.
find
(
'
[data-toggle="dropdown"]
'
)
.
bootstrapDropdown
()
...
...
@@ -135,10 +136,10 @@ $(function () {
'
<ul class="dropdown-menu">
'
+
'
<li><a href="#">Action 1</a></li>
'
+
'
</ul>
'
+
'
</div>
'
,
dropdowns
=
$
(
dropdownHTML
).
appendTo
(
'
#qunit-fixture
'
).
find
(
'
[data-toggle="dropdown"]
'
)
,
first
=
dropdowns
.
first
()
,
last
=
dropdowns
.
last
()
'
</div>
'
var
dropdowns
=
$
(
dropdownHTML
).
appendTo
(
'
#qunit-fixture
'
).
find
(
'
[data-toggle="dropdown"]
'
)
var
first
=
dropdowns
.
first
()
var
last
=
dropdowns
.
last
()
ok
(
dropdowns
.
length
==
2
,
'
Should be two dropdowns
'
)
...
...
@@ -168,8 +169,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
)
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
)
.
appendTo
(
'
#qunit-fixture
'
)
.
find
(
'
[data-toggle="dropdown"]
'
)
.
bootstrapDropdown
()
...
...
@@ -202,8 +203,8 @@ $(function () {
'
<li><a href="#">Another link</a></li>
'
+
'
</ul>
'
+
'
</li>
'
+
'
</ul>
'
,
dropdown
=
$
(
dropdownHTML
)
'
</ul>
'
var
dropdown
=
$
(
dropdownHTML
)
.
appendTo
(
'
#qunit-fixture
'
)
.
find
(
'
[data-toggle="dropdown"]
'
)
.
bootstrapDropdown
()
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/modal.js
+
54
-
2
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
modal plugin
'
)
...
...
@@ -8,11 +9,11 @@ $(function () {
})
module
(
'
modal
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapModal
=
$
.
fn
.
modal
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
modal
=
$
.
fn
.
bootstrapModal
delete
$
.
fn
.
bootstrapModal
}
...
...
@@ -201,4 +202,55 @@ $(function () {
div
.
remove
()
})
test
(
'
should restore focus to toggling element when modal is hidden after having been opened via data-api
'
,
function
()
{
stop
()
$
.
support
.
transition
=
false
var
toggleBtn
=
$
(
'
<button data-toggle="modal" data-target="#modal-test">Launch modal</button>
'
).
appendTo
(
'
#qunit-fixture
'
)
var
div
=
$
(
'
<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"></div></div></div>
'
)
div
.
on
(
'
hidden.bs.modal
'
,
function
()
{
window
.
setTimeout
(
function
()
{
// give the focus restoration callback a chance to run
equal
(
document
.
activeElement
,
toggleBtn
[
0
],
'
toggling element is once again focused
'
)
div
.
remove
()
toggleBtn
.
remove
()
start
()
},
0
)
})
.
on
(
'
shown.bs.modal
'
,
function
()
{
$
(
'
#close
'
).
click
()
})
.
appendTo
(
'
#qunit-fixture
'
)
toggleBtn
.
click
()
})
test
(
'
should not restore focus to toggling element if the associated show event gets prevented
'
,
function
()
{
stop
()
$
.
support
.
transition
=
false
var
toggleBtn
=
$
(
'
<button data-toggle="modal" data-target="#modal-test">Launch modal</button>
'
).
appendTo
(
'
#qunit-fixture
'
)
var
otherBtn
=
$
(
'
<button id="other-btn">Golden boy</button>
'
).
appendTo
(
'
#qunit-fixture
'
)
var
div
=
$
(
'
<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"></div></div></div>
'
)
div
.
one
(
'
show.bs.modal
'
,
function
(
e
)
{
e
.
preventDefault
()
otherBtn
.
focus
()
window
.
setTimeout
(
function
()
{
// give the focus event from the previous line a chance to run
div
.
bootstrapModal
(
'
show
'
)
},
0
)
})
.
on
(
'
hidden.bs.modal
'
,
function
()
{
window
.
setTimeout
(
function
()
{
// give the focus restoration callback a chance to run (except it shouldn't run in this case)
equal
(
document
.
activeElement
,
otherBtn
[
0
],
'
show was prevented, so focus should not have been restored to toggling element
'
)
div
.
remove
()
toggleBtn
.
remove
()
otherBtn
.
remove
()
start
()
},
0
)
})
.
on
(
'
shown.bs.modal
'
,
function
()
{
$
(
'
#close
'
).
click
()
})
.
appendTo
(
'
#qunit-fixture
'
)
toggleBtn
.
click
()
})
})
This diff is collapsed.
Click to expand it.
js/tests/unit/phantom.js
+
0
-
1
View file @
34891de1
...
...
@@ -6,7 +6,6 @@
* Licensed under the MIT license.
*/
/*global QUnit:true, alert:true*/
(
function
()
{
'
use strict
'
;
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/popover.js
+
18
-
5
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
popover plugin
'
)
...
...
@@ -8,11 +9,11 @@ $(function () {
})
module
(
'
popover
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapPopover
=
$
.
fn
.
popover
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
popover
=
$
.
fn
.
bootstrapPopover
delete
$
.
fn
.
bootstrapPopover
}
...
...
@@ -46,6 +47,16 @@ $(function () {
ok
(
!!
popover
.
data
(
'
bs.popover
'
),
'
popover instance exists
'
)
})
test
(
'
should store popover trigger in popover instance data object
'
,
function
()
{
$
.
support
.
transition
=
false
var
popover
=
$
(
'
<a href="#" title="ResentedHook">@ResentedHook</a>
'
)
.
appendTo
(
'
#qunit-fixture
'
)
.
bootstrapPopover
()
popover
.
bootstrapPopover
(
'
show
'
)
ok
(
!!
$
(
'
.popover
'
).
data
(
'
bs.popover
'
),
'
popover trigger stored in instance data
'
)
$
(
'
#qunit-fixture
'
).
empty
()
})
test
(
'
should get title and content from options
'
,
function
()
{
$
.
support
.
transition
=
false
var
popover
=
$
(
'
<a href="#">@fat</a>
'
)
...
...
@@ -73,7 +84,7 @@ $(function () {
test
(
'
should not duplicate HTML object
'
,
function
()
{
$
.
support
.
transition
=
false
$div
=
$
(
'
<div>
'
).
html
(
'
loves writing tests (╯°□°)╯︵ ┻━┻
'
)
var
$div
=
$
(
'
<div>
'
).
html
(
'
loves writing tests (╯°□°)╯︵ ┻━┻
'
)
var
popover
=
$
(
'
<a href="#">@fat</a>
'
)
.
appendTo
(
'
#qunit-fixture
'
)
...
...
@@ -156,7 +167,9 @@ $(function () {
})
test
(
'
should destroy popover
'
,
function
()
{
var
popover
=
$
(
'
<div/>
'
).
bootstrapPopover
({
trigger
:
'
hover
'
}).
on
(
'
click.foo
'
,
function
()
{})
var
popover
=
$
(
'
<div/>
'
).
bootstrapPopover
({
trigger
:
'
hover
'
}).
on
(
'
click.foo
'
,
function
()
{})
ok
(
popover
.
data
(
'
bs.popover
'
),
'
popover has data
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseover
&&
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseout
,
'
popover has hover event
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
click
[
0
].
namespace
==
'
foo
'
,
'
popover has extra click.foo event
'
)
...
...
@@ -164,7 +177,7 @@ $(function () {
popover
.
bootstrapPopover
(
'
destroy
'
)
ok
(
!
popover
.
hasClass
(
'
in
'
),
'
popover is hidden
'
)
ok
(
!
popover
.
data
(
'
popover
'
),
'
popover does not have data
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
click
[
0
].
namespace
==
'
foo
'
,
'
popover still has click.foo
'
)
ok
(
$
.
_data
(
popover
[
0
],
'
events
'
).
click
[
0
].
namespace
==
'
foo
'
,
'
popover still has click.foo
'
)
ok
(
!
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseover
&&
!
$
.
_data
(
popover
[
0
],
'
events
'
).
mouseout
,
'
popover does not have any events
'
)
})
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/scrollspy.js
+
48
-
12
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
scrollspy plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
scrollspy
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapScrollspy
=
$
.
fn
.
scrollspy
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
scrollspy
=
$
.
fn
.
bootstrapScrollspy
delete
$
.
fn
.
bootstrapScrollspy
}
...
...
@@ -26,8 +27,9 @@ $(function () {
})
test
(
'
should switch active class on scroll
'
,
function
()
{
var
sectionHTML
=
'
<div id="masthead"></div>
'
,
topbarHTML
=
'
<div class="topbar">
'
+
var
sectionHTML
=
'
<div id="masthead"></div>
'
$
(
sectionHTML
).
append
(
'
#qunit-fixture
'
)
var
topbarHTML
=
'
<div class="topbar">
'
+
'
<div class="topbar-inner">
'
+
'
<div class="container">
'
+
'
<h3><a href="#">Bootstrap</a></h3>
'
+
...
...
@@ -35,14 +37,15 @@ $(function () {
'
</ul>
'
+
'
</div>
'
+
'
</div>
'
+
'
</div>
'
,
$topbar
=
$
(
topbarHTML
).
bootstrapScrollspy
()
'
</div>
'
var
$topbar
=
$
(
topbarHTML
).
bootstrapScrollspy
()
$
(
sectionHTML
).
append
(
'
#qunit-fixture
'
)
ok
(
$topbar
.
find
(
'
.active
'
,
true
))
})
test
(
'
should only switch active class on current target
'
,
function
()
{
asyncTest
(
'
should only switch active class on current target
'
,
function
()
{
expect
(
1
);
var
sectionHTML
=
'
<div id="root" class="active">
'
+
'
<div class="topbar">
'
+
'
<div class="topbar-inner">
'
+
...
...
@@ -68,14 +71,47 @@ $(function () {
'
</p>
'
+
'
</div>
'
+
'
</div>
'
+
'
</div>
'
,
$section
=
$
(
sectionHTML
).
appendTo
(
'
#qunit-fixture
'
)
,
$scrollSpy
=
$section
'
</div>
'
var
$section
=
$
(
sectionHTML
).
appendTo
(
'
#qunit-fixture
'
)
var
$scrollSpy
=
$section
.
show
()
.
find
(
'
#scrollspy-example
'
)
.
bootstrapScrollspy
({
target
:
'
#ss-target
'
})
.
bootstrapScrollspy
({
target
:
'
#ss-target
'
})
$scrollSpy
.
on
(
'
scroll.bs.scrollspy
'
,
function
()
{
ok
(
$section
.
hasClass
(
'
active
'
),
'
Active class still on root node
'
)
start
()
})
$scrollSpy
.
scrollTop
(
350
);
ok
(
$section
.
hasClass
(
'
active
'
),
'
Active class still on root node
'
)
})
asyncTest
(
'
middle navigation option correctly selected when large offset is used
'
,
function
()
{
expect
(
3
);
var
sectionHTML
=
'
<div id="header" style="height: 500px;"></div>
'
+
'
<nav id="navigation" class="navbar">
'
+
'
<ul class="nav navbar-nav">
'
+
'
<li class="active"><a id="one-link" href="#one">One</a></li>
'
+
'
<li><a id="two-link" href="#two">Two</a></li>
'
+
'
<li><a id="three-link" href="#three">Three</a></li>
'
+
'
</ul>
'
+
'
</nav>
'
+
'
<div id="content" style="height: 200px; overflow-y: auto;">
'
+
'
<div id="one" style="height: 500px;"></div>
'
+
'
<div id="two" style="height: 300px;"></div>
'
+
'
<div id="three" style="height: 10px;"></div>
'
+
'
</div>
'
var
$section
=
$
(
sectionHTML
).
appendTo
(
'
#qunit-fixture
'
)
var
$scrollSpy
=
$section
.
show
()
.
filter
(
'
#content
'
)
$scrollSpy
.
bootstrapScrollspy
({
target
:
'
#navigation
'
,
offset
:
$scrollSpy
.
position
().
top
})
$scrollSpy
.
on
(
'
scroll.bs.scrollspy
'
,
function
()
{
ok
(
!
$section
.
find
(
'
#one-link
'
).
parent
().
hasClass
(
'
active
'
),
'
Active class removed from first section
'
)
ok
(
$section
.
find
(
'
#two-link
'
).
parent
().
hasClass
(
'
active
'
),
'
Active class on middle section
'
)
ok
(
!
$section
.
find
(
'
#three-link
'
).
parent
().
hasClass
(
'
active
'
),
'
Active class not on last section
'
)
start
()
})
$scrollSpy
.
scrollTop
(
550
);
})
})
This diff is collapsed.
Click to expand it.
js/tests/unit/tab.js
+
3
-
2
View file @
34891de1
$
(
function
()
{
'
use strict
'
;
module
(
'
tabs plugin
'
)
...
...
@@ -7,11 +8,11 @@ $(function () {
})
module
(
'
tabs
'
,
{
setup
:
function
()
{
setup
:
function
()
{
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$
.
fn
.
bootstrapTab
=
$
.
fn
.
tab
.
noConflict
()
},
teardown
:
function
()
{
teardown
:
function
()
{
$
.
fn
.
tab
=
$
.
fn
.
bootstrapTab
delete
$
.
fn
.
bootstrapTab
}
...
...
This diff is collapsed.
Click to expand it.
js/tests/unit/tooltip.js
+
147
-
69
View file @
34891de1
This diff is collapsed.
Click to expand it.
js/tooltip.js
+
21
-
7
View file @
34891de1
...
...
@@ -145,12 +145,17 @@
if
(
this
.
hasContent
()
&&
this
.
enabled
)
{
this
.
$element
.
trigger
(
e
)
if
(
e
.
isDefaultPrevented
())
return
var
that
=
this
;
var
inDom
=
$
.
contains
(
document
.
documentElement
,
this
.
$element
[
0
])
if
(
e
.
isDefaultPrevented
()
||
!
inDom
)
return
var
that
=
this
var
$tip
=
this
.
tip
()
var
tipId
=
this
.
getUID
(
this
.
type
)
this
.
setContent
()
$tip
.
attr
(
'
id
'
,
tipId
)
this
.
$element
.
attr
(
'
aria-describedby
'
,
tipId
)
if
(
this
.
options
.
animation
)
$tip
.
addClass
(
'
fade
'
)
...
...
@@ -166,6 +171,7 @@
.
detach
()
.
css
({
top
:
0
,
left
:
0
,
display
:
'
block
'
})
.
addClass
(
placement
)
.
data
(
'
bs.
'
+
this
.
type
,
this
)
this
.
options
.
container
?
$tip
.
appendTo
(
this
.
options
.
container
)
:
$tip
.
insertAfter
(
this
.
$element
)
...
...
@@ -194,7 +200,7 @@
this
.
applyPlacement
(
calculatedOffset
,
placement
)
this
.
hoverState
=
null
var
complete
=
function
()
{
var
complete
=
function
()
{
that
.
$element
.
trigger
(
'
shown.bs.
'
+
that
.
type
)
}
...
...
@@ -273,6 +279,8 @@
var
$tip
=
this
.
tip
()
var
e
=
$
.
Event
(
'
hide.bs.
'
+
this
.
type
)
this
.
$element
.
removeAttr
(
'
aria-describedby
'
)
function
complete
()
{
if
(
that
.
hoverState
!=
'
in
'
)
$tip
.
detach
()
that
.
$element
.
trigger
(
'
hidden.bs.
'
+
that
.
type
)
...
...
@@ -297,7 +305,7 @@
Tooltip
.
prototype
.
fixTitle
=
function
()
{
var
$e
=
this
.
$element
if
(
$e
.
attr
(
'
title
'
)
||
typeof
(
$e
.
attr
(
'
data-original-title
'
))
!=
'
string
'
)
{
if
(
$e
.
attr
(
'
title
'
)
||
typeof
(
$e
.
attr
(
'
data-original-title
'
))
!=
'
string
'
)
{
$e
.
attr
(
'
data-original-title
'
,
$e
.
attr
(
'
title
'
)
||
''
).
attr
(
'
title
'
,
''
)
}
}
...
...
@@ -314,7 +322,7 @@
scroll
:
isBody
?
document
.
documentElement
.
scrollTop
||
document
.
body
.
scrollTop
:
$element
.
scrollTop
(),
width
:
isBody
?
$
(
window
).
width
()
:
$element
.
outerWidth
(),
height
:
isBody
?
$
(
window
).
height
()
:
$element
.
outerHeight
()
},
isBody
?
{
top
:
0
,
left
:
0
}
:
$element
.
offset
())
},
isBody
?
{
top
:
0
,
left
:
0
}
:
$element
.
offset
())
}
Tooltip
.
prototype
.
getCalculatedOffset
=
function
(
placement
,
pos
,
actualWidth
,
actualHeight
)
{
...
...
@@ -364,12 +372,18 @@
return
title
}
Tooltip
.
prototype
.
getUID
=
function
(
prefix
)
{
do
prefix
+=
~~
(
Math
.
random
()
*
1000000
)
while
(
document
.
getElementById
(
prefix
))
return
prefix
}
Tooltip
.
prototype
.
tip
=
function
()
{
return
this
.
$tip
=
this
.
$tip
||
$
(
this
.
options
.
template
)
return
(
this
.
$tip
=
this
.
$tip
||
$
(
this
.
options
.
template
)
)
}
Tooltip
.
prototype
.
arrow
=
function
()
{
return
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'
.tooltip-arrow
'
)
return
(
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'
.tooltip-arrow
'
)
)
}
Tooltip
.
prototype
.
validate
=
function
()
{
...
...
This diff is collapsed.
Click to expand it.
js/transition.js
+
2
-
1
View file @
34891de1
...
...
@@ -34,7 +34,8 @@
// http://blog.alexmaccaw.com/css-transitions
$
.
fn
.
emulateTransitionEnd
=
function
(
duration
)
{
var
called
=
false
,
$el
=
this
var
called
=
false
var
$el
=
this
$
(
this
).
one
(
$
.
support
.
transition
.
end
,
function
()
{
called
=
true
})
var
callback
=
function
()
{
if
(
!
called
)
$
(
$el
).
trigger
(
$
.
support
.
transition
.
end
)
}
setTimeout
(
callback
,
duration
)
...
...
This diff is collapsed.
Click to expand it.
less/forms.less
+
20
-
4
View file @
34891de1
...
...
@@ -247,19 +247,35 @@ input[type="month"] {
}
// Apply same disabled cursor tweak as for inputs
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
//
// Note: Neither radios nor checkboxes can be readonly.
input[type="radio"],
input[type="checkbox"],
.radio,
input[type="checkbox"] {
&[disabled],
&.disabled,
fieldset[disabled] & {
cursor: not-allowed;
}
}
// These classes are used directly on <label>s
.radio-inline,
.checkbox,
.checkbox-inline {
&
[
disabled
]
,
&
.
disabled,
fieldset[disabled] & {
cursor: not-allowed;
}
}
// These classes are used on elements with <label> descendants
.radio,
.checkbox {
&.disabled,
fieldset[disabled] & {
label {
cursor: not-allowed;
}
}
}
// Form control sizing
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment