All files parse-html.js

100% Statements 12/12
100% Branches 5/5
100% Functions 1/1
100% Lines 12/12
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    1x 1x 1x 1x 1x 1x 1x     1x         1x                 1x   2x 2x                                              
'use strict'
 
var parser = window.DOMParser && new window.DOMParser()
var htmlType = 'text/html'
var xhtmlType = 'application/xhtml+xml'
var testCode = '<i></i>'
var documentRootName = 'HTML'
var supportsHTMLType = false
var supportsXHTMLType = false
 
// Check if browser supports text/html DOMParser
try {
  /* istanbul ignore next: Fails in older browsers */
  if (parser.parseFromString(testCode, htmlType)) supportsHTMLType = true
} catch (err) {}
 
try {
  /* istanbul ignore next: Only used in ie9 */
  if (!supportsHTMLType && parser.parseFromString(testCode, xhtmlType)) supportsXHTMLType = true
} catch (err) {}
 
/**
 * Returns the results of a DOMParser as an HTMLElement.
 * (Shims for older browser and IE9).
 */
module.exports = supportsHTMLType
  ? function parseHTML (markup, rootName) {
    var doc = parser.parseFromString(markup, htmlType)
    return rootName === documentRootName
      ? doc.documentElement
      : doc.body.firstChild
  }
  /* istanbul ignore next: Only used in older browsers */
  : function parseHTML (markup, rootName) {
    var isRoot = rootName === documentRootName
 
    // Special case for ie9 (documentElement.innerHTML not supported).
    if (supportsXHTMLType && isRoot) {
      return parser.parseFromString(markup, xhtmlType).documentElement
    }
 
    // Fallback to innerHTML for other older browsers.
    var doc = document.implementation.createHTMLDocument('')
    if (isRoot) {
      doc.documentElement.innerHTML = markup
      return doc.documentElement
    } else {
      doc.body.innerHTML = markup
      return doc.body.firstChild
    }
  }