This commit is contained in:
Yann Esposito (Yogsototh) 2021-09-06 17:27:11 +02:00
parent 8a275cc968
commit 2aa937bb49
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646

View file

@ -47,40 +47,74 @@
</body>
<script>
// (function () {
var people = ["Ag",
"Ambrose",
"Irina",
"Kiril",
"Mark",
"Olivier",
"Rob",
"Wanderson",
];
var fts = [ "SX Session",
"Bug Squashing",
"Secure Client" ];
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(){
retrieveState();
console.log(state);
var devcards=document.getElementById("devs");
people.forEach(function(p) {
state.people.forEach(function(p) {
devcards.appendChild( createDev(p) );
})
// build main table
var main = document.getElementById("main");
main.appendChild(genTable());
var cells = document.querySelectorAll("td");
cells.forEach(function(cell) {
cell.ondragover = enabledrag;
cell.ondrop = function(ev){drop(ev,this);};
});
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; });
renderState();
}
function renderState () {
if (state) {
// build main table
var main = document.getElementById("main");
main.innerHTML='';
main.appendChild(genTable());
var cells = document.querySelectorAll("td");
cells.forEach(function(cell) {
cell.ondragover = enabledrag;
cell.ondrop = function(ev){drop(ev,this);};
});
// 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 );
rels[0]="FT";
t.appendChild(mkTitleRow(rels));
fts.forEach( function(ft) {
t.appendChild(mkRow(ft,nbcolumns));
state.fts.forEach( function(ft) {
t.appendChild(mkRow(ft,nbcolumns,rels));
});
return t;
}
@ -107,7 +141,17 @@
});
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 ttitle = document.createElement("th");
@ -116,21 +160,24 @@
var arr = new Array(n);
arr.fill("");
i=1;
arr.forEach (function(v) {
var c = document.createElement("td");
c.textContent = v;
c.id = mkid(ft, rels[i]);
rows.appendChild(c);
i++;
});
return rows;
}
function devcard(devname){
function devcard(devname,cellid){
var devdiv = document.createElement('div');
devdiv.classList.add(devname);
devdiv.classList.add('card');
devdiv.textContent = devname;
devdiv.draggable = true;
devdiv.id = "inner-" + devname + Math.random().toString().substr(2, 8);
devdiv.id = "inner-" + devname + "-"+ cellid;
devdiv.style.backgroundColor = genColor(devname);
devdiv.ondragstart = drag;
return devdiv;
@ -151,7 +198,7 @@
}
function createDev(devname){
var res = devcard(devname);
var res = devcard(devname,'');
res.id = devname;
return res;
};
@ -200,16 +247,45 @@
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) {
ev.preventDefault();
var name = ev.dataTransfer.getData("text");
if ( name.startsWith("inner-") ) {
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 {
console.log("create: " + name);
el.appendChild(devcard(name));
el.appendChild(devcard(name,el.id));
createAssignment(el.id, name);
}
saveState();
}
function trash(ev) {
@ -220,6 +296,7 @@
unhltrash(null);
document.getElementById(name).remove();
}
saveState();
}
function hltrash(ev) {
@ -232,6 +309,7 @@
trashel.classList.remove("hl");
}
window.addEventListener("load", init);
// })();
</script>
</html>