├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── Icons │ ├── SatelliteIcon.vue │ ├── SatelliteIconDark.vue │ ├── StationIcon.vue │ ├── satellite_blue.png │ ├── station_icon_green.png │ └── station_icon_red.png ├── assets │ ├── fullScren-but.png │ ├── logo-large.svg │ ├── logo.png │ └── logo.svg ├── charts │ └── LineChart.js ├── components │ ├── DynamicTemplate.vue │ ├── EditStation.vue │ ├── HelloWorld.vue │ ├── HexView.vue │ ├── Navbar.vue │ ├── PacketMap.vue │ ├── PacketRow.vue │ ├── Station.vue │ ├── StationRx.vue │ ├── Telemetry.vue │ └── Worldmap.vue ├── main.js ├── plugins │ └── vuetify.js ├── router │ └── index.js ├── store │ └── index.js └── views │ ├── AprilFools.vue │ ├── Home.vue │ ├── Packet.vue │ ├── Packets.vue │ ├── Satellite.vue │ ├── Satellites.vue │ ├── Station.vue │ ├── Stations.vue │ └── User.vue └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended' 9 | ], 10 | parserOptions: { 11 | parser: 'babel-eslint' 12 | }, 13 | rules: { 14 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 15 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tinygs-webapp 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | npm run lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tinygs-webapp", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.21.1", 12 | "chart.js": "^2.9.4", 13 | "core-js": "^3.6.5", 14 | "leaflet": "^1.7.1", 15 | "moment": "^2.29.1", 16 | "v-runtime-template": "^1.10.0", 17 | "vue": "^2.6.11", 18 | "vue-chartjs": "^3.5.1", 19 | "vue-json-viewer": "^2.2.18", 20 | "vue-router": "^3.2.0", 21 | "vue2-leaflet": "^2.6.0", 22 | "vuetify": "^2.4.0", 23 | "vuex": "^3.4.0" 24 | }, 25 | "devDependencies": { 26 | "@mdi/font": "^5.9.55", 27 | "@vue/cli-plugin-babel": "~4.5.0", 28 | "@vue/cli-plugin-eslint": "~4.5.0", 29 | "@vue/cli-plugin-router": "~4.5.0", 30 | "@vue/cli-plugin-vuex": "~4.5.0", 31 | "@vue/cli-service": "~4.5.0", 32 | "babel-eslint": "^10.1.0", 33 | "eslint": "^6.7.2", 34 | "eslint-plugin-vue": "^6.2.2", 35 | "sass": "^1.32.0", 36 | "sass-loader": "^10.0.0", 37 | "vue-cli-plugin-vuetify": "~2.1.0", 38 | "vue-template-compiler": "^2.6.11", 39 | "vuetify-loader": "^1.7.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 12 | 13 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 111 | -------------------------------------------------------------------------------- /src/Icons/SatelliteIcon.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /src/Icons/SatelliteIconDark.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /src/Icons/StationIcon.vue: -------------------------------------------------------------------------------- 1 | 96 | -------------------------------------------------------------------------------- /src/Icons/satellite_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/src/Icons/satellite_blue.png -------------------------------------------------------------------------------- /src/Icons/station_icon_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/src/Icons/station_icon_green.png -------------------------------------------------------------------------------- /src/Icons/station_icon_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/src/Icons/station_icon_red.png -------------------------------------------------------------------------------- /src/assets/fullScren-but.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/src/assets/fullScren-but.png -------------------------------------------------------------------------------- /src/assets/logo-large.svg: -------------------------------------------------------------------------------- 1 | 2 | 20 | 22 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 68 | 72 | 76 | 80 | 84 | 85 | 90 | 94 | 98 | 99 | 103 | 106 | 109 | 114 | 119 | 124 | 129 | 134 | 135 | 136 | 139 | 142 | 145 | 148 | 151 | 154 | 157 | 160 | 163 | 166 | 169 | 172 | 175 | 178 | 181 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4m1g0/tinyGS-webapp/f40109550794ff85a7d57f01c4a7af3fc15d97e7/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 20 | 22 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 68 | 72 | 76 | 80 | 84 | 85 | 90 | 94 | 98 | 99 | 103 | 106 | 109 | 114 | 119 | 124 | 129 | 134 | 135 | 136 | 139 | 142 | 145 | 148 | 151 | 154 | 157 | 160 | 163 | 166 | 169 | 172 | 175 | 178 | 181 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /src/charts/LineChart.js: -------------------------------------------------------------------------------- 1 | import { Line, mixins } from 'vue-chartjs' 2 | const { reactiveProp } = mixins 3 | 4 | export default { 5 | extends: Line, 6 | mixins: [reactiveProp], 7 | props: ['options'], 8 | mounted () { 9 | // this.chartData is created in the mixin. 10 | // If you want to pass options please create a local options object 11 | this.renderChart(this.chartData, this.options) 12 | } 13 | } -------------------------------------------------------------------------------- /src/components/DynamicTemplate.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 65 | 66 | -------------------------------------------------------------------------------- /src/components/EditStation.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 71 | 72 | -------------------------------------------------------------------------------- /src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 93 | 94 | 152 | -------------------------------------------------------------------------------- /src/components/HexView.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 67 | 68 | -------------------------------------------------------------------------------- /src/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 76 | 77 | -------------------------------------------------------------------------------- /src/components/PacketMap.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 91 | -------------------------------------------------------------------------------- /src/components/PacketRow.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 66 | 67 | -------------------------------------------------------------------------------- /src/components/Station.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 69 | 70 | -------------------------------------------------------------------------------- /src/components/StationRx.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 63 | 64 | -------------------------------------------------------------------------------- /src/components/Telemetry.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/components/Worldmap.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 116 | 117 | 134 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import vuetify from './plugins/vuetify'; 6 | 7 | 8 | 9 | Vue.config.productionTip = false 10 | 11 | new Vue({ 12 | router, 13 | store, 14 | vuetify, 15 | render: h => h(App) 16 | }).$mount('#app') 17 | -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuetify, { VLayout, VFlex } from 'vuetify/lib'; 3 | import SatelliteIcon from '@/Icons/SatelliteIcon.vue' 4 | import StationIcon from '@/Icons/StationIcon.vue' 5 | import SatelliteIconDark from '@/Icons/SatelliteIconDark.vue' 6 | 7 | 8 | Vue.use(Vuetify, { 9 | components: { VLayout, VFlex }, 10 | }); 11 | 12 | export default new Vuetify({ 13 | icons: { 14 | values: { 15 | satellite: { 16 | component: SatelliteIcon 17 | }, 18 | satelliteDark: { 19 | component: SatelliteIconDark 20 | }, 21 | station: { 22 | component: StationIcon 23 | } 24 | } 25 | } 26 | }); 27 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import Home from '../views/Home.vue' 4 | import Satellites from '../views/Satellites.vue' 5 | import Satellite from '../views/Satellite.vue' 6 | import Packet from '../views/Packet.vue' 7 | import Packets from '../views/Packets.vue' 8 | import Station from '../views/Station.vue' 9 | import User from '../views/User.vue' 10 | import AprilFools from '../views/AprilFools.vue' 11 | 12 | Vue.use(VueRouter) 13 | 14 | const routes = [ 15 | { 16 | path: '/', 17 | name: 'Home', 18 | component: Home, 19 | meta: { 20 | title: 'Home - TinyGS' 21 | } 22 | }, 23 | { 24 | path: '/stations', 25 | name: 'Stations', 26 | // route level code-splitting 27 | // this generates a separate chunk (about.[hash].js) for this route 28 | // which is lazy-loaded when the route is visited. 29 | component: () => import(/* webpackChunkName: "about" */ '../views/Stations.vue'), 30 | meta: { 31 | title: 'Stations - TinyGS' 32 | } 33 | }, 34 | { 35 | path: '/satellites', 36 | name: 'Satellites', 37 | component: Satellites, 38 | meta: { 39 | title: 'Satellites - TinyGS' 40 | } 41 | }, 42 | { 43 | path: '/satellite/:name', 44 | name: 'Satellite', 45 | component: Satellite, 46 | meta: { 47 | title: 'Satellite - TinyGS' 48 | } 49 | }, 50 | { 51 | path: '/packet/:id', 52 | name: 'Packet', 53 | component: Packet, 54 | meta: { 55 | title: 'Packet View - TinyGS' 56 | } 57 | }, 58 | { 59 | path: '/packets', 60 | name: 'Packets', 61 | component: Packets, 62 | meta: { 63 | title: 'Last received packets - TinyGS' 64 | } 65 | }, 66 | { 67 | path: '/station/:id', 68 | name: 'Station', 69 | component: Station, 70 | meta: { 71 | title: 'Station Console - TinyGS' 72 | } 73 | }, 74 | { 75 | path: '/user/:id', 76 | name: 'User', 77 | component: User, 78 | meta: { 79 | title: 'User Console - TinyGS' 80 | } 81 | }, 82 | { 83 | path: '/april/:id', 84 | name: 'AprilFools', 85 | component: AprilFools, 86 | meta: { 87 | title: 'April Fools - TinyGS' 88 | } 89 | } 90 | ] 91 | 92 | const router = new VueRouter({ 93 | mode: 'history', 94 | base: process.env.BASE_URL, 95 | routes 96 | }) 97 | 98 | router.beforeEach((to, _, next) => { 99 | document.title = to.meta.title 100 | next() 101 | }) 102 | 103 | export default router 104 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | }, 9 | mutations: { 10 | }, 11 | actions: { 12 | }, 13 | modules: { 14 | } 15 | }) 16 | -------------------------------------------------------------------------------- /src/views/AprilFools.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | 24 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 102 | 103 | 118 | -------------------------------------------------------------------------------- /src/views/Packet.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 127 | 128 | -------------------------------------------------------------------------------- /src/views/Packets.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 48 | 49 | -------------------------------------------------------------------------------- /src/views/Satellite.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 169 | 170 | -------------------------------------------------------------------------------- /src/views/Satellites.vue: -------------------------------------------------------------------------------- 1 | 62 | 63 | 128 | 129 | -------------------------------------------------------------------------------- /src/views/Station.vue: -------------------------------------------------------------------------------- 1 | 109 | 110 | 222 | 223 | -------------------------------------------------------------------------------- /src/views/Stations.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 116 | 117 | -------------------------------------------------------------------------------- /src/views/User.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 70 | 71 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | runtimeCompiler: true, 3 | transpileDependencies: [ 4 | 'vuetify' 5 | ] 6 | } 7 | --------------------------------------------------------------------------------