feature to be able to download plans

This commit is contained in:
Sendou 2019-07-24 18:14:29 +03:00
parent 6d66216cc3
commit 2baf3e2758
12 changed files with 34 additions and 19 deletions

View File

@ -1,13 +1,13 @@
{
"files": {
"main.js": "/static/js/main.8fcc73fa.chunk.js",
"main.js.map": "/static/js/main.8fcc73fa.chunk.js.map",
"main.js": "/static/js/main.192b03b6.chunk.js",
"main.js.map": "/static/js/main.192b03b6.chunk.js.map",
"runtime~main.js": "/static/js/runtime~main.a8a9905a.js",
"runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map",
"static/js/2.59a46b82.chunk.js": "/static/js/2.59a46b82.chunk.js",
"static/js/2.59a46b82.chunk.js.map": "/static/js/2.59a46b82.chunk.js.map",
"static/js/2.7a85428d.chunk.js": "/static/js/2.7a85428d.chunk.js",
"static/js/2.7a85428d.chunk.js.map": "/static/js/2.7a85428d.chunk.js.map",
"index.html": "/index.html",
"precache-manifest.99763fb56063bd37d0326b32ac23144e.js": "/precache-manifest.99763fb56063bd37d0326b32ac23144e.js",
"precache-manifest.7efce9120a84347a6129e5f10f1151eb.js": "/precache-manifest.7efce9120a84347a6129e5f10f1151eb.js",
"service-worker.js": "/service-worker.js",
"static/media/academy-sz-map.png": "/static/media/academy-sz-map.750d725a.png",
"static/media/ancho-v_games.png": "/static/media/ancho-v_games.07d5d0f6.png",

View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>sendou.ink</title></head><body style="background-color:#f2f7fd"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.59a46b82.chunk.js"></script><script src="/static/js/main.8fcc73fa.chunk.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>sendou.ink</title></head><body style="background-color:#f2f7fd"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.7a85428d.chunk.js"></script><script src="/static/js/main.192b03b6.chunk.js"></script></body></html>

View File

@ -1,15 +1,15 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "79c292ac74fae648ef8d043a28d98353",
"revision": "409f5ff80fea3642cec0e58712881ecf",
"url": "/index.html"
},
{
"revision": "78e7d50d7c98735926e0",
"url": "/static/js/2.59a46b82.chunk.js"
"revision": "ae2c56d4f915d5b1b1ad",
"url": "/static/js/2.7a85428d.chunk.js"
},
{
"revision": "8bec99e5038b32adb431",
"url": "/static/js/main.8fcc73fa.chunk.js"
"revision": "4c37bd3c5224af791a05",
"url": "/static/js/main.192b03b6.chunk.js"
},
{
"revision": "42ac5946195a7306e2a5",

View File

@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.0/workbox-sw.js");
importScripts(
"/precache-manifest.99763fb56063bd37d0326b32ac23144e.js"
"/precache-manifest.7efce9120a84347a6129e5f10f1151eb.js"
);
self.addEventListener('message', (event) => {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10,6 +10,9 @@ const HomePage = ({ setMenuSelection }) => {
<div style={{'textAlign': 'center'}}>
<Header as='h2'>Welcome to sendou.ink!<Header sub>Competitive Splatoon Hub</Header></Header>
</div>
<div style={{'paddingTop': '20px'}}>
<b><Link to='/plans'>Map planner</Link></b> - Draw on Splatoon 2 maps to show your teammates or anyone else what your plan is. Supports free drawing, shapes and inserting any weapon from the game on the canvas.
</div>
<div style={{'paddingTop': '20px'}}>
<b><Link to='/maps'>Maplists</Link></b> - Generate a maplist to use when scrimming.
You can choose the map pool to be used including monthly ranked maps or an upcoming event.

View File

@ -115,6 +115,17 @@ const MapPlanner = ({ setMenuSelection }) => {
}
}
const download = () => {
const dataUrl = sketch.toDataURL()
let a = document.createElement("a")
document.body.appendChild(a)
a.style = "display: none"
a.href = dataUrl
a.download = `${bg.replace('/static/media/', '').split('-')[0]} plans.png`
a.click()
window.URL.revokeObjectURL(dataUrl)
}
const onBgChange = (value) => {
setBg(value)
sketch.clear()
@ -126,7 +137,7 @@ const MapPlanner = ({ setMenuSelection }) => {
if (!sketch) return
setMenuSelection('plans')
document.title = 'Planner - sendou.ink'
sketch.setBackgroundFromDataUrl(academy)
sketch.setBackgroundFromDataUrl(reef)
}, [sketch, setMenuSelection])
return (
@ -159,6 +170,7 @@ const MapPlanner = ({ setMenuSelection }) => {
<Button icon disabled={!canUndo} onClick={() => undo()}><Icon name='undo' />Undo</Button>
<Button icon disabled={!canRedo} onClick={() => redo()}><Icon name='redo' />Redo</Button>
<Button icon disabled={tool !== Tools.Select} onClick={() => removeSelected()}><Icon name='trash' />Delete selected</Button>
<Button icon onClick={() => download()}><Icon name='download' />Download</Button>
</div>
<div style={{"paddingTop": "10px"}}>
<Grid columns={3}>