js/libs/ember-1.5.1.js
function(parentNode, html) {
        var arr = wrapMap[parentNode.tagName.toLowerCase()] || wrapMap._default;
        var depth = arr[0], start = arr[1], end = arr[2];

        if (needsShy) { html = '&shy;'+html; }

        var element = document.createElement('div');

        setInnerHTML(element, start + html + end);

        for (var i=0; i<=depth; i++) {
          element = element.firstChild;
        }

        // Look for &shy; to remove it.
        if (needsShy) {
          var shyElement = element;

          // Sometimes we get nameless elements with the shy inside
          while (shyElement.nodeType === 1 && !shyElement.nodeName) {
            shyElement = shyElement.firstChild;
          }

          // At this point it's the actual unicode character.
          if (shyElement.nodeType === 3 && shyElement.nodeValue.charAt(0) === "\u00AD") {
            shyElement.nodeValue = shyElement.nodeValue.slice(1);
          }
        }

        return element;
      }
function(parentNode, html) {
        var arr = wrapMap[parentNode.tagName.toLowerCase()] || wrapMap._default;
        var depth = arr[0], start = arr[1], end = arr[2];

        if (needsShy) { html = '&shy;'+html; }

        var element = document.createElement('div');

        setInnerHTML(element, start + html + end);

        for (var i=0; i<=depth; i++) {
          element = element.firstChild;
        }

        // Look for &shy; to remove it.
        if (needsShy) {
          var shyElement = element;

          // Sometimes we get nameless elements with the shy inside
          while (shyElement.nodeType === 1 && !shyElement.nodeName) {
            shyElement = shyElement.firstChild;
          }

          // At this point it's the actual unicode character.
          if (shyElement.nodeType === 3 && shyElement.nodeValue.charAt(0) === "\u00AD") {
            shyElement.nodeValue = shyElement.nodeValue.slice(1);
          }
        }

        return element;
      }
/*
Given a parent node and some HTML, generate a set of nodes. Return the first
node, which will allow us to traverse the rest using nextSibling.

We need to do this because innerHTML in IE does not really parse the nodes.