Skip to content

Commit d07ec48

Browse files
authored
Merge pull request #177 from timreichen/add-document-title-setter
fix: document.title setter
2 parents da5fb7e + 355bbc2 commit d07ec48

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/dom/document.ts

+12
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,18 @@ export class Document extends Node {
152152
get title(): string {
153153
return this.querySelector("title")?.textContent || "";
154154
}
155+
set title(value: string) {
156+
let titleElement = this.querySelector("title");
157+
if (!titleElement) {
158+
const { head } = this;
159+
if (!head) return;
160+
161+
titleElement = this.createElement("title");
162+
head.appendChild(titleElement);
163+
}
164+
165+
titleElement.textContent = value;
166+
}
155167

156168
get cookie(): string {
157169
return ""; // TODO

test/units/Document.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { DOMParser } from "../../deno-dom-wasm.ts";
2+
import { assertStrictEquals as assertEquals } from "assert";
3+
4+
Deno.test("Document.title sets title element value", () => {
5+
const doc = new DOMParser().parseFromString(
6+
`<!DOCTYPE html><html><head><title>foo</title></head><body></body></html>`,
7+
"text/html",
8+
);
9+
assertEquals(doc.title, "foo");
10+
doc.title = "bar";
11+
assertEquals(doc.title, "bar");
12+
assertEquals(doc.querySelector("title")?.textContent, "bar");
13+
});
14+
15+
Deno.test("Document.title adds missing title element", () => {
16+
const doc = new DOMParser().parseFromString(
17+
`<!DOCTYPE html><html><head></head><body></body></html>`,
18+
"text/html",
19+
);
20+
assertEquals(doc.title, "");
21+
doc.title = "foo";
22+
assertEquals(doc.title, "foo");
23+
assertEquals(doc.querySelector("title")?.textContent, "foo");
24+
});
25+
26+
Deno.test("Document.title does not add title missing head element", () => {
27+
const doc = new DOMParser().parseFromString(
28+
`<!DOCTYPE html><html><head></head><body></body></html>`,
29+
"text/html",
30+
);
31+
doc.head.remove();
32+
assertEquals(doc.title, "");
33+
doc.title = "foo";
34+
assertEquals(doc.title, "");
35+
assertEquals(doc.querySelector("title"), null);
36+
});

0 commit comments

Comments
 (0)