• Turbolinks

    Turbolinks в Rails - это отличный способ ускорить загрузку страниц. Суть фишки - в том, чтобы вместо полной перезагрузки страницы при нажатии на ссылку подгружать только изменившуюся часть. Как я выяснил, пока делал этот блог, подход имеет и подводный камень. При обновлении части страницы не происходит события ready, из-за чего такие вещи, как highlight.js, отвечающий тут за подсветку синтаксиса, не обрабатывают обновлённый контент.

    Решением проблемы является использование событий, добавляемых Turbolinks'ом:

    • page:before-change a Turbolinks-enabled link has been clicked (see below for more details)
    • page:fetch starting to fetch a new target page
    • page:receive the page has been fetched from the server, but not yet parsed
    • page:change the page has been parsed and changed to the new version and on DOMContentLoaded
    • page:update is triggered whenever page:change is PLUS on jQuery's ajaxSucess, if jQuery is available (otherwise you can manually -trigger it when calling XMLHttpRequest in your own code)
    • page:load is fired at the end of the loading process.

    Т.о. для того, чтобы подсветка синтаксиса работала при переходах между страницами я использую такой код (warning: coffeescript sintax!):

    $(document).on 'page:change', ->
      $('pre code').each (i, e) ->
        hljs.highlightBlock(e)