Skip to content

Commit d28372a

Browse files
committed
to do list implemantion
0 parents  commit d28372a

File tree

7 files changed

+132
-0
lines changed

7 files changed

+132
-0
lines changed

components/task-add.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
Vue.component('task-add', {
2+
template: `
3+
<div>
4+
<input v-on:keyup.enter="addToList" v-model="newItemText" type="text" placeholder="insert task to list.."/>
5+
<button v-on:click="addToList">
6+
Add Item
7+
</button>
8+
</div>
9+
`,
10+
data: function () {
11+
return {
12+
newItemText:""
13+
}
14+
},
15+
props: ['items'],
16+
methods: {
17+
addToList: function () {
18+
if (this.items.indexOf(this.newItem) >= 0) {
19+
} else this.items.push({
20+
text: this.newItemText,
21+
activity: false,
22+
id: this.items.length
23+
});
24+
this.newItem = {text: null};
25+
},
26+
},
27+
});
28+
29+

components/task-delete.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Vue.component('task-delete',{
2+
template:`<button v-bind:style="{'background-color':'yellow'}" @click="removeItem" >Delete</button>`,
3+
props: ['item'],
4+
methods: {
5+
removeItem:function () {
6+
this.$emit("remove-item",this.item);
7+
}
8+
}
9+
});

components/task-details.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Vue.component('task-details', {
2+
template: `
3+
<div v-if="selectedItem">
4+
<label for="item-text">text:</label>
5+
<input id="item-text" type=text v-model="selectedItem.text"/>
6+
<button v-bind:style="{'background-color': selectedItem.activity ? '#4CAF50' : 'red'}" v-on:click="selectedItem.activity = !selectedItem.activity">{{selectedItem.activity}}</button>
7+
<task-delete :item="selectedItem" v-on:remove-item="removeItem"></task-delete>
8+
</div>
9+
`,
10+
props: ['selectedItem'],
11+
data: function () {
12+
return {
13+
}
14+
},
15+
methods: {
16+
removeItem: function (item) {
17+
this.$emit("remove-item",item);
18+
}
19+
}
20+
});

components/task-item.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Vue.component("task-item",{
2+
template:` <div @click='selectItemEdit(item)' v-bind:style="{'text-decoration': item.activity ? 'line-through' : null}">{{item.text}} </div>` ,
3+
props: ['item'],
4+
methods:{
5+
selectItemEdit: function (item) {
6+
this.$emit('select-item', item);
7+
},
8+
}
9+
});

components/task-list.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Vue.component('task-list', {
2+
template: `
3+
<div>
4+
<ul>
5+
<li v-for="item in items">
6+
<task-item :item="item" v-on:select-item="selectItemEdit"></task-item>
7+
</li>
8+
</ul>
9+
</div>
10+
`,
11+
props: ['items','selectedItem'],
12+
methods: {
13+
selectItemEdit: function (item) {
14+
this.$emit('select-item', item);
15+
},
16+
},
17+
});

todo.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Title</title>
6+
</head>
7+
<body>
8+
9+
<div id="app">
10+
<task-add :items="items"></task-add>
11+
<task-list :items="items" v-on:select-item="selectItem" v-on:remove-item="removeItem" :selected-item="selectedItem"></task-list>
12+
<task-details :selected-item="selectedItem" v-on:remove-item="removeItem"></task-details>
13+
</div>
14+
15+
<script src="https://unpkg.com/vue"></script>
16+
<script src="components/task-add.js"></script>
17+
<script src="components/task-list.js"></script>
18+
<script src="components/task-details.js"></script>
19+
<script src="components/task-delete.js"></script>
20+
<script src="components/task-item.js"></script>
21+
<script src="todo.js"></script>
22+
</body>
23+
</html>

todo.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var app = new Vue({
2+
el: '#app',
3+
data: {
4+
items: [],
5+
selectedItem: null,
6+
},
7+
methods : {
8+
selectItem : function (item) {
9+
console.log('selectItem: ', item);
10+
this.selectedItem = item;
11+
},
12+
removeItem: function (itemToRemove) {
13+
console.log('removeItem: ', itemToRemove);
14+
var idx = this.items.map(function (item) {
15+
return item.id;
16+
}).indexOf(itemToRemove.id);
17+
18+
if (idx !== -1) {
19+
this.items.splice(idx, 1);
20+
}
21+
22+
this.selectedItem = null;
23+
}
24+
}
25+
});

0 commit comments

Comments
 (0)