still-image.js (1595B)
- const StillImage = {
- props: [
- 'src',
- 'referrerpolicy',
- 'mimetype',
- 'imageLoadError',
- 'imageLoadHandler',
- 'alt',
- 'height',
- 'width',
- 'dataSrc',
- 'loading'
- ],
- data () {
- return {
- // for lazy loading, see loadLazy()
- realSrc: this.src,
- stopGifs: this.$store.getters.mergedConfig.stopGifs
- }
- },
- computed: {
- animated () {
- if (!this.realSrc) {
- return false
- }
- return this.stopGifs && (this.mimetype === 'image/gif' || this.realSrc.endsWith('.gif'))
- },
- style () {
- const appendPx = (str) => /\d$/.test(str) ? str + 'px' : str
- return {
- height: this.height ? appendPx(this.height) : null,
- width: this.width ? appendPx(this.width) : null
- }
- }
- },
- methods: {
- loadLazy () {
- if (this.dataSrc) {
- this.realSrc = this.dataSrc
- }
- },
- onLoad () {
- if (!this.realSrc) {
- return
- }
- const image = this.$refs.src
- if (!image) return
- this.imageLoadHandler && this.imageLoadHandler(image)
- const canvas = this.$refs.canvas
- if (!canvas) return
- const width = image.naturalWidth
- const height = image.naturalHeight
- canvas.width = width
- canvas.height = height
- canvas.getContext('2d').drawImage(image, 0, 0, width, height)
- },
- onError () {
- this.imageLoadError && this.imageLoadError()
- }
- },
- watch: {
- src () {
- this.realSrc = this.src
- },
- dataSrc () {
- this.$el.removeAttribute('data-loaded')
- }
- }
- }
- export default StillImage