Sha256: df04e2402cd9cac6cabde632943fc4dcf2494bcd8531d0ab49f05aef2e5373da

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

class window.ColumnsHider
  constructor: ->
    @store_key = 'cols'
    @data_el = $('#columns_hider_data')
    @data = @getData()
    @collection_name = $('html').attr('id').replace(/^controller_/, '')
    @column_names = @columnNames()
    @initButtons()
    @initHandlers()
    @refreshColumns()

  setData: ->
    res = {}
    _.each @data, (v, k) ->
      res[k] = v.join('_')
    @storeData(res)

  getData: ->
    data = {}
    raw = $.parseJSON(@fetchData()) || {}
    _.each raw, (v, k) ->
      data[k] = []
      _.each v.split('_'), (el) ->
        data[k].push to_i(el) if el
    data

  fetchData: ->
    window.localStorage?[@store_key] or $.cookie(@store_key)

  storeData: (data) ->
    str = JSON.stringify(data)
    if window.localStorage
      window.localStorage[@store_key] = str
    else
      $.cookie(@store_key, str, {path: '/'})

  initButtons: ->
    @data_el.empty()
    for name, i in @column_names
      css_class = if _.include(@data[@collection_name], i) then 'active' else ''
      html = "<button class='btn btn-primary #{css_class}' data-val='#{i}'>#{name}</button>"
      @data_el.append(html)

  columnNames: ->
    _.map $('#list th'), (el) ->
      $el = $(el)
      $.trim($el.text().replace(/[▼▲]/g, ''))

  initHandlers: ->
    $('#submit_columns_hider').click =>
      col_ids = _.map $('#columns_hider_data .active'), (el) -> $(el).data('val')
      @data[@collection_name] = col_ids
      $('#columns_hider').modal('hide')
      @refreshColumns()
      @setData()
    $(document).on 'pjax:end', =>
      @refreshColumns()

  refreshColumns: ->
    if @data[@collection_name]
      @showAll()
      for i in @data[@collection_name]
        @hideByIndex(i + 1)

  hideByIndex: (i) ->
    $("#list tr th:nth-child(#{i}), #list tr td:nth-child(#{i})").hide()

  showAll: ->
    $("#list tr th, #list tr td").show()

$ ->
  window.columns_hider = new ColumnsHider()

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ab_admin-0.1.0 app/assets/javascripts/ab_admin/core/columns_hider.js.coffee