WordPress.org

Make WordPress Core

Changeset 29252


Ignore:
Timestamp:
07/20/2014 12:28:57 AM (4 years ago)
Author:
wonderboymusic
Message:

wp_script_is( ..., 'enqueued' ) needs to check dependencies recursively - a single item's dependencies may only be a subset of the full dependency tree. Adds a new method on WP_Dependencies called ->recurse_deps().

Adds unit test.

Props wonderboymusic, SergeyBiryukov, mikejolley.
Fixes #28404.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class.wp-dependencies.php

    r28517 r29252  
    326326
    327327    /**
     328     * Recursively search the passed dependency tree for $handle
     329     *
     330     * @since 4.0.0
     331     *
     332     * @param array  $queue  An array of queued _WP_Dependency handle objects.
     333     * @param string $handle Name of the item. Should be unique.
     334     * @return boolean Whether the handle is found after recursively searching the dependency tree.
     335     */
     336    protected function recurse_deps( $queue, $handle ) {
     337        foreach ( $queue as $queued ) {
     338            if ( ! isset( $this->registered[ $queued ] ) ) {
     339                continue;
     340            }
     341
     342            if ( in_array( $handle, $this->registered[ $queued ]->deps ) ) {
     343                return true;
     344            } else {
     345                return $this->recurse_deps( $this->registered[ $queued ]->deps, $handle );
     346            }
     347        }
     348
     349        return false;
     350    }
     351
     352    /**
    328353     * Query list for an item.
    329354     *
     
    345370            case 'enqueued' :
    346371            case 'queue' :
    347                 return in_array( $handle, $this->queue );
     372                if ( in_array( $handle, $this->queue ) ) {
     373                    return true;
     374                }
     375                return $this->recurse_deps( $this->queue, $handle );
    348376
    349377            case 'to_do' :
  • trunk/tests/phpunit/tests/dependencies/jquery.php

    r25785 r29252  
    7070        $this->assertFalse( strpos( $contents, 'sourceMappingURL' ), 'Presence of sourceMappingURL' );
    7171    }
     72
     73    /**
     74     * @ticket 28404
     75     */
     76    function test_wp_script_is_dep_enqueued() {
     77        wp_enqueue_script( 'jquery-ui-accordion' );
     78
     79        $this->assertTrue( wp_script_is( 'jquery', 'enqueued' ) );
     80        $this->assertFalse( wp_script_is( 'underscore', 'enqueued' ) );
     81
     82        unset( $GLOBALS['wp_scripts'] );
     83    }
    7284}
Note: See TracChangeset for help on using the changeset viewer.