WordPress.org

Make WordPress Core

Ticket #41584: 41584.diff

File 41584.diff, 4.2 KB (added by peterwilsoncc, 3 years ago)
  • src/wp-includes/js/twemoji.js

    diff --git a/src/wp-includes/js/twemoji.js b/src/wp-includes/js/twemoji.js
    index 19c2ef48a1..8535099b89 100644
    a b var twemoji = (function ( 
    8888       */
    8989      onerror: function onerror() {
    9090        if (this.parentNode) {
    91           this.parentNode.replaceChild(createText(this.alt), this);
     91          this.parentNode.replaceChild(createText(this.alt, false), this);
    9292        }
    9393      },
    9494
    var twemoji = (function ( 
    159159       * @example
    160160       *
    161161       *  twemoji.parse("I \u2764\uFE0F emoji!");
    162        *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"> emoji!
     162       *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"/> emoji!
    163163       *
    164164       *
    165165       *  twemoji.parse("I \u2764\uFE0F emoji!", function(iconId, options) {
    166166       *    return '/assets/' + iconId + '.gif';
    167167       *  });
    168        *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"> emoji!
     168       *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"/> emoji!
    169169       *
    170170       *
    171171       * twemoji.parse("I \u2764\uFE0F emoji!", {
    var twemoji = (function ( 
    174174       *     return '/assets/' + options.size + '/' + iconId + options.ext;
    175175       *   }
    176176       * });
    177        *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/72x72/2764.png"> emoji!
     177       *  // I <img class="emoji" draggable="false" alt="❤️" src="/assets/72x72/2764.png"/> emoji!
    178178       *
    179179       */
    180180      parse: parse,
    var twemoji = (function ( 
    237237    // used to find HTML special chars in attributes
    238238    rescaper = /[&<>'"]/g,
    239239
    240     // nodes with type 1 which should **not** be parsed (including lower case svg)
    241     shouldntBeParsed = /IFRAME|NOFRAMES|NOSCRIPT|SCRIPT|SELECT|STYLE|TEXTAREA|[a-z]/,
     240    // nodes with type 1 which should **not** be parsed
     241    shouldntBeParsed = /^(?:iframe|noframes|noscript|script|select|style|textarea)$/,
    242242
    243243    // just a private shortcut
    244244    fromCharCode = String.fromCharCode;
    var twemoji = (function ( 
    256256   * @param   string  text used to create DOM text node
    257257   * @return  Node  a DOM node with that text
    258258   */
    259   function createText(text) {
    260     return document.createTextNode(text);
     259  function createText(text, clean) {
     260    return document.createTextNode(clean ? text.replace(UFE0Fg, '') : text);
    261261  }
    262262
    263263  /**
    var twemoji = (function ( 
    301301        // collect them to process emoji later
    302302        allText.push(subnode);
    303303      }
    304       // ignore all nodes that are not type 1 or that
     304      // ignore all nodes that are not type 1, that are svg, or that
    305305      // should not be parsed as script, style, and others
    306       else if (nodeType === 1 && !shouldntBeParsed.test(subnode.nodeName)) {
     306      else if (nodeType === 1 && !('ownerSVGElement' in subnode) &&
     307          !shouldntBeParsed.test(subnode.nodeName.toLowerCase())) {
    307308        grabAllTextNodes(subnode, allText);
    308309      }
    309310    }
    var twemoji = (function ( 
    365366        index = match.index;
    366367        if (index !== i) {
    367368          fragment.appendChild(
    368             createText(text.slice(i, index))
     369            createText(text.slice(i, index), true)
    369370          );
    370371        }
    371372        rawText = match[0];
    var twemoji = (function ( 
    393394          modified = true;
    394395          fragment.appendChild(img);
    395396        }
    396         if (!img) fragment.appendChild(createText(rawText));
     397        if (!img) fragment.appendChild(createText(rawText, false));
    397398        img = null;
    398399      }
    399400      // is there actually anything to replace in here ?
    var twemoji = (function ( 
    401402        // any text left to be added ?
    402403        if (i < text.length) {
    403404          fragment.appendChild(
    404             createText(text.slice(i))
     405            createText(text.slice(i), true)
    405406          );
    406407        }
    407408        // replace the text node only, leave intact
    var twemoji = (function ( 
    459460            ret = ret.concat(' ', attrname, '="', escapeHTML(attrib[attrname]), '"');
    460461          }
    461462        }
    462         ret = ret.concat('>');
     463        ret = ret.concat('/>');
    463464      }
    464465      return ret;
    465466    });