mirror of
https://github.com/FAUSheppy/oh-my-nemesis
synced 2025-12-06 06:51:35 +01:00
153 lines
5.3 KiB
JavaScript
153 lines
5.3 KiB
JavaScript
var currentCellSelected = null
|
|
|
|
|
|
var colors = ["rgb(245, 247, 246)", "indianred", "coral", "orange", "yellow", "cyan", "lightgreen", "rgb(75, 140, 72)", "rgb(35, 110, 31)"]
|
|
var words = ["", "Awefull", "Worse", "Bad", "Normal", "Praticed", "Decent", "Good", "Perfect"]
|
|
|
|
|
|
function cellOnClickListener(element){
|
|
updateSelectedCell(element)
|
|
}
|
|
|
|
function colorCellOnClickListener(element){
|
|
if(currentCellSelected){
|
|
currentCellSelected.style.background = element.style.background
|
|
}
|
|
}
|
|
|
|
function updateSelectedCell(cell){
|
|
if(currentCellSelected && currentCellSelected.id != cell.id){
|
|
currentCellSelected.style.borderColor = ""
|
|
currentCellSelected.blur()
|
|
}
|
|
currentCellSelected = cell
|
|
if(cell){
|
|
cell.style.borderColor = "blue"
|
|
}
|
|
}
|
|
|
|
function updateBackgroundForCell(cell, indexMod){
|
|
if(!cell.style.background){
|
|
cell.style.background = colors[0];
|
|
}
|
|
|
|
/* firefox hack */
|
|
var bcolor = cell.style.background
|
|
if(bcolor.indexOf(") ")>0){
|
|
bcolor = bcolor.split(") ")[0] + ")"
|
|
}else if(bcolor.indexOf(" ") && bcolor.indexOf("rgb") == -1){
|
|
bcolor = bcolor.split(" ")[0]
|
|
}
|
|
|
|
console.log(bcolor)
|
|
newColor = colors.indexOf(bcolor) + indexMod + colors.length
|
|
cell.style.background = colors[newColor % colors.length]
|
|
}
|
|
|
|
function addWindowListeners(){
|
|
var colorContent = ""
|
|
var i
|
|
for(i = 1; i < colors.length; i++){
|
|
var colorCell = '<td class="cell color-cell" onclick="colorCellOnClickListener(this)" '
|
|
+ 'style="border-style: none; background: '
|
|
+ colors[i] + '">' + words[i] + '</td>\n'
|
|
colorContent += colorCell
|
|
}
|
|
document.getElementById("colorExplanation").innerHTML = colorContent
|
|
|
|
document.body.addEventListener('keyup', (e) => {
|
|
if(!currentCellSelected){
|
|
updateSelectedCell(document.getElementById("0"))
|
|
}
|
|
|
|
var cols = document.getElementById('table').rows[0].cells.length
|
|
var rows = document.getElementById('table').rows.length
|
|
var id = parseInt(currentCellSelected.id)
|
|
|
|
if(e.code === "ArrowUp" && document.activeElement == document.body){
|
|
var targetId = Math.max(id-cols, 0)
|
|
updateSelectedCell(document.getElementById(targetId))
|
|
e.preventDefault()
|
|
}else if(e.code === "ArrowDown" && document.activeElement == document.body){
|
|
var targetId = Math.min(id+cols, cols*rows)
|
|
updateSelectedCell(document.getElementById(targetId))
|
|
e.preventDefault()
|
|
}else if(e.code === "ArrowLeft" && document.activeElement == document.body){
|
|
var targetId = Math.max(id-1, 0)
|
|
updateSelectedCell(document.getElementById(targetId))
|
|
e.preventDefault()
|
|
}else if(e.code === "ArrowRight" && document.activeElement == document.body){
|
|
var targetId = Math.min(id+1, cols*rows)
|
|
updateSelectedCell(document.getElementById(targetId))
|
|
e.preventDefault()
|
|
}else if(e.code === "Escape"){
|
|
updateSelectedCell(null)
|
|
e.preventDefault()
|
|
}else if(e.code === "ShiftLeft"){
|
|
updateBackgroundForCell(currentCellSelected, +1)
|
|
e.preventDefault()
|
|
}else if(e.code === "ControlLeft"){
|
|
updateBackgroundForCell(currentCellSelected, -1)
|
|
e.preventDefault()
|
|
}else if(e.code === "Enter"){
|
|
if(document.activeElement != document.body){
|
|
// document.activeElement.blur()
|
|
}else{
|
|
if(currentCellSelected){
|
|
currentCellSelected.focus()
|
|
}
|
|
}
|
|
e.preventDefault()
|
|
}else if(e.code === "Tab"){
|
|
if(document.activeElement != document.body){
|
|
document.activeElement.blur()
|
|
}
|
|
|
|
if(currentCellSelected){
|
|
var targetId = Math.min(id+1, cols*rows)
|
|
updateSelectedCell(document.getElementById(targetId))
|
|
}
|
|
e.preventDefault()
|
|
}
|
|
});
|
|
}
|
|
|
|
function saveToServer(){
|
|
var contents = []
|
|
var colors = []
|
|
|
|
for(let el of document.getElementsByClassName("cell")){
|
|
if(!el.id){
|
|
/* filter color cells */
|
|
continue
|
|
}
|
|
contents = contents.concat(el.innerText)
|
|
colors = colors.concat(el.style.background)
|
|
}
|
|
|
|
var cols = document.getElementById('table').rows[0].cells.length
|
|
var rows = document.getElementById('table').rows.length
|
|
var hasHeaderColumn = document.getElementById("hasHeaderColumn").innerText
|
|
var hasHeaderRow = document.getElementById("hasHeaderRow").innerText
|
|
var dict = { contents:contents, colors:colors, rows:rows, cols:cols,
|
|
hasHeaderRow:hasHeaderRow, hasHeaderColumn:hasHeaderColumn };
|
|
var json = JSON.stringify(dict);
|
|
|
|
var tableId = document.getElementById("tableId").innerText
|
|
|
|
var xhttp = new XMLHttpRequest();
|
|
xhttp.onload = function() {
|
|
if (xhttp.status != 204) {
|
|
alert("Transmission failed!?!")
|
|
}else{
|
|
window.location.href = "/table?id=" + tableId
|
|
}
|
|
}
|
|
|
|
xhttp.open("POST", "/save?id=" + tableId, true);
|
|
xhttp.setRequestHeader('Content-Type', 'application/json');
|
|
xhttp.send(json)
|
|
}
|
|
|
|
window.onload = addWindowListeners
|