Guest User

Untitled

a guest
Jul 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.64 KB | None | 0 0
  1. Raphael.fn.select = (selector) ->
  2. type = selector.charAt(0)
  3. selector = selector.substr(1)
  4. attr = if type == '.' then 'class' else 'id'
  5. els = []
  6. bot = this.bottom
  7. while bot
  8. if bot.node.getAttribute(attr) == selector
  9. els.push(bot)
  10. bot = bot.next
  11. return if type == '.' then els else els[0] or null
  12.  
  13. ;((window) ->
  14. 'use strict'
  15.  
  16. loadSVG = (file) ->
  17. response = null
  18. $.ajax({
  19. type: 'GET',
  20. url: file,
  21. dataType: 'xml',
  22. async: false,
  23. success: (svgXML) ->
  24. response = svgXML
  25. })
  26. return response
  27.  
  28. selectedPoints = []
  29. disabledPoints = ['seggiolino_1637', 'seggiolino_1881', 'seggiolino_1984', 'seggiolino_889', 'seggiolino_891', 'seggiolino_893', 'seggiolino_890', 'seggiolino_892', 'seggiolino_894']
  30.  
  31. settings =
  32. clickAnimTime: 0
  33. hoverScale: 2
  34. animTime: 300
  35. animEase: 'backOut'
  36. scale: 3
  37. vb:
  38. x: 0
  39. y: 0
  40. width: 1606
  41. height: 1039
  42. paper:
  43. width: 800
  44. height: 480
  45.  
  46. states =
  47. default:
  48. transform: ''
  49. fill: '#008000'
  50. 'stroke-width': 0
  51. hover:
  52. transform: 's' + settings.hoverScale
  53. disabled:
  54. fill: '#eaeaea'
  55. 'stroke-width': 1
  56. stroke: '#333333'
  57. selected:
  58. transform: 's' + settings.hoverScale
  59. fill: '#AA8834'
  60. 'stroke-width': 2
  61. stroke: '#AA8834'
  62.  
  63. container = document.getElementById('mapContainer')
  64. paper = new Raphael(container, settings.vb.width, settings.vb.height)
  65. map = paper.importSVG(loadSVG('img/svgscala.svg'))
  66. draggable = container.getElementsByTagName('svg')[0]
  67. paper.setSize(settings.paper.width, settings.paper.height)
  68. viewBoxWidth = settings.vb.width
  69. viewBoxHeight = settings.vb.height
  70. dx = 0
  71. dy = 0
  72. oX = 0
  73. oY = 0
  74. oWidth = viewBoxWidth
  75. oHeight = viewBoxHeight
  76. mousedown = false
  77. startX = 0
  78. startY = 0
  79. viewBox = paper.setViewBox(oX, oY, viewBoxWidth, viewBoxHeight, true)
  80. viewBox.x = oX
  81. viewBox.y = oY
  82. zoomLevel = 0
  83. firedCallback = false
  84.  
  85. paper.select('#' + point).attr(states.disabled) for point in disabledPoints
  86.  
  87. map.hover(() ->
  88. if disabledPoints.indexOf(this.node.getAttribute('id')) == -1
  89. this[0].style.cursor = 'pointer'
  90. this.animate(states.hover, settings.clickAnimTime, settings.animEase)
  91. else
  92. this[0].style.cursor = 'not-allowed'
  93. , () ->
  94. if disabledPoints.indexOf(this.node.getAttribute('id')) == -1
  95. if selectedPoints.indexOf(this.node.getAttribute('id')) == -1
  96. this.animate(states.default, settings.clickAnimTime, settings.animEase)
  97. )
  98.  
  99. map.click(() ->
  100. cx = this.attr('cx')
  101. cy = this.attr('cy')
  102.  
  103. if disabledPoints.indexOf(this.node.getAttribute('id')) == -1
  104. if selectedPoints.indexOf(this.node.getAttribute('id')) == -1
  105. selectedPoints.push(this.node.getAttribute('id'))
  106. this.animate(states.selected, settings.clickAnimTime, settings.animEase)
  107. else
  108. removeId = selectedPoints.indexOf(this.node.getAttribute('id'))
  109. selectedPoints.splice(removeId, 1)
  110. this.animate(states.default, settings.clickAnimTime, settings.animEase)
  111. )
  112.  
  113. wheel = (e) ->
  114. e = e or window.event
  115. delta = 0
  116.  
  117. if e.wheelDelta
  118. delta = e.wheelDelta / 120
  119. else if e.detail
  120. delta = -e.detail / 3
  121.  
  122. if delta then handle(e, delta)
  123. handleAreas()
  124. if e.preventDefault then e.preventDefault()
  125.  
  126. return e.returnValue = false
  127.  
  128. handle = (e, delta) ->
  129. vBOw = viewBoxWidth
  130. vBOh = viewBoxHeight
  131. factor = 0
  132.  
  133. if delta > 0
  134. zoomLevel++
  135. viewBoxWidth *= 0.95
  136. viewBoxHeight *= 0.95
  137. factor = 0.95
  138. else
  139. zoomLevel--
  140. viewBoxWidth *= 1.05
  141. viewBoxHeight *= 1.05
  142. factor = 1.05
  143.  
  144. viewBox.x -= (e.pageX - (viewBoxWidth - vBOw)) * (factor - 1)
  145. viewBox.y -= (e.pageY - (viewBoxHeight - vBOh)) * (factor - 1)
  146. paper.setViewBox(viewBox.x, viewBox.y, viewBoxWidth, viewBoxHeight)
  147.  
  148. draggable.onmousedown = (e) ->
  149. if paper.getElementByPoint(e.pageX, e.pageY) != null
  150. return
  151. e = e or window.event
  152. mousedown = true
  153. startX = e.pageX
  154. startY = e.pageY
  155.  
  156. document.onmousemove = (e) ->
  157. if mousedown == false then return
  158. document.body.style.cursor = '-webkit-grabbing'
  159. e = e or window.event
  160. dx = startX - e.pageX
  161. dy = startY - e.pageY
  162. x = viewBoxWidth / paper.width
  163. y = viewBoxHeight / paper.height
  164. dx *= x
  165. dy *= y
  166.  
  167. paper.setViewBox(viewBox.x + dx, viewBox.y + dy, viewBoxWidth, viewBoxHeight)
  168.  
  169. document.onmouseup = (e) ->
  170. document.body.style.cursor = 'initial'
  171. if mousedown == false then return
  172. e = e or window.event
  173. viewBox.x += dx
  174. viewBox.y += dy
  175. mousedown = false
  176.  
  177. handleAreas = () ->
  178. if zoomLevel > 30
  179. if not firedCallback
  180. firedCallback = true
  181. a.attr('fill', '') for a in paper.select('.area')
  182. console.log 'zoomed in'
  183. else
  184. if firedCallback
  185. firedCallback = false
  186. a.attr('fill', 'red') for a in paper.select('.area')
  187.  
  188. draggable.addEventListener('DOMMouseScroll', wheel, false)
  189. draggable.onmousewheel = draggable.onmousewheel = wheel
  190. )(window)
  191.  
  192. wheel = (e) ->
  193. e = e or window.event
  194. # the code follows
  195.  
  196. wheel = (e = window.event) ->
  197. # the code follows
  198.  
  199. e ||= window.event
  200. # sets e to window.event if e evaluates to false
  201. # null, unefined, 0, "", NaN and false values will be replaced
  202. # same as `e || (e = window.event)`
  203.  
  204. e ?= window.event
  205. # sets e to window.event only if e is null or undefined
  206. # 0, "" and other falsy friends are allowed
  207. # same as `if (e == null) { e = window.event }`
  208.  
  209. if e.preventDefault then e.preventDefault()
  210.  
  211. e.preventDefault?()
  212.  
  213. if delta then handle(e, delta)
  214.  
  215. handle(e, delta) if delta
Add Comment
Please, Sign In to add comment