Giter Club home page Giter Club logo

Comments (10)

mudlabs avatar mudlabs commented on August 22, 2024 20

Be good if there was a data-barba-script attribute you could attach to inline <script> tags. So Barba know there's a script that needs execution. You could make it execute on newPageReady by default.

<script data-barba-script>...</script>

from barba.

luruke avatar luruke commented on August 22, 2024 6

Hi @ZachSaucier, on purpose I don't want the javascript being evaluated when loading a new container.

The idea behind Barba.js and PJAX navigation is that you evaluate your js/css just on the first page where the user lands.

You have Events and Views made specifically to run code when a new container is loaded.

Anyway, if you want to can easily implement this behavior with something like this:

Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container) {
    eval(container.querySelector("script").innerHTML);
});

from barba.

johannesmutter avatar johannesmutter commented on August 22, 2024 6

To prevent warning for non existing script elements — (Cannot read property 'innerHTML' of null(…))
However: eval is evil 😉

Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container) {
    var js = container.querySelector("script");
    if(js != null){
        eval(js.innerHTML);
    }
});

from barba.

brandlewco avatar brandlewco commented on August 22, 2024 4

do you have an example of this for 2.x

from barba.

moisesmissecart avatar moisesmissecart commented on August 22, 2024 2
barba.hooks.after((data) => {
    let js = document.querySelectorAll('#main script');
    if(js != null){
         js.forEach((item) => {
             eval(item.innerHTML);
         });
    }
});

from barba.

frunkad avatar frunkad commented on August 22, 2024

This worked for me in v2

barba.hooks.after((data) => {
    let js = data.next.container.querySelectorAll('main script');
    if(js != null){
            js.forEach((item) => {
                console.log(js)
                eval(item.innerHTML);
            });
    }
});

from barba.

MrEyelet avatar MrEyelet commented on August 22, 2024

Where should I attach this code ? I have main.js script where I have imported some other scripts including barba transition.

The script looks like this:
code

But it doesnt help, my main.js script is not reinitialized

from barba.

MrEyelet avatar MrEyelet commented on August 22, 2024

Ok, in my case I did it like this, and it solved my roadblock

    barba.hooks.after(() => {
      const bottomDOM = document.getElementsByTagName("body")[0]
      const newScript = document.createElement("script")
      const oldScript = document.querySelector(".main-script")
      newScript.src = "js/main-dist.js"
      newScript.className = "main-script"
      oldScript.remove()
      bottomDOM.appendChild(newScript)
    })
    ```

from barba.

manyanic avatar manyanic commented on August 22, 2024

Using afterLeave hook worked for me.

barba.hooks.afterLeave((data) => {
			const js = data.next.container.querySelectorAll("script.reload-on-ajax");
			console.log(js);
			[].forEach.call(js, function (script) {
				console.log(script);
				window.eval(script.innerHTML);
			});
		});

from barba.

ilyasseisov avatar ilyasseisov commented on August 22, 2024

Hi.

here is my Barba code:

barba.init({
     sync: true,
     transitions: [
       {
         async leave(data) {
           const done = this.async();

           pageTransition();
           await delay(1100);
           done();
         },
       },
     ],
   });

Can you please tell, what code and where should I insert it, so other scripts won't break.

Thanks in advance!

from barba.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.