ndemoreau
ndemoreau

Reputation: 3869

turbolinks change url manually

I use endless scrolling in my rails 4 application.

The code automatically updates the url when I scroll a list:

var loading = false;
$(function() {
  function nearBottomOfPage() {
    return $(window).scrollTop() > $(document).height() - $(window).height() - 200;
  }
  $(window).scroll(function(){
    if (loading || $(".infinite-scroll").length == 0) {
      return;
    }

    if(nearBottomOfPage()) {
      loading=true;
      var qstring = parseInt(getParameterByName('page'));
      if(isNaN(qstring)) {qstring = 1;}
      qstring++
      updateQueryString('page',qstring);
      var url = $(".infinite-scroll").data("update-url")
      var q_string = window.location.search
      if(url.indexOf("?") != -1) {
          q_string = q_string.replace("?","&")
      }
      url = url + q_string
      $.ajax({
        url: url,
        type: 'get',
        dataType: 'script',
        success: function() {
          $(window).sausage('draw');
          loading=false;
        }
      });
    }
  });
  $(window).sausage();
});

The updateQuerystring function replaces the state like so:

window.history.replaceState({turbolinks: true, position: Date.now()}, document.title, new_url);

This is a hack to try to get something that worked in rails 3 to work in rails 4...

It seems to work but it is not clean and has some issues.

The main issue is the fact that the scroll position is not reminded. When clicking the back button, I come back to the top of the page.

Is there a way to do this cleaner. Ideally, instead to do window.history.replaceState I'd like to do Turbolinks.replaceState(newUrl) or something like that.

But if I could find a way to remember the scroll position, It would be great already.

Thank you!

Upvotes: 2

Views: 2497

Answers (1)

Douglas Drouillard
Douglas Drouillard

Reputation: 785

Triggering a Turbolinks visit manually

You can use Turbolinks.visit(path) to go to a URL through Turbolinks.

https://github.com/rails/turbolinks#triggering-a-turbolinks-visit-manually

Upvotes: 1

Related Questions