import { isElementVisible } from '../../utils/core'
import clean from '../methods/clean'
export default function animate (element) {
var this$1 = this;
var isDelayed = element.config.useDelay === 'always'
|| element.config.useDelay === 'onload' && this.pristine
|| element.config.useDelay === 'once' && !element.seen
var sequence = (element.sequence) ? this.store.sequences[element.sequence.id] : null
var styles = [element.styles.inline]
if (isElementVisible.call(this, element) && !element.visible) {
if (sequence !== null) {
if (sequence.head.index === null && sequence.tail.index === null) {
sequence.head.index = sequence.tail.index = element.sequence.index
sequence.head.blocked = sequence.tail.blocked = true
} else if (sequence.head.index - 1 === element.sequence.index && !sequence.head.blocked) {
sequence.head.index--
sequence.head.blocked = true
} else if (sequence.tail.index + 1 === element.sequence.index && !sequence.tail.blocked) {
sequence.tail.index++
sequence.tail.blocked = true
} else { return }
window.setTimeout(function () {
sequence.head.blocked = sequence.tail.blocked = false
this$1.delegate()
}, sequence.interval)
}
styles.push(element.styles.opacity.computed)
styles.push(element.styles.transform.generated.final)
if (isDelayed) {
styles.push(element.styles.transition.generated.delayed)
} else {
styles.push(element.styles.transition.generated.instant)
}
element.seen = true
element.visible = true
registerCallbacks.call(this, element, isDelayed)
element.node.setAttribute('style', styles.join(' '))
} else {
if (!isElementVisible.call(this, element) && element.visible && element.config.reset) {
if (sequence) {
if (sequence.head.index === element.sequence.index) {
sequence.head.index++
} else if (sequence.tail.index === element.sequence.index) {
sequence.tail.index--
} else { return }
}
styles.push(element.styles.opacity.generated)
styles.push(element.styles.transform.generated.initial)
styles.push(element.styles.transition.generated.instant)
element.visible = false
registerCallbacks.call(this, element)
element.node.setAttribute('style', styles.join(' '))
}
}
}
function registerCallbacks (element, isDelayed) {
var this$1 = this;
var duration = (isDelayed)
? element.config.duration + element.config.delay
: element.config.duration
var afterCallback
if (element.visible) {
element.config.beforeReveal(element.node)
afterCallback = element.config.afterReveal
} else {
element.config.beforeReset(element.node)
afterCallback = element.config.afterReset
}
var elapsed = 0
if (element.callbackTimer) {
elapsed = Date.now() - element.callbackTimer.start
window.clearTimeout(element.callbackTimer.clock)
}
element.callbackTimer = {
start: Date.now(),
clock: window.setTimeout(function () {
afterCallback(element.node)
element.callbackTimer = null
if (element.visible && !element.config.reset) {
clean.call(this$1, element.node)
}
}, duration - elapsed),
}
}
|