segmented-controllers.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* ========================================================================
  2. * Ratchet: segmented-controllers.js v2.0.2
  3. * http://goratchet.com/components#segmentedControls
  4. * ========================================================================
  5. * Copyright 2014 Connor Sears
  6. * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
  7. * ======================================================================== */
  8. !(function () {
  9. 'use strict';
  10. var getTarget = function (target) {
  11. var i;
  12. var segmentedControls = document.querySelectorAll('.segmented-control .control-item');
  13. for (; target && target !== document; target = target.parentNode) {
  14. for (i = segmentedControls.length; i--;) {
  15. if (segmentedControls[i] === target) {
  16. return target;
  17. }
  18. }
  19. }
  20. };
  21. window.addEventListener('touchend', function (e) {
  22. var activeTab;
  23. var activeBodies;
  24. var targetBody;
  25. var targetTab = getTarget(e.target);
  26. var className = 'active';
  27. var classSelector = '.' + className;
  28. if (!targetTab) {
  29. return;
  30. }
  31. activeTab = targetTab.parentNode.querySelector(classSelector);
  32. if (activeTab) {
  33. activeTab.classList.remove(className);
  34. }
  35. targetTab.classList.add(className);
  36. if (!targetTab.hash) {
  37. return;
  38. }
  39. targetBody = document.querySelector(targetTab.hash);
  40. if (!targetBody) {
  41. return;
  42. }
  43. activeBodies = targetBody.parentNode.querySelectorAll(classSelector);
  44. for (var i = 0; i < activeBodies.length; i++) {
  45. activeBodies[i].classList.remove(className);
  46. }
  47. targetBody.classList.add(className);
  48. });
  49. window.addEventListener('click', function (e) { if (getTarget(e.target)) {e.preventDefault();} });
  50. }());