181 lines
5.1 KiB
JavaScript
181 lines
5.1 KiB
JavaScript
/**
|
|
* @file
|
|
* Theme hooks for the Drupal Bootstrap base theme.
|
|
*/
|
|
(function ($, Drupal, Bootstrap, Attributes) {
|
|
|
|
/**
|
|
* Fallback for theming an icon if the Icon API module is not installed.
|
|
*/
|
|
if (!Drupal.icon) Drupal.icon = { bundles: {} };
|
|
if (!Drupal.theme.icon || Drupal.theme.prototype.icon) {
|
|
$.extend(Drupal.theme, /** @lends Drupal.theme */ {
|
|
/**
|
|
* Renders an icon.
|
|
*
|
|
* @param {string} bundle
|
|
* The bundle which the icon belongs to.
|
|
* @param {string} icon
|
|
* The name of the icon to render.
|
|
* @param {object|Attributes} [attributes]
|
|
* An object of attributes to also apply to the icon.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
icon: function (bundle, icon, attributes) {
|
|
if (!Drupal.icon.bundles[bundle]) return '';
|
|
attributes = Attributes.create(attributes).addClass('icon').set('aria-hidden', 'true');
|
|
icon = Drupal.icon.bundles[bundle](icon, attributes);
|
|
return '<span' + attributes + '></span>';
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Callback for modifying an icon in the "bootstrap" icon bundle.
|
|
*
|
|
* @param {string} icon
|
|
* The icon being rendered.
|
|
* @param {Attributes} attributes
|
|
* Attributes object for the icon.
|
|
*/
|
|
Drupal.icon.bundles.bootstrap = function (icon, attributes) {
|
|
attributes.addClass(['glyphicon', 'glyphicon-' + icon]);
|
|
};
|
|
|
|
/**
|
|
* Add necessary theming hooks.
|
|
*/
|
|
$.extend(Drupal.theme, /** @lends Drupal.theme */ {
|
|
|
|
/**
|
|
* Renders a Bootstrap AJAX glyphicon throbber.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
ajaxThrobber: function () {
|
|
return Drupal.theme('bootstrapIcon', 'refresh', {'class': ['ajax-throbber', 'glyphicon-spin'] });
|
|
},
|
|
|
|
/**
|
|
* Renders a button element.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button. If it contains one of:
|
|
* - value: The label of the button.
|
|
* - context: The context type of Bootstrap button, can be one of:
|
|
* - default
|
|
* - primary
|
|
* - success
|
|
* - info
|
|
* - warning
|
|
* - danger
|
|
* - link
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
button: function (attributes) {
|
|
attributes = Attributes.create(attributes).addClass('btn');
|
|
var context = attributes.get('context', 'default');
|
|
var label = attributes.get('value', '');
|
|
attributes.remove('context').remove('value');
|
|
if (!attributes.hasClass(['btn-default', 'btn-primary', 'btn-success', 'btn-info', 'btn-warning', 'btn-danger', 'btn-link'])) {
|
|
attributes.addClass('btn-' + Bootstrap.checkPlain(context));
|
|
}
|
|
|
|
// Attempt to, intelligently, provide a default button "type".
|
|
if (!attributes.exists('type')) {
|
|
attributes.set('type', attributes.hasClass('form-submit') ? 'submit' : 'button');
|
|
}
|
|
|
|
return '<button' + attributes + '>' + label + '</button>';
|
|
},
|
|
|
|
/**
|
|
* Alias for "button" theme hook.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button.
|
|
*
|
|
* @see Drupal.theme.button()
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
btn: function (attributes) {
|
|
return Drupal.theme('button', attributes);
|
|
},
|
|
|
|
/**
|
|
* Renders a button block element.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button.
|
|
*
|
|
* @see Drupal.theme.button()
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
'btn-block': function (attributes) {
|
|
return Drupal.theme('button', Attributes.create(attributes).addClass('btn-block'));
|
|
},
|
|
|
|
/**
|
|
* Renders a large button element.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button.
|
|
*
|
|
* @see Drupal.theme.button()
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
'btn-lg': function (attributes) {
|
|
return Drupal.theme('button', Attributes.create(attributes).addClass('btn-lg'));
|
|
},
|
|
|
|
/**
|
|
* Renders a small button element.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button.
|
|
*
|
|
* @see Drupal.theme.button()
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
'btn-sm': function (attributes) {
|
|
return Drupal.theme('button', Attributes.create(attributes).addClass('btn-sm'));
|
|
},
|
|
|
|
/**
|
|
* Renders an extra small button element.
|
|
*
|
|
* @param {object|Attributes} attributes
|
|
* An object of attributes to apply to the button.
|
|
*
|
|
* @see Drupal.theme.button()
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
'btn-xs': function (attributes) {
|
|
return Drupal.theme('button', Attributes.create(attributes).addClass('btn-xs'));
|
|
},
|
|
|
|
/**
|
|
* Renders a glyphicon.
|
|
*
|
|
* @param {string} name
|
|
* The name of the glyphicon.
|
|
* @param {object|Attributes} [attributes]
|
|
* An object of attributes to apply to the icon.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
bootstrapIcon: function (name, attributes) {
|
|
return Drupal.theme('icon', 'bootstrap', name, attributes);
|
|
}
|
|
|
|
});
|
|
|
|
})(window.jQuery, window.Drupal, window.Drupal.bootstrap, window.Attributes);
|