platypush/platypush/backend/http/webapp/dist/static/js/chunk-74fb6755.ac3b8fd6.js.map

1 line
17 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/components/panels/Camera/Index.vue?d42c","webpack:///./src/components/panels/Camera/Index.vue","webpack:///./src/components/panels/Camera/Mixin.vue","webpack:///./src/components/panels/Camera/Mixin.vue?d2bd","webpack:///./src/components/panels/Camera/Index.vue?f8b3"],"names":["class","ref","autoplay","preload","streaming","capturing","captured","src","url","alt","type","stopStreaming","disabled","title","startStreaming","capture","audioOn","stopAudio","startAudio","$refs","paramsModal","show","Date","getTime","length","name","value","fullURL","attrs","device","onDeviceChanged","resolution","onSizeChanged","horizontal_flip","onFlipChanged","vertical_flip","rotate","scale_x","scale_y","fps","onFpsChanged","grayscale","onGrayscaleChanged","mixins","Utils","props","cameraPlugin","String","required","data","computed","params","this","parseInt","parseFloat","methods","getUrl","plugin","action","Object","entries","filter","entry","map","k","v","join","_startStreaming","stream_format","_capture","onFrameLoaded","degToRad","deg","Math","PI","rot","frameContainer","style","width","round","abs","cos","sin","height","request","created","config","$root","mounted","frame","addEventListener","$watch","components","Modal","window","location","protocol","host","render"],"mappings":"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","file":"static/js/chunk-74fb6755.ac3b8fd6.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=bfa8f2aa&lang=scss\"","<template>\n <div class=\"camera\">\n <div class=\"camera-container\">\n <div class=\"frame-container\" ref=\"frameContainer\">\n <div class=\"no-frame\" v-if=\"!streaming && !capturing && !captured\">The camera is not active</div>\n <img class=\"frame\" :src=\"url\" ref=\"frame\" alt=\"\">\n </div>\n\n <div class=\"controls\">\n <div class=\"left\">\n <button type=\"button\" @click=\"startStreaming\" :disabled=\"capturing\" title=\"Start video\" v-if=\"!streaming\">\n <i class=\"fa fa-play\" />\n </button>\n\n <button type=\"button\" @click=\"stopStreaming\" :disabled=\"capturing\" title=\"Stop video\" v-else>\n <i class=\"fa fa-stop\" />\n </button>\n\n <button type=\"button\" @click=\"capture\" :disabled=\"streaming || capturing\" v-if=\"!streaming\"\n title=\"Take a picture\">\n <i class=\"fas fa-camera\" />\n </button>\n </div>\n\n <div class=\"right\">\n <button type=\"button\" @click=\"startAudio\" title=\"Start audio\" v-if=\"!audioOn\">\n <i class=\"fas fa-volume-mute\" />\n </button>\n\n <button type=\"button\" @click=\"stopAudio\" title=\"Stop audio\" v-else>\n <i class=\"fas fa-volume-up\" />\n </button>\n\n <button type=\"button\" @click=\"$refs.paramsModal.show()\" title=\"Settings\">\n <i class=\"fas fa-cog\" />\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"audio-container\">\n <audio autoplay preload=\"none\" ref=\"player\" v-if=\"audioOn\">\n <!--suppress HtmlUnknownTarget -->\n <source :src=\"`/sound/stream?t=${(new Date()).getTime()}`\" type=\"audio/x-wav;codec=pcm\">\n Your browser does not support audio elements\n </audio>\n </div>\n\n <div class=\"url\" v-if=\"url?.length\">\n <label class=\"row\">\n <span class=\"name\">Stream URL</span>\n <input name=\"url\" type=\"text\" :value=\"fullURL\" disabled=\"disabled\"/>\n </label>\n </div>\n\n <Modal ref=\"paramsModal\" title=\"Camera Parameters\">\n <div class=\"params\">\n <label class=\"row\">\n <span class=\"name\">Device</span>\n <input name=\"device\" type=\"text\" v-model=\"attrs.device\" @change=\"onDeviceChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Width</span>\n <input name=\"width\" type=\"text\" v-model=\"attrs.resolution[0]\" @change=\"onSizeChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Height</span>\n <input name=\"height\" type=\"text\" v-model=\"attrs.resolution[1]\" @change=\"onSizeChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Horizontal Flip</span>\n <input name=\"horizontal_flip\" type=\"checkbox\" v-model=\"attrs.horizontal_flip\" @change=\"onFlipChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Vertical Flip</span>\n <input name=\"vertical_flip\" type=\"checkbox\" v-model=\"attrs.vertical_flip\" @change=\"onFlipChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Rotate</span>\n <input name=\"rotate\" type=\"text\" v-model=\"attrs.rotate\" @change=\"onSizeChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Scale-X</span>\n <input name=\"scale_x\" type=\"text\" v-model=\"attrs.scale_x\" @change=\"onSizeChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Scale-Y</span>\n <input name=\"scale_y\" type=\"text\" v-model=\"attrs.scale_y\" @change=\"onSizeChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Frames per second</span>\n <input name=\"fps\" type=\"text\" v-model=\"attrs.fps\" @change=\"onFpsChanged\"/>\n </label>\n\n <label class=\"row\">\n <span class=\"name\">Grayscale</span>\n <input name=\"grayscale\" type=\"checkbox\" v-model=\"attrs.grayscale\" @change=\"onGrayscaleChanged\"/>\n </label>\n\n <Slot />\n </div>\n </Modal>\n </div>\n</template>\n\n<script>\nimport CameraMixin from \"@/components/panels/Camera/Mixin\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"Camera\",\n components: {Modal},\n mixins: [CameraMixin],\n props: {\n cameraPlugin: {\n type: String,\n required: true,\n },\n },\n\n computed: {\n fullURL() {\n return `${window.location.protocol}//${window.location.host}${this.url}`\n },\n },\n\n methods: {\n startStreaming() {\n this._startStreaming(this.cameraPlugin)\n },\n\n capture() {\n this._capture(this.cameraPlugin)\n },\n },\n}\n</script>\n\n<style lang=\"scss\">\n@import \"common\";\n</style>\n","<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"CameraMixin\",\n mixins: [Utils],\n\n props: {\n cameraPlugin: {\n type: String,\n required: true,\n },\n },\n\n data() {\n return {\n streaming: false,\n capturing: false,\n captured: false,\n audioOn: false,\n url: null,\n attrs: {},\n }\n },\n\n computed: {\n params() {\n return {\n resolution: this.attrs.resolution,\n device: this.attrs.device?.length ? this.attrs.device : null,\n horizontal_flip: parseInt(0 + this.attrs.horizontal_flip),\n vertical_flip: parseInt(0 + this.attrs.vertical_flip),\n rotate: parseFloat(this.attrs.rotate),\n scale_x: parseFloat(this.attrs.scale_x),\n scale_y: parseFloat(this.attrs.scale_y),\n fps: parseFloat(this.attrs.fps),\n grayscale: parseInt(0 + this.attrs.grayscale),\n }\n },\n },\n\n methods: {\n getUrl(plugin, action) {\n return '/camera/' + plugin + '/' + action + '?' +\n Object.entries(this.params).filter((entry) => entry[1] != null && ('' + entry[1]).length > 0)\n .map(([k, v]) => k + '=' + v).join('&')\n },\n\n _startStreaming(plugin) {\n if (this.streaming)\n return\n\n this.streaming = true\n this.capturing = false\n this.captured = false\n this.url = this.getUrl(plugin, 'video.' + this.attrs.stream_format)\n },\n\n stopStreaming() {\n if (!this.streaming)\n return\n\n this.streaming = false\n this.capturing = false\n this.url = null\n },\n\n _capture(plugin) {\n if (this.capturing)\n return\n\n this.streaming = false\n this.capturing = true\n this.captured = true\n this.url = this.getUrl(plugin, 'photo.jpg') + '&t=' + (new Date()).getTime()\n },\n\n onFrameLoaded() {\n if (this.capturing) {\n this.capturing = false\n }\n },\n\n onDeviceChanged() {},\n onFlipChanged() {},\n onSizeChanged() {\n const degToRad = (deg) => (deg * Math.PI)/180\n const rot = degToRad(this.params.rotate)\n this.$refs.frameContainer.style.width = Math.round(this.params.scale_x * Math.abs(this.params.resolution[0] * Math.cos(rot) + this.params.resolution[1] * Math.sin(rot))) + 'px'\n this.$refs.frameContainer.style.height = Math.round(this.params.scale_y * Math.abs(this.params.resolution[0] * Math.sin(rot) + this.params.resolution[1] * Math.cos(rot))) + 'px'\n },\n\n onFpsChanged() {},\n onGrayscaleChanged() {},\n\n startAudio() {\n this.audioOn = true\n },\n\n async stopAudio() {\n this.audioOn = false\n await this.request('sound.stop_recording')\n },\n },\n\n created() {\n const config = this.$root.config[`camera.${this.cameraPlugin}`] || {}\n this.attrs = {\n resolution: config.resolution || [640, 480],\n device: config.device,\n horizontal_flip: config.horizontal_flip || 0,\n vertical_flip: config.vertical_flip || 0,\n rotate: config.rotate || 0,\n scale_x: config.scale_x || 1.0,\n scale_y: config.scale_y || 1.0,\n fps: config.fps || 16.0,\n grayscale: config.grayscale || 0,\n stream_format: config.stream_format || 'mjpeg',\n }\n },\n\n mounted() {\n this.$refs.frame.addEventListener('load', this.onFrameLoaded)\n this.onSizeChanged()\n this.$watch(() => this.attrs.resolution, this.onSizeChanged)\n this.$watch(() => this.attrs.horizontal_flip, this.onSizeChanged)\n this.$watch(() => this.attrs.vertical_flip, this.onSizeChanged)\n this.$watch(() => this.attrs.rotate, this.onSizeChanged)\n this.$watch(() => this.attrs.scale_x, this.onSizeChanged)\n this.$watch(() => this.attrs.scale_y, this.onSizeChanged)\n },\n}\n</script>\n","import script from \"./Mixin.vue?vue&type=script&lang=js\"\nexport * from \"./Mixin.vue?vue&type=script&lang=js\"\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=bfa8f2aa\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=bfa8f2aa&lang=scss\"\nscript.render = render\n\nexport default script"],"sourceRoot":""}