Files
metrics/source/app/web/statics/oauth/script.js

99 lines
2.9 KiB
JavaScript

;(async function() {
//App
return new Vue({
//Initialization
el: "main",
async mounted() {
//Palette
try {
this.palette = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"
if (localStorage.getItem("session.metrics")) {
this.session = localStorage.getItem("session.metrics")
axios.defaults.headers.common["x-metrics-session"] = localStorage.getItem("session.metrics")
}
}
catch (error) {}
//Init
await Promise.all([
//GitHub limit tracker
(async () => {
const {data: requests} = await axios.get("/.requests")
this.requests = requests
if (!requests.login) {
localStorage.removeItem("session.metrics")
delete axios.defaults.headers.common["x-metrics-session"]
}
})(),
//Version
(async () => {
const {data: version} = await axios.get("/.version")
this.version = `v${version}`
})(),
//Hosted
(async () => {
const {data: hosted} = await axios.get("/.hosted")
this.hosted = hosted
})(),
//OAuth
(async () => {
const {data: enabled} = await axios.get("/.oauth/enabled")
this.oauth = enabled
})(),
//OAuth
(async () => {
const {data: extras} = await axios.get("/.extras.logged")
this.extras = extras
})(),
])
},
//Watchers
watch: {
palette: {
immediate: true,
handler(current, previous) {
document.querySelector("body").classList.remove(previous)
document.querySelector("body").classList.add(current)
},
},
},
//Computed properties
computed: {
params() {
return new URLSearchParams({from: new URLSearchParams(location.search).get("from"), scopes: this.scopes.join(" ")})
},
preview() {
return /-preview$/.test(this.version)
},
beta() {
return /-beta$/.test(this.version)
},
},
//Data initialization
data: {
version: "",
hosted: null,
requests: {rest: {limit: 0, used: 0, remaining: 0, reset: NaN}, graphql: {limit: 0, used: 0, remaining: 0, reset: NaN}, search: {limit: 0, used: 0, remaining: 0, reset: NaN}},
palette: "light",
oauth: false,
scopes: [],
extras: [],
session: null,
supported: (() => {
try {
const storage = window.localStorage
const test = "__storage_test__"
storage.setItem(test, test)
if (storage.getItem(test) !== test)
throw new Error("localStorage value mismatch")
storage.removeItem(test)
return true
}
catch (error) {
console.error(error)
return false
}
})(),
},
})
})()