UNPKG

coffeescript-ui

Version:
198 lines (146 loc) 3.87 kB
### * coffeescript-ui - Coffeescript User Interface System (CUI) * Copyright (c) 2013 - 2016 Programmfabrik GmbH * MIT Licence * https://github.com/programmfabrik/coffeescript-ui, http://www.coffeescript-ui.org ### class CUI.ListViewRow extends CUI.Element initOpts: -> super() @addOpts columns: check: Array selectable: check: Boolean class: check: String readOpts: -> super() if @_columns @columns = @_columns for col, idx in @columns if col @setColumn(idx, col) else @columns = [] # keep track of classes using a dummy # div which is detached from DOM if @_selectable == false @setSelectable(false) else @setSelectable(true) if @_class @__class = @_class else @__class = "" @row_i = null @__addedToListView = false @listView = null addColumn: (column) -> CUI.util.assert(column instanceof CUI.ListViewColumn,"ListViewRow.addColumn", "column must be instance of ListViewColumn", column: column) @columns.push(column) column.setRow(@) @ setColumn: (idx, column) -> CUI.util.assert(column instanceof CUI.ListViewColumn,"ListViewRow.addColumn", "column must be instance of ListViewColumn", column: column) @columns[idx] = column column.setRow(@) @ prependColumn: (column) -> CUI.util.assert(column instanceof CUI.ListViewColumn,"ListViewRow.prependColumn", "column must be instance of ListViewColumn", column: column) @columns.splice(0,0,column) column.setRow(@) @ setSelectable: (on_off) -> @__selectable = on_off isSelectable: -> if @listView if not @listView.hasSelectableRows() return false if @getDisplayRowIdx() < @listView.fixedRowsCount return false @__selectable isMovable: (ev) -> @listView.hasMovableRows() # overwrite with a function for an alternative # row move implementation # signature: (listView, target_node, after) # called in ListViewRowMoveTool moveRow: null removeColumns: -> # console.debug "this", @, @columns for c in @columns c.setRow() @columns.splice(0) getColumns: -> @columns setRowIdx: (@row_i) -> @ getDOMNodes: -> @listView?.getRow(@row_i) getRowIdx: -> @row_i scrollIntoView: -> @getDOMNodes()[0]?.scrollIntoView() @ getDisplayRowIdx: -> @listView?.getDisplayRowIdx(@row_i) addedToListView: (DOMNodes) -> @__addedToListView = true isAddedToListView: -> @__addedToListView setListView: (@listView) -> getListView: -> @listView __selectableClass: "cui-list-view-row-selectable" __movableClass: "cui-list-view-row-movable" # used while node is rendered getClass: -> cls = @__class if @isSelectable() cls = @__selectableClass + " " + cls if @isMovable() cls = @__movableClass + " " + cls cls # use this before node is rendered setClass: (@__class) -> # use this after node is rendered addClass: (cls) -> @listView?.rowAddClass(@row_i, cls) # use this after node is rendered removeClass: (cls) -> @listView?.rowRemoveClass(@row_i, cls) select: (ev) -> if @selected console.debug "already selected", @ return if not @isSelectable() console.debug "not selectable", @ return @selected = true if not @listView return @listView.rowAddClass(@row_i, CUI.ListViewRow.defaults.selected_class) @listView._onSelect? ev, originalEvent: ev listView: @listView row: @ CUI.resolvedPromise() deselect: (ev) -> if not @listView.hasSelectableRows() return CUI.rejectedPromise() if not @selected return CUI.rejectedPromise() @listView?.rowRemoveClass(@row_i, CUI.ListViewRow.defaults.selected_class) @selected = false @listView?._onDeselect? ev, originalEvent: ev listView: @listView row: @ CUI.resolvedPromise() isSelected: -> !!@selected remove: -> @listView.removeRow(@row_i) @defaults: selected_class: "cui-selected"