33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
export default {
|
|
props: [ 'name', 'href', 'token' ],
|
|
data() { return {showCopied: false} },
|
|
template: `<span class="notif"><div v-if="showCopied">copied!</div><a :href="href" @click="fetchAndSave()">{{name}}</a> <a href="#" class="copy" @click="fetchAndCopy()">🗐</a></span>`,
|
|
methods: {
|
|
fetch() {
|
|
event.preventDefault()
|
|
return fetch(this.href, {
|
|
method: 'GET',
|
|
headers: { 'Authorization': 'Bearer ' + this.token },
|
|
})
|
|
},
|
|
handleFetchError(e) {
|
|
console.log("failed to get value:", e)
|
|
alert('failed to get value')
|
|
},
|
|
fetchAndSave() {
|
|
this.fetch().then(resp => resp.blob()).then((value) => {
|
|
window.open(URL.createObjectURL(value), "_blank")
|
|
}).catch(this.handleFetchError)
|
|
},
|
|
fetchAndCopy() {
|
|
this.fetch()
|
|
.then((resp) => resp.headers.get("content-type") == "application/json" ? resp.json() : resp.text())
|
|
.then((value) => {
|
|
window.navigator.clipboard.writeText(value)
|
|
this.showCopied = true
|
|
setTimeout(() => { this.showCopied = false }, 1000)
|
|
}).catch(this.handleFetchError)
|
|
},
|
|
},
|
|
}
|