TwitterボタンをTurbolinksに対応

TwitterボタンをTurbolinksに対応した時のメモ。

TwitterボタンをTurbolinksに対応

twttr_events_bound = false

$ ->
  loadTwitterSDK ->
    bindTwitterEventHandlers() unless twttr_events_bound

bindTwitterEventHandlers = ->
  $(document).on 'turbolinks:load', renderTweetButtons
  twttr_events_bound = true

renderTweetButtons = ->
  $('.twitter-share-button').each ->
    button = $(this)
    button.attr('data-url', document.location.href) unless button.data('url')?
    button.attr('data-text', document.title) unless button.data('text')?
  twttr.widgets.load()

loadTwitterSDK = (callback) ->
  $.getScript("//platform.twitter.com/widgets.js", callback)

Turbolinks Compatibilityに掲載されているコードでは、Turbolinks5の環境では動かなかったので読み込み方法を修正。

変更前

$(document).on 'page:load', renderTweetButtons

変更後

$(document).on 'turbolinks:load', renderTweetButtons

参考