Uploaded image for project: 'Tapestry 5'
  1. Tapestry 5
  2. TAP5-1716

Zone updates fail due to underscore.js critical bug

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 5.3, 5.4
    • 5.3
    • tapestry-core
    • None

    Description

      Zone updates that reload scripts fail due to scripts reloading multiple times.
      This is due to underscore.js _contains() bug which Tapestry just started using.

      When another JS library overrides Array.prototype.indexOf, the code that
      has the bug is executed. It is not executed otherwise.

      Basically, _.contains() never returns true in this case, which leads
      to multiple reloads of stylesheets and scripts.

      I also submitted this patch to underscore.js developers.
      Patch is included.

          • new/org/apache/tapestry5/underscore_1_1_7.js 2011-10-22 05:10:36.000000000 -0400
          • old/org/apache/tapestry5/underscore_1_1_7.js 2011-08-06 12:27:18.000000000 -0400
            ***************
          • 198,205 ****
            var found = false;
            if (obj == null) return found;
            if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
            ! found = any(obj, function(value) { ! if (value === target) return true; }

            );
            return found;
            };

          • 198,205 ----
            var found = false;
            if (obj == null) return found;
            if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
            ! any(obj, function(value) { ! if (found = value === target) return true; }

            );
            return found;
            };

      Attachments

        Activity

          People

            hlship Howard Lewis Ship
            lprimak Lenny Primak
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: