kdf
Version:
76 lines (55 loc) • 1.99 kB
text/coffeescript
KDCustomHTMLView = require './../../core/customhtmlview.coffee'
module.exports = class KDSliderBarHandleView extends KDCustomHTMLView
constructor:(options = {})->
options.tagName = "a"
options.cssClass = "handle"
options.value ?= 0
options.draggable =
axis : "x"
super options
= 'value'
attachEvents:->
{maxValue, minValue, width} = .getOptions()
currentValue =
"DragStarted", ->
currentValue =
"DragInAction", ->
relPos = .position.relative.x
valueChange = ((maxValue - minValue) * relPos) / width
currentValue + valueChange
if .getOption "snapOnDrag"
"DragFinished", ->
if .getOption "snap"
getPosition:->
{maxValue, minValue} = .getOptions()
sliderWidth = .getWidth()
percentage = (( - minValue) * 100) / (maxValue - minValue)
position = (sliderWidth / 100) * percentage
return "#{position}px"
setValue:(value)->
{leftLimit, rightLimit} =
value = Math.min value, rightLimit if typeof rightLimit is "number"
value = Math.max value, leftLimit if typeof leftLimit is "number"
= value
.setValue value, this, no
getSnappedValue:(value)->
{interval} = .getOptions()
value or=
if interval
mod = value % interval
mid = interval / 2
return value = switch
when mod <= mid then value - mod
when mod > mid then value + (interval - mod)
else value
snap:->
{interval} = .getOptions()
value =
if interval and .getOption "snap"
value
.drawBar() if .getOption('drawBar')
viewAppended:->
"#{@getPosition()}"
if .getOption "snap"