Making WordPress.org


Ignore:
Timestamp:
02/24/2022 06:19:12 AM (4 years ago)
Author:
dd32
Message:

Trac: oEmbed API: Add support for /query, and fix tag removal - DomDocument returns dyamic arrays that can't be iterated while removing said elements.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/dotorg/trac/oembed/index.php

    r11598 r11599  
    3333    // meta|core are the only tracs embedable.
    3434    // milestone|ticketgraph|ticket|changeset are the only endpoints allowable.
    35     ! preg_match( '!^(?P<baseurl>https://(?P<trac>meta|core).trac.wordpress.org/)(?P<type>milestone|ticketgraph|ticket|changeset)([/?]|$)!i', $url, $m ) ||
     35    ! preg_match( '!^(?P<baseurl>https://(?P<trac>meta|core).trac.wordpress.org/)(?P<type>milestone|ticketgraph|ticket|changeset|query)([/?]|$)!i', $url, $m ) ||
    3636    'GET' !== $_SERVER['REQUEST_METHOD']
    3737) {
     
    170170        }
    171171        break;
     172    case 'query':
     173        $remove_tags[] = 'h1';
     174        $remove_tags[] = 'h2';
     175        break;
    172176}
    173177
     
    187191    }
    188192
     193    $elements_to_remove = [];
    189194    foreach ( $doc->getElementsByTagName( $tag ) as $el ) {
    190195        if ( $class && ! str_contains( $el->getAttribute( 'class' ), $class ) ) {
     
    192197        }
    193198
     199        $elements_to_remove[] = $el;
     200    }
     201
     202    foreach ( $elements_to_remove as $el ) {
    194203        $el->parentNode->removeChild( $el );
    195204    }
     
    227236
    228237// Remove wp-trac.js, we don't need it here - It alters the page too much and adds elements on load.
    229 // Recursive as it can't iterate over the document while altering it properly.
    230 do {
    231     $removed = 0;
    232     foreach ( $doc->getElementsByTagName( 'script' ) as $script ) {
    233         $src = (string) $script->getAttribute( 'src' );
    234 
    235         if (
    236             false !== stripos( $src, 'wp-trac.js' ) ||
    237             false !== stripos( $script->textContent, 'wpTrac' )
    238         ) {
    239             $script->parentNode->removeChild( $script );
    240             $removed++;
    241         }
    242     }
    243 } while ( $removed );
     238$elements_to_remove = [];
     239foreach ( $doc->getElementsByTagName( 'script' ) as $script ) {
     240    $src = (string) $script->getAttribute( 'src' );
     241
     242    if (
     243        false !== stripos( $src, 'wp-trac.js' ) ||
     244        false !== stripos( $script->textContent, 'wpTrac' )
     245    ) {
     246        $elements_to_remove[] = $script;
     247    }
     248}
     249foreach ( $elements_to_remove as $el ) {
     250    $el->parentNode->removeChild( $el );
     251}
    244252
    245253// Add a script to the header.
Note: See TracChangeset for help on using the changeset viewer.