Personalized content that relies on JavaScript libraries sometimes fails to behave as expected

Created on 15 March 2023, over 1 year ago
Updated 14 May 2024, about 1 month ago

Problem/Motivation

For Personalized content that relies on JavaScript, Drupal fails to load the required JavaScript or behaviors, causing personalized content or HTML to malfunction when dependent on JavaScript libraries.

Steps to reproduce

Export a content or block which relies on javascript to Personalization. Create a campaign and add the exported content to slot. Publish the campaign and open the page to see the Personalized content.

Proposed resolution

Load all necessary JavaScript libraries on all pages and reattach Drupal behaviors for the element after personalized content is available

Remaining tasks

User interface changes

API changes

Data model changes

🐛 Bug report
Status

Needs work

Version

4.0

Component

Code

Created by

🇮🇳India kk5190

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @kk5190
  • Status changed to Needs work about 1 year ago
  • 🇨🇦Canada scor Toronto

    fixing missing new line at end of patch

  • 🇧🇪Belgium cgoffin

    I get the following warning:

    Warning: foreach() argument must be of type array|object, null given in Drupal\acquia_perz\PerzHelper::attachLibrariesForPerz() (regel 400 van /var/www/html/docroot/modules/contrib/acquia_perz/src/PerzHelper.php)

    I updated the patch to fix this.

  • Status changed to Needs review 12 months ago
  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 12 months ago
    Waiting for branch to pass
  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 12 months ago
    Waiting for branch to pass
  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 12 months ago
    Waiting for branch to pass
  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 12 months ago
    Waiting for branch to pass
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪
  • Status changed to RTBC 12 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    RTBC since this solved an issue for us with lazy loading of images

  • Status changed to Needs work 11 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Needs a re-roll. Patch in #6 is missing the addition of the new files it seems.

  • 🇨🇦Canada scor Toronto

    Thanks for updating the patch. Yes the new patch is missing the 2 new files acquia_perz.libraries.yml and js/perz.js.

  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 10 months ago
    Waiting for branch to pass
  • @bramdriesen opened merge request.
  • Open in Jenkins → Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 10 months ago
    Composer require-dev failure
  • Status changed to Needs review 10 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Incorporated the fix from #6 with the patch of #4 in a merge request.

  • Open on Drupal.org →
    Core: 10.0.7 + Environment: PHP 8.1 & MySQL 5.7
    last update 10 months ago
    Waiting for branch to pass
  • 🇨🇦Canada scor Toronto

    Thanks @BramDriesen. updating patch with most recent MR for people who may prefer to use files from this issue.

  • Status changed to Needs work 10 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    This fixes the behaviour for page loads. But not while editing content in the experience editor.

    Acquia support case number: 00977157

  • 🇮🇳India kk5190

    Adding Fix for JS not working properly for lazy loading images on Experience Builder

  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪
    1. +++ b/js/perz.js
      @@ -0,0 +1,25 @@
      +        // Additional Fix for Experience builder
      

      Should describe what is being fixed.

    2. +++ b/js/perz.js
      @@ -0,0 +1,25 @@
      +        if (typeof window.AcquiaLift !== 'undefined') {
      +          if (typeof window.AcquiaLift.executionContext !== 'undefined' && window.AcquiaLift.executionContext === "experience-builder-iframe") {
      

      Double quotes

    Also, this should have been a commit to the issue fork. OR if working with patches you need to provide an interdiff to show what changed.

  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪
  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • Status changed to Needs review 8 months ago
  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Updated the JS file based on the last patch and updated the code remarks. Still need to test this.

  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Static patch uploaded based on the latest rebased issue fork.

  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Last patch did not apply

  • Open on Drupal.org →
    Core: 10.1.4 + Environment: PHP 8.1 & MySQL 5.7
    last update 8 months ago
    Waiting for branch to pass
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Now for real 🙈

  • Status changed to RTBC 8 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    I believe this is now working as expected. I'll ask for some additional tests from my team members.

  • Status changed to Needs work 8 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    Okay, just tested this again. It's still not working.

    - Pushed a new component content (just a component with an image and lazy loading enabled).
    - Synced content
    - Added the content to an available slot --> Broken image handler
    - Saved campaign
    - Edit experience again --> Image is loading fine

  • 🇮🇳India kk5190

    Hello Brian,
    I retested the issue, and it appears to be functioning correctly in the scenario you mentioned. Could you please provide additional details regarding this? Have we cleared the cache of the website or browser after applying the patch? Providing more information about the site's studio component and the method you're using for enabling lazy loading might assist me in reproducing the issue. Could you also verify in the source if the perz.js file contains the new changes by inspecting it through the developer tools?

  • Status changed to RTBC 8 months ago
  • 🇧🇪Belgium BramDriesen Belgium 🇧🇪

    This magically started working. Gotta love SiteStudio react changes that you have no control over and just come into your website when you do a rebuild/deploy.

    Have we cleared the cache of the website or browser after applying the patch?

    Just a reminder we live in 2023 and have wonderful tools like CI/CD that do this automatically on deploy. So of course the cache is cleared.

    Providing more information about the site's studio component and the method you're using for enabling lazy loading might assist me in reproducing the issue.

    This is provided in the Acquia ticket.

    Could you also verify in the source if the perz.js file contains the new changes by inspecting it through the developer tools?

    Yes it is.

  • Open on Drupal.org →
    Core: 10.2.1 + Environment: PHP 8.1 & MySQL 5.7
    last update 3 months ago
    Waiting for branch to pass
  • 🇮🇳India kk5190

    Adding Fix for JS not working properly for lazy loading images on Experience Builder in some cases.

  • Open on Drupal.org →
    Core: 10.2.1 + Environment: PHP 8.1 & MySQL 5.7
    last update 3 months ago
    Waiting for branch to pass
  • 🇮🇳India bendale

    Thanks @scor for both the patches.
    I checked 4.1.5 and 4.1.7 with their corresponding patches and the behaviour was not resolved, we still see that the personalisation block does not show up with JS aggregation enabled, in addition to this, the 4.1.5 patch conflicts with site studio. However, both of these patches do not solve the JS aggregation-related issue.

  • Status changed to Needs work about 1 month ago
Production build 0.69.0 2024