Advertisement
Guest User

Untitled

a guest
May 25th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. /*
  2. Selectable Buttons
  3.  
  4. Connect a set of clickable elements to another set of "target" elements to enable adding/removing classes
  5.  
  6. Options:
  7. bind() :
  8. buttonClass: class of the clickable elements
  9. buttonActiveClassSuffix: suffix to append to buttonClass to create the class to add to button once clicked. Default '--active'
  10. buttonDataAttribute: attribute on button used to match target
  11. targetClasses: array of classes of the target elements
  12. targetActiveClassSuffix: suffix to append to targetClass to create the class to add to target(s) once matching button is clicked. Default '--active'
  13. targetDataAttribute: attribute on target to be matched to button
  14. defaultActiveButton: a jQuery selector matching the button to be activated on load
  15. 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
  16.  
  17. */
  18. var selectableButtons = (function () {
  19. function activateButton(button, settings) {
  20. button.addClass(settings.buttonClassActive);
  21. }
  22.  
  23. function activateDefault(settings) {
  24. activateButton($(settings.defaultActiveButton), settings);
  25. activateTargets($(settings.defaultActiveButton).attr(settings.buttonDataAttribute), settings);
  26. }
  27.  
  28. function activateTargets(targetDataAttributeValue, settings) {
  29. for (var i = 0; i < settings.targetClasses.length; i++) {
  30. var targetSelector = '.' + settings.targetClasses[i] + '[' + settings.targetDataAttribute + '="' + targetDataAttributeValue + '"]';
  31. $(targetSelector).addClass(settings.targetClasses[i] + settings.targetActiveClassSuffix);
  32. }
  33. }
  34.  
  35. function deactivateButtons(settings) {
  36. $('.' + settings.buttonClass).removeClass(settings.buttonClassActive);
  37. }
  38.  
  39. function deactivateTargets(settings) {
  40. for (var i = 0; i < settings.targetClasses.length; i++) {
  41. $('.' + settings.targetClasses[i]).removeClass(settings.targetClasses[i] + settings.targetActiveClassSuffix);
  42. }
  43. }
  44.  
  45. function deactivateAll(settings) {
  46. deactivateButtons(settings);
  47. deactivateTargets(settings);
  48. }
  49.  
  50.  
  51. return {
  52. bind: function (options) {
  53. var defaults = {
  54. buttonClass: null,
  55. buttonActiveClassSuffix: '--active',
  56. buttonDataAttribute: null,
  57. targetClasses: null,
  58. targetActiveClassSuffix: '--active',
  59. targetDataAttribute: null,
  60. defaultActiveButton: null,
  61. allowButtonToggle: false
  62. }
  63.  
  64. var settings = $.extend({}, defaults, options);
  65.  
  66. settings.buttonClassActive = settings.buttonClass + settings.buttonActiveClassSuffix;
  67.  
  68. if (settings.defaultActiveButton) {
  69. activateDefault(settings);
  70. }
  71.  
  72. $('.' + settings.buttonClass).on('click', function () {
  73. var isNotActive = !$(this).hasClass(settings.buttonClassActive);
  74.  
  75. deactivateAll(settings);
  76.  
  77. if ((isNotActive && settings.allowButtonToggle) || !settings.allowButtonToggle) {
  78. activateButton($(this), settings);
  79. activateTargets($(this).attr(settings.buttonDataAttribute), settings);
  80. }
  81.  
  82. return false;
  83. });
  84. },
  85. bindSelect: function (options) {
  86. var defaults = {
  87. selectClass: null,
  88. targetClasses: null,
  89. targetActiveClassSuffix: '--active',
  90. targetDataAttribute: null,
  91. defaultActiveButton: null
  92. }
  93.  
  94. var settings = $.extend({}, defaults, options);
  95.  
  96. $('.' + settings.selectClass).on('change',function(){
  97. deactivateTargets(settings);
  98. activateTargets($('.' + settings.selectClass + ' option:selected').val(), settings);
  99. });
  100. }
  101. }
  102. }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement