[wp-trac] [WordPress Trac] #35956: Script's dependencies are always moved to header

WordPress Trac noreply at wordpress.org
Thu Feb 25 23:33:02 UTC 2016


#35956: Script's dependencies are always moved to header
---------------------------+-----------------------------
 Reporter:  stephenharris  |      Owner:
     Type:  defect (bug)   |     Status:  new
 Priority:  normal         |  Milestone:  Awaiting Review
Component:  Script Loader  |    Version:  trunk
 Severity:  normal         |   Keywords:
  Focuses:                 |
---------------------------+-----------------------------
 I found this after the patch ([36604]) for #35973 was applied. I was going
 to report it there, but digging a little deeper I think this is a pre-
 existing bug which has only been brought to light.

 I'm seeing a that all dependencies of registered script are being moved to
 the header, even when the script that depends on them is loaded in the
 footer. It's late here, so I'm going to post this example and follow with
 some unit tests tomorrow.

 Suppose we have:

 {{{
 wp_register_script('parent','parent.js', array('child'), '1', true);
 wp_register_script('child', 'child.js', array(), '1', true);
 }}}

 Then we have the trace:

 1. `WP_Scripts->do_head_items()`
 2. `WP_Dependencies->do_items(false,0)`
 3. `WP_Scripts->all_deps( $handles )` (we loose all reference to the group
 here, defaults to false)

 At this point we loop through the handles and call `WP_Scripts->set_group(
 $handle, $recursion, $group )`.

 `$group` here is ''always'' false, at least when printing header scripts.
 Now lets assume we are at handle 'parent' in our loop. We then call
 `WP_Scripts->all_deps` (and so `WP_Dependencies->all_deps`), passing the
 dependencies as the first argument (e.g. `array( 'child' )`), the second
 argument (`$recursion`) as `true` (naturally), and the final argument
 `false` still.

 That loops over the dependencies and we call

 {{{
 WP_Scripts->set_group( 'child', true, $group )`
 }}}

 As noted `$group` is always false (and cast to 0), so with the following,
 the 'child' script's group is always set to 0

 {{{
 if ( $recursion ) {
         $group = min( $this->group, $group );
 }
 }}}

 My first thoughts are that at some point `$group` should really be set to
 the parent's group (e.g. 1 in this case).

--
Ticket URL: <https://core.trac.wordpress.org/ticket/35956>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list