Merge branch 'master' of github.com:radekstepan/burnchart.io
This commit is contained in:
commit
5d6bed2759
|
@ -4,12 +4,16 @@ config = require '../models/config.coffee'
|
||||||
mediator = require '../modules/mediator.coffee'
|
mediator = require '../modules/mediator.coffee'
|
||||||
Model = require '../utils/model.coffee'
|
Model = require '../utils/model.coffee'
|
||||||
date = require '../utils/date.coffee'
|
date = require '../utils/date.coffee'
|
||||||
|
search = require '../utils/search.coffee'
|
||||||
user = require './user.coffee'
|
user = require './user.coffee'
|
||||||
|
|
||||||
module.exports = new Model
|
module.exports = new Model
|
||||||
|
|
||||||
'name': 'models/projects'
|
'name': 'models/projects'
|
||||||
|
|
||||||
|
'data':
|
||||||
|
'sortKey': 'priority'
|
||||||
|
|
||||||
find: (project) ->
|
find: (project) ->
|
||||||
_.find @data.list, project
|
_.find @data.list, project
|
||||||
|
|
||||||
|
@ -32,6 +36,19 @@ module.exports = new Model
|
||||||
clear: ->
|
clear: ->
|
||||||
@set 'list', []
|
@set 'list', []
|
||||||
|
|
||||||
|
# Sort an already sorted index.
|
||||||
|
sort: ->
|
||||||
|
# Get or initialize the index.
|
||||||
|
index = @data.index or []
|
||||||
|
|
||||||
|
for p in @data.list
|
||||||
|
for m in p.milestones
|
||||||
|
# Run a comparator here inserting into index.
|
||||||
|
@data.sortKey
|
||||||
|
|
||||||
|
# Save the index.
|
||||||
|
@set 'index', index
|
||||||
|
|
||||||
onconstruct: ->
|
onconstruct: ->
|
||||||
mediator.on '!projects/add', _.bind @add, @
|
mediator.on '!projects/add', _.bind @add, @
|
||||||
mediator.on '!projects/clear', _.bind @clear, @
|
mediator.on '!projects/clear', _.bind @clear, @
|
||||||
|
@ -40,7 +57,16 @@ module.exports = new Model
|
||||||
# Init the projects.
|
# Init the projects.
|
||||||
@set 'list', lscache.get('projects') or []
|
@set 'list', lscache.get('projects') or []
|
||||||
|
|
||||||
# Persist projects in local storage (sans milestones).
|
|
||||||
@observe 'list', (projects) ->
|
@observe 'list', (projects) ->
|
||||||
|
# Persist projects in local storage (sans milestones).
|
||||||
lscache.set 'projects', _.pluckMany projects, [ 'owner', 'name' ]
|
lscache.set 'projects', _.pluckMany projects, [ 'owner', 'name' ]
|
||||||
, 'init': no
|
# Update the index.
|
||||||
|
do @sort
|
||||||
|
, 'init': no
|
||||||
|
|
||||||
|
# Reset our index and re-sort.
|
||||||
|
@observe 'sortKey', ->
|
||||||
|
# Use pop as Ractive is glitchy.
|
||||||
|
@pop 'index' while @data.index.length
|
||||||
|
# Run the sort again.
|
||||||
|
do @sort
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Binary search implementation with a custom comparator function.
|
||||||
|
module.exports = (arr, item, comparator) ->
|
||||||
|
# Numeric comparator.
|
||||||
|
comparator ?= (a, b) ->
|
||||||
|
switch
|
||||||
|
when a < b then -1
|
||||||
|
when a > b then +1
|
||||||
|
else 0
|
||||||
|
|
||||||
|
minIndex = 0
|
||||||
|
maxIndex = arr.length - 1
|
||||||
|
|
||||||
|
while minIndex <= maxIndex
|
||||||
|
index = (minIndex + maxIndex) / 2 | 0
|
||||||
|
existing = arr[index]
|
||||||
|
|
||||||
|
res = comparator existing, item
|
||||||
|
switch
|
||||||
|
when result < 0 then minIndex = index + 1
|
||||||
|
when result > 0 then maxIndex = index - 1
|
||||||
|
else return index
|
||||||
|
|
||||||
|
-1
|
Loading…
Reference in New Issue