1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-12 08:34:08 +02:00

change hella js... broke all the tests. i <3 wip

This commit is contained in:
Jacob Thornton
2011-09-11 20:08:43 -07:00
parent d9cbcfc20d
commit 173be3f1e8
7 changed files with 376 additions and 217 deletions

View File

@@ -20,22 +20,23 @@
(function( $ ){
var selector = 'a.menu, .dropdown-toggle'
var d = 'a.menu, .dropdown-toggle'
function clearMenus() {
$(selector).parent('li').removeClass('open')
$(d).parent('li').removeClass('open')
}
$(function () {
$('body').bind("click", clearMenus)
$('html').bind("click", clearMenus)
$('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
})
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function ( options ) {
$.fn.dropdown = function ( selector ) {
return this.each(function () {
$(this).delegate(selector, 'click', function (e) {
$(this).delegate(selector || d, 'click', function (e) {
var li = $(this).parent('li')
, isActive = li.hasClass('open')

228
js/bootstrap-modal.js vendored
View File

@@ -54,72 +54,73 @@
var Modal = function ( content, options ) {
this.settings = $.extend({}, $.fn.modal.defaults)
this.$element = $(content)
.delegate('.close', 'click.modal', $.proxy(this.hide, this))
if ( options ) {
$.extend( this.settings, options )
}
this.$element = $(content)
.bind('modal:show', $.proxy(this.show, this))
.bind('modal:hide', $.proxy(this.hide, this))
.bind('modal:toggle', $.proxy(this.toggle, this))
.delegate('.close', 'click', $.proxy(this.hide, this))
if ( options.show ) {
this.show()
}
}
return this
}
Modal.prototype = {
toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
, show: function () {
var that = this
this.isShown = true
_.escape.call(this)
_.backdrop.call(this, function () {
that.$element
.appendTo(document.body)
.show()
setTimeout(function () {
that.$element
.addClass('in')
.trigger('modal:shown')
}, 1)
})
return this
}
, hide: function (e) {
e && e.preventDefault()
var that = this
this.isShown = false
_.escape.call(this)
this.$element.removeClass('in')
function removeElement () {
that.$element
.detach()
.trigger('modal:hidden')
_.backdrop.call(that)
toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
$.support.transition && this.$element.hasClass('fade') ?
this.$element.one(transitionEnd, removeElement) :
removeElement()
, show: function () {
var that = this
this.isShown = true
this.$element.trigger('show')
return this
}
escape.call(this)
backdrop.call(this, function () {
that.$element
.appendTo(document.body)
.show()
setTimeout(function () {
that.$element
.addClass('in')
.trigger('shown')
}, 1)
})
return this
}
, hide: function (e) {
e && e.preventDefault()
var that = this
this.isShown = false
escape.call(this)
this.$element
.trigger('hide')
.removeClass('in')
function removeElement () {
that.$element
.hide()
.trigger('hidden')
backdrop.call(that)
}
$.support.transition && this.$element.hasClass('fade') ?
this.$element.one(transitionEnd, removeElement) :
removeElement()
return this
}
}
@@ -127,51 +128,47 @@
/* MODAL PRIVATE METHODS
* ===================== */
var _ = {
function backdrop ( callback ) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if ( this.isShown && this.settings.backdrop ) {
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.click($.proxy(this.hide, this))
.appendTo(document.body)
backdrop: function ( callback ) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if ( this.isShown && this.settings.backdrop ) {
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.click($.proxy(this.hide, this))
.appendTo(document.body)
setTimeout(function () {
that.$backdrop && that.$backdrop.addClass('in')
$.support.transition && that.$backdrop.hasClass('fade') ?
that.$backdrop.one(transitionEnd, callback) :
callback()
})
} else if ( !this.isShown && this.$backdrop ) {
this.$backdrop.removeClass('in')
setTimeout(function () {
that.$backdrop && that.$backdrop.addClass('in')
$.support.transition && that.$backdrop.hasClass('fade') ?
that.$backdrop.one(transitionEnd, callback) :
callback()
})
} else if ( !this.isShown && this.$backdrop ) {
this.$backdrop.removeClass('in')
function removeElement() {
that.$backdrop.remove()
that.$backdrop = null
}
function removeElement() {
that.$backdrop.remove()
that.$backdrop = null
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one(transitionEnd, removeElement) :
removeElement()
} else if ( callback ) {
callback()
}
}
function escape() {
var that = this
if ( this.isShown && this.settings.keyboard ) {
$('body').bind('keyup.modal', function ( e ) {
if ( e.which == 27 ) {
that.hide()
}
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one(transitionEnd, removeElement) :
removeElement()
} else {
callback()
}
})
} else if ( !this.isShown ) {
$('body').unbind('keyup.modal')
}
, escape: function () {
var that = this
if ( this.isShown && this.settings.closeOnEscape ) {
$('body').bind('keyup.modal.escape', function ( e ) {
if ( e.which == 27 ) {
that.hide()
}
})
} else if ( !this.isShown ) {
$('body').unbind('keyup.modal.escape')
}
}
}
@@ -179,17 +176,52 @@
* ======================= */
$.fn.modal = function ( options ) {
options = options || {}
return this.each(function () {
return new Modal(this, options)
})
var modal = this.data('modal')
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.defaults = {
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 )

View File

@@ -22,21 +22,20 @@
var $window = $(window)
function ScrollSpy( topbar ) {
function ScrollSpy( topbar, selector ) {
var processScroll = $.proxy(this.processScroll, this)
this.$topbar = $(topbar)
this.setup()
this.$topbar
.delegate('li > a', 'click', processScroll)
.bind('topbar:refresh', $.proxy(this.setup, this))
this.selector = selector || 'li > a'
this.refresh()
this.$topbar.delegate(this.selector, 'click', processScroll)
$window.scroll(processScroll)
this.processScroll()
}
ScrollSpy.prototype = {
setup: function () {
this.targets = this.$topbar.find('li > a').map(function () {
refresh: function () {
this.targets = this.$topbar.find(this.selector).map(function () {
var href = $(this).attr('href')
return /^#\w/.test(href) && $(href).length ? href : null
})
@@ -65,11 +64,11 @@
this.activeTarget = target
this.$topbar
.find('.active')
.find(this.selector).parent('.active')
.removeClass('active')
this.$topbar
.find('a[href=' + target + ']')
.find(this.selector + '[href="' + target + '"]')
.parent('li')
.addClass('active')
}
@@ -79,10 +78,28 @@
/* SCROLLSPY PLUGIN DEFINITION
* =========================== */
$.fn.scrollSpy = function() {
return this.each(function () {
new ScrollSpy(this)
})
$.fn.scrollSpy = function( options ) {
var scrollspy = this.data('scrollspy')
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 )

View File

@@ -49,10 +49,14 @@
/* TABS/PILLS PLUGIN DEFINITION
* ============================ */
$.fn.tabs = $.fn.pills = function () {
$.fn.tabs = $.fn.pills = function ( selector ) {
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 )