Loading src/components/generic/Share.vue 0 → 100644 +53 −0 Original line number Diff line number Diff line <template> <Button v-bind="$attrs" @click.prevent="shareData" :title="label" :aria-label="label" v-if="canShare"> <template v-slot:icon> <component :is="shareIcon"/> </template> <slot/> </Button> </template> <script> import { ShareIcon, Share2Icon } from 'vue-feather-icons' import Button from './Button' import { isIOS } from '../../util' export default { components: { Button }, props: { name: String, payload: { type: Object, required: true } }, computed: { canShare () { return 'share' in window.navigator }, shareIcon () { return isIOS ? ShareIcon : Share2Icon }, label () { return this.$t(this.name ? 'share_label' : 'share_label_default', [this.name]) } }, methods: { shareData () { console.log(this.payload) window.navigator.share(this.payload) } } } </script> <i18n lang="yaml"> en: share_label: 'Share {0}' share_label_default: Share content de: share_label: '{0} teilen' share_label_default: Inhalt teilen </i18n> src/components/register.js +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import PaginatorNav from './generic/PaginatorNav' import PlayPause from './player/PlayPause' import Search from './generic/Search' import Section from './generic/Section' import Share from './generic/Share' import Spinner from './generic/Spinner' import SpinnerArea from './generic/SpinnerArea' import Tag from './generic/Tag' Loading @@ -42,6 +43,7 @@ Vue.component('app-paginator-nav', PaginatorNav) Vue.component('app-play-pause', PlayPause) Vue.component('app-search', Search) Vue.component('app-section', Section) Vue.component('app-share', Share) Vue.component('app-spinner', Spinner) Vue.component('app-spinner-area', SpinnerArea) Vue.component('app-tag', Tag) Loading src/util/index.js +2 −0 Original line number Diff line number Diff line export const oneOf = values => value => values.indexOf(value) !== -1 export const isIOS = /iPad|iPhone|iPod/.test(window.navigator.userAgent) && !window.MSStream export const renderSimpleTemplateString = (str, ctx) => { return str.replace(/\{([a-z_]+)\}/gi, (match, key) => ctx[key] || '') } Loading Loading
src/components/generic/Share.vue 0 → 100644 +53 −0 Original line number Diff line number Diff line <template> <Button v-bind="$attrs" @click.prevent="shareData" :title="label" :aria-label="label" v-if="canShare"> <template v-slot:icon> <component :is="shareIcon"/> </template> <slot/> </Button> </template> <script> import { ShareIcon, Share2Icon } from 'vue-feather-icons' import Button from './Button' import { isIOS } from '../../util' export default { components: { Button }, props: { name: String, payload: { type: Object, required: true } }, computed: { canShare () { return 'share' in window.navigator }, shareIcon () { return isIOS ? ShareIcon : Share2Icon }, label () { return this.$t(this.name ? 'share_label' : 'share_label_default', [this.name]) } }, methods: { shareData () { console.log(this.payload) window.navigator.share(this.payload) } } } </script> <i18n lang="yaml"> en: share_label: 'Share {0}' share_label_default: Share content de: share_label: '{0} teilen' share_label_default: Inhalt teilen </i18n>
src/components/register.js +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import PaginatorNav from './generic/PaginatorNav' import PlayPause from './player/PlayPause' import Search from './generic/Search' import Section from './generic/Section' import Share from './generic/Share' import Spinner from './generic/Spinner' import SpinnerArea from './generic/SpinnerArea' import Tag from './generic/Tag' Loading @@ -42,6 +43,7 @@ Vue.component('app-paginator-nav', PaginatorNav) Vue.component('app-play-pause', PlayPause) Vue.component('app-search', Search) Vue.component('app-section', Section) Vue.component('app-share', Share) Vue.component('app-spinner', Spinner) Vue.component('app-spinner-area', SpinnerArea) Vue.component('app-tag', Tag) Loading
src/util/index.js +2 −0 Original line number Diff line number Diff line export const oneOf = values => value => values.indexOf(value) !== -1 export const isIOS = /iPad|iPhone|iPod/.test(window.navigator.userAgent) && !window.MSStream export const renderSimpleTemplateString = (str, ctx) => { return str.replace(/\{([a-z_]+)\}/gi, (match, key) => ctx[key] || '') } Loading