44 lines
997 B
JavaScript
44 lines
997 B
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
|
|
const SIZES = [ "one", "two", "three", "four", "five" ]
|
|
|
|
export default class extends Controller {
|
|
static targets = [ "card" ]
|
|
|
|
connect() {
|
|
this.resize()
|
|
}
|
|
|
|
resize() {
|
|
const [ min, max ] = this.#getScoreRange()
|
|
|
|
this.cardTargets.forEach(card => {
|
|
const score = this.#currentCardScore(card)
|
|
const idx = Math.round((score - min) / (max - min) * (SIZES.length - 1))
|
|
|
|
card.style.setProperty("--card-size", `var(--card-size-${SIZES[idx]})`)
|
|
})
|
|
}
|
|
|
|
#getScoreRange() {
|
|
var min = 0, max = 1;
|
|
|
|
this.cardTargets.forEach(card => {
|
|
const score = this.#currentCardScore(card)
|
|
|
|
min = Math.min(min, score)
|
|
max = Math.max(max, score)
|
|
})
|
|
|
|
return [ min, max ]
|
|
}
|
|
|
|
#currentCardScore(el) {
|
|
const score = el.dataset.activityScore
|
|
const scoreAt = el.dataset.activityScoreAt
|
|
const daysAgo = (Date.now() / 1000 - scoreAt) / (60 * 60 * 24)
|
|
|
|
return score / (2**daysAgo)
|
|
}
|
|
}
|