diff options
Diffstat (limited to 'node_modules/vuepress/lib/default-theme/SWUpdatePopup.vue')
| -rw-r--r-- | node_modules/vuepress/lib/default-theme/SWUpdatePopup.vue | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/default-theme/SWUpdatePopup.vue b/node_modules/vuepress/lib/default-theme/SWUpdatePopup.vue new file mode 100644 index 00000000..b224db31 --- /dev/null +++ b/node_modules/vuepress/lib/default-theme/SWUpdatePopup.vue @@ -0,0 +1,85 @@ +<template> + <transition name="sw-update-popup"> + <div + v-if="enabled" + class="sw-update-popup" + > + {{message}}<br> + <button @click="reload">{{buttonText}}</button> + </div> + </transition> +</template> + +<script> +export default { + props: { + updateEvent: { + type: Object, + default: null + } + }, + + computed: { + popupConfig () { + for (const config of [this.$themeLocaleConfig, this.$site.themeConfig]) { + const sw = config.serviceWorker + if (sw && sw.updatePopup) { + return typeof sw.updatePopup === 'object' ? sw.updatePopup : {} + } + } + return null + }, + + enabled () { + return Boolean(this.popupConfig && this.updateEvent) + }, + + message () { + const c = this.popupConfig + return (c && c.message) || 'New content is available.' + }, + + buttonText () { + const c = this.popupConfig + return (c && c.buttonText) || 'Refresh' + } + }, + + methods: { + reload () { + if (this.updateEvent) { + this.updateEvent.skipWaiting().then(() => { + location.reload(true) + }) + this.updateEvent = null + } + } + } +} +</script> + +<style lang="stylus"> +@import './styles/config.styl' + +.sw-update-popup + position fixed + right 1em + bottom 1em + padding 1em + border 1px solid $accentColor + border-radius 3px + background #fff + box-shadow 0 4px 16px rgba(0, 0, 0, 0.5) + text-align center + + button + margin-top 0.5em + padding 0.25em 2em + +.sw-update-popup-enter-active, .sw-update-popup-leave-active + transition opacity 0.3s, transform 0.3s + +.sw-update-popup-enter, .sw-update-popup-leave-to + opacity 0 + transform translate(0, 50%) scale(0.5) +</style> |
