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

update more readme changes - introduce target specificty convention to more plugins

This commit is contained in:
Jacob Thornton
2011-12-20 23:28:48 -08:00
parent c4364285e4
commit f72a94ae28
12 changed files with 76 additions and 51 deletions

View File

@@ -1,5 +1,5 @@
## 2.0 BOOTSTRAP JS PHILOSOPHY
These are the high-level design rules which guide the development of Bootstrap's JS plugins.
These are the high-level design rules which guide the development of Bootstrap's plugin apis.
---
@@ -28,10 +28,12 @@ All public APIs should be single, chainable methods, and return the collection a
All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior:
$("#myModal").modal() // initialized with defaults
$("#myModal").modal({ keyboard: false }) // initialized with now keyboard
$("#myModal").modal('show') // initializes and invokes show immediately afterqwe2
---
### PLUGIN OPTIONS
### OPTIONS
Options should be sparse and add universal value. We should pick the right defaults.
@@ -51,7 +53,7 @@ examples:
---
### PLUGIN EVENTS
### EVENTS
All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action.
@@ -60,14 +62,30 @@ All events should have an infinitive and past participle form. The infinitive is
---
### CONSTRUCTORS
Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way:
$.fn.popover.Constructor
---
### DATA ACCESSOR
Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data api like this:
$('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor
---
### DATA ATTRIBUTES
Data attributes should take the following form:
- data-*(verb)* - defines main interaction
- data-target || href^=# - defined on controller element (if element interacts with an element other than self)
- data-*(noun)* - defines options for element invocation
- data-target || href^=# - defined on "control" element (if element controls an element other than self)
- data-*(noun)* - defines class instance options
examples:

18
js/bootstrap-alert.js vendored
View File

@@ -35,18 +35,22 @@
constructor: Alert
, close: function ( e ) {
var $element = $(this)
var $this = $(this)
, selector = $this.attr('data-target') || $this.attr('href')
, $parent = $(selector)
$element = $element.hasClass('alert-message') ? $element : $element.parent()
e && e.preventDefault()
$element.removeClass('in')
$parent.length || ($parent = $this.hasClass('alert-message') ? $this : $this.parent())
$parent.removeClass('in')
function removeElement() {
$element.remove()
$parent.remove()
}
$.support.transition && $element.hasClass('fade') ?
$element.on($.support.transition.end, removeElement) :
$.support.transition && $parent.hasClass('fade') ?
$parent.on($.support.transition.end, removeElement) :
removeElement()
}
@@ -65,7 +69,7 @@
})
}
$.fn.alert.Alert = Alert
$.fn.alert.Constructor = Alert
/* ALERT DATA-API

View File

@@ -83,7 +83,7 @@
loadingText: 'loading...'
}
$.fn.button.Button = Button
$.fn.button.Constructor = Button
/* BUTTON DATA-API

View File

@@ -46,6 +46,6 @@
})
}
$.fn.carousel.Carousel = Carousel
$.fn.carousel.Constructor = Carousel
}( window.jQuery )

View File

@@ -116,7 +116,7 @@
toggle: true
}
$.fn.collapse.Collapse = Collapse
$.fn.collapse.Constructor = Collapse
/* COLLAPSIBLE DATA-API

View File

@@ -35,11 +35,15 @@
constructor: Dropdown
, toggle: function ( e ) {
var li = $(this).parent('li')
, isActive = li.hasClass('open')
var $this = $(this)
, selector = $this.attr('data-target') || $this.attr('href')
, $parent = $(selector)
$parent.length || ($parent = $this.parent())
clearMenus()
!isActive && li.toggleClass('open')
!$parent.hasClass('open') && $parent.toggleClass('open')
return false
}
@@ -47,7 +51,7 @@
}
function clearMenus() {
$(toggle).parent('li').removeClass('open')
$(toggle).parent().removeClass('open')
}
@@ -63,6 +67,8 @@
})
}
$.fn.dropdown.Constructor = Dropdown
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */

12
js/bootstrap-modal.js vendored
View File

@@ -175,17 +175,16 @@
, options = typeof option == 'object' && option
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option]()
else if (data.options.show) data.show()
else data.show()
})
}
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
}
$.fn.modal.Modal = Modal
$.fn.modal.Constructor = Modal
/* MODAL DATA-API
@@ -194,10 +193,11 @@
$(function () {
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
var $this = $(this)
, target = $this.attr('data-target') || $this.attr('href')
, option = $(target).data('modal') ? 'toggle' : $this.data()
, $target = $($this.attr('data-target') || $this.attr('href'))
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
e.preventDefault()
$(target).modal(option)
$target.modal(option)
})
})

View File

@@ -29,7 +29,7 @@
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js
========================================= */
Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, {
Popover.prototype = $.extend({}, $.fn.twipsy.Constructor.prototype, {
constructor: Popover
@@ -84,7 +84,7 @@
})
}
$.fn.popover.Popover = Popover
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, {
placement: 'right'

View File

@@ -103,7 +103,7 @@
})
}
$.fn.scrollspy.ScrollSpy = ScrollSpy
$.fn.scrollspy.Constructor = ScrollSpy
/* SCROLLSPY DATA-API

2
js/bootstrap-tab.js vendored
View File

@@ -107,7 +107,7 @@
})
}
$.fn.tab.Tab = Tab
$.fn.tab.Constructor = Tab
/* TAB DATA-API

View File

@@ -247,7 +247,7 @@
})
}
$.fn.twipsy.Twipsy = Twipsy
$.fn.twipsy.Constructor = Twipsy
$.fn.twipsy.defaults = {
animate: true