/** * WHITEBOPHIR ********************************************************* * @licstart The following is the entire license notice for the * JavaScript code in this page. * * Copyright (C) 2013 Ophir LOJKINE * * * The JavaScript code in this page is free software: you can * redistribute it and/or modify it under the terms of the GNU * General Public License (GNU GPL) as published by the Free Software * Foundation, either version 3 of the License, or (at your option) * any later version. The code is distributed WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. * * As additional permission under GNU GPL version 3 section 7, you * may distribute non-source (e.g., minimized or compacted) forms of * that code without the copy of the GNU GPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend */ (function eraser() { //Code isolation var erasing = false; function startErasing(x, y, evt) { //Prevent the press from being interpreted by the browser evt.preventDefault(); erasing = true; erase(x, y, evt); } var msg = { "type": "delete", "id": "" }; function erase(x, y, evt) { // evt.target should be the element over which the mouse is... var target = evt.target; if (evt.type === "touchmove") { // ... the target of touchmove events is the element that was initially touched, // not the one **currently** being touched var touch = evt.touches[0]; target = document.elementFromPoint(touch.clientX, touch.clientY); } if (erasing && target !== Tools.svg) { msg.id = target.id; Tools.drawAndSend(msg); } } function stopErasing() { erasing = false; } function draw(data) { var elem; switch (data.type) { //TODO: add the ability to erase only some points in a line case "delete": elem = svg.getElementById(data.id); if (elem === null) console.error("Eraser: Tried to delete an element that does not exist."); else svg.removeChild(elem); break; default: console.error("Eraser: 'delete' instruction with unknown type. ", data); break; } } var svg = Tools.svg; Tools.add({ //The new tool "name": "Eraser", "icon": "❌", "listeners": { "press": startErasing, "move": erase, "release": stopErasing, }, "draw": draw, "mouseCursor": "crosshair", }); })(); //End of code isolation