close
This commit is contained in:
parent
8a275cc968
commit
2aa937bb49
1 changed files with 114 additions and 36 deletions
150
index.html
150
index.html
|
@ -47,40 +47,74 @@
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
// (function () {
|
// (function () {
|
||||||
var people = ["Ag",
|
|
||||||
"Ambrose",
|
|
||||||
"Irina",
|
|
||||||
"Kiril",
|
|
||||||
"Mark",
|
|
||||||
"Olivier",
|
|
||||||
"Rob",
|
|
||||||
"Wanderson",
|
|
||||||
];
|
|
||||||
var fts = [ "SX Session",
|
|
||||||
"Bug Squashing",
|
|
||||||
"Secure Client" ];
|
|
||||||
|
|
||||||
function enabledrag(event) { event.preventDefault(); }
|
function enabledrag(event) { event.preventDefault(); }
|
||||||
|
|
||||||
|
var state = null;
|
||||||
|
function retrieveState(){
|
||||||
|
var savestr = localStorage.getItem('plannerstate');
|
||||||
|
if (savestr) {
|
||||||
|
state = JSON.parse(savestr);
|
||||||
|
} else {
|
||||||
|
state = {people: ["Ag",
|
||||||
|
"Ambrose",
|
||||||
|
"Irina",
|
||||||
|
"Kiril",
|
||||||
|
"Mark",
|
||||||
|
"Olivier",
|
||||||
|
"Rob",
|
||||||
|
"Wanderson",
|
||||||
|
],
|
||||||
|
fts: [ "SX Session",
|
||||||
|
"Bug Squashing",
|
||||||
|
"Secure Client" ],
|
||||||
|
assignments: {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
console.log(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveState() {
|
||||||
|
localStorage.setItem('plannerstate',JSON.stringify(state));
|
||||||
|
}
|
||||||
|
|
||||||
function init(){
|
function init(){
|
||||||
|
retrieveState();
|
||||||
|
console.log(state);
|
||||||
var devcards=document.getElementById("devs");
|
var devcards=document.getElementById("devs");
|
||||||
people.forEach(function(p) {
|
state.people.forEach(function(p) {
|
||||||
devcards.appendChild( createDev(p) );
|
devcards.appendChild( createDev(p) );
|
||||||
})
|
})
|
||||||
// build main table
|
renderState();
|
||||||
var main = document.getElementById("main");
|
}
|
||||||
main.appendChild(genTable());
|
|
||||||
var cells = document.querySelectorAll("td");
|
function renderState () {
|
||||||
cells.forEach(function(cell) {
|
if (state) {
|
||||||
cell.ondragover = enabledrag;
|
// build main table
|
||||||
cell.ondrop = function(ev){drop(ev,this);};
|
var main = document.getElementById("main");
|
||||||
});
|
main.innerHTML='';
|
||||||
var trashel = document.getElementById("trash");
|
main.appendChild(genTable());
|
||||||
trashel.ondragover = enabledrag;
|
var cells = document.querySelectorAll("td");
|
||||||
trashel.ondrop = trash;
|
cells.forEach(function(cell) {
|
||||||
trashel.ondragenter = hltrash;
|
cell.ondragover = enabledrag;
|
||||||
trashel.ondragleave = unhltrash;
|
cell.ondrop = function(ev){drop(ev,this);};
|
||||||
var cards = document.querySelectorAll(".card");
|
});
|
||||||
cards.forEach(function(card){ card.draggable = true; card.ondragstart = drag; });
|
// build trash
|
||||||
|
var trashel = document.getElementById("trash");
|
||||||
|
trashel.ondragover = enabledrag;
|
||||||
|
trashel.ondrop = trash;
|
||||||
|
trashel.ondragenter = hltrash;
|
||||||
|
trashel.ondragleave = unhltrash;
|
||||||
|
var cards = document.querySelectorAll(".card");
|
||||||
|
cards.forEach(function(card){ card.draggable = true; card.ondragstart = drag; });
|
||||||
|
// build assignments
|
||||||
|
for ( cellid in state.assignments ) {
|
||||||
|
for ( member in state.assignments[cellid] ) {
|
||||||
|
var el = document.getElementById( cellid );
|
||||||
|
el.appendChild(devcard(member, cellid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,8 +127,8 @@
|
||||||
var rels = releases( previous, nexts );
|
var rels = releases( previous, nexts );
|
||||||
rels[0]="FT";
|
rels[0]="FT";
|
||||||
t.appendChild(mkTitleRow(rels));
|
t.appendChild(mkTitleRow(rels));
|
||||||
fts.forEach( function(ft) {
|
state.fts.forEach( function(ft) {
|
||||||
t.appendChild(mkRow(ft,nbcolumns));
|
t.appendChild(mkRow(ft,nbcolumns,rels));
|
||||||
});
|
});
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -107,7 +141,17 @@
|
||||||
});
|
});
|
||||||
return rows;
|
return rows;
|
||||||
}
|
}
|
||||||
function mkRow( ft, n ) {
|
|
||||||
|
function safe (str) {
|
||||||
|
var safestr = str.replace(/\W/g,'_');
|
||||||
|
return safestr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mkid(ft,rel) {
|
||||||
|
return "cell-" + safe(ft) + "-" + rel;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mkRow( ft, n, rels ) {
|
||||||
var rows = document.createElement("tr");
|
var rows = document.createElement("tr");
|
||||||
|
|
||||||
var ttitle = document.createElement("th");
|
var ttitle = document.createElement("th");
|
||||||
|
@ -116,21 +160,24 @@
|
||||||
|
|
||||||
var arr = new Array(n);
|
var arr = new Array(n);
|
||||||
arr.fill("");
|
arr.fill("");
|
||||||
|
i=1;
|
||||||
arr.forEach (function(v) {
|
arr.forEach (function(v) {
|
||||||
var c = document.createElement("td");
|
var c = document.createElement("td");
|
||||||
c.textContent = v;
|
c.textContent = v;
|
||||||
|
c.id = mkid(ft, rels[i]);
|
||||||
rows.appendChild(c);
|
rows.appendChild(c);
|
||||||
|
i++;
|
||||||
});
|
});
|
||||||
return rows;
|
return rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
function devcard(devname){
|
function devcard(devname,cellid){
|
||||||
var devdiv = document.createElement('div');
|
var devdiv = document.createElement('div');
|
||||||
devdiv.classList.add(devname);
|
devdiv.classList.add(devname);
|
||||||
devdiv.classList.add('card');
|
devdiv.classList.add('card');
|
||||||
devdiv.textContent = devname;
|
devdiv.textContent = devname;
|
||||||
devdiv.draggable = true;
|
devdiv.draggable = true;
|
||||||
devdiv.id = "inner-" + devname + Math.random().toString().substr(2, 8);
|
devdiv.id = "inner-" + devname + "-"+ cellid;
|
||||||
devdiv.style.backgroundColor = genColor(devname);
|
devdiv.style.backgroundColor = genColor(devname);
|
||||||
devdiv.ondragstart = drag;
|
devdiv.ondragstart = drag;
|
||||||
return devdiv;
|
return devdiv;
|
||||||
|
@ -151,7 +198,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function createDev(devname){
|
function createDev(devname){
|
||||||
var res = devcard(devname);
|
var res = devcard(devname,'');
|
||||||
res.id = devname;
|
res.id = devname;
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
@ -200,16 +247,45 @@
|
||||||
ev.dataTransfer.setData("text", ev.target.id);
|
ev.dataTransfer.setData("text", ev.target.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createAssignment(id, name) {
|
||||||
|
if (! state.assignments[id]) {
|
||||||
|
state.assignments[id]=[];
|
||||||
|
}
|
||||||
|
state.assignments[id].push(name);
|
||||||
|
console.log(state.assignments);
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveAssignment(id, name) {
|
||||||
|
var memberName = name.replace(/^[^-]*-/,'').replace(/-cell-.*$/,'');
|
||||||
|
var oldid = name.replace(/^.*-cell-/,'cell-');
|
||||||
|
if (! state.assignments[id]) {
|
||||||
|
state.assignments[id]=[];
|
||||||
|
}
|
||||||
|
console.log("memberName: " + memberName);
|
||||||
|
console.log("OLDID: " + oldid);
|
||||||
|
var idx = state.assignments[oldid].indexOf(memberName);
|
||||||
|
if (idx !== -1) {
|
||||||
|
state.assignments[oldid].splice(idx,1);
|
||||||
|
}
|
||||||
|
state.assignments[id].push(memberName);
|
||||||
|
console.log(state.assignments);
|
||||||
|
}
|
||||||
|
|
||||||
function drop(ev,el) {
|
function drop(ev,el) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
var name = ev.dataTransfer.getData("text");
|
var name = ev.dataTransfer.getData("text");
|
||||||
if ( name.startsWith("inner-") ) {
|
if ( name.startsWith("inner-") ) {
|
||||||
console.log("move: " + name);
|
console.log("move: " + name);
|
||||||
el.appendChild(document.getElementById(name));
|
document.getElementById(name).remove();
|
||||||
|
var memberName = name.replace(/^[^-]*-/,'').replace(/-cell-.*$/,'');
|
||||||
|
el.appendChild(devcard(memberName,el.id));
|
||||||
|
moveAssignment(el.id, name);
|
||||||
} else {
|
} else {
|
||||||
console.log("create: " + name);
|
console.log("create: " + name);
|
||||||
el.appendChild(devcard(name));
|
el.appendChild(devcard(name,el.id));
|
||||||
|
createAssignment(el.id, name);
|
||||||
}
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
function trash(ev) {
|
function trash(ev) {
|
||||||
|
@ -220,6 +296,7 @@
|
||||||
unhltrash(null);
|
unhltrash(null);
|
||||||
document.getElementById(name).remove();
|
document.getElementById(name).remove();
|
||||||
}
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
function hltrash(ev) {
|
function hltrash(ev) {
|
||||||
|
@ -232,6 +309,7 @@
|
||||||
trashel.classList.remove("hl");
|
trashel.classList.remove("hl");
|
||||||
}
|
}
|
||||||
window.addEventListener("load", init);
|
window.addEventListener("load", init);
|
||||||
|
|
||||||
// })();
|
// })();
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue