Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Selectable Buttons
- Connect a set of clickable elements to another set of "target" elements to enable adding/removing classes
- Options:
- bind() :
- buttonClass: class of the clickable elements
- buttonActiveClassSuffix: suffix to append to buttonClass to create the class to add to button once clicked. Default '--active'
- buttonDataAttribute: attribute on button used to match target
- targetClasses: array of classes of the target elements
- targetActiveClassSuffix: suffix to append to targetClass to create the class to add to target(s) once matching button is clicked. Default '--active'
- targetDataAttribute: attribute on target to be matched to button
- defaultActiveButton: a jQuery selector matching the button to be activated on load
- allowButtonToggle: a boolean to allow clicking an active button to deactivate the button (i.e. there need not always be a button selected). Default false
- */
- var selectableButtons = (function () {
- function activateButton(button, settings) {
- button.addClass(settings.buttonClassActive);
- }
- function activateDefault(settings) {
- activateButton($(settings.defaultActiveButton), settings);
- activateTargets($(settings.defaultActiveButton).attr(settings.buttonDataAttribute), settings);
- }
- function activateTargets(targetDataAttributeValue, settings) {
- for (var i = 0; i < settings.targetClasses.length; i++) {
- var targetSelector = '.' + settings.targetClasses[i] + '[' + settings.targetDataAttribute + '="' + targetDataAttributeValue + '"]';
- $(targetSelector).addClass(settings.targetClasses[i] + settings.targetActiveClassSuffix);
- }
- }
- function deactivateButtons(settings) {
- $('.' + settings.buttonClass).removeClass(settings.buttonClassActive);
- }
- function deactivateTargets(settings) {
- for (var i = 0; i < settings.targetClasses.length; i++) {
- $('.' + settings.targetClasses[i]).removeClass(settings.targetClasses[i] + settings.targetActiveClassSuffix);
- }
- }
- function deactivateAll(settings) {
- deactivateButtons(settings);
- deactivateTargets(settings);
- }
- return {
- bind: function (options) {
- var defaults = {
- buttonClass: null,
- buttonActiveClassSuffix: '--active',
- buttonDataAttribute: null,
- targetClasses: null,
- targetActiveClassSuffix: '--active',
- targetDataAttribute: null,
- defaultActiveButton: null,
- allowButtonToggle: false
- }
- var settings = $.extend({}, defaults, options);
- settings.buttonClassActive = settings.buttonClass + settings.buttonActiveClassSuffix;
- if (settings.defaultActiveButton) {
- activateDefault(settings);
- }
- $('.' + settings.buttonClass).on('click', function () {
- var isNotActive = !$(this).hasClass(settings.buttonClassActive);
- deactivateAll(settings);
- if ((isNotActive && settings.allowButtonToggle) || !settings.allowButtonToggle) {
- activateButton($(this), settings);
- activateTargets($(this).attr(settings.buttonDataAttribute), settings);
- }
- return false;
- });
- },
- bindSelect: function (options) {
- var defaults = {
- selectClass: null,
- targetClasses: null,
- targetActiveClassSuffix: '--active',
- targetDataAttribute: null,
- defaultActiveButton: null
- }
- var settings = $.extend({}, defaults, options);
- $('.' + settings.selectClass).on('change',function(){
- deactivateTargets(settings);
- activateTargets($('.' + settings.selectClass + ' option:selected').val(), settings);
- });
- }
- }
- }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement