Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. (function() {
  2. 'use strict';
  3.  
  4. function addClassIfNotPresent(e, c) {
  5. console.log('addClassIFNotPresent');
  6. console.log(e);
  7. console.log(c);
  8. var val = e.getAttribute('class');
  9. if (val === null) {
  10. e.setAttribute('class', c);
  11. return;
  12. }
  13. var classes = val.split(' ');
  14. var hasClass = false;
  15. classes.forEach(function(i) {
  16. if (i == c) {
  17. hasClass = true;
  18. }
  19. });
  20. if (!hasClass) {
  21. classes.push(c);
  22. e.setAttribute('class', classes.join(' '));
  23. }
  24. }
  25.  
  26. function removeClassIfPresent(e, c) {
  27. console.log('removeClassIFPresent');
  28. console.log(e);
  29. console.log(c);
  30. var val = e.getAttribute('class');
  31. if (val === null) {
  32. return;
  33. }
  34. var classes = val.split(' ');
  35. console.log(classes);
  36. for (var i = 0; i < classes.length; i++) {
  37. var v = classes[i];
  38. if (c === v) {
  39. if (i === 0) {
  40. classes = classes.slice(1, classes.length);
  41. } else if (i === classes.length - 1) {
  42. classes = classes.slice(0, classes.length - 1);
  43. } else {
  44. classes = classes.slice(0, i).concat(classes.slice(i + 1, classes.length));
  45. }
  46. }
  47. }
  48. console.log(classes);
  49. e.setAttribute('class', classes.join(' '));
  50. }
  51.  
  52. function Nav(config) {
  53. this._configure(config);
  54. return this;
  55. }
  56.  
  57. Nav.prototype._configure = function(config) {
  58. var sources = this._parseSources(config.sources);
  59. var target = document.getElementById(config.target);
  60. if (toggle === null) {
  61. throw new Error('nav: config.target must be a valid id');
  62. }
  63. this._copySources(sources, target);
  64. var toggle = document.getElementById(config.toggle);
  65. if (toggle === null) {
  66. throw new Error('nav: config.toggle must be a valid id');
  67. }
  68. this._initToggle(toggle, target);
  69. }
  70.  
  71. Nav.prototype._parseSources = function(sources) {
  72. var sourceElems = [];
  73. if (typeof sources === 'string') {
  74. var sourceElem = document.getElementById(sources);
  75. if (sourceElem === null) {
  76. throw new Error('nav: config.sources must be a valid id or array of valid ids');
  77. } else {
  78. sourceElems.push(sourceElem);
  79. }
  80. } else if (Array.isArray(sources)) {
  81. for (var i = 0; i < sources.length; i++) {
  82. var source = sources[i];
  83. var elem = document.getElementById(source);
  84. if (elem === null) {
  85. throw new Error('nav: config.sources must be a valid id or array of valid ids');
  86. }
  87. sourceElems.push(elem);
  88. }
  89. }
  90. return sourceElems;
  91. }
  92.  
  93. Nav.prototype._copySources = function(sources, target) {
  94. for (var i = 0; i < sources.length; i++) {
  95. var children = sources[i].children;
  96. for (var j = 0; j < children.length; j++) {
  97. var child = children[j];
  98. var clone = child.cloneNode(true);
  99. target.appendChild(clone);
  100. }
  101. }
  102. }
  103.  
  104. Nav.prototype._initToggle = function(toggle, target) {
  105. var f = toggle.onclick;
  106. if (f === null) {
  107. toggle.onclick = this._toggle(toggle, target);
  108. } else {
  109. var t = this._toggle(toggle, target);
  110. toggle.onclick = function(e) {
  111. f(e);
  112. t();
  113. };
  114. }
  115. }
  116.  
  117. Nav.prototype._toggle = function(toggle, target) {
  118. var active = false;
  119. return function() {
  120. console.log('Toggled');
  121. if (active) {
  122. console.log(active);
  123. removeClassIfPresent(toggle, 'active');
  124. addClassIfNotPresent(target, 'collapsed');
  125. active = false;
  126. } else {
  127. console.log(active);
  128. removeClassIfPresent(target, 'collapsed');
  129. addClassIfNotPresent(toggle, 'active');
  130. active = true;
  131. }
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement