Blame view

lib/jsdom/living/domparsing/DOMParser-impl.js 1.54 KB
858f2bdf5   Boyan Georgiev   fixes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  "use strict";
  
  const { parseIntoDocument } = require("../../browser/parser");
  
  const Document = require("../generated/Document");
  
  exports.implementation = class DOMParserImpl {
    constructor(globalObject) {
      this._globalObject = globalObject;
    }
  
    parseFromString(string, contentType) {
      switch (String(contentType)) {
        case "text/html": {
          return this.createScriptingDisabledDocument("html", contentType, string);
        }
  
        case "text/xml":
        case "application/xml":
        case "application/xhtml+xml":
        case "image/svg+xml": {
          try {
            return this.createScriptingDisabledDocument("xml", contentType, string);
          } catch (error) {
            const document = this.createScriptingDisabledDocument("xml", contentType);
            const element = document.createElementNS("http://www.mozilla.org/newlayout/xml/parsererror.xml", "parsererror");
  
            element.textContent = error.message;
  
            document.appendChild(element);
            return document;
          }
        }
  
        default:
          throw new TypeError("Invalid contentType");
      }
    }
  
    createScriptingDisabledDocument(parsingMode, contentType, string) {
      const document = Document.createImpl(this._globalObject, [], {
        options: {
          parsingMode,
          encoding: "UTF-8",
          contentType,
          readyState: "complete",
          scriptingDisabled: true
          // TODO: somehow set URL to active document's URL
        }
      });
  
      if (string !== undefined) {
        parseIntoDocument(string, document);
      }
  
      return document;
    }
  };