@loadbare/app 0.8.2 → 0.10.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/README.md +3 -3
- package/dist/build/assemble.d.ts.map +1 -1
- package/dist/build/assemble.js +74 -66
- package/dist/build/assemble.js.map +1 -1
- package/dist/build/expand.d.ts.map +1 -1
- package/dist/build/expand.js +20 -19
- package/dist/build/expand.js.map +1 -1
- package/dist/build/locations.d.ts +2 -3
- package/dist/build/locations.d.ts.map +1 -1
- package/dist/build/locations.js +2 -3
- package/dist/build/locations.js.map +1 -1
- package/dist/build/pages.d.ts +3 -4
- package/dist/build/pages.d.ts.map +1 -1
- package/dist/build/pages.js +3 -4
- package/dist/build/pages.js.map +1 -1
- package/dist/core/lb-constants.d.ts +25 -23
- package/dist/core/lb-constants.d.ts.map +1 -1
- package/dist/core/lb-constants.js +95 -158
- package/dist/core/lb-constants.js.map +1 -1
- package/dist/core/lb-types.d.ts +73 -75
- package/dist/core/lb-types.d.ts.map +1 -1
- package/dist/core/lb-types.js +58 -5
- package/dist/core/lb-types.js.map +1 -1
- package/dist/hub/lb-apply.d.ts +47 -37
- package/dist/hub/lb-apply.d.ts.map +1 -1
- package/dist/hub/lb-apply.js +174 -193
- package/dist/hub/lb-apply.js.map +1 -1
- package/dist/hub/lb-hub.browser.d.ts +1 -1
- package/dist/hub/lb-hub.browser.d.ts.map +1 -1
- package/dist/hub/lb-hub.browser.js +419 -415
- package/dist/hub/lb-hub.browser.js.map +1 -1
- package/dist/server/lb-express.d.ts +20 -13
- package/dist/server/lb-express.d.ts.map +1 -1
- package/dist/server/lb-express.js +50 -52
- package/dist/server/lb-express.js.map +1 -1
- package/dist/server/lb-server.d.ts +81 -116
- package/dist/server/lb-server.d.ts.map +1 -1
- package/dist/server/lb-server.js +151 -48
- package/dist/server/lb-server.js.map +1 -1
- package/docs/TECHREF-1.0.md +893 -558
- package/docs/comparison.md +222 -185
- package/docs/prior-art.md +15 -14
- package/docs/reference/builder.md +9 -3
- package/docs/reference/chrome.md +107 -56
- package/docs/reference/custom-elements.md +199 -173
- package/docs/reference/data-binding.md +375 -370
- package/docs/reference/overview.md +12 -10
- package/docs/reference/page-files.md +161 -86
- package/docs/reference/server.md +13 -7
- package/docs/reference/widgets.md +104 -110
- package/docs/roadmap.md +36 -31
- package/docs/terms-of-art.md +57 -0
- package/docs/testing.md +97 -68
- package/docs/theory.md +92 -58
- package/docs/tutorials/010-pages-and-navigation.md +20 -12
- package/docs/tutorials/020-css.md +6 -3
- package/docs/tutorials/030-html-decomposition.md +9 -7
- package/docs/tutorials/040-displaying-data.md +30 -13
- package/docs/tutorials/{050-actions.md → 050-requests.md} +25 -15
- package/docs/tutorials/060-custom-element-code.md +17 -16
- package/docs/tutorials/065-conditional-rendering.md +34 -23
- package/docs/tutorials/070-displaying-a-list.md +29 -21
- package/docs/tutorials/072-inserting-into-a-list.md +24 -16
- package/docs/tutorials/074-deleting-from-a-list.md +9 -7
- package/docs/tutorials/076-updating-a-list-item.md +11 -10
- package/docs/tutorials/080-widget-requests.md +71 -43
- package/docs/tutorials/090-using-widget-libraries.md +22 -22
- package/package.json +1 -1
- package/skills/loadbare-app/SKILL.md +178 -111
- package/skills/loadbare-app/references/TECHREF-1.0.md +893 -558
- package/skills/loadbare-app/references/builder.md +9 -3
- package/skills/loadbare-app/references/chrome.md +107 -56
- package/skills/loadbare-app/references/custom-elements.md +199 -173
- package/skills/loadbare-app/references/data-binding.md +375 -370
- package/skills/loadbare-app/references/overview.md +12 -10
- package/skills/loadbare-app/references/page-files.md +161 -86
- package/skills/loadbare-app/references/server.md +13 -7
- package/skills/loadbare-app/references/widgets.md +104 -110
- package/docs/analysis-accidental-complexity.md +0 -149
- package/docs/analysis-closed-set.md +0 -210
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
# The Basic Widget Library
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
`lb-
|
|
5
|
-
|
|
6
|
-
definition
|
|
7
|
-
nothing here is special-cased machinery.
|
|
3
|
+
Six widgets: `lb-input`, `lb-select`, `lb-options`, `lb-picker`, `lb-table`,
|
|
4
|
+
`lb-unknown-page`. Every one of them is an ordinary custom element, written
|
|
5
|
+
against the contracts in [Custom Elements](./custom-elements.md#html) for its
|
|
6
|
+
definition and [Custom Elements](./custom-elements.md#code) for its class.
|
|
8
7
|
|
|
9
8
|
They ship compiled, in `@loadbare/widgets`, a package the builder resolves the
|
|
10
|
-
way it resolves
|
|
9
|
+
way it resolves any other: it declares `"loadbare": { "widgets": "./dist" }`
|
|
11
10
|
and the builder scans that. Install it and list it:
|
|
12
11
|
|
|
13
12
|
```
|
|
@@ -23,140 +22,133 @@ See [Widgets from packages](./builder.md#widgets-from-packages) for what
|
|
|
23
22
|
listing a package does, and [The Builder](./builder.md#where-the-builder-looks)
|
|
24
23
|
for where a listed package sits in the cascade.
|
|
25
24
|
|
|
25
|
+
`lb-input`, `lb-select`, `lb-options` and `lb-picker` are controls:
|
|
26
|
+
form-associated custom elements with a `value` property that fire `change`.
|
|
27
|
+
Each carries `lb-column` and `lb-request` itself, the way an `<input>` does;
|
|
28
|
+
see [Being a control](./custom-elements.md#being-a-control).
|
|
29
|
+
|
|
26
30
|
## `lb-input`
|
|
27
31
|
|
|
28
|
-
Wraps an `<input>`. `
|
|
29
|
-
|
|
30
|
-
reserved `lb-row-update` saves the input's own cell; any other name sends that
|
|
31
|
-
action. Either carries the input's value, and the hub adds the scope the
|
|
32
|
-
input sits in.
|
|
32
|
+
Wraps an `<input>`. The hub sets its `value` from the column `lb-column`
|
|
33
|
+
names, and `lb-request` names what the widget sends on `change`:
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
```html
|
|
36
|
+
<lb-input lb-column="name" lb-request="lb-row-update" exp-label="Name"></lb-input>
|
|
37
|
+
```
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| `exp-readonly` | the input's `readonly` attribute |
|
|
39
|
+
Inside a form, leave `lb-request` off. The form gathers the widget on submit
|
|
40
|
+
like any other control, so a widget that also sent its own request would
|
|
41
|
+
write the same edit twice.
|
|
42
42
|
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
| `
|
|
43
|
+
| Parameter | Fills |
|
|
44
|
+
|----------------|----------------------------------|
|
|
45
|
+
| `exp-label` | The visible `<label>` text |
|
|
46
|
+
| `exp-readonly` | The input's `readonly` attribute |
|
|
46
47
|
|
|
47
48
|
## `lb-select`
|
|
48
49
|
|
|
49
|
-
Wraps a `<select>` whose `<option>`s the
|
|
50
|
-
`lb-slot`). `lb-value` sets the select's `.value`; a `change` sends the
|
|
51
|
-
action named by `lb-action`, with the select's `.value` as the request's
|
|
52
|
-
`value` — the choice is the interaction, so this is the case where an
|
|
53
|
-
action carries a value.
|
|
50
|
+
Wraps a `<select>` whose `<option>`s the page writes inside the tag:
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
```html
|
|
53
|
+
<lb-select lb-column="team" lb-request="lb-row-update" exp-label="Team">
|
|
54
|
+
<option value="">No team</option>
|
|
55
|
+
<option value="Engines">Engines</option>
|
|
56
|
+
</lb-select>
|
|
57
|
+
```
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
| Parameter | Fills |
|
|
60
|
+
|-------------|----------------------------|
|
|
61
|
+
| `exp-label` | The visible `<label>` text |
|
|
61
62
|
|
|
62
63
|
## `lb-options`
|
|
63
64
|
|
|
64
|
-
A `<select>` whose `<option>`s
|
|
65
|
-
|
|
66
|
-
`lb-slot`), same as any list widget:
|
|
65
|
+
A `<select>` whose `<option>`s are the rows of the query it names. The page
|
|
66
|
+
writes the row template inside the widget:
|
|
67
67
|
|
|
68
68
|
```html
|
|
69
|
-
<lb-options lb-
|
|
70
|
-
<template
|
|
71
|
-
<option lb-
|
|
69
|
+
<lb-options lb-query="statuses" lb-column="status" lb-request="lb-row-update" exp-label="Status">
|
|
70
|
+
<template data-group="category">
|
|
71
|
+
<option lb-column="label"></option>
|
|
72
72
|
</template>
|
|
73
73
|
</lb-options>
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
| Parameter
|
|
77
|
-
|
|
78
|
-
| `exp-label` |
|
|
76
|
+
| Parameter | Fills |
|
|
77
|
+
|-------------|----------------------------|
|
|
78
|
+
| `exp-label` | The visible `<label>` text |
|
|
79
79
|
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
once, with `lb-key`.
|
|
80
|
+
- Each option's `value` is its row's key, the `lb-key-value` the hub stamps
|
|
81
|
+
on the live row, so the widget holds a key and shows a label.
|
|
83
82
|
- `data-group` on the row template sections the options into `<optgroup>`s,
|
|
84
|
-
one per distinct value,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
one per distinct value of that column, added and removed as rows arrive
|
|
84
|
+
and leave.
|
|
85
|
+
- Its `value` selects the option with that key, including an option that
|
|
86
|
+
arrives after the value did.
|
|
87
|
+
|
|
88
|
+
`lb-picker` is the same class with the row template supplied by its
|
|
89
|
+
definition.
|
|
90
|
+
|
|
91
|
+
## `lb-picker`
|
|
92
|
+
|
|
93
|
+
`lb-options`, with the row template built in, for a list where every row is
|
|
94
|
+
one option showing one column:
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<lb-picker
|
|
98
|
+
lb-query="statuses"
|
|
99
|
+
lb-column="status"
|
|
100
|
+
lb-request="lb-row-update"
|
|
101
|
+
exp-label="Status"
|
|
102
|
+
exp-column="label"
|
|
103
|
+
exp-group="category"
|
|
104
|
+
></lb-picker>
|
|
105
|
+
```
|
|
90
106
|
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
| Parameter | Fills |
|
|
108
|
+
|--------------|-----------------------------------------|
|
|
109
|
+
| `exp-label` | The visible `<label>` text |
|
|
110
|
+
| `exp-column` | The column each option shows |
|
|
111
|
+
| `exp-group` | The row template's `data-group` |
|
|
112
|
+
|
|
113
|
+
An option built from two columns, or a row with a second element, is
|
|
114
|
+
`lb-options` with the page's own row template.
|
|
93
115
|
|
|
94
116
|
## `lb-table`
|
|
95
117
|
|
|
96
|
-
A `<table>` that supplies its own scaffolding
|
|
97
|
-
|
|
98
|
-
`<template>` matched to a destination:
|
|
118
|
+
A `<table>` that supplies its own scaffolding. The page supplies the heading
|
|
119
|
+
row, the row template, and optionally a footer, each as a `<template>`:
|
|
99
120
|
|
|
100
121
|
```html
|
|
101
|
-
<lb-table lb-
|
|
102
|
-
<template lb-template="head">
|
|
122
|
+
<lb-table lb-query="ledger" exp-caption="Ledger">
|
|
123
|
+
<template lb-exp-template="head">
|
|
103
124
|
<tr><th>Date</th><th>Amount</th></tr>
|
|
104
125
|
</template>
|
|
105
|
-
<template
|
|
106
|
-
<tr><td lb-
|
|
126
|
+
<template data-sort="date" data-group="month">
|
|
127
|
+
<tr><td lb-column="date"></td><td lb-column="amount"></td></tr>
|
|
107
128
|
</template>
|
|
108
|
-
<template lb-template="foot">
|
|
109
|
-
<tr lb-
|
|
129
|
+
<template lb-exp-template="foot">
|
|
130
|
+
<tr lb-query="ledger-total"><td>Total</td><td lb-column="total"></td></tr>
|
|
110
131
|
</template>
|
|
111
132
|
</lb-table>
|
|
112
133
|
```
|
|
113
134
|
|
|
114
|
-
| Parameter
|
|
115
|
-
|
|
116
|
-
| `exp-caption` |
|
|
117
|
-
|
|
118
|
-
| Destination | Fills |
|
|
119
|
-
| ------------ | ----- |
|
|
120
|
-
| `head` (`lb-template="head"`) | the `<thead>` content |
|
|
121
|
-
| `foot` (`lb-template="foot"`) | the `<tfoot>` content |
|
|
122
|
-
| slot (no `lb-template`) | the row template, via `lb-slot` on `<tbody>` |
|
|
123
|
-
|
|
124
|
-
- `data-group` on the row template sections rows under a derived heading row,
|
|
125
|
-
one per distinct value, whose `colSpan` matches the row's own column
|
|
126
|
-
count. `data-sort` orders rows within a section (or the whole body, with no
|
|
127
|
-
grouping) by comparing each row's cell text.
|
|
128
|
-
- The `foot` destination is not delivered through `lbPlaceRow` — it's an
|
|
129
|
-
ordinary scope carrying its own `lb-row`, resolved by name like any
|
|
130
|
-
other on the page. A grand total is a second query over the same
|
|
131
|
-
data, not a row the hub hands the table.
|
|
132
|
-
|
|
133
|
-
## `lb-picker`
|
|
134
|
-
|
|
135
|
-
`lb-options`, with the row template supplied by the definition instead of
|
|
136
|
-
the page — for when every row is one option and nothing else varies:
|
|
137
|
-
|
|
138
|
-
```html
|
|
139
|
-
<lb-picker
|
|
140
|
-
lb-list="statuses"
|
|
141
|
-
exp-label="Status"
|
|
142
|
-
exp-key="id"
|
|
143
|
-
exp-cell="label"
|
|
144
|
-
exp-group="category"
|
|
145
|
-
lb-action="setStatus"
|
|
146
|
-
></lb-picker>
|
|
147
|
-
```
|
|
135
|
+
| Parameter | Fills |
|
|
136
|
+
|---------------|----------------------|
|
|
137
|
+
| `exp-caption` | The `<caption>` text |
|
|
148
138
|
|
|
149
|
-
|
|
|
150
|
-
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
| `exp-group` | the row template's `data-group` |
|
|
139
|
+
| Template | Fills |
|
|
140
|
+
|-----------------------------------|-----------------------------------------|
|
|
141
|
+
| `<template lb-exp-template="head">` | The `<thead>` |
|
|
142
|
+
| `<template lb-exp-template="foot">` | The `<tfoot>` |
|
|
143
|
+
| Any other `<template>` | The row template, in the `<tbody>` |
|
|
155
144
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
145
|
+
- `data-group` on the row template sections rows under a heading row, one
|
|
146
|
+
per distinct value of that column, spanning every column of the row.
|
|
147
|
+
- `data-sort` orders rows within a section, or within the whole body with no
|
|
148
|
+
grouping, by the text of that column.
|
|
149
|
+
- The footer is not a row of `ledger`. Its `<tr>` names a `row` query of its
|
|
150
|
+
own, which lands on the `<tr>` itself. A grand total is a second query over
|
|
151
|
+
the same data.
|
|
160
152
|
|
|
161
153
|
## `lb-unknown-page`
|
|
162
154
|
|
|
@@ -170,9 +162,11 @@ The chrome's dialog for a URL that names no page, as one tag:
|
|
|
170
162
|
</lb-hub>
|
|
171
163
|
```
|
|
172
164
|
|
|
173
|
-
It expands to a `<dialog lb-unknown-
|
|
174
|
-
`lb-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
165
|
+
It expands to a `<dialog lb-url-unknown lb-query="lb-url">` showing
|
|
166
|
+
`lb-path`, and the hub opens it when no page's stub matches the path. See
|
|
167
|
+
[An unknown page](./chrome.md#an-unknown-page) for the same dialog written
|
|
168
|
+
by hand.
|
|
169
|
+
|
|
170
|
+
| Parameter | Fills |
|
|
171
|
+
|-------------------|------------------------------------------|
|
|
172
|
+
| `exp-button-text` | The text of the button that closes it, `OK` by default |
|
package/docs/roadmap.md
CHANGED
|
@@ -17,23 +17,36 @@ wrong thing. Revisit when the described symptom actually shows up.
|
|
|
17
17
|
|
|
18
18
|
### Staleness and concurrent writers
|
|
19
19
|
|
|
20
|
-
Two tabs, or two users, updating the same
|
|
20
|
+
Two tabs, or two users, updating the same rows at once. A solo developer
|
|
21
21
|
testing in one browser will not produce this by accident, and retrofitting a
|
|
22
22
|
version or conflict check onto every row after the fact touches every widget
|
|
23
23
|
that writes.
|
|
24
24
|
|
|
25
25
|
### Nesting
|
|
26
26
|
|
|
27
|
-
Whether a row may
|
|
27
|
+
Whether a live row may hold rows of its own detail (master-detail, an
|
|
28
|
+
expanding row). [Theory](./theory.md) already flags this as possibly load-bearing if
|
|
28
29
|
disallowed. Worth a decision-in-principle the first time a master-detail
|
|
29
30
|
page is built, even before the mechanism is needed elsewhere.
|
|
30
31
|
|
|
31
32
|
### Pending appearance
|
|
32
33
|
|
|
33
34
|
A value that hasn't arrived yet is probably derivable from an absent
|
|
34
|
-
`lb-value` rather than needing a signal of its own. Not yet needed because
|
|
35
|
+
`lb-column-value` rather than needing a signal of its own. Not yet needed because
|
|
35
36
|
nothing currently produces that gap in practice — revisit if one does.
|
|
36
37
|
|
|
38
|
+
### Events while a request is in flight
|
|
39
|
+
|
|
40
|
+
The hub ignores a commit on an element carrying `lb-request-pending`.
|
|
41
|
+
Nothing holds back any other element, so two round trips can be out at once
|
|
42
|
+
and the one that answers last is what lands, whichever the user started
|
|
43
|
+
last.
|
|
44
|
+
|
|
45
|
+
A control that commits on `change` while its own round trip is in flight has
|
|
46
|
+
that change ignored, so its latest value is not sent. Whether the hub should
|
|
47
|
+
send it once the round trip settles, and whether it should refuse every
|
|
48
|
+
commit while anything is in flight, is open.
|
|
49
|
+
|
|
37
50
|
### Validation placement
|
|
38
51
|
|
|
39
52
|
Per-keystroke feedback cannot afford a round trip, so some validation will
|
|
@@ -97,15 +110,15 @@ enough to measure.
|
|
|
97
110
|
|
|
98
111
|
### Data binding utilities
|
|
99
112
|
|
|
100
|
-
|
|
101
|
-
`lb-key-value
|
|
113
|
+
A custom element that finds its own nearest ancestor `lb-query`,
|
|
114
|
+
`lb-key-value` or `lb-column` repeats code that is present in the hub.
|
|
102
115
|
|
|
103
|
-
Perhaps a utility that can be called, like `
|
|
104
|
-
|
|
116
|
+
Perhaps a utility that can be called, like `nearestRow(el)`, to help clean up
|
|
117
|
+
the code in these cases.
|
|
105
118
|
|
|
106
119
|
### Refresh narrowed by query parm
|
|
107
120
|
|
|
108
|
-
A query parm write
|
|
121
|
+
A query parm write reloads every query of the page at once. Keyed
|
|
109
122
|
landing keeps the rows that came back, so nothing on screen is disturbed, but
|
|
110
123
|
the server does work for queries the parm never touched.
|
|
111
124
|
|
|
@@ -115,21 +128,21 @@ only the queries that read one of them, and still remember nothing.
|
|
|
115
128
|
|
|
116
129
|
### Query parm history as a user preference
|
|
117
130
|
|
|
118
|
-
A query parm write replaces the history entry, and `lb-
|
|
119
|
-
|
|
131
|
+
A query parm write replaces the history entry, and `lb-url-push` pushes
|
|
132
|
+
one. Which of the two a user wants may be the user's to say, rather
|
|
120
133
|
than the page's.
|
|
121
134
|
|
|
122
|
-
### Build-time checking of `lb-
|
|
135
|
+
### Build-time checking of `lb-request` against the declared requests
|
|
123
136
|
|
|
124
|
-
Release 1.0 resolves every `lb-
|
|
125
|
-
no entry under `
|
|
126
|
-
under `crud`, is found on the first
|
|
127
|
-
empty answer, described in
|
|
137
|
+
Release 1.0 resolves every `lb-request` value at request time. A value naming
|
|
138
|
+
no entry under `handlers`, or one of the requests Loadbare provides for a
|
|
139
|
+
query with no entry under `crud`, is found on the first commit: a server
|
|
140
|
+
console warning and an empty answer, described in
|
|
128
141
|
[Page files](./reference/page-files.md). A typo builds cleanly.
|
|
129
142
|
|
|
130
143
|
The builder already expands each page and walks the finished document in
|
|
131
|
-
`
|
|
132
|
-
|
|
144
|
+
`walkMarkup`, tracking the enclosing `lb-query`, so collecting every request
|
|
145
|
+
name together with the query it is issued for needs no new machinery. What
|
|
133
146
|
it lacks is the other half of the comparison: it knows the path of a
|
|
134
147
|
`.requests.ts` file and never reads its contents.
|
|
135
148
|
|
|
@@ -143,23 +156,15 @@ Two routes to the declared names, and the choice is the decision:
|
|
|
143
156
|
API. No application code runs, at the price of a real dependency and of
|
|
144
157
|
guessing wrong on anything not written as a plain object literal.
|
|
145
158
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
no requests file makes any
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
down.
|
|
159
|
+
Two smaller calls come with either route. The chrome belongs to no page, so
|
|
160
|
+
a request there can only be required of every page or forbidden. A page with
|
|
161
|
+
no requests file makes any request on it an error. The check is sound
|
|
162
|
+
because the developer writes `lb-*` attributes in markup and script never
|
|
163
|
+
assigns them.
|
|
152
164
|
|
|
153
|
-
|
|
154
|
-
are separate artifacts and the comparison belongs to `createHub`. The same
|
|
155
|
-
machinery would then also let `lb-list` and `lb-row` names be checked against
|
|
165
|
+
The same machinery would then also let `lb-query` names be checked against
|
|
156
166
|
the declared queries.
|
|
157
167
|
|
|
158
|
-
One piece is separable and needs none of the above: an `lb-action` beginning
|
|
159
|
-
with `lb-` that names none of the three operations is a typo the builder can
|
|
160
|
-
refuse from markup alone. `LB_ACTIONS` in `core/lb-constants.ts` exists for
|
|
161
|
-
this, and the builder does not yet import it.
|
|
162
|
-
|
|
163
168
|
### A language server
|
|
164
169
|
|
|
165
170
|
...for Loadbare HTML.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Terms of art
|
|
2
|
+
|
|
3
|
+
This document uses these terms exactly as their specs define them.
|
|
4
|
+
|
|
5
|
+
DOM:
|
|
6
|
+
- element: a node with a name and attributes
|
|
7
|
+
- attribute: a name-value pair on an element
|
|
8
|
+
- attribute value: the string an attribute holds
|
|
9
|
+
- ancestor: a parent, or a parent's ancestor
|
|
10
|
+
- descendant: a child, or a child's descendant
|
|
11
|
+
- content: the child nodes of an element
|
|
12
|
+
- text content: the data of all descendant text nodes
|
|
13
|
+
- clone: a copy of a node and descendants
|
|
14
|
+
- event: an object dispatched to signal an occurrence
|
|
15
|
+
- bubbles: the event also dispatches to each ancestor
|
|
16
|
+
- abort: stop an operation through its AbortSignal
|
|
17
|
+
|
|
18
|
+
HTML:
|
|
19
|
+
- control: an `<input>`, `<select>` or `<textarea>`, or a form-associated
|
|
20
|
+
custom element with a `value` property that fires `change`
|
|
21
|
+
- control value: the current value of a control
|
|
22
|
+
- custom element: an element defined by `customElements.define`
|
|
23
|
+
- form-associated custom element: a custom element declaring
|
|
24
|
+
`static formAssociated = true`
|
|
25
|
+
- `<template>`: an element holding inert content for cloning
|
|
26
|
+
- `<title>`: the element holding a document's title
|
|
27
|
+
- document title: the title the tab and session history show
|
|
28
|
+
- click: the event an element's activation fires
|
|
29
|
+
- submit: the event a form's submission fires
|
|
30
|
+
- submitter: the submit button that submitted a form
|
|
31
|
+
- change: the event a committed control edit fires
|
|
32
|
+
- reset: restore a form's controls to defaults
|
|
33
|
+
- form owner: the form a control is associated with
|
|
34
|
+
- `form` attribute: names a form owner by id, from anywhere
|
|
35
|
+
- `href`: the attribute holding a link's URL
|
|
36
|
+
- history entry: one entry in the session history
|
|
37
|
+
- push: add a session history entry
|
|
38
|
+
- replace: change the current session history entry
|
|
39
|
+
|
|
40
|
+
URL:
|
|
41
|
+
- path: the slash-separated segments after the host
|
|
42
|
+
- query parm: a name-value pair in the URL's query
|
|
43
|
+
|
|
44
|
+
HTTP:
|
|
45
|
+
- request: the message a client sends a server
|
|
46
|
+
- response: the message a server returns for a request
|
|
47
|
+
|
|
48
|
+
JSON:
|
|
49
|
+
- object: zero or more members between braces
|
|
50
|
+
- member: one name-value pair of an object
|
|
51
|
+
- array: an ordered sequence of values
|
|
52
|
+
- null, true, false: literal values
|
|
53
|
+
|
|
54
|
+
SQL:
|
|
55
|
+
- row: one record of a result set
|
|
56
|
+
- column: a named field of every row
|
|
57
|
+
- key: a column whose value identifies one row
|