-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcolumn.js
117 lines (94 loc) · 3.87 KB
/
column.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class Column {
constructor(id = undefined){
const instance = this;
const element = this.element = document.createElement('div')
element.classList.add('column')
element.setAttribute('draggable', 'true');
if (id) element.setAttribute('data-column-id', id);
else element.setAttribute('data-column-id', Column.idCounter++);
element.innerHTML = `<p class="column-header"></p><div data-notes></div><p class="column-footer"><span data-action-addNote class="action">+ Добавить карточку</span></p>`;
const spanAction_addNote = element.querySelector('[data-action-addNote]')
spanAction_addNote.addEventListener('click', function (event) {
let note = new Note();
instance.add(note);
note.element.focus()
})
element.addEventListener('dragstart', this.dragstart.bind(this))
element.addEventListener('dragend', this.dragend.bind(this))
element.addEventListener('dragenter', this.dragenter.bind(this))
element.addEventListener('dragover', this.dragover.bind(this))
element.addEventListener('dragleave', this.dragleave.bind(this))
element.addEventListener('drop', this.drop.bind(this))
const headerElement = element.querySelector('.column-header')
headerElement.addEventListener('dblclick', function (event) {
headerElement.setAttribute('contenteditable', true)
headerElement.focus()
});
headerElement.addEventListener('blur', function (event) {
headerElement.removeAttribute('contenteditable', true);
Application.save();
});
element.querySelector('.column-header').setAttribute('contenteditable', true);
}
add(note){
this.element.querySelector('[data-notes]').append(note.element);
}
dragstart (event) {
Column.dragged = this.element
this.element.classList.add('dragged')
event.stopPropagation()
}
dragend (event) {
this.element.classList.remove('dragged')
Column.dragged = null
// document
// .querySelectorAll('.column')
// .forEach(x => x.classList.remove('under'))
}
dragenter (event) {
if (!Column.dragged || this.element === Column.dragged) {
return
}
// this.element.classList.add('under')
}
dragover (event) {
event.preventDefault()
if (!Column.dragged || this.element === Column.dragged) {
return
}
this.element.classList.add('under')
}
dragleave (event) {
if (!Column.dragged || this.element === Column.dragged) {
return
}
this.element.classList.remove('under')
}
drop (event) {
event.stopPropagation()
this.element.classList.remove('under')
// note dropped on column
if (Note.dragged) {
this.element.querySelector('[data-notes]').append(Note.dragged);
Application.save();
return;
}
// column dropped on a column
// not the same column
if (this.element !== Column.dragged) {
const col = Array.from(document.querySelectorAll('.column'))
const indexA = col.indexOf(this.element)
const indexB = col.indexOf(Column.dragged)
if (indexA < indexB) {
this.element.parentElement.insertBefore(Column.dragged, this.element)
}
else {
this.element.parentElement.insertBefore(Column.dragged, this.element.nextElementSibling)
}
Application.save();
}
else return
}
}
Column.idCounter = 4;
Column.dragged = null;