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> </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>