Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* eslint-disable no-plusplus */
  2. /* eslint-disable no-console */
  3. /* eslint-disable no-undef */
  4. const Palette = {
  5.   elements: {
  6.     canvas: {
  7.       canvasElement: null,
  8.       canvasContext: null,
  9.       canvasSize: null,
  10.       field: [],
  11.     },
  12.     fillBucket: null,
  13.     chooseColor: null,
  14.     pencil: null,
  15.   },
  16.   parameters: {
  17.     isMouseOnCanvas: false,
  18.     mouseX: null,
  19.     mouseY: null,
  20.     isDrawing: false,
  21.     colors: {
  22.       defaultColor: 'green', // ??
  23.       prevColor: null,
  24.       currentColor: 'black',
  25.     },
  26.     selectedTool: {
  27.       fillBucket: false,
  28.       chooseColor: false,
  29.       pencil: false,
  30.     },
  31.   },
  32.  
  33.   init() {
  34.     this.elements.canvas.canvasElement = document.querySelector('#canvas');
  35.     this.elements.canvas.canvasContext = this.elements.canvas.canvasElement.getContext('2d');
  36.     this.elements.fillBucket = document.querySelector('#fillBucket');
  37.     this.elements.chooseColor = document.querySelector('#chooseColor');
  38.     this.elements.pencil = document.querySelector('#pencil');
  39.  
  40.     this.elements.chooseColor.value = this.parameters.colors.defaultColor;
  41.  
  42.     // localStorage.removeItem('data');
  43.     // this.getLocalStorage();
  44.     // console.log('thisParams', this.parameters);
  45.     this.createField();
  46.     this.onWidgetClick();
  47.     this.onKeyboardClick();
  48.     this.onCanvasClick();
  49.     this.canvasDraw();
  50.   },
  51.  
  52.   onCanvasClick() {
  53.     if (this.parameters.selectedTool.pencil) {
  54.       const drawEvent = (e) => {
  55.         this.parameters.mouseX = e.offsetX;
  56.         this.parameters.mouseY = e.offsetY;
  57.  
  58.         const x = Math.floor(this.parameters.mouseX / 128);
  59.         const y = Math.floor(this.parameters.mouseY / 128);
  60.  
  61.         this.elements.canvas.field[x][y].color = this.parameters.colors.currentColor;
  62.         this.elements.canvas.field[x][y].isFilled = true;
  63.         this.elements.canvas.canvasContext.fillStyle = this.elements.canvas.field[x][y].color;
  64.  
  65.         this.canvasDraw();
  66.       };
  67.  
  68.       this.elements.canvas.canvasElement.addEventListener('mouseover', () => {
  69.         this.parameters.isMouseOnCanvas = true;
  70.  
  71.         this.elements.canvas.canvasElement.addEventListener('mousedown', (e) => {
  72.           drawEvent(e);
  73.           this.elements.canvas.canvasElement.addEventListener('mousemove', drawEvent);
  74.           this.elements.canvas.canvasElement.addEventListener('mouseup', () => {
  75.             this.elements.canvas.canvasElement.removeEventListener('mousemove', drawEvent);
  76.           });
  77.         });
  78.       });
  79.     }
  80.  
  81.     this.elements.canvas.canvasElement.addEventListener('mouseout', () => {
  82.       this.parameters.isMouseOnCanvas = false;
  83.     });
  84.   },
  85.  
  86.   canvasDraw() {
  87.     const size = this.elements.canvas.canvasSize;
  88.     this.elements.canvas.canvasContext.clearRect(0, 0, 512, 512);
  89.  
  90.     for (let i = 0; i < size; i++) {
  91.       for (let j = 0; j < size; j++) {
  92.         if (this.elements.canvas.field[j][i].isFilled) {
  93.           this.elements.canvas.canvasContext.fillRect(j * 128, i * 128, 128, 128);
  94.         }
  95.       }
  96.     }
  97.   },
  98.  
  99.   onWidgetClick() {
  100.     const changeClass = () => {
  101.       const selectedItems = this.parameters.selectedTool;
  102.       // eslint-disable-next-line no-restricted-syntax
  103.       for (const key in selectedItems) {
  104.         if (selectedItems[key]) {
  105.           this.elements[key].classList.add('item--selected');
  106.         } else {
  107.           this.elements[key].classList.remove('item--selected');
  108.         }
  109.       }
  110.     };
  111.  
  112.     this.elements.fillBucket.addEventListener('click', () => {
  113.       this.parameters.selectedTool.fillBucket = true;
  114.       this.parameters.selectedTool.pencil = false;
  115.       this.parameters.selectedTool.chooseColor = false;
  116.       this.parameters.isDrawing = false;
  117.       changeClass();
  118.       this.onCanvasClick();
  119.     });
  120.     this.elements.chooseColor.addEventListener('click', () => {
  121.       this.parameters.selectedTool.fillBucket = false;
  122.       this.parameters.selectedTool.pencil = false;
  123.       this.parameters.selectedTool.chooseColor = true;
  124.       this.parameters.isDrawing = false;
  125.       this.parameters.colors.currentColor = this.elements.chooseColor.value;
  126.       changeClass();
  127.       this.onCanvasClick();
  128.     });
  129.     this.elements.pencil.addEventListener('click', () => {
  130.       this.parameters.selectedTool.fillBucket = false;
  131.       this.parameters.selectedTool.pencil = true;
  132.       this.parameters.selectedTool.chooseColor = false;
  133.       this.parameters.isDrawing = true;
  134.       changeClass();
  135.       this.onCanvasClick();
  136.     });
  137.   },
  138.  
  139.   onKeyboardClick() {
  140.     const changeClass = () => {
  141.       const selectedItems = this.parameters.selectedTool;
  142.       // eslint-disable-next-line no-restricted-syntax
  143.       for (const key in selectedItems) {
  144.         if (selectedItems[key]) {
  145.           this.elements[key].classList.add('item--selected');
  146.         } else {
  147.           this.elements[key].classList.remove('item--selected');
  148.         }
  149.       }
  150.     };
  151.  
  152.     window.addEventListener('keydown', (e) => {
  153.       if (e.code === 'KeyB') {
  154.         this.parameters.selectedTool.fillBucket = true;
  155.         this.parameters.selectedTool.pencil = false;
  156.         this.parameters.selectedTool.chooseColor = false;
  157.         this.parameters.isDrawing = false;
  158.         changeClass();
  159.       } else if (e.code === 'KeyC') {
  160.         this.parameters.selectedTool.fillBucket = false;
  161.         this.parameters.selectedTool.pencil = false;
  162.         this.parameters.selectedTool.chooseColor = true;
  163.         this.parameters.isDrawing = false;
  164.         changeClass();
  165.       } else if (e.code === 'KeyP') {
  166.         this.parameters.selectedTool.fillBucket = false;
  167.         this.parameters.selectedTool.pencil = true;
  168.         this.parameters.selectedTool.chooseColor = false;
  169.         this.parameters.isDrawing = true;
  170.         changeClass();
  171.       }
  172.     });
  173.   },
  174.  
  175.   createField(size = 4) {
  176.     this.elements.canvas.canvasSize = size;
  177.  
  178.     for (let i = 0; i < size; i++) {
  179.       this.elements.canvas.field[i] = [];
  180.       for (let j = 0; j < size; j++) {
  181.         this.elements.canvas.field[i][j] = { isFilled: false, color: 'white' };
  182.       }
  183.     }
  184.   },
  185.  
  186.   setLocalStorage() {
  187.     localStorage.removeItem('data');
  188.     const obj = {
  189.       parameters: this.parameters,
  190.     };
  191.     const data = JSON.stringify(obj);
  192.     localStorage.setItem('data', data);
  193.   },
  194.  
  195.   getLocalStorage() {
  196.     const prevData = localStorage.getItem('data');
  197.  
  198.     if (prevData) {
  199.       const obj = JSON.parse(prevData);
  200.       this.parameters = obj;
  201.     }
  202.   },
  203. };
  204.  
  205. document.addEventListener('DOMContentLoaded', () => Palette.init());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement