Sha256: 08f06cfe048601607aa8c774de9cca7b3bc563b783aed6beb76fb97bc23f91c3

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

# Tabs hash management adapted from SO answer :
#   http://stackoverflow.com/a/21443271/685925
#
class Para.Tabs extends Vertebra.View
  events:
    'shown.bs.tab a[data-toggle="tab"]': 'onTabShown'
    'change .tab-pane': 'onFormInputUpdate'

  initialize: (options = {}) ->
    @$anchorInput = options.$anchorInput
    @showActiveTab()
    @refreshTabsErrors()

  showActiveTab: ->
    if (hash = (location.hash or @$anchorInput?.val()))
      @findTab(hash).tab('show')

  onTabShown: (e) =>
    tabHash = $(e.target).attr('href')
    history.pushState(null, null, tabHash)
    @updateAnchorInput()

  updateAnchorInput: ->
    @$anchorInput.val(location.hash) if @$anchorInput.length

  refreshTabsErrors: ->
    @$('[data-toggle="tab"]').each (i, tab) =>
      @refreshTabErrors($(tab))

  refreshTabErrors: ($tab) ->
    $panel = @$($tab.attr('href'))
    $tab.addClass('has-error') if $panel.find('.has-error').length

  onFormInputUpdate: (e) ->
    $tab = @findTab($(e.currentTarget).attr('id'))
    @refreshTabErrors($tab)

  findTab: (id) ->
    id = id.replace(/^\#/, '')
    @$('a[href="' + id + '"]')

$(document).on 'page:change turbolinks:load', ->
  $('[data-form-tabs]').each (i, el) ->
    new Para.Tabs(el: el, $anchorInput: $('[data-current-anchor]'))

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
para-0.7.0 app/assets/javascripts/para/admin/tabs.coffee