├── .glitch-assets ├── README.md ├── package.json ├── public ├── app.js ├── manifest.json ├── service-worker.js ├── simplecopy.min.js └── styles.css ├── server.js ├── shrinkwrap.yaml └── views └── index.html /.glitch-assets: -------------------------------------------------------------------------------- 1 | {"name":"drag-in-files.svg","date":"2016-10-22T16:17:49.954Z","url":"https://cdn.hyperdev.com/drag-in-files.svg","type":"image/svg","size":7646,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/drag-in-files.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(102, 153, 205)","uuid":"adSBq97hhhpFNUna"} 2 | {"name":"click-me.svg","date":"2016-10-23T16:17:49.954Z","url":"https://cdn.hyperdev.com/click-me.svg","type":"image/svg","size":7116,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/click-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(243, 185, 186)","uuid":"adSBq97hhhpFNUnb"} 3 | {"name":"paste-me.svg","date":"2016-10-24T16:17:49.954Z","url":"https://cdn.hyperdev.com/paste-me.svg","type":"image/svg","size":7242,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/paste-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(42, 179, 185)","uuid":"adSBq97hhhpFNUnc"} 4 | {"uuid":"adSBq97hhhpFNUna","deleted":true} 5 | {"name":"Wricked..png","date":"2018-05-01T19:17:23.885Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2FWricked..png","type":"image/png","size":286412,"imageWidth":1280,"imageHeight":720,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fthumbnails%2FWricked..png","thumbnailWidth":330,"thumbnailHeight":186,"dominantColor":"rgb(116,194,252)","uuid":"QsS757kLH7dgBave"} 6 | {"name":"Wricked. (1).png","date":"2018-05-02T15:53:38.159Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2FWricked.%20(1).png","type":"image/png","size":281747,"imageWidth":1280,"imageHeight":720,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fthumbnails%2FWricked.%20(1).png","thumbnailWidth":330,"thumbnailHeight":186,"dominantColor":"rgb(116,194,252)","uuid":"nRunuE1wcofNqWNi"} 7 | {"name":"d217e7cfb6f79f4baeb3a8ed67a76866.png","date":"2018-05-03T10:40:34.430Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fd217e7cfb6f79f4baeb3a8ed67a76866.png","type":"image/png","size":67416,"imageWidth":800,"imageHeight":800,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fthumbnails%2Fd217e7cfb6f79f4baeb3a8ed67a76866.png","thumbnailWidth":330,"thumbnailHeight":330,"dominantColor":null,"uuid":"el4fAZlv1kbTID0x"} 8 | {"name":"pencil_270f (1) (1).png","date":"2018-05-03T10:55:27.546Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fpencil_270f%20(1)%20(1).png","type":"image/png","size":6894,"imageWidth":192,"imageHeight":192,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fpencil_270f%20(1)%20(1).png","thumbnailWidth":192,"thumbnailHeight":192,"dominantColor":null,"uuid":"Qy5PLzvNWuXPwamH"} 9 | {"uuid":"QsS757kLH7dgBave","deleted":true} 10 | {"name":"Vh03t9n.gif","date":"2018-05-04T06:32:24.232Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2FVh03t9n.gif","type":"image/gif","size":4129866,"imageWidth":480,"imageHeight":300,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fthumbnails%2FVh03t9n.gif","thumbnailWidth":330,"thumbnailHeight":207,"dominantColor":"rgb(210,211,216)","uuid":"yruTZuNfACRG4bvX"} 11 | {"name":"2018-05-04 12.03.43.jpg","date":"2018-05-04T06:34:06.260Z","url":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2F2018-05-04%2012.03.43.jpg","type":"image/jpeg","size":118373,"imageWidth":1171,"imageHeight":672,"thumbnail":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fthumbnails%2F2018-05-04%2012.03.43.jpg","thumbnailWidth":330,"thumbnailHeight":190,"dominantColor":"rgb(156,156,164)","uuid":"ySDpKa3RmY1jWe0S"} 12 | {"uuid":"el4fAZlv1kbTID0x","deleted":true} 13 | {"uuid":"adSBq97hhhpFNUnb","deleted":true} 14 | {"uuid":"adSBq97hhhpFNUnc","deleted":true} 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Wrish ✏️ 2 | =================== 3 | ## A quick autosaving notepad 4 | 5 | As soon as you open wrish, it will generate a hash and store your content. You can visit the url with the same hash, or share it, and can return to editing from where you left off! 6 | 7 | Wrish also has a read only mode, which you can activate by pressing the `👀` button while editing. 8 | 9 | Utilizing a service worker, Wrish can be added to the homescreen in android phones to make it feel native too! 10 | 11 | ### [Demo](http://wrish.xyz) ⚡ 12 | 13 | ![Demo GIF](https://i.imgur.com/Vh03t9n.gif) 14 | 15 | ### Setup 16 | Just remix, and on `line 2` from `app.js`, paste in a link you get from [jsonstore.io](https://www.jsonstore.io) 17 | 18 | ### Uses 19 | - JSONstore - https://github.com/bluzi/jsonstore 20 | - QuillJS - https://github.com/quilljs/quill 21 | - Simplecopy - https://github.com/kyle-rb/simplecopy 22 | - Wing - https://github.com/kbrsh/wing 23 | 24 | [![Remix on Glitch](https://cdn.glitch.com/2703baf2-b643-4da7-ab91-7ee2a2d00b5b%2Fremix-button.svg)](https://glitch.com/edit/#!/remix/wrish) 25 | 26 | [![HitCount](https://hits.dwyl.com/jajoosam/wrish.svg)](https://github.com/jajoosam/wrish) 27 | 28 | 29 | If you liked Wrish, consider [buying me a coffee](https://www.buymeacoffee.com/jajoosam) to cover domain costs ☕ -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "//1": "describes your app and its dependencies", 3 | "//2": "https://docs.npmjs.com/files/package.json", 4 | "//3": "updating this file will download and update your packages", 5 | "name": "hello-express", 6 | "version": "0.0.1", 7 | "description": "Quick Autosaving Notepad", 8 | "main": "server.js", 9 | "scripts": { 10 | "start": "node server.js" 11 | }, 12 | "dependencies": { 13 | "express": "^4.16.3" 14 | }, 15 | "engines": { 16 | "node": "8.x" 17 | }, 18 | "repository": { 19 | "url": "https://glitch.com/edit/#!/hello-express" 20 | }, 21 | "license": "MIT", 22 | "keywords": [ 23 | "node", 24 | "glitch", 25 | "express" 26 | ] 27 | } -------------------------------------------------------------------------------- /public/app.js: -------------------------------------------------------------------------------- 1 | // Paste in your own link from jsonstore.io 2 | var root = "https://www.jsonstore.io/1b89b2eed054f2c1ca3dd67350837b6b5349a5da46bb8c7de60fb07a2e65d037"; 3 | $("#readonly").hover(function(){ 4 | this.innerHTML = "Read only" 5 | }, function(){ 6 | this.innerHTML = "👀" 7 | }); 8 | 9 | $("#copyonly").hover(function(){ 10 | this.innerHTML = "Copy link" 11 | }, function(){ 12 | this.innerHTML = "📋" 13 | }); 14 | 15 | $("#newonly").hover(function(){ 16 | this.innerHTML = "New Note" 17 | }, function(){ 18 | this.innerHTML = "➕" 19 | }); 20 | var placeholder = true; 21 | // Service Worker for add to homescreen 22 | if ('serviceWorker' in navigator) { 23 | console.log("Will the service worker register?"); 24 | navigator.serviceWorker.register('service-worker.js') 25 | .then(function(reg){ 26 | console.log("Yes, it did."); 27 | }).catch(function(err) { 28 | console.log("No it didn't. This happened: ", err) 29 | }); 30 | } 31 | 32 | 33 | function update(){ 34 | $.ajax({ 35 | 'url': root + "/" + window.location.hash.substr(1), 36 | 'type': 'POST', 37 | 'data': JSON.stringify(quill.getContents()), 38 | 'dataType': 'json', 39 | 'contentType': 'application/json; charset=utf-8' 40 | }) 41 | count = 0; 42 | console.log("saving...") 43 | } 44 | var count = 0; 45 | var first = true; 46 | function fin(){ 47 | if(first===true && placeholder===true){quill.setContents({"ops":[{"attributes":{"header":1},"insert":"\n"}]}); first = false;} 48 | if(count === 0){ 49 | 50 | setTimeout(update, 3000) 51 | count = 1 52 | } 53 | } 54 | if(window.location.hash == ""){ 55 | window.location.hash =Math.random().toString(32).substring(2, 5) + Math.random().toString(36).substring(2, 5); 56 | } 57 | var hashh = window.location.hash.substr(1) 58 | if(hashh.charAt(0) == "$"){ 59 | document.getElementsByTagName("button")[0].style.display = "none"; 60 | hashh = hashh.substr(1); 61 | hashh = hashh.split("").reverse().join(""); 62 | var quill = new Quill('#editor', { 63 | theme: 'snow', 64 | "modules": { 65 | "toolbar": false 66 | } 67 | }); 68 | quill.disable(); 69 | } 70 | else{ 71 | var quill = new Quill('#editor', { 72 | theme: 'snow' 73 | }); 74 | } 75 | $.getJSON(root + "/" + hashh, function(data){ 76 | data = data["result"]; 77 | 78 | if(data!=null){ 79 | quill.setContents(data) 80 | placeholder = false; 81 | } 82 | 83 | }) 84 | document.getElementsByTagName("button")[1]["data-cliboard-text"] = window.location.href; 85 | function readonly(){ 86 | window.location.hash = "$" + window.location.hash.substr(1).split("").reverse().join("") 87 | location.reload() 88 | } 89 | 90 | function copy(){ 91 | simplecopy(window.location.href); 92 | } 93 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Wrish", 3 | "name": "Wrish", 4 | "icons": [ 5 | { 6 | "src":"https://cdn.glitch.com/b266dcf8-f181-4238-b29c-954a054443cb%2Fpencil_270f%20(1)%20(1).png?1525344927546", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | } 10 | ], 11 | "start_url": "/?utm_source=homescreen", 12 | "background_color": "#000000", 13 | "Theme_color": "#f0f0f0", 14 | "display": "standalone" 15 | } -------------------------------------------------------------------------------- /public/service-worker.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jajoosam/wrish/c24e4b903460f2ca99774039b7cdc0735156c773/public/service-worker.js -------------------------------------------------------------------------------- /public/simplecopy.min.js: -------------------------------------------------------------------------------- 1 | var simplecopy=function(){var d=document,b,cs,ss,f=false,n=d.createElement("DIV"),s=n.style;s.position="fixed";s.color="rgba(0,0,0,0)";function sc(t){if(!b){b=d.body};n.innerHTML=t;b.appendChild(n);ss=x(n);cs=d.execCommand("copy",f,null);b.removeChild(n);return ss&&cs};function x(n){var r,s,w=window.getSelection,c=b.createTextRange;if(c){r=c();r.moveToElementText(n);r.select();return !f}else if(w){s=w();r=d.createRange();r.selectNodeContents(n);s.removeAllRanges();s.addRange(r);return !f}else {return f}}return sc}(); -------------------------------------------------------------------------------- /public/styles.css: -------------------------------------------------------------------------------- 1 | #editor{ 2 | margin:auto; 3 | } 4 | .ql-toolbar{ 5 | text-align:center; 6 | } 7 | 8 | /* Tooltip container */ 9 | .tooltip { 10 | position: relative; 11 | display: inline-block; 12 | border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ 13 | } 14 | 15 | /* Tooltip text */ 16 | .tooltip .tooltiptext { 17 | visibility: hidden; 18 | width: 120px; 19 | background-color: #555; 20 | color: #fff; 21 | text-align: center; 22 | padding: 5px 0; 23 | border-radius: 6px; 24 | 25 | /* Position the tooltip text */ 26 | position: absolute; 27 | z-index: 1; 28 | bottom: 125%; 29 | left: 50%; 30 | margin-left: -60px; 31 | 32 | /* Fade in tooltip */ 33 | opacity: 0; 34 | transition: opacity 0.3s; 35 | } 36 | 37 | /* Tooltip arrow */ 38 | .tooltip .tooltiptext::after { 39 | content: ""; 40 | position: absolute; 41 | top: 100%; 42 | left: 50%; 43 | margin-left: -5px; 44 | border-width: 5px; 45 | border-style: solid; 46 | border-color: #555 transparent transparent transparent; 47 | } 48 | 49 | /* Show the tooltip text when you mouse over the tooltip container */ 50 | .tooltip:hover .tooltiptext { 51 | visibility: visible; 52 | opacity: 1; 53 | } -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | // server.js 2 | // where your node app starts 3 | 4 | // init project 5 | var express = require('express'); 6 | var app = express(); 7 | 8 | // we've started you off with Express, 9 | // but feel free to use whatever libs or frameworks you'd like through `package.json`. 10 | 11 | // http://expressjs.com/en/starter/static-files.html 12 | app.use(express.static('public')); 13 | 14 | // http://expressjs.com/en/starter/basic-routing.html 15 | app.get("/", function (request, response) { 16 | response.sendFile(__dirname + '/views/index.html'); 17 | }); 18 | 19 | app.post("/add", function (req,res) { 20 | 21 | }); 22 | 23 | // listen for requests :) 24 | var listener = app.listen(process.env.PORT, function () { 25 | console.log('Your app is listening on port ' + listener.address().port); 26 | }); 27 | -------------------------------------------------------------------------------- /shrinkwrap.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | express: 4.16.3 3 | packages: 4 | /accepts/1.3.5: 5 | dependencies: 6 | mime-types: 2.1.18 7 | negotiator: 0.6.1 8 | dev: false 9 | engines: 10 | node: '>= 0.6' 11 | resolution: 12 | integrity: sha1-63d99gEXI6OxTopywIBcjoZ0a9I= 13 | /array-flatten/1.1.1: 14 | dev: false 15 | resolution: 16 | integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 17 | /body-parser/1.18.2: 18 | dependencies: 19 | bytes: 3.0.0 20 | content-type: 1.0.4 21 | debug: 2.6.9 22 | depd: 1.1.2 23 | http-errors: 1.6.2 24 | iconv-lite: 0.4.19 25 | on-finished: 2.3.0 26 | qs: 6.5.1 27 | raw-body: 2.3.2 28 | type-is: 1.6.16 29 | dev: false 30 | engines: 31 | node: '>= 0.8' 32 | resolution: 33 | integrity: sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ= 34 | /bytes/3.0.0: 35 | dev: false 36 | engines: 37 | node: '>= 0.8' 38 | resolution: 39 | integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= 40 | /content-disposition/0.5.2: 41 | dev: false 42 | engines: 43 | node: '>= 0.6' 44 | resolution: 45 | integrity: sha1-DPaLud318r55YcOoUXjLhdunjLQ= 46 | /content-type/1.0.4: 47 | dev: false 48 | engines: 49 | node: '>= 0.6' 50 | resolution: 51 | integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 52 | /cookie-signature/1.0.6: 53 | dev: false 54 | resolution: 55 | integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 56 | /cookie/0.3.1: 57 | dev: false 58 | engines: 59 | node: '>= 0.6' 60 | resolution: 61 | integrity: sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= 62 | /debug/2.6.9: 63 | dependencies: 64 | ms: 2.0.0 65 | dev: false 66 | resolution: 67 | integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 68 | /depd/1.1.1: 69 | dev: false 70 | engines: 71 | node: '>= 0.6' 72 | resolution: 73 | integrity: sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= 74 | /depd/1.1.2: 75 | dev: false 76 | engines: 77 | node: '>= 0.6' 78 | resolution: 79 | integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 80 | /destroy/1.0.4: 81 | dev: false 82 | resolution: 83 | integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 84 | /ee-first/1.1.1: 85 | dev: false 86 | resolution: 87 | integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 88 | /encodeurl/1.0.2: 89 | dev: false 90 | engines: 91 | node: '>= 0.8' 92 | resolution: 93 | integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 94 | /escape-html/1.0.3: 95 | dev: false 96 | resolution: 97 | integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 98 | /etag/1.8.1: 99 | dev: false 100 | engines: 101 | node: '>= 0.6' 102 | resolution: 103 | integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 104 | /express/4.16.3: 105 | dependencies: 106 | accepts: 1.3.5 107 | array-flatten: 1.1.1 108 | body-parser: 1.18.2 109 | content-disposition: 0.5.2 110 | content-type: 1.0.4 111 | cookie: 0.3.1 112 | cookie-signature: 1.0.6 113 | debug: 2.6.9 114 | depd: 1.1.2 115 | encodeurl: 1.0.2 116 | escape-html: 1.0.3 117 | etag: 1.8.1 118 | finalhandler: 1.1.1 119 | fresh: 0.5.2 120 | merge-descriptors: 1.0.1 121 | methods: 1.1.2 122 | on-finished: 2.3.0 123 | parseurl: 1.3.2 124 | path-to-regexp: 0.1.7 125 | proxy-addr: 2.0.3 126 | qs: 6.5.1 127 | range-parser: 1.2.0 128 | safe-buffer: 5.1.1 129 | send: 0.16.2 130 | serve-static: 1.13.2 131 | setprototypeof: 1.1.0 132 | statuses: 1.4.0 133 | type-is: 1.6.16 134 | utils-merge: 1.0.1 135 | vary: 1.1.2 136 | dev: false 137 | engines: 138 | node: '>= 0.10.0' 139 | resolution: 140 | integrity: sha1-avilAjUNsyRuzEvs9rWjTSL37VM= 141 | /finalhandler/1.1.1: 142 | dependencies: 143 | debug: 2.6.9 144 | encodeurl: 1.0.2 145 | escape-html: 1.0.3 146 | on-finished: 2.3.0 147 | parseurl: 1.3.2 148 | statuses: 1.4.0 149 | unpipe: 1.0.0 150 | dev: false 151 | engines: 152 | node: '>= 0.8' 153 | resolution: 154 | integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== 155 | /forwarded/0.1.2: 156 | dev: false 157 | engines: 158 | node: '>= 0.6' 159 | resolution: 160 | integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 161 | /fresh/0.5.2: 162 | dev: false 163 | engines: 164 | node: '>= 0.6' 165 | resolution: 166 | integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 167 | /http-errors/1.6.2: 168 | dependencies: 169 | depd: 1.1.1 170 | inherits: 2.0.3 171 | setprototypeof: 1.0.3 172 | statuses: 1.4.0 173 | dev: false 174 | engines: 175 | node: '>= 0.6' 176 | resolution: 177 | integrity: sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= 178 | /iconv-lite/0.4.19: 179 | dev: false 180 | engines: 181 | node: '>=0.10.0' 182 | resolution: 183 | integrity: sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== 184 | /inherits/2.0.3: 185 | dev: false 186 | resolution: 187 | integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 188 | /ipaddr.js/1.6.0: 189 | dev: false 190 | engines: 191 | node: '>= 0.10' 192 | resolution: 193 | integrity: sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs= 194 | /media-typer/0.3.0: 195 | dev: false 196 | engines: 197 | node: '>= 0.6' 198 | resolution: 199 | integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 200 | /merge-descriptors/1.0.1: 201 | dev: false 202 | resolution: 203 | integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 204 | /methods/1.1.2: 205 | dev: false 206 | engines: 207 | node: '>= 0.6' 208 | resolution: 209 | integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 210 | /mime-db/1.33.0: 211 | dev: false 212 | engines: 213 | node: '>= 0.6' 214 | resolution: 215 | integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== 216 | /mime-types/2.1.18: 217 | dependencies: 218 | mime-db: 1.33.0 219 | dev: false 220 | engines: 221 | node: '>= 0.6' 222 | resolution: 223 | integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== 224 | /mime/1.4.1: 225 | dev: false 226 | resolution: 227 | integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== 228 | /ms/2.0.0: 229 | dev: false 230 | resolution: 231 | integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 232 | /negotiator/0.6.1: 233 | dev: false 234 | engines: 235 | node: '>= 0.6' 236 | resolution: 237 | integrity: sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= 238 | /on-finished/2.3.0: 239 | dependencies: 240 | ee-first: 1.1.1 241 | dev: false 242 | engines: 243 | node: '>= 0.8' 244 | resolution: 245 | integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 246 | /parseurl/1.3.2: 247 | dev: false 248 | engines: 249 | node: '>= 0.8' 250 | resolution: 251 | integrity: sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= 252 | /path-to-regexp/0.1.7: 253 | dev: false 254 | resolution: 255 | integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 256 | /proxy-addr/2.0.3: 257 | dependencies: 258 | forwarded: 0.1.2 259 | ipaddr.js: 1.6.0 260 | dev: false 261 | engines: 262 | node: '>= 0.10' 263 | resolution: 264 | integrity: sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ== 265 | /qs/6.5.1: 266 | dev: false 267 | engines: 268 | node: '>=0.6' 269 | resolution: 270 | integrity: sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A== 271 | /range-parser/1.2.0: 272 | dev: false 273 | engines: 274 | node: '>= 0.6' 275 | resolution: 276 | integrity: sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= 277 | /raw-body/2.3.2: 278 | dependencies: 279 | bytes: 3.0.0 280 | http-errors: 1.6.2 281 | iconv-lite: 0.4.19 282 | unpipe: 1.0.0 283 | dev: false 284 | engines: 285 | node: '>= 0.8' 286 | resolution: 287 | integrity: sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k= 288 | /safe-buffer/5.1.1: 289 | dev: false 290 | resolution: 291 | integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== 292 | /send/0.16.2: 293 | dependencies: 294 | debug: 2.6.9 295 | depd: 1.1.2 296 | destroy: 1.0.4 297 | encodeurl: 1.0.2 298 | escape-html: 1.0.3 299 | etag: 1.8.1 300 | fresh: 0.5.2 301 | http-errors: 1.6.2 302 | mime: 1.4.1 303 | ms: 2.0.0 304 | on-finished: 2.3.0 305 | range-parser: 1.2.0 306 | statuses: 1.4.0 307 | dev: false 308 | engines: 309 | node: '>= 0.8.0' 310 | resolution: 311 | integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== 312 | /serve-static/1.13.2: 313 | dependencies: 314 | encodeurl: 1.0.2 315 | escape-html: 1.0.3 316 | parseurl: 1.3.2 317 | send: 0.16.2 318 | dev: false 319 | engines: 320 | node: '>= 0.8.0' 321 | resolution: 322 | integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== 323 | /setprototypeof/1.0.3: 324 | dev: false 325 | resolution: 326 | integrity: sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= 327 | /setprototypeof/1.1.0: 328 | dev: false 329 | resolution: 330 | integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== 331 | /statuses/1.4.0: 332 | dev: false 333 | engines: 334 | node: '>= 0.6' 335 | resolution: 336 | integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== 337 | /type-is/1.6.16: 338 | dependencies: 339 | media-typer: 0.3.0 340 | mime-types: 2.1.18 341 | dev: false 342 | engines: 343 | node: '>= 0.6' 344 | resolution: 345 | integrity: sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== 346 | /unpipe/1.0.0: 347 | dev: false 348 | engines: 349 | node: '>= 0.8' 350 | resolution: 351 | integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 352 | /utils-merge/1.0.1: 353 | dev: false 354 | engines: 355 | node: '>= 0.4.0' 356 | resolution: 357 | integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 358 | /vary/1.1.2: 359 | dev: false 360 | engines: 361 | node: '>= 0.8' 362 | resolution: 363 | integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 364 | registry: 'https://registry.npmjs.org/' 365 | shrinkwrapMinorVersion: 5 366 | shrinkwrapVersion: 3 367 | specifiers: 368 | express: ^4.16.3 369 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Wrish 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | 50 | 51 | 52 | 55 | 58 | 59 |
60 | 61 |
62 | 63 |
64 |

Wrish 📝


This is a notepad that saves your words to the internet every 3 seconds 🌐

You can share this link with anyone using the 📋 button.

Use 👀 for a read only version. 65 |


66 |


67 |
68 | 69 |
70 |
71 | 72 | 73 | 74 | 75 | 76 | 77 | 84 | 85 | 86 | --------------------------------------------------------------------------------