htmx.org 4.0.0-alpha1 → 4.0.0-alpha3
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 +1 -1
- package/dist/editors/jetbrains/htmx.svg +46 -0
- package/dist/editors/jetbrains/htmx_dark.svg +46 -0
- package/dist/ext/hx-live.js +624 -0
- package/dist/ext/hx-live.min.js +1 -0
- package/dist/ext/hx-live.min.js.map +1 -0
- package/dist/ext/hx-optimistic.js +81 -0
- package/dist/ext/hx-optimistic.min.js +1 -0
- package/dist/ext/hx-optimistic.min.js.map +1 -0
- package/dist/ext/hx-preload.js +83 -0
- package/dist/ext/hx-preload.min.js +1 -0
- package/dist/ext/hx-preload.min.js.map +1 -0
- package/dist/htmx.esm.js +368 -359
- package/dist/htmx.esm.min.js +1 -1
- package/dist/htmx.esm.min.js.map +1 -0
- package/dist/htmx.js +362 -354
- package/dist/htmx.min.js +1 -1
- package/dist/htmx.min.js.map +1 -0
- package/package.json +16 -9
- package/dist/htmx.esm.js.br +0 -0
- package/dist/htmx.esm.min.js.br +0 -0
- package/dist/htmx.js.br +0 -0
- package/dist/htmx.min.js.br +0 -0
- /package/{src → dist}/editors/jetbrains/htmx.web-types.json +0 -0
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
htmxLive = (()=>{
|
|
2
|
+
|
|
3
|
+
class HtmxLive {
|
|
4
|
+
#mutationObserver = new MutationObserver((records) => this.#onMutation(records));
|
|
5
|
+
#dependencies = []
|
|
6
|
+
#actionSelector = "[hx-live]"
|
|
7
|
+
|
|
8
|
+
constructor() {
|
|
9
|
+
this.#initInternals()
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
observe(elt, properties, prototype) {
|
|
13
|
+
if (!elt.__htmxLiveObserved) {
|
|
14
|
+
elt.__htmxLiveObserved = true
|
|
15
|
+
for (const property of properties) {
|
|
16
|
+
let descriptor = Object.getOwnPropertyDescriptor(prototype, property);
|
|
17
|
+
Object.defineProperty(elt, property, {
|
|
18
|
+
get() {
|
|
19
|
+
return descriptor.get.call(this);
|
|
20
|
+
},
|
|
21
|
+
set(newValue) {
|
|
22
|
+
descriptor.set.call(this, newValue);
|
|
23
|
+
htmxLive.updated(this)
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#process(elt) {
|
|
32
|
+
if (elt.matches) {
|
|
33
|
+
if (elt.matches(this.#actionSelector)) {
|
|
34
|
+
this.#init(elt)
|
|
35
|
+
}
|
|
36
|
+
if (elt.matches('input')) {
|
|
37
|
+
this.observeInput(elt);
|
|
38
|
+
}
|
|
39
|
+
if (elt.matches('select')) {
|
|
40
|
+
this.observeSelect(elt);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (elt.querySelectorAll) {
|
|
44
|
+
elt.querySelectorAll(this.#actionSelector).forEach((elt) => this.#init(elt))
|
|
45
|
+
elt.querySelectorAll('input').forEach((elt) => this.observeInput(elt))
|
|
46
|
+
elt.querySelectorAll('select').forEach((elt) => this.observeSelect(elt))
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
observeSelect(elt) {
|
|
51
|
+
this.observe(elt, ['value', 'disabled'], HTMLSelectElement.prototype)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
observeInput(elt) {
|
|
55
|
+
this.observe(elt, ['value', 'checked', 'disabled'], HTMLInputElement.prototype)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#init(elt) {
|
|
59
|
+
if (!elt.__htmxLiveCode) {
|
|
60
|
+
elt.__htmxLiveCode = true
|
|
61
|
+
let liveCode = elt.getAttribute("hx-live");
|
|
62
|
+
let tokenizer = new Tokenizer(liveCode);
|
|
63
|
+
let parser = new Parser(tokenizer.tokenize());
|
|
64
|
+
let features = parser.parseFeatures();
|
|
65
|
+
for (const feature of features) {
|
|
66
|
+
feature.install(elt);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
registerDependency(bindFeature) {
|
|
72
|
+
this.#dependencies.push(bindFeature)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
#onMutation(records) {
|
|
76
|
+
|
|
77
|
+
for (let record of records) {
|
|
78
|
+
if(record.addedNodes.length > 0) {
|
|
79
|
+
this.#process(document.documentElement)
|
|
80
|
+
break
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let toRefresh = []
|
|
85
|
+
outer:
|
|
86
|
+
for (const dependency of this.#dependencies) {
|
|
87
|
+
for (let record of records) {
|
|
88
|
+
if (dependency.dependsOn(record.target)) {
|
|
89
|
+
toRefresh.push(dependency);
|
|
90
|
+
break outer;
|
|
91
|
+
}
|
|
92
|
+
for (const elt of record.addedNodes) {
|
|
93
|
+
if (dependency.dependsOn(elt)) {
|
|
94
|
+
toRefresh.push(dependency)
|
|
95
|
+
break outer;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
for (const elt of record.removedNodes) {
|
|
99
|
+
if (dependency.dependsOn(elt)) {
|
|
100
|
+
toRefresh.push(dependency)
|
|
101
|
+
break outer;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
for (const dependency of toRefresh) {
|
|
108
|
+
dependency.refresh()
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
updated(elt) {
|
|
114
|
+
let toRefresh = []
|
|
115
|
+
for (const dependency of this.#dependencies) {
|
|
116
|
+
if (dependency.dependsOn(elt)) {
|
|
117
|
+
toRefresh.push(dependency)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
for (const dependency of toRefresh) {
|
|
121
|
+
dependency.refresh()
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
#initInternals() {
|
|
126
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
127
|
+
document.addEventListener("input", (evt) => {
|
|
128
|
+
this.updated(evt.target);
|
|
129
|
+
})
|
|
130
|
+
this.#mutationObserver.observe(document.documentElement, {
|
|
131
|
+
childList: true,
|
|
132
|
+
subtree: true,
|
|
133
|
+
attributes: true,
|
|
134
|
+
characterData: true
|
|
135
|
+
})
|
|
136
|
+
this.#process(document.body)
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
let htmxLive = new HtmxLive();
|
|
142
|
+
|
|
143
|
+
class Tokenizer {
|
|
144
|
+
WHITESPACE = /\s/
|
|
145
|
+
SYNTAX = /[.()<>[\]+\-*\/]/
|
|
146
|
+
ALPHA = /[a-zA-Z]/
|
|
147
|
+
NUMERIC = /[0-9]/
|
|
148
|
+
|
|
149
|
+
constructor(src) {
|
|
150
|
+
this.src = src
|
|
151
|
+
this.offset = 0
|
|
152
|
+
this.prev = ''
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
tokenize() {
|
|
156
|
+
let tokens = []
|
|
157
|
+
while (this.more()) {
|
|
158
|
+
let token = this.nextToken()
|
|
159
|
+
if(token) tokens.push(token)
|
|
160
|
+
}
|
|
161
|
+
return tokens
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
more() {
|
|
165
|
+
return this.offset < this.src.length;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
peek(off = 0) {
|
|
169
|
+
return this.src[this.offset + off]
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
match(thing, char = this.peek()) {
|
|
173
|
+
if (this.more()) {
|
|
174
|
+
if(thing.test) {
|
|
175
|
+
return thing.test(char)
|
|
176
|
+
} else {
|
|
177
|
+
return thing === char
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
consume() {
|
|
183
|
+
this.prev = this.peek()
|
|
184
|
+
this.offset++
|
|
185
|
+
return this.prev
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
nextToken() {
|
|
189
|
+
// consume whitespace
|
|
190
|
+
if (this.match(this.WHITESPACE)) {
|
|
191
|
+
return this.consumeWhitespace();
|
|
192
|
+
} else if (!this.ALPHA.test(this.prev) &&
|
|
193
|
+
this.match('.') &&
|
|
194
|
+
this.match(this.ALPHA, this.peek(1))) {
|
|
195
|
+
return this.consumeClass();
|
|
196
|
+
} else if (this.match(this.SYNTAX)) {
|
|
197
|
+
return this.consumeSyntax();
|
|
198
|
+
} else if ("#" === this.peek()) {
|
|
199
|
+
return this.consumeId();
|
|
200
|
+
} else if (this.match(this.ALPHA)) {
|
|
201
|
+
return this.consumeSymbol();
|
|
202
|
+
} else if (this.match(this.NUMERIC)) {
|
|
203
|
+
return this.consumeNumber();
|
|
204
|
+
} else if (this.match('"') || this.match("'")) {
|
|
205
|
+
return this.consumeString();
|
|
206
|
+
} else {
|
|
207
|
+
throw "Unknown token : " + this.peek()
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
consumeSyntax() {
|
|
212
|
+
return {type:'syntax', val: this.consume()}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
consumeWhitespace() {
|
|
216
|
+
while (this.match(this.WHITESPACE)) {
|
|
217
|
+
this.consume();
|
|
218
|
+
}
|
|
219
|
+
return null
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
consumeId() {
|
|
223
|
+
let token = this.consume()
|
|
224
|
+
while (this.validCss(this.peek())) {
|
|
225
|
+
token += this.consume();
|
|
226
|
+
}
|
|
227
|
+
return {type:"id", val:token}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
consumeSymbol() {
|
|
231
|
+
let token = this.consume()
|
|
232
|
+
while (this.match(this.ALPHA)) {
|
|
233
|
+
token += this.consume();
|
|
234
|
+
}
|
|
235
|
+
return {type:"sym", val:token}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
consumeString() {
|
|
239
|
+
let start = this.consume()
|
|
240
|
+
let val = ""
|
|
241
|
+
while (!this.match(start) && this.more()) {
|
|
242
|
+
val += this.consume();
|
|
243
|
+
}
|
|
244
|
+
if(this.consume() !== start) throw "Unterminated string!";
|
|
245
|
+
return {type:"str", val:val}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
consumeNumber() {
|
|
249
|
+
let token = this.consume()
|
|
250
|
+
while (this.match(this.NUMERIC)) {
|
|
251
|
+
token += this.consume();
|
|
252
|
+
}
|
|
253
|
+
if (this.match(".")) {
|
|
254
|
+
token += this.consume();
|
|
255
|
+
while (this.match(this.NUMERIC)) {
|
|
256
|
+
token += this.consume();
|
|
257
|
+
}
|
|
258
|
+
return {type:"num", val:Number.parseFloat(token)};
|
|
259
|
+
} else {
|
|
260
|
+
return {type:"num", val:Number.parseInt(token)};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
consumeClass() {
|
|
265
|
+
let token = this.consume()
|
|
266
|
+
while (this.validCss(this.peek())) {
|
|
267
|
+
token += this.consume();
|
|
268
|
+
}
|
|
269
|
+
return {type:"class", val:token}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
validCss(c) {
|
|
273
|
+
return this.match(this.ALPHA, c) || this.match(this.NUMERIC, c) || c === "-" || c === "_" || c === ":";
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
//========================================================================================
|
|
278
|
+
// Live Features
|
|
279
|
+
//========================================================================================
|
|
280
|
+
class BindFeature {
|
|
281
|
+
constructor(lhs, rhs) {
|
|
282
|
+
this.lhs = lhs
|
|
283
|
+
this.rhs = rhs
|
|
284
|
+
this.cssDependences = []
|
|
285
|
+
rhs.deps(this.cssDependences)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
install(elt) {
|
|
289
|
+
this.elt = elt
|
|
290
|
+
htmxLive.registerDependency(this)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
async refresh() {
|
|
294
|
+
let runtime = {"this": this.elt}
|
|
295
|
+
this.elt[this.lhs.property.val] = await this.rhs.eval(runtime)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
dependsOn(elt) {
|
|
299
|
+
for (const css of this.cssDependences) {
|
|
300
|
+
if (elt.matches?.(css)) {
|
|
301
|
+
return true
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return false
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
class OnFeature {
|
|
309
|
+
constructor(event, commands) {
|
|
310
|
+
this.event = event
|
|
311
|
+
this.commands = commands
|
|
312
|
+
}
|
|
313
|
+
install(elt) {
|
|
314
|
+
this.elt = elt
|
|
315
|
+
elt.addEventListener(this.event.val, async (evt) => {
|
|
316
|
+
let runtime = {}
|
|
317
|
+
for (const command of this.commands) {
|
|
318
|
+
await command.execute(runtime)
|
|
319
|
+
}
|
|
320
|
+
})
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
class Bindable {
|
|
325
|
+
constructor(property) {
|
|
326
|
+
this.property = property
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
//========================================================================================
|
|
331
|
+
// Commands
|
|
332
|
+
//========================================================================================
|
|
333
|
+
|
|
334
|
+
class CallCommand {
|
|
335
|
+
constructor(functionCall) {
|
|
336
|
+
this.call = functionCall
|
|
337
|
+
}
|
|
338
|
+
execute(runtime) {
|
|
339
|
+
this.call.eval(runtime)
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
//========================================================================================
|
|
344
|
+
// Expressions
|
|
345
|
+
//========================================================================================
|
|
346
|
+
class AdditiveExpression {
|
|
347
|
+
constructor(token, lhs, rhs) {
|
|
348
|
+
this.token = token
|
|
349
|
+
this.lhs = lhs
|
|
350
|
+
this.rhs = rhs
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
async eval(runtime) {
|
|
354
|
+
let result = await this.lhs.eval(runtime) + await this.rhs.eval(runtime);
|
|
355
|
+
return result
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
deps(deps) {
|
|
359
|
+
this.lhs.deps?.(deps);
|
|
360
|
+
this.rhs.deps?.(deps);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
class StringLiteral {
|
|
365
|
+
constructor(token) {
|
|
366
|
+
this.token = token
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
async eval(runtime) {
|
|
370
|
+
return this.token.val
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
class IdLiteral {
|
|
375
|
+
constructor(token) {
|
|
376
|
+
this.token = token
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
async eval(runtime) {
|
|
380
|
+
return htmx.find(this.token.val)
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
deps(deps) {
|
|
384
|
+
deps.push(this.token.val);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
class Identifier {
|
|
389
|
+
constructor(token) {
|
|
390
|
+
this.token = token
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
async eval(runtime) {
|
|
394
|
+
return runtime[this.token.val] || window[this.token.val]
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
class PropertyAccess {
|
|
399
|
+
constructor(root, property) {
|
|
400
|
+
this.root = root
|
|
401
|
+
this.property = property
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
async eval(runtime) {
|
|
405
|
+
let root = await this.root.eval(runtime);
|
|
406
|
+
return root[this.property.val]
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
deps(deps) {
|
|
410
|
+
this.root?.deps(deps);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
class FunctionCall {
|
|
415
|
+
constructor(root, args) {
|
|
416
|
+
this.root = root
|
|
417
|
+
this.rootRoot = root.root
|
|
418
|
+
this.args = args
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
async eval(runtime) {
|
|
422
|
+
let rootRoot = null;
|
|
423
|
+
let func;
|
|
424
|
+
if (this.rootRoot) {
|
|
425
|
+
rootRoot = await this.rootRoot.eval(runtime);
|
|
426
|
+
func = rootRoot[this.root.property.val].bind(rootRoot);
|
|
427
|
+
} else {
|
|
428
|
+
func = await this.root.eval(runtime)
|
|
429
|
+
}
|
|
430
|
+
let args = []
|
|
431
|
+
for (const arg of this.args) {
|
|
432
|
+
args.push(await arg.eval(runtime))
|
|
433
|
+
}
|
|
434
|
+
return func.call(rootRoot, args)
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
deps(deps) {
|
|
438
|
+
this.root?.deps(deps);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
//========================================================================================
|
|
444
|
+
// Parser
|
|
445
|
+
//========================================================================================
|
|
446
|
+
class Parser {
|
|
447
|
+
constructor(tokens) {
|
|
448
|
+
this.tokens = tokens
|
|
449
|
+
this.current = 0
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
moreTokens() {
|
|
453
|
+
return this.current < this.tokens.length
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
matchAndConsume(term, type = "sym") {
|
|
457
|
+
if (this.match(term, type)) {
|
|
458
|
+
return this.consumeToken()
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
match(term, type) {
|
|
463
|
+
return (this.currentToken().val === term || term === null) &&
|
|
464
|
+
(this.currentToken().type === type || type === null);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
require(term, type = "sym") {
|
|
468
|
+
let match = this.matchAndConsume(term, type);
|
|
469
|
+
if (!match) throw "Expected: " + (term ? term : type) + " found " + JSON.stringify(this.currentToken());
|
|
470
|
+
return match
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
currentToken() {
|
|
474
|
+
let token = this.tokens[this.current];
|
|
475
|
+
return token || {type:null, val:null};
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
consumeToken() {
|
|
479
|
+
this.lastToken = this.currentToken();
|
|
480
|
+
this.current++
|
|
481
|
+
return this.lastToken
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
//======================================================
|
|
485
|
+
// Entry Point
|
|
486
|
+
//======================================================
|
|
487
|
+
parseFeatures() {
|
|
488
|
+
let features = []
|
|
489
|
+
while (this.moreTokens()) {
|
|
490
|
+
features.push(this.parseFeature())
|
|
491
|
+
}
|
|
492
|
+
return features
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
parseFeature() {
|
|
496
|
+
let bind = this.parseBind();
|
|
497
|
+
if(bind){
|
|
498
|
+
return bind;
|
|
499
|
+
}
|
|
500
|
+
let on = this.parseOn();
|
|
501
|
+
if(on){
|
|
502
|
+
return on;
|
|
503
|
+
}
|
|
504
|
+
throw "Unknown token: " + JSON.stringify(this.currentToken());
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
parseBind() {
|
|
508
|
+
if (this.matchAndConsume("bind")) {
|
|
509
|
+
let lhs = this.parseBindable();
|
|
510
|
+
this.require("to");
|
|
511
|
+
let rhs = this.parseExpression();
|
|
512
|
+
return new BindFeature(lhs, rhs)
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
parseOn() {
|
|
517
|
+
if (this.matchAndConsume("on")) {
|
|
518
|
+
let event = this.require(null, "sym");
|
|
519
|
+
let commands = this.parseCommands();
|
|
520
|
+
return new OnFeature(event, commands)
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
parseBindable() {
|
|
525
|
+
let property = this.require(null, "sym");
|
|
526
|
+
return new Bindable(property)
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
//======================================================
|
|
530
|
+
// Commands
|
|
531
|
+
//======================================================
|
|
532
|
+
|
|
533
|
+
parseCommands() {
|
|
534
|
+
let commands = []
|
|
535
|
+
while (this.moreTokens() && !this.endOfCommands()) {
|
|
536
|
+
commands.push(this.parseCommand())
|
|
537
|
+
}
|
|
538
|
+
return commands
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
endOfCommands() {
|
|
542
|
+
return this.matchAndConsume("end", "sym") ||
|
|
543
|
+
this.match("on") ||
|
|
544
|
+
this.match("bind");
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
parseCommand() {
|
|
548
|
+
let call = this.callCommand()
|
|
549
|
+
if(call) {
|
|
550
|
+
return call
|
|
551
|
+
}
|
|
552
|
+
throw "Unknown token: " + JSON.stringify(this.currentToken());
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
callCommand() {
|
|
556
|
+
if (this.matchAndConsume("call")) {
|
|
557
|
+
let expression = this.parseExpression();
|
|
558
|
+
if (expression instanceof FunctionCall) {
|
|
559
|
+
return new CallCommand(expression)
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
//======================================================
|
|
565
|
+
// Expressions
|
|
566
|
+
//======================================================
|
|
567
|
+
|
|
568
|
+
parseExpression() {
|
|
569
|
+
return this.parseAdditiveExpression();
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
parseAdditiveExpression() {
|
|
573
|
+
let lhs = this.parseIndirectExpression();
|
|
574
|
+
while (this.matchAndConsume("+", "syntax") || this.matchAndConsume("+", "syntax")) {
|
|
575
|
+
let rhs = this.parseIndirectExpression()
|
|
576
|
+
lhs = new AdditiveExpression(this.lastToken, lhs, rhs)
|
|
577
|
+
}
|
|
578
|
+
return lhs;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
parseIndirectExpression() {
|
|
582
|
+
let root = this.parsePrimaryExpression();
|
|
583
|
+
while (true) {
|
|
584
|
+
if (this.matchAndConsume(".", "syntax")) {
|
|
585
|
+
let property = this.require(null, "sym");
|
|
586
|
+
root = new PropertyAccess(root, property)
|
|
587
|
+
} else if (this.matchAndConsume("(", "syntax")) {
|
|
588
|
+
let args = []
|
|
589
|
+
if (!this.match(")")) {
|
|
590
|
+
do {
|
|
591
|
+
args.push(this.parseExpression());
|
|
592
|
+
} while (this.matchAndConsume(",", "syntax"))
|
|
593
|
+
}
|
|
594
|
+
this.require(")", "syntax")
|
|
595
|
+
root = new FunctionCall(root, args);
|
|
596
|
+
} else {
|
|
597
|
+
break
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
return root
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
parsePrimaryExpression() {
|
|
604
|
+
if (this.currentToken()?.type === "str") {
|
|
605
|
+
return new StringLiteral(this.consumeToken());
|
|
606
|
+
}
|
|
607
|
+
if (this.currentToken()?.type === "id") {
|
|
608
|
+
return new IdLiteral(this.consumeToken());
|
|
609
|
+
}
|
|
610
|
+
if (this.currentToken()?.type === "sym") {
|
|
611
|
+
return new Identifier(this.consumeToken());
|
|
612
|
+
}
|
|
613
|
+
if (this.matchAndConsume("(", "syntax")) {
|
|
614
|
+
let expr = this.parseExpression();
|
|
615
|
+
this.require(")", "syntax");
|
|
616
|
+
return expr;
|
|
617
|
+
}
|
|
618
|
+
throw "Unknown token: " + JSON.stringify(this.currentToken());
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return htmxLive
|
|
624
|
+
})()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
htmxLive=(()=>{let t=new class{#t=new MutationObserver(t=>this.#e(t));#s=[];#n="[hx-live]";constructor(){this.#r()}observe(e,s,n){if(!e.__htmxLiveObserved){e.__htmxLiveObserved=!0;for(const r of s){let s=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(e,r,{get(){return s.get.call(this)},set(e){s.set.call(this,e),t.updated(this)}})}}}#i(t){t.matches&&(t.matches(this.#n)&&this.#o(t),t.matches("input")&&this.observeInput(t),t.matches("select")&&this.observeSelect(t)),t.querySelectorAll&&(t.querySelectorAll(this.#n).forEach(t=>this.#o(t)),t.querySelectorAll("input").forEach(t=>this.observeInput(t)),t.querySelectorAll("select").forEach(t=>this.observeSelect(t)))}observeSelect(t){this.observe(t,["value","disabled"],HTMLSelectElement.prototype)}observeInput(t){this.observe(t,["value","checked","disabled"],HTMLInputElement.prototype)}#o(t){if(!t.__htmxLiveCode){t.__htmxLiveCode=!0;let s=t.getAttribute("hx-live"),n=new e(s),r=new m(n.tokenize()).parseFeatures();for(const e of r)e.install(t)}}registerDependency(t){this.#s.push(t)}#e(t){for(let e of t)if(e.addedNodes.length>0){this.#i(document.documentElement);break}let e=[];t:for(const s of this.#s)for(let n of t){if(s.dependsOn(n.target)){e.push(s);break t}for(const t of n.addedNodes)if(s.dependsOn(t)){e.push(s);break t}for(const t of n.removedNodes)if(s.dependsOn(t)){e.push(s);break t}}setTimeout(()=>{for(const t of e)t.refresh()})}updated(t){let e=[];for(const s of this.#s)s.dependsOn(t)&&e.push(s);for(const t of e)t.refresh()}#r(){document.addEventListener("DOMContentLoaded",()=>{document.addEventListener("input",t=>{this.updated(t.target)}),this.#t.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),this.#i(document.body)})}};class e{WHITESPACE=/\s/;SYNTAX=/[.()<>[\]+\-*\/]/;ALPHA=/[a-zA-Z]/;NUMERIC=/[0-9]/;constructor(t){this.src=t,this.offset=0,this.prev=""}tokenize(){let t=[];for(;this.more();){let e=this.nextToken();e&&t.push(e)}return t}more(){return this.offset<this.src.length}peek(t=0){return this.src[this.offset+t]}match(t,e=this.peek()){if(this.more())return t.test?t.test(e):t===e}consume(){return this.prev=this.peek(),this.offset++,this.prev}nextToken(){if(this.match(this.WHITESPACE))return this.consumeWhitespace();if(!this.ALPHA.test(this.prev)&&this.match(".")&&this.match(this.ALPHA,this.peek(1)))return this.consumeClass();if(this.match(this.SYNTAX))return this.consumeSyntax();if("#"===this.peek())return this.consumeId();if(this.match(this.ALPHA))return this.consumeSymbol();if(this.match(this.NUMERIC))return this.consumeNumber();if(this.match('"')||this.match("'"))return this.consumeString();throw"Unknown token : "+this.peek()}consumeSyntax(){return{type:"syntax",val:this.consume()}}consumeWhitespace(){for(;this.match(this.WHITESPACE);)this.consume();return null}consumeId(){let t=this.consume();for(;this.validCss(this.peek());)t+=this.consume();return{type:"id",val:t}}consumeSymbol(){let t=this.consume();for(;this.match(this.ALPHA);)t+=this.consume();return{type:"sym",val:t}}consumeString(){let t=this.consume(),e="";for(;!this.match(t)&&this.more();)e+=this.consume();if(this.consume()!==t)throw"Unterminated string!";return{type:"str",val:e}}consumeNumber(){let t=this.consume();for(;this.match(this.NUMERIC);)t+=this.consume();if(this.match(".")){for(t+=this.consume();this.match(this.NUMERIC);)t+=this.consume();return{type:"num",val:Number.parseFloat(t)}}return{type:"num",val:Number.parseInt(t)}}consumeClass(){let t=this.consume();for(;this.validCss(this.peek());)t+=this.consume();return{type:"class",val:t}}validCss(t){return this.match(this.ALPHA,t)||this.match(this.NUMERIC,t)||"-"===t||"_"===t||":"===t}}class s{constructor(t,e){this.lhs=t,this.rhs=e,this.cssDependences=[],e.deps(this.cssDependences)}install(e){this.elt=e,t.registerDependency(this)}async refresh(){let t={this:this.elt};this.elt[this.lhs.property.val]=await this.rhs.eval(t)}dependsOn(t){for(const e of this.cssDependences)if(t.matches?.(e))return!0;return!1}}class n{constructor(t,e){this.event=t,this.commands=e}install(t){this.elt=t,t.addEventListener(this.event.val,async t=>{let e={};for(const t of this.commands)await t.execute(e)})}}class r{constructor(t){this.property=t}}class i{constructor(t){this.call=t}execute(t){this.call.eval(t)}}class o{constructor(t,e,s){this.token=t,this.lhs=e,this.rhs=s}async eval(t){return await this.lhs.eval(t)+await this.rhs.eval(t)}deps(t){this.lhs.deps?.(t),this.rhs.deps?.(t)}}class h{constructor(t){this.token=t}async eval(t){return this.token.val}}class a{constructor(t){this.token=t}async eval(t){return htmx.find(this.token.val)}deps(t){t.push(this.token.val)}}class c{constructor(t){this.token=t}async eval(t){return t[this.token.val]||window[this.token.val]}}class u{constructor(t,e){this.root=t,this.property=e}async eval(t){return(await this.root.eval(t))[this.property.val]}deps(t){this.root?.deps(t)}}class l{constructor(t,e){this.root=t,this.rootRoot=t.root,this.args=e}async eval(t){let e,s=null;this.rootRoot?(s=await this.rootRoot.eval(t),e=s[this.root.property.val].bind(s)):e=await this.root.eval(t);let n=[];for(const e of this.args)n.push(await e.eval(t));return e.call(s,n)}deps(t){this.root?.deps(t)}}class m{constructor(t){this.tokens=t,this.current=0}moreTokens(){return this.current<this.tokens.length}matchAndConsume(t,e="sym"){if(this.match(t,e))return this.consumeToken()}match(t,e){return!(this.currentToken().val!==t&&null!==t||this.currentToken().type!==e&&null!==e)}require(t,e="sym"){let s=this.matchAndConsume(t,e);if(!s)throw"Expected: "+(t||e)+" found "+JSON.stringify(this.currentToken());return s}currentToken(){return this.tokens[this.current]||{type:null,val:null}}consumeToken(){return this.lastToken=this.currentToken(),this.current++,this.lastToken}parseFeatures(){let t=[];for(;this.moreTokens();)t.push(this.parseFeature());return t}parseFeature(){let t=this.parseBind();if(t)return t;let e=this.parseOn();if(e)return e;throw"Unknown token: "+JSON.stringify(this.currentToken())}parseBind(){if(this.matchAndConsume("bind")){let t=this.parseBindable();this.require("to");let e=this.parseExpression();return new s(t,e)}}parseOn(){if(this.matchAndConsume("on")){let t=this.require(null,"sym"),e=this.parseCommands();return new n(t,e)}}parseBindable(){let t=this.require(null,"sym");return new r(t)}parseCommands(){let t=[];for(;this.moreTokens()&&!this.endOfCommands();)t.push(this.parseCommand());return t}endOfCommands(){return this.matchAndConsume("end","sym")||this.match("on")||this.match("bind")}parseCommand(){let t=this.callCommand();if(t)return t;throw"Unknown token: "+JSON.stringify(this.currentToken())}callCommand(){if(this.matchAndConsume("call")){let t=this.parseExpression();if(t instanceof l)return new i(t)}}parseExpression(){return this.parseAdditiveExpression()}parseAdditiveExpression(){let t=this.parseIndirectExpression();for(;this.matchAndConsume("+","syntax")||this.matchAndConsume("+","syntax");){let e=this.parseIndirectExpression();t=new o(this.lastToken,t,e)}return t}parseIndirectExpression(){let t=this.parsePrimaryExpression();for(;;)if(this.matchAndConsume(".","syntax")){let e=this.require(null,"sym");t=new u(t,e)}else{if(!this.matchAndConsume("(","syntax"))break;{let e=[];if(!this.match(")"))do{e.push(this.parseExpression())}while(this.matchAndConsume(",","syntax"));this.require(")","syntax"),t=new l(t,e)}}return t}parsePrimaryExpression(){if("str"===this.currentToken()?.type)return new h(this.consumeToken());if("id"===this.currentToken()?.type)return new a(this.consumeToken());if("sym"===this.currentToken()?.type)return new c(this.consumeToken());if(this.matchAndConsume("(","syntax")){let t=this.parseExpression();return this.require(")","syntax"),t}throw"Unknown token: "+JSON.stringify(this.currentToken())}}return t})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["htmxLive","mutationObserver","MutationObserver","records","this","onMutation","dependencies","actionSelector","constructor","initInternals","observe","elt","properties","prototype","__htmxLiveObserved","property","descriptor","Object","getOwnPropertyDescriptor","defineProperty","get","call","set","newValue","updated","process","matches","init","observeInput","observeSelect","querySelectorAll","forEach","HTMLSelectElement","HTMLInputElement","__htmxLiveCode","liveCode","getAttribute","tokenizer","Tokenizer","features","Parser","tokenize","parseFeatures","feature","install","registerDependency","bindFeature","push","record","addedNodes","length","document","documentElement","toRefresh","outer","dependency","dependsOn","target","removedNodes","setTimeout","refresh","addEventListener","evt","childList","subtree","attributes","characterData","body","WHITESPACE","SYNTAX","ALPHA","NUMERIC","src","offset","prev","tokens","more","token","nextToken","peek","off","match","thing","char","test","consume","consumeWhitespace","consumeClass","consumeSyntax","consumeId","consumeSymbol","consumeNumber","consumeString","type","val","validCss","start","Number","parseFloat","parseInt","c","BindFeature","lhs","rhs","cssDependences","deps","runtime","eval","css","OnFeature","event","commands","async","command","execute","Bindable","CallCommand","functionCall","AdditiveExpression","StringLiteral","IdLiteral","htmx","find","Identifier","window","PropertyAccess","root","FunctionCall","args","rootRoot","func","bind","arg","current","moreTokens","matchAndConsume","term","consumeToken","currentToken","require","JSON","stringify","lastToken","parseFeature","parseBind","on","parseOn","parseBindable","parseExpression","parseCommands","endOfCommands","parseCommand","callCommand","expression","parseAdditiveExpression","parseIndirectExpression","parsePrimaryExpression","expr"],"sources":["dist/ext/hx-live.js"],"mappings":"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","ignoreList":[]}
|