klods-css 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/klods.js +70 -0
- package/package.json +4 -2
- package/src/klods.js +70 -0
package/dist/klods.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* klods.js — interactive helpers for vanilla HTML pages.
|
|
3
|
+
*
|
|
4
|
+
* A tiny companion to klods-css that wires up sidebar and nav toggling
|
|
5
|
+
* without requiring a build step or klods-js.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* <script src="https://unpkg.com/klods-css/dist/klods.js"></script>
|
|
9
|
+
*
|
|
10
|
+
* The helpers are exposed on `window.klods`:
|
|
11
|
+
* klods.toggleSidebar(buttonEl)
|
|
12
|
+
* klods.toggleNav(buttonEl)
|
|
13
|
+
*/
|
|
14
|
+
(function (global) {
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Toggle the open/closed state of the sidebar drawer.
|
|
19
|
+
* Pass the toggle button element (or any element inside .klods-page).
|
|
20
|
+
*
|
|
21
|
+
* On first call per page element, auto-wires:
|
|
22
|
+
* - Clicking a link inside the sidebar closes the drawer.
|
|
23
|
+
* - Clicking the backdrop (outside sidebar and header) closes the drawer.
|
|
24
|
+
*/
|
|
25
|
+
function toggleSidebar(targetEl) {
|
|
26
|
+
var pageEl = targetEl.closest(".klods-page");
|
|
27
|
+
if (!pageEl) return;
|
|
28
|
+
|
|
29
|
+
if (!pageEl.hasAttribute("data-sidebar-wired")) {
|
|
30
|
+
pageEl.setAttribute("data-sidebar-wired", "");
|
|
31
|
+
var sidebarEl = pageEl.querySelector(":scope > .klods-sidebar");
|
|
32
|
+
if (sidebarEl) {
|
|
33
|
+
sidebarEl.addEventListener("click", function (e) {
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
});
|
|
36
|
+
sidebarEl.addEventListener("click", function (e) {
|
|
37
|
+
if (e.target.closest("a")) pageEl.removeAttribute("data-sidebar-open");
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
pageEl.addEventListener("click", function (e) {
|
|
41
|
+
if (!pageEl.hasAttribute("data-sidebar-open")) return;
|
|
42
|
+
var headerEl = pageEl.querySelector(":scope > .klods-header");
|
|
43
|
+
if (headerEl && headerEl.contains(e.target)) return;
|
|
44
|
+
pageEl.removeAttribute("data-sidebar-open");
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (pageEl.hasAttribute("data-sidebar-open")) {
|
|
49
|
+
pageEl.removeAttribute("data-sidebar-open");
|
|
50
|
+
} else {
|
|
51
|
+
pageEl.setAttribute("data-sidebar-open", "");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Toggle the open/closed state of a .klods-nav--collapse element.
|
|
57
|
+
* Pass the toggle button element (or any element inside the nav).
|
|
58
|
+
*/
|
|
59
|
+
function toggleNav(targetEl) {
|
|
60
|
+
var navEl = targetEl.closest(".klods-nav--collapse");
|
|
61
|
+
if (!navEl) return;
|
|
62
|
+
if (navEl.hasAttribute("data-nav-open")) {
|
|
63
|
+
navEl.removeAttribute("data-nav-open");
|
|
64
|
+
} else {
|
|
65
|
+
navEl.setAttribute("data-nav-open", "");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
global.klods = { toggleSidebar: toggleSidebar, toggleNav: toggleNav };
|
|
70
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : this);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "klods-css",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "klods stylesheet — drop-in CSS for layout, utilities and components.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Drue Wilding",
|
|
@@ -20,12 +20,14 @@
|
|
|
20
20
|
"exports": {
|
|
21
21
|
".": "./dist/klods.css",
|
|
22
22
|
"./min": "./dist/klods.min.css",
|
|
23
|
+
"./js": "./dist/klods.js",
|
|
23
24
|
"./src/*": "./src/*"
|
|
24
25
|
},
|
|
25
26
|
"scripts": {
|
|
26
|
-
"build": "npm run build:css && npm run build:min",
|
|
27
|
+
"build": "npm run build:css && npm run build:min && npm run build:js",
|
|
27
28
|
"build:css": "sass src/klods.scss dist/klods.css --style=expanded --no-source-map",
|
|
28
29
|
"build:min": "sass src/klods.scss dist/klods.min.css --style=compressed --no-source-map",
|
|
30
|
+
"build:js": "cp src/klods.js dist/klods.js",
|
|
29
31
|
"dev": "sass src/klods.scss dist/klods.css --watch --style=expanded"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
package/src/klods.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* klods.js — interactive helpers for vanilla HTML pages.
|
|
3
|
+
*
|
|
4
|
+
* A tiny companion to klods-css that wires up sidebar and nav toggling
|
|
5
|
+
* without requiring a build step or klods-js.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* <script src="https://unpkg.com/klods-css/dist/klods.js"></script>
|
|
9
|
+
*
|
|
10
|
+
* The helpers are exposed on `window.klods`:
|
|
11
|
+
* klods.toggleSidebar(buttonEl)
|
|
12
|
+
* klods.toggleNav(buttonEl)
|
|
13
|
+
*/
|
|
14
|
+
(function (global) {
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Toggle the open/closed state of the sidebar drawer.
|
|
19
|
+
* Pass the toggle button element (or any element inside .klods-page).
|
|
20
|
+
*
|
|
21
|
+
* On first call per page element, auto-wires:
|
|
22
|
+
* - Clicking a link inside the sidebar closes the drawer.
|
|
23
|
+
* - Clicking the backdrop (outside sidebar and header) closes the drawer.
|
|
24
|
+
*/
|
|
25
|
+
function toggleSidebar(targetEl) {
|
|
26
|
+
var pageEl = targetEl.closest(".klods-page");
|
|
27
|
+
if (!pageEl) return;
|
|
28
|
+
|
|
29
|
+
if (!pageEl.hasAttribute("data-sidebar-wired")) {
|
|
30
|
+
pageEl.setAttribute("data-sidebar-wired", "");
|
|
31
|
+
var sidebarEl = pageEl.querySelector(":scope > .klods-sidebar");
|
|
32
|
+
if (sidebarEl) {
|
|
33
|
+
sidebarEl.addEventListener("click", function (e) {
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
});
|
|
36
|
+
sidebarEl.addEventListener("click", function (e) {
|
|
37
|
+
if (e.target.closest("a")) pageEl.removeAttribute("data-sidebar-open");
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
pageEl.addEventListener("click", function (e) {
|
|
41
|
+
if (!pageEl.hasAttribute("data-sidebar-open")) return;
|
|
42
|
+
var headerEl = pageEl.querySelector(":scope > .klods-header");
|
|
43
|
+
if (headerEl && headerEl.contains(e.target)) return;
|
|
44
|
+
pageEl.removeAttribute("data-sidebar-open");
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (pageEl.hasAttribute("data-sidebar-open")) {
|
|
49
|
+
pageEl.removeAttribute("data-sidebar-open");
|
|
50
|
+
} else {
|
|
51
|
+
pageEl.setAttribute("data-sidebar-open", "");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Toggle the open/closed state of a .klods-nav--collapse element.
|
|
57
|
+
* Pass the toggle button element (or any element inside the nav).
|
|
58
|
+
*/
|
|
59
|
+
function toggleNav(targetEl) {
|
|
60
|
+
var navEl = targetEl.closest(".klods-nav--collapse");
|
|
61
|
+
if (!navEl) return;
|
|
62
|
+
if (navEl.hasAttribute("data-nav-open")) {
|
|
63
|
+
navEl.removeAttribute("data-nav-open");
|
|
64
|
+
} else {
|
|
65
|
+
navEl.setAttribute("data-nav-open", "");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
global.klods = { toggleSidebar: toggleSidebar, toggleNav: toggleNav };
|
|
70
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : this);
|