File: /home/iestorre/moodleAW/moodle07/theme/bootstrapbase/yui/src/bootstrap/js/bootstrap.js
/**
The Moodle Bootstrap theme's bootstrap JavaScript
@namespace Moodle
@module theme_bootstrapbase-bootstrap
**/
/**
The Moodle Bootstrap theme's bootstrap JavaScript
@class Moodle.theme_bootstrapbase.bootstrap
@uses node
@uses selector-css3
@constructor
**/
var CSS = {
ACTIVE: 'active'
},
SELECTORS = {
NAVBAR_BUTTON: '.btn-navbar',
// FIXME This is deliberately wrong because of a breaking issue in the upstream library.
TOGGLECOLLAPSE: '*[data-disabledtoggle="collapse"]'
},
NS = Y.namespace('Moodle.theme_bootstrapbase.bootstrap');
/**
* Initialise the Moodle Bootstrap theme JavaScript
*
* @method init
*/
NS.init = function() {
// We must use these here and *must not* add them to the list of dependencies until
// Moodle fully supports the gallery.
// When debugging is disabled and we seed the Loader with out configuration, if these
// are in the requires array, then the Loader will try to load them from the CDN. It
// does not know that we have added them to the module rollup.
Y.use('gallery-bootstrap-dropdown',
'gallery-bootstrap-collapse',
'gallery-bootstrap-engine', function() {
// Set up expandable and show.
NS.setup_toggle_expandable();
NS.setup_toggle_show();
// Set up upstream dropdown delegation.
Y.Bootstrap.dropdown_delegation();
});
};
/**
* Setup toggling of the Toggle Collapse
*
* @method setup_toggle_expandable
* @private
*/
NS.setup_toggle_expandable = function() {
Y.delegate('click', this.toggle_expandable, Y.config.doc, SELECTORS.TOGGLECOLLAPSE, this);
};
/**
* Use the Y.Bootstrap.Collapse plugin to toggle collapse.
*
* @method toggle_expandable
* @private
* @param {EventFacade} e
*/
NS.toggle_expandable = function(e) {
if (typeof e.currentTarget.collapse === 'undefined') {
// Only plug if we haven't already.
e.currentTarget.plug(Y.Bootstrap.Collapse);
// The plugin will now catch the click and handle the toggle.
// We only need to do this when we plug the node for the first
// time.
e.currentTarget.collapse.toggle();
e.preventDefault();
}
};
/**
* Set up the show toggler for activating the navigation bar
*
* @method setup_toggle_show
* @private
*/
NS.setup_toggle_show = function() {
Y.delegate('click', this.toggle_show, Y.config.doc, SELECTORS.NAVBAR_BUTTON);
};
/**
* Toggle hiding of the navigation bar
*
* @method toggle_show
* @private
* @param {EventFacade} e
*/
NS.toggle_show = function(e) {
// Toggle the active class on both the clicked .btn-navbar and the
// associated target, defined by a CSS selector string set as the
// data-target attribute on the .btn-navbar element in question.
//
// This will allow for us to have multiple .btn-navbar elements
// each with their own collapse/expand targets - these targets
// should be of class .nav-collapse.
var myTarget = this.get('parentNode').one(this.getAttribute('data-target'));
if (myTarget) {
this.siblings(".btn-navbar").removeClass(CSS.ACTIVE);
myTarget.siblings(".nav-collapse").removeClass(CSS.ACTIVE);
myTarget.toggleClass(CSS.ACTIVE);
}
e.currentTarget.toggleClass(CSS.ACTIVE);
};