├── .gitignore ├── LICENSE ├── README.md ├── insomnia.js ├── package-lock.json ├── package.json ├── useVueInsomnia.js └── vueInsomniaPlugin.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | 63 | .idea/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Mike Hamilton 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-insomnia 2 | 3 | Prevents the display of a mobile device from going to sleep by playing a small (6kb) mp4 video that's positioned off screen on a loop. 4 | 5 | ## Installation 6 | 7 | Import into your project using npm or yarn. 8 | 9 | `yarn add vue-insomnia` or `npm install --save vue-insomnia` 10 | 11 | 12 | 13 | ## Vue 3.x 14 | 15 | ### Usage 16 | 17 | ````vue 18 | 22 | 23 | 26 | ```` 27 | 28 | ## Vue 2.x 29 | 30 | In your main.js (or equivalent) import and then use vue-insomnia. 31 | 32 | ``` 33 | import vueInsomnia from "vue-insomnia"; 34 | 35 | Vue.use(vueInsomnia); 36 | ``` 37 | 38 | ### Usage 39 | 40 | There are two methods globally available, vueInsomnia().on() and vueInsomnia().off(), to toggle screen wake lock on and off, respectively. For example, to turn on the wake lock when a component is loaded: 41 | 42 | ``` 43 | mounted: { 44 | this.vueInsomnia().on(); 45 | } 46 | ``` 47 | 48 | or to use in a component template: 49 | 50 | Add a method 51 | 52 | ``` 53 | methods: { 54 | wakeLockOn() { 55 | this.vueInsomnia().on(); 56 | }, 57 | wakeLockOff() { 58 | this.vueInsomnia().off(); 59 | } 60 | } 61 | ``` 62 | 63 | and then use the method: 64 | 65 | ``` 66 | 67 | ``` 68 | -------------------------------------------------------------------------------- /insomnia.js: -------------------------------------------------------------------------------- 1 | export const playbackVideoSourceBase64 = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQAD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" 2 | 3 | export const generatePlayer = () => { 4 | const vueInsomnia = document.createElement("video"); 5 | vueInsomnia.setAttribute("id", "vue-insomnia"); 6 | vueInsomnia.setAttribute( 7 | "style", 8 | "position: absolute; top: -10px; left: -10px;" 9 | ); 10 | vueInsomnia.setAttribute("loop", ""); 11 | vueInsomnia.setAttribute("playsinline", ""); 12 | vueInsomnia.setAttribute("height", "10"); 13 | vueInsomnia.setAttribute("width", "10"); 14 | document.body.appendChild(vueInsomnia); 15 | 16 | // Create the source element (child of video el) with the source of the mp4 17 | const vueInsomniaSource = document.createElement("source"); 18 | vueInsomniaSource.setAttribute("type", "video/mp4"); 19 | vueInsomniaSource.setAttribute( 20 | "src", 21 | playbackVideoSourceBase64 22 | ); 23 | document.getElementById("vue-insomnia").appendChild(vueInsomniaSource); 24 | 25 | return vueInsomnia; 26 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-insomnia", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vue-insomnia", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "vue": "^3.2.37" 13 | } 14 | }, 15 | "node_modules/@babel/parser": { 16 | "version": "7.18.9", 17 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", 18 | "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", 19 | "bin": { 20 | "parser": "bin/babel-parser.js" 21 | }, 22 | "engines": { 23 | "node": ">=6.0.0" 24 | } 25 | }, 26 | "node_modules/@vue/compiler-core": { 27 | "version": "3.2.37", 28 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", 29 | "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", 30 | "dependencies": { 31 | "@babel/parser": "^7.16.4", 32 | "@vue/shared": "3.2.37", 33 | "estree-walker": "^2.0.2", 34 | "source-map": "^0.6.1" 35 | } 36 | }, 37 | "node_modules/@vue/compiler-dom": { 38 | "version": "3.2.37", 39 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", 40 | "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", 41 | "dependencies": { 42 | "@vue/compiler-core": "3.2.37", 43 | "@vue/shared": "3.2.37" 44 | } 45 | }, 46 | "node_modules/@vue/compiler-sfc": { 47 | "version": "3.2.37", 48 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", 49 | "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", 50 | "dependencies": { 51 | "@babel/parser": "^7.16.4", 52 | "@vue/compiler-core": "3.2.37", 53 | "@vue/compiler-dom": "3.2.37", 54 | "@vue/compiler-ssr": "3.2.37", 55 | "@vue/reactivity-transform": "3.2.37", 56 | "@vue/shared": "3.2.37", 57 | "estree-walker": "^2.0.2", 58 | "magic-string": "^0.25.7", 59 | "postcss": "^8.1.10", 60 | "source-map": "^0.6.1" 61 | } 62 | }, 63 | "node_modules/@vue/compiler-ssr": { 64 | "version": "3.2.37", 65 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", 66 | "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", 67 | "dependencies": { 68 | "@vue/compiler-dom": "3.2.37", 69 | "@vue/shared": "3.2.37" 70 | } 71 | }, 72 | "node_modules/@vue/reactivity": { 73 | "version": "3.2.37", 74 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", 75 | "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", 76 | "dependencies": { 77 | "@vue/shared": "3.2.37" 78 | } 79 | }, 80 | "node_modules/@vue/reactivity-transform": { 81 | "version": "3.2.37", 82 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", 83 | "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", 84 | "dependencies": { 85 | "@babel/parser": "^7.16.4", 86 | "@vue/compiler-core": "3.2.37", 87 | "@vue/shared": "3.2.37", 88 | "estree-walker": "^2.0.2", 89 | "magic-string": "^0.25.7" 90 | } 91 | }, 92 | "node_modules/@vue/runtime-core": { 93 | "version": "3.2.37", 94 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", 95 | "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", 96 | "dependencies": { 97 | "@vue/reactivity": "3.2.37", 98 | "@vue/shared": "3.2.37" 99 | } 100 | }, 101 | "node_modules/@vue/runtime-dom": { 102 | "version": "3.2.37", 103 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", 104 | "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", 105 | "dependencies": { 106 | "@vue/runtime-core": "3.2.37", 107 | "@vue/shared": "3.2.37", 108 | "csstype": "^2.6.8" 109 | } 110 | }, 111 | "node_modules/@vue/server-renderer": { 112 | "version": "3.2.37", 113 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", 114 | "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", 115 | "dependencies": { 116 | "@vue/compiler-ssr": "3.2.37", 117 | "@vue/shared": "3.2.37" 118 | }, 119 | "peerDependencies": { 120 | "vue": "3.2.37" 121 | } 122 | }, 123 | "node_modules/@vue/shared": { 124 | "version": "3.2.37", 125 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", 126 | "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" 127 | }, 128 | "node_modules/csstype": { 129 | "version": "2.6.20", 130 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", 131 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" 132 | }, 133 | "node_modules/estree-walker": { 134 | "version": "2.0.2", 135 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 136 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 137 | }, 138 | "node_modules/magic-string": { 139 | "version": "0.25.9", 140 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 141 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 142 | "dependencies": { 143 | "sourcemap-codec": "^1.4.8" 144 | } 145 | }, 146 | "node_modules/nanoid": { 147 | "version": "3.3.4", 148 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 149 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 150 | "bin": { 151 | "nanoid": "bin/nanoid.cjs" 152 | }, 153 | "engines": { 154 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 155 | } 156 | }, 157 | "node_modules/picocolors": { 158 | "version": "1.0.0", 159 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 160 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 161 | }, 162 | "node_modules/postcss": { 163 | "version": "8.4.14", 164 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 165 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 166 | "funding": [ 167 | { 168 | "type": "opencollective", 169 | "url": "https://opencollective.com/postcss/" 170 | }, 171 | { 172 | "type": "tidelift", 173 | "url": "https://tidelift.com/funding/github/npm/postcss" 174 | } 175 | ], 176 | "dependencies": { 177 | "nanoid": "^3.3.4", 178 | "picocolors": "^1.0.0", 179 | "source-map-js": "^1.0.2" 180 | }, 181 | "engines": { 182 | "node": "^10 || ^12 || >=14" 183 | } 184 | }, 185 | "node_modules/source-map": { 186 | "version": "0.6.1", 187 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 188 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 189 | "engines": { 190 | "node": ">=0.10.0" 191 | } 192 | }, 193 | "node_modules/source-map-js": { 194 | "version": "1.0.2", 195 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 196 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 197 | "engines": { 198 | "node": ">=0.10.0" 199 | } 200 | }, 201 | "node_modules/sourcemap-codec": { 202 | "version": "1.4.8", 203 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 204 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 205 | }, 206 | "node_modules/vue": { 207 | "version": "3.2.37", 208 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", 209 | "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", 210 | "dependencies": { 211 | "@vue/compiler-dom": "3.2.37", 212 | "@vue/compiler-sfc": "3.2.37", 213 | "@vue/runtime-dom": "3.2.37", 214 | "@vue/server-renderer": "3.2.37", 215 | "@vue/shared": "3.2.37" 216 | } 217 | } 218 | }, 219 | "dependencies": { 220 | "@babel/parser": { 221 | "version": "7.18.9", 222 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", 223 | "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==" 224 | }, 225 | "@vue/compiler-core": { 226 | "version": "3.2.37", 227 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", 228 | "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", 229 | "requires": { 230 | "@babel/parser": "^7.16.4", 231 | "@vue/shared": "3.2.37", 232 | "estree-walker": "^2.0.2", 233 | "source-map": "^0.6.1" 234 | } 235 | }, 236 | "@vue/compiler-dom": { 237 | "version": "3.2.37", 238 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", 239 | "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", 240 | "requires": { 241 | "@vue/compiler-core": "3.2.37", 242 | "@vue/shared": "3.2.37" 243 | } 244 | }, 245 | "@vue/compiler-sfc": { 246 | "version": "3.2.37", 247 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", 248 | "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", 249 | "requires": { 250 | "@babel/parser": "^7.16.4", 251 | "@vue/compiler-core": "3.2.37", 252 | "@vue/compiler-dom": "3.2.37", 253 | "@vue/compiler-ssr": "3.2.37", 254 | "@vue/reactivity-transform": "3.2.37", 255 | "@vue/shared": "3.2.37", 256 | "estree-walker": "^2.0.2", 257 | "magic-string": "^0.25.7", 258 | "postcss": "^8.1.10", 259 | "source-map": "^0.6.1" 260 | } 261 | }, 262 | "@vue/compiler-ssr": { 263 | "version": "3.2.37", 264 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", 265 | "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", 266 | "requires": { 267 | "@vue/compiler-dom": "3.2.37", 268 | "@vue/shared": "3.2.37" 269 | } 270 | }, 271 | "@vue/reactivity": { 272 | "version": "3.2.37", 273 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", 274 | "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", 275 | "requires": { 276 | "@vue/shared": "3.2.37" 277 | } 278 | }, 279 | "@vue/reactivity-transform": { 280 | "version": "3.2.37", 281 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", 282 | "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", 283 | "requires": { 284 | "@babel/parser": "^7.16.4", 285 | "@vue/compiler-core": "3.2.37", 286 | "@vue/shared": "3.2.37", 287 | "estree-walker": "^2.0.2", 288 | "magic-string": "^0.25.7" 289 | } 290 | }, 291 | "@vue/runtime-core": { 292 | "version": "3.2.37", 293 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", 294 | "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", 295 | "requires": { 296 | "@vue/reactivity": "3.2.37", 297 | "@vue/shared": "3.2.37" 298 | } 299 | }, 300 | "@vue/runtime-dom": { 301 | "version": "3.2.37", 302 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", 303 | "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", 304 | "requires": { 305 | "@vue/runtime-core": "3.2.37", 306 | "@vue/shared": "3.2.37", 307 | "csstype": "^2.6.8" 308 | } 309 | }, 310 | "@vue/server-renderer": { 311 | "version": "3.2.37", 312 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", 313 | "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", 314 | "requires": { 315 | "@vue/compiler-ssr": "3.2.37", 316 | "@vue/shared": "3.2.37" 317 | } 318 | }, 319 | "@vue/shared": { 320 | "version": "3.2.37", 321 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", 322 | "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" 323 | }, 324 | "csstype": { 325 | "version": "2.6.20", 326 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", 327 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" 328 | }, 329 | "estree-walker": { 330 | "version": "2.0.2", 331 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 332 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 333 | }, 334 | "magic-string": { 335 | "version": "0.25.9", 336 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 337 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 338 | "requires": { 339 | "sourcemap-codec": "^1.4.8" 340 | } 341 | }, 342 | "nanoid": { 343 | "version": "3.3.4", 344 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 345 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" 346 | }, 347 | "picocolors": { 348 | "version": "1.0.0", 349 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 350 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 351 | }, 352 | "postcss": { 353 | "version": "8.4.14", 354 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 355 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 356 | "requires": { 357 | "nanoid": "^3.3.4", 358 | "picocolors": "^1.0.0", 359 | "source-map-js": "^1.0.2" 360 | } 361 | }, 362 | "source-map": { 363 | "version": "0.6.1", 364 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 365 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 366 | }, 367 | "source-map-js": { 368 | "version": "1.0.2", 369 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 370 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 371 | }, 372 | "sourcemap-codec": { 373 | "version": "1.4.8", 374 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 375 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 376 | }, 377 | "vue": { 378 | "version": "3.2.37", 379 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", 380 | "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", 381 | "requires": { 382 | "@vue/compiler-dom": "3.2.37", 383 | "@vue/compiler-sfc": "3.2.37", 384 | "@vue/runtime-dom": "3.2.37", 385 | "@vue/server-renderer": "3.2.37", 386 | "@vue/shared": "3.2.37" 387 | } 388 | } 389 | } 390 | } 391 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-insomnia", 3 | "version": "0.1.0", 4 | "description": "A vue plugin that prevents display sleep.", 5 | "main": "useVueInsomnia.js", 6 | "repository": "https://github.com/gorbypark/vue-insomnia.git", 7 | "author": "Mike Hamilton ", 8 | "license": "MIT", 9 | "devDependencies": { 10 | "vue": "^3.2.37" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /useVueInsomnia.js: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue'; 2 | import { generatePlayer } from './insomnia'; 3 | 4 | const insomnia = ref(generatePlayer()); 5 | 6 | const actions = { 7 | enableVueInsomnia: () => insomnia.play(), 8 | disableVueInsomnia: () => insomnia.pause(), 9 | } 10 | 11 | export const useVueInsomnia = () => ({ 12 | ...actions 13 | }); -------------------------------------------------------------------------------- /vueInsomniaPlugin.js: -------------------------------------------------------------------------------- 1 | import { generatePlayer } from './insomnia'; 2 | 3 | const VueInsomnia = { 4 | install(Vue) { 5 | // Create the video element with all it's attributes 6 | const vueInsomnia = generatePlayer(); 7 | 8 | // Register the vueInsomnia method in all components 9 | Vue.mixin({ 10 | methods: { 11 | vueInsomnia() { 12 | return { 13 | on() { 14 | vueInsomnia.play(); 15 | }, 16 | off() { 17 | vueInsomnia.pause(); 18 | } 19 | }; 20 | } 21 | } 22 | }); 23 | } 24 | }; 25 | 26 | export default VueInsomnia; --------------------------------------------------------------------------------