setup-grunt: add package.json
setup-grunt: add Gruntfile.js
setup-grunt: create build/ folder for built files. Fix warnings from JSHint
setup-grunt: rearrange directory structure and add ugligy task for Grunt
setup-grunt: add qunit
Link js and css files to those in src/ during development
unit-testing: test sliding the puzzle up/down/left/right
setup-local-storage: save game state and time passed to local storage
setup-local-storage: update best time if possible when the game is won
Fix bug of first load with no best time
Allow shuffling when initializing the game
time-log: remove the custom directive ngTimePassed. Define custom filter 'duration' to display time
Merge branch 'master' into gh-pages
Merge new feature from branch master
Remove some necessary lines in code
unit-testing: finish testing Board class
Create separate js files for controllers and filters
time-log: fix bug of not saving 'timePassed' each second
animation: define a directive for body so that we can overlay a tile over the empty cell and move it
animation: make the empty tile move following keydown event. Bug exists when click New Game