compass-jquery-plugin 0.3.0.beta.2 → 0.3.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. data/README.textile +2 -2
  2. data/VERSION.yml +1 -1
  3. data/compass-jquery-plugin.gemspec +309 -6
  4. data/gem_tasks/jqtouch.rake +73 -7
  5. data/gem_tasks/jrails13.rake +6 -6
  6. data/gem_tasks/jrails14.rake +6 -6
  7. data/lib/handle_js_files.rb +3 -2
  8. data/lib/jquery.ui.rb +1 -1
  9. data/templates/dynatree/jquery.ui/dynatree.aero.scss +4 -4
  10. data/templates/dynatree/jquery.ui/dynatree.aqua.scss +4 -4
  11. data/templates/dynatree/jquery.ui/dynatree.crystal.scss +4 -4
  12. data/templates/dynatree/jquery.ui/dynatree.xp.scss +4 -5
  13. data/templates/jqgrid/i18n/jqgrid/locale-cn.js +7 -3
  14. data/templates/jqgrid/i18n/jqgrid/locale-cn.min.js +8 -8
  15. data/templates/jqgrid/jquery.jqGrid.js +213 -137
  16. data/templates/jqgrid/jquery.jqGrid.min.js +262 -261
  17. data/templates/jqgrid/jquery.ui/jqGrid.scss +37 -37
  18. data/templates/jqtouch/jqtouch/glyphish/Read me first - license.txt +14 -0
  19. data/templates/jqtouch/jqtouch/glyphish/icons/01-refresh.png +0 -0
  20. data/templates/jqtouch/jqtouch/glyphish/icons/02-redo.png +0 -0
  21. data/templates/jqtouch/jqtouch/glyphish/icons/03-loopback.png +0 -0
  22. data/templates/jqtouch/jqtouch/glyphish/icons/04-squiggle.png +0 -0
  23. data/templates/jqtouch/jqtouch/glyphish/icons/05-shuffle.png +0 -0
  24. data/templates/jqtouch/jqtouch/glyphish/icons/06-magnifying-glass.png +0 -0
  25. data/templates/jqtouch/jqtouch/glyphish/icons/07-map-marker.png +0 -0
  26. data/templates/jqtouch/jqtouch/glyphish/icons/08-chat.png +0 -0
  27. data/templates/jqtouch/jqtouch/glyphish/icons/09-chat2.png +0 -0
  28. data/templates/jqtouch/jqtouch/glyphish/icons/10-medical.png +0 -0
  29. data/templates/jqtouch/jqtouch/glyphish/icons/100-coffee.png +0 -0
  30. data/templates/jqtouch/jqtouch/glyphish/icons/101-gameplan.png +0 -0
  31. data/templates/jqtouch/jqtouch/glyphish/icons/102-walk.png +0 -0
  32. data/templates/jqtouch/jqtouch/glyphish/icons/103-map.png +0 -0
  33. data/templates/jqtouch/jqtouch/glyphish/icons/104-index-cards.png +0 -0
  34. data/templates/jqtouch/jqtouch/glyphish/icons/105-piano.png +0 -0
  35. data/templates/jqtouch/jqtouch/glyphish/icons/106-sliders.png +0 -0
  36. data/templates/jqtouch/jqtouch/glyphish/icons/107-widescreen.png +0 -0
  37. data/templates/jqtouch/jqtouch/glyphish/icons/108-badge.png +0 -0
  38. data/templates/jqtouch/jqtouch/glyphish/icons/109-chicken.png +0 -0
  39. data/templates/jqtouch/jqtouch/glyphish/icons/11-clock.png +0 -0
  40. data/templates/jqtouch/jqtouch/glyphish/icons/110-bug.png +0 -0
  41. data/templates/jqtouch/jqtouch/glyphish/icons/111-user.png +0 -0
  42. data/templates/jqtouch/jqtouch/glyphish/icons/112-group.png +0 -0
  43. data/templates/jqtouch/jqtouch/glyphish/icons/113-navigation.png +0 -0
  44. data/templates/jqtouch/jqtouch/glyphish/icons/114-balloon.png +0 -0
  45. data/templates/jqtouch/jqtouch/glyphish/icons/115-bow-and-arrow.png +0 -0
  46. data/templates/jqtouch/jqtouch/glyphish/icons/116-controller.png +0 -0
  47. data/templates/jqtouch/jqtouch/glyphish/icons/117-todo.png +0 -0
  48. data/templates/jqtouch/jqtouch/glyphish/icons/118-coathanger.png +0 -0
  49. data/templates/jqtouch/jqtouch/glyphish/icons/119-piggybank.png +0 -0
  50. data/templates/jqtouch/jqtouch/glyphish/icons/12-eye.png +0 -0
  51. data/templates/jqtouch/jqtouch/glyphish/icons/120-headphones.png +0 -0
  52. data/templates/jqtouch/jqtouch/glyphish/icons/121-lanscape.png +0 -0
  53. data/templates/jqtouch/jqtouch/glyphish/icons/122-stats.png +0 -0
  54. data/templates/jqtouch/jqtouch/glyphish/icons/123-id-card.png +0 -0
  55. data/templates/jqtouch/jqtouch/glyphish/icons/124-bullhorn.png +0 -0
  56. data/templates/jqtouch/jqtouch/glyphish/icons/125-food.png +0 -0
  57. data/templates/jqtouch/jqtouch/glyphish/icons/126-moon.png +0 -0
  58. data/templates/jqtouch/jqtouch/glyphish/icons/127-sock.png +0 -0
  59. data/templates/jqtouch/jqtouch/glyphish/icons/128-bone.png +0 -0
  60. data/templates/jqtouch/jqtouch/glyphish/icons/129-golf.png +0 -0
  61. data/templates/jqtouch/jqtouch/glyphish/icons/13-target.png +0 -0
  62. data/templates/jqtouch/jqtouch/glyphish/icons/130-dice.png +0 -0
  63. data/templates/jqtouch/jqtouch/glyphish/icons/14-tag.png +0 -0
  64. data/templates/jqtouch/jqtouch/glyphish/icons/15-tags.png +0 -0
  65. data/templates/jqtouch/jqtouch/glyphish/icons/16-line-chart.png +0 -0
  66. data/templates/jqtouch/jqtouch/glyphish/icons/17-bar-chart.png +0 -0
  67. data/templates/jqtouch/jqtouch/glyphish/icons/18-envelope.png +0 -0
  68. data/templates/jqtouch/jqtouch/glyphish/icons/19-gear.png +0 -0
  69. data/templates/jqtouch/jqtouch/glyphish/icons/20-gear2.png +0 -0
  70. data/templates/jqtouch/jqtouch/glyphish/icons/21-skull.png +0 -0
  71. data/templates/jqtouch/jqtouch/glyphish/icons/22-skull-n-crossbones.png +0 -0
  72. data/templates/jqtouch/jqtouch/glyphish/icons/23-bird.png +0 -0
  73. data/templates/jqtouch/jqtouch/glyphish/icons/24-gift.png +0 -0
  74. data/templates/jqtouch/jqtouch/glyphish/icons/25-weather.png +0 -0
  75. data/templates/jqtouch/jqtouch/glyphish/icons/26-bandaid.png +0 -0
  76. data/templates/jqtouch/jqtouch/glyphish/icons/27-planet.png +0 -0
  77. data/templates/jqtouch/jqtouch/glyphish/icons/28-star.png +0 -0
  78. data/templates/jqtouch/jqtouch/glyphish/icons/29-heart.png +0 -0
  79. data/templates/jqtouch/jqtouch/glyphish/icons/30-key.png +0 -0
  80. data/templates/jqtouch/jqtouch/glyphish/icons/31-ipod.png +0 -0
  81. data/templates/jqtouch/jqtouch/glyphish/icons/32-iphone.png +0 -0
  82. data/templates/jqtouch/jqtouch/glyphish/icons/33-cabinet.png +0 -0
  83. data/templates/jqtouch/jqtouch/glyphish/icons/34-coffee.png +0 -0
  84. data/templates/jqtouch/jqtouch/glyphish/icons/35-shopping-bag.png +0 -0
  85. data/templates/jqtouch/jqtouch/glyphish/icons/36-toolbox.png +0 -0
  86. data/templates/jqtouch/jqtouch/glyphish/icons/37-suitcase.png +0 -0
  87. data/templates/jqtouch/jqtouch/glyphish/icons/38-airplane.png +0 -0
  88. data/templates/jqtouch/jqtouch/glyphish/icons/39-spraycan.png +0 -0
  89. data/templates/jqtouch/jqtouch/glyphish/icons/40-inbox.png +0 -0
  90. data/templates/jqtouch/jqtouch/glyphish/icons/41-picture-frame.png +0 -0
  91. data/templates/jqtouch/jqtouch/glyphish/icons/42-photos.png +0 -0
  92. data/templates/jqtouch/jqtouch/glyphish/icons/43-film-roll.png +0 -0
  93. data/templates/jqtouch/jqtouch/glyphish/icons/44-shoebox.png +0 -0
  94. data/templates/jqtouch/jqtouch/glyphish/icons/45-movie1.png +0 -0
  95. data/templates/jqtouch/jqtouch/glyphish/icons/46-movie2.png +0 -0
  96. data/templates/jqtouch/jqtouch/glyphish/icons/47-fuel.png +0 -0
  97. data/templates/jqtouch/jqtouch/glyphish/icons/48-fork-and-knife.png +0 -0
  98. data/templates/jqtouch/jqtouch/glyphish/icons/49-battery.png +0 -0
  99. data/templates/jqtouch/jqtouch/glyphish/icons/50-beaker.png +0 -0
  100. data/templates/jqtouch/jqtouch/glyphish/icons/51-outlet.png +0 -0
  101. data/templates/jqtouch/jqtouch/glyphish/icons/52-pinetree.png +0 -0
  102. data/templates/jqtouch/jqtouch/glyphish/icons/53-house.png +0 -0
  103. data/templates/jqtouch/jqtouch/glyphish/icons/54-lock.png +0 -0
  104. data/templates/jqtouch/jqtouch/glyphish/icons/55-network.png +0 -0
  105. data/templates/jqtouch/jqtouch/glyphish/icons/56-cloud.png +0 -0
  106. data/templates/jqtouch/jqtouch/glyphish/icons/57-download.png +0 -0
  107. data/templates/jqtouch/jqtouch/glyphish/icons/58-bookmark.png +0 -0
  108. data/templates/jqtouch/jqtouch/glyphish/icons/59-flag.png +0 -0
  109. data/templates/jqtouch/jqtouch/glyphish/icons/60-signpost.png +0 -0
  110. data/templates/jqtouch/jqtouch/glyphish/icons/61-brightness.png +0 -0
  111. data/templates/jqtouch/jqtouch/glyphish/icons/62-contrast.png +0 -0
  112. data/templates/jqtouch/jqtouch/glyphish/icons/63-runner.png +0 -0
  113. data/templates/jqtouch/jqtouch/glyphish/icons/64-zap.png +0 -0
  114. data/templates/jqtouch/jqtouch/glyphish/icons/65-note.png +0 -0
  115. data/templates/jqtouch/jqtouch/glyphish/icons/66-microphone.png +0 -0
  116. data/templates/jqtouch/jqtouch/glyphish/icons/67-tshirt.png +0 -0
  117. data/templates/jqtouch/jqtouch/glyphish/icons/68-paperclip.png +0 -0
  118. data/templates/jqtouch/jqtouch/glyphish/icons/69-display.png +0 -0
  119. data/templates/jqtouch/jqtouch/glyphish/icons/70-tv.png +0 -0
  120. data/templates/jqtouch/jqtouch/glyphish/icons/71-compass.png +0 -0
  121. data/templates/jqtouch/jqtouch/glyphish/icons/72-pin.png +0 -0
  122. data/templates/jqtouch/jqtouch/glyphish/icons/73-radar.png +0 -0
  123. data/templates/jqtouch/jqtouch/glyphish/icons/74-location.png +0 -0
  124. data/templates/jqtouch/jqtouch/glyphish/icons/75-phone.png +0 -0
  125. data/templates/jqtouch/jqtouch/glyphish/icons/76-baby.png +0 -0
  126. data/templates/jqtouch/jqtouch/glyphish/icons/77-ekg.png +0 -0
  127. data/templates/jqtouch/jqtouch/glyphish/icons/78-stopwatch.png +0 -0
  128. data/templates/jqtouch/jqtouch/glyphish/icons/79-medical-bag.png +0 -0
  129. data/templates/jqtouch/jqtouch/glyphish/icons/80-shopping-cart.png +0 -0
  130. data/templates/jqtouch/jqtouch/glyphish/icons/81-dashboard.png +0 -0
  131. data/templates/jqtouch/jqtouch/glyphish/icons/82-dogpaw.png +0 -0
  132. data/templates/jqtouch/jqtouch/glyphish/icons/83-calendar.png +0 -0
  133. data/templates/jqtouch/jqtouch/glyphish/icons/84-lightbulb.png +0 -0
  134. data/templates/jqtouch/jqtouch/glyphish/icons/85-trophy.png +0 -0
  135. data/templates/jqtouch/jqtouch/glyphish/icons/86-camera.png +0 -0
  136. data/templates/jqtouch/jqtouch/glyphish/icons/87-wineglass.png +0 -0
  137. data/templates/jqtouch/jqtouch/glyphish/icons/88-beermug.png +0 -0
  138. data/templates/jqtouch/jqtouch/glyphish/icons/89-dumbbell.png +0 -0
  139. data/templates/jqtouch/jqtouch/glyphish/icons/90-lifebuoy.png +0 -0
  140. data/templates/jqtouch/jqtouch/glyphish/icons/91-beaker2.png +0 -0
  141. data/templates/jqtouch/jqtouch/glyphish/icons/92-testtube.png +0 -0
  142. data/templates/jqtouch/jqtouch/glyphish/icons/93-thermometer.png +0 -0
  143. data/templates/jqtouch/jqtouch/glyphish/icons/94-pill.png +0 -0
  144. data/templates/jqtouch/jqtouch/glyphish/icons/95-equalizer.png +0 -0
  145. data/templates/jqtouch/jqtouch/glyphish/icons/96-book.png +0 -0
  146. data/templates/jqtouch/jqtouch/glyphish/icons/97-puzzle.png +0 -0
  147. data/templates/jqtouch/jqtouch/glyphish/icons/98-palette.png +0 -0
  148. data/templates/jqtouch/jqtouch/glyphish/icons/99-umbrella.png +0 -0
  149. data/templates/jqtouch/jqtouch/glyphish/mini-icons/01-refresh.png +0 -0
  150. data/templates/jqtouch/jqtouch/glyphish/mini-icons/02-redo.png +0 -0
  151. data/templates/jqtouch/jqtouch/glyphish/mini-icons/03-loopback.png +0 -0
  152. data/templates/jqtouch/jqtouch/glyphish/mini-icons/04-squiggle.png +0 -0
  153. data/templates/jqtouch/jqtouch/glyphish/mini-icons/05-shuffle.png +0 -0
  154. data/templates/jqtouch/jqtouch/glyphish/mini-icons/06-magnifying-glass.png +0 -0
  155. data/templates/jqtouch/jqtouch/glyphish/mini-icons/07-map-marker.png +0 -0
  156. data/templates/jqtouch/jqtouch/glyphish/mini-icons/08-chat.png +0 -0
  157. data/templates/jqtouch/jqtouch/glyphish/mini-icons/09-chat2.png +0 -0
  158. data/templates/jqtouch/jqtouch/glyphish/mini-icons/10-medical.png +0 -0
  159. data/templates/jqtouch/jqtouch/glyphish/mini-icons/100-coffee.png +0 -0
  160. data/templates/jqtouch/jqtouch/glyphish/mini-icons/101-gameplan.png +0 -0
  161. data/templates/jqtouch/jqtouch/glyphish/mini-icons/102-walk.png +0 -0
  162. data/templates/jqtouch/jqtouch/glyphish/mini-icons/103-map.png +0 -0
  163. data/templates/jqtouch/jqtouch/glyphish/mini-icons/104-index-cards.png +0 -0
  164. data/templates/jqtouch/jqtouch/glyphish/mini-icons/105-piano.png +0 -0
  165. data/templates/jqtouch/jqtouch/glyphish/mini-icons/106-sliders.png +0 -0
  166. data/templates/jqtouch/jqtouch/glyphish/mini-icons/107-widescreen.png +0 -0
  167. data/templates/jqtouch/jqtouch/glyphish/mini-icons/108-badge.png +0 -0
  168. data/templates/jqtouch/jqtouch/glyphish/mini-icons/109-chicken.png +0 -0
  169. data/templates/jqtouch/jqtouch/glyphish/mini-icons/11-clock.png +0 -0
  170. data/templates/jqtouch/jqtouch/glyphish/mini-icons/110-bug.png +0 -0
  171. data/templates/jqtouch/jqtouch/glyphish/mini-icons/111-user.png +0 -0
  172. data/templates/jqtouch/jqtouch/glyphish/mini-icons/112-group.png +0 -0
  173. data/templates/jqtouch/jqtouch/glyphish/mini-icons/113-navigation.png +0 -0
  174. data/templates/jqtouch/jqtouch/glyphish/mini-icons/114-balloon.png +0 -0
  175. data/templates/jqtouch/jqtouch/glyphish/mini-icons/115-bow-and-arrow.png +0 -0
  176. data/templates/jqtouch/jqtouch/glyphish/mini-icons/116-controller.png +0 -0
  177. data/templates/jqtouch/jqtouch/glyphish/mini-icons/117-todo.png +0 -0
  178. data/templates/jqtouch/jqtouch/glyphish/mini-icons/118-coathanger.png +0 -0
  179. data/templates/jqtouch/jqtouch/glyphish/mini-icons/119-piggybank.png +0 -0
  180. data/templates/jqtouch/jqtouch/glyphish/mini-icons/12-eye.png +0 -0
  181. data/templates/jqtouch/jqtouch/glyphish/mini-icons/120-headphones.png +0 -0
  182. data/templates/jqtouch/jqtouch/glyphish/mini-icons/121-lanscape.png +0 -0
  183. data/templates/jqtouch/jqtouch/glyphish/mini-icons/122-stats.png +0 -0
  184. data/templates/jqtouch/jqtouch/glyphish/mini-icons/123-id-card.png +0 -0
  185. data/templates/jqtouch/jqtouch/glyphish/mini-icons/124-bullhorn.png +0 -0
  186. data/templates/jqtouch/jqtouch/glyphish/mini-icons/125-food.png +0 -0
  187. data/templates/jqtouch/jqtouch/glyphish/mini-icons/126-moon.png +0 -0
  188. data/templates/jqtouch/jqtouch/glyphish/mini-icons/127-sock.png +0 -0
  189. data/templates/jqtouch/jqtouch/glyphish/mini-icons/128-bone.png +0 -0
  190. data/templates/jqtouch/jqtouch/glyphish/mini-icons/129-golf.png +0 -0
  191. data/templates/jqtouch/jqtouch/glyphish/mini-icons/13-target.png +0 -0
  192. data/templates/jqtouch/jqtouch/glyphish/mini-icons/130-dice.png +0 -0
  193. data/templates/jqtouch/jqtouch/glyphish/mini-icons/14-tag.png +0 -0
  194. data/templates/jqtouch/jqtouch/glyphish/mini-icons/15-tags.png +0 -0
  195. data/templates/jqtouch/jqtouch/glyphish/mini-icons/16-line-chart.png +0 -0
  196. data/templates/jqtouch/jqtouch/glyphish/mini-icons/17-bar-chart.png +0 -0
  197. data/templates/jqtouch/jqtouch/glyphish/mini-icons/18-envelope.png +0 -0
  198. data/templates/jqtouch/jqtouch/glyphish/mini-icons/19-gear.png +0 -0
  199. data/templates/jqtouch/jqtouch/glyphish/mini-icons/20-gear2.png +0 -0
  200. data/templates/jqtouch/jqtouch/glyphish/mini-icons/21-skull.png +0 -0
  201. data/templates/jqtouch/jqtouch/glyphish/mini-icons/22-skull-n-crossbones.png +0 -0
  202. data/templates/jqtouch/jqtouch/glyphish/mini-icons/23-bird.png +0 -0
  203. data/templates/jqtouch/jqtouch/glyphish/mini-icons/24-gift.png +0 -0
  204. data/templates/jqtouch/jqtouch/glyphish/mini-icons/25-weather.png +0 -0
  205. data/templates/jqtouch/jqtouch/glyphish/mini-icons/26-bandaid.png +0 -0
  206. data/templates/jqtouch/jqtouch/glyphish/mini-icons/27-planet.png +0 -0
  207. data/templates/jqtouch/jqtouch/glyphish/mini-icons/28-star.png +0 -0
  208. data/templates/jqtouch/jqtouch/glyphish/mini-icons/29-heart.png +0 -0
  209. data/templates/jqtouch/jqtouch/glyphish/mini-icons/30-key.png +0 -0
  210. data/templates/jqtouch/jqtouch/glyphish/mini-icons/31-ipod.png +0 -0
  211. data/templates/jqtouch/jqtouch/glyphish/mini-icons/32-iphone.png +0 -0
  212. data/templates/jqtouch/jqtouch/glyphish/mini-icons/33-cabinet.png +0 -0
  213. data/templates/jqtouch/jqtouch/glyphish/mini-icons/34-coffee.png +0 -0
  214. data/templates/jqtouch/jqtouch/glyphish/mini-icons/35-shopping-bag.png +0 -0
  215. data/templates/jqtouch/jqtouch/glyphish/mini-icons/36-toolbox.png +0 -0
  216. data/templates/jqtouch/jqtouch/glyphish/mini-icons/37-suitcase.png +0 -0
  217. data/templates/jqtouch/jqtouch/glyphish/mini-icons/38-airplane.png +0 -0
  218. data/templates/jqtouch/jqtouch/glyphish/mini-icons/39-spraycan.png +0 -0
  219. data/templates/jqtouch/jqtouch/glyphish/mini-icons/40-inbox.png +0 -0
  220. data/templates/jqtouch/jqtouch/glyphish/mini-icons/41-picture-frame.png +0 -0
  221. data/templates/jqtouch/jqtouch/glyphish/mini-icons/42-photos.png +0 -0
  222. data/templates/jqtouch/jqtouch/glyphish/mini-icons/43-film-roll.png +0 -0
  223. data/templates/jqtouch/jqtouch/glyphish/mini-icons/44-shoebox.png +0 -0
  224. data/templates/jqtouch/jqtouch/glyphish/mini-icons/45-movie1.png +0 -0
  225. data/templates/jqtouch/jqtouch/glyphish/mini-icons/46-movie2.png +0 -0
  226. data/templates/jqtouch/jqtouch/glyphish/mini-icons/47-fuel.png +0 -0
  227. data/templates/jqtouch/jqtouch/glyphish/mini-icons/48-fork-and-knife.png +0 -0
  228. data/templates/jqtouch/jqtouch/glyphish/mini-icons/49-battery.png +0 -0
  229. data/templates/jqtouch/jqtouch/glyphish/mini-icons/50-beaker.png +0 -0
  230. data/templates/jqtouch/jqtouch/glyphish/mini-icons/51-outlet.png +0 -0
  231. data/templates/jqtouch/jqtouch/glyphish/mini-icons/52-pinetree.png +0 -0
  232. data/templates/jqtouch/jqtouch/glyphish/mini-icons/53-house.png +0 -0
  233. data/templates/jqtouch/jqtouch/glyphish/mini-icons/54-lock.png +0 -0
  234. data/templates/jqtouch/jqtouch/glyphish/mini-icons/55-network.png +0 -0
  235. data/templates/jqtouch/jqtouch/glyphish/mini-icons/56-cloud.png +0 -0
  236. data/templates/jqtouch/jqtouch/glyphish/mini-icons/57-download.png +0 -0
  237. data/templates/jqtouch/jqtouch/glyphish/mini-icons/58-bookmark.png +0 -0
  238. data/templates/jqtouch/jqtouch/glyphish/mini-icons/59-flag.png +0 -0
  239. data/templates/jqtouch/jqtouch/glyphish/mini-icons/60-signpost.png +0 -0
  240. data/templates/jqtouch/jqtouch/glyphish/mini-icons/61-brightness.png +0 -0
  241. data/templates/jqtouch/jqtouch/glyphish/mini-icons/62-contrast.png +0 -0
  242. data/templates/jqtouch/jqtouch/glyphish/mini-icons/63-runner.png +0 -0
  243. data/templates/jqtouch/jqtouch/glyphish/mini-icons/64-zap.png +0 -0
  244. data/templates/jqtouch/jqtouch/glyphish/mini-icons/65-note.png +0 -0
  245. data/templates/jqtouch/jqtouch/glyphish/mini-icons/66-microphone.png +0 -0
  246. data/templates/jqtouch/jqtouch/glyphish/mini-icons/67-tshirt.png +0 -0
  247. data/templates/jqtouch/jqtouch/glyphish/mini-icons/68-paperclip.png +0 -0
  248. data/templates/jqtouch/jqtouch/glyphish/mini-icons/69-display.png +0 -0
  249. data/templates/jqtouch/jqtouch/glyphish/mini-icons/70-tv.png +0 -0
  250. data/templates/jqtouch/jqtouch/glyphish/mini-icons/71-compass.png +0 -0
  251. data/templates/jqtouch/jqtouch/glyphish/mini-icons/72-pin.png +0 -0
  252. data/templates/jqtouch/jqtouch/glyphish/mini-icons/73-radar.png +0 -0
  253. data/templates/jqtouch/jqtouch/glyphish/mini-icons/74-location.png +0 -0
  254. data/templates/jqtouch/jqtouch/glyphish/mini-icons/75-phone.png +0 -0
  255. data/templates/jqtouch/jqtouch/glyphish/mini-icons/76-baby.png +0 -0
  256. data/templates/jqtouch/jqtouch/glyphish/mini-icons/77-ekg.png +0 -0
  257. data/templates/jqtouch/jqtouch/glyphish/mini-icons/78-stopwatch.png +0 -0
  258. data/templates/jqtouch/jqtouch/glyphish/mini-icons/79-medical-bag.png +0 -0
  259. data/templates/jqtouch/jqtouch/glyphish/mini-icons/80-shopping-cart.png +0 -0
  260. data/templates/jqtouch/jqtouch/glyphish/mini-icons/81-dashboard.png +0 -0
  261. data/templates/jqtouch/jqtouch/glyphish/mini-icons/82-dogpaw.png +0 -0
  262. data/templates/jqtouch/jqtouch/glyphish/mini-icons/83-calendar.png +0 -0
  263. data/templates/jqtouch/jqtouch/glyphish/mini-icons/84-lightbulb.png +0 -0
  264. data/templates/jqtouch/jqtouch/glyphish/mini-icons/85-trophy.png +0 -0
  265. data/templates/jqtouch/jqtouch/glyphish/mini-icons/86-camera.png +0 -0
  266. data/templates/jqtouch/jqtouch/glyphish/mini-icons/87-wineglass.png +0 -0
  267. data/templates/jqtouch/jqtouch/glyphish/mini-icons/88-beermug.png +0 -0
  268. data/templates/jqtouch/jqtouch/glyphish/mini-icons/89-dumbbell.png +0 -0
  269. data/templates/jqtouch/jqtouch/glyphish/mini-icons/90-lifebuoy.png +0 -0
  270. data/templates/jqtouch/jqtouch/glyphish/mini-icons/91-beaker2.png +0 -0
  271. data/templates/jqtouch/jqtouch/glyphish/mini-icons/92-testtube.png +0 -0
  272. data/templates/jqtouch/jqtouch/glyphish/mini-icons/93-thermometer.png +0 -0
  273. data/templates/jqtouch/jqtouch/glyphish/mini-icons/94-pill.png +0 -0
  274. data/templates/jqtouch/jqtouch/glyphish/mini-icons/95-equalizer.png +0 -0
  275. data/templates/jqtouch/jqtouch/glyphish/mini-icons/96-book.png +0 -0
  276. data/templates/jqtouch/jqtouch/glyphish/mini-icons/97-puzzle.png +0 -0
  277. data/templates/jqtouch/jqtouch/glyphish/mini-icons/98-palette.png +0 -0
  278. data/templates/jqtouch/jqtouch/glyphish/mini-icons/99-umbrella.png +0 -0
  279. data/templates/jqtouch/jqtouch/ical/bottom_bar.png +0 -0
  280. data/templates/jqtouch/jqtouch/ical/calpad.jpg +0 -0
  281. data/templates/jqtouch/jqtouch/ical/cells.png +0 -0
  282. data/templates/jqtouch/jqtouch/ical/footer.png +0 -0
  283. data/templates/jqtouch/jqtouch/ical/header.png +0 -0
  284. data/templates/jqtouch/jqtouch/ical/header_left.png +0 -0
  285. data/templates/jqtouch/jqtouch/ical/header_right.png +0 -0
  286. data/templates/jqtouch/jqtouch/ical/jqt_startup.png +0 -0
  287. data/templates/jqtouch/jqtouch/ical/jqtouch-ical.png +0 -0
  288. data/templates/jqtouch/jqtouch/iphone-emulator.scss +1 -1
  289. data/templates/jqtouch/jqtouch/jqt.apple.scss +30 -30
  290. data/templates/jqtouch/jqtouch/jqt.jqt.scss +40 -40
  291. data/templates/jqtouch/jqtouch/jqtouch.scss +533 -168
  292. data/templates/jqtouch/jqtouch/sw/alpha.png +0 -0
  293. data/templates/jqtouch/jqtouch/sw/button-cancel.png +0 -0
  294. data/templates/jqtouch/jqtouch/sw/button-done.png +0 -0
  295. data/templates/jqtouch/jqtouch/sw/header.png +0 -0
  296. data/templates/jqtouch/jqtouch/sw/slot-border.png +0 -0
  297. data/templates/jqtouch/jquery.jqtouch.js +2049 -25
  298. data/templates/jqtouch/jquery.jqtouch.min.js +1 -26
  299. data/templates/jqtouch/manifest.rb +276 -1
  300. data/templates/jrails-1.3/config/initializers/jrails.rb +2 -2
  301. data/templates/jrails-1.3/{jquery-ui-1.7.2.js → jquery-ui-1.7.3.js} +4730 -4716
  302. data/templates/jrails-1.3/jquery-ui-1.7.3.min.js +690 -0
  303. data/templates/jrails-1.3/jquery.ui/_theme.scss +36 -36
  304. data/templates/jrails-1.3/jquery.ui/contextMenu.scss +7 -7
  305. data/templates/jrails-1.3/manifest.rb +2 -2
  306. data/templates/jrails-1.4/config/initializers/jrails.rb +2 -2
  307. data/templates/jrails-1.4/i18n/jquery.ui/datepicker-fr-CH.js +6 -6
  308. data/templates/jrails-1.4/i18n/jquery.ui/datepicker-fr-CH.min.js +1 -1
  309. data/templates/jrails-1.4/i18n/jquery.ui/datepicker-pl.js +1 -1
  310. data/templates/jrails-1.4/i18n/jquery.ui/datepicker-pl.min.js +1 -1
  311. data/templates/jrails-1.4/{jquery-ui-1.8.js → jquery-ui-1.8.1.js} +6729 -6597
  312. data/templates/jrails-1.4/{jquery-ui-1.8.min.js → jquery-ui-1.8.1.min.js} +304 -305
  313. data/templates/jrails-1.4/jquery.ui/_theme.scss +45 -45
  314. data/templates/jrails-1.4/jquery.ui/contextMenu.scss +7 -7
  315. data/templates/jrails-1.4/manifest.rb +2 -2
  316. data/templates/ribbon/jquery.ui/ribbon.office/arrow.png +0 -0
  317. data/templates/ribbon/jquery.ui/ribbon.office/arrow_down.png +0 -0
  318. data/templates/ribbon/jquery.ui/ribbon.office/bg.png +0 -0
  319. data/templates/ribbon/jquery.ui/ribbon.office/item_background.png +0 -0
  320. data/templates/ribbon/jquery.ui/ribbon.office/item_small_background.png +0 -0
  321. data/templates/ribbon/jquery.ui/ribbon.office/menu_background.png +0 -0
  322. data/templates/ribbon/jquery.ui/ribbon.office/menu_bottom.png +0 -0
  323. data/templates/ribbon/jquery.ui/ribbon.office/menu_dropdownitembg.png +0 -0
  324. data/templates/ribbon/jquery.ui/ribbon.office/menu_dropdownitembghover.png +0 -0
  325. data/templates/ribbon/jquery.ui/ribbon.office/menu_item_hover.png +0 -0
  326. data/templates/ribbon/jquery.ui/ribbon.office/menu_middle.png +0 -0
  327. data/templates/ribbon/jquery.ui/ribbon.office/menu_top.png +0 -0
  328. data/templates/ribbon/jquery.ui/ribbon.office/menu_top_backstage.png +0 -0
  329. data/templates/ribbon/jquery.ui/ribbon.office/menu_top_backstage2.png +0 -0
  330. data/templates/ribbon/jquery.ui/ribbon.office/menuitem_background.png +0 -0
  331. data/templates/ribbon/jquery.ui/ribbon.office/orb.png +0 -0
  332. data/templates/ribbon/jquery.ui/ribbon.office/orb_hover.png +0 -0
  333. data/templates/ribbon/jquery.ui/ribbon.office/orb_office.png +0 -0
  334. data/templates/ribbon/jquery.ui/ribbon.office/orb_office_hover.png +0 -0
  335. data/templates/ribbon/jquery.ui/ribbon.office/orb_submenu_item_hover.png +0 -0
  336. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-firstLevel-hover.png +0 -0
  337. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-rightColumn-wide.png +0 -0
  338. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-subMenu-item-hover.png +0 -0
  339. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-subMenu-item.png +0 -0
  340. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-subMenu-itemSquare-hover.png +0 -0
  341. data/templates/ribbon/jquery.ui/ribbon.office/ribbon-backstage-subMenu-itemSquare.png +0 -0
  342. data/templates/ribbon/jquery.ui/ribbon.office/top_background.png +0 -0
  343. data/templates/ribbon/jquery.ui/ribbon.office.scss +444 -0
  344. data/templates/ribbon/jquery.ui/ribbon.simple.scss +17 -9
  345. data/templates/ribbon/jquery.ui/ribbon.windows7.scss +27 -37
  346. data/templates/ribbon/manifest.rb +28 -0
  347. metadata +310 -7
  348. data/templates/jrails-1.3/jquery-ui-1.7.2.min.js +0 -688
@@ -17,8 +17,8 @@
17
17
  (c) 2009 by jQTouch project members.
18
18
  See LICENSE.txt for license.
19
19
 
20
- $Revision: 147 $
21
- $Date: 2010-04-19 03:45:31 +0200 (Mo, 19. Apr 2010) $
20
+ $Revision: 148 $
21
+ $Date: 2010-04-24 23:00:00 +0200 (Sa, 24. Apr 2010) $
22
22
  $LastChangedBy: davidcolbykaneda $
23
23
 
24
24
  */
@@ -45,6 +45,7 @@
45
45
  lastAnimationTime=0,
46
46
  touchSelectors=[],
47
47
  publicObj={},
48
+ tapBuffer=351,
48
49
  extensions=$.jQTouch.prototype.extensions,
49
50
  defaultAnimations=['slide','flip','slideup','swap','cube','pop','dissolve','fade','back'],
50
51
  animations=[],
@@ -154,23 +155,27 @@
154
155
 
155
156
  if (jQTSettings.useFastTouch && $.support.touch) {
156
157
  $body.click(function(e) {
157
- var $el = $(e.target);
158
+ var timeDiff = (new Date()).getTime() - lastAnimationTime;
159
+ if (timeDiff > tapBuffer) {
160
+ var $el = $(e.target);
158
161
 
159
- if ($el.attr('nodeName')!=='A' && $el.attr('nodeName')!=='AREA' && $el.attr('nodeName')!=='INPUT') {
160
- $el = $el.closest('a, area');
161
- }
162
+ if ($el.attr('nodeName')!=='A' && $el.attr('nodeName')!=='AREA' && $el.attr('nodeName')!=='INPUT') {
163
+ $el = $el.closest('a, area');
164
+ }
162
165
 
163
- if ($el.isExternalLink()) {
164
- return true;
165
- } else {
166
- return false;
166
+ if ($el.isExternalLink()) {
167
+ return true;
168
+ }
167
169
  }
170
+
171
+ return false;
172
+
168
173
  });
169
174
 
170
175
  // This additionally gets rid of form focusses
171
176
  $body.mousedown(function(e) {
172
177
  var timeDiff = (new Date()).getTime() - lastAnimationTime;
173
- if (timeDiff < 200) {
178
+ if (timeDiff < tapBuffer) {
174
179
  return false;
175
180
  }
176
181
  });
@@ -357,27 +362,29 @@
357
362
  // Collapse the keyboard
358
363
  $(':focus').blur();
359
364
 
360
- fromPage.css('top', -window.pageYOffset);
361
- toPage.css('top', 0);
362
-
363
365
  // Make sure we are scrolled up to hide location bar
364
- scrollTo(0, 0);
366
+ toPage.css('top', window.pageYOffset);
365
367
 
366
368
  // Define callback to run after animation completes
367
369
  var callback = function animationEnd(event) {
370
+
371
+ fromPage[0].removeEventListener('webkitTransitionEnd', callback);
372
+ fromPage[0].removeEventListener('webkitAnimationEnd', callback);
373
+
368
374
  if (animation) {
369
- toPage.removeClass('in ' + animation.name);
370
- fromPage.removeClass('current out ' + animation.name);
375
+ toPage.removeClass('start in ' + animation.name);
376
+ fromPage.removeClass('start out current ' + animation.name);
371
377
  if (backwards) {
372
378
  toPage.toggleClass('reverse');
373
379
  fromPage.toggleClass('reverse');
374
380
  }
381
+ toPage.css('top', 0);
375
382
  } else {
376
383
  fromPage.removeClass('current');
377
384
  }
378
385
 
379
- toPage.trigger('pageAnimationEnd', { direction: 'in' });
380
- fromPage.trigger('pageAnimationEnd', { direction: 'out' });
386
+ toPage.trigger('pageAnimationEnd', { direction: 'in', reverse: backwards });
387
+ fromPage.trigger('pageAnimationEnd', { direction: 'out', reverse: backwards });
381
388
 
382
389
  clearInterval(hashCheckInterval);
383
390
  currentPage = toPage;
@@ -390,20 +397,31 @@
390
397
  }
391
398
  lastAnimationTime = (new Date()).getTime();
392
399
  tapReady = true;
400
+
393
401
  }
394
402
 
395
403
  fromPage.trigger('pageAnimationStart', { direction: 'out' });
396
404
  toPage.trigger('pageAnimationStart', { direction: 'in' });
397
405
 
398
406
  if ($.support.WebKitAnimationEvent && animation && jQTSettings.useAnimations) {
399
- toPage.one('webkitAnimationEnd', callback);
400
407
  tapReady = false;
401
408
  if (backwards) {
402
409
  toPage.toggleClass('reverse');
403
410
  fromPage.toggleClass('reverse');
404
411
  }
412
+
413
+ // Support both transitions and animations
414
+ fromPage[0].addEventListener('webkitTransitionEnd', callback);
415
+ fromPage[0].addEventListener('webkitAnimationEnd', callback);
416
+
405
417
  toPage.addClass(animation.name + ' in current');
406
418
  fromPage.addClass(animation.name + ' out');
419
+
420
+ setTimeout(function(){
421
+ toPage.addClass('start');
422
+ fromPage.addClass('start');
423
+ }, 0);
424
+
407
425
 
408
426
  } else {
409
427
  toPage.addClass('current');
@@ -519,9 +537,8 @@
519
537
  }
520
538
  }
521
539
  function updateOrientation() {
522
- orientation = Math.abs(window.orientation) == 90 ? 'landscape' : 'profile';
523
- $body.removeClass('profile landscape').addClass(orientation).trigger('turn', {orientation: orientation});
524
- // scrollTo(0, 0);
540
+ orientation = Math.abs(window.orientation) == 90 ? 'landscape' : 'portrait';
541
+ $body.removeClass('portrait landscape').addClass(orientation).trigger('turn', {orientation: orientation});
525
542
  }
526
543
  function handleTouch(e) {
527
544
  var $el = $(e.target);
@@ -607,7 +624,7 @@
607
624
  }
608
625
  $.fn.swipe = function(fn) {
609
626
  if ($.isFunction(fn)) {
610
- return $(this).bind('swipe', fn);
627
+ return $(this).live('swipe', fn);
611
628
  } else {
612
629
  return $(this).trigger('swipe');
613
630
  }
@@ -622,7 +639,7 @@
622
639
  }
623
640
  $.fn.isExternalLink = function() {
624
641
  var $el = $(this);
625
- return ($el.attr('target') == '_blank' || $el.attr('rel') == 'external' || $el.is('input[type="checkbox"], input[type="radio"], a[href^="http://maps.google.com:"], a[href^="mailto:"], a[href^="tel:"], a[href^="javascript:"], a[href*="youtube.com/v"], a[href*="youtube.com/watch"]'));
642
+ return ($el.attr('target') == '_blank' || $el.attr('rel') == 'external' || $el.is('input[type="checkbox"], input[type="radio"], a[href^="http://maps.google.com"], a[href^="mailto:"], a[href^="tel:"], a[href^="javascript:"], a[href*="youtube.com/v"], a[href*="youtube.com/watch"]'));
626
643
  }
627
644
 
628
645
  publicObj = {
@@ -705,6 +722,894 @@
705
722
  }
706
723
  })(jQuery);
707
724
 
725
+ /**
726
+ *
727
+ * Find more about the Spinning Wheel function at
728
+ * http://cubiq.org/spinning-wheel-on-webkit-for-iphone-ipod-touch/11
729
+ *
730
+ * Copyright (c) 2009 Matteo Spinelli, http://cubiq.org/
731
+ * Released under MIT license
732
+ * http://cubiq.org/dropbox/mit-license.txt
733
+ *
734
+ * Version 1.4 - Last updated: 2009.07.09
735
+ *
736
+ */
737
+
738
+ var SpinningWheel = {
739
+ cellHeight: 44,
740
+ friction: 0.003,
741
+ slotData: [],
742
+
743
+
744
+ /**
745
+ *
746
+ * Event handler
747
+ *
748
+ */
749
+
750
+ handleEvent: function (e) {
751
+ if (e.type == 'touchstart') {
752
+ this.lockScreen(e);
753
+ if (e.currentTarget.id == 'sw-cancel' || e.currentTarget.id == 'sw-done') {
754
+ this.tapDown(e);
755
+ } else if (e.currentTarget.id == 'sw-frame') {
756
+ this.scrollStart(e);
757
+ }
758
+ } else if (e.type == 'touchmove') {
759
+ this.lockScreen(e);
760
+
761
+ if (e.currentTarget.id == 'sw-cancel' || e.currentTarget.id == 'sw-done') {
762
+ this.tapCancel(e);
763
+ } else if (e.currentTarget.id == 'sw-frame') {
764
+ this.scrollMove(e);
765
+ }
766
+ } else if (e.type == 'touchend') {
767
+ if (e.currentTarget.id == 'sw-cancel' || e.currentTarget.id == 'sw-done') {
768
+ this.tapUp(e);
769
+ } else if (e.currentTarget.id == 'sw-frame') {
770
+ this.scrollEnd(e);
771
+ }
772
+ } else if (e.type == 'webkitTransitionEnd') {
773
+ if (e.target.id == 'sw-wrapper') {
774
+ // this.destroy();
775
+ } else {
776
+ this.backWithinBoundaries(e);
777
+ }
778
+ } else if (e.type == 'orientationchange') {
779
+ this.onOrientationChange(e);
780
+ } else if (e.type == 'scroll') {
781
+ this.onScroll(e);
782
+ }
783
+ },
784
+
785
+
786
+ /**
787
+ *
788
+ * Global events
789
+ *
790
+ */
791
+
792
+ onOrientationChange: function (e) {
793
+ window.scrollTo(0, 0);
794
+ this.swWrapper.style.top = window.innerHeight + window.pageYOffset + 'px';
795
+ this.calculateSlotsWidth();
796
+ },
797
+
798
+ onScroll: function (e) {
799
+ this.swWrapper.style.top = window.innerHeight + window.pageYOffset + 'px';
800
+ },
801
+
802
+ lockScreen: function (e) {
803
+ e.preventDefault();
804
+ e.stopPropagation();
805
+ },
806
+
807
+
808
+ /**
809
+ *
810
+ * Initialization
811
+ *
812
+ */
813
+
814
+ reset: function () {
815
+ this.slotEl = [];
816
+
817
+ this.activeSlot = null;
818
+
819
+ this.swWrapper = undefined;
820
+ this.swSlotWrapper = undefined;
821
+ this.swSlots = undefined;
822
+ this.swFrame = undefined;
823
+ },
824
+
825
+ calculateSlotsWidth: function () {
826
+ var div = this.swSlots.getElementsByTagName('div');
827
+ for (var i = 0; i < div.length; i += 1) {
828
+ this.slotEl[i].slotWidth = div[i].offsetWidth;
829
+ }
830
+ },
831
+
832
+ create: function () {
833
+ var i, l, out, ul, div;
834
+
835
+ this.reset(); // Initialize object variables
836
+
837
+ // Create the Spinning Wheel main wrapper
838
+ div = document.createElement('div');
839
+ div.id = 'sw-wrapper';
840
+ div.style.top = window.innerHeight + window.pageYOffset + 'px'; // Place the SW down the actual viewing screen
841
+ div.style.webkitTransitionProperty = '-webkit-transform';
842
+ // div.innerHTML = '<div id="sw-header"><div id="sw-cancel">Cancel</' + 'div><div id="sw-done">Done</' + 'div></' + 'div><div id="sw-slots-wrapper"><div id="sw-slots"></' + 'div></' + 'div><div id="sw-frame"></' + 'div>';
843
+ div.innerHTML = '<div id="sw-slots-wrapper"><div id="sw-slots"></' + 'div></' + 'div><div id="sw-frame"></' + 'div>';
844
+
845
+ document.body.appendChild(div);
846
+
847
+ this.swWrapper = div; // The SW wrapper
848
+ this.swSlotWrapper = document.getElementById('sw-slots-wrapper'); // Slots visible area
849
+ this.swSlots = document.getElementById('sw-slots'); // Pseudo table element (inner wrapper)
850
+ this.swFrame = document.getElementById('sw-frame'); // The scrolling controller
851
+
852
+ // Create HTML slot elements
853
+ for (l = 0; l < this.slotData.length; l += 1) {
854
+ // Create the slot
855
+ ul = document.createElement('ul');
856
+ out = '';
857
+ for (i in this.slotData[l].values) {
858
+ out += '<li>' + this.slotData[l].values[i] + '<' + '/li>';
859
+ }
860
+ ul.innerHTML = out;
861
+
862
+ div = document.createElement('div'); // Create slot container
863
+ div.className = this.slotData[l].style; // Add styles to the container
864
+ div.appendChild(ul);
865
+
866
+ // Append the slot to the wrapper
867
+ this.swSlots.appendChild(div);
868
+
869
+ ul.slotPosition = l; // Save the slot position inside the wrapper
870
+ ul.slotYPosition = 0;
871
+ ul.slotWidth = 0;
872
+ ul.slotMaxScroll = this.swSlotWrapper.clientHeight - ul.clientHeight - 86;
873
+ ul.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)'; // Add default transition
874
+
875
+ this.slotEl.push(ul); // Save the slot for later use
876
+
877
+ // Place the slot to its default position (if other than 0)
878
+ if (this.slotData[l].defaultValue) {
879
+ this.scrollToValue(l, this.slotData[l].defaultValue);
880
+ }
881
+ }
882
+
883
+ this.calculateSlotsWidth();
884
+
885
+ // Global events
886
+ // document.addEventListener('touchstart', this, false); // Prevent page scrolling
887
+ document.addEventListener('touchmove', this, false); // Prevent page scrolling
888
+ window.addEventListener('orientationchange', this, true); // Optimize SW on orientation change
889
+ window.addEventListener('scroll', this, true); // Reposition SW on page scroll
890
+
891
+ // Cancel/Done buttons events
892
+ // document.getElementById('sw-cancel').addEventListener('touchstart', this, false);
893
+ document.getElementById('sw-done').addEventListener('touchstart', this, false);
894
+
895
+ // Add scrolling to the slots
896
+ this.swFrame.addEventListener('touchstart', this, false);
897
+ },
898
+
899
+ open: function () {
900
+ this.create();
901
+
902
+ this.swWrapper.style.webkitTransitionTimingFunction = 'ease-out';
903
+ this.swWrapper.style.webkitTransitionDuration = '400ms';
904
+ this.swWrapper.style.webkitTransform = 'translate3d(0, -210px, 0)';
905
+ },
906
+
907
+
908
+ /**
909
+ *
910
+ * Unload
911
+ *
912
+ */
913
+
914
+ destroy: function () {
915
+ this.swWrapper.removeEventListener('webkitTransitionEnd', this, false);
916
+
917
+ this.swFrame.removeEventListener('touchstart', this, false);
918
+
919
+ // document.getElementById('sw-cancel').removeEventListener('touchstart', this, false);
920
+ document.getElementById('sw-done').removeEventListener('touchstart', this, false);
921
+
922
+ // document.removeEventListener('touchstart', this, false);
923
+ document.removeEventListener('touchmove', this, false);
924
+ window.removeEventListener('orientationchange', this, true);
925
+ window.removeEventListener('scroll', this, true);
926
+
927
+ this.slotData = [];
928
+ this.cancelAction = function () {
929
+ return false;
930
+ };
931
+
932
+ this.cancelDone = function () {
933
+ return true;
934
+ };
935
+
936
+ this.reset();
937
+
938
+ document.body.removeChild(document.getElementById('sw-wrapper'));
939
+ },
940
+
941
+ close: function () {
942
+ this.swWrapper.style.webkitTransitionTimingFunction = 'ease-in';
943
+ this.swWrapper.style.webkitTransitionDuration = '400ms';
944
+ this.swWrapper.style.webkitTransform = 'translate3d(0, 0, 0)';
945
+
946
+ this.swWrapper.addEventListener('webkitTransitionEnd', this, false);
947
+ },
948
+
949
+
950
+ /**
951
+ *
952
+ * Generic methods
953
+ *
954
+ */
955
+
956
+ addSlot: function (values, style, defaultValue) {
957
+ if (!style) {
958
+ style = '';
959
+ }
960
+
961
+ style = style.split(' ');
962
+
963
+ for (var i = 0; i < style.length; i += 1) {
964
+ style[i] = 'sw-' + style[i];
965
+ }
966
+
967
+ style = style.join(' ');
968
+
969
+ var obj = { 'values': values, 'style': style, 'defaultValue': defaultValue };
970
+ this.slotData.push(obj);
971
+ },
972
+
973
+ getSelectedValues: function () {
974
+ var index, count,
975
+ i, l,
976
+ keys = [], values = [];
977
+
978
+ for (i in this.slotEl) {
979
+ // Remove any residual animation
980
+ this.slotEl[i].removeEventListener('webkitTransitionEnd', this, false);
981
+ this.slotEl[i].style.webkitTransitionDuration = '0';
982
+
983
+ if (this.slotEl[i].slotYPosition > 0) {
984
+ this.setPosition(i, 0);
985
+ } else if (this.slotEl[i].slotYPosition < this.slotEl[i].slotMaxScroll) {
986
+ this.setPosition(i, this.slotEl[i].slotMaxScroll);
987
+ }
988
+
989
+ index = -Math.round(this.slotEl[i].slotYPosition / this.cellHeight);
990
+
991
+ count = 0;
992
+ for (l in this.slotData[i].values) {
993
+ if (count == index) {
994
+ keys.push(l);
995
+ values.push(this.slotData[i].values[l]);
996
+ break;
997
+ }
998
+
999
+ count += 1;
1000
+ }
1001
+ }
1002
+
1003
+ return { 'keys': keys, 'values': values };
1004
+ },
1005
+
1006
+
1007
+ /**
1008
+ *
1009
+ * Rolling slots
1010
+ *
1011
+ */
1012
+
1013
+ setPosition: function (slot, pos) {
1014
+ this.slotEl[slot].slotYPosition = pos;
1015
+ this.slotEl[slot].style.webkitTransform = 'translate3d(0, ' + pos + 'px, 0)';
1016
+ },
1017
+
1018
+ scrollStart: function (e) {
1019
+ // Find the clicked slot
1020
+ var xPos = e.targetTouches[0].clientX - this.swSlots.offsetLeft; // Clicked position minus left offset (should be 11px)
1021
+
1022
+ // Find tapped slot
1023
+ var slot = 0;
1024
+ for (var i = 0; i < this.slotEl.length; i += 1) {
1025
+ slot += this.slotEl[i].slotWidth;
1026
+
1027
+ if (xPos < slot) {
1028
+ this.activeSlot = i;
1029
+ break;
1030
+ }
1031
+ }
1032
+
1033
+ // If slot is readonly do nothing
1034
+ if (this.slotData[this.activeSlot].style.match('readonly')) {
1035
+ this.swFrame.removeEventListener('touchmove', this, false);
1036
+ this.swFrame.removeEventListener('touchend', this, false);
1037
+ return false;
1038
+ }
1039
+
1040
+ this.slotEl[this.activeSlot].removeEventListener('webkitTransitionEnd', this, false); // Remove transition event (if any)
1041
+ this.slotEl[this.activeSlot].style.webkitTransitionDuration = '0'; // Remove any residual transition
1042
+
1043
+ // Stop and hold slot position
1044
+ var theTransform = window.getComputedStyle(this.slotEl[this.activeSlot]).webkitTransform;
1045
+ theTransform = new WebKitCSSMatrix(theTransform).m42;
1046
+ if (theTransform != this.slotEl[this.activeSlot].slotYPosition) {
1047
+ this.setPosition(this.activeSlot, theTransform);
1048
+ }
1049
+
1050
+ this.startY = e.targetTouches[0].clientY;
1051
+ this.scrollStartY = this.slotEl[this.activeSlot].slotYPosition;
1052
+ this.scrollStartTime = e.timeStamp;
1053
+
1054
+ this.swFrame.addEventListener('touchmove', this, false);
1055
+ this.swFrame.addEventListener('touchend', this, false);
1056
+
1057
+ return true;
1058
+ },
1059
+
1060
+ scrollMove: function (e) {
1061
+ var topDelta = e.targetTouches[0].clientY - this.startY;
1062
+
1063
+ if (this.slotEl[this.activeSlot].slotYPosition > 0 || this.slotEl[this.activeSlot].slotYPosition < this.slotEl[this.activeSlot].slotMaxScroll) {
1064
+ topDelta /= 2;
1065
+ }
1066
+
1067
+ this.setPosition(this.activeSlot, this.slotEl[this.activeSlot].slotYPosition + topDelta);
1068
+ this.startY = e.targetTouches[0].clientY;
1069
+
1070
+ // Prevent slingshot effect
1071
+ if (e.timeStamp - this.scrollStartTime > 80) {
1072
+ this.scrollStartY = this.slotEl[this.activeSlot].slotYPosition;
1073
+ this.scrollStartTime = e.timeStamp;
1074
+ }
1075
+ },
1076
+
1077
+ scrollEnd: function (e) {
1078
+ this.swFrame.removeEventListener('touchmove', this, false);
1079
+ this.swFrame.removeEventListener('touchend', this, false);
1080
+
1081
+ // If we are outside of the boundaries, let's go back to the sheepfold
1082
+ if (this.slotEl[this.activeSlot].slotYPosition > 0 || this.slotEl[this.activeSlot].slotYPosition < this.slotEl[this.activeSlot].slotMaxScroll) {
1083
+ this.scrollTo(this.activeSlot, this.slotEl[this.activeSlot].slotYPosition > 0 ? 0 : this.slotEl[this.activeSlot].slotMaxScroll);
1084
+ return false;
1085
+ }
1086
+
1087
+ // Lame formula to calculate a fake deceleration
1088
+ var scrollDistance = this.slotEl[this.activeSlot].slotYPosition - this.scrollStartY;
1089
+
1090
+ // The drag session was too short
1091
+ if (scrollDistance < this.cellHeight / 1.5 && scrollDistance > -this.cellHeight / 1.5) {
1092
+ if (this.slotEl[this.activeSlot].slotYPosition % this.cellHeight) {
1093
+ this.scrollTo(this.activeSlot, Math.round(this.slotEl[this.activeSlot].slotYPosition / this.cellHeight) * this.cellHeight, '100ms');
1094
+ }
1095
+
1096
+ return false;
1097
+ }
1098
+
1099
+ var scrollDuration = e.timeStamp - this.scrollStartTime;
1100
+
1101
+ var newDuration = (2 * scrollDistance / scrollDuration) / this.friction;
1102
+ var newScrollDistance = (this.friction / 2) * (newDuration * newDuration);
1103
+
1104
+ if (newDuration < 0) {
1105
+ newDuration = -newDuration;
1106
+ newScrollDistance = -newScrollDistance;
1107
+ }
1108
+
1109
+ var newPosition = this.slotEl[this.activeSlot].slotYPosition + newScrollDistance;
1110
+
1111
+ if (newPosition > 0) {
1112
+ // Prevent the slot to be dragged outside the visible area (top margin)
1113
+ newPosition /= 2;
1114
+ newDuration /= 3;
1115
+
1116
+ if (newPosition > this.swSlotWrapper.clientHeight / 4) {
1117
+ newPosition = this.swSlotWrapper.clientHeight / 4;
1118
+ }
1119
+ } else if (newPosition < this.slotEl[this.activeSlot].slotMaxScroll) {
1120
+ // Prevent the slot to be dragged outside the visible area (bottom margin)
1121
+ newPosition = (newPosition - this.slotEl[this.activeSlot].slotMaxScroll) / 2 + this.slotEl[this.activeSlot].slotMaxScroll;
1122
+ newDuration /= 3;
1123
+
1124
+ if (newPosition < this.slotEl[this.activeSlot].slotMaxScroll - this.swSlotWrapper.clientHeight / 4) {
1125
+ newPosition = this.slotEl[this.activeSlot].slotMaxScroll - this.swSlotWrapper.clientHeight / 4;
1126
+ }
1127
+ } else {
1128
+ newPosition = Math.round(newPosition / this.cellHeight) * this.cellHeight;
1129
+ }
1130
+
1131
+ this.scrollTo(this.activeSlot, Math.round(newPosition), Math.round(newDuration) + 'ms');
1132
+
1133
+ return true;
1134
+ },
1135
+
1136
+ scrollTo: function (slotNum, dest, runtime) {
1137
+ this.slotEl[slotNum].style.webkitTransitionDuration = runtime ? runtime : '100ms';
1138
+ this.setPosition(slotNum, dest ? dest : 0);
1139
+
1140
+ // If we are outside of the boundaries go back to the sheepfold
1141
+ if (this.slotEl[slotNum].slotYPosition > 0 || this.slotEl[slotNum].slotYPosition < this.slotEl[slotNum].slotMaxScroll) {
1142
+ this.slotEl[slotNum].addEventListener('webkitTransitionEnd', this, false);
1143
+ }
1144
+ },
1145
+
1146
+ scrollToValue: function (slot, value) {
1147
+ var yPos, count, i;
1148
+
1149
+ this.slotEl[slot].removeEventListener('webkitTransitionEnd', this, false);
1150
+ this.slotEl[slot].style.webkitTransitionDuration = '0';
1151
+
1152
+ count = 0;
1153
+ for (i in this.slotData[slot].values) {
1154
+ if (i == value) {
1155
+ yPos = count * this.cellHeight;
1156
+ this.setPosition(slot, yPos);
1157
+ break;
1158
+ }
1159
+
1160
+ count -= 1;
1161
+ }
1162
+ },
1163
+
1164
+ backWithinBoundaries: function (e) {
1165
+ e.target.removeEventListener('webkitTransitionEnd', this, false);
1166
+
1167
+ this.scrollTo(e.target.slotPosition, e.target.slotYPosition > 0 ? 0 : e.target.slotMaxScroll, '150ms');
1168
+ return false;
1169
+ },
1170
+
1171
+
1172
+ /**
1173
+ *
1174
+ * Buttons
1175
+ *
1176
+ */
1177
+
1178
+ tapDown: function (e) {
1179
+ e.currentTarget.addEventListener('touchmove', this, false);
1180
+ e.currentTarget.addEventListener('touchend', this, false);
1181
+ e.currentTarget.className = 'sw-pressed';
1182
+ },
1183
+
1184
+ tapCancel: function (e) {
1185
+ e.currentTarget.removeEventListener('touchmove', this, false);
1186
+ e.currentTarget.removeEventListener('touchend', this, false);
1187
+ e.currentTarget.className = '';
1188
+ },
1189
+
1190
+ tapUp: function (e) {
1191
+ this.tapCancel(e);
1192
+
1193
+ if (e.currentTarget.id == 'sw-cancel') {
1194
+ this.cancelAction();
1195
+ } else {
1196
+ this.doneAction();
1197
+ }
1198
+
1199
+ // this.close(); //not needed because we control this via the feedback from the query
1200
+ },
1201
+
1202
+ setCancelAction: function (action) {
1203
+ this.cancelAction = action;
1204
+ },
1205
+
1206
+ setDoneAction: function (action) {
1207
+ this.doneAction = action;
1208
+ },
1209
+
1210
+ cancelAction: function () {
1211
+ return false;
1212
+ },
1213
+
1214
+ cancelDone: function () {
1215
+ return true;
1216
+ }
1217
+ };
1218
+
1219
+ /*
1220
+ Copyright (C) 2008 Charles Ying. All Rights Reserved.
1221
+
1222
+ This distribution is released under the BSD license.
1223
+
1224
+ http://css-vfx.googlecode.com/
1225
+
1226
+ See the README for documentation and license.
1227
+ */
1228
+
1229
+ (function () { // Module pattern
1230
+
1231
+ var global = this;
1232
+
1233
+ // CREATE ARRAYS FOR LINKS AND CAPTIONS
1234
+ var imagesArray = Array();
1235
+
1236
+ var captionsArray = Array();
1237
+ // ["This is a caption lorem ipsum"],
1238
+ // ["Here's one that we'll<br>make into two lines"],
1239
+ // ["&quot;Quotes&quot; and &copy;s and &trade;s, oh my!"],
1240
+ // ["Blah Blah Blooey"]);
1241
+
1242
+ /*
1243
+ Utilities (avoid jQuery dependencies)
1244
+ */
1245
+
1246
+ function utils_extend(obj, dict)
1247
+ {
1248
+ for (var key in dict)
1249
+ {
1250
+ obj[key] = dict[key];
1251
+ }
1252
+ }
1253
+
1254
+ function utils_setsize(elem, w, h)
1255
+ {
1256
+ elem.style.width = w.toString() + "px";
1257
+ elem.style.height = h.toString() + "px";
1258
+ }
1259
+
1260
+ function utils_setxy(elem, x, y)
1261
+ {
1262
+ elem.style.left = Math.round(x).toString() + "px";
1263
+ elem.style.top = Math.round(y).toString() + "px";
1264
+ }
1265
+
1266
+ /*
1267
+ TrayController is a horizontal touch event controller that tracks cumulative offsets and passes events to a delegate.
1268
+ */
1269
+
1270
+ TrayController = function ()
1271
+ {
1272
+ return this;
1273
+ }
1274
+
1275
+ TrayController.prototype.init = function (elem)
1276
+ {
1277
+ this.currentX = 0;
1278
+ this.elem = elem;
1279
+ }
1280
+
1281
+ TrayController.prototype.touchstart = function (event)
1282
+ {
1283
+ this.startX = event.touches[0].pageX - this.currentX;
1284
+ this.touchMoved = false;
1285
+
1286
+ window.addEventListener("touchmove", this, true);
1287
+ window.addEventListener("touchend", this, true);
1288
+
1289
+ this.elem.style.webkitTransitionDuration = "0s";
1290
+ }
1291
+
1292
+ TrayController.prototype.touchmove = function (e)
1293
+ {
1294
+ this.touchMoved = true;
1295
+ this.lastX = this.currentX;
1296
+ this.lastMoveTime = new Date();
1297
+ this.currentX = event.touches[0].pageX - this.startX;
1298
+ this.delegate.update(this.currentX);
1299
+ }
1300
+
1301
+ TrayController.prototype.touchend = function (e)
1302
+ {
1303
+ window.removeEventListener("touchmove", this, true);
1304
+ window.removeEventListener("touchend", this, true);
1305
+
1306
+ this.elem.style.webkitTransitionDuration = "0.4s";
1307
+
1308
+ if (this.touchMoved)
1309
+ {
1310
+ /* Approximate some inertia -- the transition function takes care of the decay over 0.4s for us, but we need to amplify the last movement */
1311
+ var delta = this.currentX - this.lastX;
1312
+ var dt = (new Date()) - this.lastMoveTime + 1;
1313
+ /* dx * 400 / dt */
1314
+
1315
+ this.currentX = this.currentX + delta * 200 / dt;
1316
+ this.delegate.updateTouchEnd(this);
1317
+ }
1318
+ else
1319
+ {
1320
+ this.delegate.clicked(this.currentX);
1321
+ }
1322
+ }
1323
+
1324
+ TrayController.prototype.handleEvent = function (event)
1325
+ {
1326
+ this[event.type](event);
1327
+ event.preventDefault();
1328
+ }
1329
+
1330
+ /*
1331
+ These variables define how the zflow presentation is made.
1332
+ */
1333
+
1334
+ const CSIZE = 150;
1335
+ const CGAP = CSIZE / 2;
1336
+
1337
+ const FLOW_ANGLE = 70;
1338
+ const FLOW_THRESHOLD = CGAP / 2;
1339
+ const FLOW_ZFOCUS = CSIZE;
1340
+ const FLOW_XGAP = CSIZE / 3;
1341
+
1342
+ const T_NEG_ANGLE = "rotateY(" + (- FLOW_ANGLE) + "deg)";
1343
+ const T_ANGLE = "rotateY(" + FLOW_ANGLE + "deg)";
1344
+ const T_ZFOCUS = "translateZ(" + FLOW_ZFOCUS + "px)";
1345
+
1346
+ FlowDelegate = function ()
1347
+ {
1348
+ this.cells = new Array();
1349
+ this.transforms = new Array();
1350
+ }
1351
+
1352
+ FlowDelegate.prototype.init = function (elem)
1353
+ {
1354
+ this.elem = elem;
1355
+ }
1356
+
1357
+ FlowDelegate.prototype.updateTouchEnd = function (controller)
1358
+ {
1359
+ this.lastFocus = undefined;
1360
+
1361
+ // Snap to nearest position
1362
+ var i = this.getFocusedCell(controller.currentX);
1363
+
1364
+ controller.currentX = - i * CGAP;
1365
+ this.update(controller.currentX);
1366
+ }
1367
+
1368
+ FlowDelegate.prototype.clicked = function (currentX)
1369
+ {
1370
+ var i = - Math.round(currentX / CGAP);
1371
+ var cell = this.cells[i];
1372
+ galleryCell = i; //save the key for use in show_image div
1373
+ // ADDED window.open() - "_self" CAN BE CHANGED TO "_blank" 0R AN EXPLICITLY NAMED WINDOW
1374
+ //window.open(imagesArray[i],"_blank");
1375
+
1376
+ }
1377
+
1378
+ FlowDelegate.prototype.getFocusedCell = function (currentX)
1379
+ {
1380
+ // Snap to nearest position
1381
+ var i = - Math.round(currentX / CGAP);
1382
+
1383
+ // Clamp to cells array boundary
1384
+ return Math.min(Math.max(i, 0), this.cells.length - 1);
1385
+ }
1386
+
1387
+ FlowDelegate.prototype.transformForCell = function (cell, i, offset)
1388
+ {
1389
+ /*
1390
+ This function needs to be fast, so we avoid function calls, divides, Math.round,
1391
+ and precalculate any invariants we can.
1392
+ */
1393
+ var x = (i * CGAP);
1394
+ var ix = x + offset;
1395
+
1396
+ if ((ix < FLOW_THRESHOLD) && (ix >= -FLOW_THRESHOLD))
1397
+ {
1398
+ // yangle = 0, zpos = FLOW_ZFOCUS
1399
+ return T_ZFOCUS + " translateX(" + x + "px)";
1400
+ }
1401
+ else if (ix > 0)
1402
+ {
1403
+ // yangle = -FLOW_ANGLE, x + FLOW_XGAP
1404
+ return "translateX(" + (x + FLOW_XGAP) + "px) " + T_NEG_ANGLE;
1405
+ }
1406
+ else
1407
+ {
1408
+ // yangle = FLOW_ANGLE, x - FLOW_XGAP
1409
+ return "translateX(" + (x - FLOW_XGAP) + "px) " + T_ANGLE;
1410
+ }
1411
+ }
1412
+
1413
+ FlowDelegate.prototype.setTransformForCell = function (cell, i, transform)
1414
+ {
1415
+ if (this.transforms[i] != transform)
1416
+ {
1417
+ cell.style.webkitTransform = transform;
1418
+ this.transforms[i] = transform;
1419
+ }
1420
+ }
1421
+
1422
+
1423
+ FlowDelegate.prototype.update = function (currentX)
1424
+ {
1425
+ this.elem.style.webkitTransform = "translateX(" + (currentX) + "px)";
1426
+
1427
+ /*
1428
+ It would be nice if we only updated dirty cells... for now, we use a cache
1429
+ */
1430
+ for (var i in this.cells)
1431
+ {
1432
+ var cell = this.cells[i];
1433
+ this.setTransformForCell(cell, i, this.transformForCell(cell, i, currentX));
1434
+ i += 1;
1435
+ }
1436
+ }
1437
+ var controller = new TrayController();
1438
+ var delegate = new FlowDelegate();
1439
+
1440
+ global.zflow = function (images, selector)
1441
+ {
1442
+ var tray = document.querySelector(selector);
1443
+ controller.init(tray);
1444
+ delegate.init(tray);
1445
+ controller.delegate = delegate;
1446
+
1447
+ // WE NO LONGER NEED THIS VARIABLE
1448
+ // var imagesLeft = images.length;
1449
+
1450
+ var cellCSS = {
1451
+ top: Math.round(-CSIZE * 0.65) + "px",
1452
+ left: Math.round(-CSIZE / 2) + "px",
1453
+ width: CSIZE + "px",
1454
+ height: Math.round(CSIZE * 1.5) + "px",
1455
+ opacity: 0,
1456
+ }
1457
+
1458
+ var i = 0;
1459
+
1460
+ function makeCell()
1461
+ {
1462
+
1463
+ var cell = document.createElement("div");
1464
+ var image = document.createElement("img");
1465
+ var canvas = document.createElement("canvas");
1466
+ var link = document.createElement("a");
1467
+ // CREATE caption element
1468
+ var caption = document.createElement("caption");
1469
+
1470
+ cell.className = "cell";
1471
+ cell.appendChild(link);
1472
+ link.appendChild(image);
1473
+ cell.appendChild(canvas);
1474
+
1475
+ // ADD caption to cell
1476
+ cell.appendChild(caption);
1477
+
1478
+ // ASSIGN SRC DIRECTLY FROM THE IMAGES ARRAY SINCE IT'S NO LONGER PASSED AS A PARAMETER OF THE FUNCTION
1479
+ image.src = images[i];
1480
+ imagesArray[i] = images[i];
1481
+ link.href = "show_image?fName="+images[i];
1482
+ link.className = "slide-right";
1483
+ global.afnc = function () {
1484
+ var iwidth = image.width;
1485
+ var iheight = image.height;
1486
+
1487
+ var ratio = Math.min(CSIZE / iheight, CSIZE / iwidth);
1488
+
1489
+ iwidth *= ratio;
1490
+ iheight *= ratio;
1491
+
1492
+ utils_setsize(image, iwidth, iheight);
1493
+
1494
+ utils_extend(cell.style, cellCSS);
1495
+
1496
+ utils_setxy(image, (CSIZE - iwidth) / 2, CSIZE - iheight);
1497
+ utils_setxy(canvas, (CSIZE - iwidth) / 2, CSIZE);
1498
+
1499
+ // POSITION caption - this can be tweaked to place it where you like
1500
+ utils_setxy(caption, (CSIZE - iwidth) / 2, CSIZE + 10);
1501
+
1502
+ reflect(image, iwidth, iheight, canvas);
1503
+
1504
+ // CALL FUNCTION writeCaption()
1505
+ var $tCaption = images[i].match(/(.*)[\/\\]([^\/\\]+)\.\w+$/)[2]; //strip the path
1506
+ $tCaption = $tCaption.replace(/_/g, ' '); //replace the _ with blank
1507
+ $tCaption = $tCaption.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); //cap first word
1508
+ captionsArray[i] = $tCaption; //store the capation in the array
1509
+ writeCaption(caption, iwidth, i);
1510
+
1511
+ delegate.setTransformForCell(cell, delegate.cells.length, delegate.transformForCell(cell, delegate.cells.length, controller.currentX));
1512
+ delegate.cells.push(cell);
1513
+
1514
+ // Start at 0 opacity
1515
+ tray.appendChild(cell);
1516
+ // Set to 1 to fade element in.
1517
+ cell.style.opacity = 1.0;
1518
+
1519
+ // THIS MAKES THE NEXT CELL IF NECESSARY
1520
+ if (i < (images.length - 1))
1521
+ {
1522
+ i++;
1523
+ makeCell();
1524
+ }
1525
+ else
1526
+ {
1527
+ window.setTimeout( function() { window.scrollTo(0, 0); }, 100 );
1528
+ galleryInit = 1;
1529
+ }
1530
+ } // end afnc
1531
+
1532
+ image.addEventListener("load", afnc, true );
1533
+
1534
+ };
1535
+
1536
+
1537
+ // INITIATE CELL CREATION
1538
+ makeCell();
1539
+ tray.addEventListener('touchstart', controller, false);
1540
+ }
1541
+
1542
+ global.zflowCleanup = function (selector)
1543
+ {
1544
+ var tray = document.querySelector(selector);
1545
+ if (tray) {
1546
+ if (tray.childNodes.length > 0) {
1547
+ delegate.transforms.length = 0;
1548
+ delegate.cells.length = 0;
1549
+ while (tray.hasChildNodes()) {
1550
+ var image = tray.childNodes[0].childNodes[0].childNodes[0];
1551
+ image.removeEventListener("load", afnc, true); //remove the listener first
1552
+ tray.removeChild(tray.childNodes[0]);
1553
+ }
1554
+ var div = document.getElementById('gallery');
1555
+ if (div) {
1556
+ div.parentNode.removeChild(div); //take the gallery out so it will reload
1557
+ galleryInit = 0; //reset the init flag
1558
+ galleryCell = 0; //reset the image flag
1559
+ }
1560
+ }
1561
+ }
1562
+ }
1563
+
1564
+ global.zflowGetImageSource = function (selector, index)
1565
+ {
1566
+ var tray = document.querySelector(selector);
1567
+ var imageSrc= "";
1568
+ if (tray) {
1569
+ if (tray.childNodes.length > 0) {
1570
+ while (tray.hasChildNodes()) {
1571
+ imageSrc = tray.childNodes[0].childNodes[0].childNodes[index].src;
1572
+ }
1573
+ }
1574
+ }
1575
+ return imageSrc;
1576
+ }
1577
+
1578
+ // FUNCTION TO SET WIDTH AND WRITE CAPTION
1579
+ function writeCaption(caption, iwidth, i) {
1580
+ caption.width = iwidth;
1581
+ caption.innerHTML = captionsArray[i];
1582
+ }
1583
+
1584
+ function reflect(image, iwidth, iheight, canvas)
1585
+ {
1586
+ canvas.width = iwidth;
1587
+ canvas.height = iheight / 2;
1588
+
1589
+ var ctx = canvas.getContext("2d");
1590
+
1591
+ ctx.save();
1592
+
1593
+ ctx.translate(0, iheight - 1);
1594
+ ctx.scale(1, -1);
1595
+ ctx.drawImage(image, 0, 0, iwidth, iheight);
1596
+
1597
+ ctx.restore();
1598
+
1599
+ ctx.globalCompositeOperation = "destination-out";
1600
+
1601
+ var gradient = ctx.createLinearGradient(0, 0, 0, iheight / 2);
1602
+ gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
1603
+ gradient.addColorStop(0, "rgba(255, 255, 255, 0.5)");
1604
+
1605
+ ctx.fillStyle = gradient;
1606
+ ctx.fillRect(0, 0, iwidth, iheight / 2);
1607
+ }
1608
+
1609
+ })();
1610
+
1611
+
1612
+
708
1613
  /*
709
1614
 
710
1615
  _/ _/_/ _/_/_/_/_/ _/
@@ -1024,4 +1929,1123 @@
1024
1929
  }
1025
1930
  });
1026
1931
  }
1932
+ })(jQuery);
1933
+
1934
+ /**
1935
+ *
1936
+ * Add support for scaling using jQTouch
1937
+ *
1938
+ * Copyright (c) 2009 Sam Shull <http://www.google.com/profiles/brickysam26>
1939
+ * Released under MIT license
1940
+ *
1941
+ * <code>
1942
+ *
1943
+ * <div>
1944
+ * <img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome" class="scalable"/>
1945
+ * </div>
1946
+ *
1947
+ * </code>
1948
+ *
1949
+ * Known issues:
1950
+ * - using a link that is a slideSelector (ie: body > * > ul li a) on the same psuedo-page causes problems during scaling
1951
+ *
1952
+ *
1953
+ * $Revision$
1954
+ * $Date$
1955
+ * $LastChangedBy$
1956
+ *
1957
+ */
1958
+
1959
+ (function($)
1960
+ {
1961
+
1962
+ $.fn.scalable = function (options)
1963
+ {
1964
+ return this.each(function ()
1965
+ {
1966
+ new iScale( this, options );
1967
+ });
1968
+ };
1969
+
1970
+ if ($.jQTouch)
1971
+ {
1972
+ $.jQTouch.addExtension(function (jQT){
1973
+
1974
+ function binder (e, info)
1975
+ {
1976
+ info.page.find('.scalable').scalable();
1977
+ }
1978
+
1979
+ $(document.body)
1980
+ .bind('pageInserted', binder);
1981
+
1982
+ $(function()
1983
+ {
1984
+ $('body > *')
1985
+ .each(function()
1986
+ {
1987
+ binder({}, {page: $(this)});
1988
+ });
1989
+ });
1990
+
1991
+ return {};
1992
+ });
1993
+
1994
+
1995
+ function iScale (el, options)
1996
+ {
1997
+ var that = this;
1998
+
1999
+ this.numberOfTouches = 2;
2000
+
2001
+ this.element = el;
2002
+ this.scale(1);
2003
+ this.refresh();
2004
+
2005
+ this.scaleLessThanOne = false;
2006
+
2007
+ el.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)';
2008
+
2009
+ el.addEventListener('touchstart', this, false);
2010
+ //moved up here because I didnt see any reason to add and remove them
2011
+ el.addEventListener('touchmove', this, false);
2012
+ el.addEventListener('touchend', this, false);
2013
+
2014
+ window.addEventListener('unload', function ()
2015
+ {
2016
+ el.removeEventListener('touchstart', that, false);
2017
+ el.removeEventListener('touchmove', that, false);
2018
+ el.removeEventListener('touchend', that, false);
2019
+
2020
+ this.removeEventListener('unload', arguments.callee, false);
2021
+ }, false);
2022
+
2023
+ if (options)
2024
+ {
2025
+ $.extend(this, options);
2026
+ }
2027
+ }
2028
+
2029
+ iScale.prototype = {
2030
+ handleEvent: function(e) {
2031
+ switch(e.type) {
2032
+ case 'touchstart': return this.onTouchStart(e); break;
2033
+ case 'touchmove': return this.onTouchMove(e); break;
2034
+ case 'touchend': return this.onTouchEnd(e); break;
2035
+ }
2036
+ },
2037
+
2038
+ scale: function (scale) {
2039
+ if (scale !== undefined)
2040
+ {
2041
+ this._scale = scale;
2042
+ this.element.style.webkitTransform = 'scale('+scale+')';
2043
+ return;
2044
+ }
2045
+
2046
+ return this._scale;
2047
+ },
2048
+
2049
+ refresh: function() {
2050
+ this.element.style.webkitTransitionDuration = '0';
2051
+ },
2052
+
2053
+ onTouchStart: function(e) {
2054
+ if ( e.targetTouches.length != this.numberOfTouches )
2055
+ {
2056
+ return;
2057
+ }
2058
+
2059
+ this.refresh();
2060
+
2061
+ this.moved = false;
2062
+
2063
+ this.startDistance = Math.sqrt(
2064
+ Math.pow((e.targetTouches[1].clientX - e.targetTouches[0].clientX), 2)
2065
+ + Math.pow((e.targetTouches[1].clientX - e.targetTouches[0].clientX), 2)
2066
+ );
2067
+
2068
+ return false;
2069
+ },
2070
+
2071
+ onTouchMove: function(e) {
2072
+ if( e.targetTouches.length != this.numberOfTouches )
2073
+ return;
2074
+
2075
+ e.preventDefault();
2076
+
2077
+ this.moved = true;
2078
+
2079
+ this.refresh();
2080
+
2081
+ var newDistance = Math.sqrt(
2082
+ Math.pow((e.targetTouches[1].clientX - e.targetTouches[0].clientX), 2)
2083
+ + Math.pow((e.targetTouches[1].clientY - e.targetTouches[0].clientY), 2)
2084
+ ),
2085
+ difference = newDistance - this.startDistance,
2086
+ percentChange = (difference / this.startDistance) / 2;
2087
+
2088
+ this.scale(this.scale() + (this.scale() * percentChange));
2089
+
2090
+ this.startDistance = newDistance;
2091
+
2092
+ return false;
2093
+ },
2094
+
2095
+ onTouchEnd: function(e) {
2096
+ var theTarget,theEvent;
2097
+
2098
+ if( !this.moved ) {
2099
+ theTarget = e.target;
2100
+ if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;
2101
+ theEvent = document.createEvent("MouseEvents");
2102
+ theEvent.initEvent('click', true, true);
2103
+ theTarget.dispatchEvent(theEvent);
2104
+ return;
2105
+ }
2106
+
2107
+ e.preventDefault();
2108
+ e.stopPropagation();
2109
+
2110
+ if (!this.scaleLessThanOne && this.scale() < 1)
2111
+ {
2112
+ this.element.style.webkitTransitionDuration = '200ms';
2113
+ this.scale(1);
2114
+ }
2115
+
2116
+ return false;
2117
+ },
2118
+
2119
+ scaleTo: function(dest, runtime) {
2120
+ this.element.style.webkitTransitionDuration = runtime ? runtime : '300ms';
2121
+ this.scale(dest ? dest : 0);
2122
+ }
2123
+ };
2124
+ }
2125
+ })(jQuery);
2126
+
2127
+ /**
2128
+ *
2129
+ * Add support for scrolling horizontally and vertically using jQTouch in Safari Mobile
2130
+ *
2131
+ * Copyright (c) 2009 Sam Shull <http://www.google.com/profiles/brickysam26>
2132
+ * Released under MIT license
2133
+ *
2134
+ * <code>
2135
+ * <div id="vertical-scrolling-example">
2136
+ * <div class="toolbar">
2137
+ * <h1>Vertical Scroll Example</h1>
2138
+ * </div>
2139
+ * <div class="vertical-scroll">
2140
+ * <div>
2141
+ * This is where you insert scollable text
2142
+ * </div>
2143
+ * </div>
2144
+ * </div>
2145
+ *
2146
+ * <div id="horizontal-scrolling-example">
2147
+ * <div class="toolbar">
2148
+ * <h1>Horizontal Scroll Example</h1>
2149
+ * </div>
2150
+ * <a href="#home" class="grayButton swap">Gotta have something here or you get a flicker</a>
2151
+ * <div class="horizontal-scroll">
2152
+ * <table>
2153
+ * <tr>
2154
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2155
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2156
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2157
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2158
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2159
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2160
+ * <td><div class="scroll-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2161
+ * </tr>
2162
+ * </table>
2163
+ * </div>
2164
+ * </div>
2165
+ * </code>
2166
+ *
2167
+ *
2168
+ * Known issues:
2169
+ * - slideSelector must be explicitly set to a class like .slideRight in order for the slide selector to work
2170
+ * - horizontal scroll flickers without a button above it
2171
+ * - must define a class selector for slideSelector to operate properly within the scroll box
2172
+ *
2173
+ * $Revision$
2174
+ * $Date$
2175
+ * $LastChangedBy$
2176
+ *
2177
+ */
2178
+
2179
+ (function($)
2180
+ {
2181
+
2182
+ $.fn.scrollVertically = function (options)
2183
+ {
2184
+ return this.each(function ()
2185
+ {
2186
+ new iScroll( this, options );
2187
+ });
2188
+ };
2189
+
2190
+ $.fn.scrollHorizontally = function (options)
2191
+ {
2192
+ return this.each(function ()
2193
+ {
2194
+ new iScrollHorizontal( this, options );
2195
+ });
2196
+ };
2197
+
2198
+
2199
+ if ($.jQTouch)
2200
+ {
2201
+ $.jQTouch.addExtension(function (jQT){
2202
+
2203
+ function binder (e, info)
2204
+ {
2205
+ var horizontal = info.page.find('.horizontal-scroll > table'),
2206
+ vertical = info.page.find('.vertical-scroll > div');
2207
+
2208
+ horizontal.scrollHorizontally({acceleration: Number(horizontal.attr("scrollspeed")|| 0.009)});
2209
+ vertical.scrollVertically({acceleration: Number(vertical.attr("scrollspeed") || 0.009)});
2210
+ }
2211
+
2212
+ $(document.body)
2213
+ .bind('pageInserted', binder);
2214
+
2215
+ $(function()
2216
+ {
2217
+ $('body > *')
2218
+ .each(function()
2219
+ {
2220
+ binder({}, {page: $(this)});
2221
+ });
2222
+ });
2223
+
2224
+ return {};
2225
+ });
2226
+
2227
+ /**
2228
+ *
2229
+ * Find more about the scrolling function at
2230
+ * http://cubiq.org/scrolling-div-on-iphone-ipod-touch/5
2231
+ *
2232
+ * Copyright (c) 2009 Matteo Spinelli, http://cubiq.org/
2233
+ * Released under MIT license
2234
+ * http://cubiq.org/dropbox/mit-license.txt
2235
+ *
2236
+ * Version 2.3 - Last updated: 2009.07.09
2237
+ * Changes - 10/22/09 - cleaned up a little by Sam Shull
2238
+ *
2239
+ */
2240
+
2241
+ function iScroll(el, options)
2242
+ {
2243
+ var that = this;
2244
+
2245
+ this.numberOfTouches = 1;
2246
+
2247
+ this.element = el;
2248
+ this.position(0);
2249
+ this.refresh();
2250
+ el.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)';
2251
+ this.acceleration = 0.009;
2252
+
2253
+ el.addEventListener('touchstart', this, false);
2254
+ //moved up here because I didnt see any reason to add and remove them
2255
+
2256
+ window.addEventListener('unload', function ()
2257
+ {
2258
+ el.removeEventListener('touchstart', that, false);
2259
+ window.removeEventListener('unload', arguments.callee, false);
2260
+ }, false);
2261
+
2262
+ if (options)
2263
+ {
2264
+ $.extend(this, options);
2265
+ }
2266
+ }
2267
+
2268
+ iScroll.prototype = {
2269
+ handleEvent: function(e) {
2270
+ switch(e.type) {
2271
+ case 'touchstart': this.onTouchStart(e); break;
2272
+ case 'touchmove': this.onTouchMove(e); break;
2273
+ case 'touchend': this.onTouchEnd(e); break;
2274
+ case 'webkitTransitionEnd': this.onTransitionEnd(e); break;
2275
+ }
2276
+ },
2277
+
2278
+ //i combined the getter and setter in order to make this
2279
+ //more forward compatible since that is a deprecated api
2280
+ position: function (pos) {
2281
+ if (pos !== undefined)
2282
+ {
2283
+ this._position = pos;
2284
+ this.element.style.webkitTransform = 'translate3d(0, ' + pos + 'px, 0)';
2285
+ return;
2286
+ }
2287
+
2288
+ return this._position;
2289
+ },
2290
+
2291
+ refresh: function() {
2292
+ this.element.style.webkitTransitionDuration = '0';
2293
+
2294
+ if( this.element.offsetHeight<this.element.parentNode.clientHeight )
2295
+ this.maxScroll = 0;
2296
+ else
2297
+ this.maxScroll = this.element.parentNode.clientHeight - this.element.offsetHeight;
2298
+ },
2299
+
2300
+ onTouchStart: function(e) {
2301
+ if( e.targetTouches.length != this.numberOfTouches )
2302
+ return;
2303
+
2304
+ e.preventDefault();
2305
+
2306
+ this.refresh();
2307
+
2308
+ var theTransform = window.getComputedStyle(this.element).webkitTransform;
2309
+ theTransform = new WebKitCSSMatrix(theTransform).m42;
2310
+ if( theTransform!=this.position() )
2311
+ this.position(theTransform);
2312
+
2313
+ this.startY = e.targetTouches[0].clientY;
2314
+ this.scrollStartY = this.position();
2315
+ this.scrollStartTime = e.timeStamp;
2316
+ this.moved = false;
2317
+
2318
+ //moved
2319
+ this.element.addEventListener('touchmove', this, false);
2320
+ this.element.addEventListener('touchend', this, false);
2321
+ //return false;
2322
+ },
2323
+
2324
+ onTouchMove: function(e) {
2325
+ if( e.targetTouches.length != this.numberOfTouches )
2326
+ return;
2327
+
2328
+ e.preventDefault();
2329
+ var topDelta = e.targetTouches[0].clientY - this.startY;
2330
+ if( this.position() > 0 || this.position() < this.maxScroll ) topDelta/=2;
2331
+ this.position(this.position() + topDelta);
2332
+ this.startY = e.targetTouches[0].clientY;
2333
+ this.moved = true;
2334
+
2335
+ // Prevent slingshot effect
2336
+ if( e.timeStamp-this.scrollStartTime>100 ) {
2337
+ this.scrollStartY = this.position();
2338
+ this.scrollStartTime = e.timeStamp;
2339
+ }
2340
+
2341
+ //return false;
2342
+ },
2343
+
2344
+ onTouchEnd: function(e) {
2345
+ //moved
2346
+ this.element.removeEventListener('touchmove', this, false);
2347
+ this.element.removeEventListener('touchend', this, false);
2348
+ e.preventDefault();
2349
+ var newPosition,theTarget,theEvent,scrollDistance,scrollDuration,newDuration,newScrollDistance;
2350
+
2351
+ // If we are outside of the boundaries, let's go back to the sheepfold
2352
+ if( this.position() > 0 || this.position() < this.maxScroll ) {
2353
+ this.scrollTo(this.position() > 0 ? 0 : this.maxScroll);
2354
+ return;
2355
+ }
2356
+
2357
+ if( !this.moved ) {
2358
+ theTarget = e.target;
2359
+ if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;
2360
+ theEvent = document.createEvent("MouseEvents");
2361
+ theEvent.initEvent('click', true, true);
2362
+ theTarget.dispatchEvent(theEvent);
2363
+ return false
2364
+ }
2365
+
2366
+ // Lame formula to calculate a fake deceleration
2367
+ scrollDistance = this.position() - this.scrollStartY;
2368
+ scrollDuration = e.timeStamp - this.scrollStartTime;
2369
+
2370
+ newDuration = (2 * scrollDistance / scrollDuration) / this.acceleration;
2371
+ newScrollDistance = (this.acceleration / 2) * (newDuration * newDuration);
2372
+
2373
+ if( newDuration<0 ) {
2374
+ newDuration = -newDuration;
2375
+ newScrollDistance = -newScrollDistance;
2376
+ }
2377
+
2378
+ newPosition = this.position() + newScrollDistance;
2379
+
2380
+ if( newPosition>this.element.parentNode.clientHeight/2 )
2381
+ newPosition = this.element.parentNode.clientHeight/2;
2382
+ else if( newPosition>0 )
2383
+ newPosition/= 1.5;
2384
+ else if( newPosition<this.maxScroll-this.element.parentNode.clientHeight/2 )
2385
+ newPosition = this.maxScroll-this.element.parentNode.clientHeight/2;
2386
+ else if( newPosition<this.maxScroll )
2387
+ newPosition = (newPosition - this.maxScroll) / 1.5 + this.maxScroll;
2388
+ else
2389
+ newDuration*= 6;
2390
+
2391
+ this.scrollTo(newPosition, Math.round(newDuration) + 'ms');
2392
+
2393
+ //return false;
2394
+ },
2395
+
2396
+ onTransitionEnd: function() {
2397
+ this.element.removeEventListener('webkitTransitionEnd', this, false);
2398
+ this.scrollTo( this.position() > 0 ? 0 : this.maxScroll );
2399
+ },
2400
+
2401
+ scrollTo: function(dest, runtime) {
2402
+ this.element.style.webkitTransitionDuration = runtime ? runtime : '300ms';
2403
+ this.position(dest ? dest : 0);
2404
+
2405
+ // If we are outside of the boundaries at the end of the transition go back to the sheepfold
2406
+ if( this.position() > 0 || this.position() < this.maxScroll )
2407
+ this.element.addEventListener('webkitTransitionEnd', this, false);
2408
+ }
2409
+ };
2410
+
2411
+ /**
2412
+ *
2413
+ * A horizontal revision of iScroll by Matteo Spinelli, http://cubiq.org/
2414
+ *
2415
+ * Copyright (c) 2009 Sam Shull <http://www.google.com/profiles/brickysam26>
2416
+ * Released under MIT license
2417
+ *
2418
+ * Version 0.1
2419
+ *
2420
+ */
2421
+ function iScrollHorizontal(el, options)
2422
+ {
2423
+ var that = this;
2424
+
2425
+ this.numberOfTouches = 1;
2426
+
2427
+ this.element = el;
2428
+ this.position(0);
2429
+ this.refresh();
2430
+ el.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)';
2431
+ this.acceleration = 0.009;
2432
+
2433
+ el.addEventListener('touchstart', this, false);
2434
+ //moved up here because I didnt see any reason to add and remove them
2435
+
2436
+ window.addEventListener('unload', function ()
2437
+ {
2438
+ el.removeEventListener('touchstart', that, false);
2439
+ window.removeEventListener('unload', arguments.callee, false);
2440
+ }, false);
2441
+
2442
+ if (options)
2443
+ {
2444
+ $.extend(this, options);
2445
+ }
2446
+ }
2447
+
2448
+ iScrollHorizontal.prototype = {
2449
+ handleEvent: function(e) {
2450
+ switch(e.type) {
2451
+ case 'touchstart': this.onTouchStart(e); break;
2452
+ case 'touchmove': this.onTouchMove(e); break;
2453
+ case 'touchend': this.onTouchEnd(e); break;
2454
+ case 'webkitTransitionEnd': this.onTransitionEnd(e); break;
2455
+ }
2456
+ },
2457
+
2458
+ position: function (pos) {
2459
+ if (pos !== undefined)
2460
+ {
2461
+ this._position = pos;
2462
+ this.element.style.webkitTransform = 'translateX(' + pos + 'px)';
2463
+ return;
2464
+ }
2465
+
2466
+ return this._position;
2467
+ },
2468
+
2469
+ refresh: function() {
2470
+ this.element.style.webkitTransitionDuration = '0';
2471
+
2472
+ if( this.element.offsetWidth<this.element.parentNode.clientWidth )
2473
+ this.maxScroll = 0;
2474
+ else
2475
+ this.maxScroll = this.element.parentNode.clientWidth - this.element.offsetWidth;
2476
+ },
2477
+
2478
+ onTouchStart: function(e) {
2479
+ if( e.targetTouches.length != this.numberOfTouches )
2480
+ return;
2481
+
2482
+ e.preventDefault();
2483
+
2484
+ this.refresh();
2485
+
2486
+ this.startX = e.targetTouches[0].clientX;
2487
+ this.scrollStartX = this.position();
2488
+ this.scrollStartTime = e.timeStamp;
2489
+ this.moved = false;
2490
+
2491
+ this.element.addEventListener('touchmove', this, false);
2492
+ this.element.addEventListener('touchend', this, false);
2493
+ },
2494
+
2495
+ onTouchMove: function(e) {
2496
+ if( e.targetTouches.length != this.numberOfTouches )
2497
+ return;
2498
+
2499
+ e.preventDefault();
2500
+ var topDelta = e.targetTouches[0].clientX - this.startX;
2501
+ if( this.position()>0 || this.position()<this.maxScroll ) topDelta/=2;
2502
+ this.position(this.position() + topDelta);
2503
+ this.startX = e.targetTouches[0].clientX;
2504
+ this.moved = true;
2505
+
2506
+ // Prevent slingshot effect
2507
+ if( e.timeStamp-this.scrollStartTime>100 ) {
2508
+ this.scrollStartX = this.position();
2509
+ this.scrollStartTime = e.timeStamp;
2510
+ }
2511
+ },
2512
+
2513
+ onTouchEnd: function(e) {
2514
+ this.element.removeEventListener('touchmove', this, false);
2515
+ this.element.removeEventListener('touchend', this, false);
2516
+ e.preventDefault();
2517
+ var newPosition,theTarget,theEvent,scrollDistance,scrollDuration,newDuration,newScrollDistance;
2518
+
2519
+ if( !this.moved ) {
2520
+ theTarget = e.target;
2521
+ if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;
2522
+ theEvent = document.createEvent("MouseEvents");
2523
+ theEvent.initEvent('click', true, true);
2524
+ theTarget.dispatchEvent(theEvent);
2525
+ return false
2526
+ }
2527
+
2528
+ // Lame formula to calculate a fake deceleration
2529
+ scrollDistance = this.position() - this.scrollStartX;
2530
+ scrollDuration = e.timeStamp - this.scrollStartTime;
2531
+
2532
+ newDuration = (2 * scrollDistance / scrollDuration) / this.acceleration;
2533
+ newScrollDistance = (this.acceleration / 2) * (newDuration * newDuration);
2534
+
2535
+ if( newDuration<0 ) {
2536
+ newDuration = -newDuration;
2537
+ newScrollDistance = -newScrollDistance;
2538
+ }
2539
+
2540
+ newPosition = this.position() + newScrollDistance;
2541
+
2542
+ if( newPosition>this.element.parentNode.clientWidth/2 )
2543
+ {
2544
+ newPosition = this.element.parentNode.clientWidth/2;
2545
+ }
2546
+ else if( newPosition<this.maxScroll-this.element.parentNode.clientWidth/2 )
2547
+ {
2548
+ newPosition = this.maxScroll-this.element.parentNode.clientWidth/2;
2549
+ }
2550
+ else if( newPosition<this.maxScroll )
2551
+ {
2552
+ newPosition = (newPosition - this.maxScroll) / 1.5 + this.maxScroll;
2553
+ }
2554
+ else
2555
+ {
2556
+ newDuration*= 6;
2557
+ }
2558
+
2559
+ this.scrollTo(newPosition, Math.round(newDuration) + 'ms');
2560
+
2561
+ //return false;
2562
+ },
2563
+
2564
+ onTransitionEnd: function() {
2565
+ this.element.removeEventListener('webkitTransitionEnd', this, false);
2566
+ this.scrollTo( this.position()>0 ? 0 : this.maxScroll );
2567
+ },
2568
+
2569
+ scrollTo: function(dest, runtime) {
2570
+ this.element.style.webkitTransitionDuration = runtime ? runtime : '300ms';
2571
+ this.position(dest ? dest : 0);
2572
+
2573
+ // If we are outside of the boundaries at the end of the transition go back to the sheepfold
2574
+ if( this.position()>0 || this.position()<this.maxScroll )
2575
+ this.element.addEventListener('webkitTransitionEnd', this, false);
2576
+ }
2577
+ };
2578
+ }
2579
+ })(jQuery);
2580
+
2581
+ /**
2582
+ *
2583
+ * Add support for sliding horizontally and vertically using jQTouch in Safari Mobile
2584
+ *
2585
+ * Copyright (c) 2009 Sam Shull <http://www.google.com/profiles/brickysam26>
2586
+ * Released under MIT license
2587
+ *
2588
+ * <code>
2589
+ *
2590
+ * <div id="vertical-sliding-example">
2591
+ * <div class="toolbar">
2592
+ * <h1>Vertical Slide Example</h1>
2593
+ * </div>
2594
+ * <div class="vertical-slide">
2595
+ * <div>
2596
+ * This is where you insert scollable text
2597
+ * </div>
2598
+ * </div>
2599
+ * </div>
2600
+ *
2601
+ * <div id="horizontal-sliding-example">
2602
+ * <div class="toolbar">
2603
+ * <h1>Horizontal Slide Example</h1>
2604
+ * </div>
2605
+ * <a href="#home" class="grayButton swap">Gotta have something here or you get a flicker</a>
2606
+ * <div class="horizontal-slide">
2607
+ * <table>
2608
+ * <tr>
2609
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2610
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2611
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2612
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2613
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2614
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2615
+ * <td><div class="slide-container"><img src="http://rlv.zcache.com/css_is_awesome_mug-p1687164350719819282objs_210.jpg" alt="CSS Is Awesome"/></div></td>
2616
+ * </tr>
2617
+ * </table>
2618
+ * </div>
2619
+ * </div>
2620
+ * </code>
2621
+ *
2622
+ * Known issues:
2623
+ * - horizontal scroll flickers without a button above it
2624
+ * - must define a class selector for slideSelector to operate properly within the slide box
2625
+ *
2626
+ * $Revision$
2627
+ * $Date$
2628
+ * $LastChangedBy$
2629
+ *
2630
+ */
2631
+
2632
+ (function($)
2633
+ {
2634
+
2635
+ $.fn.slideVertically = function (options)
2636
+ {
2637
+ return this.each(function ()
2638
+ {
2639
+ new iSlide( this, options );
2640
+ });
2641
+ };
2642
+
2643
+ $.fn.slideHorizontally = function (options)
2644
+ {
2645
+ return this.each(function ()
2646
+ {
2647
+ new iSlideHorizontal( this, options );
2648
+ });
2649
+ };
2650
+
2651
+ if ($.jQTouch)
2652
+ {
2653
+ $.jQTouch.addExtension(function (jQT){
2654
+
2655
+ function binder (e, info)
2656
+ {
2657
+ var horizontal = info.page.find('.horizontal-slide > table'),
2658
+ vertical = info.page.find('.vertical-slide > div');
2659
+
2660
+ horizontal.slideHorizontally({acceleration: Number(horizontal.attr("slidespeed")|| 500) || null});
2661
+ vertical.slideVertically({acceleration: Number(vertical.attr("slidespeed") || 500)});
2662
+ }
2663
+
2664
+ $(document.body)
2665
+ .bind('pageInserted', binder);
2666
+
2667
+ $(function()
2668
+ {
2669
+ $('body > *')
2670
+ .each(function()
2671
+ {
2672
+ binder({}, {page: $(this)});
2673
+ });
2674
+ });
2675
+
2676
+ return {};
2677
+ });
2678
+
2679
+ /**
2680
+ *
2681
+ * Modified version of
2682
+ * http://cubiq.org/slideing-div-on-iphone-ipod-touch/5
2683
+ *
2684
+ * Copyright (c) 2009 Matteo Spinelli, http://cubiq.org/
2685
+ * Released under MIT license
2686
+ * http://cubiq.org/dropbox/mit-license.txt
2687
+ *
2688
+ *
2689
+ * Modifications by Sam Shull <http://www.google.com/profiles/brickysam26>
2690
+ * Released under MIT license
2691
+ */
2692
+
2693
+ function iSlide(el, options)
2694
+ {
2695
+ var that = this;
2696
+
2697
+ this.numberOfTouches = 1;
2698
+
2699
+ this.acceleration = 500;
2700
+
2701
+ this.element = el;
2702
+ this.position(0);
2703
+ this.refresh();
2704
+ el.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)';
2705
+
2706
+ el.addEventListener('touchstart', this, false);
2707
+ //moved up here because I didnt see any reason to add and remove them
2708
+
2709
+ window.addEventListener('unload', function ()
2710
+ {
2711
+ el.removeEventListener('touchstart', that, false);
2712
+ window.removeEventListener('unload', arguments.callee, false);
2713
+
2714
+ }, false);
2715
+
2716
+ if (options)
2717
+ {
2718
+ $.extend(this, options);
2719
+ }
2720
+ }
2721
+
2722
+ iSlide.prototype = {
2723
+ handleEvent: function(e) {
2724
+ switch(e.type) {
2725
+ case 'touchstart': this.onTouchStart(e); break;
2726
+ case 'touchmove': this.onTouchMove(e); break;
2727
+ case 'touchend': this.onTouchEnd(e); break;
2728
+ case 'webkitTransitionEnd': this.onTransitionEnd(e); break;
2729
+ }
2730
+ },
2731
+
2732
+ //i combined the getter and setter in order to make this
2733
+ //more forward compatible since that is a deprecated api
2734
+ position: function (pos) {
2735
+ if (pos !== undefined)
2736
+ {
2737
+ this._position = pos;
2738
+ this.element.style.webkitTransform = 'translate3d(0, ' + pos + 'px, 0)';
2739
+ return;
2740
+ }
2741
+
2742
+ return this._position;
2743
+ },
2744
+
2745
+ refresh: function() {
2746
+ this.element.style.webkitTransitionDuration = '0';
2747
+
2748
+ if( this.element.offsetHeight<this.element.parentNode.clientHeight )
2749
+ this.maxSlide = 0;
2750
+ else
2751
+ this.maxSlide = this.element.parentNode.clientHeight - this.element.offsetHeight;
2752
+ },
2753
+
2754
+ onTouchStart: function(e) {
2755
+ if( e.targetTouches.length != this.numberOfTouches )
2756
+ return;
2757
+
2758
+ e.preventDefault();
2759
+ this.refresh();
2760
+
2761
+ var theTransform = window.getComputedStyle(this.element).webkitTransform;
2762
+ theTransform = new WebKitCSSMatrix(theTransform).m42;
2763
+ if( theTransform!=this.position() )
2764
+ this.position(theTransform);
2765
+
2766
+ this.startY = e.targetTouches[0].clientY;
2767
+ this.slideStartY = this.position();
2768
+ this.slideStartTime = e.timeStamp;
2769
+ this.moved = false;
2770
+
2771
+ this.element.addEventListener('touchmove', this, false);
2772
+ this.element.addEventListener('touchend', this, false);
2773
+
2774
+ return false;
2775
+ },
2776
+
2777
+ onTouchMove: function(e) {
2778
+ if( e.targetTouches.length != this.numberOfTouches )
2779
+ return;
2780
+
2781
+ e.preventDefault();
2782
+ var topDelta = e.targetTouches[0].clientY - this.startY;
2783
+ if( this.position()>0 || this.position()<this.maxSlide ) topDelta/=2;
2784
+ this.position(this.position() + topDelta);
2785
+ this.startY = e.targetTouches[0].clientY;
2786
+ this.moved = true;
2787
+
2788
+ return false;
2789
+ },
2790
+
2791
+ onTouchEnd: function(e) {
2792
+ e.preventDefault();
2793
+ this.element.removeEventListener('touchmove', this, false);
2794
+ this.element.removeEventListener('touchend', this, false);
2795
+
2796
+ var newPosition = this.position(),theTarget,theEvent,slideDistance;
2797
+
2798
+ // If we are outside of the boundaries, let's go back to the sheepfold
2799
+ if( newPosition > 0 || newPosition < this.maxSlide ) {
2800
+ this.slideTo(newPosition > 0 ? 0 : this.maxSlide);
2801
+ return;
2802
+ }
2803
+
2804
+ if( !this.moved ) {
2805
+ theTarget = e.target;
2806
+ if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;
2807
+ theEvent = document.createEvent("MouseEvents");
2808
+ theEvent.initEvent('click', true, true);
2809
+ theTarget.dispatchEvent(theEvent);
2810
+ return false
2811
+ }
2812
+
2813
+ if (newPosition > 0)
2814
+ {
2815
+ slideDistance = 0;
2816
+ }
2817
+ else if ( newPosition < this.maxSlide )
2818
+ {
2819
+ slideDistance = this.maxSlide;
2820
+ }
2821
+ else
2822
+ {
2823
+ slideDistance = this.snapTo( this.position(), this.slideStartY < this.position());
2824
+ }
2825
+
2826
+ this.slideTo( slideDistance, this.acceleration + 'ms');
2827
+
2828
+ return;
2829
+ },
2830
+
2831
+ onTransitionEnd: function() {
2832
+ this.element.removeEventListener('webkitTransitionEnd', this, false);
2833
+ this.slideTo( this.position() > 0 ? 0 : this.maxSlide );
2834
+ },
2835
+
2836
+ slideTo: function(dest, runtime) {
2837
+ this.element.style.webkitTransitionDuration = runtime ? runtime : this.acceleration + 'ms';
2838
+ this.position(dest ? dest : 0);
2839
+
2840
+ // If we are outside of the boundaries at the end of the transition go back to the sheepfold
2841
+ if( this.position() > 0 || this.position() < this.maxSlide )
2842
+ this.element.addEventListener('webkitTransitionEnd', this, false);
2843
+ },
2844
+
2845
+ snapTo: function (dest, dir)
2846
+ {
2847
+ if (dest != 0)
2848
+ {
2849
+ var opposite = -dest,
2850
+ elements = this.element.querySelectorAll('.vertical-slide-snapto'),
2851
+ i = 0,
2852
+ l = elements.length;
2853
+
2854
+ for (l = elements.length; i < l; ++i)
2855
+ {
2856
+ //console.log('element['+i+']: '+ elements[i].offsetTop);
2857
+ if (elements[i].offsetTop >= opposite)
2858
+ {
2859
+ return !dir
2860
+ ? -elements[i].offsetTop
2861
+ : -(elements[i-1]||elements[0]||{offsetTop:dest}).offsetTop;
2862
+ }
2863
+ }
2864
+ }
2865
+
2866
+ return dest;
2867
+ }
2868
+ };
2869
+
2870
+ /**
2871
+ *
2872
+ * Modified version of
2873
+ * http://cubiq.org/slideing-div-on-iphone-ipod-touch/5
2874
+ *
2875
+ * Copyright (c) 2009 Matteo Spinelli, http://cubiq.org/
2876
+ * Released under MIT license
2877
+ * http://cubiq.org/dropbox/mit-license.txt
2878
+ *
2879
+ *
2880
+ * Modifications by Sam Shull <http://www.google.com/profiles/brickysam26>
2881
+ * Released under MIT license
2882
+ */
2883
+ function iSlideHorizontal(el, options)
2884
+ {
2885
+ var that = this;
2886
+
2887
+ this.numberOfTouches = 1;
2888
+
2889
+ this.acceleration = 500;
2890
+
2891
+ this.element = el;
2892
+ this.position(0);
2893
+ this.refresh();
2894
+ el.style.webkitTransitionTimingFunction = 'cubic-bezier(0, 0, 0.2, 1)';
2895
+ this.acceleration = null;
2896
+
2897
+ el.addEventListener('touchstart', this, false);
2898
+
2899
+ window.addEventListener('unload', function ()
2900
+ {
2901
+ el.removeEventListener('touchstart', that, false);
2902
+ window.removeEventListener('unload', arguments.callee, false);
2903
+
2904
+ }, false);
2905
+
2906
+ if (options)
2907
+ {
2908
+ $.extend(this, options);
2909
+ }
2910
+ }
2911
+
2912
+ iSlideHorizontal.prototype = {
2913
+ handleEvent: function(e) {
2914
+ switch(e.type) {
2915
+ case 'touchstart': this.onTouchStart(e); break;
2916
+ case 'touchmove': this.onTouchMove(e); break;
2917
+ case 'touchend': this.onTouchEnd(e); break;
2918
+ case 'webkitTransitionEnd': this.onTransitionEnd(e); break;
2919
+ }
2920
+ },
2921
+
2922
+ position: function (pos) {
2923
+ if (pos !== undefined)
2924
+ {
2925
+ this._position = pos;
2926
+ this.element.style.webkitTransform = 'translateX(' + pos + 'px)';
2927
+ return;
2928
+ }
2929
+
2930
+ return this._position;
2931
+ },
2932
+
2933
+ refresh: function() {
2934
+ this.element.style.webkitTransitionDuration = '0';
2935
+
2936
+ if( this.element.offsetWidth<this.element.parentNode.clientWidth )
2937
+ this.maxSlide = 0;
2938
+ else
2939
+ this.maxSlide = this.element.parentNode.clientWidth - this.element.offsetWidth;
2940
+ },
2941
+
2942
+ onTouchStart: function(e) {
2943
+ if( e.targetTouches.length != this.numberOfTouches )
2944
+ return false;
2945
+
2946
+ e.preventDefault();
2947
+ this.refresh();
2948
+
2949
+ this.slideStartX = this.startX = e.targetTouches[0].clientX;
2950
+ this.slideStartTime = e.timeStamp;
2951
+ this.moved = false;
2952
+
2953
+ this.element.addEventListener('touchmove', this, false);
2954
+ this.element.addEventListener('touchend', this, false);
2955
+
2956
+ return false;
2957
+ },
2958
+
2959
+ onTouchMove: function(e) {
2960
+ if( e.targetTouches.length != this.numberOfTouches )
2961
+ return false;
2962
+
2963
+ e.preventDefault();
2964
+ var topDelta = e.targetTouches[0].clientX - this.startX;
2965
+ this.position(this.position() + topDelta);
2966
+ this.startX = e.targetTouches[0].clientX;
2967
+ this.moved = true;
2968
+
2969
+ return false;
2970
+ },
2971
+
2972
+ onTouchEnd: function(e) {
2973
+ e.preventDefault();
2974
+ var newPosition,theTarget,theEvent,slideDistance,slideDuration,newDuration,newSlideDistance;
2975
+
2976
+ this.element.removeEventListener('touchmove', this, false);
2977
+ this.element.removeEventListener('touchend', this, false);
2978
+
2979
+ // If we are outside of the boundaries, let's go back to the sheepfold
2980
+ if( this.position() > 0 || this.position() < this.maxSlide ) {
2981
+ this.slideTo(this.position() > 0 ? 0 : this.maxSlide);
2982
+ return;
2983
+ }
2984
+
2985
+ if( !this.moved ) {
2986
+ theTarget = e.target;
2987
+ if(theTarget.nodeType == 3) theTarget = theTarget.parentNode;
2988
+ theEvent = document.createEvent("MouseEvents");
2989
+ theEvent.initEvent('click', true, true);
2990
+ theTarget.dispatchEvent(theEvent);
2991
+ return false
2992
+ }
2993
+
2994
+ newPosition = this.position() + ((this.startX - this.slideStartX) / 2);
2995
+
2996
+ if (newPosition > 0)
2997
+ {
2998
+ newPosition = 0;
2999
+ }
3000
+ else if ( newPosition < this.maxSlide )
3001
+ {
3002
+ newPosition = this.maxSlide;
3003
+ }
3004
+ else
3005
+ {
3006
+ newPosition = this.snapTo( this.position(), newPosition > this.position());
3007
+ }
3008
+
3009
+ this.slideTo( newPosition, this.acceleration + 'ms');
3010
+
3011
+ return false;
3012
+ },
3013
+
3014
+ onTransitionEnd: function() {
3015
+ this.element.removeEventListener('webkitTransitionEnd', this, false);
3016
+ this.slideTo( this.position()>0 ? 0 : this.maxScroll );
3017
+ },
3018
+
3019
+ slideTo: function(dest, runtime) {
3020
+ this.element.style.webkitTransitionDuration = runtime ? runtime : this.acceleration + 'ms';
3021
+ this.position(dest ? dest : 0);
3022
+
3023
+ if( this.position()>0 || this.position() < this.maxSlide )
3024
+ this.element.addEventListener('webkitTransitionEnd', this, false);
3025
+ },
3026
+
3027
+ snapTo: function (dest, dir)
3028
+ {
3029
+ if (dest != 0)
3030
+ {
3031
+ //the children of the first row of the table - in case of nested tables
3032
+ var opposite = -dest, i = 0,
3033
+ elements = this.element.querySelectorAll('.horizontal-slide-snapto'),
3034
+ l = elements.length;
3035
+
3036
+ for (; i < l; ++i)
3037
+ {
3038
+ if (elements[i].offsetLeft >= opposite)
3039
+ {
3040
+ return !dir
3041
+ ? -elements[i].offsetLeft
3042
+ : -(elements[i-1]||elements[0]||{offsetLeft:dest}).offsetLeft;
3043
+ }
3044
+ }
3045
+ }
3046
+
3047
+ return dest;
3048
+ }
3049
+ };
3050
+ }
1027
3051
  })(jQuery);