Branch: refs/heads/master
  Home:   https://github.com/jenkinsci/jenkins
  Commit: dbb100da58a084fb0a6ce129d3f2b7ad827e87ee
      
https://github.com/jenkinsci/jenkins/commit/dbb100da58a084fb0a6ce129d3f2b7ad827e87ee
  Author: Jesse Glick <[email protected]>
  Date:   2012-08-03 (Fri, 03 Aug 2012)

  Changed paths:
    M changelog.html
    M core/src/main/resources/lib/form/repeatable/repeatable.js
    M war/src/main/webapp/scripts/behavior.js

  Log Message:
  -----------
  [FIXED JENKINS-14495] Hetero lists not working correctly after adding 
elements.
Unlike [JENKINS-14514] this is a true fix rather than a workaround (now 
removed), and is more general.
cjo9900 discovered that behaviors were being redundantly registered (as of 
1.474 the monolithic JS is broken up);
this caused some behaviors to be run repeatedly on the same elements, breaking 
reasonable expectations of some behaviors.
The ideal fix would be to change Behavior.register to be idempotent: for 
example, key it by selector, then maintain a set of distinct behavior functions 
for each.
Unfortunately some adjuncts directly call Behavior.list.unshift, bypassing 
register(...), which would be tricky to intercept (would need to make a mock of 
Array).
The known one cases are in core, but it is possible plugin adjuncts do this 
too, in which case it would be incompatible to (say) change the 
Array<Map<String,Behavior>> to a Map<String,Array<Behavior>>.
Instead, permitting redundant registrations as before, and just silently 
skipping all but the first at runtime when applying behaviors.
Beware that since adjuncts are loaded from multiple places, different JS 
function objects are registered each time, so a naive set of behavior functions 
does not work;
have to identify functions by their toString in order to ensure that each is 
run only once.
(Currently once _per selector_, conceivably >1x per element; could if necessary 
be refined to make sure a given behavior is only run once on a given element 
during one call to applySubtree even if the element matches multiple selectors.)



Reply via email to