aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorJacob Thornton <[email protected]>2011-09-11 20:08:43 -0700
committerJacob Thornton <[email protected]>2011-09-11 20:08:43 -0700
commit173be3f1e87a83f8e85bef8ddb979a921ccee9d1 (patch)
treed224c15b41174227a0e0c1fd5beffd7c1131d5fb /js
parentd9cbcfc20ded5f1cd1af4e304415b3405631f0bc (diff)
downloadbootstrap-173be3f1e87a83f8e85bef8ddb979a921ccee9d1.tar.xz
bootstrap-173be3f1e87a83f8e85bef8ddb979a921ccee9d1.zip
change hella js... broke all the tests. i <3 wip
Diffstat (limited to 'js')
-rw-r--r--js/bootstrap-dropdown.js11
-rw-r--r--js/bootstrap-modal.js210
-rw-r--r--js/bootstrap-scrollspy.js43
-rw-r--r--js/bootstrap-tabs.js8
4 files changed, 163 insertions, 109 deletions
diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js
index 8be8f13c0..a50571349 100644
--- a/js/bootstrap-dropdown.js
+++ b/js/bootstrap-dropdown.js
@@ -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')
diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js
index 8b21c192d..97eeded51 100644
--- a/js/bootstrap-modal.js
+++ b/js/bootstrap-modal.js
@@ -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)
+ toggle: function () {
+ return this[!this.isShown ? 'show' : 'hide']()
+ }
- _.backdrop.call(this, function () {
- that.$element
- .appendTo(document.body)
- .show()
+ , show: function () {
+ var that = this
+ this.isShown = true
+ this.$element.trigger('show')
- setTimeout(function () {
+ escape.call(this)
+ backdrop.call(this, function () {
that.$element
- .addClass('in')
- .trigger('modal:shown')
- }, 1)
- })
-
- return this
- }
+ .appendTo(document.body)
+ .show()
+
+ setTimeout(function () {
+ that.$element
+ .addClass('in')
+ .trigger('shown')
+ }, 1)
+ })
- , hide: function (e) {
- e && e.preventDefault()
+ return this
+ }
- 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 () {
- that.$element
- .detach()
- .trigger('modal:hidden')
+ function removeElement () {
+ that.$element
+ .hide()
+ .trigger('hidden')
- _.backdrop.call(that)
- }
+ backdrop.call(that)
+ }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element.one(transitionEnd, removeElement) :
- removeElement()
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element.one(transitionEnd, removeElement) :
+ removeElement()
- return this
- }
+ return this
+ }
}
@@ -127,51 +128,47 @@
/* MODAL PRIVATE METHODS
* ===================== */
- var _ = {
-
- 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')
-
- function removeElement() {
- that.$backdrop.remove()
- that.$backdrop = null
- }
+ 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)
+
+ 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')
- $.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one(transitionEnd, removeElement) :
- removeElement()
- } else {
- callback()
+ function removeElement() {
+ that.$backdrop.remove()
+ that.$backdrop = null
}
- }
- , 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')
- }
+ $.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()
+ }
+ })
+ } else if ( !this.isShown ) {
+ $('body').unbind('keyup.modal')
+ }
}
@@ -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 ) \ No newline at end of file
diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js
index 2cf487c50..84e64c6ea 100644
--- a/js/bootstrap-scrollspy.js
+++ b/js/bootstrap-scrollspy.js
@@ -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 ) \ No newline at end of file
diff --git a/js/bootstrap-tabs.js b/js/bootstrap-tabs.js
index aaa73644d..c93bd745f 100644
--- a/js/bootstrap-tabs.js
+++ b/js/bootstrap-tabs.js
@@ -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 ) \ No newline at end of file