From 575f18aaf49abb0289185f6409bee031947ccf69 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 14 Apr 2012 16:29:53 -0700 Subject: [PATCH 1/4] add jshint support + a few minor stylistic changes --- Makefile | 2 + README.md | 7 +++ docs/assets/bootstrap.zip | Bin 57441 -> 57461 bytes docs/assets/js/bootstrap-alert.js | 69 ++++++++++++------------- docs/assets/js/bootstrap-button.js | 59 ++++++++++----------- docs/assets/js/bootstrap-carousel.js | 9 ++-- docs/assets/js/bootstrap-collapse.js | 34 ++++++------ docs/assets/js/bootstrap-dropdown.js | 16 +++--- docs/assets/js/bootstrap-modal.js | 21 ++++---- docs/assets/js/bootstrap-popover.js | 15 ++++-- docs/assets/js/bootstrap-scrollspy.js | 7 +-- docs/assets/js/bootstrap-tab.js | 7 +-- docs/assets/js/bootstrap-tooltip.js | 25 ++++----- docs/assets/js/bootstrap-transition.js | 7 +-- docs/assets/js/bootstrap-typeahead.js | 16 +++--- js/.jshintrc | 9 ++++ js/bootstrap-alert.js | 69 ++++++++++++------------- js/bootstrap-button.js | 59 ++++++++++----------- js/bootstrap-carousel.js | 9 ++-- js/bootstrap-collapse.js | 34 ++++++------ js/bootstrap-dropdown.js | 16 +++--- js/bootstrap-modal.js | 21 ++++---- js/bootstrap-popover.js | 15 ++++-- js/bootstrap-scrollspy.js | 7 +-- js/bootstrap-tab.js | 7 +-- js/bootstrap-tooltip.js | 25 ++++----- js/bootstrap-transition.js | 7 +-- js/bootstrap-typeahead.js | 16 +++--- js/tests/unit/bootstrap-transition.js | 2 +- 29 files changed, 317 insertions(+), 273 deletions(-) create mode 100644 js/.jshintrc diff --git a/Makefile b/Makefile index 59cd451b72..8f57099b99 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,8 @@ bootstrap: lessc --yui-compress ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.min.css lessc ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.css lessc --yui-compress ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.min.css + jshint js/*.js --config js/.jshintrc + jshint js/tests/unit/*.js --config js/.jshintrc cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js > bootstrap/js/bootstrap.js uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.js echo "/**\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js diff --git a/README.md b/README.md index 0a2a171d72..8907f059a3 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,13 @@ Developers We have included a makefile with convenience methods for working with the Bootstrap library. ++ **dependencies** +Our makefile depends on you having less, uglify.js, and jshint installed. To install, just run the following command in npm: + +``` +$ npm install less uglify-js jshint -g +``` + + **build** - `make` Runs the LESS compiler to rebuild the `/less` files and compiles the docs pages. Requires lessc and uglify-js. Read more in our docs » diff --git a/docs/assets/bootstrap.zip b/docs/assets/bootstrap.zip index 671d7c68c58fe5ff59749f5e7a98d3f56d84264d..0d3af08d2c34593db77e839170da3daf1ea59e75 100644 GIT binary patch delta 15501 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 .accordion-group > .in') - hasData if (actives && actives.length) { hasData = actives.data('collapse') @@ -75,7 +78,7 @@ this.$element[dimension](0) } - , reset: function ( size ) { + , reset: function (size) { var dimension = this.dimension() this.$element @@ -83,12 +86,12 @@ [dimension](size || 'auto') [0].offsetWidth - this.$element[size != null ? 'addClass' : 'removeClass']('collapse') + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') return this } - , transition: function ( method, startEvent, completeEvent ) { + , transition: function (method, startEvent, completeEvent) { var that = this , complete = function () { if (startEvent == 'show') that.reset() @@ -107,18 +110,19 @@ $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : complete() - } + } , toggle: function () { this[this.$element.hasClass('in') ? 'hide' : 'show']() - } + } } - /* COLLAPSIBLE PLUGIN DEFINITION + + /* COLLAPSIBLE PLUGIN DEFINITION * ============================== */ - $.fn.collapse = function ( option ) { + $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('collapse') @@ -149,4 +153,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-dropdown.js b/docs/assets/js/bootstrap-dropdown.js index 661b22713c..f27f4d2f43 100644 --- a/docs/assets/js/bootstrap-dropdown.js +++ b/docs/assets/js/bootstrap-dropdown.js @@ -18,15 +18,16 @@ * ============================================================ */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* DROPDOWN CLASS DEFINITION * ========================= */ var toggle = '[data-toggle="dropdown"]' - , Dropdown = function ( element ) { + , Dropdown = function (element) { var $el = $(element).on('click.dropdown.data-api', this.toggle) $('html').on('click.dropdown.data-api', function () { $el.parent().removeClass('open') @@ -37,7 +38,7 @@ constructor: Dropdown - , toggle: function ( e ) { + , toggle: function (e) { var $this = $(this) , selector = $this.attr('data-target') , $parent @@ -54,7 +55,8 @@ isActive = $parent.hasClass('open') clearMenus() - !isActive && $parent.toggleClass('open') + + if (!isActive) $parent.toggleClass('open') return false } @@ -69,7 +71,7 @@ /* DROPDOWN PLUGIN DEFINITION * ========================== */ - $.fn.dropdown = function ( option ) { + $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('dropdown') @@ -91,4 +93,4 @@ .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-modal.js b/docs/assets/js/bootstrap-modal.js index f16b565003..959433f2ae 100644 --- a/docs/assets/js/bootstrap-modal.js +++ b/docs/assets/js/bootstrap-modal.js @@ -18,14 +18,15 @@ * ========================================================= */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* MODAL CLASS DEFINITION * ====================== */ - var Modal = function ( content, options ) { + var Modal = function (content, options) { this.options = options this.$element = $(content) .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) @@ -55,7 +56,9 @@ backdrop.call(this, function () { var transition = $.support.transition && that.$element.hasClass('fade') - !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } that.$element .show() @@ -73,7 +76,7 @@ }) } - , hide: function ( e ) { + , hide: function (e) { e && e.preventDefault() var that = this @@ -116,7 +119,7 @@ }) } - function hideModal( that ) { + function hideModal(that) { this.$element .hide() .trigger('hidden') @@ -124,7 +127,7 @@ backdrop.call(this) } - function backdrop( callback ) { + function backdrop(callback) { var that = this , animate = this.$element.hasClass('fade') ? 'fade' : '' @@ -178,7 +181,7 @@ /* MODAL PLUGIN DEFINITION * ======================= */ - $.fn.modal = function ( option ) { + $.fn.modal = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('modal') @@ -212,4 +215,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-popover.js b/docs/assets/js/bootstrap-popover.js index df6ef3dfff..51820979a4 100644 --- a/docs/assets/js/bootstrap-popover.js +++ b/docs/assets/js/bootstrap-popover.js @@ -18,14 +18,19 @@ * =========================================================== */ -!function ( $ ) { +!function ($) { - "use strict" + "use strict"; // jshint ;_; + + + /* POPOVER PUBLIC CLASS DEFINITION + * =============================== */ var Popover = function ( element, options ) { this.init('popover', element, options) } + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js ========================================== */ @@ -59,7 +64,7 @@ return content } - , tip: function() { + , tip: function () { if (!this.$tip) { this.$tip = $(this.options.template) } @@ -72,7 +77,7 @@ /* POPOVER PLUGIN DEFINITION * ======================= */ - $.fn.popover = function ( option ) { + $.fn.popover = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('popover') @@ -90,4 +95,4 @@ , template: '

' }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js index 518ccafb24..3dee609c73 100644 --- a/docs/assets/js/bootstrap-scrollspy.js +++ b/docs/assets/js/bootstrap-scrollspy.js @@ -18,9 +18,10 @@ * ============================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* SCROLLSPY CLASS DEFINITION * ========================== */ @@ -142,4 +143,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-tab.js b/docs/assets/js/bootstrap-tab.js index d46ef790a7..6255d53ef5 100644 --- a/docs/assets/js/bootstrap-tab.js +++ b/docs/assets/js/bootstrap-tab.js @@ -18,9 +18,10 @@ * ======================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* TAB CLASS DEFINITION * ==================== */ @@ -131,4 +132,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-tooltip.js b/docs/assets/js/bootstrap-tooltip.js index 2f9254ed2a..454e7a4484 100644 --- a/docs/assets/js/bootstrap-tooltip.js +++ b/docs/assets/js/bootstrap-tooltip.js @@ -19,14 +19,15 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* TOOLTIP PUBLIC CLASS DEFINITION * =============================== */ - var Tooltip = function ( element, options ) { + var Tooltip = function (element, options) { this.init('tooltip', element, options) } @@ -34,7 +35,7 @@ constructor: Tooltip - , init: function ( type, element, options ) { + , init: function (type, element, options) { var eventIn , eventOut @@ -55,7 +56,7 @@ this.fixTitle() } - , getOptions: function ( options ) { + , getOptions: function (options) { options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) if (options.delay && typeof options.delay == 'number') { @@ -68,7 +69,7 @@ return options } - , enter: function ( e ) { + , enter: function (e) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.show) { @@ -84,7 +85,7 @@ } } - , leave: function ( e ) { + , leave: function (e) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.hide) { @@ -155,7 +156,7 @@ } } - , isHTML: function( text ) { + , isHTML: function(text) { // html string detection logic adapted from jQuery return typeof text != 'string' || ( text.charAt(0) === "<" @@ -271,12 +272,12 @@ $.fn.tooltip.defaults = { animation: true - , delay: 0 - , selector: false , placement: 'top' + , selector: false + , template: '
' , trigger: 'hover' , title: '' - , template: '
' + , delay: 0 } -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-transition.js b/docs/assets/js/bootstrap-transition.js index 8ff3c90023..d34caa1b98 100644 --- a/docs/assets/js/bootstrap-transition.js +++ b/docs/assets/js/bootstrap-transition.js @@ -18,11 +18,12 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { $(function () { - "use strict" + "use strict"; // jshint ;_; + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) * ======================================================= */ @@ -57,4 +58,4 @@ }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-typeahead.js b/docs/assets/js/bootstrap-typeahead.js index 3876e63071..526cf320c3 100644 --- a/docs/assets/js/bootstrap-typeahead.js +++ b/docs/assets/js/bootstrap-typeahead.js @@ -18,11 +18,15 @@ * ============================================================ */ -!function( $ ){ +!function($){ - "use strict" + "use strict"; // jshint ;_; - var Typeahead = function ( element, options ) { + + /* TYPEAHEAD PUBLIC CLASS DEFINITION + * ================================= */ + + var Typeahead = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.typeahead.defaults, options) this.matcher = this.options.matcher || this.matcher @@ -111,7 +115,7 @@ } , highlighter: function (item) { - var query = this.query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { return '' + match + '' }) @@ -241,7 +245,7 @@ /* TYPEAHEAD PLUGIN DEFINITION * =========================== */ - $.fn.typeahead = function ( option ) { + $.fn.typeahead = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('typeahead') @@ -273,4 +277,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/.jshintrc b/js/.jshintrc new file mode 100644 index 0000000000..bb41ef9cc8 --- /dev/null +++ b/js/.jshintrc @@ -0,0 +1,9 @@ +{ + "browser" : true, + "expr" : true, + "laxbreak" : true, + "boss" : true, + "asi" : true, + "laxcomma" : true, + "validthis": true +} \ No newline at end of file diff --git a/js/bootstrap-alert.js b/js/bootstrap-alert.js index c7171855d1..167a57f841 100644 --- a/js/bootstrap-alert.js +++ b/js/bootstrap-alert.js @@ -18,9 +18,10 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* ALERT CLASS DEFINITION * ====================== */ @@ -30,43 +31,37 @@ $(el).on('click', dismiss, this.close) } - Alert.prototype = { + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent - constructor: Alert - - , close: function ( e ) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() } @@ -92,4 +87,4 @@ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-button.js b/js/bootstrap-button.js index 77af03760b..49e88e49ad 100644 --- a/js/bootstrap-button.js +++ b/js/bootstrap-button.js @@ -18,58 +18,53 @@ * ============================================================ */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* BUTTON PUBLIC CLASS DEFINITION * ============================== */ - var Button = function ( element, options ) { + var Button = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.button.defaults, options) } - Button.prototype = { + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' - constructor: Button + 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] || this.options[state]) - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) + // 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) + } - $el[val](data[state] || this.options[state]) + Button.prototype.toggle = function () { + var $parent = this.$element.parent('[data-toggle="buttons-radio"]') - // 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"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } + $parent && $parent + .find('.active') + .removeClass('active') + this.$element.toggleClass('active') } /* BUTTON PLUGIN DEFINITION * ======================== */ - $.fn.button = function ( option ) { + $.fn.button = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('button') @@ -98,4 +93,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-carousel.js b/js/bootstrap-carousel.js index 0c8c5a202a..d1c3079e44 100644 --- a/js/bootstrap-carousel.js +++ b/js/bootstrap-carousel.js @@ -18,9 +18,10 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* CAROUSEL CLASS DEFINITION * ========================= */ @@ -129,7 +130,7 @@ /* CAROUSEL PLUGIN DEFINITION * ========================== */ - $.fn.carousel = function ( option ) { + $.fn.carousel = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('carousel') @@ -162,4 +163,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-collapse.js b/js/bootstrap-collapse.js index 9f462e6bcc..30e139cf89 100644 --- a/js/bootstrap-collapse.js +++ b/js/bootstrap-collapse.js @@ -18,16 +18,20 @@ * ============================================================ */ -!function ( $ ) { +!function ($) { - "use strict" + "use strict"; // jshint ;_; - var Collapse = function ( element, options ) { - this.$element = $(element) + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) this.options = $.extend({}, $.fn.collapse.defaults, options) - if (this.options["parent"]) { - this.$parent = $(this.options["parent"]) + if (this.options.parent) { + this.$parent = $(this.options.parent) } this.options.toggle && this.toggle() @@ -53,7 +57,6 @@ dimension = this.dimension() scroll = $.camelCase(['scroll', dimension].join('-')) actives = this.$parent && this.$parent.find('> .accordion-group > .in') - hasData if (actives && actives.length) { hasData = actives.data('collapse') @@ -75,7 +78,7 @@ this.$element[dimension](0) } - , reset: function ( size ) { + , reset: function (size) { var dimension = this.dimension() this.$element @@ -83,12 +86,12 @@ [dimension](size || 'auto') [0].offsetWidth - this.$element[size != null ? 'addClass' : 'removeClass']('collapse') + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') return this } - , transition: function ( method, startEvent, completeEvent ) { + , transition: function (method, startEvent, completeEvent) { var that = this , complete = function () { if (startEvent == 'show') that.reset() @@ -107,18 +110,19 @@ $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : complete() - } + } , toggle: function () { this[this.$element.hasClass('in') ? 'hide' : 'show']() - } + } } - /* COLLAPSIBLE PLUGIN DEFINITION + + /* COLLAPSIBLE PLUGIN DEFINITION * ============================== */ - $.fn.collapse = function ( option ) { + $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('collapse') @@ -149,4 +153,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js index 661b22713c..f27f4d2f43 100644 --- a/js/bootstrap-dropdown.js +++ b/js/bootstrap-dropdown.js @@ -18,15 +18,16 @@ * ============================================================ */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* DROPDOWN CLASS DEFINITION * ========================= */ var toggle = '[data-toggle="dropdown"]' - , Dropdown = function ( element ) { + , Dropdown = function (element) { var $el = $(element).on('click.dropdown.data-api', this.toggle) $('html').on('click.dropdown.data-api', function () { $el.parent().removeClass('open') @@ -37,7 +38,7 @@ constructor: Dropdown - , toggle: function ( e ) { + , toggle: function (e) { var $this = $(this) , selector = $this.attr('data-target') , $parent @@ -54,7 +55,8 @@ isActive = $parent.hasClass('open') clearMenus() - !isActive && $parent.toggleClass('open') + + if (!isActive) $parent.toggleClass('open') return false } @@ -69,7 +71,7 @@ /* DROPDOWN PLUGIN DEFINITION * ========================== */ - $.fn.dropdown = function ( option ) { + $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('dropdown') @@ -91,4 +93,4 @@ .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js index f16b565003..959433f2ae 100644 --- a/js/bootstrap-modal.js +++ b/js/bootstrap-modal.js @@ -18,14 +18,15 @@ * ========================================================= */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* MODAL CLASS DEFINITION * ====================== */ - var Modal = function ( content, options ) { + var Modal = function (content, options) { this.options = options this.$element = $(content) .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) @@ -55,7 +56,9 @@ backdrop.call(this, function () { var transition = $.support.transition && that.$element.hasClass('fade') - !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } that.$element .show() @@ -73,7 +76,7 @@ }) } - , hide: function ( e ) { + , hide: function (e) { e && e.preventDefault() var that = this @@ -116,7 +119,7 @@ }) } - function hideModal( that ) { + function hideModal(that) { this.$element .hide() .trigger('hidden') @@ -124,7 +127,7 @@ backdrop.call(this) } - function backdrop( callback ) { + function backdrop(callback) { var that = this , animate = this.$element.hasClass('fade') ? 'fade' : '' @@ -178,7 +181,7 @@ /* MODAL PLUGIN DEFINITION * ======================= */ - $.fn.modal = function ( option ) { + $.fn.modal = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('modal') @@ -212,4 +215,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-popover.js b/js/bootstrap-popover.js index df6ef3dfff..51820979a4 100644 --- a/js/bootstrap-popover.js +++ b/js/bootstrap-popover.js @@ -18,14 +18,19 @@ * =========================================================== */ -!function ( $ ) { +!function ($) { - "use strict" + "use strict"; // jshint ;_; + + + /* POPOVER PUBLIC CLASS DEFINITION + * =============================== */ var Popover = function ( element, options ) { this.init('popover', element, options) } + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js ========================================== */ @@ -59,7 +64,7 @@ return content } - , tip: function() { + , tip: function () { if (!this.$tip) { this.$tip = $(this.options.template) } @@ -72,7 +77,7 @@ /* POPOVER PLUGIN DEFINITION * ======================= */ - $.fn.popover = function ( option ) { + $.fn.popover = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('popover') @@ -90,4 +95,4 @@ , template: '

' }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js index 518ccafb24..3dee609c73 100644 --- a/js/bootstrap-scrollspy.js +++ b/js/bootstrap-scrollspy.js @@ -18,9 +18,10 @@ * ============================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* SCROLLSPY CLASS DEFINITION * ========================== */ @@ -142,4 +143,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-tab.js b/js/bootstrap-tab.js index d46ef790a7..6255d53ef5 100644 --- a/js/bootstrap-tab.js +++ b/js/bootstrap-tab.js @@ -18,9 +18,10 @@ * ======================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* TAB CLASS DEFINITION * ==================== */ @@ -131,4 +132,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-tooltip.js b/js/bootstrap-tooltip.js index 2f9254ed2a..454e7a4484 100644 --- a/js/bootstrap-tooltip.js +++ b/js/bootstrap-tooltip.js @@ -19,14 +19,15 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { + + "use strict"; // jshint ;_; - "use strict" /* TOOLTIP PUBLIC CLASS DEFINITION * =============================== */ - var Tooltip = function ( element, options ) { + var Tooltip = function (element, options) { this.init('tooltip', element, options) } @@ -34,7 +35,7 @@ constructor: Tooltip - , init: function ( type, element, options ) { + , init: function (type, element, options) { var eventIn , eventOut @@ -55,7 +56,7 @@ this.fixTitle() } - , getOptions: function ( options ) { + , getOptions: function (options) { options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) if (options.delay && typeof options.delay == 'number') { @@ -68,7 +69,7 @@ return options } - , enter: function ( e ) { + , enter: function (e) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.show) { @@ -84,7 +85,7 @@ } } - , leave: function ( e ) { + , leave: function (e) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.hide) { @@ -155,7 +156,7 @@ } } - , isHTML: function( text ) { + , isHTML: function(text) { // html string detection logic adapted from jQuery return typeof text != 'string' || ( text.charAt(0) === "<" @@ -271,12 +272,12 @@ $.fn.tooltip.defaults = { animation: true - , delay: 0 - , selector: false , placement: 'top' + , selector: false + , template: '
' , trigger: 'hover' , title: '' - , template: '
' + , delay: 0 } -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-transition.js b/js/bootstrap-transition.js index 8ff3c90023..d34caa1b98 100644 --- a/js/bootstrap-transition.js +++ b/js/bootstrap-transition.js @@ -18,11 +18,12 @@ * ========================================================== */ -!function ( $ ) { +!function ($) { $(function () { - "use strict" + "use strict"; // jshint ;_; + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) * ======================================================= */ @@ -57,4 +58,4 @@ }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-typeahead.js b/js/bootstrap-typeahead.js index 3876e63071..526cf320c3 100644 --- a/js/bootstrap-typeahead.js +++ b/js/bootstrap-typeahead.js @@ -18,11 +18,15 @@ * ============================================================ */ -!function( $ ){ +!function($){ - "use strict" + "use strict"; // jshint ;_; - var Typeahead = function ( element, options ) { + + /* TYPEAHEAD PUBLIC CLASS DEFINITION + * ================================= */ + + var Typeahead = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.typeahead.defaults, options) this.matcher = this.options.matcher || this.matcher @@ -111,7 +115,7 @@ } , highlighter: function (item) { - var query = this.query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { return '' + match + '' }) @@ -241,7 +245,7 @@ /* TYPEAHEAD PLUGIN DEFINITION * =========================== */ - $.fn.typeahead = function ( option ) { + $.fn.typeahead = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('typeahead') @@ -273,4 +277,4 @@ }) }) -}( window.jQuery ); \ No newline at end of file +}(window.jQuery); \ No newline at end of file diff --git a/js/tests/unit/bootstrap-transition.js b/js/tests/unit/bootstrap-transition.js index 3f28d2676d..086773fa27 100644 --- a/js/tests/unit/bootstrap-transition.js +++ b/js/tests/unit/bootstrap-transition.js @@ -3,7 +3,7 @@ $(function () { module("bootstrap-transition") test("should be defined on jquery support object", function () { - ok($.support.transition != undefined, 'transition object is defined') + ok($.support.transition !== undefined, 'transition object is defined') }) test("should provide an end object", function () { From c291e4d78681b5111b4a2c7f480bd7bf18abc34c Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 14 Apr 2012 16:32:20 -0700 Subject: [PATCH 2/4] fix typeahead test --- js/tests/unit/bootstrap-typeahead.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/tests/unit/bootstrap-typeahead.js b/js/tests/unit/bootstrap-typeahead.js index 25d313c85c..4e2428d6a4 100644 --- a/js/tests/unit/bootstrap-typeahead.js +++ b/js/tests/unit/bootstrap-typeahead.js @@ -107,7 +107,7 @@ $(function () { ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active") $input.trigger({ - type: 'keypress' + type: 'keydown' , keyCode: 40 }) @@ -115,7 +115,7 @@ $(function () { $input.trigger({ - type: 'keypress' + type: 'keydown' , keyCode: 38 }) From 81a296d06ab4e445918c41bc885a610d55a33271 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 14 Apr 2012 16:38:44 -0700 Subject: [PATCH 3/4] whitespace --- js/.jshintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/.jshintrc b/js/.jshintrc index bb41ef9cc8..e93a8deeed 100644 --- a/js/.jshintrc +++ b/js/.jshintrc @@ -1,5 +1,5 @@ { - "browser" : true, + "browser" : true, "expr" : true, "laxbreak" : true, "boss" : true, From 3408064d00bc1e4322c3ea1575bc2cab5aaa2be2 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 14 Apr 2012 17:15:03 -0700 Subject: [PATCH 4/4] hack for subnav --- docs/assets/js/application.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/assets/js/application.js b/docs/assets/js/application.js index 732bed4586..f1b7c090ac 100644 --- a/docs/assets/js/application.js +++ b/docs/assets/js/application.js @@ -51,6 +51,11 @@ processScroll() + // hack sad times - holdover until rewrite for 2.1 + $nav.on('click', function () { + if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10) + }) + $win.on('scroll', processScroll) function processScroll() {