@inglorious/web 6.4.2 → 6.5.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/package.json +1 -1
- package/src/form/handlers.js +1 -1
- package/src/form/helpers.js +1 -1
- package/src/router/handlers.js +24 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inglorious/web",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.5.0",
|
|
4
4
|
"description": "A new web framework that leverages the power of the Inglorious Store combined with the performance and simplicity of lit-html.",
|
|
5
5
|
"author": "Matteo Antony Mistretta <antony.mistretta@gmail.com> (https://ingloriouscoderz.it)",
|
|
6
6
|
"contributors": [
|
package/src/form/handlers.js
CHANGED
package/src/form/helpers.js
CHANGED
package/src/router/handlers.js
CHANGED
|
@@ -8,6 +8,8 @@ import { toCamelCase } from "@inglorious/utils/data-structures/string.js"
|
|
|
8
8
|
|
|
9
9
|
const SKIP_FULL_MATCH_GROUP = 1 // .match() result at index 0 is the full string
|
|
10
10
|
const REMOVE_COLON_PREFIX = 1
|
|
11
|
+
const FIRST_HISTORY_INDEX = 0 // The entry an app starts on, and the fallback for an entry that carries no index.
|
|
12
|
+
const PUSH_HISTORY_STEP = 1 // How far a push advances the index. A replacement leaves it where it is.
|
|
11
13
|
|
|
12
14
|
export function createHandlers(routeConfig) {
|
|
13
15
|
/**
|
|
@@ -25,6 +27,18 @@ export function createHandlers(routeConfig) {
|
|
|
25
27
|
* @param {Api} api - The application API.
|
|
26
28
|
*/
|
|
27
29
|
init(entity, payload, api) {
|
|
30
|
+
/* Stamp the entry the app starts on, so that reloading keeps the app in
|
|
31
|
+
its place in the session history instead of restarting the count.
|
|
32
|
+
`withTransitions` reads this index back to tell a push from a traversal
|
|
33
|
+
and in which direction, so it has to be set before anything navigates. */
|
|
34
|
+
if (window.history.state?.idx == null) {
|
|
35
|
+
window.history.replaceState(
|
|
36
|
+
{ ...window.history.state, idx: FIRST_HISTORY_INDEX },
|
|
37
|
+
"",
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
entity.idx = window.history.state?.idx ?? FIRST_HISTORY_INDEX
|
|
41
|
+
|
|
28
42
|
// Handle initial route
|
|
29
43
|
const { pathname, search } = window.location
|
|
30
44
|
const initialPath = pathname + search
|
|
@@ -107,6 +121,9 @@ export function createHandlers(routeConfig) {
|
|
|
107
121
|
}
|
|
108
122
|
|
|
109
123
|
updateRouter(entity, route)
|
|
124
|
+
// Adopt the index of the entry just traversed, so the next push counts
|
|
125
|
+
// from where the history actually is rather than from where it was.
|
|
126
|
+
entity.idx = window.history.state?.idx ?? FIRST_HISTORY_INDEX
|
|
110
127
|
|
|
111
128
|
api.notify("routeChange", {
|
|
112
129
|
route: entity.route,
|
|
@@ -184,6 +201,10 @@ export function createHandlers(routeConfig) {
|
|
|
184
201
|
// Prepare history state
|
|
185
202
|
const historyState = {
|
|
186
203
|
...state,
|
|
204
|
+
/* Written before the notification that triggers the render, so that
|
|
205
|
+
anything reading the history entry during that render sees the new
|
|
206
|
+
index. `withTransitions` depends on this ordering. */
|
|
207
|
+
idx: replace ? entity.idx : entity.idx + PUSH_HISTORY_STEP,
|
|
187
208
|
route: entity.route,
|
|
188
209
|
params: entity.params,
|
|
189
210
|
query: entity.query,
|
|
@@ -193,6 +214,9 @@ export function createHandlers(routeConfig) {
|
|
|
193
214
|
// Navigate
|
|
194
215
|
const method = replace ? "replaceState" : "pushState"
|
|
195
216
|
history[method](historyState, "", path)
|
|
217
|
+
// Advance the counter as well as stamping the entry, or the next push
|
|
218
|
+
// writes the same index and reads as a replacement.
|
|
219
|
+
entity.idx = historyState.idx
|
|
196
220
|
|
|
197
221
|
api.notify("routeChange", historyState)
|
|
198
222
|
},
|