Skip to content

Commit 83b642a

Browse files
committed
refactor: rename data-viewer custom element to flatbread-table
- Update custom element registration from data-viewer to flatbread-table - Fix modal element parent lookup for new tag name - Update HTML usage examples and documentation
1 parent aa6480e commit 83b642a

6 files changed

Lines changed: 32 additions & 69 deletions

File tree

index.html

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ <h1><a href="https://github.com/lcvriend/wc-simple-table">wc-simple-table</a></h
1818
</section>
1919
<section id="info">
2020
<h2>Web component</h2>
21-
<p><code>&lt;data-viewer&gt;</code> is a web component for displaying structured table data with these key features:</p>
21+
<p><code>&lt;flatbread-table&gt;</code> is a web component for displaying structured table data with these key features:</p>
2222
<ul>
2323
<li>Vanilla JavaScript with no external dependencies</li>
2424
<li>Loads JSON data from URLs</li>
@@ -30,23 +30,9 @@ <h2>Web component</h2>
3030
</ul>
3131
<p>Below you'll find examples demonstrating the component's features and usage.</p>
3232
</section>
33-
<section id="controls">
33+
<section id="controls" style="display: none;">
3434
<h2>Controls</h2>
3535
<form>
36-
<fieldset>
37-
<legend>Data</legend>
38-
<div>
39-
<label for="src">Source
40-
<select name="src" id="src" autocomplete="off">
41-
<option value="data/bedragen_2025.json" selected>default</option>
42-
<option value="data/multiindex_df.json">multiindex df</option>
43-
<option value="data/simple_df.json">simple df</option>
44-
<option value="data/dates.json">dates</option>
45-
<option value="data/big_boy.json">truncated</option>
46-
</select>
47-
</label>
48-
</div>
49-
</fieldset>
5036
<fieldset>
5137
<legend>Calculate</legend>
5238
<div>
@@ -67,42 +53,42 @@ <h2>Controls</h2>
6753
</section>
6854
<section id="output">
6955
<h2>Output</h2>
70-
<div id="data-viewer-wrapper" class="breakout">
71-
<data-viewer
72-
src="data/bedragen_2025.json"
56+
<div id="flatbread-table-wrapper" class="breakout">
57+
<dataset-selector
58+
src="data/test.dataset.json"
7359
locale="nl-NL"
7460
margin-labels="Total;Totaal;Subtotal"
7561
>
76-
</data-viewer>
62+
</dataset-selector>
7763
</div>
7864
<h3>Event</h3>
7965
<div id="event-display"><pre><code></code></pre></div>
8066
</section>
8167
<section id="html">
8268
<h2>HTML</h2>
8369
<pre><code class="language-html">&lt;!-- html --&gt;
84-
&lt;data-viewer src="data/example.json" locale="nl-NL"&gt;&lt;/data-viewer&gt;</code></pre>
70+
&lt;flatbread-table src="data/example.json" locale="nl-NL"&gt;&lt;/flatbread-table&gt;</code></pre>
8571
</section>
8672
<section id="specifications">
8773
<h2>Specifications</h2>
8874
<h3>Attributes</h3>
89-
<data-viewer
75+
<flatbread-table
9076
src="data/attributes.json"
9177
class="info-table"
9278
hide-settings-menu
9379
hide-index-border
9480
hide-row-borders
9581
section-levels="1"
96-
></data-viewer>
82+
></flatbread-table>
9783
<h3>CSS hooks</h3>
98-
<data-viewer
84+
<flatbread-table
9985
src="data/css_hooks.json"
10086
class="info-table"
10187
hide-settings-menu
10288
hide-index-border
10389
hide-row-borders
10490
section-levels="1"
105-
></data-viewer>
91+
></flatbread-table>
10692
<h3>Events</h3>
10793
<table>
10894
<thead>
@@ -208,6 +194,7 @@ <h4>Example Multi-Level Structure</h4>
208194
}</code></pre>
209195
</section>
210196
<script src="src/viewer.js" type="module"></script>
197+
<script src="src/components/dataset-selector.js" type="module"></script>
211198
<script src="static/js/demo.js" type="module"></script>
212199
</body>
213200
</html>

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ A lightweight vanilla JavaScript web component for displaying structured table d
2323
## Basic Usage
2424

2525
```html
26-
<data-viewer src="data.json"></data-viewer>
26+
<flatbread-table src="data.json"></flatbread-table>
2727
```
2828

2929
## Example Output

src/components/dataset-selector.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ export class DatasetSelector extends HTMLElement {
456456
this.addFilterEventListeners()
457457

458458
// Create and append the data-viewer
459-
const viewer = document.createElement("data-viewer")
459+
const viewer = document.createElement("flatbread-table")
460460
this.shadowRoot.querySelector(".viewer-container").appendChild(viewer)
461461
this.dataViewer = viewer
462462
this.forwardInitialAttributes()

src/components/modal-element.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class ModalElement extends DraggableMixin(HTMLElement) {
2020
// Find and store data-viewer reference first
2121
let node = this
2222
while (node) {
23-
if (node instanceof HTMLElement && node.tagName.toLowerCase() === "data-viewer") {
23+
if (node instanceof HTMLElement && node.tagName.toLowerCase() === "flatbread-table") {
2424
this.dataViewer = node
2525
break
2626
}

src/viewer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Data } from "./data.js"
22
import { SettingsContainer } from "./settings/settings-container.js"
3-
import { DataTable } from "./table.js"
3+
import "./table.js"
44

55
export class DataViewer extends HTMLElement {
66
static get observedAttributes() {
@@ -351,4 +351,4 @@ export class DataViewer extends HTMLElement {
351351
}
352352
}
353353

354-
window.customElements.define('data-viewer', DataViewer)
354+
window.customElements.define('flatbread-table', DataViewer)

static/js/demo.js

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Demo {
22
constructor() {
3-
this.handleDataSourceChange = this.handleDataSourceChange.bind(this)
3+
// Remove handleDataSourceChange since DatasetSelector handles this
44
this.handleCellClick = this.handleCellClick.bind(this)
55
this.handleDataChanged = this.handleDataChanged.bind(this)
66

@@ -9,41 +9,28 @@ class Demo {
99

1010
// MARK: setup
1111
setupEventListeners() {
12-
this.setupControlEvents()
13-
this.setupViewerEvents()
14-
}
15-
16-
setupControlEvents() {
17-
document.getElementById("src").addEventListener("change", this.handleDataSourceChange)
12+
// Don't need to set up source change event anymore
1813
document.getElementById("n").addEventListener("change", event => {
1914
this.updateTable(event.target.value)
2015
})
16+
17+
// Set up event listeners for the DataViewer events
18+
this.setupViewerEvents()
2119
}
2220

2321
setupViewerEvents() {
24-
if (!this.dataViewer) return
22+
if (!this.datasetSelector) return
2523

26-
this.dataViewer.addEventListener("cell-click", this.handleCellClick)
27-
this.dataViewer.addEventListener("data-changed", this.handleDataChanged)
24+
this.datasetSelector.addEventListener("cell-click", this.handleCellClick)
25+
this.datasetSelector.addEventListener("data-changed", this.handleDataChanged)
2826
}
2927

3028
// MARK: get/set
31-
get wrapper() { return document.getElementById("data-viewer-wrapper") }
32-
get dataViewer() { return this.wrapper.querySelector("data-viewer") }
29+
get wrapper() { return document.getElementById("flatbread-table-wrapper") }
30+
get datasetSelector() { return this.wrapper.querySelector("dataset-selector") }
3331
get eventDisplay() { return document.getElementById("event-display") }
3432

3533
// MARK: handlers
36-
handleDataSourceChange() {
37-
this.dataViewer?.remove()
38-
39-
const viewer = document.createElement("data-viewer")
40-
viewer.setAttribute("src", event.target.value)
41-
viewer.setAttribute("margin-labels", "Total;Totaal;Subtotal")
42-
43-
this.wrapper.appendChild(viewer)
44-
this.addDataViewerEventListeners()
45-
}
46-
4734
handleCellClick(event) {
4835
this.eventDisplay.querySelector("code").innerText = JSON.stringify(event.detail)
4936
}
@@ -55,11 +42,6 @@ class Demo {
5542
}
5643

5744
// MARK: helpers
58-
addDataViewerEventListeners() {
59-
this.dataViewer.addEventListener("cell-click", this.handleCellClick)
60-
this.dataViewer.addEventListener("data-changed", this.handleDataChanged)
61-
}
62-
6345
truncateJSONString(JSONString, maxLength = 1500) {
6446
if (JSONString.length <= maxLength) return JSONString
6547
return JSONString.slice(0, maxLength) + "[...]"
@@ -79,18 +61,12 @@ class Demo {
7961

8062
updateTable(n) {
8163
const op = this.getCalculation(n)
82-
const newValues = this.dataViewer.data.values.map(row => row.map(op))
83-
this.dataViewer.data.values = newValues
84-
}
64+
const viewer = this.datasetSelector.getViewer()
8565

86-
resetAttributes(element, attributesToKeep) {
87-
const attributes = [...element.attributes]
88-
attributes.forEach(attr => {
89-
if (!attributesToKeep.includes(attr.name)) {
90-
element.removeAttribute(attr.name)
91-
}
92-
})
93-
return element
66+
if (viewer && viewer.data && viewer.data.values) {
67+
const newValues = viewer.data.values.map(row => row.map(op))
68+
viewer.data.values = newValues
69+
}
9470
}
9571
}
9672

0 commit comments

Comments
 (0)