/ src / components / Tally.vue
Tally.vue
  1  <template lang='pug'>
  2  
  3  .tally.tooltip
  4      span
  5          span(v-if='cardStart').points {{ cardStart.asString }}
  6          span.hide(v-if='b.claimed.length > 0') -
  7          
  8          img(v-for='n in clm.dmark'  src='../assets/images/dmark.svg')
  9          img(v-for='n in clm.xmark'  src='../assets/images/xmark.svg')
 10          img(v-for='n in clm.mark'  src='../assets/images/mark.svg')
 11  </template>
 12  
 13  <script>
 14  
 15  import Current from './Current.vue'
 16  
 17  export default {
 18      props: ['b'],
 19      components: { Current },
 20      methods:{
 21        styl(color){
 22            if (!color  || this.$store.getters.member.stacks === 1) return
 23            return {
 24                redwx : color == 'red',
 25                bluewx : color == 'blue',
 26                greenwx : color == 'green',
 27                yellowwx : color == 'yellow',
 28                purplewx : color == 'purple',
 29                blackwx : color == 'black',
 30            }
 31        },
 32        setAction(){
 33            if (this.$store.getters.member.action === this.b.taskId){
 34                return this.$store.dispatch("makeEvent", {
 35                    type: 'member-field-updated',
 36                    field: 'action',
 37                    newfield: false,
 38                    memberId: this.$store.getters.member.memberId,
 39                })
 40            }
 41  
 42            this.$store.dispatch("makeEvent", {
 43                type: 'member-field-updated',
 44                field: 'action',
 45                newfield: this.b.taskId,
 46                memberId: this.$store.getters.member.memberId,
 47            })
 48        },
 49      },
 50      computed: {
 51        actions(){
 52            let a = []
 53            this.$store.state.members.forEach(m => {
 54                if (m.action ===this.b.taskId) a.push(m.memberId)
 55            })
 56            return a
 57        },
 58        clm(){
 59            let mark = 0
 60            let xmark = 0
 61            let dmark = 0
 62            let m = this.b.claims.length
 63            while (m >= 100){
 64                dmark += 1
 65                m -= 100  
 66            }
 67            while (m >= 10){
 68                xmark += 1
 69                m -= 10
 70            }
 71            mark = m
 72            return {
 73                mark,
 74                xmark,
 75                dmark,
 76            }
 77        },
 78        cardStart(){
 79            if ( this.b.book.startTs ){
 80              let now = Date.now()
 81              let msTill = this.b.book.startTs - now
 82              let days = msTill / (1000 * 60 * 60 * 24)
 83              let hours = msTill / (1000 * 60 * 24)
 84              let minutes = msTill / (1000 * 60)
 85              let asString = ""
 86              if ( days.toFixed(0) >= 1 ) {
 87                  asString = `in ${days.toFixed(0)} day${ (days > 1) ? 's' : '' }`
 88              } else if ( hours >= 1) {
 89                  asString = `in ${hours.toFixed(0)} hour${ (hours > 1) ? 's' : '' }`
 90              } else if ( minutes >= 1 ) {
 91                  asString = `in ${minutes.toFixed(0)} minute${ (minutes > 1) ? 's' : '' }`
 92              } else if (( this.b.book.endTs - now ) > 0) {
 93                  asString = 'happening now!'
 94              } else {
 95                  asString = 'in the past'
 96              }
 97                  
 98              return {
 99                  days,
100                  hours,
101                  minutes,
102                  asString
103              }
104            }
105            return undefined
106        },
107      }
108  }
109  
110  </script>
111  
112  <style lang='stylus' scoped>
113  
114  .hide
115      opacity: 0
116  .tally
117      padding-right: 0.5em
118      padding-left: 0.5em
119      font-size: 1em
120      min-height: 2em
121      min-width: 7em
122      text-align: right
123      pointer-events: none
124  img
125      height: 1em
126      position: relative
127      bottom: 0
128      right: 0
129  
130  .points
131      position: relative
132      top: -0.25em
133      margin-right: 0.25em
134  
135  
136  
137  </style>