diff --git a/canvas.js b/canvas.js index 95fbe57..a1e5654 100644 --- a/canvas.js +++ b/canvas.js @@ -2,8 +2,23 @@ var mouseState = -1; var selectedColor = "black"; var selectedColorBorder = "2px red solid"; var unselectedColorBorder = "2px black solid"; +var ROWS = 30; +var COLS = 30; +var customColorToolbar=false; + document.addEventListener("DOMContentLoaded",()=>{ + function insertAfter(newNode, existingNode) { + existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling); + } + function componentToHex(c) { + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + function rgbToHex(rgbvalue) { + var rawColors = rgbvalue.replace("rgb(","").replace(")","").split(","); + return "#" + componentToHex(Number(rawColors[0])) + componentToHex(Number(rawColors[1])) + componentToHex(Number(rawColors[2])); + } var canvas = document.getElementsByClassName("canvas")[0]; var toolbar = document.getElementsByClassName("toolbar")[0]; var MouseListener = (e)=>{ @@ -35,6 +50,11 @@ document.addEventListener("DOMContentLoaded",()=>{ } } + var colorPixelBasedOnID = (x,y,color)=>{ + var cell = document.getElementById("pos_"+x+"_"+y); + cell.style.background=color; + } + var generateTable = (columns,rows)=>{ var table = document.createElement("table"); for (var i=0;i{ for (var j=0;j{ canvas.appendChild(table); } + var createCustomColorInput = (customColorContainer,dot)=>{ + var customColorInput = document.createElement("input"); + customColorInput.type="color" + customColorInput.value="#222222" + customColorInput.classList.add("customColor") + customColorInput.id="customColor" + insertAfter(customColorInput,dot); + customColorInput.addEventListener("change",(e)=>{ + dot.style.background=e.target.value + selectedColor=e.target.value + }) + dot.src="transparent.png"; + dot.style.background=customColorInput.value; + customColorToolbar=true; + } + var generateColors = (simple)=>{ for (var i=0;i{ } var customColorContainer = document.createElement("div"); customColorContainer.classList.add("toolbar") - var customColorToolbar=false; var dot = document.createElement("img") dot.classList.add("dot") + dot.classList.add("inline") dot.src="colorwheel.png" customColorContainer.append(dot); toolbar.appendChild(customColorContainer); @@ -91,26 +128,172 @@ document.addEventListener("DOMContentLoaded",()=>{ dot2.style.border=unselectedColorBorder; } dot.style.border=selectedColorBorder; + selectedColor=e.target.style.background } else { - var customColorInput = document.createElement("input"); - customColorInput.type="color" - customColorInput.value="#222222" - customColorInput.classList.add("customColor") - customColorContainer.appendChild(customColorInput); - customColorInput.addEventListener("change",(e)=>{ - dot.style.background=e.target.value - selectedColor=e.target.value - }) - dot.src="transparent.png"; - dot.style.background=customColorInput.value; - customColorToolbar=true; + createCustomColorInput(customColorContainer,dot); } }) } - generateTable(30,30); + var ModifyRows = (e)=>{ + var table = document.getElementsByTagName("table")[0]; + if (e.target.value>table.getElementsByTagName("tr").length) { + //Add a new row. + //To add a new row, just append a new row and a new set of cells. + var newcells = 0; + while (table.getElementsByTagName("tr").lengthe.target.value) { + //REMOVE X amount of rows. + var lastrow = table.getElementsByTagName("tr")[table.getElementsByTagName("tr").length-1] + lastrow.remove(); + } + } + ROWS = e.target.value; + } + + var ModifyCols = (e)=>{ + var table = document.getElementsByTagName("table")[0]; + if (e.target.value>COLS) { + //console.log("In here.") + while (e.target.value>COLS) { + for (var i=0;i{ + var data = JSON.parse(localStorage.getItem("save_pixelart")) + + var ROWSDATA = document.getElementById("rowcontrol") + ROWSDATA.value=data["ROWS"] + ModifyRows({"target":ROWSDATA}); + var COLSDATA = document.getElementById("colcontrol") + COLSDATA.value=data["COLS"] + ModifyCols({"target":COLSDATA}); + if ("CUSTOMCOLOR" in data) { + if (!customColorToolbar) { + var customColorContainer = document.getElementsByClassName("toolbar")[0]; + var dot = document.getElementsByTagName("img")[0]; + createCustomColorInput(customColorContainer,dot); + } + + document.getElementsByTagName("img")[0].style.background = data["CUSTOMCOLOR"]; + document.getElementById("customColor").value = rgbToHex(data["CUSTOMCOLOR"]); + } + + for (var i=0;i{ + var consoleText = document.getElementsByClassName("console")[0]; + consoleText.remove(); + },2000) + } + + var SaveData = ()=>{ + var finalData = {}; + for (var i=0;i{ + var consoleText = document.getElementsByClassName("console")[0]; + consoleText.remove(); + },2000) + } + + var generateControls = ()=>{ + var rowsLabel = document.createElement("label") + rowsLabel.innerHTML = "Rows" + rowsLabel.classList.add("tinylabel") + var rowsControl = document.createElement("input") + rowsControl.type = "number" + rowsControl.classList.add("inline") + rowsControl.classList.add("small") + rowsControl.id = "rowcontrol" + rowsControl.value = ROWS; + rowsControl.addEventListener("change",ModifyRows) + toolbar.appendChild(rowsLabel); + toolbar.appendChild(rowsControl); + var colsLabel = document.createElement("label") + colsLabel.innerHTML = "Cols" + colsLabel.classList.add("tinylabel") + var colsControl = document.createElement("input") + colsControl.type = "number" + colsControl.classList.add("inline") + colsControl.classList.add("small") + colsControl.id = "colcontrol" + colsControl.value = COLS; + colsControl.addEventListener("change",ModifyCols) + toolbar.appendChild(colsLabel); + toolbar.appendChild(colsControl); + var loadButton = document.createElement("button") + loadButton.type = "button" + loadButton.innerText = "Load" + loadButton.classList.add("loadbutton") + loadButton.addEventListener("click",LoadData) + var saveButton = document.createElement("button") + saveButton.type = "button" + saveButton.innerText = "Save" + saveButton.classList.add("savebutton") + saveButton.addEventListener("click",SaveData) + toolbar.appendChild(loadButton); + toolbar.appendChild(saveButton); + } + + generateTable(ROWS,COLS); canvas.appendChild(document.createElement("br")) generateColors(false); + generateControls(); document.addEventListener("scroll",()=>{ toolbar.style.position="absolute"; diff --git a/style.css b/style.css index 6f40131..c4cac48 100644 --- a/style.css +++ b/style.css @@ -23,6 +23,27 @@ th{ position:relative; top:-8px; } +.loadbutton{ + margin: 0px 2px 0px 2px; + background-color: #9999FF; +} +.savebutton{ + margin: 0px 2px 0px 2px; + background-color: #FF9999; +} +.console{ + font-style: strong; + margin-left: 4px; +} +.inline{ + display:inline; +} +.small{ + width:36px; +} +.tinylabel{ + font-size: 12px; +} .dot{ height: 25px; width: 25px;