Skip to content

Commit

Permalink
Merge pull request #177 from timreichen/add-document-title-setter
Browse files Browse the repository at this point in the history
fix: document.title setter
  • Loading branch information
b-fuze authored Aug 15, 2024
2 parents da5fb7e + 355bbc2 commit d07ec48
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/dom/document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,18 @@ export class Document extends Node {
get title(): string {
return this.querySelector("title")?.textContent || "";
}
set title(value: string) {
let titleElement = this.querySelector("title");
if (!titleElement) {
const { head } = this;
if (!head) return;

titleElement = this.createElement("title");
head.appendChild(titleElement);
}

titleElement.textContent = value;
}

get cookie(): string {
return ""; // TODO
Expand Down
36 changes: 36 additions & 0 deletions test/units/Document.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { DOMParser } from "../../deno-dom-wasm.ts";
import { assertStrictEquals as assertEquals } from "assert";

Deno.test("Document.title sets title element value", () => {
const doc = new DOMParser().parseFromString(
`<!DOCTYPE html><html><head><title>foo</title></head><body></body></html>`,
"text/html",
);
assertEquals(doc.title, "foo");
doc.title = "bar";
assertEquals(doc.title, "bar");
assertEquals(doc.querySelector("title")?.textContent, "bar");
});

Deno.test("Document.title adds missing title element", () => {
const doc = new DOMParser().parseFromString(
`<!DOCTYPE html><html><head></head><body></body></html>`,
"text/html",
);
assertEquals(doc.title, "");
doc.title = "foo";
assertEquals(doc.title, "foo");
assertEquals(doc.querySelector("title")?.textContent, "foo");
});

Deno.test("Document.title does not add title missing head element", () => {
const doc = new DOMParser().parseFromString(
`<!DOCTYPE html><html><head></head><body></body></html>`,
"text/html",
);
doc.head.remove();
assertEquals(doc.title, "");
doc.title = "foo";
assertEquals(doc.title, "");
assertEquals(doc.querySelector("title"), null);
});

0 comments on commit d07ec48

Please sign in to comment.