Commit 24209441 authored by Konrad Mohrfeldt's avatar Konrad Mohrfeldt
Browse files

add share component

parent 2b3f4d0d
Loading
Loading
Loading
Loading
+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>
+2 −0
Original line number Diff line number Diff line
@@ -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'
@@ -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)
+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] || '')
}