2021-09-06 11:50:35 +00:00
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>Drag and Drop</title>
|
|
|
|
<style>
|
|
|
|
body { font-family: monospace; }
|
|
|
|
table { border: solid;}
|
|
|
|
img {
|
|
|
|
width:50px;
|
|
|
|
height:50px;
|
|
|
|
}
|
|
|
|
td {
|
|
|
|
width:60px;
|
|
|
|
height:30px;
|
|
|
|
text-align: center;
|
|
|
|
border: solid 1px;
|
|
|
|
}
|
2021-09-06 13:37:20 +00:00
|
|
|
.card { border-radius: 6px;
|
|
|
|
border: solid 1px #000;
|
|
|
|
color: white;
|
|
|
|
min-width: 1em;
|
|
|
|
height: 1em;
|
|
|
|
padding: 1px 3px 3px ;
|
|
|
|
text-align: center;
|
|
|
|
font-weight: bold;
|
|
|
|
margin: 2px;
|
|
|
|
display: inline-block;
|
|
|
|
}
|
2021-09-06 11:50:35 +00:00
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<center>
|
|
|
|
<h1>Plan</h1>
|
2021-09-06 12:48:48 +00:00
|
|
|
<h3>people</h3>
|
|
|
|
<div id="devs"></div>
|
|
|
|
<h3>work</h3>
|
|
|
|
<div id="main"></div>
|
2021-09-06 11:50:35 +00:00
|
|
|
</body>
|
|
|
|
<script>
|
2021-09-06 13:37:20 +00:00
|
|
|
// (function () {
|
|
|
|
var people = ["Ag",
|
|
|
|
"Ambrose",
|
|
|
|
"Irina",
|
|
|
|
"Kiril",
|
|
|
|
"Mark",
|
|
|
|
"Olivier",
|
|
|
|
"Rob",
|
|
|
|
"Wanderson",
|
|
|
|
];
|
2021-09-06 12:48:48 +00:00
|
|
|
var nbcolumns = 2;
|
|
|
|
var fts = [ "SX Session", "Bug Squashing", "Secure Client" ]
|
2021-09-06 11:50:35 +00:00
|
|
|
|
2021-09-06 12:48:48 +00:00
|
|
|
function init(){
|
|
|
|
var devcards=document.getElementById("devs");
|
|
|
|
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 = function(event){ event.preventDefault(); };
|
|
|
|
cell.ondrop = function(ev){drop(ev,this);};
|
|
|
|
});
|
|
|
|
var cards = document.querySelectorAll(".card");
|
|
|
|
cards.forEach(function(card){ card.draggable = true; card.ondragstart = drag; });
|
|
|
|
}
|
|
|
|
|
2021-09-06 13:37:20 +00:00
|
|
|
|
2021-09-06 12:48:48 +00:00
|
|
|
function genTable () {
|
|
|
|
var t = document.createElement("table");
|
|
|
|
t.id = "maintable";
|
2021-09-06 13:37:20 +00:00
|
|
|
var previous = 2; // nb of previous release to show (2 means, 1 previous to prod, + current in prod)
|
|
|
|
var nexts = 4; // nb of next releases to show
|
|
|
|
var nbcolumns = previous + nexts;
|
|
|
|
var rels = releases( previous, nexts );
|
|
|
|
rels[0]="FT";
|
|
|
|
t.appendChild(mkTitleRow(rels));
|
2021-09-06 12:48:48 +00:00
|
|
|
fts.forEach( function(ft) {
|
2021-09-06 13:37:20 +00:00
|
|
|
t.appendChild(mkRow(ft,nbcolumns));
|
2021-09-06 12:48:48 +00:00
|
|
|
});
|
|
|
|
return t;
|
|
|
|
}
|
|
|
|
function mkTitleRow( vs ) {
|
|
|
|
var rows = document.createElement("tr");
|
|
|
|
vs.forEach (function(v) {
|
|
|
|
var c = document.createElement("th");
|
|
|
|
c.textContent = v;
|
|
|
|
rows.appendChild(c);
|
|
|
|
});
|
|
|
|
return rows;
|
|
|
|
}
|
|
|
|
function mkRow( ft, n ) {
|
|
|
|
var rows = document.createElement("tr");
|
|
|
|
|
|
|
|
var ttitle = document.createElement("th");
|
|
|
|
ttitle.textContent = ft;
|
|
|
|
rows.appendChild(ttitle)
|
|
|
|
|
|
|
|
var arr = new Array(n);
|
|
|
|
arr.fill("");
|
|
|
|
arr.forEach (function(v) {
|
|
|
|
var c = document.createElement("td");
|
|
|
|
c.textContent = v;
|
|
|
|
rows.appendChild(c);
|
|
|
|
});
|
|
|
|
return rows;
|
|
|
|
}
|
|
|
|
|
|
|
|
function devcard(devname){
|
|
|
|
var devdiv = document.createElement('div');
|
|
|
|
devdiv.classList.add(devname);
|
|
|
|
devdiv.classList.add('card');
|
2021-09-06 13:37:20 +00:00
|
|
|
devdiv.textContent = devname;
|
|
|
|
devdiv.style.backgroundColor = genColor(devname);
|
2021-09-06 12:48:48 +00:00
|
|
|
return devdiv;
|
|
|
|
}
|
2021-09-06 11:50:35 +00:00
|
|
|
|
2021-09-06 13:37:20 +00:00
|
|
|
function hashcode(s){
|
|
|
|
return s.split("").reduce(
|
|
|
|
function(acc,l){
|
2021-09-06 13:39:07 +00:00
|
|
|
acc = acc + 10 * (l.charCodeAt(0) - 'A'.charCodeAt(0));
|
|
|
|
return (acc % 256);
|
2021-09-06 13:37:20 +00:00
|
|
|
},
|
|
|
|
0);
|
|
|
|
}
|
|
|
|
|
|
|
|
function genColor(devname) {
|
2021-09-06 13:39:07 +00:00
|
|
|
var h = hashcode(devname);
|
2021-09-06 13:37:20 +00:00
|
|
|
return "hsl(" + h + ",80%, 36%)";
|
|
|
|
}
|
|
|
|
|
2021-09-06 12:48:48 +00:00
|
|
|
function createDev(devname){
|
|
|
|
var res = devcard(devname);
|
|
|
|
res.id = devname;
|
|
|
|
return res;
|
|
|
|
};
|
2021-09-06 11:50:35 +00:00
|
|
|
|
2021-09-06 12:48:48 +00:00
|
|
|
function drag(ev) {
|
|
|
|
ev.dataTransfer.setData("text", ev.target.id);
|
|
|
|
}
|
|
|
|
|
2021-09-06 13:37:20 +00:00
|
|
|
|
|
|
|
// release logic
|
|
|
|
|
|
|
|
function getWeekNumber(d) {
|
|
|
|
// Copy date so don't modify original
|
|
|
|
d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
|
|
|
|
// Set to nearest Thursday: current date + 4 - current day number
|
|
|
|
// Make Sunday's day number 7
|
|
|
|
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
|
|
|
|
// Get first day of year
|
|
|
|
var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
|
|
|
|
// Calculate full weeks to nearest Thursday
|
|
|
|
var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
|
|
|
|
// Return array of year and week number
|
|
|
|
return [d.getUTCFullYear(), weekNo];
|
|
|
|
}
|
|
|
|
|
|
|
|
// should return a list of next releases
|
|
|
|
// use the current date
|
|
|
|
function releases(previous,nexts) {
|
|
|
|
var curr = new Date; // get current date
|
|
|
|
var monday = curr.getDate() - curr.getDay() + 1;
|
|
|
|
var wed = monday + 2;
|
|
|
|
var nbDays = curr.getDay() - 3;
|
|
|
|
var afterWed = nbDays > 0;
|
|
|
|
var w = getWeekNumber(curr);
|
|
|
|
var year = w[0];
|
|
|
|
var week = w[1];
|
|
|
|
var release = "";
|
|
|
|
var releaseWeek = (week+1)%2;
|
|
|
|
var releaseNumVersion = Math.floor((week - 16)/2) + 71;
|
|
|
|
var currentVersion = "v1." + (releaseNumVersion - (1 + previous));
|
|
|
|
var size=nexts + previous + 1;
|
|
|
|
var releases = new Array(size)
|
|
|
|
for (i = 0; i < size; i++) {
|
|
|
|
releases [i] = "v1." + (releaseNumVersion + (i - 3));
|
|
|
|
}
|
|
|
|
return releases;
|
|
|
|
}
|
|
|
|
|
|
|
|
// drag n drop
|
2021-09-06 12:48:48 +00:00
|
|
|
function drop(ev,el) {
|
|
|
|
ev.preventDefault();
|
|
|
|
var data = ev.dataTransfer.getData("text");
|
|
|
|
el.appendChild(document.getElementById(data));
|
|
|
|
}
|
|
|
|
window.addEventListener("load", init);
|
2021-09-06 13:37:20 +00:00
|
|
|
// })();
|
2021-09-06 11:50:35 +00:00
|
|
|
</script>
|
|
|
|
</html>
|