forked from cybrespace/pinafore
		
	clean up icon animations (#203)
This commit is contained in:
		
							parent
							
								
									b37f371cdb
								
							
						
					
					
						commit
						36b8f15ba6
					
				
					 3 changed files with 27 additions and 24 deletions
				
			
		| 
						 | 
					@ -105,17 +105,6 @@
 | 
				
			||||||
  import { store } from '../_store/store'
 | 
					  import { store } from '../_store/store'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export default {
 | 
					  export default {
 | 
				
			||||||
    oncreate () {
 | 
					 | 
				
			||||||
      this.observe('animation', animation => {
 | 
					 | 
				
			||||||
        let { reduceMotion } = this.store.get()
 | 
					 | 
				
			||||||
        if (!animation || reduceMotion) {
 | 
					 | 
				
			||||||
          return
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        let svg = this.refs.svg
 | 
					 | 
				
			||||||
        let animations = animation.map(({properties, options}) => svg.animate(properties, options))
 | 
					 | 
				
			||||||
        animations.forEach(anim => anim.play())
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    store: () => store,
 | 
					    store: () => store,
 | 
				
			||||||
    computed: {
 | 
					    computed: {
 | 
				
			||||||
      computedClass: (pressable, pressed, big, muted, className) => {
 | 
					      computedClass: (pressable, pressed, big, muted, className) => {
 | 
				
			||||||
| 
						 | 
					@ -128,6 +117,17 @@
 | 
				
			||||||
          className
 | 
					          className
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      animate (animation) {
 | 
				
			||||||
 | 
					        let { reduceMotion } = this.store.get()
 | 
				
			||||||
 | 
					        if (!animation || reduceMotion) {
 | 
				
			||||||
 | 
					          return
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        let svg = this.refs.svg
 | 
				
			||||||
 | 
					        let animations = animation.map(({properties, options}) => svg.animate(properties, options))
 | 
				
			||||||
 | 
					        animations.forEach(anim => anim.play())
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
    pressed="{{following}}"
 | 
					    pressed="{{following}}"
 | 
				
			||||||
    big="true"
 | 
					    big="true"
 | 
				
			||||||
    on:click="onFollowButtonClick(event)"
 | 
					    on:click="onFollowButtonClick(event)"
 | 
				
			||||||
    animation="{{animateFollowButton && followButtonAnimation}}"
 | 
					    ref:icon
 | 
				
			||||||
  />
 | 
					  />
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,6 @@
 | 
				
			||||||
          followRequested,
 | 
					          followRequested,
 | 
				
			||||||
          blocking
 | 
					          blocking
 | 
				
			||||||
        } = this.get()
 | 
					        } = this.get()
 | 
				
			||||||
        this.set({animateFollowButton: true}) // TODO: this should be an event, not toggling a boolean
 | 
					 | 
				
			||||||
        if (blocking) { // unblock
 | 
					        if (blocking) { // unblock
 | 
				
			||||||
          await setAccountBlocked(accountId, false)
 | 
					          await setAccountBlocked(accountId, false)
 | 
				
			||||||
        } else { // follow/unfollow
 | 
					        } else { // follow/unfollow
 | 
				
			||||||
| 
						 | 
					@ -46,16 +45,14 @@
 | 
				
			||||||
          if (!account.locked) { // be optimistic, show the user that it succeeded
 | 
					          if (!account.locked) { // be optimistic, show the user that it succeeded
 | 
				
			||||||
            this.set({overrideFollowing: newFollowingValue})
 | 
					            this.set({overrideFollowing: newFollowingValue})
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          if (newFollowingValue) {
 | 
				
			||||||
 | 
					            this.refs.icon.animate(FOLLOW_BUTTON_ANIMATION)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          await setAccountFollowed(accountId, newFollowingValue)
 | 
					          await setAccountFollowed(accountId, newFollowingValue)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.set({animateFollowButton: false}) // let animation play next time
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    store: () => store,
 | 
					    store: () => store,
 | 
				
			||||||
    data: () => ({
 | 
					 | 
				
			||||||
      followButtonAnimation: FOLLOW_BUTTON_ANIMATION
 | 
					 | 
				
			||||||
    }),
 | 
					 | 
				
			||||||
    computed: {
 | 
					    computed: {
 | 
				
			||||||
      accountId: (account) => account.id,
 | 
					      accountId: (account) => account.id,
 | 
				
			||||||
      following: (relationship, overrideFollowing) => {
 | 
					      following: (relationship, overrideFollowing) => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@
 | 
				
			||||||
    disabled="{{reblogDisabled}}"
 | 
					    disabled="{{reblogDisabled}}"
 | 
				
			||||||
    href="{{reblogIcon}}"
 | 
					    href="{{reblogIcon}}"
 | 
				
			||||||
    delegateKey="{{reblogKey}}"
 | 
					    delegateKey="{{reblogKey}}"
 | 
				
			||||||
    animation="{{animateReblog && reblogAnimation}}"
 | 
					    ref:reblogIcon
 | 
				
			||||||
  />
 | 
					  />
 | 
				
			||||||
  <IconButton
 | 
					  <IconButton
 | 
				
			||||||
    label="Favorite"
 | 
					    label="Favorite"
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
    pressed="{{favorited}}"
 | 
					    pressed="{{favorited}}"
 | 
				
			||||||
    href="#fa-star"
 | 
					    href="#fa-star"
 | 
				
			||||||
    delegateKey="{{favoriteKey}}"
 | 
					    delegateKey="{{favoriteKey}}"
 | 
				
			||||||
    animation="{{animateFavorite && favoriteAnimation}}"
 | 
					    ref:favoriteIcon
 | 
				
			||||||
  />
 | 
					  />
 | 
				
			||||||
  <IconButton
 | 
					  <IconButton
 | 
				
			||||||
    label="Show more options"
 | 
					    label="Show more options"
 | 
				
			||||||
| 
						 | 
					@ -77,15 +77,21 @@
 | 
				
			||||||
        e.preventDefault()
 | 
					        e.preventDefault()
 | 
				
			||||||
        e.stopPropagation()
 | 
					        e.stopPropagation()
 | 
				
			||||||
        let { originalStatusId, favorited } = this.get()
 | 
					        let { originalStatusId, favorited } = this.get()
 | 
				
			||||||
        /* no await */ setFavorited(originalStatusId, !favorited)
 | 
					        let newFavoritedValue = !favorited
 | 
				
			||||||
        this.set({animateFavorite: !favorited})
 | 
					        /* no await */ setFavorited(originalStatusId, newFavoritedValue)
 | 
				
			||||||
 | 
					        if (newFavoritedValue) {
 | 
				
			||||||
 | 
					          this.refs.favoriteIcon.animate(FAVORITE_ANIMATION)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      onReblogClick (e) {
 | 
					      onReblogClick (e) {
 | 
				
			||||||
        e.preventDefault()
 | 
					        e.preventDefault()
 | 
				
			||||||
        e.stopPropagation()
 | 
					        e.stopPropagation()
 | 
				
			||||||
        let { originalStatusId, reblogged } = this.get()
 | 
					        let { originalStatusId, reblogged } = this.get()
 | 
				
			||||||
        /* no await */ setReblogged(originalStatusId, !reblogged)
 | 
					        let newRebloggedValue = !reblogged
 | 
				
			||||||
        this.set({animateReblog: !reblogged})
 | 
					        /* no await */ setReblogged(originalStatusId, newRebloggedValue)
 | 
				
			||||||
 | 
					        if (newRebloggedValue) {
 | 
				
			||||||
 | 
					          this.refs.reblogIcon.animate(REBLOG_ANIMATION)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      onReplyClick (e) {
 | 
					      onReplyClick (e) {
 | 
				
			||||||
        e.preventDefault()
 | 
					        e.preventDefault()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue