Commit 69372701 authored by Jacob Thornton's avatar Jacob Thornton
Browse files

refactor dropdown in accordance with readme

parent 71654cbf
20 merge requests!14752.0 wip,!1403warningText and warningBackground docs fix,!985Fix id anchor javascript,!906Twipsy now respects custom classes,!873Clicking a dropdown will always toggle it,!858Bordered Arrow Mixin - updated for 2.0,!832Fix thumbnails in Built With Bootstrap,!13512.0 wip - relative font sizes,!1315[2.0-wip] Fix mustache glob when building,!1268[wip-2.0] IE 7/8 Typehead JS fix,!12362.0 wip - Fix for issue #1202,!1219Removed dotted outline on navbar dropdown menu,!1210Missing icon class from examples,!1195Fixed display of secondary container,!1090Fixed typo,!1084Default `.border-radius-custom` values,!1064Typo Fix in tables.less,!10572.0 wip,!1052Missing data attribute to close modal,!10212.0 wip
Showing with 65 additions and 89 deletions
+65 -89
/* =============================================================
* bootstrap-accordion.js v2.0.0
* http://twitter.github.com/bootstrap/javascript.html#accordion
* =============================================================
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
(function( $ ){
var Accordion = function ( element, options ) {}
Accordion.prototype = {}
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.accordion = function ( options ) {
if ( options === true ) {
return this.data('accordion')
}
return this.each(function () {
new Accordion(this, options)
})
}
})( window.jQuery || window.ender )
\ No newline at end of file
......@@ -26,7 +26,7 @@
* ====================== */
var dismiss = '[data-dismiss="alert"]'
, Alert = function ( el, close ) {
, Alert = function ( el ) {
$(el).delegate(dismiss, 'click', this.close)
}
......@@ -36,7 +36,6 @@
var $element = $(this)
$element = $element.hasClass('alert-message') ? $element : $element.parent()
e && e.preventDefault()
$element.removeClass('in')
......@@ -55,12 +54,12 @@
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.alert = function ( options ) {
$.fn.alert = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('alert')
if (!data) $this.data('alert', (data = new Alert(this)))
if (typeof options == 'string') data[options].call($this)
if (typeof option == 'string') data[option].call($this)
})
}
......
......@@ -24,45 +24,56 @@
/* BUTTON PUBLIC CLASS DEFINITION
* ============================== */
var Button
var Button = function (element, options) {
this.$element = $(element)
this.settings = $.extend({}, $.fn.button.defaults, options)
}
function setState(el, state) {
var d = 'disabled'
, $el = $(el)
, data = $el.data()
, val = $el.is('input') ? 'val' : 'html'
Button.prototype = {
state = state + 'Text'
data.resetText || $el.data('resetText', $el[val]())
setState: function (state) {
var d = 'disabled'
, $el = this.$element
, data = $el.data()
, val = $el.is('input') ? 'val' : 'html'
$el[val]( data[state] || $.fn.button.defaults[state] )
state = state + 'Text'
data.resetText || $el.data('resetText', $el[val]())
setTimeout(function () {
state == 'loadingText' ?
$el.addClass(d).attr(d, d) :
$el.removeClass(d).removeAttr(d)
}, 0)
}
$el[val](data[state] || this.settings[state])
// push to event loop to allow forms to submit
setTimeout(function () {
state == 'loadingText' ?
$el.addClass(d).attr(d, d) :
$el.removeClass(d).removeAttr(d)
}, 0)
}
, toggle: function () {
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
function toggle(el) {
var $el = $(el)
, $parent = $el.parent('[data-toggle="buttons-radio"]')
$parent && $parent
.find('.active')
.removeClass('active')
$parent && $parent
.find('.active')
.removeClass('active')
this.$element.toggleClass('active')
}
$el.toggleClass('active')
}
/* BUTTON PLUGIN DEFINITION
* ======================== */
$.fn.button = function(options) {
$.fn.button = function ( option ) {
return this.each(function () {
if (options == 'toggle') return toggle(this)
options && setState(this, options)
var $this = $(this)
, data = $this.data('button')
, options = typeof option == 'object' && option
if (!data) $this.data('button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
......
......@@ -22,35 +22,42 @@
"use strict"
/* SIMPLE DROPDOWN LOGIC
* ===================== */
/* DROPDOWN CLASS DEFINITION
* ========================= */
var s = '[data-toggle="dropdown"]'
var toggle = '[data-toggle="dropdown"]'
, Dropdown = function ( element ) {
$(element).bind('click', this.toggle)
}
function clearMenus() {
$(s).parent('li').removeClass('open')
}
Dropdown.prototype = {
toggle: function ( e ) {
var li = $(this).parent('li')
, isActive = li.hasClass('open')
function toggle(e) {
var li = $(this).parent('li')
, isActive = li.hasClass('open')
clearMenus()
!isActive && li.toggleClass('open')
clearMenus()
!isActive && li.toggleClass('open')
return false
}
return false
}
function clearMenus() {
$(toggle).parent('li').removeClass('open')
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function ( selector ) {
$.fn.dropdown = function ( option ) {
return this.each(function () {
var args = ['click', toggle]
, $this = $(this)
selector && args.unshift(selector)
$this[selector ? 'delegate' : 'bind'].apply($this, args)
var $this = $(this)
, data = $this.data('dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
......@@ -59,8 +66,8 @@
* =================================== */
$(function () {
$('html').bind("click.dropdown.data-api", clearMenus)
$('body').dropdown(s)
$('html').bind('click.dropdown.data-api', clearMenus)
$('body').delegate(toggle, 'click.dropdown.data-api', Dropdown.prototype.toggle)
})
}( window.jQuery || window.ender );
\ No newline at end of file
Supports Markdown
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