Angelo Gladding
lahacker.net

dlv5vbq7lzlthol5 4b942a3185b37d00

South Pasadena, California, United States
62°F

Home Pagessvg_icon_editorVersions

Update page #rNr_Vhqv3

Published at: svg_icon_editor

5c39f146cb30d1d12ba15de4e33e259f390ac885
2020-05-20T22:19:18+00:00

diff --git a/resources/pages/rNr_Vhq b/resources/pages/rNr_Vhq
index 187ff1a..1e68659 100644
--- a/resources/pages/rNr_Vhq
+++ b/resources/pages/rNr_Vhq
@@ -1,13 +1,15 @@
 {
   "-audience": "public",
   "-id": "rNr_Vhq",
+  "-is-html": true,
+  "-license": "none",
   "-path": "svg_icon_editor",
   "-script": "var paths = [];\r\nvar id = 0;\r\n\r\nfunction render() {\r\n    var canvas = $(\"#canvas\");\r\n    while (canvas.firstChild) {\r\n        canvas.removeChild(canvas.firstChild) }\r\n    var svglines = $(\"#source\").value;\r\n    var output = '<svg viewBox=\"0 0 576 512\"><path fill=\"#999\" fill-opacity=\"0.75\" d=\"' + svglines + '\" />';\r\n    var simplified_output = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"' + svglines + '\" />';\r\n\r\n    function parseCoord(coord) {\r\n        coords = coord.split(\",\");\r\n        return [parseInt(coords[0]), parseInt(coords[1])]\r\n    }\r\n\r\n    function renderShape(shape) {\r\n        paths = [];\r\n        id = 0;\r\n        var lines = svglines.split(\"\\n\");\r\n        var path = [];\r\n        var prev;\r\n        for (var i = 0; i < lines.length; i++) {\r\n            var line = lines[i];\r\n            if (line[0] == \"Z\") {\r\n                path.push([\"Z\"]);\r\n                paths.push(path);\r\n                path = [];\r\n                continue\r\n            }\r\n            var parts = line.split(\" \");\r\n            switch (line[0]) {\r\n                case \"C\":\r\n                    var from = parseCoord(parts[1]);\r\n                    var fromx = from[0];\r\n                    var fromy = from[1];\r\n                    var to = parseCoord(parts[2]);\r\n                    var tox = to[0];\r\n                    var toy = to[1];\r\n                    var node = parseCoord(parts[3]);\r\n                    var nodex = node[0];\r\n                    var nodey = node[1];\r\n                    path.push([\"C\", id, id + 1, id + 2]);\r\n                    if (shape == \"line\") {\r\n                        output = output + \"<line x1=\" + fromx + \" y1=\" + fromy + \" x2=\" + prev[0] + \" y2=\" + prev[1] + \" stroke=orange />\";\r\n                        output = output + \"<line x1=\" + tox + \" y1=\" + toy + \" x2=\" + nodex + \" y2=\" + nodey + \" stroke=orange />\";\r\n                    } else {\r\n                        output = output + '<circle id=\"n' + id++ + '\" cx=\"' + fromx + '\" cy=\"' + fromy + '\" r=\"2\" fill=\"red\" />';\r\n                        output = output + '<circle id=\"n' + id++ + '\" cx=\"' + tox + '\" cy=\"' + toy + '\" r=\"2\" fill=\"red\" />';\r\n                        output = output + '<circle id=\"n' + id++ + '\" cx=\"' + nodex + '\" cy=\"' + nodey + '\" r=\"4\" fill=\"blue\" />';\r\n                    }\r\n                    break;\r\n                case \"L\":\r\n                    path.push([\"L\", id]);\r\n                    var node = parseCoord(parts[1]);\r\n                    var nodex = node[0];\r\n                    var nodey = node[1];\r\n                    if (shape == \"circle\")\r\n                        output = output + '<circle id=\"n' + id++ + '\" cx=\"' + nodex + '\" cy=\"' + nodey + '\" r=\"4\" fill=\"blue\" />';\r\n                    break;\r\n                case \"M\":\r\n                    path.push([\"M\", id]);\r\n                    var node = parseCoord(parts[1]);\r\n                    var nodex = node[0];\r\n                    var nodey = node[1];\r\n                    if (shape == \"circle\")\r\n                        output = output + '<circle id=\"n' + id++ + '\" cx=\"' + nodex + '\" cy=\"' + nodey + '\" r=\"4\" fill=\"blue\" />';\r\n                    break;\r\n                default:\r\n                    continue\r\n            }\r\n            prev = [nodex, nodey, id];\r\n        }\r\n    }\r\n    // paint circles second to appear above the lines\r\n    renderShape(\"line\");\r\n    renderShape(\"circle\");\r\n\r\n    output = output + '</svg>';\r\n    simplified_output = simplified_output + '</svg>';\r\n\r\n    $(\"#preview-large\").innerHTML = output;\r\n    $$(\"#preview-large circle\").each(function() {\r\n        this.remove();\r\n    });\r\n    $$(\"#preview-large line\").each(function() {\r\n        this.remove();\r\n    });\r\n    $(\"#preview-medium\").innerHTML = $(\"#preview-large\").innerHTML;\r\n    $(\"#preview-small\").innerHTML = $(\"#preview-large\").innerHTML;\r\n\r\n    function escapeRegExp(str) {\r\n        return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\r\n    }\r\n    function replaceAll(str, find, replace) {\r\n        return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\r\n    }\r\n    var encoded = replaceAll(simplified_output, \"#\", \"%23\");\r\n    $(\"#save\").setAttribute(\"href\", \"data:image/svg+xml,\" + encoded);\r\n\r\n    canvas.innerHTML = output;\r\n    $$(\"circle\").each(function() {\r\n        this.addEventListener(\"click\", function(ev) {\r\n            this.setAttribute(\"stroke\", \"yellow\");\r\n            this.setAttribute(\"stroke-width\", \"1\");\r\n            this.classList.add(\"selected\");\r\n        })\r\n    });\r\n}\r\n\r\nfunction highlightCoord(textarea) {\r\n    for (var start = textarea.selectionStart; textarea.value[start] != \" \"; start--) { }\r\n    for (var end = start + 2; textarea.value[end].match(/[\\d,]/); end++) { }\r\n    textarea.selectionStart = start + 1;\r\n    textarea.selectionEnd = end;\r\n    textarea.focus();\r\n}\r\n\r\n$.load(function() {\r\n    document.onkeyup = function(ev) {\r\n        if (ev.key == \"q\")\r\n            $(\"#editor\").classList.toggle(\"showcase\");\r\n    }\r\n\r\n    $(\"#source\").addEventListener(\"click\", function() {\r\n        if ($(this).value.length == 0)\r\n            return\r\n        highlightCoord(this);\r\n    });\r\n\r\n    /* capture selected, determine offset, shift, scratch,\r\n       render & restore selected */\r\n    $(\"#editor\").addEventListener(\"wheel\", function(ev) {\r\n        var selected = [];\r\n        $$(\"circle.selected\").each(function() {\r\n            selected.push($(this).getAttribute(\"id\"));\r\n        });\r\n        var offset = -4;\r\n        if (ev.deltaY > 0)\r\n            offset = 4;\r\n        var x = 0;\r\n        var y = 0;\r\n        if (ev.ctrlKey)\r\n            x = offset;\r\n        else\r\n            y = offset;\r\n        shiftNodes(selected, x, y);\r\n        scratch();\r\n        render();\r\n        for (let node of selected) {\r\n            var el = $(\"circle#\" + node);\r\n            el.setAttribute(\"stroke\", \"yellow\");\r\n            el.setAttribute(\"stroke-width\", \"1\");\r\n            el.classList.add(\"selected\");\r\n        }\r\n        ev.preventDefault();\r\n    });\r\n\r\n    function scratch() {\r\n        var output = \"\";\r\n        for (var i = 0; i < paths.length; i++) {\r\n            var path = paths[i];\r\n            for (var j = 0; j < path.length; j++) {\r\n                var command = path[j];\r\n                output = output + command[0] + \" \";\r\n                for (var k = 1; k < command.length; k++) {\r\n                    var coord = $(\"#n\" + command[k]);\r\n                    output = output + coord.getAttribute(\"cx\") + \",\"\r\n                             + coord.getAttribute(\"cy\") + \" \";\r\n                }\r\n                output = output.trim() + \"\\n\";\r\n            }\r\n            output = output + \"\\n\";\r\n        }\r\n        $(\"#source\").value = output.trim();\r\n    }\r\n\r\n    function shiftNodes(nodes, xoffset, yoffset) {\r\n        for (var i = 0; i < paths.length; i++) {\r\n            var path = paths[i];\r\n            for (var j = 0; j < path.length; j++) {\r\n                var command = path[j];\r\n                for (var k = 1; k < command.length; k++) {\r\n                    var id = command[k];\r\n                    for (let node of nodes) {\r\n                        if (\"n\" + id == node) {\r\n                            var n = $(\"#\" + node);\r\n                            n.setAttribute(\"cx\", parseInt(n.getAttribute(\"cx\")) + xoffset);\r\n                            n.setAttribute(\"cy\", parseInt(n.getAttribute(\"cy\")) + yoffset);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    function addNode(shape, x, y) {\r\n        /* require two nodes, insert between */\r\n        x = parseInt(x);\r\n        y = parseInt(y);\r\n        for (var i = 0; i < paths.length; i++) {\r\n            var path = paths[i];\r\n            for (var j = 0; j < path.length; j++) {\r\n                var command = path[j];\r\n                for (var k = 1; k < command.length; k++) {\r\n                    var id = command[k];\r\n                    var n = $(\"#n\" + id);\r\n                    if (n.getAttribute(\"cx\") == x && n.getAttribute(\"cy\") == y) {\r\n                        var canvas = $(\"#canvas svg\");\r\n                        if (shape == \"curve\") {\r\n                            canvas.append(\"<circle id=n9997 cx=\" + (x + 12) + \" cy=\" + (y + 12) + \">\");\r\n                            canvas.append(\"<circle id=n9998 cx=\" + (x + 16) + \" cy=\" + (y + 16) + \">\");\r\n                            canvas.append(\"<circle id=n9999 cx=\" + (x - 8) + \" cy=\" + (y + 8) + \">\");\r\n                            path.splice(j + 1, 0, [\"C\", 9997, 9998, 9999]);\r\n                        } else {\r\n                            canvas.append(\"<circle id=n9999 cx=\" + (x - 12) + \" cy=\" + (y - 12) + \">\");\r\n                            path.splice(j + 1, 0, [\"L\", 9999]);\r\n                        }\r\n                        return\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    var dragStart = 0;\r\n    var canvasOffsets = $(\"#canvas\").getBoundingClientRect();\r\n    var canvasOffset = {top: canvasOffsets.top + window.scrollY,\r\n                        left: canvasOffsets.left + window.scrollX};\r\n    function getCoords(ev) {\r\n        var x = ev.clientX - canvasOffset.left;\r\n        var y = ev.clientY - canvasOffset.top;\r\n        return [x, y]\r\n    }\r\n    function getRoundedCoords(ev, s) {\r\n        var x = Math.round((ev.clientX - canvasOffset.left) / s) * s;\r\n        var y = Math.round((ev.clientY - canvasOffset.top) / s) * s;\r\n        return [x, y]\r\n    }\r\n    $(\"#canvas\").addEventListener(\"mousedown\", function(ev) {\r\n        if (!ev.ctrlKey) {\r\n            $$(\"circle.selected\").each(function() {\r\n                this.setAttribute(\"stroke-width\", \"0\");\r\n                this.classList.remove(\"selected\");\r\n            });\r\n        }\r\n        dragStart = getCoords(ev);\r\n        return false\r\n    })\r\n    $(\"#canvas\").addEventListener(\"mousemove\", function(ev) {\r\n        coords = getRoundedCoords(ev, 16);\r\n        $(\"#coords\").innerHTML = coords[0] + \":\" + coords[1];\r\n    })\r\n    $(\"#canvas\").addEventListener(\"mouseup\", function(ev) {\r\n        selectCoordsByRange(dragStart, getCoords(ev));\r\n    })\r\n\r\n    function selectCoordsByRange(a, b) {\r\n        var minx = a[0];\r\n        if (b[0] < a[0])\r\n            minx = b[0];\r\n        var maxx = a[0];\r\n        if (b[0] > a[0])\r\n            maxx = b[0];\r\n        var miny = a[1];\r\n        if (b[1] < a[1])\r\n            miny = b[1];\r\n        var maxy = a[1];\r\n        if (b[1] > a[1])\r\n            maxy = b[1];\r\n        $$(\"circle\").each(function() {\r\n            var x = parseInt(this.getAttribute(\"cx\"));\r\n            var y = parseInt(this.getAttribute(\"cy\"));\r\n            if (minx < x && x < maxx && miny < y && y < maxy) {\r\n                this.setAttribute(\"stroke\", \"yellow\");\r\n                this.setAttribute(\"stroke-width\", \"1\");\r\n                this.classList.add(\"selected\");\r\n            }\r\n        });\r\n    }\r\n\r\n    $(\"#source\").addEventListener(\"keyup\", render);\r\n    render();\r\n\r\n    $(\".add\").addEventListener(\"click\", function() {\r\n        var selected = $(\"circle.selected\");\r\n        switch (selected.length) {\r\n            case 0:\r\n                alert(\"please select at least one node\");\r\n                break;\r\n            case 1:\r\n                var shape = $(this).getAttribute(\"data-shape\");\r\n                addNode(shape, selected.getAttribute(\"cx\"), selected.getAttribute(\"cy\"));\r\n                scratch();\r\n                render();\r\n                break;\r\n            default:\r\n                alert(\"can't add a new node with multiple nodes selected\");\r\n        }\r\n    });\r\n    $(\"#showcase\").addEventListener(\"click\", function() {\r\n        $(\"#editor\").classList.toggle(\"showcase\");\r\n    });\r\n\r\n    var ruler_html = \"\";\r\n    for (var i = 0; i < 17; i++) {\r\n        var num = i * 32;\r\n        if (i == 8)\r\n            num = \"<strong>\" + num + \"</strong>\";\r\n        ruler_html = ruler_html + \"<span>\" + num + \"</span>\";\r\n    }\r\n    $(\"#vrulerl\").innerHTML = ruler_html;\r\n    $(\"#vrulerr\").innerHTML = ruler_html;\r\n\r\n    var ruler_html = \"\";\r\n    for (var i = 0; i < 19; i++) {\r\n        var num = i * 32;\r\n        if (i == 9)\r\n            num = \"<strong>\" + num + \"</strong>\";\r\n        ruler_html = ruler_html + \"<span>\" + num + \"</span>\";\r\n    }\r\n    $(\"#hruler\").innerHTML = ruler_html;\r\n\r\n    $$(\"#gallery svg\").each(function() {\r\n        this.addEventListener(\"click\", function(ev) {\r\n            $(\"#source\").value = this.querySelector(\"path\").getAttribute(\"d\");\r\n            render();\r\n        });\r\n    });\r\n});",
   "-source-content": "<header class=toolbar>\r\n    <div id=gallery>\r\n    $for icon_name, (icon_width, icon_height, icon_data) in icons.items():\r\n        <svg title=\"$icon_name\" xmlns=\"http://www.w3.org/2000/svg\"\r\n        viewBox=\"0 0 $icon_width $icon_height\"><path fill=\"#666\" d=\"$icon_data\"\r\n        /></svg>\r\n    </div>\r\n    <textarea id=source></textarea>\r\n    <div id=icon>\r\n        <div id=preview-large></div>\r\n        <div id=preview-medium></div>\r\n        <div id=preview-small></div>\r\n        <a id=save download=icon.svg href=\"\">download</a>\r\n    </div>\r\n    <div id=toolbox>\r\n        <div id=coords>&nbsp;</div>\r\n        <button class=add data-shape=curve>\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 120,352C 120,192 224,88 384,88L 384,136C 252,136 168,220 168,352ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\r\n        </button>\r\n        <button class=add data-shape=line>\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 156,352L 384,124L 420,160L 192,388ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\r\n        </button>\r\n        <button id=showcase>Showcase</button>\r\n    </div>\r\n</header>\r\n\r\n<div id=icon_editor>\r\n    <div id=canvas></div>\r\n    <div id=vrulerl class=\"ruler vruler\"></div>\r\n    <div id=vrulerr class=\"ruler vruler\"></div>\r\n    <div id=hruler class=ruler></div>\r\n</div>",
   "-style": "header.toolbar {\r\n    display: grid;\r\n    grid-column-gap: 1em;\r\n    grid-template-columns: 10em 16em 10em;\r\n    grid-template-rows: auto 2em; }\r\n\r\n#gallery svg {\r\n    cursor: pointer;\r\n    height: 28px;\r\n    width: 32px; }\r\n#gallery .icon {\r\n    margin-right: .5em; }\r\n\r\nbutton.add svg {\r\n    height: 14px;\r\n    width: 16px; }\r\n\r\n#preview-large {\r\n    height: 128px;\r\n    width: 144px; }\r\n#preview-medium {\r\n    height: 32px;\r\n    width: 36px; }\r\n#preview-small {\r\n    height: 16px;\r\n    width: 18px; }\r\n\r\n\r\n\r\n\r\n\r\n#source {\r\n    font-size: .8em;\r\n    height: 20em;\r\n    width: 20em; }\r\n\r\n#icon_editor {\r\n    \r\n    \r\n    display: grid;\r\n    grid-column-gap: .5em;\r\n    grid-row-gap: .25em;\r\n    grid-template-columns: 2em 41.25em 2em;\r\n    grid-template-rows: 36.5em 2em; }\r\n\r\n.showcase #canvas {\r\n    background: none;\r\n    border-color: #000; }\r\n.showcase .ruler, .showcase circle, .showcase line {\r\n    display: none; }\r\n\r\n#canvas {\r\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4gMQEiU3zw0/kAAAAMdJREFUeNrt2tEJxCAMBmDvNnCFrOAKXcH1XcERvA0UTkqhfnktJeV7SH5CU5pURIzZ81LK2Hn/uq7xZP9a6/imwwsAAAAAjq7PalXMKueceu9/N4+I1FpLT/UvpSw/UA4wAwAAAADgzTlgtUrurN09vlsRIQeYAQAAAADgHuAeIAeYAQAAAABwZA5YraI3V85ZDjADAAAAAMA9wD1ADjADAAAAAODIHOD/ADnADAAAAAAA9wD3ADnADAAAAACA83JArXWcDPADG+SewdhVz+sAAAAASUVORK5CYII=);\r\n    border: 1px solid #555;\r\n    grid-column: 2;\r\n    grid-row: 1;\r\n    height: 511px;\r\n    width: 575px; }\r\n\r\n.selected {\r\n    color: #3f9; }\r\n\r\n.ruler, #coords {\r\n    font-family: Ubuntu Mono; }\r\n.icon {\r\n    height: 16px;\r\n    width: 18px; }\r\n\r\n/* rulers */\r\n\r\n.ruler span {\r\n    color: #666;\r\n    font-size: .7em; }\r\n.ruler strong {\r\n    color: #ccc; }\r\n.vruler {\r\n    margin-top: -.3em;\r\n    width: 2em; }\r\n.vruler span {\r\n    display: block;\r\n    height: 32px; }\r\n#vrulerl {\r\n    grid-column: 1;\r\n    grid-row: 1;\r\n    text-align: right; }\r\n#vrulerr {\r\n    grid-column: 3;\r\n    grid-row: 1; }\r\n#hruler {\r\n    grid-column: 2;\r\n    grid-row: 2;\r\n    margin-left: -1.5em;\r\n    width: 110%; }\r\n#hruler span {\r\n    display: inline-block;\r\n    transform: rotate(90deg);\r\n    height: 32px;\r\n    width: 32px; }",
   "-type": "page",
-  "content": "<header class=\"toolbar\">\n    <div id=\"gallery\">\n    <svg title=\"like\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,92\nC 264,64 224,32 160,32\nC 64,32 32,80 32,168\nC 32,232 92,292 96,296\nL 268,472\nC 280,484 296,484 308,472\nL 480,296\nC 484,292 544,232 544,168\nC 544,80 512,32 416,32\nC 352,32 312,64 288,92\nZ\"></path></svg>\n    <svg title=\"repost\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 320,140\nL 320,56\nC 320,32 348,24 360,36\nL 536,192\nC 544,200 544,216 536,224\nL 360,380\nC 348,392 320,384 320,360\nL 320,276\nC 160,276 108,332 144,460\nC 152,484 124,488 104,476\nC 48,444 32,368 32,320\nC 32,192 160,140 320,140\nZ\"></path></svg>\n    <svg title=\"bookmark\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 144,32\nC 136,32 128,40 128,48\nL 128,480\nL 288,384\nL 448,480\nL 448,48\nC 448,40 440,32 432,32\nZ\"></path></svg>\n    <svg title=\"follow\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 128,352\nC 92,352 64,380 64,416\nC 64,452 92,480 128,480\nC 164,480 192,452 192,416\nC 192,380 164,352 128,352\nZ\"></path></svg>\n</div></header><p>M 64,208 L 64,272 C 64,280 72,288 80,288 C 200,288 256,344 256,464 C 256,472 264,480 272,480 L 336,480 C 344,480 352,472 352,464 C 352,288 256,192 80,192 C 72,192 64,200 64,208 Z </p>\n<p>M 64,48 L 64,112 C 64,120 72,128 80,128 C 296,128 416,248 416,464 C 416,472 424,480 432,480 L 496,480 C 504,480 512,472 512,464 C 512,188 356,32 80,32 C 72,32 64,40 64,48 Z\"     /&gt;     <svg title=\"issue\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32 C 160,32 64,128 64,256 C 64,384 160,480 288,480 C 416,480 512,384 512,256 C 512,128 416,32 288,32 Z &lt;/p&gt;&lt;p&gt;M 288,304 C 312,304 328,320 328,344 C 328,368 312,384 288,384 C 264,384 248,368 248,344 C 248,320 264,304 288,304 Z &lt;/p&gt;&lt;p&gt;M 248,144 C 248,136 256,132 264,132 L 312,132 C 320,132 328,136 328,144 L 320,264 C 320,276 312,280 304,280 L 272,280 C 264,280 256,276 256,264 L 248,144 Z\"></path></svg>     <svg title=\"verify\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 368,96 C 304,96 256,144 256,208 C 256,272 304,320 368,320 C 432,320 480,272 480,208 C 480,144 432,96 368,96 Z &lt;/p&gt;&lt;p&gt;M 288,320 L 224,344 C 192,364 192,384 192,396 L 192,456 C 192,468 204,480 216,480 L 520,480 C 532,480 544,468 544,456 L 544,396 C 544,384 544,364 512,344 L 448,320 C 416,352 320,352 288,320 Z &lt;/p&gt;&lt;p&gt;M 108,32 C 100,32 96,36 96,44 L 96,96 L 44,96 C 36,96 32,100 32,108 L 32,148 C 32,156 36,160 44,160 L 96,160 L 96,212 C 96,220 100,224 108,224 L 148,224 C 156,224 160,220 160,212 L 160,160 L 212,160 C 220,160 224,156 224,148 L 224,108 C 224,100 220,96 212,96 L 160,96 L 160,44 C 160,36 156,32 148,32 Z\"></path></svg>     <svg title=\"reply\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 256,140 L 256,56 C 256,32 228,24 216,36 L 40,192 C 32,200 32,216 40,224 L 216,380 C 228,392 256,384 256,360 L 256,276 C 416,276 468,332 432,460 C 424,484 452,488 472,476 C 528,444 544,368 544,320 C 544,192 416,140 256,140 Z\"></path></svg>     <svg title=\"contrast\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32 C 160,32 64,128 64,256 C 64,384 160,480 288,480 C 416,480 512,384 512,256 C 512,128 416,32 288,32 Z &lt;/p&gt;&lt;p&gt;M 288,96 C 384,96 448,160 448,256 C 448,352 384,416 288,416 Z\"></path></svg>     <svg title=\"vote\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 272,36 C 280,28 296,28 304,36 L 500,232 C 512,244 504,272 480,272 L 356,272 L 356,456 C 356,472 348,480 332,480 C 324,480 252,480 244,480 C 228,480 220,472 220,456 L 220,272 L 96,272 C 72,272 64,244 76,232 L 272,36 Z\"></path></svg>          <textarea id=\"source\"></textarea>     </p>\n<div id=\"icon\">         <div id=\"preview-large\"></div>         <div id=\"preview-medium\"></div>         <div id=\"preview-small\"></div>         <a id=\"save\" download=\"icon.svg\" href=\"\">download</a>     </div>     <div id=\"toolbox\">         <div id=\"coords\">&#160;</div>         <button class=\"add\" data-shape=\"curve\">             <svg xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 120,352C 120,192 224,88 384,88L 384,136C 252,136 168,220 168,352ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\"></path></svg>         </button>         <button class=\"add\" data-shape=\"line\">             <svg xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 156,352L 384,124L 420,160L 192,388ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\"></path></svg>         </button>         <button id=\"showcase\">Showcase</button>     </div>  <div id=\"icon_editor\">\n    <div id=\"canvas\"></div>\n    <div id=\"vrulerl\" class=\"ruler vruler\"></div>\n    <div id=\"vrulerr\" class=\"ruler vruler\"></div>\n    <div id=\"hruler\" class=\"ruler\"></div>\n</div>",
+  "content": "<header class=toolbar>\n    <div id=gallery>\n    <svg title=\"like\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,92\nC 264,64 224,32 160,32\nC 64,32 32,80 32,168\nC 32,232 92,292 96,296\nL 268,472\nC 280,484 296,484 308,472\nL 480,296\nC 484,292 544,232 544,168\nC 544,80 512,32 416,32\nC 352,32 312,64 288,92\nZ\"\n    /></svg>\n    <svg title=\"repost\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 320,140\nL 320,56\nC 320,32 348,24 360,36\nL 536,192\nC 544,200 544,216 536,224\nL 360,380\nC 348,392 320,384 320,360\nL 320,276\nC 160,276 108,332 144,460\nC 152,484 124,488 104,476\nC 48,444 32,368 32,320\nC 32,192 160,140 320,140\nZ\"\n    /></svg>\n    <svg title=\"bookmark\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 144,32\nC 136,32 128,40 128,48\nL 128,480\nL 288,384\nL 448,480\nL 448,48\nC 448,40 440,32 432,32\nZ\"\n    /></svg>\n    <svg title=\"follow\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 128,352\nC 92,352 64,380 64,416\nC 64,452 92,480 128,480\nC 164,480 192,452 192,416\nC 192,380 164,352 128,352\nZ\n\nM 64,208\nL 64,272\nC 64,280 72,288 80,288\nC 200,288 256,344 256,464\nC 256,472 264,480 272,480\nL 336,480\nC 344,480 352,472 352,464\nC 352,288 256,192 80,192\nC 72,192 64,200 64,208\nZ\n\nM 64,48\nL 64,112\nC 64,120 72,128 80,128\nC 296,128 416,248 416,464\nC 416,472 424,480 432,480\nL 496,480\nC 504,480 512,472 512,464\nC 512,188 356,32 80,32\nC 72,32 64,40 64,48\nZ\"\n    /></svg>\n    <svg title=\"issue\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32\nC 160,32 64,128 64,256\nC 64,384 160,480 288,480\nC 416,480 512,384 512,256\nC 512,128 416,32 288,32\nZ\n\nM 288,304\nC 312,304 328,320 328,344\nC 328,368 312,384 288,384\nC 264,384 248,368 248,344\nC 248,320 264,304 288,304\nZ\n\nM 248,144\nC 248,136 256,132 264,132\nL 312,132\nC 320,132 328,136 328,144\nL 320,264\nC 320,276 312,280 304,280\nL 272,280\nC 264,280 256,276 256,264\nL 248,144\nZ\"\n    /></svg>\n    <svg title=\"verify\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 368,96\nC 304,96 256,144 256,208\nC 256,272 304,320 368,320\nC 432,320 480,272 480,208\nC 480,144 432,96 368,96\nZ\n\nM 288,320\nL 224,344\nC 192,364 192,384 192,396\nL 192,456\nC 192,468 204,480 216,480\nL 520,480\nC 532,480 544,468 544,456\nL 544,396\nC 544,384 544,364 512,344\nL 448,320\nC 416,352 320,352 288,320\nZ\n\nM 108,32\nC 100,32 96,36 96,44\nL 96,96\nL 44,96\nC 36,96 32,100 32,108\nL 32,148\nC 32,156 36,160 44,160\nL 96,160\nL 96,212\nC 96,220 100,224 108,224\nL 148,224\nC 156,224 160,220 160,212\nL 160,160\nL 212,160\nC 220,160 224,156 224,148\nL 224,108\nC 224,100 220,96 212,96\nL 160,96\nL 160,44\nC 160,36 156,32 148,32\nZ\"\n    /></svg>\n    <svg title=\"reply\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 256,140\nL 256,56\nC 256,32 228,24 216,36\nL 40,192\nC 32,200 32,216 40,224\nL 216,380\nC 228,392 256,384 256,360\nL 256,276\nC 416,276 468,332 432,460\nC 424,484 452,488 472,476\nC 528,444 544,368 544,320\nC 544,192 416,140 256,140\nZ\"\n    /></svg>\n    <svg title=\"contrast\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32\nC 160,32 64,128 64,256\nC 64,384 160,480 288,480\nC 416,480 512,384 512,256\nC 512,128 416,32 288,32\nZ\n\nM 288,96\nC 384,96 448,160 448,256\nC 448,352 384,416 288,416\nZ\"\n    /></svg>\n    <svg title=\"vote\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 272,36\nC 280,28 296,28 304,36\nL 500,232\nC 512,244 504,272 480,272\nL 356,272\nL 356,456\nC 356,472 348,480 332,480\nC 324,480 252,480 244,480\nC 228,480 220,472 220,456\nL 220,272\nL 96,272\nC 72,272 64,244 76,232\nL 272,36\nZ\"\n    /></svg>\n    </div>\n    <textarea id=source></textarea>\n    <div id=icon>\n        <div id=preview-large></div>\n        <div id=preview-medium></div>\n        <div id=preview-small></div>\n        <a id=save download=icon.svg href=\"\">download</a>\n    </div>\n    <div id=toolbox>\n        <div id=coords>&nbsp;</div>\n        <button class=add data-shape=curve>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 120,352C 120,192 224,88 384,88L 384,136C 252,136 168,220 168,352ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\n        </button>\n        <button class=add data-shape=line>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 156,352L 384,124L 420,160L 192,388ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\n        </button>\n        <button id=showcase>Showcase</button>\n    </div>\n</header>\n\n<div id=icon_editor>\n    <div id=canvas></div>\n    <div id=vrulerl class=\"ruler vruler\"></div>\n    <div id=vrulerr class=\"ruler vruler\"></div>\n    <div id=hruler class=ruler></div>\n</div>",
   "name": "SVG Icon Editor",
   "published": "2020-05-20 21:31:48.565544+00:00",
-  "updated": "2020-05-20 22:03:43.306524+00:00"
+  "updated": "2020-05-20 22:19:18.045501+00:00"
 }
\ No newline at end of file
diff --git a/resources/pages/rNr_Vhq.sig b/resources/pages/rNr_Vhq.sig
index a7a59e7..4fee701 100644
--- a/resources/pages/rNr_Vhq.sig
+++ b/resources/pages/rNr_Vhq.sig
@@ -2,17 +2,17 @@
 Hash: SHA256
 
 {
-  "content": "<header class=\"toolbar\">\n    <div id=\"gallery\">\n    <svg title=\"like\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,92\nC 264,64 224,32 160,32\nC 64,32 32,80 32,168\nC 32,232 92,292 96,296\nL 268,472\nC 280,484 296,484 308,472\nL 480,296\nC 484,292 544,232 544,168\nC 544,80 512,32 416,32\nC 352,32 312,64 288,92\nZ\"></path></svg>\n    <svg title=\"repost\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 320,140\nL 320,56\nC 320,32 348,24 360,36\nL 536,192\nC 544,200 544,216 536,224\nL 360,380\nC 348,392 320,384 320,360\nL 320,276\nC 160,276 108,332 144,460\nC 152,484 124,488 104,476\nC 48,444 32,368 32,320\nC 32,192 160,140 320,140\nZ\"></path></svg>\n    <svg title=\"bookmark\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 144,32\nC 136,32 128,40 128,48\nL 128,480\nL 288,384\nL 448,480\nL 448,48\nC 448,40 440,32 432,32\nZ\"></path></svg>\n    <svg title=\"follow\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 128,352\nC 92,352 64,380 64,416\nC 64,452 92,480 128,480\nC 164,480 192,452 192,416\nC 192,380 164,352 128,352\nZ\"></path></svg>\n</div></header><p>M 64,208 L 64,272 C 64,280 72,288 80,288 C 200,288 256,344 256,464 C 256,472 264,480 272,480 L 336,480 C 344,480 352,472 352,464 C 352,288 256,192 80,192 C 72,192 64,200 64,208 Z </p>\n<p>M 64,48 L 64,112 C 64,120 72,128 80,128 C 296,128 416,248 416,464 C 416,472 424,480 432,480 L 496,480 C 504,480 512,472 512,464 C 512,188 356,32 80,32 C 72,32 64,40 64,48 Z\"     /&gt;     <svg title=\"issue\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32 C 160,32 64,128 64,256 C 64,384 160,480 288,480 C 416,480 512,384 512,256 C 512,128 416,32 288,32 Z &lt;/p&gt;&lt;p&gt;M 288,304 C 312,304 328,320 328,344 C 328,368 312,384 288,384 C 264,384 248,368 248,344 C 248,320 264,304 288,304 Z &lt;/p&gt;&lt;p&gt;M 248,144 C 248,136 256,132 264,132 L 312,132 C 320,132 328,136 328,144 L 320,264 C 320,276 312,280 304,280 L 272,280 C 264,280 256,276 256,264 L 248,144 Z\"></path></svg>     <svg title=\"verify\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 368,96 C 304,96 256,144 256,208 C 256,272 304,320 368,320 C 432,320 480,272 480,208 C 480,144 432,96 368,96 Z &lt;/p&gt;&lt;p&gt;M 288,320 L 224,344 C 192,364 192,384 192,396 L 192,456 C 192,468 204,480 216,480 L 520,480 C 532,480 544,468 544,456 L 544,396 C 544,384 544,364 512,344 L 448,320 C 416,352 320,352 288,320 Z &lt;/p&gt;&lt;p&gt;M 108,32 C 100,32 96,36 96,44 L 96,96 L 44,96 C 36,96 32,100 32,108 L 32,148 C 32,156 36,160 44,160 L 96,160 L 96,212 C 96,220 100,224 108,224 L 148,224 C 156,224 160,220 160,212 L 160,160 L 212,160 C 220,160 224,156 224,148 L 224,108 C 224,100 220,96 212,96 L 160,96 L 160,44 C 160,36 156,32 148,32 Z\"></path></svg>     <svg title=\"reply\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 256,140 L 256,56 C 256,32 228,24 216,36 L 40,192 C 32,200 32,216 40,224 L 216,380 C 228,392 256,384 256,360 L 256,276 C 416,276 468,332 432,460 C 424,484 452,488 472,476 C 528,444 544,368 544,320 C 544,192 416,140 256,140 Z\"></path></svg>     <svg title=\"contrast\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32 C 160,32 64,128 64,256 C 64,384 160,480 288,480 C 416,480 512,384 512,256 C 512,128 416,32 288,32 Z &lt;/p&gt;&lt;p&gt;M 288,96 C 384,96 448,160 448,256 C 448,352 384,416 288,416 Z\"></path></svg>     <svg title=\"vote\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 272,36 C 280,28 296,28 304,36 L 500,232 C 512,244 504,272 480,272 L 356,272 L 356,456 C 356,472 348,480 332,480 C 324,480 252,480 244,480 C 228,480 220,472 220,456 L 220,272 L 96,272 C 72,272 64,244 76,232 L 272,36 Z\"></path></svg>          <textarea id=\"source\"></textarea>     </p>\n<div id=\"icon\">         <div id=\"preview-large\"></div>         <div id=\"preview-medium\"></div>         <div id=\"preview-small\"></div>         <a id=\"save\" download=\"icon.svg\" href=\"\">download</a>     </div>     <div id=\"toolbox\">         <div id=\"coords\">&#160;</div>         <button class=\"add\" data-shape=\"curve\">             <svg xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 120,352C 120,192 224,88 384,88L 384,136C 252,136 168,220 168,352ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\"></path></svg>         </button>         <button class=\"add\" data-shape=\"line\">             <svg xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 156,352L 384,124L 420,160L 192,388ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\"></path></svg>         </button>         <button id=\"showcase\">Showcase</button>     </div>  <div id=\"icon_editor\">\n    <div id=\"canvas\"></div>\n    <div id=\"vrulerl\" class=\"ruler vruler\"></div>\n    <div id=\"vrulerr\" class=\"ruler vruler\"></div>\n    <div id=\"hruler\" class=\"ruler\"></div>\n</div>",
+  "content": "<header class=toolbar>\n    <div id=gallery>\n    <svg title=\"like\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,92\nC 264,64 224,32 160,32\nC 64,32 32,80 32,168\nC 32,232 92,292 96,296\nL 268,472\nC 280,484 296,484 308,472\nL 480,296\nC 484,292 544,232 544,168\nC 544,80 512,32 416,32\nC 352,32 312,64 288,92\nZ\"\n    /></svg>\n    <svg title=\"repost\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 320,140\nL 320,56\nC 320,32 348,24 360,36\nL 536,192\nC 544,200 544,216 536,224\nL 360,380\nC 348,392 320,384 320,360\nL 320,276\nC 160,276 108,332 144,460\nC 152,484 124,488 104,476\nC 48,444 32,368 32,320\nC 32,192 160,140 320,140\nZ\"\n    /></svg>\n    <svg title=\"bookmark\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 144,32\nC 136,32 128,40 128,48\nL 128,480\nL 288,384\nL 448,480\nL 448,48\nC 448,40 440,32 432,32\nZ\"\n    /></svg>\n    <svg title=\"follow\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 128,352\nC 92,352 64,380 64,416\nC 64,452 92,480 128,480\nC 164,480 192,452 192,416\nC 192,380 164,352 128,352\nZ\n\nM 64,208\nL 64,272\nC 64,280 72,288 80,288\nC 200,288 256,344 256,464\nC 256,472 264,480 272,480\nL 336,480\nC 344,480 352,472 352,464\nC 352,288 256,192 80,192\nC 72,192 64,200 64,208\nZ\n\nM 64,48\nL 64,112\nC 64,120 72,128 80,128\nC 296,128 416,248 416,464\nC 416,472 424,480 432,480\nL 496,480\nC 504,480 512,472 512,464\nC 512,188 356,32 80,32\nC 72,32 64,40 64,48\nZ\"\n    /></svg>\n    <svg title=\"issue\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32\nC 160,32 64,128 64,256\nC 64,384 160,480 288,480\nC 416,480 512,384 512,256\nC 512,128 416,32 288,32\nZ\n\nM 288,304\nC 312,304 328,320 328,344\nC 328,368 312,384 288,384\nC 264,384 248,368 248,344\nC 248,320 264,304 288,304\nZ\n\nM 248,144\nC 248,136 256,132 264,132\nL 312,132\nC 320,132 328,136 328,144\nL 320,264\nC 320,276 312,280 304,280\nL 272,280\nC 264,280 256,276 256,264\nL 248,144\nZ\"\n    /></svg>\n    <svg title=\"verify\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 368,96\nC 304,96 256,144 256,208\nC 256,272 304,320 368,320\nC 432,320 480,272 480,208\nC 480,144 432,96 368,96\nZ\n\nM 288,320\nL 224,344\nC 192,364 192,384 192,396\nL 192,456\nC 192,468 204,480 216,480\nL 520,480\nC 532,480 544,468 544,456\nL 544,396\nC 544,384 544,364 512,344\nL 448,320\nC 416,352 320,352 288,320\nZ\n\nM 108,32\nC 100,32 96,36 96,44\nL 96,96\nL 44,96\nC 36,96 32,100 32,108\nL 32,148\nC 32,156 36,160 44,160\nL 96,160\nL 96,212\nC 96,220 100,224 108,224\nL 148,224\nC 156,224 160,220 160,212\nL 160,160\nL 212,160\nC 220,160 224,156 224,148\nL 224,108\nC 224,100 220,96 212,96\nL 160,96\nL 160,44\nC 160,36 156,32 148,32\nZ\"\n    /></svg>\n    <svg title=\"reply\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 256,140\nL 256,56\nC 256,32 228,24 216,36\nL 40,192\nC 32,200 32,216 40,224\nL 216,380\nC 228,392 256,384 256,360\nL 256,276\nC 416,276 468,332 432,460\nC 424,484 452,488 472,476\nC 528,444 544,368 544,320\nC 544,192 416,140 256,140\nZ\"\n    /></svg>\n    <svg title=\"contrast\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 288,32\nC 160,32 64,128 64,256\nC 64,384 160,480 288,480\nC 416,480 512,384 512,256\nC 512,128 416,32 288,32\nZ\n\nM 288,96\nC 384,96 448,160 448,256\nC 448,352 384,416 288,416\nZ\"\n    /></svg>\n    <svg title=\"vote\" xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 272,36\nC 280,28 296,28 304,36\nL 500,232\nC 512,244 504,272 480,272\nL 356,272\nL 356,456\nC 356,472 348,480 332,480\nC 324,480 252,480 244,480\nC 228,480 220,472 220,456\nL 220,272\nL 96,272\nC 72,272 64,244 76,232\nL 272,36\nZ\"\n    /></svg>\n    </div>\n    <textarea id=source></textarea>\n    <div id=icon>\n        <div id=preview-large></div>\n        <div id=preview-medium></div>\n        <div id=preview-small></div>\n        <a id=save download=icon.svg href=\"\">download</a>\n    </div>\n    <div id=toolbox>\n        <div id=coords>&nbsp;</div>\n        <button class=add data-shape=curve>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 120,352C 120,192 224,88 384,88L 384,136C 252,136 168,220 168,352ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\n        </button>\n        <button class=add data-shape=line>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"#666\" d=\"M 156,352L 384,124L 420,160L 192,388ZM 96,352L 192,352L 192,448L 96,448ZM 384,64L 480,64L 480,160L 384,160Z\" /></svg>\n        </button>\n        <button id=showcase>Showcase</button>\n    </div>\n</header>\n\n<div id=icon_editor>\n    <div id=canvas></div>\n    <div id=vrulerl class=\"ruler vruler\"></div>\n    <div id=vrulerr class=\"ruler vruler\"></div>\n    <div id=hruler class=ruler></div>\n</div>",
   "name": "SVG Icon Editor",
   "published": "2020-05-20 21:31:48.565544+00:00",
-  "updated": "2020-05-20 22:03:43.306524+00:00",
+  "updated": "2020-05-20 22:19:18.045501+00:00",
   "url": "https://lahacker.net/pages/svg_icon_editor"
 }
 -----BEGIN PGP SIGNATURE-----
 
-iLMEAQEIAB0WIQQJzviPKcwaRErmunPRaYhuhlydoQUCXsWpPwAKCRDRaYhuhlyd
-octFBADGOPbTppZsYBNRyeMyGAC0JJCigmQo/3x42kEfUjjduz2G0dxrlBMos8Na
-75qEx207bffsE0gDrWV8za0aYjziFK6tou6tmbp0XY9bdr2psciYTBbHB9P10uMo
-P0WKAW+yTSsiG+xizbfjXJ9b+gWZLYuSnvnKUMmsiCP5rqkOnQ==
-=JJM3
+iLMEAQEIAB0WIQQJzviPKcwaRErmunPRaYhuhlydoQUCXsWs5gAKCRDRaYhuhlyd
+oYF3A/4i5SXVwgamo8rgt/3LcKWD/XaHuJ1NY89ExgsASUeKqzkcItdq6xpJzRYh
+DiGtH1yvWR/3X9jl58FeIsOZ2xXWbRgBchUQKY8K2unSkDGQAEaNJONVZrxPb8lh
+J5fHZPp+NhHTrCi8+CW/l28cyozFZa6ggIS1jG2IiDGIH0yHGQ==
+=QO1S
 -----END PGP SIGNATURE-----