Advertisement
Guest User

Untitled

a guest
Jul 25th, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict'
  2.  
  3. angular.module('app.task', [])
  4.  
  5. .factory('taskStorage', ->
  6.     STORAGE_ID = 'tasks'
  7.     DEMO_TASKS = '[
  8.        {"title": "Finish homework", "completed": true},
  9.        {"title": "Make a call", "completed": true},
  10.        {"title": "Play games with friends", "completed": false},
  11.        {"title": "Shopping", "completed": false}
  12.  
  13.    ]'
  14.  
  15.     return {
  16.         get: ->
  17.             JSON.parse(localStorage.getItem(STORAGE_ID) || DEMO_TASKS )
  18.  
  19.         put: (tasks)->
  20.             localStorage.setItem(STORAGE_ID, JSON.stringify(tasks))
  21.     }
  22. )
  23.  
  24. # cusor focus when dblclick to edit
  25. .directive('taskFocus', [
  26.     '$timeout'
  27.     ($timeout) ->
  28.         return {
  29.             link: (scope, ele, attrs) ->
  30.                 scope.$watch(attrs.taskFocus, (newVal) ->
  31.                     if newVal
  32.                         $timeout( ->
  33.                             ele[0].focus()
  34.                         , 0, false)
  35.                 )
  36.         }
  37. ])
  38.  
  39. .controller('taskCtrl', [
  40.     '$scope', 'taskStorage', 'filterFilter', '$rootScope', 'logger'
  41.     ($scope, taskStorage, filterFilter, $rootScope, logger) ->
  42.  
  43.         tasks = $scope.tasks = taskStorage.get()
  44.  
  45.         $scope.newTask = ''
  46.         $scope.remainingCount = filterFilter(tasks, {completed: false}).length
  47.         $scope.editedTask = null
  48.         $scope.statusFilter = {completed: false}
  49.  
  50.         $scope.filter = (filter) ->
  51.             switch filter
  52.                 when 'all' then $scope.statusFilter = ''
  53.                 when 'active' then $scope.statusFilter = {completed: false}
  54.                 when 'completed' then $scope.statusFilter = {completed: true}
  55.  
  56.         $scope.add = ->
  57.             newTask = $scope.newTask.trim()
  58.  
  59.             if newTask.length is 0
  60.                 return
  61.  
  62.             tasks.push(
  63.                 title: newTask
  64.                 completed: false
  65.             )
  66.             logger.logSuccess('New task: "' + newTask + '" added')
  67.  
  68.             taskStorage.put(tasks)
  69.  
  70.             $scope.newTask = ''
  71.             $scope.remainingCount++
  72.  
  73.         $scope.edit = (task)->
  74.             $scope.editedTask = task
  75.  
  76.         $scope.doneEditing = (task) ->
  77.             $scope.editedTask = null
  78.             task.title = task.title.trim()
  79.  
  80.             if !task.title
  81.                 $scope.remove(task)
  82.             else
  83.                 logger.log('Task updated')
  84.             taskStorage.put(tasks)
  85.  
  86.         $scope.remove = (task) ->
  87.             $scope.remainingCount -= if task.completed then 0 else 1
  88.             index = $scope.tasks.indexOf(task)
  89.             $scope.tasks.splice(index, 1)
  90.             taskStorage.put(tasks)
  91.             logger.logError('Task removed')
  92.  
  93.         $scope.completed = (task) ->
  94.             $scope.remainingCount += if task.completed then -1 else 1
  95.             taskStorage.put(tasks)
  96.             if task.completed
  97.                 if $scope.remainingCount > 0
  98.                     if $scope.remainingCount is 1
  99.                         logger.log('Almost there! Only ' + $scope.remainingCount + ' task left')
  100.                     else
  101.                         logger.log('Good job! Only ' + $scope.remainingCount + ' tasks left')
  102.                 else
  103.                     logger.logSuccess('Congrats! All done :)')
  104.  
  105.         $scope.clearCompleted = ->
  106.             $scope.tasks = tasks = tasks.filter( (val) ->
  107.                 return !val.completed
  108.             )
  109.             taskStorage.put(tasks)
  110.  
  111.         $scope.markAll = (completed)->
  112.             tasks.forEach( (task) ->
  113.                 task.completed = completed
  114.             )
  115.             $scope.remainingCount = if completed then 0 else tasks.length
  116.             taskStorage.put(tasks)
  117.             if completed
  118.                 logger.logSuccess('Congrats! All done :)')
  119.  
  120.         $scope.$watch('remainingCount == 0', (val) ->
  121.             $scope.allChecked = val
  122.         )
  123.  
  124.         $scope.$watch('remainingCount', (newVal, oldVal) ->
  125.             $rootScope.$broadcast('taskRemaining:changed', newVal)
  126.         )
  127. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement