turbolinks
Version:
Turbolinks makes navigating your web application faster
84 lines (67 loc) • 2.15 kB
text/coffeescript
class Turbolinks.ProgressBar
ANIMATION_DURATION = 300
: """
.turbolinks-progress-bar {
position: fixed;
display: block;
top: 0;
left: 0;
height: 3px;
background: #0076ff;
z-index: 9999;
transition: width #{ANIMATION_DURATION}ms ease-out, opacity #{ANIMATION_DURATION / 2}ms #{ANIMATION_DURATION / 2}ms ease-in;
transform: translate3d(0, 0, 0);
}
"""
constructor: ->
=
=
show: ->
unless
= true
hide: ->
if and not
= true
=>
= false
= false
setValue: ( ) ->
# Private
installStylesheetElement: ->
document.head.insertBefore( , document.head.firstChild)
installProgressElement: ->
.style.width = 0
.style.opacity = 1
document.documentElement.insertBefore( , document.body)
fadeProgressElement: (callback) ->
.style.opacity = 0
setTimeout(callback, ANIMATION_DURATION * 1.5)
uninstallProgressElement: ->
if .parentNode
document.documentElement.removeChild( )
startTrickling: ->
?= setInterval( , ANIMATION_DURATION)
stopTrickling: ->
clearInterval( )
= null
trickle: =>
refresh: ->
requestAnimationFrame =>
.style.width = "#{10 + (@value * 90)}%"
createStylesheetElement: ->
element = document.createElement("style")
element.type = "text/css"
element.textContent = .defaultCSS
element
createProgressElement: ->
element = document.createElement("div")
element.className = "turbolinks-progress-bar"
element