From 5f4e30ed1d33f83b0fad3afc9174e193e6c3fdf4 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Fri, 9 Sep 2011 22:47:49 -0700 Subject: move js plugins to root dir, begin writing tests, and change modal plugin to be more boss like --- js/bootstrap-alerts.js | 72 ++ js/bootstrap-dropdown.js | 26 + js/bootstrap-modal.js | 162 ++++ js/bootstrap-popover.js | 67 ++ js/bootstrap-tabs.js | 38 + js/bootstrap-twipsy.js | 288 +++++++ js/tests/index.html | 38 + js/tests/unit/bootstrap-alerts.js | 41 + js/tests/unit/bootstrap-dropdown.js | 52 ++ js/tests/unit/bootstrap-modal.js | 32 + js/tests/unit/bootstrap-popover.js | 0 js/tests/unit/bootstrap-tabs.js | 0 js/tests/unit/bootstrap-twipsy.js | 0 js/tests/vendor/qunit.css | 232 ++++++ js/tests/vendor/qunit.js | 1510 +++++++++++++++++++++++++++++++++++ 15 files changed, 2558 insertions(+) create mode 100644 js/bootstrap-alerts.js create mode 100644 js/bootstrap-dropdown.js create mode 100644 js/bootstrap-modal.js create mode 100644 js/bootstrap-popover.js create mode 100644 js/bootstrap-tabs.js create mode 100644 js/bootstrap-twipsy.js create mode 100644 js/tests/index.html create mode 100644 js/tests/unit/bootstrap-alerts.js create mode 100644 js/tests/unit/bootstrap-dropdown.js create mode 100644 js/tests/unit/bootstrap-modal.js create mode 100644 js/tests/unit/bootstrap-popover.js create mode 100644 js/tests/unit/bootstrap-tabs.js create mode 100644 js/tests/unit/bootstrap-twipsy.js create mode 100644 js/tests/vendor/qunit.css create mode 100644 js/tests/vendor/qunit.js (limited to 'js') diff --git a/js/bootstrap-alerts.js b/js/bootstrap-alerts.js new file mode 100644 index 000000000..e27ac6482 --- /dev/null +++ b/js/bootstrap-alerts.js @@ -0,0 +1,72 @@ +(function( $ ){ + + /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) + * ======================================================= */ + + var transitionEnd + + $(function () { + + $.support.transition = (function () { + var thisBody = document.body || document.documentElement + , thisStyle = thisBody.style + , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined + return support + })() + + // set CSS transition event type + if ( $.support.transition ) { + transitionEnd = "TransitionEnd" + if ( $.browser.webkit ) { + transitionEnd = "webkitTransitionEnd" + } else if ( $.browser.mozilla ) { + transitionEnd = "transitionend" + } else if ( $.browser.opera ) { + transitionEnd = "oTransitionEnd" + } + } + + }) + + /* ALERT CLASS DEFINITION + * ====================== */ + + var Alert = function ( content ) { + var that = this + this.$element = $(content) + this.$element.delegate('.close', 'click', function (e) { + e.preventDefault() + that.close() + }) + } + + Alert.prototype = { + + close: function () { + var that = this + + this.$element.removeClass('in') + + function removeElement () { + that.$element.remove() + that.$element = null + } + + $.support.transition && this.$element.hasClass('fade') ? + this.$element.bind(transitionEnd, removeElement) : + removeElement() + } + + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + $.fn.alert = function ( options ) { + return this.each(function () { + new Alert(this) + }) + } + +})( jQuery || ender ) \ No newline at end of file diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js new file mode 100644 index 000000000..fe73e7994 --- /dev/null +++ b/js/bootstrap-dropdown.js @@ -0,0 +1,26 @@ +(function( $ ){ + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var selector = 'a.menu, .dropdown-toggle' + + function clearMenus() { + $(selector).parent('li').removeClass('open') + } + + $(function () { + $('body').bind("click", clearMenus) + }) + + $.fn.dropdown = function ( options ) { + return this.each(function () { + $(this).delegate(selector, 'click', function (e) { + clearMenus() + $(this).parent('li').toggleClass('open') + return false + }) + }) + } + +})( jQuery || ender ) \ No newline at end of file diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js new file mode 100644 index 000000000..4b4f05ae3 --- /dev/null +++ b/js/bootstrap-modal.js @@ -0,0 +1,162 @@ +(function( $ ){ + + /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) + * ======================================================= */ + + var transitionEnd + + $(function () { + + $.support.transition = (function () { + var thisBody = document.body || document.documentElement + , thisStyle = thisBody.style + , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined + return support + })() + + // set CSS transition event type + if ( $.support.transition ) { + transitionEnd = "TransitionEnd" + if ( $.browser.webkit ) { + transitionEnd = "webkitTransitionEnd" + } else if ( $.browser.mozilla ) { + transitionEnd = "transitionend" + } else if ( $.browser.opera ) { + transitionEnd = "oTransitionEnd" + } + } + + }) + + + /* MODAL PUBLIC CLASS DEFINITION + * ============================= */ + + var Modal = function ( content, options ) { + this.settings = $.extend({}, $.fn.modal.defaults) + + if ( options ) { + $.extend( this.settings, options ) + } + + this.$element = $(content) + .bind('modal:open', $.proxy(this.open, this)) + .bind('modal:close', $.proxy(this.close, this)) + .bind('modal:toggle', $.proxy(this.toggle, this)) + .delegate('.close', 'click', $.proxy(this.close, this)) + + return this + } + + Modal.prototype = { + + toggle: function () { + return this[!this.isOpen ? 'open' : 'close']() + } + + , open: function () { + var that = this + this.isOpen = true + + _.escape.call(this) + _.backdrop.call(this) + + this.$element + .appendTo(document.body) + .show() + + setTimeout(function () { + that.$element.addClass('in') + that.$backdrop && that.$backdrop.addClass('in') + }, 1) + + return this + } + + , close: function (e) { + e && e.preventDefault() + + var that = this + + this.isOpen = false + + _.escape.call(this) + _.backdrop.call(this) + + this.$element.removeClass('in') + + function removeElement () { + that.$element.unbind(transitionEnd) + that.$element.detach() + } + + $.support.transition && this.$element.hasClass('fade') ? + this.$element.bind(transitionEnd, removeElement) : + removeElement() + + return this + } + + } + + + /* MODAL PRIVATE METHODS + * ===================== */ + + var _ = { + + backdrop: function () { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + if ( this.isOpen && this.settings.backdrop ) { + this.$backdrop = $('