Skip to content

Commit

Permalink
Merge pull request #1 from snnd/master
Browse files Browse the repository at this point in the history
dynamically adds or removes handles if model changes
  • Loading branch information
anandthakker committed Jul 1, 2014
2 parents d9179a2 + 16d7cec commit 514deb7
Showing 1 changed file with 42 additions and 31 deletions.
73 changes: 42 additions & 31 deletions src/coffeescript/multirange-slider.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -54,37 +54,48 @@ angular.module("multirangeSlider").directive("slider", ($document, $timeout)->
left: x + "%"
top: "-" + handle.prop("clientHeight")/2 + "px"

for mv,i in scope.model
do (mv, i)->
return if i == scope.model.length-1
handle = angular.element('<div class="slider-handle"></div>')
handle.css("position", "absolute")
handles.push(handle)
element.append(handle)

startX = 0
startPleft = startPright = 0
handle.on "mousedown", (event) ->
mousemove = (event) => scope.$apply ()->
dp = (event.screenX - startX) / element.prop("clientWidth") * pTotal
return if dp < -startPleft or dp > startPright
setP(i, startPleft+dp)
setP(i+1, startPright-dp)
updatePositions()

mouseup = ->
$document.unbind "mousemove", mousemove
$document.unbind "mouseup", mouseup

# Prevent default dragging of selected content
event.preventDefault()
startX = event.screenX
startPleft = getP(i)
startPright = getP(i+1)
$document.on "mousemove", mousemove
$document.on "mouseup", mouseup

scope.$watch "model", updatePositions, true
renderHandles = (model) ->
for mv,i in model
do (mv, i)->
return if i == model.length-1
handle = angular.element('<div class="slider-handle"></div>')
handle.css("position", "absolute")
handles.push(handle)
element.append(handle)

startX = 0
startPleft = startPright = 0
handle.on "mousedown", (event) ->
mousemove = (event) => scope.$apply ()->
dp = (event.screenX - startX) / element.prop("clientWidth") * pTotal
return if dp < -startPleft or dp > startPright
setP(i, startPleft+dp)
setP(i+1, startPright-dp)
updatePositions()

mouseup = ->
$document.unbind "mousemove", mousemove
$document.unbind "mouseup", mouseup

# Prevent default dragging of selected content
event.preventDefault()
startX = event.screenX
startPleft = getP(i)
startPright = getP(i+1)
$document.on "mousemove", mousemove
$document.on "mouseup", mouseup

onModelChange = (changedModel, model) ->
if changedModel.length != model.length
handles = []
element.children().remove()
renderHandles(changedModel)

updatePositions()


renderHandles scope.model
scope.$watch "model", onModelChange, true
)

angular.module("multirangeSlider").controller("Ctrl", ($scope)->
Expand Down

0 comments on commit 514deb7

Please sign in to comment.