most basic version of daily planner added

This commit is contained in:
Johannes Millan 2016-12-30 19:34:19 +01:00
parent fca96d641e
commit 905d07c417
8 changed files with 145 additions and 27 deletions

View file

@ -55,6 +55,9 @@ TODO configure more restrictive Content-Security-Policy
<script src="bower_components/angular-aria/angular-aria.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/angular-local-storage/dist/angular-local-storage.js"></script>
<script src="bower_components/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js"></script>
<script src="bower_components/ngstorage/ngStorage.js"></script>
<!-- endbower -->
<!-- endbuild -->

View file

@ -7,7 +7,7 @@
* Main module of the application.
*/
(function () {
(function() {
'use strict';
angular
@ -16,12 +16,7 @@
'ngAria',
'ngResource',
'ui.router',
'LocalStorageModule'
])
.config(initLocalStorage);
function initLocalStorage(localStorageServiceProvider) {
localStorageServiceProvider
.setPrefix('superProductivity');
}
'ngStorage',
'dndLists'
]);
})();

View file

@ -1,3 +1,38 @@
daily-planner {
display: block;
.task-list {
min-height: 100px;
list-style: none;
// add a little padding to top and bottom, to make drag dropping easier
padding: 20px 0;
.dndDraggingSource {
display: none;
}
.dndPlaceholder {
background-color: #ddd;
display: block;
min-height: 42px;
}
&__backlog {
border: 1px dashed gray;
}
}
.task {
background-color: #fff;
border: 1px solid #ddd;
border-top-right-radius: 4px;
border-top-left-radius: 4px;
display: block;
padding: 10px 15px;
margin-bottom: -1px;
&.is-selected {
background-color: #dff0d8;
color: #3c763d;
}
}
}

View file

@ -1,6 +1,49 @@
<div class ="daily-planner">
<div ng-if="!step || step ===0">
<div class="daily-planner">
<div ng-if="!vm.step || vm.step ===0">
<div class="input">
<div class="info">What do you want to do today?</div>
<form ng-submit="vm.addTask()">
<input class="text-input"
ng-model="vm.newTask">
<button type="submit">Submit</button>
</form>
<h2>Tasks for today</h2>
<ul class="task-list"
dnd-list="vm.listModel.lists.today">
<li class="task"
dnd-draggable="task"
dnd-effect-allowed="move"
dnd-moved="vm.listModel.lists.today.splice($index, 1);"
ng-class="{'is-selected': vm.listModel.selected === task}"
ng-repeat="task in vm.listModel.lists.today">
{{ task.title }}
</li>
</ul>
<div class="info">
If you're done, you should spend some time prioritizing your tasks, by ordering them via drag and drop.
</div>
<h2>Tasks Backlog (for some other time)</h2>
<ul class="task-list task-list__backlog"
dnd-list="vm.listModel.lists.backlog">
<li class="task"
dnd-draggable="task"
dnd-effect-allowed="move"
dnd-moved="vm.listModel.lists.backlog.splice($index, 1);"
ng-class="{'is-selected': vm.listModel.selected === task}"
ng-repeat="task in vm.listModel.lists.backlog | limitTo:vm.limitBacklogTo">
{{ task.title }}
</li>
</ul>
<button ng-click="vm.limitBacklogTo = false"
ng-hide="vm.limitBacklogTo === false || vm.listModel.lists.backlog.length ===0">Show All {{ vm.listModel.lists.backlog.length }} items
</button>
</div>
</div>
</div>

View file

@ -5,26 +5,24 @@
* # dailyPlanner
*/
(function() {
(function () {
'use strict';
angular
.module('superProductivity')
.directive('dailyPlanner', dailyPlanner);
.module('superProductivity')
.directive('dailyPlanner', dailyPlanner);
/* @ngInject */
function dailyPlanner() {
return {
templateUrl: 'scripts/daily-planner/daily-planner-d.html',
bindToController: true,
controller: DailyPlannerCtrl,
controllerAs: 'vm',
link: linkFn,
restrict: 'E',
scope: {
}
};
templateUrl: 'scripts/daily-planner/daily-planner-d.html',
bindToController: true,
controller: DailyPlannerCtrl,
controllerAs: 'vm',
link: linkFn,
restrict: 'E',
scope: {}
};
function linkFn(scope, element, attrs) {
@ -32,8 +30,46 @@
}
/* @ngInject */
function DailyPlannerCtrl() {
var vm = this;
function DailyPlannerCtrl($localStorage, $scope) {
let vm = this;
$localStorage.$default({
tasks: [],
backlogTasks: []
});
vm.limitBacklogTo = 3;
vm.tasks = $localStorage.tasks;
vm.backlogTasks = $localStorage.backlogTasks;
vm.listModel = {
selected: null,
lists: {
today: vm.tasks,
backlog: vm.backlogTasks
}
};
$scope.models = {
selected: null,
lists: { "A": [], "B": [] }
};
// Generate initial model
for (var i = 1; i <= 3; ++i) {
$scope.models.lists.A.push({ label: "Item A" + i });
$scope.models.lists.B.push({ label: "Item B" + i });
}
vm.addTask = function () {
vm.tasks.push({
title: vm.newTask,
id: Math.random().toString(36).substr(2, 10)
});
console.log('I am here!', vm.tasks);
vm.newTask = '';
};
}
})();

View file

@ -15,6 +15,7 @@ html {
width: 100%;
max-width: 100%;
overflow-x: hidden;
font-family: sans-serif;
}
main {

View file

@ -20,7 +20,9 @@
"angular-aria": "^1.5.0",
"angular-resource": "^1.5.0",
"angular-ui-router": "latest",
"angular-local-storage": "^0.5.2"
"angular-local-storage": "^0.5.2",
"angular-drag-and-drop-lists": "^2.0.0",
"ngstorage": "^0.3.11"
},
"devDependencies": {
"angular-mocks": "^1.5.0"

View file

@ -19,6 +19,9 @@ module.exports = function(config) {
'app/bower_components/angular-aria/angular-aria.js',
'app/bower_components/angular-resource/angular-resource.js',
'app/bower_components/angular-ui-router/release/angular-ui-router.js',
'app/bower_components/angular-local-storage/dist/angular-local-storage.js',
'app/bower_components/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js',
'app/bower_components/ngstorage/ngStorage.js',
'app/bower_components/angular-mocks/angular-mocks.js',
// endbower