Skip to content

Commit 5b99fce

Browse files
committed
Updated
1 parent e4a7fc1 commit 5b99fce

File tree

8 files changed

+204
-0
lines changed

8 files changed

+204
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
import './badge-view';
4+
5+
customElements.define('badge-group-view', class extends ComponentView {
6+
// eslint-disable-next-line class-methods-use-this
7+
template() {
8+
return html`
9+
<badge-view class="bg-danger">TEST ONE</badge-view><badge-view class="bg-warning">TEST TWO</badge-view>
10+
`;
11+
}
12+
});

npm/sqlite3/js/view/badge-view.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
4+
// <badge-view>TEST</badge-view>
5+
customElements.define('badge-view', class extends ComponentView {
6+
constructor() {
7+
super();
8+
this.classList.add('badge');
9+
}
10+
11+
template() {
12+
return html`
13+
<link rel="stylesheet" href="./index.css">
14+
<span class="${this.classList.value}">${this.textContent}</span>
15+
`;
16+
}
17+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { render, nothing } from 'lit-html';
2+
3+
export default class ComponentView extends HTMLElement {
4+
constructor() {
5+
super();
6+
this.attachShadow({ mode: 'open' });
7+
}
8+
9+
connectedCallback() {
10+
this.update();
11+
}
12+
13+
// eslint-disable-next-line class-methods-use-this
14+
disconnectedCallback() {}
15+
16+
// eslint-disable-next-line class-methods-use-this
17+
template() {
18+
return nothing;
19+
}
20+
21+
update() {
22+
render(this.template(), this.shadowRoot, { eventContext: this });
23+
}
24+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
import Events from './nav-view';
4+
5+
customElements.define('nav-item-view', class extends ComponentView {
6+
constructor() {
7+
super();
8+
this.classList.add('nav-link');
9+
}
10+
11+
disconnectedCallback() {
12+
super.disconnectedCallback();
13+
// Fire disconnected event
14+
this.dispatchEvent(new CustomEvent(Events.EVENT_DISCONNECTED));
15+
}
16+
17+
template() {
18+
return html`
19+
<link rel="stylesheet" href="./index.css">
20+
<a class="${this.classList.value}" href="#">
21+
<slot></slot>
22+
</a>
23+
`;
24+
}
25+
});

npm/sqlite3/js/view/nav-view.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
4+
const EVENT_CLICK = 'nav-view:click';
5+
const EVENT_ACTIVE = 'nav-view:active';
6+
const EVENT_DEACTIVE = 'nav-view:deactive';
7+
const EVENT_DISCONNECTED = 'nav-view:disconnected';
8+
9+
customElements.define('nav-view', class extends ComponentView {
10+
constructor() {
11+
super();
12+
this.classList.add('nav');
13+
}
14+
15+
get active() {
16+
return this.querySelector('nav-item-view#active');
17+
}
18+
19+
set active(activeItem) {
20+
this.querySelectorAll('nav-item-view').forEach((item) => {
21+
if (activeItem === item) {
22+
if (!item.classList.contains('active')) {
23+
item.classList.add('active');
24+
this.dispatchEvent(new CustomEvent(EVENT_ACTIVE, { detail: item }));
25+
}
26+
} else if (item.classList.contains('active')) {
27+
item.classList.remove('active');
28+
this.dispatchEvent(new CustomEvent(EVENT_DEACTIVE, { detail: item }));
29+
}
30+
});
31+
}
32+
33+
connectedCallback() {
34+
super.connectedCallback();
35+
36+
this.querySelectorAll('nav-item-view').forEach((item) => {
37+
// Add event listeners for 'click' event to nav-item-view elements
38+
item.addEventListener('click', (e) => {
39+
this.dispatchEvent(new CustomEvent(EVENT_CLICK, {
40+
detail: e.target,
41+
}));
42+
});
43+
// Add event listeners for when an item is removed from the nav-view
44+
item.addEventListener(EVENT_DISCONNECTED, (e) => {
45+
if (e.target === this.active) {
46+
this.active = null;
47+
}
48+
});
49+
});
50+
51+
// If no active item is set, set the first one as active
52+
if (!this.active) {
53+
this.active = this.querySelector('nav-item-view');
54+
}
55+
}
56+
57+
appendChild(element) {
58+
super.appendChild(element);
59+
this.update();
60+
return element;
61+
}
62+
63+
template() {
64+
return html`
65+
<link rel="stylesheet" href="./index.css">
66+
<nav class="${this.classList.value}">
67+
<slot></slot>
68+
</nav>
69+
`;
70+
}
71+
});
72+
73+
// Export event names
74+
export default {
75+
EVENT_CLICK, EVENT_ACTIVE, EVENT_DEACTIVE, EVENT_DISCONNECTED,
76+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
4+
customElements.define('table-body-view', class extends ComponentView {
5+
// eslint-disable-next-line class-methods-use-this
6+
template() {
7+
return html`
8+
<link rel="stylesheet" href="./index.css">
9+
<tbody>
10+
<tr><td>Row 1</td></tr>
11+
<tr><td>Row 2</td></tr>
12+
<tr><td>Row 3</td></tr>
13+
<tr><td>Row 4</td></tr>
14+
</tbody>
15+
`;
16+
}
17+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
4+
customElements.define('table-head-view', class extends ComponentView {
5+
// eslint-disable-next-line class-methods-use-this
6+
template() {
7+
return html`
8+
<link rel="stylesheet" href="./index.css">
9+
<thead><tr><th>Col A</th></tr></thead>
10+
`;
11+
}
12+
});

npm/sqlite3/js/view/table-view.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { html } from 'lit-html';
2+
import ComponentView from './component-view';
3+
import './table-head-view';
4+
import './table-body-view';
5+
6+
customElements.define('table-view', class extends ComponentView {
7+
constructor() {
8+
super();
9+
this.classList.add('table');
10+
}
11+
12+
template() {
13+
return html`
14+
<link rel="stylesheet" href="./index.css">
15+
<table class="${this.classList.value}">
16+
${html`<table-head-view></table-head-view>`}
17+
${html`<table-body-view></table-body-view>`}
18+
</table>
19+
`;
20+
}
21+
});

0 commit comments

Comments
 (0)