Skip to content

Commit 100cf87

Browse files
authored
Merge pull request #8091 from QwikDev/fix-inline
fix: inline qwik loader location
2 parents 61bec49 + d25be24 commit 100cf87

File tree

6 files changed

+39
-8
lines changed

6 files changed

+39
-8
lines changed

packages/docs/src/routes/api/qwik-testing/api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@
209209
}
210210
],
211211
"kind": "Function",
212-
"content": "Trigger an event in unit tests on an element.\n\nFuture deprecation candidate.\n\n\n```typescript\nexport declare function trigger(root: Element, queryOrElement: string | Element | keyof HTMLElementTagNameMap | null, eventName: string, eventPayload?: any, options?: {\n waitForIdle?: boolean;\n}): Promise<void>;\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nroot\n\n\n</td><td>\n\nElement\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\nqueryOrElement\n\n\n</td><td>\n\nstring \\| Element \\| keyof HTMLElementTagNameMap \\| null\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventName\n\n\n</td><td>\n\nstring\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventPayload\n\n\n</td><td>\n\nany\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n<tr><td>\n\noptions\n\n\n</td><td>\n\n{ waitForIdle?: boolean; }\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nPromise&lt;void&gt;",
212+
"content": "Trigger an event in unit tests on an element. Needs to be kept in sync with the Qwik Loader event dispatching.\n\nFuture deprecation candidate.\n\n\n```typescript\nexport declare function trigger(root: Element, queryOrElement: string | Element | keyof HTMLElementTagNameMap | null, eventName: string, eventPayload?: any, options?: {\n waitForIdle?: boolean;\n}): Promise<void>;\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nroot\n\n\n</td><td>\n\nElement\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\nqueryOrElement\n\n\n</td><td>\n\nstring \\| Element \\| keyof HTMLElementTagNameMap \\| null\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventName\n\n\n</td><td>\n\nstring\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventPayload\n\n\n</td><td>\n\nany\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n<tr><td>\n\noptions\n\n\n</td><td>\n\n{ waitForIdle?: boolean; }\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nPromise&lt;void&gt;",
213213
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/testing/element-fixture.ts",
214214
"mdFile": "core.trigger.md"
215215
},

packages/docs/src/routes/api/qwik-testing/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ superParent: HTMLElement;
499499

500500
## trigger
501501

502-
Trigger an event in unit tests on an element.
502+
Trigger an event in unit tests on an element. Needs to be kept in sync with the Qwik Loader event dispatching.
503503

504504
Future deprecation candidate.
505505

packages/docs/src/routes/api/qwik/api.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2385,7 +2385,7 @@
23852385
}
23862386
],
23872387
"kind": "Function",
2388-
"content": "Register a listener on the current component's host element.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX. Otherwise, it's adding a JSX listener in the `<div>` is a better idea.\n\n\n```typescript\nuseOn: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
2388+
"content": "Register a listener on the current component's host element.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX. Otherwise, it's adding a JSX listener in the `<div>` is a better idea.\n\nEvents are case sensitive.\n\n\n```typescript\nuseOn: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
23892389
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-on.ts",
23902390
"mdFile": "core.useon.md"
23912391
},
@@ -2399,7 +2399,7 @@
23992399
}
24002400
],
24012401
"kind": "Function",
2402-
"content": "Register a listener on `document`<!-- -->.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.\n\n\n```typescript\nuseOnDocument: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
2402+
"content": "Register a listener on `document`<!-- -->.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.\n\nEvents are case sensitive.\n\n\n```typescript\nuseOnDocument: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
24032403
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-on.ts",
24042404
"mdFile": "core.useondocument.md"
24052405
},
@@ -2413,7 +2413,7 @@
24132413
}
24142414
],
24152415
"kind": "Function",
2416-
"content": "Register a listener on `window`<!-- -->.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.\n\n\n```typescript\nuseOnWindow: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
2416+
"content": "Register a listener on `window`<!-- -->.\n\nUsed to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.\n\nEvents are case sensitive.\n\n\n```typescript\nuseOnWindow: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void\n```\n\n\n<table><thead><tr><th>\n\nParameter\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\nevent\n\n\n</td><td>\n\nT \\| T\\[\\]\n\n\n</td><td>\n\n\n</td></tr>\n<tr><td>\n\neventQrl\n\n\n</td><td>\n\nEventQRL&lt;T&gt;\n\n\n</td><td>\n\n\n</td></tr>\n</tbody></table>\n\n**Returns:**\n\nvoid",
24172417
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-on.ts",
24182418
"mdFile": "core.useonwindow.md"
24192419
},

packages/docs/src/routes/api/qwik/index.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9208,6 +9208,8 @@ Register a listener on the current component's host element.
92089208
92099209
Used to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX. Otherwise, it's adding a JSX listener in the `<div>` is a better idea.
92109210
9211+
Events are case sensitive.
9212+
92119213
```typescript
92129214
useOn: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void
92139215
```
@@ -9261,6 +9263,8 @@ Register a listener on `document`.
92619263
92629264
Used to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.
92639265
9266+
Events are case sensitive.
9267+
92649268
```typescript
92659269
useOnDocument: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void
92669270
```
@@ -9314,6 +9318,8 @@ Register a listener on `window`.
93149318
93159319
Used to programmatically add event listeners. Useful from custom `use*` methods, which do not have access to the JSX.
93169320
9321+
Events are case sensitive.
9322+
93179323
```typescript
93189324
useOnWindow: <T extends KnownEventNames>(event: T | T[], eventQrl: EventQRL<T>) => void
93199325
```

packages/qwik/src/core/tests/render-api.spec.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,28 @@ describe('render api', () => {
445445
'(window.qwikevents||(window.qwikevents=[]))'
446446
);
447447
});
448+
it('should only render inside body', async () => {
449+
const bigText = 'hello world '.repeat(4000);
450+
const result = await renderToStringAndSetPlatform(
451+
<>
452+
<head>
453+
<script>{bigText}</script>
454+
</head>
455+
<body>
456+
<Counter />
457+
<div>{bigText}</div>
458+
</body>
459+
</>,
460+
{
461+
containerTagName: 'html',
462+
qwikLoader: 'inline',
463+
}
464+
);
465+
const document = createDocument({ html: result.html });
466+
const qwikLoaderScriptElements = document.querySelectorAll('script[id=qwikloader]');
467+
expect(qwikLoaderScriptElements).toHaveLength(1);
468+
expect(qwikLoaderScriptElements[0]?.parentNode?.nodeName.toLowerCase()).toEqual('body');
469+
});
448470
it('should not render inside template', async () => {
449471
const bigText = 'hello world '.repeat(3000); // ~30kB of text
450472
const result = await renderToStringAndSetPlatform(

packages/qwik/src/server/ssr-container.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,8 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
348348
openContainer() {
349349
if (this.tag == 'html') {
350350
this.write('<!DOCTYPE html>');
351+
// -1 so we only emit inside body
352+
this.$noScriptHere$ = -1;
351353
}
352354

353355
const containerAttributes = this.renderOptions.containerAttributes || {};
@@ -379,7 +381,8 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
379381
return this.closeElement();
380382
}
381383

382-
private $noScriptHere$ = 0;
384+
// -1 so we only emit inside body
385+
private $noScriptHere$: number = 0;
383386

384387
/** Renders opening tag for DOM element */
385388
openElement(
@@ -393,8 +396,8 @@ class SSRContainer extends _SharedContainer implements ISSRContainer {
393396
// We waited long enough, on slow connections the page is already partially visible
394397
this.emitQwikLoaderInline();
395398
}
396-
// keep track of noscript and template
397-
else if (elementName === 'noscript' || elementName === 'template') {
399+
// keep track of noscript and template, and for html we only emit inside body
400+
else if (elementName === 'noscript' || elementName === 'template' || elementName === 'body') {
398401
this.$noScriptHere$++;
399402
}
400403
}

0 commit comments

Comments
 (0)