www/roster/views/projectSearch.js.rb (54 lines of code) (raw):

# # Searchable Project roster # class ProjectSearch < Vue def render matches = [] found = false search = @@search.downcase().strip().split(/\s+/) for id in @@project.roster do person = @@project.roster[id] match = search.all? {|term| id.include? term or person.name.downcase().include? term or person.role.downcase().include? term } next unless match or person.selected found = true if match person.id = id matches << person end matches = matches.sort_by {|person| person.name} _table.table.table_hover do _thead do _tr do _th if @@auth _th 'id' _th 'public name' _th 'role' end end _tbody do matches.each do |person| _tr key: "pmc_#{person.id}" do if @@auth _td do _input type: 'checkbox', checked: person.selected || false, onChange: -> {self.toggleSelect(person)} end end if person.member _td { _b { _a person.id, href: "committer/#{person.id}" } } _td { _b person.name } else _td { _a person.id, href: "committer/#{person.id}" } _td person.name end _td person.role end end end end _div.alert.alert_warning 'No matches' unless found end def toggleSelect(person) person.selected = !person.selected @@project.refresh() end end