summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h6
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl2
-rw-r--r--Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js25
3 files changed, 33 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h
index 9ba65c259c..827fbcc5dc 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h
@@ -32,6 +32,12 @@ public:
virtual void inserted() override;
+ // https://html.spec.whatwg.org/multipage/scripting.html#dom-script-supports
+ static bool supports(String const& type)
+ {
+ return type.is_one_of("classic", "module");
+ }
+
private:
void prepare_script();
void script_became_ready();
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl
index 370dadd29a..36eb5ccd2e 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl
+++ b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl
@@ -6,6 +6,8 @@ interface HTMLScriptElement : HTMLElement {
[Reflect] attribute boolean defer;
[Reflect] attribute DOMString integrity;
+ static boolean supports(DOMString type);
+
[Reflect] attribute DOMString charset;
[Reflect] attribute DOMString event;
[Reflect=for] attribute DOMString htmlFor;
diff --git a/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js b/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js
new file mode 100644
index 0000000000..e449797d51
--- /dev/null
+++ b/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js
@@ -0,0 +1,25 @@
+describe("HTMLScriptElement.supports", () => {
+ loadLocalPage("/res/html/misc/blank.html");
+
+ afterInitialPageLoad(page => {
+ test("length is 1", () => {
+ expect(page.HTMLScriptElement.supports).toHaveLength(1);
+ });
+
+ test("Basic functionality", () => {
+ expect(page.HTMLScriptElement.supports("classic")).toBeTrue();
+ expect(page.HTMLScriptElement.supports("module")).toBeTrue();
+ expect(page.HTMLScriptElement.supports("abc")).toBeFalse();
+
+ // Is case sensitive.
+ expect(page.HTMLScriptElement.supports("Classic")).toBeFalse();
+ expect(page.HTMLScriptElement.supports("Module")).toBeFalse();
+
+ // Doesn't strip whitespace.
+ expect(page.HTMLScriptElement.supports(" classic ")).toBeFalse();
+ expect(page.HTMLScriptElement.supports(" module ")).toBeFalse();
+ });
+ });
+
+ waitForPageToLoad();
+});