app/assets/javascripts/chr/loft/group-actions.coffee in loft-0.1.0 vs app/assets/javascripts/chr/loft/group-actions.coffee in loft-0.1.1

- old
+ new

@@ -1,61 +1,102 @@ +# ----------------------------------------------------------------------------- +# Author: Alexander Kravets <alex@slatestudio.com>, +# Slate Studio (http://www.slatestudio.com) +# +# Coding Guide: +# https://github.com/thoughtbot/guides/tree/master/style/coffeescript +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Loft Group Actions +# ----------------------------------------------------------------------------- class @LoftGroupActions - constructor: (@list, @module) -> + constructor: (@list, @loft) -> @_render() @_bind_checkboxes() _render: -> @$el =$ "<div class='assets-group-actions' style='display:none;'></div>" @list.$header.append @$el - @$unselectBtn =$ "<a href='#' class='unselect'>Unselect All</a>" - @$unselectBtn.on 'click', (e) => e.preventDefault(); @_unselect_list_items() - @$el.append @$unselectBtn + # accept selected + @$acceptBtn =$ "<a href='#' class='accept'>Accept</a>" + @$acceptBtn.on 'click', (e) => e.preventDefault(); @_accept_selected_items() + @$el.append @$acceptBtn + # delete button @$deleteBtn =$ "<a href='#' class='delete'>Delete Selected</a>" @$deleteBtn.on 'click', (e) => e.preventDefault(); @_delete_selected_list_items() @$el.append @$deleteBtn + # unselect button + @$unselectBtn =$ "<a href='#' class='unselect'>Unselect</a>" + @$unselectBtn.on 'click', (e) => e.preventDefault(); @_unselect_list_items() + @$el.append @$unselectBtn + _bind_checkboxes: -> - @list.$el.on 'click', '.asset .asset-checkbox', (e) => + @list.$el.on 'click', '.asset .asset-checkbox input', (e) => + # when multiple selection disabled select only one asset a time + if ! @loft.selectMultipleAssets + @_select_single_item($(e.target)) + selectedItems = @_selected_list_items() if selectedItems.length > 0 @_show() else - @_hide() + @hide() + _select_single_item: ($checkbox) -> + if $checkbox.prop('checked') + @list.$el.find('.asset .asset-checkbox input:checked').prop('checked' , false) + $checkbox.prop('checked', true) + + _selected_list_items: -> - @list.$el.find '.asset .asset-checkbox:checked' + $.map @list.$el.find('.asset .asset-checkbox input:checked'), (checkbox) -> $(checkbox).parent().parent() _unselect_list_items: -> - @list.$el.find('.asset .asset-checkbox').prop('checked', false) - @_hide() + @list.$el.find('.asset .asset-checkbox input').prop('checked', false) + @hide() _delete_selected_list_items: -> if confirm("Are you sure?") - selectedItems = @_selected_list_items() - filesToRemoveCounter = selectedItems.length + $selectedItems = @_selected_list_items() + filesToRemoveCounter = $selectedItems.length # we have on scroll pagination so after some items are removed, # next page request might skip items that replaced removed ones - for item in selectedItems - objectId = $(item).parent().attr('data-id') + for $item in $selectedItems + objectId = $item.attr('data-id') @list.config.arrayStore.remove objectId, onSuccess: => # success notification onError: => # error notification - @_hide() + @hide() + _accept_selected_items: -> + $selectedItems = @_selected_list_items() + + objects = [] + for $item in $selectedItems + objectId = $item.attr('data-id') + object = @list.config.arrayStore.get(objectId) + objects.push object + + @loft.onAcceptCallback(objects) + @loft.closeModal() + + _show: -> @$el.show() - _hide: -> + hide: -> @$el.hide()