From c4f4f18b81ba8fc98b3577f9beeea671e28b9829 Mon Sep 17 00:00:00 2001 From: Giovanni Giordano Date: Sun, 5 Jan 2020 15:03:02 +0100 Subject: [PATCH] Remove deploy files --- CNAME | 1 - FG_Virgil.ttf | Bin 122844 -> 0 bytes asset-manifest.json | 22 - index.html | 1 - logo.png | Bin 40186 -> 0 bytes ...nifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js | 26 - service-worker.js | 39 - src/index.tsx | 1564 ----------------- 8 files changed, 1653 deletions(-) delete mode 100644 CNAME delete mode 100644 FG_Virgil.ttf delete mode 100644 asset-manifest.json delete mode 100644 index.html delete mode 100644 logo.png delete mode 100644 precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js delete mode 100644 service-worker.js delete mode 100644 src/index.tsx diff --git a/CNAME b/CNAME deleted file mode 100644 index 587434da1..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -www.excalidraw.com diff --git a/FG_Virgil.ttf b/FG_Virgil.ttf deleted file mode 100644 index 80001666cd223f7df1d23e2cb66de158a40913f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122844 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 C2fEk* diff --git a/asset-manifest.json b/asset-manifest.json deleted file mode 100644 index d89340d4f..000000000 --- a/asset-manifest.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "files": { - "main.css": "/static/css/main.4b4142f8.chunk.css", - "main.js": "/static/js/main.3def8d06.chunk.js", - "main.js.map": "/static/js/main.3def8d06.chunk.js.map", - "runtime-main.js": "/static/js/runtime-main.b019aae8.js", - "runtime-main.js.map": "/static/js/runtime-main.b019aae8.js.map", - "static/js/2.3fb278bc.chunk.js": "/static/js/2.3fb278bc.chunk.js", - "static/js/2.3fb278bc.chunk.js.map": "/static/js/2.3fb278bc.chunk.js.map", - "index.html": "/index.html", - "precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js": "/precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js", - "service-worker.js": "/service-worker.js", - "static/css/main.4b4142f8.chunk.css.map": "/static/css/main.4b4142f8.chunk.css.map", - "static/js/2.3fb278bc.chunk.js.LICENSE": "/static/js/2.3fb278bc.chunk.js.LICENSE" - }, - "entrypoints": [ - "static/js/runtime-main.b019aae8.js", - "static/js/2.3fb278bc.chunk.js", - "static/css/main.4b4142f8.chunk.css", - "static/js/main.3def8d06.chunk.js" - ] -} \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 8b632f5c1..000000000 --- a/index.html +++ /dev/null @@ -1 +0,0 @@ -Excalidraw
\ No newline at end of file diff --git a/logo.png b/logo.png deleted file mode 100644 index 658bd4f7905e39294207a0bbf0d07b6732d02711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40186 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ʩAD1lItw9E0q* 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 diff --git a/precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js b/precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js deleted file mode 100644 index d8790ea8f..000000000 --- a/precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js +++ /dev/null @@ -1,26 +0,0 @@ -self.__precacheManifest = (self.__precacheManifest || []).concat([ - { - "revision": "8d184ca60da16d138f26273d1a723e84", - "url": "/index.html" - }, - { - "revision": "44655b91a9acb4dab431", - "url": "/static/css/main.4b4142f8.chunk.css" - }, - { - "revision": "873896e28eb81c54171d", - "url": "/static/js/2.3fb278bc.chunk.js" - }, - { - "revision": "d705cb622423d72c5defbf368ca70dcc", - "url": "/static/js/2.3fb278bc.chunk.js.LICENSE" - }, - { - "revision": "44655b91a9acb4dab431", - "url": "/static/js/main.3def8d06.chunk.js" - }, - { - "revision": "b44dee203db29ecae5db", - "url": "/static/js/runtime-main.b019aae8.js" - } -]); \ No newline at end of file diff --git a/service-worker.js b/service-worker.js deleted file mode 100644 index 247d206cc..000000000 --- a/service-worker.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Welcome to your Workbox-powered service worker! - * - * You'll need to register this file in your web app and you should - * disable HTTP caching for this file too. - * See https://goo.gl/nhQhGp - * - * The rest of the code is auto-generated. Please don't update this file - * directly; instead, make changes to your Workbox build configuration - * and re-run your build process. - * See https://goo.gl/2aRDsh - */ - -importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); - -importScripts( - "/precache-manifest.0fbb4ef256be8a3b8e6f3b71d8dd7aec.js" -); - -self.addEventListener('message', (event) => { - if (event.data && event.data.type === 'SKIP_WAITING') { - self.skipWaiting(); - } -}); - -workbox.core.clientsClaim(); - -/** - * The workboxSW.precacheAndRoute() method efficiently caches and responds to - * requests for URLs in the manifest. - * See https://goo.gl/S9QRab - */ -self.__precacheManifest = [].concat(self.__precacheManifest || []); -workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); - -workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), { - - blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], -}); diff --git a/src/index.tsx b/src/index.tsx deleted file mode 100644 index 1115a685a..000000000 --- a/src/index.tsx +++ /dev/null @@ -1,1564 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import rough from "roughjs/bin/wrappers/rough"; -import { RoughCanvas } from "roughjs/bin/canvas"; - -import { moveOneLeft, moveAllLeft, moveOneRight, moveAllRight } from "./zindex"; - -import "./styles.scss"; - -type ExcalidrawElement = ReturnType; -type ExcalidrawTextElement = ExcalidrawElement & { - type: "text"; - font: string; - text: string; - actualBoundingBoxAscent: number; -}; - -const LOCAL_STORAGE_KEY = "excalidraw"; -const LOCAL_STORAGE_KEY_STATE = "excalidraw-state"; - -const elements = Array.of(); - -let skipHistory = false; -const stateHistory: string[] = []; -function generateHistoryCurrentEntry() { - return JSON.stringify( - elements.map(element => ({ ...element, isSelected: false })) - ); -} -function pushHistoryEntry(newEntry: string) { - if ( - stateHistory.length > 0 && - stateHistory[stateHistory.length - 1] === newEntry - ) { - // If the last entry is the same as this one, ignore it - return; - } - stateHistory.push(newEntry); -} -function restoreHistoryEntry(entry: string) { - const newElements = JSON.parse(entry); - elements.splice(0, elements.length); - newElements.forEach((newElement: ExcalidrawElement) => { - generateDraw(newElement); - elements.push(newElement); - }); - // When restoring, we shouldn't add an history entry otherwise we'll be stuck with it and can't go back - skipHistory = true; -} - -// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript/47593316#47593316 -const LCG = (seed: number) => () => - ((2 ** 31 - 1) & (seed = Math.imul(48271, seed))) / 2 ** 31; - -function randomSeed() { - return Math.floor(Math.random() * 2 ** 31); -} - -// Unfortunately, roughjs doesn't support a seed attribute (https://github.com/pshihn/rough/issues/27). -// We can achieve the same result by overriding the Math.random function with a -// pseudo random generator that supports a random seed and swapping it back after. -function withCustomMathRandom(seed: number, cb: () => T): T { - const random = Math.random; - Math.random = LCG(seed); - const result = cb(); - Math.random = random; - return result; -} - -// https://stackoverflow.com/a/6853926/232122 -function distanceBetweenPointAndSegment( - x: number, - y: number, - x1: number, - y1: number, - x2: number, - y2: number -) { - const A = x - x1; - const B = y - y1; - const C = x2 - x1; - const D = y2 - y1; - - const dot = A * C + B * D; - const lenSquare = C * C + D * D; - let param = -1; - if (lenSquare !== 0) { - // in case of 0 length line - param = dot / lenSquare; - } - - let xx, yy; - if (param < 0) { - xx = x1; - yy = y1; - } else if (param > 1) { - xx = x2; - yy = y2; - } else { - xx = x1 + param * C; - yy = y1 + param * D; - } - - const dx = x - xx; - const dy = y - yy; - return Math.hypot(dx, dy); -} - -function hitTest(element: ExcalidrawElement, x: number, y: number): boolean { - // For shapes that are composed of lines, we only enable point-selection when the distance - // of the click is less than x pixels of any of the lines that the shape is composed of - const lineThreshold = 10; - - if (element.type === "ellipse") { - // https://stackoverflow.com/a/46007540/232122 - const px = Math.abs(x - element.x - element.width / 2); - const py = Math.abs(y - element.y - element.height / 2); - - let tx = 0.707; - let ty = 0.707; - - const a = element.width / 2; - const b = element.height / 2; - - [0, 1, 2, 3].forEach(x => { - const xx = a * tx; - const yy = b * ty; - - const ex = ((a * a - b * b) * tx ** 3) / a; - const ey = ((b * b - a * a) * ty ** 3) / b; - - const rx = xx - ex; - const ry = yy - ey; - - const qx = px - ex; - const qy = py - ey; - - const r = Math.hypot(ry, rx); - const q = Math.hypot(qy, qx); - - tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a)); - ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b)); - const t = Math.hypot(ty, tx); - tx /= t; - ty /= t; - }); - - return Math.hypot(a * tx - px, b * ty - py) < lineThreshold; - } else if (element.type === "rectangle") { - const x1 = getElementAbsoluteX1(element); - const x2 = getElementAbsoluteX2(element); - const y1 = getElementAbsoluteY1(element); - const y2 = getElementAbsoluteY2(element); - - // (x1, y1) --A-- (x2, y1) - // |D |B - // (x1, y2) --C-- (x2, y2) - return ( - distanceBetweenPointAndSegment(x, y, x1, y1, x2, y1) < lineThreshold || // A - distanceBetweenPointAndSegment(x, y, x2, y1, x2, y2) < lineThreshold || // B - distanceBetweenPointAndSegment(x, y, x2, y2, x1, y2) < lineThreshold || // C - distanceBetweenPointAndSegment(x, y, x1, y2, x1, y1) < lineThreshold // D - ); - } else if (element.type === "arrow") { - let [x1, y1, x2, y2, x3, y3, x4, y4] = getArrowPoints(element); - // The computation is done at the origin, we need to add a translation - x -= element.x; - y -= element.y; - - return ( - // \ - distanceBetweenPointAndSegment(x, y, x3, y3, x2, y2) < lineThreshold || - // ----- - distanceBetweenPointAndSegment(x, y, x1, y1, x2, y2) < lineThreshold || - // / - distanceBetweenPointAndSegment(x, y, x4, y4, x2, y2) < lineThreshold - ); - } else if (element.type === "text") { - const x1 = getElementAbsoluteX1(element); - const x2 = getElementAbsoluteX2(element); - const y1 = getElementAbsoluteY1(element); - const y2 = getElementAbsoluteY2(element); - - return x >= x1 && x <= x2 && y >= y1 && y <= y2; - } else if (element.type === "selection") { - console.warn("This should not happen, we need to investigate why it does."); - return false; - } else { - throw new Error("Unimplemented type " + element.type); - } -} - -function resizeTest( - element: ExcalidrawElement, - x: number, - y: number, - sceneState: SceneState -): string | false { - if (element.type === "text" || element.type === "arrow") return false; - - const handlers = handlerRectangles(element, sceneState); - - const filter = Object.keys(handlers).filter(key => { - const handler = handlers[key]; - - return ( - x + sceneState.scrollX >= handler[0] && - x + sceneState.scrollX <= handler[0] + handler[2] && - y + sceneState.scrollY >= handler[1] && - y + sceneState.scrollY <= handler[1] + handler[3] - ); - }); - - if (filter.length > 0) { - return filter[0]; - } - - return false; -} - -function newElement( - type: string, - x: number, - y: number, - strokeColor: string, - backgroundColor: string, - width = 0, - height = 0 -) { - const element = { - type: type, - x: x, - y: y, - width: width, - height: height, - isSelected: false, - strokeColor: strokeColor, - backgroundColor: backgroundColor, - seed: randomSeed(), - draw( - rc: RoughCanvas, - context: CanvasRenderingContext2D, - sceneState: SceneState - ) {} - }; - return element; -} - -type SceneState = { - scrollX: number; - scrollY: number; - // null indicates transparent bg - viewBackgroundColor: string | null; -}; - -const SCROLLBAR_WIDTH = 6; -const SCROLLBAR_MARGIN = 4; -const SCROLLBAR_COLOR = "rgba(0,0,0,0.3)"; -const CANVAS_WINDOW_OFFSET_LEFT = 250; -const CANVAS_WINDOW_OFFSET_TOP = 0; - -function getScrollbars( - canvasWidth: number, - canvasHeight: number, - scrollX: number, - scrollY: number -) { - // horizontal scrollbar - const sceneWidth = canvasWidth + Math.abs(scrollX); - const scrollBarWidth = (canvasWidth * canvasWidth) / sceneWidth; - const scrollBarX = scrollX > 0 ? 0 : canvasWidth - scrollBarWidth; - const horizontalScrollBar = { - x: scrollBarX + SCROLLBAR_MARGIN, - y: canvasHeight - SCROLLBAR_WIDTH - SCROLLBAR_MARGIN, - width: scrollBarWidth - SCROLLBAR_MARGIN * 2, - height: SCROLLBAR_WIDTH - }; - - // vertical scrollbar - const sceneHeight = canvasHeight + Math.abs(scrollY); - const scrollBarHeight = (canvasHeight * canvasHeight) / sceneHeight; - const scrollBarY = scrollY > 0 ? 0 : canvasHeight - scrollBarHeight; - const verticalScrollBar = { - x: canvasWidth - SCROLLBAR_WIDTH - SCROLLBAR_MARGIN, - y: scrollBarY + SCROLLBAR_MARGIN, - width: SCROLLBAR_WIDTH, - height: scrollBarHeight - SCROLLBAR_WIDTH * 2 - }; - - return { - horizontal: horizontalScrollBar, - vertical: verticalScrollBar - }; -} - -function handlerRectangles(element: ExcalidrawElement, sceneState: SceneState) { - const elementX1 = element.x; - const elementX2 = element.x + element.width; - const elementY1 = element.y; - const elementY2 = element.y + element.height; - - const margin = 4; - const minimumSize = 40; - const handlers: { [handler: string]: number[] } = {}; - - const marginX = element.width < 0 ? 8 : -8; - const marginY = element.height < 0 ? 8 : -8; - - if (Math.abs(elementX2 - elementX1) > minimumSize) { - handlers["n"] = [ - elementX1 + (elementX2 - elementX1) / 2 + sceneState.scrollX - 4, - elementY1 - margin + sceneState.scrollY + marginY, - 8, - 8 - ]; - - handlers["s"] = [ - elementX1 + (elementX2 - elementX1) / 2 + sceneState.scrollX - 4, - elementY2 - margin + sceneState.scrollY - marginY, - 8, - 8 - ]; - } - - if (Math.abs(elementY2 - elementY1) > minimumSize) { - handlers["w"] = [ - elementX1 - margin + sceneState.scrollX + marginX, - elementY1 + (elementY2 - elementY1) / 2 + sceneState.scrollY - 4, - 8, - 8 - ]; - - handlers["e"] = [ - elementX2 - margin + sceneState.scrollX - marginX, - elementY1 + (elementY2 - elementY1) / 2 + sceneState.scrollY - 4, - 8, - 8 - ]; - } - - handlers["nw"] = [ - elementX1 - margin + sceneState.scrollX + marginX, - elementY1 - margin + sceneState.scrollY + marginY, - 8, - 8 - ]; // nw - handlers["ne"] = [ - elementX2 - margin + sceneState.scrollX - marginX, - elementY1 - margin + sceneState.scrollY + marginY, - 8, - 8 - ]; // ne - handlers["sw"] = [ - elementX1 - margin + sceneState.scrollX + marginX, - elementY2 - margin + sceneState.scrollY - marginY, - 8, - 8 - ]; // sw - handlers["se"] = [ - elementX2 - margin + sceneState.scrollX - marginX, - elementY2 - margin + sceneState.scrollY - marginY, - 8, - 8 - ]; // se - - return handlers; -} - -function renderScene( - rc: RoughCanvas, - canvas: HTMLCanvasElement, - sceneState: SceneState, - // extra options, currently passed by export helper - { - offsetX, - offsetY, - renderScrollbars = true, - renderSelection = true - }: { - offsetX?: number; - offsetY?: number; - renderScrollbars?: boolean; - renderSelection?: boolean; - } = {} -) { - if (!canvas) return; - const context = canvas.getContext("2d")!; - - const fillStyle = context.fillStyle; - if (typeof sceneState.viewBackgroundColor === "string") { - context.fillStyle = sceneState.viewBackgroundColor; - context.fillRect(0, 0, canvas.width, canvas.height); - } else { - context.clearRect(0, 0, canvas.width, canvas.height); - } - context.fillStyle = fillStyle; - - const selectedIndices = getSelectedIndices(); - - sceneState = { - ...sceneState, - scrollX: typeof offsetX === "number" ? offsetX : sceneState.scrollX, - scrollY: typeof offsetY === "number" ? offsetY : sceneState.scrollY - }; - - elements.forEach(element => { - element.draw(rc, context, sceneState); - if (renderSelection && element.isSelected) { - const margin = 4; - - const elementX1 = getElementAbsoluteX1(element); - const elementX2 = getElementAbsoluteX2(element); - const elementY1 = getElementAbsoluteY1(element); - const elementY2 = getElementAbsoluteY2(element); - const lineDash = context.getLineDash(); - context.setLineDash([8, 4]); - context.strokeRect( - elementX1 - margin + sceneState.scrollX, - elementY1 - margin + sceneState.scrollY, - elementX2 - elementX1 + margin * 2, - elementY2 - elementY1 + margin * 2 - ); - context.setLineDash(lineDash); - - if ( - element.type !== "text" && - element.type !== "arrow" && - selectedIndices.length === 1 - ) { - const handlers = handlerRectangles(element, sceneState); - Object.values(handlers).forEach(handler => { - context.strokeRect(handler[0], handler[1], handler[2], handler[3]); - }); - } - } - }); - - if (renderScrollbars) { - const scrollBars = getScrollbars( - context.canvas.width / window.devicePixelRatio, - context.canvas.height / window.devicePixelRatio, - sceneState.scrollX, - sceneState.scrollY - ); - - context.fillStyle = SCROLLBAR_COLOR; - context.fillRect( - scrollBars.horizontal.x, - scrollBars.horizontal.y, - scrollBars.horizontal.width, - scrollBars.horizontal.height - ); - context.fillRect( - scrollBars.vertical.x, - scrollBars.vertical.y, - scrollBars.vertical.width, - scrollBars.vertical.height - ); - context.fillStyle = fillStyle; - } -} - -function saveAsJSON() { - const serialized = JSON.stringify({ - version: 1, - source: window.location.origin, - elements - }); - - saveFile( - "excalidraw.json", - "data:text/plain;charset=utf-8," + encodeURIComponent(serialized) - ); -} - -function loadFromJSON() { - const input = document.createElement("input"); - const reader = new FileReader(); - input.type = "file"; - input.accept = ".json"; - - input.onchange = () => { - if (!input.files!.length) { - alert("A file was not selected."); - return; - } - - reader.readAsText(input.files![0], "utf8"); - }; - - input.click(); - - return new Promise(resolve => { - reader.onloadend = () => { - if (reader.readyState === FileReader.DONE) { - const data = JSON.parse(reader.result as string); - restore(data.elements, null); - resolve(); - } - }; - }); -} - -function exportAsPNG({ - exportBackground, - exportPadding = 10, - viewBackgroundColor -}: { - exportBackground: boolean; - exportPadding?: number; - viewBackgroundColor: string; - scrollX: number; - scrollY: number; -}) { - if (!elements.length) return window.alert("Cannot export empty canvas."); - - // calculate smallest area to fit the contents in - - let subCanvasX1 = Infinity; - let subCanvasX2 = 0; - let subCanvasY1 = Infinity; - let subCanvasY2 = 0; - - elements.forEach(element => { - subCanvasX1 = Math.min(subCanvasX1, getElementAbsoluteX1(element)); - subCanvasX2 = Math.max(subCanvasX2, getElementAbsoluteX2(element)); - subCanvasY1 = Math.min(subCanvasY1, getElementAbsoluteY1(element)); - subCanvasY2 = Math.max(subCanvasY2, getElementAbsoluteY2(element)); - }); - - function distance(x: number, y: number) { - return Math.abs(x > y ? x - y : y - x); - } - - const tempCanvas = document.createElement("canvas"); - tempCanvas.style.display = "none"; - document.body.appendChild(tempCanvas); - tempCanvas.width = distance(subCanvasX1, subCanvasX2) + exportPadding * 2; - tempCanvas.height = distance(subCanvasY1, subCanvasY2) + exportPadding * 2; - - renderScene( - rough.canvas(tempCanvas), - tempCanvas, - { - viewBackgroundColor: exportBackground ? viewBackgroundColor : null, - scrollX: 0, - scrollY: 0 - }, - { - offsetX: -subCanvasX1 + exportPadding, - offsetY: -subCanvasY1 + exportPadding, - renderScrollbars: false, - renderSelection: false - } - ); - - saveFile("excalidraw.png", tempCanvas.toDataURL("image/png")); - - // clean up the DOM - if (tempCanvas !== canvas) tempCanvas.remove(); -} - -function saveFile(name: string, data: string) { - // create a temporary elem which we'll use to download the image - const link = document.createElement("a"); - link.setAttribute("download", name); - link.setAttribute("href", data); - link.click(); - - // clean up - link.remove(); -} - -function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) { - // π‘Žβ€²π‘₯=(π‘Žπ‘₯βˆ’π‘π‘₯)cosπœƒβˆ’(π‘Žπ‘¦βˆ’π‘π‘¦)sinπœƒ+𝑐π‘₯ - // π‘Žβ€²π‘¦=(π‘Žπ‘₯βˆ’π‘π‘₯)sinπœƒ+(π‘Žπ‘¦βˆ’π‘π‘¦)cosπœƒ+𝑐𝑦. - // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line - return [ - (x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, - (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2 - ]; -} - -// Casting second argument (DrawingSurface) to any, -// because it is requred by TS definitions and not required at runtime -const generator = rough.generator(null, null as any); - -function isTextElement( - element: ExcalidrawElement -): element is ExcalidrawTextElement { - return element.type === "text"; -} - -function isInputLike( - target: Element | EventTarget | null -): target is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement { - return ( - target instanceof HTMLInputElement || - target instanceof HTMLTextAreaElement || - target instanceof HTMLSelectElement - ); -} - -function getArrowPoints(element: ExcalidrawElement) { - const x1 = 0; - const y1 = 0; - const x2 = element.width; - const y2 = element.height; - - const size = 30; // pixels - const distance = Math.hypot(x2 - x1, y2 - y1); - // Scale down the arrow until we hit a certain size so that it doesn't look weird - const minSize = Math.min(size, distance / 2); - const xs = x2 - ((x2 - x1) / distance) * minSize; - const ys = y2 - ((y2 - y1) / distance) * minSize; - - const angle = 20; // degrees - const [x3, y3] = rotate(xs, ys, x2, y2, (-angle * Math.PI) / 180); - const [x4, y4] = rotate(xs, ys, x2, y2, (angle * Math.PI) / 180); - - return [x1, y1, x2, y2, x3, y3, x4, y4]; -} - -function generateDraw(element: ExcalidrawElement) { - if (element.type === "selection") { - element.draw = (rc, context, { scrollX, scrollY }) => { - const fillStyle = context.fillStyle; - context.fillStyle = "rgba(0, 0, 255, 0.10)"; - context.fillRect( - element.x + scrollX, - element.y + scrollY, - element.width, - element.height - ); - context.fillStyle = fillStyle; - }; - } else if (element.type === "rectangle") { - const shape = withCustomMathRandom(element.seed, () => { - return generator.rectangle(0, 0, element.width, element.height, { - stroke: element.strokeColor, - fill: element.backgroundColor - }); - }); - element.draw = (rc, context, { scrollX, scrollY }) => { - context.translate(element.x + scrollX, element.y + scrollY); - rc.draw(shape); - context.translate(-element.x - scrollX, -element.y - scrollY); - }; - } else if (element.type === "ellipse") { - const shape = withCustomMathRandom(element.seed, () => - generator.ellipse( - element.width / 2, - element.height / 2, - element.width, - element.height, - { stroke: element.strokeColor, fill: element.backgroundColor } - ) - ); - element.draw = (rc, context, { scrollX, scrollY }) => { - context.translate(element.x + scrollX, element.y + scrollY); - rc.draw(shape); - context.translate(-element.x - scrollX, -element.y - scrollY); - }; - } else if (element.type === "arrow") { - const [x1, y1, x2, y2, x3, y3, x4, y4] = getArrowPoints(element); - const shapes = withCustomMathRandom(element.seed, () => [ - // \ - generator.line(x3, y3, x2, y2, { stroke: element.strokeColor }), - // ----- - generator.line(x1, y1, x2, y2, { stroke: element.strokeColor }), - // / - generator.line(x4, y4, x2, y2, { stroke: element.strokeColor }) - ]); - - element.draw = (rc, context, { scrollX, scrollY }) => { - context.translate(element.x + scrollX, element.y + scrollY); - shapes.forEach(shape => rc.draw(shape)); - context.translate(-element.x - scrollX, -element.y - scrollY); - }; - return; - } else if (isTextElement(element)) { - element.draw = (rc, context, { scrollX, scrollY }) => { - const font = context.font; - context.font = element.font; - const fillStyle = context.fillStyle; - context.fillStyle = element.strokeColor; - context.fillText( - element.text, - element.x + scrollX, - element.y + element.actualBoundingBoxAscent + scrollY - ); - context.fillStyle = fillStyle; - context.font = font; - }; - } else { - throw new Error("Unimplemented type " + element.type); - } -} - -// If the element is created from right to left, the width is going to be negative -// This set of functions retrieves the absolute position of the 4 points. -// We can't just always normalize it since we need to remember the fact that an arrow -// is pointing left or right. -function getElementAbsoluteX1(element: ExcalidrawElement) { - return element.width >= 0 ? element.x : element.x + element.width; -} -function getElementAbsoluteX2(element: ExcalidrawElement) { - return element.width >= 0 ? element.x + element.width : element.x; -} -function getElementAbsoluteY1(element: ExcalidrawElement) { - return element.height >= 0 ? element.y : element.y + element.height; -} -function getElementAbsoluteY2(element: ExcalidrawElement) { - return element.height >= 0 ? element.y + element.height : element.y; -} - -function setSelection(selection: ExcalidrawElement) { - const selectionX1 = getElementAbsoluteX1(selection); - const selectionX2 = getElementAbsoluteX2(selection); - const selectionY1 = getElementAbsoluteY1(selection); - const selectionY2 = getElementAbsoluteY2(selection); - elements.forEach(element => { - const elementX1 = getElementAbsoluteX1(element); - const elementX2 = getElementAbsoluteX2(element); - const elementY1 = getElementAbsoluteY1(element); - const elementY2 = getElementAbsoluteY2(element); - element.isSelected = - element.type !== "selection" && - selectionX1 <= elementX1 && - selectionY1 <= elementY1 && - selectionX2 >= elementX2 && - selectionY2 >= elementY2; - }); -} - -function clearSelection() { - elements.forEach(element => { - element.isSelected = false; - }); -} - -function resetCursor() { - document.documentElement.style.cursor = ""; -} - -function deleteSelectedElements() { - for (let i = elements.length - 1; i >= 0; --i) { - if (elements[i].isSelected) { - elements.splice(i, 1); - } - } -} - -function save(state: AppState) { - localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(elements)); - localStorage.setItem(LOCAL_STORAGE_KEY_STATE, JSON.stringify(state)); -} - -function restoreFromLocalStorage() { - const savedElements = localStorage.getItem(LOCAL_STORAGE_KEY); - const savedState = localStorage.getItem(LOCAL_STORAGE_KEY_STATE); - - return restore(savedElements, savedState); -} - -function restore( - savedElements: string | ExcalidrawElement[] | null, - savedState: string | null -) { - try { - if (savedElements) { - elements.splice( - 0, - elements.length, - ...(typeof savedElements === "string" - ? JSON.parse(savedElements) - : savedElements) - ); - elements.forEach((element: ExcalidrawElement) => generateDraw(element)); - } - - return savedState ? JSON.parse(savedState) : null; - } catch (e) { - elements.splice(0, elements.length); - return null; - } -} - -type AppState = { - draggingElement: ExcalidrawElement | null; - resizingElement: ExcalidrawElement | null; - elementType: string; - exportBackground: boolean; - currentItemStrokeColor: string; - currentItemBackgroundColor: string; - viewBackgroundColor: string; - scrollX: number; - scrollY: number; -}; - -const KEYS = { - ARROW_LEFT: "ArrowLeft", - ARROW_RIGHT: "ArrowRight", - ARROW_DOWN: "ArrowDown", - ARROW_UP: "ArrowUp", - ESCAPE: "Escape", - DELETE: "Delete", - BACKSPACE: "Backspace" -}; - -// We inline font-awesome icons in order to save on js size rather than including the font awesome react library -const SHAPES = [ - { - icon: ( - // fa-mouse-pointer - - - - ), - value: "selection" - }, - { - icon: ( - // fa-square - - - - ), - value: "rectangle" - }, - { - icon: ( - // fa-circle - - - - ), - value: "ellipse" - }, - { - icon: ( - // fa-long-arrow-alt-right - - - - ), - value: "arrow" - }, - { - icon: ( - // fa-font - - - - ), - value: "text" - } -]; - -const shapesShortcutKeys = SHAPES.map(shape => shape.value[0]); - -function findElementByKey(key: string) { - const defaultElement = "selection"; - return SHAPES.reduce((element, shape) => { - if (shape.value[0] !== key) return element; - - return shape.value; - }, defaultElement); -} - -function isArrowKey(keyCode: string) { - return ( - keyCode === KEYS.ARROW_LEFT || - keyCode === KEYS.ARROW_RIGHT || - keyCode === KEYS.ARROW_DOWN || - keyCode === KEYS.ARROW_UP - ); -} - -function getSelectedIndices() { - const selectedIndices: number[] = []; - elements.forEach((element, index) => { - if (element.isSelected) { - selectedIndices.push(index); - } - }); - return selectedIndices; -} - -const someElementIsSelected = () => - elements.some(element => element.isSelected); - -const ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5; -const ELEMENT_TRANSLATE_AMOUNT = 1; - -let lastCanvasWidth = -1; -let lastCanvasHeight = -1; - -let lastMouseUp: ((e: any) => void) | null = null; - -class App extends React.Component<{}, AppState> { - public componentDidMount() { - document.addEventListener("keydown", this.onKeyDown, false); - window.addEventListener("resize", this.onResize, false); - - const savedState = restoreFromLocalStorage(); - if (savedState) { - this.setState(savedState); - } - } - - public componentWillUnmount() { - document.removeEventListener("keydown", this.onKeyDown, false); - window.removeEventListener("resize", this.onResize, false); - } - - public state: AppState = { - draggingElement: null, - resizingElement: null, - elementType: "selection", - exportBackground: true, - currentItemStrokeColor: "#000000", - currentItemBackgroundColor: "#ffffff", - viewBackgroundColor: "#ffffff", - scrollX: 0, - scrollY: 0 - }; - - private onResize = () => { - this.forceUpdate(); - }; - - private onKeyDown = (event: KeyboardEvent) => { - if (isInputLike(event.target)) return; - - if (event.key === KEYS.ESCAPE) { - clearSelection(); - this.forceUpdate(); - event.preventDefault(); - } else if (event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE) { - deleteSelectedElements(); - this.forceUpdate(); - event.preventDefault(); - } else if (isArrowKey(event.key)) { - const step = event.shiftKey - ? ELEMENT_SHIFT_TRANSLATE_AMOUNT - : ELEMENT_TRANSLATE_AMOUNT; - elements.forEach(element => { - if (element.isSelected) { - if (event.key === KEYS.ARROW_LEFT) element.x -= step; - else if (event.key === KEYS.ARROW_RIGHT) element.x += step; - else if (event.key === KEYS.ARROW_UP) element.y -= step; - else if (event.key === KEYS.ARROW_DOWN) element.y += step; - } - }); - this.forceUpdate(); - event.preventDefault(); - - // Send backward: Cmd-Shift-Alt-B - } else if ( - event.metaKey && - event.shiftKey && - event.altKey && - event.code === "KeyB" - ) { - this.moveOneLeft(); - event.preventDefault(); - - // Send to back: Cmd-Shift-B - } else if (event.metaKey && event.shiftKey && event.code === "KeyB") { - this.moveAllLeft(); - event.preventDefault(); - - // Bring forward: Cmd-Shift-Alt-F - } else if ( - event.metaKey && - event.shiftKey && - event.altKey && - event.code === "KeyF" - ) { - this.moveOneRight(); - event.preventDefault(); - - // Bring to front: Cmd-Shift-F - } else if (event.metaKey && event.shiftKey && event.code === "KeyF") { - this.moveAllRight(); - event.preventDefault(); - - // Select all: Cmd-A - } else if (event.metaKey && event.code === "KeyA") { - elements.forEach(element => { - element.isSelected = true; - }); - this.forceUpdate(); - event.preventDefault(); - } else if (shapesShortcutKeys.includes(event.key.toLowerCase())) { - this.setState({ elementType: findElementByKey(event.key) }); - } else if (event.metaKey && event.code === "KeyZ") { - let lastEntry = stateHistory.pop(); - // If nothing was changed since last, take the previous one - if (generateHistoryCurrentEntry() === lastEntry) { - lastEntry = stateHistory.pop(); - } - if (lastEntry !== undefined) { - restoreHistoryEntry(lastEntry); - } - this.forceUpdate(); - event.preventDefault(); - } - }; - - private deleteSelectedElements = () => { - deleteSelectedElements(); - this.forceUpdate(); - }; - - private clearCanvas = () => { - if (window.confirm("This will clear the whole canvas. Are you sure?")) { - elements.splice(0, elements.length); - this.setState({ - viewBackgroundColor: "#ffffff", - scrollX: 0, - scrollY: 0 - }); - this.forceUpdate(); - } - }; - - private moveAllLeft = () => { - moveAllLeft(elements, getSelectedIndices()); - this.forceUpdate(); - }; - - private moveOneLeft = () => { - moveOneLeft(elements, getSelectedIndices()); - this.forceUpdate(); - }; - - private moveAllRight = () => { - moveAllRight(elements, getSelectedIndices()); - this.forceUpdate(); - }; - - private moveOneRight = () => { - moveOneRight(elements, getSelectedIndices()); - this.forceUpdate(); - }; - - private removeWheelEventListener: (() => void) | undefined; - - public render() { - const canvasWidth = window.innerWidth - CANVAS_WINDOW_OFFSET_LEFT; - const canvasHeight = window.innerHeight - CANVAS_WINDOW_OFFSET_TOP; - - return ( -
{ - e.clipboardData.setData( - "text/plain", - JSON.stringify(elements.filter(element => element.isSelected)) - ); - deleteSelectedElements(); - this.forceUpdate(); - e.preventDefault(); - }} - onCopy={e => { - e.clipboardData.setData( - "text/plain", - JSON.stringify(elements.filter(element => element.isSelected)) - ); - e.preventDefault(); - }} - onPaste={e => { - const paste = e.clipboardData.getData("text"); - let parsedElements; - try { - parsedElements = JSON.parse(paste); - } catch (e) {} - if ( - Array.isArray(parsedElements) && - parsedElements.length > 0 && - parsedElements[0].type // need to implement a better check here... - ) { - clearSelection(); - parsedElements.forEach(parsedElement => { - parsedElement.x += 10; - parsedElement.y += 10; - parsedElement.seed = randomSeed(); - generateDraw(parsedElement); - elements.push(parsedElement); - }); - this.forceUpdate(); - } - e.preventDefault(); - }} - > -
-

Shapes

-
- {SHAPES.map(({ value, icon }) => ( - - ))} -
-

Colors

-
- - - -
-

Canvas

-
- -
-

Export

-
- - -
-

Save/Load

-
- - -
- {someElementIsSelected() && ( - <> -

Shape options

-
- - - - - -
- - )} -
- { - if (this.removeWheelEventListener) { - this.removeWheelEventListener(); - this.removeWheelEventListener = undefined; - } - if (canvas) { - canvas.addEventListener("wheel", this.handleWheel, { - passive: false - }); - this.removeWheelEventListener = () => - canvas.removeEventListener("wheel", this.handleWheel); - - // Whenever React sets the width/height of the canvas element, - // the context loses the scale transform. We need to re-apply it - if ( - canvasWidth !== lastCanvasWidth || - canvasHeight !== lastCanvasHeight - ) { - lastCanvasWidth = canvasWidth; - lastCanvasHeight = canvasHeight; - canvas - .getContext("2d")! - .scale(window.devicePixelRatio, window.devicePixelRatio); - } - } - }} - onMouseDown={e => { - if (lastMouseUp !== null) { - // Unfortunately, sometimes we don't get a mouseup after a mousedown, - // this can happen when a contextual menu or alert is triggered. In order to avoid - // being in a weird state, we clean up on the next mousedown - lastMouseUp(e); - } - // only handle left mouse button - if (e.button !== 0) return; - // fixes mousemove causing selection of UI texts #32 - e.preventDefault(); - // Preventing the event above disables default behavior - // of defocusing potentially focused input, which is what we want - // when clicking inside the canvas. - if (isInputLike(document.activeElement)) { - document.activeElement.blur(); - } - - const x = - e.clientX - CANVAS_WINDOW_OFFSET_LEFT - this.state.scrollX; - const y = e.clientY - CANVAS_WINDOW_OFFSET_TOP - this.state.scrollY; - const element = newElement( - this.state.elementType, - x, - y, - this.state.currentItemStrokeColor, - this.state.currentItemBackgroundColor - ); - let resizeHandle: string | false = false; - let isDraggingElements = false; - let isResizingElements = false; - if (this.state.elementType === "selection") { - const resizeElement = elements.find(element => { - return resizeTest(element, x, y, { - scrollX: this.state.scrollX, - scrollY: this.state.scrollY, - viewBackgroundColor: this.state.viewBackgroundColor - }); - }); - - this.setState({ - resizingElement: resizeElement ? resizeElement : null - }); - - if (resizeElement) { - resizeHandle = resizeTest(resizeElement, x, y, { - scrollX: this.state.scrollX, - scrollY: this.state.scrollY, - viewBackgroundColor: this.state.viewBackgroundColor - }); - document.documentElement.style.cursor = `${resizeHandle}-resize`; - isResizingElements = true; - } else { - let hitElement = null; - // We need to to hit testing from front (end of the array) to back (beginning of the array) - for (let i = elements.length - 1; i >= 0; --i) { - if (hitTest(elements[i], x, y)) { - hitElement = elements[i]; - break; - } - } - - // If we click on something - if (hitElement) { - if (hitElement.isSelected) { - // If that element is not already selected, do nothing, - // we're likely going to drag it - } else { - // We unselect every other elements unless shift is pressed - if (!e.shiftKey) { - clearSelection(); - } - // No matter what, we select it - hitElement.isSelected = true; - } - } else { - // If we don't click on anything, let's remove all the selected elements - clearSelection(); - } - - isDraggingElements = someElementIsSelected(); - - if (isDraggingElements) { - document.documentElement.style.cursor = "move"; - } - } - } - - if (isTextElement(element)) { - resetCursor(); - const text = prompt("What text do you want?"); - if (text === null) { - return; - } - element.text = text; - element.font = "20px Virgil"; - const font = context.font; - context.font = element.font; - const { - actualBoundingBoxAscent, - actualBoundingBoxDescent, - width - } = context.measureText(element.text); - element.actualBoundingBoxAscent = actualBoundingBoxAscent; - context.font = font; - const height = actualBoundingBoxAscent + actualBoundingBoxDescent; - // Center the text - element.x -= width / 2; - element.y -= actualBoundingBoxAscent; - element.width = width; - element.height = height; - } - - generateDraw(element); - elements.push(element); - if (this.state.elementType === "text") { - this.setState({ - draggingElement: null, - elementType: "selection" - }); - element.isSelected = true; - } else { - this.setState({ draggingElement: element }); - } - - let lastX = x; - let lastY = y; - - const onMouseMove = (e: MouseEvent) => { - const target = e.target; - if (!(target instanceof HTMLElement)) { - return; - } - - if (isResizingElements && this.state.resizingElement) { - const el = this.state.resizingElement; - const selectedElements = elements.filter(el => el.isSelected); - if (selectedElements.length === 1) { - const x = - e.clientX - CANVAS_WINDOW_OFFSET_LEFT - this.state.scrollX; - const y = - e.clientY - CANVAS_WINDOW_OFFSET_TOP - this.state.scrollY; - selectedElements.forEach(element => { - switch (resizeHandle) { - case "nw": - element.width += element.x - lastX; - element.height += element.y - lastY; - element.x = lastX; - element.y = lastY; - break; - case "ne": - element.width = lastX - element.x; - element.height += element.y - lastY; - element.y = lastY; - break; - case "sw": - element.width += element.x - lastX; - element.x = lastX; - element.height = lastY - element.y; - break; - case "se": - element.width += x - lastX; - if (e.shiftKey) { - element.height = element.width; - } else { - element.height += y - lastY; - } - break; - case "n": - element.height += element.y - lastY; - element.y = lastY; - break; - case "w": - element.width += element.x - lastX; - element.x = lastX; - break; - case "s": - element.height = lastY - element.y; - break; - case "e": - element.width = lastX - element.x; - break; - } - - el.x = element.x; - el.y = element.y; - generateDraw(el); - }); - lastX = x; - lastY = y; - // We don't want to save history when resizing an element - skipHistory = true; - this.forceUpdate(); - return; - } - } - - if (isDraggingElements) { - const selectedElements = elements.filter(el => el.isSelected); - if (selectedElements.length) { - const x = - e.clientX - CANVAS_WINDOW_OFFSET_LEFT - this.state.scrollX; - const y = - e.clientY - CANVAS_WINDOW_OFFSET_TOP - this.state.scrollY; - selectedElements.forEach(element => { - element.x += x - lastX; - element.y += y - lastY; - }); - lastX = x; - lastY = y; - // We don't want to save history when dragging an element to initially size it - skipHistory = true; - this.forceUpdate(); - return; - } - } - - // It is very important to read this.state within each move event, - // otherwise we would read a stale one! - const draggingElement = this.state.draggingElement; - if (!draggingElement) return; - let width = - e.clientX - - CANVAS_WINDOW_OFFSET_LEFT - - draggingElement.x - - this.state.scrollX; - let height = - e.clientY - - CANVAS_WINDOW_OFFSET_TOP - - draggingElement.y - - this.state.scrollY; - draggingElement.width = width; - // Make a perfect square or circle when shift is enabled - draggingElement.height = e.shiftKey ? width : height; - - generateDraw(draggingElement); - - if (this.state.elementType === "selection") { - setSelection(draggingElement); - } - // We don't want to save history when moving an element - skipHistory = true; - this.forceUpdate(); - }; - - const onMouseUp = (e: MouseEvent) => { - const { draggingElement, elementType } = this.state; - - lastMouseUp = null; - window.removeEventListener("mousemove", onMouseMove); - window.removeEventListener("mouseup", onMouseUp); - - resetCursor(); - - // if no element is clicked, clear the selection and redraw - if (draggingElement === null) { - clearSelection(); - this.forceUpdate(); - return; - } - - if (elementType === "selection") { - if (isDraggingElements) { - isDraggingElements = false; - } - elements.pop(); - } else { - draggingElement.isSelected = true; - } - - this.setState({ - draggingElement: null, - elementType: "selection" - }); - this.forceUpdate(); - }; - - lastMouseUp = onMouseUp; - - window.addEventListener("mousemove", onMouseMove); - window.addEventListener("mouseup", onMouseUp); - - // We don't want to save history on mouseDown, only on mouseUp when it's fully configured - skipHistory = true; - this.forceUpdate(); - }} - /> -
- ); - } - - private handleWheel = (e: WheelEvent) => { - e.preventDefault(); - const { deltaX, deltaY } = e; - this.setState(state => ({ - scrollX: state.scrollX - deltaX, - scrollY: state.scrollY - deltaY - })); - }; - - componentDidUpdate() { - renderScene(rc, canvas, { - scrollX: this.state.scrollX, - scrollY: this.state.scrollY, - viewBackgroundColor: this.state.viewBackgroundColor - }); - save(this.state); - if (!skipHistory) { - pushHistoryEntry(generateHistoryCurrentEntry()); - } - skipHistory = false; - } -} - -const rootElement = document.getElementById("root"); -ReactDOM.render(, rootElement); -const canvas = document.getElementById("canvas") as HTMLCanvasElement; -const rc = rough.canvas(canvas); -const context = canvas.getContext("2d")!; - -ReactDOM.render(, rootElement);