-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathside-menus.js
More file actions
74 lines (67 loc) · 2.46 KB
/
side-menus.js
File metadata and controls
74 lines (67 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* ========================================================================
* Ratchet: side-menus.js v2.0.2
* http://goratchet.com/components#sideMenus
* ========================================================================
* Copyright 2014 Connor Sears
* Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE)
* ======================================================================== */
!(function () {
'use strict';
var findSideMenus = function (target) {
var i;
var sideMenus = document.querySelectorAll('a');
for (; target && target !== document; target = target.parentNode) {
for (i = sideMenus.length; i--;) {
if (sideMenus[i] === target) {
return target;
}
}
}
};
var getSideMenu = function (event) {
var sideMenuToggle = findSideMenus(event.target);
if (sideMenuToggle && sideMenuToggle.hash) {
var sideMenu = document.querySelector(sideMenuToggle.hash);
if (sideMenu && sideMenu.classList.contains('side-menu')) {
return sideMenu;
}
}
};
var getSideMenuSiblings = function (sideMenu) {
var siblings = [].slice.call(sideMenu.parentNode.children);
siblings = siblings.filter(function(val) {
return [sideMenu].indexOf(val) === -1 && val.nodeName !== 'SCRIPT';
});
return siblings;
};
window.addEventListener('touchend', function (event) {
var sideMenu = getSideMenu(event);
if (sideMenu) {
var siblings = getSideMenuSiblings(sideMenu);
var i;
var l;
var hasBlocker = false;
for (i = 0, l = siblings.length; i < l; i++) {
if (!hasBlocker && siblings[i].classList.contains('side-menu-blocker')) {
hasBlocker = true;
}
if (siblings[i].classList.contains('activeSideMenu')) {
siblings[i].classList.remove('activeSideMenu');
siblings[i].classList.add('inactiveSideMenu');
} else {
siblings[i].classList.remove('inactiveSideMenu');
siblings[i].classList.add('activeSideMenu');
}
}
if (hasBlocker === false) {
var blocker = document.createElement('a');
blocker.href = '#' + sideMenu.id;
blocker.classList.add('side-menu-blocker');
sideMenu.parentElement.appendChild(blocker);
siblings.push(blocker);
blocker.classList.add('activeSideMenu');
}
event.preventDefault(); // prevents rewriting url (apps can still use hash values in url)
}
});
}());