Commit b7c9a639 authored by Mark Otto's avatar Mark Otto

Merge branch '1.3-wip' of github.com:twitter/bootstrap into 1.3-wip

parents bd3448cf e255b4f5
$(document).ready(function(){ $(document).ready(function(){
// Dropdown example for topbar nav
// ===============================
$('body').dropdown() // catch any dropdowns on the page
// Scrollspy // Scrollspy
// ========= // =========
......
...@@ -1255,7 +1255,7 @@ ...@@ -1255,7 +1255,7 @@
</div> </div>
<h2>Fixed topbar</h2> <h2>Fixed topbar</h2>
<div class="topbar-wrapper" style="z-index: 5;"> <div class="topbar-wrapper" style="z-index: 5;">
<div class="topbar"> <div class="topbar" data-dropdown>
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<h3><a href="#">Project Name</a></h3> <h3><a href="#">Project Name</a></h3>
......
This diff is collapsed.
...@@ -20,22 +20,23 @@ ...@@ -20,22 +20,23 @@
(function( $ ){ (function( $ ){
var selector = 'a.menu, .dropdown-toggle' var d = 'a.menu, .dropdown-toggle'
function clearMenus() { function clearMenus() {
$(selector).parent('li').removeClass('open') $(d).parent('li').removeClass('open')
} }
$(function () { $(function () {
$('body').bind("click", clearMenus) $('html').bind("click", clearMenus)
$('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
}) })
/* DROPDOWN PLUGIN DEFINITION /* DROPDOWN PLUGIN DEFINITION
* ========================== */ * ========================== */
$.fn.dropdown = function ( options ) { $.fn.dropdown = function ( selector ) {
return this.each(function () { return this.each(function () {
$(this).delegate(selector, 'click', function (e) { $(this).delegate(selector || d, 'click', function (e) {
var li = $(this).parent('li') var li = $(this).parent('li')
, isActive = li.hasClass('open') , isActive = li.hasClass('open')
......
...@@ -54,72 +54,73 @@ ...@@ -54,72 +54,73 @@
var Modal = function ( content, options ) { var Modal = function ( content, options ) {
this.settings = $.extend({}, $.fn.modal.defaults) this.settings = $.extend({}, $.fn.modal.defaults)
this.$element = $(content)
.delegate('.close', 'click.modal', $.proxy(this.hide, this))
if ( options ) { if ( options ) {
$.extend( this.settings, options ) $.extend( this.settings, options )
}
this.$element = $(content) if ( options.show ) {
.bind('modal:show', $.proxy(this.show, this)) this.show()
.bind('modal:hide', $.proxy(this.hide, this)) }
.bind('modal:toggle', $.proxy(this.toggle, this)) }
.delegate('.close', 'click', $.proxy(this.hide, this))
return this return this
} }
Modal.prototype = { Modal.prototype = {
toggle: function () { toggle: function () {
return this[!this.isShown ? 'show' : 'hide']() return this[!this.isShown ? 'show' : 'hide']()
} }
, show: function () {
var that = this
this.isShown = true
_.escape.call(this)
_.backdrop.call(this, function () { , show: function () {
that.$element var that = this
.appendTo(document.body) this.isShown = true
.show() this.$element.trigger('show')
setTimeout(function () { escape.call(this)
backdrop.call(this, function () {
that.$element that.$element
.addClass('in') .appendTo(document.body)
.trigger('modal:shown') .show()
}, 1)
}) setTimeout(function () {
that.$element
return this .addClass('in')
} .trigger('shown')
}, 1)
})
, hide: function (e) { return this
e && e.preventDefault() }
var that = this , hide: function (e) {
e && e.preventDefault()
this.isShown = false var that = this
this.isShown = false
_.escape.call(this) escape.call(this)
this.$element.removeClass('in') this.$element
.trigger('hide')
.removeClass('in')
function removeElement () { function removeElement () {
that.$element that.$element
.detach() .hide()
.trigger('modal:hidden') .trigger('hidden')
_.backdrop.call(that) backdrop.call(that)
} }
$.support.transition && this.$element.hasClass('fade') ? $.support.transition && this.$element.hasClass('fade') ?
this.$element.one(transitionEnd, removeElement) : this.$element.one(transitionEnd, removeElement) :
removeElement() removeElement()
return this return this
} }
} }
...@@ -127,51 +128,47 @@ ...@@ -127,51 +128,47 @@
/* MODAL PRIVATE METHODS /* MODAL PRIVATE METHODS
* ===================== */ * ===================== */
var _ = { function backdrop ( callback ) {
var that = this
backdrop: function ( callback ) { , animate = this.$element.hasClass('fade') ? 'fade' : ''
var that = this if ( this.isShown && this.settings.backdrop ) {
, animate = this.$element.hasClass('fade') ? 'fade' : '' this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
if ( this.isShown && this.settings.backdrop ) { .click($.proxy(this.hide, this))
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') .appendTo(document.body)
.click($.proxy(this.hide, this))
.appendTo(document.body) setTimeout(function () {
that.$backdrop && that.$backdrop.addClass('in')
setTimeout(function () { $.support.transition && that.$backdrop.hasClass('fade') ?
that.$backdrop && that.$backdrop.addClass('in') that.$backdrop.one(transitionEnd, callback) :
$.support.transition && that.$backdrop.hasClass('fade') ? callback()
that.$backdrop.one(transitionEnd, callback) : })
callback() } else if ( !this.isShown && this.$backdrop ) {
}) this.$backdrop.removeClass('in')
} else if ( !this.isShown && this.$backdrop ) {
this.$backdrop.removeClass('in')
function removeElement() {
that.$backdrop.remove()
that.$backdrop = null
}
$.support.transition && this.$element.hasClass('fade')? function removeElement() {
this.$backdrop.one(transitionEnd, removeElement) : that.$backdrop.remove()
removeElement() that.$backdrop = null
} else {
callback()
} }
}
, escape: function () { $.support.transition && this.$element.hasClass('fade')?
var that = this this.$backdrop.one(transitionEnd, removeElement) :
if ( this.isShown && this.settings.closeOnEscape ) { removeElement()
$('body').bind('keyup.modal.escape', function ( e ) { } else if ( callback ) {
if ( e.which == 27 ) { callback()
that.hide()
}
})
} else if ( !this.isShown ) {
$('body').unbind('keyup.modal.escape')
}
} }
}
function escape() {
var that = this
if ( this.isShown && this.settings.keyboard ) {
$('body').bind('keyup.modal', function ( e ) {
if ( e.which == 27 ) {
that.hide()
}
})
} else if ( !this.isShown ) {
$('body').unbind('keyup.modal')
}
} }
...@@ -179,17 +176,52 @@ ...@@ -179,17 +176,52 @@
* ======================= */ * ======================= */
$.fn.modal = function ( options ) { $.fn.modal = function ( options ) {
options = options || {} var modal = this.data('modal')
return this.each(function () {
return new Modal(this, options) if (!modal) {
})
if (typeof options == 'string') {
options = {
show: /show|toggle/.test(options)
}
}
return this.each(function () {
$(this).data('modal', new Modal(this, options))
})
}
if ( options === true ) {
return modal
}
if ( typeof options == 'string' ) {
modal[options]()
} else if ( modal ) {
modal.toggle()
}
return this
} }
$.fn.modal.Modal = Modal $.fn.modal.Modal = Modal
$.fn.modal.defaults = { $.fn.modal.defaults = {
backdrop: false backdrop: false
, hideOnEscape: false , keyboard: false
, show: true
} }
/* MODAL DATA- IMPLEMENTATION
* ========================== */
$(function () {
$('body').delegate('[data-controls-modal]', 'click', function (e) {
e.preventDefault()
var $this = $(this).data('show', true)
$('#' + $this.attr('data-controls-modal')).modal( $this.data() )
})
})
})( jQuery || ender ) })( jQuery || ender )
\ No newline at end of file
...@@ -22,21 +22,20 @@ ...@@ -22,21 +22,20 @@
var $window = $(window) var $window = $(window)
function ScrollSpy( topbar ) { function ScrollSpy( topbar, selector ) {
var processScroll = $.proxy(this.processScroll, this) var processScroll = $.proxy(this.processScroll, this)
this.$topbar = $(topbar) this.$topbar = $(topbar)
this.setup() this.selector = selector || 'li > a'
this.$topbar this.refresh()
.delegate('li > a', 'click', processScroll) this.$topbar.delegate(this.selector, 'click', processScroll)
.bind('topbar:refresh', $.proxy(this.setup, this))
$window.scroll(processScroll) $window.scroll(processScroll)
this.processScroll() this.processScroll()
} }
ScrollSpy.prototype = { ScrollSpy.prototype = {
setup: function () { refresh: function () {
this.targets = this.$topbar.find('li > a').map(function () { this.targets = this.$topbar.find(this.selector).map(function () {
var href = $(this).attr('href') var href = $(this).attr('href')
return /^#\w/.test(href) && $(href).length ? href : null return /^#\w/.test(href) && $(href).length ? href : null
}) })
...@@ -65,11 +64,11 @@ ...@@ -65,11 +64,11 @@
this.activeTarget = target this.activeTarget = target
this.$topbar this.$topbar
.find('.active') .find(this.selector).parent('.active')
.removeClass('active') .removeClass('active')
this.$topbar this.$topbar
.find('a[href=' + target + ']') .find(this.selector + '[href="' + target + '"]')
.parent('li') .parent('li')
.addClass('active') .addClass('active')
} }
...@@ -79,10 +78,28 @@ ...@@ -79,10 +78,28 @@
/* SCROLLSPY PLUGIN DEFINITION /* SCROLLSPY PLUGIN DEFINITION
* =========================== */ * =========================== */
$.fn.scrollSpy = function() { $.fn.scrollSpy = function( options ) {
return this.each(function () { var scrollspy = this.data('scrollspy')
new ScrollSpy(this)
}) if (!scrollspy) {
return this.each(function () {
$(this).data('scrollspy', new ScrollSpy( this, options ))
})
}
if ( options === true ) {
return scrollspy
}
if ( typeof options == 'string' ) {
scrollspy[options]()
}
return this
} }
$(function () {
$('body').scrollSpy('[data-scrollspy] li > a')
})
}( jQuery || ender ) }( jQuery || ender )
\ No newline at end of file
...@@ -49,10 +49,14 @@ ...@@ -49,10 +49,14 @@
/* TABS/PILLS PLUGIN DEFINITION /* TABS/PILLS PLUGIN DEFINITION
* ============================ */ * ============================ */
$.fn.tabs = $.fn.pills = function () { $.fn.tabs = $.fn.pills = function ( selector ) {
return this.each(function () { return this.each(function () {
$(this).delegate('.tabs > li > a, .pills > li > a, .dropdown-menu > li > a', 'click', tab) $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab)
}) })
} }
$(function () {
$('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a')
})
})( jQuery || ender ) })( jQuery || ender )
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment