atome 0.5.7.5.9 → 0.5.7.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (798) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -4
  3. data/Rakefile +111 -1
  4. data/atome.gemspec +1 -1
  5. data/documentation/basic.md +3 -1
  6. data/documentation/deep learning/Important/Atome_Framework_Enhanced_Documentation.pdf +0 -0
  7. data/documentation/deep learning/Important/atome_usage_documentation.md +155 -0
  8. data/documentation/deep learning/Important/base_usage.txt +135 -0
  9. data/documentation/deep learning/Important/web_to_atome_converter.txt +143 -0
  10. data/documentation/deep learning/basic_infos.txt +1 -1
  11. data/documentation/installation/buiding_atome.md +1 -1
  12. data/exe/atome +93 -71
  13. data/lib/atome/extensions/atome.rb +144 -53
  14. data/lib/atome/genesis/atomes.rb +1 -1
  15. data/lib/atome/genesis/genesis.rb +1 -1
  16. data/lib/atome/genesis/particles/hierarchy.rb +3 -3
  17. data/lib/atome/genesis/particles/identity.rb +1 -0
  18. data/lib/atome/genesis/particles/material.rb +1 -1
  19. data/lib/atome/genesis/particles/property.rb +5 -5
  20. data/lib/atome/genesis/particles/spatial.rb +5 -5
  21. data/lib/atome/genesis/particles/utility.rb +91 -23
  22. data/lib/atome/kernel/universe.rb +7 -3
  23. data/lib/atome/presets/atome.rb +4 -4
  24. data/lib/atome/utilities/utilities.rb +227 -28
  25. data/lib/atome/version.rb +1 -1
  26. data/lib/molecules/intuition/tools.rb +1 -1
  27. data/lib/molecules/intuition/utilities.rb +0 -1
  28. data/lib/renderers/html/html.rb +65 -7
  29. data/lib/renderers/html/identity.rb +10 -1
  30. data/lib/renderers/html/utility.rb +3 -0
  31. data/vendor/assets/application/examples/aXion.rb +61 -0
  32. data/vendor/assets/application/examples/above_below_before_after.rb +18 -1
  33. data/vendor/assets/application/examples/account.rb +33 -0
  34. data/vendor/assets/application/examples/actor&role.rb +28 -1
  35. data/vendor/assets/application/examples/affect.rb +18 -0
  36. data/vendor/assets/application/examples/aid.rb +13 -0
  37. data/vendor/assets/application/examples/allow_copy.rb +18 -0
  38. data/vendor/assets/application/examples/allow_system_right_click.rb +23 -0
  39. data/vendor/assets/application/examples/alternate.rb +28 -0
  40. data/vendor/assets/application/examples/animation.rb +53 -0
  41. data/vendor/assets/application/examples/applications.rb +63 -0
  42. data/vendor/assets/application/examples/apply.rb +13 -0
  43. data/vendor/assets/application/examples/atome.rb +13 -0
  44. data/vendor/assets/application/examples/atome_converter/example.html +70 -0
  45. data/vendor/assets/application/examples/atome_converter/script.js +12 -0
  46. data/vendor/assets/application/examples/atome_converter/simple_test.html +87 -0
  47. data/vendor/assets/application/examples/atome_converter/styles.css +18 -0
  48. data/vendor/assets/application/examples/atome_converter/web_to_atome_converter.rb +237 -0
  49. data/vendor/assets/application/examples/atome_converter/web_to_atome_converter_saf.rb +220 -0
  50. data/vendor/assets/application/examples/atome_particle_validation.rb +7 -0
  51. data/vendor/assets/application/examples/atome_sparkle_use.rb +13 -1
  52. data/vendor/assets/application/examples/atomizer.rb +68 -0
  53. data/vendor/assets/application/examples/attach.rb +28 -0
  54. data/vendor/assets/application/examples/attached.rb +43 -0
  55. data/vendor/assets/application/examples/audio.rb +73 -1
  56. data/vendor/assets/application/examples/b64_to_image.rb +43 -1
  57. data/vendor/assets/application/examples/basic_understanding.rb +78 -0
  58. data/vendor/assets/application/examples/behavior.rb +18 -0
  59. data/vendor/assets/application/examples/blocks.rb +48 -0
  60. data/vendor/assets/application/examples/blur.rb +53 -0
  61. data/vendor/assets/application/examples/border.rb +58 -0
  62. data/vendor/assets/application/examples/browse.rb +33 -1
  63. data/vendor/assets/application/examples/browser.rb +1 -0
  64. data/vendor/assets/application/examples/buttons.rb +23 -1
  65. data/vendor/assets/application/examples/calendar.rb +103 -0
  66. data/vendor/assets/application/examples/categories.rb +13 -0
  67. data/vendor/assets/application/examples/category.rb +28 -0
  68. data/vendor/assets/application/examples/center.rb +13 -1
  69. data/vendor/assets/application/examples/chronology.rb +178 -0
  70. data/vendor/assets/application/examples/clear.rb +58 -1
  71. data/vendor/assets/application/examples/clones&monitoring.rb +98 -0
  72. data/vendor/assets/application/examples/code.rb +18 -0
  73. data/vendor/assets/application/examples/color.rb +43 -0
  74. data/vendor/assets/application/examples/compute.rb +53 -0
  75. data/vendor/assets/application/examples/console.rb +7 -1
  76. data/vendor/assets/application/examples/convert.rb +33 -1
  77. data/vendor/assets/application/examples/copy.rb +33 -0
  78. data/vendor/assets/application/examples/copybck.rb +58 -0
  79. data/vendor/assets/application/examples/css.rb +13 -1
  80. data/vendor/assets/application/examples/database_handling.rb +13 -1
  81. data/vendor/assets/application/examples/debug.rb +73 -1
  82. data/vendor/assets/application/examples/delete.rb +108 -0
  83. data/vendor/assets/application/examples/detach.rb +33 -1
  84. data/vendor/assets/application/examples/dig.rb +23 -1
  85. data/vendor/assets/application/examples/display.rb +208 -1
  86. data/vendor/assets/application/examples/display_bck.rb +138 -0
  87. data/vendor/assets/application/examples/drag.rb +53 -0
  88. data/vendor/assets/application/examples/drop.rb +18 -0
  89. data/vendor/assets/application/examples/drop_down_list.rb +23 -0
  90. data/vendor/assets/application/examples/duplicate.rb +83 -0
  91. data/vendor/assets/application/examples/edit.rb +48 -1
  92. data/vendor/assets/application/examples/editor.rb +153 -1
  93. data/vendor/assets/application/examples/encode.rb +18 -1
  94. data/vendor/assets/application/examples/encrypt.rb +13 -1
  95. data/vendor/assets/application/examples/example.rb +27 -0
  96. data/vendor/assets/application/examples/exchange.rb +18 -0
  97. data/vendor/assets/application/examples/executor.rb +28 -0
  98. data/vendor/assets/application/examples/file.rb +13 -0
  99. data/vendor/assets/application/examples/fill.rb +38 -1
  100. data/vendor/assets/application/examples/find.rb +73 -1
  101. data/vendor/assets/application/examples/fit.rb +51 -3
  102. data/vendor/assets/application/examples/flash.rb +7 -0
  103. data/vendor/assets/application/examples/fonts.rb +18 -0
  104. data/vendor/assets/application/examples/generator_and_build.rb +18 -1
  105. data/vendor/assets/application/examples/getter.rb +43 -0
  106. data/vendor/assets/application/examples/grab.rb +13 -0
  107. data/vendor/assets/application/examples/gradient.rb +48 -0
  108. data/vendor/assets/application/examples/grip.rb +28 -0
  109. data/vendor/assets/application/examples/group.rb +78 -0
  110. data/vendor/assets/application/examples/help.rb +23 -0
  111. data/vendor/assets/application/examples/hierarchy.rb +38 -1
  112. data/vendor/assets/application/examples/history.rb +28 -0
  113. data/vendor/assets/application/examples/holder.rb +38 -0
  114. data/vendor/assets/application/examples/hypertext.rb +68 -0
  115. data/vendor/assets/application/examples/image.rb +13 -0
  116. data/vendor/assets/application/examples/import.rb +28 -1
  117. data/vendor/assets/application/examples/increment.rb +33 -0
  118. data/vendor/assets/application/examples/infos.rb +13 -0
  119. data/vendor/assets/application/examples/input.rb +43 -0
  120. data/vendor/assets/application/examples/inspector.rb +63 -0
  121. data/vendor/assets/application/examples/int8.rb +33 -0
  122. data/vendor/assets/application/examples/interop_ruby_js.rb +25 -0
  123. data/vendor/assets/application/examples/js&ruby.rb +33 -1
  124. data/vendor/assets/application/examples/keyboard.rb +38 -0
  125. data/vendor/assets/application/examples/layout.rb +43 -0
  126. data/vendor/assets/application/examples/link.rb +20 -0
  127. data/vendor/assets/application/examples/list.rb +33 -0
  128. data/vendor/assets/application/examples/localstorage.rb +38 -0
  129. data/vendor/assets/application/examples/login.rb +53 -1
  130. data/vendor/assets/application/examples/map.rb +43 -0
  131. data/vendor/assets/application/examples/markup.rb +7 -1
  132. data/vendor/assets/application/examples/match.rb +58 -0
  133. data/vendor/assets/application/examples/matrix.rb +115 -3
  134. data/vendor/assets/application/examples/media_audio_thumbnail.rb +506 -0
  135. data/vendor/assets/application/examples/media_video_thumbnail.rb +317 -0
  136. data/vendor/assets/application/examples/meteo.rb +13 -0
  137. data/vendor/assets/application/examples/midi.rb +25 -1
  138. data/vendor/assets/application/examples/monitor.rb +23 -0
  139. data/vendor/assets/application/examples/on_resize.rb +18 -1
  140. data/vendor/assets/application/examples/on_the_fly_ruby_code_loading.rb +23 -0
  141. data/vendor/assets/application/examples/online.rb +7 -1
  142. data/vendor/assets/application/examples/opacity.rb +23 -0
  143. data/vendor/assets/application/examples/over.rb +43 -0
  144. data/vendor/assets/application/examples/overflow.rb +43 -0
  145. data/vendor/assets/application/examples/paint.rb +38 -0
  146. data/vendor/assets/application/examples/particles.rb +13 -1
  147. data/vendor/assets/application/examples/percent_to_px.rb +13 -1
  148. data/vendor/assets/application/examples/play.rb +58 -1
  149. data/vendor/assets/application/examples/preset.rb +38 -0
  150. data/vendor/assets/application/examples/random.rb +63 -0
  151. data/vendor/assets/application/examples/raw_html.rb +23 -1
  152. data/vendor/assets/application/examples/read_write_terminal.rb +53 -0
  153. data/vendor/assets/application/examples/recorder.rb +46 -4
  154. data/vendor/assets/application/examples/refresh.rb +48 -1
  155. data/vendor/assets/application/examples/remove.rb +48 -0
  156. data/vendor/assets/application/examples/repeat.rb +23 -1
  157. data/vendor/assets/application/examples/resize.rb +33 -1
  158. data/vendor/assets/application/examples/retreive.rb +28 -0
  159. data/vendor/assets/application/examples/rotate.rb +23 -1
  160. data/vendor/assets/application/examples/run.rb +18 -0
  161. data/vendor/assets/application/examples/schedule.rb +48 -1
  162. data/vendor/assets/application/examples/scheduler.rb +7 -0
  163. data/vendor/assets/application/examples/security.rb +48 -0
  164. data/vendor/assets/application/examples/select_text.rb +48 -1
  165. data/vendor/assets/application/examples/selected.rb +63 -0
  166. data/vendor/assets/application/examples/server.rb +23 -0
  167. data/vendor/assets/application/examples/shadow.rb +48 -0
  168. data/vendor/assets/application/examples/shapes.rb +7 -0
  169. data/vendor/assets/application/examples/shortcut.rb +7 -0
  170. data/vendor/assets/application/examples/site.rb +43 -0
  171. data/vendor/assets/application/examples/size.rb +23 -0
  172. data/vendor/assets/application/examples/sliders.rb +28 -0
  173. data/vendor/assets/application/examples/smooth.rb +13 -0
  174. data/vendor/assets/application/examples/style.rb +13 -1
  175. data/vendor/assets/application/examples/sub_atome_manipulation.rb +18 -1
  176. data/vendor/assets/application/examples/svg_img_to_vector.rb +23 -0
  177. data/vendor/assets/application/examples/svg_vectorizer.rb +53 -0
  178. data/vendor/assets/application/examples/sync.rb +38 -0
  179. data/vendor/assets/application/examples/table.rb +56 -3
  180. data/vendor/assets/application/examples/tagged.rb +18 -0
  181. data/vendor/assets/application/examples/target.rb +28 -0
  182. data/vendor/assets/application/examples/terminal.rb +1 -1
  183. data/vendor/assets/application/examples/test.rb +130 -6
  184. data/vendor/assets/application/examples/text.rb +7 -0
  185. data/vendor/assets/application/examples/text_align.rb +7 -1
  186. data/vendor/assets/application/examples/tick.rb +33 -1
  187. data/vendor/assets/application/examples/timeline.rb +391 -0
  188. data/vendor/assets/application/examples/to_percent.rb +28 -0
  189. data/vendor/assets/application/examples/to_px.rb +13 -1
  190. data/vendor/assets/application/examples/tools.rb +83 -1
  191. data/vendor/assets/application/examples/touch.rb +23 -0
  192. data/vendor/assets/application/examples/trigger_abstraction.rb +138 -0
  193. data/vendor/assets/application/examples/type_mutation.rb +38 -1
  194. data/vendor/assets/application/examples/unfasten.rb +53 -0
  195. data/vendor/assets/application/examples/unit.rb +13 -0
  196. data/vendor/assets/application/examples/universe.rb +38 -1
  197. data/vendor/assets/application/examples/vector.rb +138 -0
  198. data/vendor/assets/application/examples/video.rb +33 -1
  199. data/vendor/assets/application/examples/vr.rb +13 -0
  200. data/vendor/assets/application/examples/wait.rb +13 -1
  201. data/vendor/assets/application/examples/www.rb +23 -1
  202. data/vendor/assets/package.json +12 -0
  203. data/vendor/assets/pnpm-lock.yaml +125 -0
  204. data/vendor/assets/server/IA.rb +285 -0
  205. data/vendor/assets/server/atome_server.rb +2 -1
  206. data/vendor/assets/server/atome_server_wasm.rb +2 -1
  207. data/vendor/assets/server/eDen.rb +80 -8
  208. data/vendor/assets/src/css/leaflet.css +664 -664
  209. data/vendor/assets/src/index_bck_opal_tauri.html +77 -0
  210. data/vendor/assets/src/{index.html → index_bck_wasm_tauri.html} +2 -1
  211. data/vendor/assets/src/index_opal.html +2 -1
  212. data/vendor/assets/src/index_server.html +2 -1
  213. data/vendor/assets/src/index_server_wasm.html +2 -1
  214. data/vendor/assets/src/index_wasm.html +2 -1
  215. data/vendor/assets/src/js/atome/atome.js +77 -116
  216. data/vendor/assets/src/js/atome/atome_helpers/communication.js +178 -0
  217. data/vendor/assets/src/js/atome/specific/wasm.js +8 -26
  218. data/vendor/assets/src/js/third_parties/a_pianoroll.js +1747 -0
  219. data/vendor/assets/src/js/third_parties/vis-timeline-graph2d.min.js +35 -0
  220. data/vendor/assets/src/js/third_parties/vis-timeline-graph2d.min.js.map +1 -0
  221. data/vendor/assets/src/medias/images/waveform.png +0 -0
  222. data/vendor/assets/src/medias/utils/apis.rb +945 -0
  223. data/vendor/assets/src/medias/utils/examples/atomes/animation/example.rb +123 -0
  224. data/vendor/assets/src/medias/utils/examples/atomes/animation/infos.txt +1 -0
  225. data/vendor/assets/src/medias/utils/examples/atomes/animation/usage.txt +1 -0
  226. data/vendor/assets/src/medias/utils/examples/atomes/atomized/example.rb +0 -0
  227. data/vendor/assets/src/medias/utils/examples/atomes/atomized/infos.txt +1 -0
  228. data/vendor/assets/src/medias/utils/examples/atomes/atomized/usage.txt +1 -0
  229. data/vendor/assets/src/medias/utils/examples/atomes/audio/example.rb +70 -0
  230. data/vendor/assets/src/medias/utils/examples/atomes/audio/infos.txt +1 -0
  231. data/vendor/assets/src/medias/utils/examples/atomes/audio/usage.txt +1 -0
  232. data/vendor/assets/src/medias/utils/examples/atomes/border/example.rb +81 -0
  233. data/vendor/assets/src/medias/utils/examples/atomes/border/infos.txt +1 -0
  234. data/vendor/assets/src/medias/utils/examples/atomes/border/usage.txt +1 -0
  235. data/vendor/assets/src/medias/utils/examples/atomes/code/example.rb +9 -0
  236. data/vendor/assets/src/medias/utils/examples/atomes/code/infos.txt +1 -0
  237. data/vendor/assets/src/medias/utils/examples/atomes/code/usage.txt +1 -0
  238. data/vendor/assets/src/medias/utils/examples/atomes/color/example.rb +54 -0
  239. data/vendor/assets/src/medias/utils/examples/atomes/color/infos.txt +1 -0
  240. data/vendor/assets/src/medias/utils/examples/atomes/color/usage.txt +1 -0
  241. data/vendor/assets/src/medias/utils/examples/atomes/draw/example.rb +0 -0
  242. data/vendor/assets/src/medias/utils/examples/atomes/draw/infos.txt +1 -0
  243. data/vendor/assets/src/medias/utils/examples/atomes/draw/usage.txt +1 -0
  244. data/vendor/assets/src/medias/utils/examples/atomes/editor/example.rb +139 -0
  245. data/vendor/assets/src/medias/utils/examples/atomes/editor/infos.txt +1 -0
  246. data/vendor/assets/src/medias/utils/examples/atomes/editor/usage.txt +1 -0
  247. data/vendor/assets/src/medias/utils/examples/atomes/element/example.rb +0 -0
  248. data/vendor/assets/src/medias/utils/examples/atomes/element/infos.txt +1 -0
  249. data/vendor/assets/src/medias/utils/examples/atomes/element/usage.txt +1 -0
  250. data/vendor/assets/src/medias/utils/examples/atomes/group/example.rb +44 -0
  251. data/vendor/assets/src/medias/utils/examples/atomes/group/infos.txt +1 -0
  252. data/vendor/assets/src/medias/utils/examples/atomes/group/usage.txt +1 -0
  253. data/vendor/assets/src/medias/utils/examples/atomes/human/example.rb +0 -0
  254. data/vendor/assets/src/medias/utils/examples/atomes/human/infos.txt +1 -0
  255. data/vendor/assets/src/medias/utils/examples/atomes/human/usage.txt +1 -0
  256. data/vendor/assets/src/medias/utils/examples/atomes/image/example.rb +4 -0
  257. data/vendor/assets/src/medias/utils/examples/atomes/image/infos.txt +1 -0
  258. data/vendor/assets/src/medias/utils/examples/atomes/image/usage.txt +1 -0
  259. data/vendor/assets/src/medias/utils/examples/atomes/machine/example.rb +0 -0
  260. data/vendor/assets/src/medias/utils/examples/atomes/machine/infos.txt +1 -0
  261. data/vendor/assets/src/medias/utils/examples/atomes/machine/usage.txt +1 -0
  262. data/vendor/assets/src/medias/utils/examples/atomes/map/example.rb +42 -0
  263. data/vendor/assets/src/medias/utils/examples/atomes/map/infos.txt +1 -0
  264. data/vendor/assets/src/medias/utils/examples/atomes/map/usage.txt +1 -0
  265. data/vendor/assets/src/medias/utils/examples/atomes/paint/example.rb +29 -0
  266. data/vendor/assets/src/medias/utils/examples/atomes/paint/infos.txt +1 -0
  267. data/vendor/assets/src/medias/utils/examples/atomes/paint/usage.txt +1 -0
  268. data/vendor/assets/src/medias/utils/examples/atomes/raw/example.rb +48 -0
  269. data/vendor/assets/src/medias/utils/examples/atomes/raw/infos.txt +1 -0
  270. data/vendor/assets/src/medias/utils/examples/atomes/raw/usage.txt +1 -0
  271. data/vendor/assets/src/medias/utils/examples/atomes/shadow/example.rb +60 -0
  272. data/vendor/assets/src/medias/utils/examples/atomes/shadow/infos.txt +1 -0
  273. data/vendor/assets/src/medias/utils/examples/atomes/shadow/usage.txt +1 -0
  274. data/vendor/assets/src/medias/utils/examples/atomes/shape/example.rb +6 -0
  275. data/vendor/assets/src/medias/utils/examples/atomes/shape/infos.txt +1 -0
  276. data/vendor/assets/src/medias/utils/examples/atomes/shape/usage.txt +1 -0
  277. data/vendor/assets/src/medias/utils/examples/atomes/table/example.rb +76 -0
  278. data/vendor/assets/src/medias/utils/examples/atomes/table/infos.txt +1 -0
  279. data/vendor/assets/src/medias/utils/examples/atomes/table/usage.txt +1 -0
  280. data/vendor/assets/src/medias/utils/examples/atomes/text/example.rb +18 -0
  281. data/vendor/assets/src/medias/utils/examples/atomes/text/infos.txt +1 -0
  282. data/vendor/assets/src/medias/utils/examples/atomes/text/usage.txt +1 -0
  283. data/vendor/assets/src/medias/utils/examples/atomes/vector/example.rb +9 -0
  284. data/vendor/assets/src/medias/utils/examples/atomes/vector/infos.txt +1 -0
  285. data/vendor/assets/src/medias/utils/examples/atomes/vector/usage.txt +1 -0
  286. data/vendor/assets/src/medias/utils/examples/atomes/video/example.rb +14 -0
  287. data/vendor/assets/src/medias/utils/examples/atomes/video/infos.txt +1 -0
  288. data/vendor/assets/src/medias/utils/examples/atomes/video/usage.txt +1 -0
  289. data/vendor/assets/src/medias/utils/examples/atomes/vr/example.rb +3 -0
  290. data/vendor/assets/src/medias/utils/examples/atomes/vr/infos.txt +1 -0
  291. data/vendor/assets/src/medias/utils/examples/atomes/vr/usage.txt +1 -0
  292. data/vendor/assets/src/medias/utils/examples/atomes/www/example.rb +10 -0
  293. data/vendor/assets/src/medias/utils/examples/atomes/www/infos.txt +1 -0
  294. data/vendor/assets/src/medias/utils/examples/atomes/www/usage.txt +1 -0
  295. data/vendor/assets/src/medias/utils/examples/molecules/application/example.rb +84 -0
  296. data/vendor/assets/src/medias/utils/examples/molecules/application/infos.txt +1 -0
  297. data/vendor/assets/src/medias/utils/examples/molecules/application/usage.txt +1 -0
  298. data/vendor/assets/src/medias/utils/examples/molecules/browser/example.rb +1 -0
  299. data/vendor/assets/src/medias/utils/examples/molecules/browser/infos.txt +1 -0
  300. data/vendor/assets/src/medias/utils/examples/molecules/browser/usage.txt +1 -0
  301. data/vendor/assets/src/medias/utils/examples/molecules/buttons/example.rb +43 -0
  302. data/vendor/assets/src/medias/utils/examples/molecules/buttons/infos.txt +1 -0
  303. data/vendor/assets/src/medias/utils/examples/molecules/buttons/usage.txt +1 -0
  304. data/vendor/assets/src/medias/utils/examples/molecules/editor/example.rb +139 -0
  305. data/vendor/assets/src/medias/utils/examples/molecules/editor/infos.txt +1 -0
  306. data/vendor/assets/src/medias/utils/examples/molecules/editor/usage.txt +1 -0
  307. data/vendor/assets/src/medias/utils/examples/molecules/input/example.rb +41 -0
  308. data/vendor/assets/src/medias/utils/examples/molecules/input/infos.txt +1 -0
  309. data/vendor/assets/src/medias/utils/examples/molecules/input/usage.txt +1 -0
  310. data/vendor/assets/src/medias/utils/examples/molecules/list/example.rb +13 -0
  311. data/vendor/assets/src/medias/utils/examples/molecules/list/infos.txt +1 -0
  312. data/vendor/assets/src/medias/utils/examples/molecules/list/usage.txt +1 -0
  313. data/vendor/assets/src/medias/utils/examples/molecules/matrix/example.rb +88 -0
  314. data/vendor/assets/src/medias/utils/examples/molecules/matrix/infos.txt +1 -0
  315. data/vendor/assets/src/medias/utils/examples/molecules/matrix/usage.txt +1 -0
  316. data/vendor/assets/src/medias/utils/examples/molecules/page/example.rb +0 -0
  317. data/vendor/assets/src/medias/utils/examples/molecules/page/infos.txt +1 -0
  318. data/vendor/assets/src/medias/utils/examples/molecules/page/usage.txt +1 -0
  319. data/vendor/assets/src/medias/utils/examples/molecules/show/example.rb +0 -0
  320. data/vendor/assets/src/medias/utils/examples/molecules/show/infos.txt +1 -0
  321. data/vendor/assets/src/medias/utils/examples/molecules/show/usage.txt +1 -0
  322. data/vendor/assets/src/medias/utils/examples/molecules/slider/example.rb +17 -0
  323. data/vendor/assets/src/medias/utils/examples/molecules/slider/infos.txt +1 -0
  324. data/vendor/assets/src/medias/utils/examples/molecules/slider/usage.txt +1 -0
  325. data/vendor/assets/src/medias/utils/examples/particles/active/example.rb +0 -0
  326. data/vendor/assets/src/medias/utils/examples/particles/active/infos.txt +1 -0
  327. data/vendor/assets/src/medias/utils/examples/particles/active/usage.txt +1 -0
  328. data/vendor/assets/src/medias/utils/examples/particles/actor/example.rb +23 -0
  329. data/vendor/assets/src/medias/utils/examples/particles/actor/infos.txt +1 -0
  330. data/vendor/assets/src/medias/utils/examples/particles/actor/usage.txt +1 -0
  331. data/vendor/assets/src/medias/utils/examples/particles/affect/example.rb +8 -0
  332. data/vendor/assets/src/medias/utils/examples/particles/affect/infos.txt +1 -0
  333. data/vendor/assets/src/medias/utils/examples/particles/affect/usage.txt +1 -0
  334. data/vendor/assets/src/medias/utils/examples/particles/aid/example.rb +10 -0
  335. data/vendor/assets/src/medias/utils/examples/particles/aid/infos.txt +1 -0
  336. data/vendor/assets/src/medias/utils/examples/particles/aid/usage.txt +1 -0
  337. data/vendor/assets/src/medias/utils/examples/particles/alien/example.rb +0 -0
  338. data/vendor/assets/src/medias/utils/examples/particles/alien/infos.txt +1 -0
  339. data/vendor/assets/src/medias/utils/examples/particles/alien/usage.txt +1 -0
  340. data/vendor/assets/src/medias/utils/examples/particles/align/example.rb +3 -0
  341. data/vendor/assets/src/medias/utils/examples/particles/align/infos.txt +1 -0
  342. data/vendor/assets/src/medias/utils/examples/particles/align/usage.txt +1 -0
  343. data/vendor/assets/src/medias/utils/examples/particles/alpha/example.rb +0 -0
  344. data/vendor/assets/src/medias/utils/examples/particles/alpha/infos.txt +1 -0
  345. data/vendor/assets/src/medias/utils/examples/particles/alpha/usage.txt +1 -0
  346. data/vendor/assets/src/medias/utils/examples/particles/animate/example.rb +176 -0
  347. data/vendor/assets/src/medias/utils/examples/particles/animate/infos.txt +1 -0
  348. data/vendor/assets/src/medias/utils/examples/particles/animate/usage.txt +1 -0
  349. data/vendor/assets/src/medias/utils/examples/particles/apply/example.rb +8 -0
  350. data/vendor/assets/src/medias/utils/examples/particles/apply/infos.txt +1 -0
  351. data/vendor/assets/src/medias/utils/examples/particles/apply/usage.txt +1 -0
  352. data/vendor/assets/src/medias/utils/examples/particles/atomes/example.rb +0 -0
  353. data/vendor/assets/src/medias/utils/examples/particles/atomes/infos.txt +1 -0
  354. data/vendor/assets/src/medias/utils/examples/particles/atomes/usage.txt +1 -0
  355. data/vendor/assets/src/medias/utils/examples/particles/attach/example.rb +34 -0
  356. data/vendor/assets/src/medias/utils/examples/particles/attach/infos.txt +1 -0
  357. data/vendor/assets/src/medias/utils/examples/particles/attach/usage.txt +1 -0
  358. data/vendor/assets/src/medias/utils/examples/particles/backup/example.rb +0 -0
  359. data/vendor/assets/src/medias/utils/examples/particles/backup/infos.txt +1 -0
  360. data/vendor/assets/src/medias/utils/examples/particles/backup/usage.txt +1 -0
  361. data/vendor/assets/src/medias/utils/examples/particles/begin/example.rb +0 -0
  362. data/vendor/assets/src/medias/utils/examples/particles/begin/infos.txt +1 -0
  363. data/vendor/assets/src/medias/utils/examples/particles/begin/usage.txt +1 -0
  364. data/vendor/assets/src/medias/utils/examples/particles/behavior/example.rb +32 -0
  365. data/vendor/assets/src/medias/utils/examples/particles/behavior/infos.txt +1 -0
  366. data/vendor/assets/src/medias/utils/examples/particles/behavior/usage.txt +1 -0
  367. data/vendor/assets/src/medias/utils/examples/particles/blue/example.rb +0 -0
  368. data/vendor/assets/src/medias/utils/examples/particles/blue/infos.txt +1 -0
  369. data/vendor/assets/src/medias/utils/examples/particles/blue/usage.txt +1 -0
  370. data/vendor/assets/src/medias/utils/examples/particles/blur/example.rb +26 -0
  371. data/vendor/assets/src/medias/utils/examples/particles/blur/infos.txt +1 -0
  372. data/vendor/assets/src/medias/utils/examples/particles/blur/usage.txt +1 -0
  373. data/vendor/assets/src/medias/utils/examples/particles/bottom/example.rb +0 -0
  374. data/vendor/assets/src/medias/utils/examples/particles/bottom/infos.txt +1 -0
  375. data/vendor/assets/src/medias/utils/examples/particles/bottom/usage.txt +1 -0
  376. data/vendor/assets/src/medias/utils/examples/particles/browse/example.rb +17 -0
  377. data/vendor/assets/src/medias/utils/examples/particles/browse/infos.txt +1 -0
  378. data/vendor/assets/src/medias/utils/examples/particles/browse/usage.txt +1 -0
  379. data/vendor/assets/src/medias/utils/examples/particles/bundle/example.rb +0 -0
  380. data/vendor/assets/src/medias/utils/examples/particles/bundle/infos.txt +1 -0
  381. data/vendor/assets/src/medias/utils/examples/particles/bundle/usage.txt +1 -0
  382. data/vendor/assets/src/medias/utils/examples/particles/category/example.rb +16 -0
  383. data/vendor/assets/src/medias/utils/examples/particles/category/infos.txt +1 -0
  384. data/vendor/assets/src/medias/utils/examples/particles/category/usage.txt +1 -0
  385. data/vendor/assets/src/medias/utils/examples/particles/cells/example.rb +0 -0
  386. data/vendor/assets/src/medias/utils/examples/particles/cells/infos.txt +1 -0
  387. data/vendor/assets/src/medias/utils/examples/particles/cells/usage.txt +1 -0
  388. data/vendor/assets/src/medias/utils/examples/particles/center/example.rb +7 -0
  389. data/vendor/assets/src/medias/utils/examples/particles/center/infos.txt +1 -0
  390. data/vendor/assets/src/medias/utils/examples/particles/center/usage.txt +1 -0
  391. data/vendor/assets/src/medias/utils/examples/particles/classes/example.rb +0 -0
  392. data/vendor/assets/src/medias/utils/examples/particles/classes/infos.txt +1 -0
  393. data/vendor/assets/src/medias/utils/examples/particles/classes/usage.txt +1 -0
  394. data/vendor/assets/src/medias/utils/examples/particles/clean/example.rb +0 -0
  395. data/vendor/assets/src/medias/utils/examples/particles/clean/infos.txt +1 -0
  396. data/vendor/assets/src/medias/utils/examples/particles/clean/usage.txt +1 -0
  397. data/vendor/assets/src/medias/utils/examples/particles/clear/example.rb +96 -0
  398. data/vendor/assets/src/medias/utils/examples/particles/clear/infos.txt +1 -0
  399. data/vendor/assets/src/medias/utils/examples/particles/clear/usage.txt +1 -0
  400. data/vendor/assets/src/medias/utils/examples/particles/code/example.rb +9 -0
  401. data/vendor/assets/src/medias/utils/examples/particles/code/infos.txt +1 -0
  402. data/vendor/assets/src/medias/utils/examples/particles/code/usage.txt +1 -0
  403. data/vendor/assets/src/medias/utils/examples/particles/collect/example.rb +0 -0
  404. data/vendor/assets/src/medias/utils/examples/particles/collect/infos.txt +1 -0
  405. data/vendor/assets/src/medias/utils/examples/particles/collect/usage.txt +1 -0
  406. data/vendor/assets/src/medias/utils/examples/particles/component/example.rb +0 -0
  407. data/vendor/assets/src/medias/utils/examples/particles/component/infos.txt +1 -0
  408. data/vendor/assets/src/medias/utils/examples/particles/component/usage.txt +1 -0
  409. data/vendor/assets/src/medias/utils/examples/particles/compute/example.rb +16 -0
  410. data/vendor/assets/src/medias/utils/examples/particles/compute/infos.txt +1 -0
  411. data/vendor/assets/src/medias/utils/examples/particles/compute/usage.txt +1 -0
  412. data/vendor/assets/src/medias/utils/examples/particles/connection/example.rb +0 -0
  413. data/vendor/assets/src/medias/utils/examples/particles/connection/infos.txt +1 -0
  414. data/vendor/assets/src/medias/utils/examples/particles/connection/usage.txt +1 -0
  415. data/vendor/assets/src/medias/utils/examples/particles/controller/example.rb +0 -0
  416. data/vendor/assets/src/medias/utils/examples/particles/controller/infos.txt +1 -0
  417. data/vendor/assets/src/medias/utils/examples/particles/controller/usage.txt +1 -0
  418. data/vendor/assets/src/medias/utils/examples/particles/copies/example.rb +0 -0
  419. data/vendor/assets/src/medias/utils/examples/particles/copies/infos.txt +1 -0
  420. data/vendor/assets/src/medias/utils/examples/particles/copies/usage.txt +1 -0
  421. data/vendor/assets/src/medias/utils/examples/particles/copy/example.rb +13 -0
  422. data/vendor/assets/src/medias/utils/examples/particles/copy/infos.txt +1 -0
  423. data/vendor/assets/src/medias/utils/examples/particles/copy/usage.txt +1 -0
  424. data/vendor/assets/src/medias/utils/examples/particles/creator/example.rb +0 -0
  425. data/vendor/assets/src/medias/utils/examples/particles/creator/infos.txt +1 -0
  426. data/vendor/assets/src/medias/utils/examples/particles/creator/usage.txt +1 -0
  427. data/vendor/assets/src/medias/utils/examples/particles/css/example.rb +6 -0
  428. data/vendor/assets/src/medias/utils/examples/particles/css/infos.txt +1 -0
  429. data/vendor/assets/src/medias/utils/examples/particles/css/usage.txt +1 -0
  430. data/vendor/assets/src/medias/utils/examples/particles/cursor/example.rb +0 -0
  431. data/vendor/assets/src/medias/utils/examples/particles/cursor/infos.txt +1 -0
  432. data/vendor/assets/src/medias/utils/examples/particles/cursor/usage.txt +1 -0
  433. data/vendor/assets/src/medias/utils/examples/particles/damping/example.rb +0 -0
  434. data/vendor/assets/src/medias/utils/examples/particles/damping/infos.txt +1 -0
  435. data/vendor/assets/src/medias/utils/examples/particles/damping/usage.txt +1 -0
  436. data/vendor/assets/src/medias/utils/examples/particles/data/example.rb +39 -0
  437. data/vendor/assets/src/medias/utils/examples/particles/data/infos.txt +1 -0
  438. data/vendor/assets/src/medias/utils/examples/particles/data/usage.txt +1 -0
  439. data/vendor/assets/src/medias/utils/examples/particles/definition/example.rb +0 -0
  440. data/vendor/assets/src/medias/utils/examples/particles/definition/infos.txt +1 -0
  441. data/vendor/assets/src/medias/utils/examples/particles/definition/usage.txt +1 -0
  442. data/vendor/assets/src/medias/utils/examples/particles/delete/example.rb +115 -0
  443. data/vendor/assets/src/medias/utils/examples/particles/delete/infos.txt +1 -0
  444. data/vendor/assets/src/medias/utils/examples/particles/delete/usage.txt +1 -0
  445. data/vendor/assets/src/medias/utils/examples/particles/depth/example.rb +0 -0
  446. data/vendor/assets/src/medias/utils/examples/particles/depth/infos.txt +1 -0
  447. data/vendor/assets/src/medias/utils/examples/particles/depth/usage.txt +1 -0
  448. data/vendor/assets/src/medias/utils/examples/particles/detach/example.rb +8 -0
  449. data/vendor/assets/src/medias/utils/examples/particles/detach/infos.txt +1 -0
  450. data/vendor/assets/src/medias/utils/examples/particles/detach/usage.txt +1 -0
  451. data/vendor/assets/src/medias/utils/examples/particles/diffusion/example.rb +0 -0
  452. data/vendor/assets/src/medias/utils/examples/particles/diffusion/infos.txt +1 -0
  453. data/vendor/assets/src/medias/utils/examples/particles/diffusion/usage.txt +1 -0
  454. data/vendor/assets/src/medias/utils/examples/particles/direction/example.rb +0 -0
  455. data/vendor/assets/src/medias/utils/examples/particles/direction/infos.txt +1 -0
  456. data/vendor/assets/src/medias/utils/examples/particles/direction/usage.txt +1 -0
  457. data/vendor/assets/src/medias/utils/examples/particles/display/example.rb +164 -0
  458. data/vendor/assets/src/medias/utils/examples/particles/display/infos.txt +1 -0
  459. data/vendor/assets/src/medias/utils/examples/particles/display/usage.txt +1 -0
  460. data/vendor/assets/src/medias/utils/examples/particles/drag/example.rb +52 -0
  461. data/vendor/assets/src/medias/utils/examples/particles/drag/infos.txt +1 -0
  462. data/vendor/assets/src/medias/utils/examples/particles/drag/usage.txt +1 -0
  463. data/vendor/assets/src/medias/utils/examples/particles/drop/example.rb +36 -0
  464. data/vendor/assets/src/medias/utils/examples/particles/drop/infos.txt +1 -0
  465. data/vendor/assets/src/medias/utils/examples/particles/drop/usage.txt +1 -0
  466. data/vendor/assets/src/medias/utils/examples/particles/duplicate/example.rb +70 -0
  467. data/vendor/assets/src/medias/utils/examples/particles/duplicate/infos.txt +1 -0
  468. data/vendor/assets/src/medias/utils/examples/particles/duplicate/usage.txt +1 -0
  469. data/vendor/assets/src/medias/utils/examples/particles/duration/example.rb +0 -0
  470. data/vendor/assets/src/medias/utils/examples/particles/duration/infos.txt +1 -0
  471. data/vendor/assets/src/medias/utils/examples/particles/duration/usage.txt +1 -0
  472. data/vendor/assets/src/medias/utils/examples/particles/ease/example.rb +0 -0
  473. data/vendor/assets/src/medias/utils/examples/particles/ease/infos.txt +1 -0
  474. data/vendor/assets/src/medias/utils/examples/particles/ease/usage.txt +1 -0
  475. data/vendor/assets/src/medias/utils/examples/particles/edit/example.rb +139 -0
  476. data/vendor/assets/src/medias/utils/examples/particles/edit/infos.txt +1 -0
  477. data/vendor/assets/src/medias/utils/examples/particles/edit/usage.txt +1 -0
  478. data/vendor/assets/src/medias/utils/examples/particles/email/example.rb +0 -0
  479. data/vendor/assets/src/medias/utils/examples/particles/email/infos.txt +1 -0
  480. data/vendor/assets/src/medias/utils/examples/particles/email/usage.txt +1 -0
  481. data/vendor/assets/src/medias/utils/examples/particles/end/example.rb +186 -0
  482. data/vendor/assets/src/medias/utils/examples/particles/end/infos.txt +1 -0
  483. data/vendor/assets/src/medias/utils/examples/particles/end/usage.txt +1 -0
  484. data/vendor/assets/src/medias/utils/examples/particles/exchange/example.rb +17 -0
  485. data/vendor/assets/src/medias/utils/examples/particles/exchange/infos.txt +1 -0
  486. data/vendor/assets/src/medias/utils/examples/particles/exchange/usage.txt +1 -0
  487. data/vendor/assets/src/medias/utils/examples/particles/executor/example.rb +36 -0
  488. data/vendor/assets/src/medias/utils/examples/particles/executor/infos.txt +1 -0
  489. data/vendor/assets/src/medias/utils/examples/particles/executor/usage.txt +1 -0
  490. data/vendor/assets/src/medias/utils/examples/particles/fasten/example.rb +23 -0
  491. data/vendor/assets/src/medias/utils/examples/particles/fasten/infos.txt +1 -0
  492. data/vendor/assets/src/medias/utils/examples/particles/fasten/usage.txt +1 -0
  493. data/vendor/assets/src/medias/utils/examples/particles/fill/example.rb +23 -0
  494. data/vendor/assets/src/medias/utils/examples/particles/fill/infos.txt +1 -0
  495. data/vendor/assets/src/medias/utils/examples/particles/fill/usage.txt +1 -0
  496. data/vendor/assets/src/medias/utils/examples/particles/format/example.rb +0 -0
  497. data/vendor/assets/src/medias/utils/examples/particles/format/infos.txt +1 -0
  498. data/vendor/assets/src/medias/utils/examples/particles/format/usage.txt +1 -0
  499. data/vendor/assets/src/medias/utils/examples/particles/fullscreen/example.rb +0 -0
  500. data/vendor/assets/src/medias/utils/examples/particles/fullscreen/infos.txt +1 -0
  501. data/vendor/assets/src/medias/utils/examples/particles/fullscreen/usage.txt +1 -0
  502. data/vendor/assets/src/medias/utils/examples/particles/get/example.rb +16 -0
  503. data/vendor/assets/src/medias/utils/examples/particles/get/infos.txt +1 -0
  504. data/vendor/assets/src/medias/utils/examples/particles/get/usage.txt +1 -0
  505. data/vendor/assets/src/medias/utils/examples/particles/gradient/example.rb +40 -0
  506. data/vendor/assets/src/medias/utils/examples/particles/gradient/infos.txt +1 -0
  507. data/vendor/assets/src/medias/utils/examples/particles/gradient/usage.txt +1 -0
  508. data/vendor/assets/src/medias/utils/examples/particles/green/example.rb +0 -0
  509. data/vendor/assets/src/medias/utils/examples/particles/green/infos.txt +1 -0
  510. data/vendor/assets/src/medias/utils/examples/particles/green/usage.txt +1 -0
  511. data/vendor/assets/src/medias/utils/examples/particles/height/example.rb +0 -0
  512. data/vendor/assets/src/medias/utils/examples/particles/height/infos.txt +1 -0
  513. data/vendor/assets/src/medias/utils/examples/particles/height/usage.txt +1 -0
  514. data/vendor/assets/src/medias/utils/examples/particles/hide/example.rb +0 -0
  515. data/vendor/assets/src/medias/utils/examples/particles/hide/infos.txt +1 -0
  516. data/vendor/assets/src/medias/utils/examples/particles/hide/usage.txt +1 -0
  517. data/vendor/assets/src/medias/utils/examples/particles/holder/example.rb +62 -0
  518. data/vendor/assets/src/medias/utils/examples/particles/holder/infos.txt +1 -0
  519. data/vendor/assets/src/medias/utils/examples/particles/holder/usage.txt +1 -0
  520. data/vendor/assets/src/medias/utils/examples/particles/hyperedit/example.rb +0 -0
  521. data/vendor/assets/src/medias/utils/examples/particles/hyperedit/infos.txt +1 -0
  522. data/vendor/assets/src/medias/utils/examples/particles/hyperedit/usage.txt +1 -0
  523. data/vendor/assets/src/medias/utils/examples/particles/hypertext/example.rb +134 -0
  524. data/vendor/assets/src/medias/utils/examples/particles/hypertext/infos.txt +1 -0
  525. data/vendor/assets/src/medias/utils/examples/particles/hypertext/usage.txt +1 -0
  526. data/vendor/assets/src/medias/utils/examples/particles/id/example.rb +14 -0
  527. data/vendor/assets/src/medias/utils/examples/particles/id/infos.txt +1 -0
  528. data/vendor/assets/src/medias/utils/examples/particles/id/usage.txt +1 -0
  529. data/vendor/assets/src/medias/utils/examples/particles/import/example.rb +33 -0
  530. data/vendor/assets/src/medias/utils/examples/particles/import/infos.txt +1 -0
  531. data/vendor/assets/src/medias/utils/examples/particles/import/usage.txt +1 -0
  532. data/vendor/assets/src/medias/utils/examples/particles/increment/example.rb +23 -0
  533. data/vendor/assets/src/medias/utils/examples/particles/increment/infos.txt +1 -0
  534. data/vendor/assets/src/medias/utils/examples/particles/increment/usage.txt +1 -0
  535. data/vendor/assets/src/medias/utils/examples/particles/insert/example.rb +0 -0
  536. data/vendor/assets/src/medias/utils/examples/particles/insert/infos.txt +1 -0
  537. data/vendor/assets/src/medias/utils/examples/particles/insert/usage.txt +1 -0
  538. data/vendor/assets/src/medias/utils/examples/particles/inside/example.rb +0 -0
  539. data/vendor/assets/src/medias/utils/examples/particles/inside/infos.txt +1 -0
  540. data/vendor/assets/src/medias/utils/examples/particles/inside/usage.txt +1 -0
  541. data/vendor/assets/src/medias/utils/examples/particles/int8/example.rb +36 -0
  542. data/vendor/assets/src/medias/utils/examples/particles/int8/infos.txt +1 -0
  543. data/vendor/assets/src/medias/utils/examples/particles/int8/usage.txt +1 -0
  544. data/vendor/assets/src/medias/utils/examples/particles/invert/example.rb +0 -0
  545. data/vendor/assets/src/medias/utils/examples/particles/invert/infos.txt +1 -0
  546. data/vendor/assets/src/medias/utils/examples/particles/invert/usage.txt +1 -0
  547. data/vendor/assets/src/medias/utils/examples/particles/keyboard/example.rb +69 -0
  548. data/vendor/assets/src/medias/utils/examples/particles/keyboard/infos.txt +1 -0
  549. data/vendor/assets/src/medias/utils/examples/particles/keyboard/usage.txt +1 -0
  550. data/vendor/assets/src/medias/utils/examples/particles/language/example.rb +0 -0
  551. data/vendor/assets/src/medias/utils/examples/particles/language/infos.txt +1 -0
  552. data/vendor/assets/src/medias/utils/examples/particles/language/usage.txt +1 -0
  553. data/vendor/assets/src/medias/utils/examples/particles/latitude/example.rb +0 -0
  554. data/vendor/assets/src/medias/utils/examples/particles/latitude/infos.txt +1 -0
  555. data/vendor/assets/src/medias/utils/examples/particles/latitude/usage.txt +1 -0
  556. data/vendor/assets/src/medias/utils/examples/particles/layout/example.rb +38 -0
  557. data/vendor/assets/src/medias/utils/examples/particles/layout/infos.txt +1 -0
  558. data/vendor/assets/src/medias/utils/examples/particles/layout/usage.txt +1 -0
  559. data/vendor/assets/src/medias/utils/examples/particles/left/example.rb +0 -0
  560. data/vendor/assets/src/medias/utils/examples/particles/left/infos.txt +1 -0
  561. data/vendor/assets/src/medias/utils/examples/particles/left/usage.txt +1 -0
  562. data/vendor/assets/src/medias/utils/examples/particles/location/example.rb +0 -0
  563. data/vendor/assets/src/medias/utils/examples/particles/location/infos.txt +1 -0
  564. data/vendor/assets/src/medias/utils/examples/particles/location/usage.txt +1 -0
  565. data/vendor/assets/src/medias/utils/examples/particles/login/example.rb +84 -0
  566. data/vendor/assets/src/medias/utils/examples/particles/login/infos.txt +1 -0
  567. data/vendor/assets/src/medias/utils/examples/particles/login/usage.txt +1 -0
  568. data/vendor/assets/src/medias/utils/examples/particles/longitude/example.rb +0 -0
  569. data/vendor/assets/src/medias/utils/examples/particles/longitude/infos.txt +1 -0
  570. data/vendor/assets/src/medias/utils/examples/particles/longitude/usage.txt +1 -0
  571. data/vendor/assets/src/medias/utils/examples/particles/margin/example.rb +0 -0
  572. data/vendor/assets/src/medias/utils/examples/particles/margin/infos.txt +1 -0
  573. data/vendor/assets/src/medias/utils/examples/particles/margin/usage.txt +1 -0
  574. data/vendor/assets/src/medias/utils/examples/particles/markers/example.rb +0 -0
  575. data/vendor/assets/src/medias/utils/examples/particles/markers/infos.txt +1 -0
  576. data/vendor/assets/src/medias/utils/examples/particles/markers/usage.txt +1 -0
  577. data/vendor/assets/src/medias/utils/examples/particles/markup/example.rb +4 -0
  578. data/vendor/assets/src/medias/utils/examples/particles/markup/infos.txt +1 -0
  579. data/vendor/assets/src/medias/utils/examples/particles/markup/usage.txt +1 -0
  580. data/vendor/assets/src/medias/utils/examples/particles/mass/example.rb +0 -0
  581. data/vendor/assets/src/medias/utils/examples/particles/mass/infos.txt +1 -0
  582. data/vendor/assets/src/medias/utils/examples/particles/mass/usage.txt +1 -0
  583. data/vendor/assets/src/medias/utils/examples/particles/match/example.rb +115 -0
  584. data/vendor/assets/src/medias/utils/examples/particles/match/infos.txt +1 -0
  585. data/vendor/assets/src/medias/utils/examples/particles/match/usage.txt +1 -0
  586. data/vendor/assets/src/medias/utils/examples/particles/message/example.rb +0 -0
  587. data/vendor/assets/src/medias/utils/examples/particles/message/infos.txt +1 -0
  588. data/vendor/assets/src/medias/utils/examples/particles/message/usage.txt +1 -0
  589. data/vendor/assets/src/medias/utils/examples/particles/meteo/example.rb +8 -0
  590. data/vendor/assets/src/medias/utils/examples/particles/meteo/infos.txt +1 -0
  591. data/vendor/assets/src/medias/utils/examples/particles/meteo/usage.txt +1 -0
  592. data/vendor/assets/src/medias/utils/examples/particles/mute/example.rb +0 -0
  593. data/vendor/assets/src/medias/utils/examples/particles/mute/infos.txt +1 -0
  594. data/vendor/assets/src/medias/utils/examples/particles/mute/usage.txt +1 -0
  595. data/vendor/assets/src/medias/utils/examples/particles/name/example.rb +0 -0
  596. data/vendor/assets/src/medias/utils/examples/particles/name/infos.txt +1 -0
  597. data/vendor/assets/src/medias/utils/examples/particles/name/usage.txt +1 -0
  598. data/vendor/assets/src/medias/utils/examples/particles/on/example.rb +15 -0
  599. data/vendor/assets/src/medias/utils/examples/particles/on/infos.txt +1 -0
  600. data/vendor/assets/src/medias/utils/examples/particles/on/usage.txt +1 -0
  601. data/vendor/assets/src/medias/utils/examples/particles/opacity/example.rb +9 -0
  602. data/vendor/assets/src/medias/utils/examples/particles/opacity/infos.txt +1 -0
  603. data/vendor/assets/src/medias/utils/examples/particles/opacity/usage.txt +1 -0
  604. data/vendor/assets/src/medias/utils/examples/particles/option/example.rb +0 -0
  605. data/vendor/assets/src/medias/utils/examples/particles/option/infos.txt +1 -0
  606. data/vendor/assets/src/medias/utils/examples/particles/option/usage.txt +1 -0
  607. data/vendor/assets/src/medias/utils/examples/particles/organise/example.rb +0 -0
  608. data/vendor/assets/src/medias/utils/examples/particles/organise/infos.txt +1 -0
  609. data/vendor/assets/src/medias/utils/examples/particles/organise/usage.txt +1 -0
  610. data/vendor/assets/src/medias/utils/examples/particles/orientation/example.rb +0 -0
  611. data/vendor/assets/src/medias/utils/examples/particles/orientation/infos.txt +1 -0
  612. data/vendor/assets/src/medias/utils/examples/particles/orientation/usage.txt +1 -0
  613. data/vendor/assets/src/medias/utils/examples/particles/over/example.rb +28 -0
  614. data/vendor/assets/src/medias/utils/examples/particles/over/infos.txt +1 -0
  615. data/vendor/assets/src/medias/utils/examples/particles/over/usage.txt +1 -0
  616. data/vendor/assets/src/medias/utils/examples/particles/overflow/example.rb +27 -0
  617. data/vendor/assets/src/medias/utils/examples/particles/overflow/infos.txt +1 -0
  618. data/vendor/assets/src/medias/utils/examples/particles/overflow/usage.txt +1 -0
  619. data/vendor/assets/src/medias/utils/examples/particles/pan/example.rb +0 -0
  620. data/vendor/assets/src/medias/utils/examples/particles/pan/infos.txt +1 -0
  621. data/vendor/assets/src/medias/utils/examples/particles/pan/usage.txt +1 -0
  622. data/vendor/assets/src/medias/utils/examples/particles/password/example.rb +0 -0
  623. data/vendor/assets/src/medias/utils/examples/particles/password/infos.txt +1 -0
  624. data/vendor/assets/src/medias/utils/examples/particles/password/usage.txt +1 -0
  625. data/vendor/assets/src/medias/utils/examples/particles/paste/example.rb +0 -0
  626. data/vendor/assets/src/medias/utils/examples/particles/paste/infos.txt +1 -0
  627. data/vendor/assets/src/medias/utils/examples/particles/paste/usage.txt +1 -0
  628. data/vendor/assets/src/medias/utils/examples/particles/path/example.rb +0 -0
  629. data/vendor/assets/src/medias/utils/examples/particles/path/infos.txt +1 -0
  630. data/vendor/assets/src/medias/utils/examples/particles/path/usage.txt +1 -0
  631. data/vendor/assets/src/medias/utils/examples/particles/pattern/example.rb +0 -0
  632. data/vendor/assets/src/medias/utils/examples/particles/pattern/infos.txt +1 -0
  633. data/vendor/assets/src/medias/utils/examples/particles/pattern/usage.txt +1 -0
  634. data/vendor/assets/src/medias/utils/examples/particles/pause/example.rb +0 -0
  635. data/vendor/assets/src/medias/utils/examples/particles/pause/infos.txt +1 -0
  636. data/vendor/assets/src/medias/utils/examples/particles/pause/usage.txt +1 -0
  637. data/vendor/assets/src/medias/utils/examples/particles/play/example.rb +164 -0
  638. data/vendor/assets/src/medias/utils/examples/particles/play/infos.txt +1 -0
  639. data/vendor/assets/src/medias/utils/examples/particles/play/usage.txt +1 -0
  640. data/vendor/assets/src/medias/utils/examples/particles/position/example.rb +0 -0
  641. data/vendor/assets/src/medias/utils/examples/particles/position/infos.txt +1 -0
  642. data/vendor/assets/src/medias/utils/examples/particles/position/usage.txt +1 -0
  643. data/vendor/assets/src/medias/utils/examples/particles/preset/example.rb +33 -0
  644. data/vendor/assets/src/medias/utils/examples/particles/preset/infos.txt +1 -0
  645. data/vendor/assets/src/medias/utils/examples/particles/preset/usage.txt +1 -0
  646. data/vendor/assets/src/medias/utils/examples/particles/preview/example.rb +0 -0
  647. data/vendor/assets/src/medias/utils/examples/particles/preview/infos.txt +1 -0
  648. data/vendor/assets/src/medias/utils/examples/particles/preview/usage.txt +1 -0
  649. data/vendor/assets/src/medias/utils/examples/particles/read/example.rb +10 -0
  650. data/vendor/assets/src/medias/utils/examples/particles/read/infos.txt +1 -0
  651. data/vendor/assets/src/medias/utils/examples/particles/read/usage.txt +1 -0
  652. data/vendor/assets/src/medias/utils/examples/particles/real/example.rb +0 -0
  653. data/vendor/assets/src/medias/utils/examples/particles/real/infos.txt +1 -0
  654. data/vendor/assets/src/medias/utils/examples/particles/real/usage.txt +1 -0
  655. data/vendor/assets/src/medias/utils/examples/particles/record/example.rb +88 -0
  656. data/vendor/assets/src/medias/utils/examples/particles/record/infos.txt +1 -0
  657. data/vendor/assets/src/medias/utils/examples/particles/record/usage.txt +1 -0
  658. data/vendor/assets/src/medias/utils/examples/particles/red/example.rb +0 -0
  659. data/vendor/assets/src/medias/utils/examples/particles/red/infos.txt +1 -0
  660. data/vendor/assets/src/medias/utils/examples/particles/red/usage.txt +1 -0
  661. data/vendor/assets/src/medias/utils/examples/particles/relations/example.rb +0 -0
  662. data/vendor/assets/src/medias/utils/examples/particles/relations/infos.txt +1 -0
  663. data/vendor/assets/src/medias/utils/examples/particles/relations/usage.txt +1 -0
  664. data/vendor/assets/src/medias/utils/examples/particles/remove/example.rb +70 -0
  665. data/vendor/assets/src/medias/utils/examples/particles/remove/infos.txt +1 -0
  666. data/vendor/assets/src/medias/utils/examples/particles/remove/usage.txt +1 -0
  667. data/vendor/assets/src/medias/utils/examples/particles/remove_classes/example.rb +0 -0
  668. data/vendor/assets/src/medias/utils/examples/particles/remove_classes/infos.txt +1 -0
  669. data/vendor/assets/src/medias/utils/examples/particles/remove_classes/usage.txt +1 -0
  670. data/vendor/assets/src/medias/utils/examples/particles/renderers/example.rb +0 -0
  671. data/vendor/assets/src/medias/utils/examples/particles/renderers/infos.txt +1 -0
  672. data/vendor/assets/src/medias/utils/examples/particles/renderers/usage.txt +1 -0
  673. data/vendor/assets/src/medias/utils/examples/particles/resize/example.rb +21 -0
  674. data/vendor/assets/src/medias/utils/examples/particles/resize/infos.txt +1 -0
  675. data/vendor/assets/src/medias/utils/examples/particles/resize/usage.txt +1 -0
  676. data/vendor/assets/src/medias/utils/examples/particles/right/example.rb +15 -0
  677. data/vendor/assets/src/medias/utils/examples/particles/right/infos.txt +1 -0
  678. data/vendor/assets/src/medias/utils/examples/particles/right/usage.txt +1 -0
  679. data/vendor/assets/src/medias/utils/examples/particles/role/example.rb +23 -0
  680. data/vendor/assets/src/medias/utils/examples/particles/role/infos.txt +1 -0
  681. data/vendor/assets/src/medias/utils/examples/particles/role/usage.txt +1 -0
  682. data/vendor/assets/src/medias/utils/examples/particles/rotate/example.rb +8 -0
  683. data/vendor/assets/src/medias/utils/examples/particles/rotate/infos.txt +1 -0
  684. data/vendor/assets/src/medias/utils/examples/particles/rotate/usage.txt +1 -0
  685. data/vendor/assets/src/medias/utils/examples/particles/run/example.rb +17 -0
  686. data/vendor/assets/src/medias/utils/examples/particles/run/infos.txt +1 -0
  687. data/vendor/assets/src/medias/utils/examples/particles/run/usage.txt +1 -0
  688. data/vendor/assets/src/medias/utils/examples/particles/schedule/example.rb +23 -0
  689. data/vendor/assets/src/medias/utils/examples/particles/schedule/infos.txt +1 -0
  690. data/vendor/assets/src/medias/utils/examples/particles/schedule/usage.txt +1 -0
  691. data/vendor/assets/src/medias/utils/examples/particles/selected/example.rb +56 -0
  692. data/vendor/assets/src/medias/utils/examples/particles/selected/infos.txt +1 -0
  693. data/vendor/assets/src/medias/utils/examples/particles/selected/usage.txt +1 -0
  694. data/vendor/assets/src/medias/utils/examples/particles/selection/example.rb +0 -0
  695. data/vendor/assets/src/medias/utils/examples/particles/selection/infos.txt +1 -0
  696. data/vendor/assets/src/medias/utils/examples/particles/selection/usage.txt +1 -0
  697. data/vendor/assets/src/medias/utils/examples/particles/size/example.rb +21 -0
  698. data/vendor/assets/src/medias/utils/examples/particles/size/infos.txt +1 -0
  699. data/vendor/assets/src/medias/utils/examples/particles/size/usage.txt +1 -0
  700. data/vendor/assets/src/medias/utils/examples/particles/smooth/example.rb +9 -0
  701. data/vendor/assets/src/medias/utils/examples/particles/smooth/infos.txt +1 -0
  702. data/vendor/assets/src/medias/utils/examples/particles/smooth/usage.txt +1 -0
  703. data/vendor/assets/src/medias/utils/examples/particles/sort/example.rb +0 -0
  704. data/vendor/assets/src/medias/utils/examples/particles/sort/infos.txt +1 -0
  705. data/vendor/assets/src/medias/utils/examples/particles/sort/usage.txt +1 -0
  706. data/vendor/assets/src/medias/utils/examples/particles/spacing/example.rb +0 -0
  707. data/vendor/assets/src/medias/utils/examples/particles/spacing/infos.txt +1 -0
  708. data/vendor/assets/src/medias/utils/examples/particles/spacing/usage.txt +1 -0
  709. data/vendor/assets/src/medias/utils/examples/particles/start/example.rb +0 -0
  710. data/vendor/assets/src/medias/utils/examples/particles/start/infos.txt +1 -0
  711. data/vendor/assets/src/medias/utils/examples/particles/start/usage.txt +1 -0
  712. data/vendor/assets/src/medias/utils/examples/particles/state/example.rb +0 -0
  713. data/vendor/assets/src/medias/utils/examples/particles/state/infos.txt +1 -0
  714. data/vendor/assets/src/medias/utils/examples/particles/state/usage.txt +1 -0
  715. data/vendor/assets/src/medias/utils/examples/particles/stiffness/example.rb +0 -0
  716. data/vendor/assets/src/medias/utils/examples/particles/stiffness/infos.txt +1 -0
  717. data/vendor/assets/src/medias/utils/examples/particles/stiffness/usage.txt +1 -0
  718. data/vendor/assets/src/medias/utils/examples/particles/stop/example.rb +0 -0
  719. data/vendor/assets/src/medias/utils/examples/particles/stop/infos.txt +1 -0
  720. data/vendor/assets/src/medias/utils/examples/particles/stop/usage.txt +1 -0
  721. data/vendor/assets/src/medias/utils/examples/particles/storage/example.rb +19 -0
  722. data/vendor/assets/src/medias/utils/examples/particles/storage/infos.txt +1 -0
  723. data/vendor/assets/src/medias/utils/examples/particles/storage/usage.txt +1 -0
  724. data/vendor/assets/src/medias/utils/examples/particles/style/example.rb +4 -0
  725. data/vendor/assets/src/medias/utils/examples/particles/style/infos.txt +1 -0
  726. data/vendor/assets/src/medias/utils/examples/particles/style/usage.txt +1 -0
  727. data/vendor/assets/src/medias/utils/examples/particles/tag/example.rb +24 -0
  728. data/vendor/assets/src/medias/utils/examples/particles/tag/infos.txt +1 -0
  729. data/vendor/assets/src/medias/utils/examples/particles/tag/usage.txt +1 -0
  730. data/vendor/assets/src/medias/utils/examples/particles/target/example.rb +25 -0
  731. data/vendor/assets/src/medias/utils/examples/particles/target/infos.txt +1 -0
  732. data/vendor/assets/src/medias/utils/examples/particles/target/usage.txt +1 -0
  733. data/vendor/assets/src/medias/utils/examples/particles/targets/example.rb +0 -0
  734. data/vendor/assets/src/medias/utils/examples/particles/targets/infos.txt +1 -0
  735. data/vendor/assets/src/medias/utils/examples/particles/targets/usage.txt +1 -0
  736. data/vendor/assets/src/medias/utils/examples/particles/temporary/example.rb +0 -0
  737. data/vendor/assets/src/medias/utils/examples/particles/temporary/infos.txt +1 -0
  738. data/vendor/assets/src/medias/utils/examples/particles/temporary/usage.txt +1 -0
  739. data/vendor/assets/src/medias/utils/examples/particles/terminal/example.rb +6 -0
  740. data/vendor/assets/src/medias/utils/examples/particles/terminal/infos.txt +1 -0
  741. data/vendor/assets/src/medias/utils/examples/particles/terminal/usage.txt +1 -0
  742. data/vendor/assets/src/medias/utils/examples/particles/thickness/example.rb +0 -0
  743. data/vendor/assets/src/medias/utils/examples/particles/thickness/infos.txt +1 -0
  744. data/vendor/assets/src/medias/utils/examples/particles/thickness/usage.txt +1 -0
  745. data/vendor/assets/src/medias/utils/examples/particles/tick/example.rb +39 -0
  746. data/vendor/assets/src/medias/utils/examples/particles/tick/infos.txt +1 -0
  747. data/vendor/assets/src/medias/utils/examples/particles/tick/usage.txt +1 -0
  748. data/vendor/assets/src/medias/utils/examples/particles/time/example.rb +194 -0
  749. data/vendor/assets/src/medias/utils/examples/particles/time/infos.txt +1 -0
  750. data/vendor/assets/src/medias/utils/examples/particles/time/usage.txt +1 -0
  751. data/vendor/assets/src/medias/utils/examples/particles/top/example.rb +0 -0
  752. data/vendor/assets/src/medias/utils/examples/particles/top/infos.txt +1 -0
  753. data/vendor/assets/src/medias/utils/examples/particles/top/usage.txt +1 -0
  754. data/vendor/assets/src/medias/utils/examples/particles/touch/example.rb +43 -0
  755. data/vendor/assets/src/medias/utils/examples/particles/touch/infos.txt +1 -0
  756. data/vendor/assets/src/medias/utils/examples/particles/touch/usage.txt +1 -0
  757. data/vendor/assets/src/medias/utils/examples/particles/type/example.rb +18 -0
  758. data/vendor/assets/src/medias/utils/examples/particles/type/infos.txt +1 -0
  759. data/vendor/assets/src/medias/utils/examples/particles/type/usage.txt +1 -0
  760. data/vendor/assets/src/medias/utils/examples/particles/unfasten/example.rb +23 -0
  761. data/vendor/assets/src/medias/utils/examples/particles/unfasten/infos.txt +1 -0
  762. data/vendor/assets/src/medias/utils/examples/particles/unfasten/usage.txt +1 -0
  763. data/vendor/assets/src/medias/utils/examples/particles/unit/example.rb +14 -0
  764. data/vendor/assets/src/medias/utils/examples/particles/unit/infos.txt +1 -0
  765. data/vendor/assets/src/medias/utils/examples/particles/unit/usage.txt +1 -0
  766. data/vendor/assets/src/medias/utils/examples/particles/value/example.rb +0 -0
  767. data/vendor/assets/src/medias/utils/examples/particles/value/infos.txt +1 -0
  768. data/vendor/assets/src/medias/utils/examples/particles/value/usage.txt +1 -0
  769. data/vendor/assets/src/medias/utils/examples/particles/velocity/example.rb +0 -0
  770. data/vendor/assets/src/medias/utils/examples/particles/velocity/infos.txt +1 -0
  771. data/vendor/assets/src/medias/utils/examples/particles/velocity/usage.txt +1 -0
  772. data/vendor/assets/src/medias/utils/examples/particles/web/example.rb +0 -0
  773. data/vendor/assets/src/medias/utils/examples/particles/web/infos.txt +1 -0
  774. data/vendor/assets/src/medias/utils/examples/particles/web/usage.txt +1 -0
  775. data/vendor/assets/src/medias/utils/examples/particles/width/example.rb +0 -0
  776. data/vendor/assets/src/medias/utils/examples/particles/width/infos.txt +1 -0
  777. data/vendor/assets/src/medias/utils/examples/particles/width/usage.txt +1 -0
  778. data/vendor/assets/src/medias/utils/examples/particles/zoom/example.rb +0 -0
  779. data/vendor/assets/src/medias/utils/examples/particles/zoom/infos.txt +1 -0
  780. data/vendor/assets/src/medias/utils/examples/particles/zoom/usage.txt +1 -0
  781. data/vendor/assets/src/medias/utils/examples/presets/box/example.rb +1 -0
  782. data/vendor/assets/src/medias/utils/examples/presets/box/infos.txt +1 -0
  783. data/vendor/assets/src/medias/utils/examples/presets/box/usage.txt +1 -0
  784. data/vendor/assets/src/medias/utils/examples/presets/circle/example.rb +1 -0
  785. data/vendor/assets/src/medias/utils/examples/presets/circle/infos.txt +1 -0
  786. data/vendor/assets/src/medias/utils/examples/presets/circle/usage.txt +1 -0
  787. data/vendor/assets/src/medias/utils/examples.rb +187 -0
  788. data/vendor/assets/src/medias/utils/test.rb +1 -0
  789. data/vendor/assets/src-tauri/Cargo.toml +5 -2
  790. data/vendor/assets/src-tauri/capabilities/default.json +10 -0
  791. data/vendor/assets/src-tauri/src/lib.rs +14 -0
  792. data/vendor/assets/src-tauri/src/main.rs +34 -30
  793. data/vendor/assets/src-tauri/src/main_org.rs +6 -0
  794. data/vendor/assets/src-tauri/src/midi.rs +2 -2
  795. data/vendor/assets/src-tauri/tauri.conf.json +29 -61
  796. metadata +601 -23
  797. data/vendor/assets/application/examples/read.rb +0 -13
  798. data/vendor/assets/src/js/third_parties/webaudio-pianoroll.min.js +0 -66
@@ -0,0 +1,1747 @@
1
+ customElements.define("webaudio-pianoroll", class Pianoroll extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ this.noteIdCounter = 0;
5
+ this.editing = true
6
+ this.tool = 'create'
7
+ }
8
+
9
+ clearSequence() {
10
+ this.removeAllMarkers()
11
+ this.sequence = [];
12
+ this.redraw();
13
+ console.log("Sequence cleared and view refreshed.");
14
+ }
15
+
16
+ setSequence(newSequence) {
17
+ if (Array.isArray(newSequence)) {
18
+ this.sequence = newSequence;
19
+ this.noteIdCounter = newSequence.length > 0 ? Math.max(...newSequence.map(note => note.id)) + 1 : 0;
20
+ this.sortSequence();
21
+ this.redraw();
22
+ console.log("Sequence replaced and view refreshed.");
23
+ } else {
24
+ console.error("Invalid sequence format. Please provide an array.");
25
+ }
26
+ }
27
+
28
+ defineprop() {
29
+ const plist = this.module.properties;
30
+ for (let k in plist) {
31
+ const v = plist[k];
32
+ this["_" + k] = this.getAttr(k, v.value);
33
+ Object.defineProperty(this, k, {
34
+ get: () => {
35
+ return this["_" + k]
36
+ },
37
+ set: (val) => {
38
+ this["_" + k] = val;
39
+ if (typeof (this[v.observer]) == "function")
40
+ this[v.observer]();
41
+ }
42
+ });
43
+ }
44
+ }
45
+
46
+
47
+ marker(position, id, label) {
48
+ const playhead = document.createElement("div");
49
+ playhead.className = "marker";
50
+ playhead.style.position = "absolute";
51
+ playhead.style.left = `${(position - this.xoffset) * this.stepw + this.yruler + this.kbwidth}px`;
52
+
53
+ // Ajout de l'id et du label comme contenu de la div
54
+ playhead.id = id;
55
+ playhead.dataset.id = id;
56
+ playhead.dataset.label = label;
57
+ playhead.textContent = label;
58
+
59
+ // Création du trait rouge
60
+ const locator = document.createElement("div");
61
+ locator.style.position = "absolute";
62
+ locator.style.width = "2px"; // Épaisseur du trait
63
+ locator.style.height = "100%"; // S'étend sur toute la hauteur du conteneur
64
+ locator.style.backgroundColor = "red";
65
+ locator.style.left = '0px'; // Positionner au centre du playhead
66
+ locator.style.top = '0px';
67
+ locator.style.transform = "translateX(-50%)"; // Centrer précisément le trait
68
+
69
+ playhead.appendChild(locator);
70
+
71
+ playhead.addEventListener('click', () => {
72
+ console.log(`Playhead ID: ${id}`);
73
+ });
74
+
75
+ playhead.addEventListener('mousedown', (e) => {
76
+ const initialX = e.clientX;
77
+ const initialLeft = parseInt(playhead.style.left, 10);
78
+
79
+ const onMouseMove = (e) => {
80
+ const deltaX = e.clientX - initialX;
81
+ let newLeft = initialLeft + deltaX;
82
+
83
+ let newPosition = (newLeft - this.yruler - this.kbwidth) / this.stepw + this.xoffset;
84
+
85
+ newPosition = Math.round(newPosition / this.snap) * this.snap;
86
+
87
+ newLeft = (newPosition - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
88
+ playhead.style.left = `${newLeft}px`;
89
+
90
+ console.log(`Playhead ${id} moved to quantized position: ${newPosition}`);
91
+
92
+ const markerEvent = this.sequence.find(ev => ev.id === id && ev.type === 'marker');
93
+ if (markerEvent) {
94
+ markerEvent.t = newPosition;
95
+ console.log(`Updated event in sequence for marker ID: ${id}, new position: ${newPosition}`);
96
+ }
97
+ };
98
+
99
+ const onMouseUp = () => {
100
+ document.removeEventListener('mousemove', onMouseMove);
101
+ document.removeEventListener('mouseup', onMouseUp);
102
+ };
103
+
104
+ document.addEventListener('mousemove', onMouseMove);
105
+ document.addEventListener('mouseup', onMouseUp);
106
+ });
107
+
108
+ this.canvas.parentElement.appendChild(playhead);
109
+ const ev = {
110
+ id: id,
111
+ t: position,
112
+ n: 0, // makers have no note info
113
+ g: 0, // makers have no length
114
+ f: 0, // not selected
115
+ type: 'marker',
116
+ details: {label: label, element: playhead},
117
+ textureApplied: false
118
+ };
119
+
120
+ this.sequence.push(ev);
121
+ }
122
+
123
+ removeAllMarkers() {
124
+ // Itérer sur this.sequence pour trouver tous les événements de type 'marker'
125
+ const markers = this.sequence.filter(ev => ev.type === 'marker');
126
+
127
+ // Appeler removeMarker(id) pour chaque marker trouvé
128
+ markers.forEach(marker => {
129
+ this.removeMarker(marker.id);
130
+ });
131
+
132
+ console.log(`${markers.length} markers removed from sequence.`);
133
+ }
134
+
135
+ removeMarker(id) {
136
+ const playhead = document.getElementById(id);
137
+ if (playhead) {
138
+ playhead.parentElement.removeChild(playhead);
139
+ console.log(`Playhead with ID: ${id} has been removed.`);
140
+ } else {
141
+ console.log(`Playhead with ID: ${id} does not exist.`);
142
+ }
143
+ const eventIndex = this.sequence.findIndex(ev => ev.id === id && ev.type === 'marker');
144
+ if (eventIndex !== -1) {
145
+ this.sequence.splice(eventIndex, 1);
146
+ console.log(`Event associated with marker ID: ${id} has been removed from the sequence.`);
147
+ } else {
148
+ console.log(`No event found in the sequence for marker ID: ${id}.`);
149
+ }
150
+ }
151
+
152
+ connectedCallback() {
153
+ let root;
154
+ root = this;
155
+ this.module = {
156
+ is: "webaudio-pianoroll",
157
+ properties: {
158
+ lowestnote: {type: Number, value: 33, observer: 'layout'},
159
+ highestnote: {type: Number, value: 39, observer: 'layout'},
160
+ width: {type: Number, value: 640, observer: 'layout'},
161
+ height: {type: Number, value: 320, observer: 'layout'},
162
+ timebase: {type: Number, value: 16, observer: 'layout'},
163
+ editmode: {type: String, value: "dragpoly"},
164
+ xrange: {type: Number, value: 16, observer: 'layout'},
165
+ yrange: {type: Number, value: 16, observer: 'layout'},
166
+ xoffset: {type: Number, value: 0, observer: 'layout'},
167
+ yoffset: {type: Number, value: 60, observer: 'layout'},
168
+ grid: {type: Number, value: 4},
169
+ snap: {type: Number, value: 1},
170
+ wheelzoom: {type: Number, value: 0},
171
+ wheelzoomx: {type: Number, value: 0},
172
+ wheelzoomy: {type: Number, value: 0},
173
+ xscroll: {type: Number, value: 0},
174
+ yscroll: {type: Number, value: 0},
175
+ gridnoteratio: {type: Number, value: 0.5, observer: 'updateTimer'},
176
+ xruler: {type: Number, value: 24, observer: 'layout'},
177
+ yruler: {type: Number, value: 24, observer: 'layout'},
178
+ octadj: {type: Number, value: -1},
179
+ cursor: {type: Number, value: 0, observer: 'redrawMarker'},
180
+ markstart: {type: Number, value: 0, observer: 'redrawMarker'},
181
+ markend: {type: Number, value: 8, observer: 'redrawMarker'},
182
+ defvelo: {type: Number, value: 100},
183
+ collt: {type: String, value: "#ccc"},
184
+ coldk: {type: String, value: "#aaa"},
185
+ colgrid: {type: String, value: "#666"},
186
+ colnote: {type: String, value: "#f22"},
187
+ colnotesel: {type: String, value: "#0f0"},
188
+ colnoteborder: {type: String, value: "#000"},
189
+ colnoteselborder: {type: String, value: "#fff"},
190
+ colrulerbg: {type: String, value: "#666"},
191
+ colrulerfg: {type: String, value: "#fff"},
192
+ colrulerborder: {type: String, value: "#000"},
193
+ colselarea: {type: String, value: "rgba(0,0,0,0.3)"},
194
+ bgsrc: {type: String, value: null, observer: 'layout'},
195
+ cursorsrc: {
196
+ type: String,
197
+ value: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4NCjxwYXRoIGZpbGw9InJnYmEoMjU1LDEwMCwxMDAsMC44KSIgZD0iTTAsMSAyNCwxMiAwLDIzIHoiLz4NCjwvc3ZnPg0K"
198
+ },
199
+ cursoroffset: {type: Number, value: 0},
200
+ markstartsrc: {
201
+ type: String,
202
+ value: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4NCjxwYXRoIGZpbGw9IiMwYzAiIGQ9Ik0wLDEgMjQsMSAwLDIzIHoiLz4NCjwvc3ZnPg0K"
203
+ },
204
+ markstartoffset: {type: Number, value: 0},
205
+ markendsrc: {
206
+ type: String,
207
+ value: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4NCjxwYXRoIGZpbGw9IiMwYzAiIGQ9Ik0wLDEgMjQsMSAyNCwyMyB6Ii8+DQo8L3N2Zz4NCg=="
208
+ },
209
+ markendoffset: {type: Number, value: -24},
210
+ kbsrc: {
211
+ type: String,
212
+ value: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSI0ODAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPgo8cGF0aCBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIGQ9Ik0wLDAgaDI0djQ4MGgtMjR6Ii8+CjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0wLDQwIGgxMnY0MGgtMTJ6IE0wLDEyMCBoMTJ2NDBoLTEyeiBNMCwyMDAgaDEydjQwaC0xMnogTTAsMzIwIGgxMnY0MGgtMTJ6IE0wLDQwMCBoMTJ2NDBoLTEyeiIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0wLDYwIGgyNCBNMCwxNDAgaDI0IE0wLDIyMCBoMjQgTTAsMjgwIGgyNCBNMCwzNDAgaDI0IE0wLDQyMCBoMjQiLz4KPC9zdmc+Cg==",
213
+ observer: 'layout'
214
+ },
215
+ kbwidth: {type: Number, value: 40},
216
+ loop: {type: Number, value: 0},
217
+ preload: {type: Number, value: 1.0},
218
+ tempo: {type: Number, value: 120, observer: 'updateTimer'},
219
+ enable: {type: Boolean, value: true},
220
+ },
221
+ };
222
+ this.defineprop();
223
+ root.innerHTML =
224
+ `<style>
225
+ .pianoroll{
226
+ background:#ccc;
227
+ }
228
+ :host {
229
+ user-select: none;
230
+ display: inline-block;
231
+ font-family: sans-serif;
232
+ font-size: 11px;
233
+ padding:0;
234
+ margin:0;
235
+ }
236
+ #wac-body {
237
+ position: relative;
238
+ margin:0;
239
+ padding:0;
240
+ width: 100%;
241
+ height: 100%;
242
+ overflow: hidden;
243
+ }
244
+ #wac-pianoroll {
245
+ cursor: pointer;
246
+ margin:0;
247
+ padding:0;
248
+ width: 100%;
249
+ height: 100%;
250
+ background-size:100% calc(100%*12/16);
251
+ background-position:left bottom;
252
+ }
253
+ #wac-menu {
254
+ display:none;
255
+ position:absolute;
256
+ top:0;
257
+ left:0;
258
+ background:#eef;
259
+ color:#000;
260
+ padding:2px 10px;
261
+ border:1px solid #66f;
262
+ border-radius: 4px;
263
+ cursor:pointer;
264
+ }
265
+ .marker{
266
+ position: absolute;
267
+ left:0;
268
+ top:0;
269
+ cursor:ew-resize;
270
+ }
271
+ #wac-kb{
272
+ position:absolute;
273
+ left:0;
274
+ top:0;
275
+ width:100px;
276
+ height:100%;
277
+ background: repeat-y;
278
+ background-size:100% calc(100%*12/16);
279
+ background-position:left bottom;
280
+ }
281
+ </style>
282
+ <div class="wac-body" id="wac-body" >
283
+ <canvas id="wac-pianoroll" tabindex="0"></canvas>
284
+ <div id="wac-kb"></div>
285
+ <img id="wac-markstart" class="marker" src="${this.markstartsrc}" alt=""/>
286
+ <img id="wac-markend" class="marker" src="${this.markendsrc}" alt=""/>
287
+ <img id="wac-cursor" class="marker" src="${this.cursorsrc}" alt=""/>
288
+ <div id="wac-menu">Delete</div>
289
+ </div>`;
290
+
291
+ this.sortSequence = function () {
292
+ this.sequence.sort((x, y) => {
293
+ return x.t - y.t;
294
+ });
295
+ };
296
+ this.findNextEv = function (tick) {
297
+ for (let i = 0; i < this.sequence.length; ++i) {
298
+ const nev = this.sequence[i];
299
+ if (nev.t >= this.markend)
300
+ return {t1: tick, n2: this.markend, dt: this.markend - tick, i: -1};
301
+ if (nev.t >= tick)
302
+ return {t1: tick, t2: nev.t, dt: nev.t - tick, i: i};
303
+ }
304
+ return {t1: tick, t2: this.markend, dt: this.markend - tick, i: -1};
305
+ };
306
+ this.locate = function (tick) {
307
+ this.cursor = tick;
308
+ };
309
+ this.updateTimer = function () {
310
+ this.tick2time = 4 * 60 / this.tempo / this.timebase;
311
+ };
312
+ this.play = function (playcallback, tick) {
313
+ if (typeof (tick) != "undefined") {
314
+ this.locate(tick);
315
+ }
316
+ if (this.timer != null) {
317
+ return;
318
+ }
319
+
320
+ this.playcallback = playcallback;
321
+ this.timestack = [];
322
+ this.time0 = this.time1 = performance.now() / 1000 + 0.1;
323
+ this.tick0 = this.tick1 = this.cursor;
324
+ this.tick2time = 4 * 60 / this.tempo / this.timebase;
325
+ const p = this.findNextEv(this.cursor);
326
+ this.index1 = p.i;
327
+ this.timestack.push([0, this.cursor, 0]);
328
+ this.timestack.push([this.time0, this.cursor, this.tick2time]);
329
+ this.time1 += p.dt * this.tick2time;
330
+ if (p.i < 0) {
331
+ this.timestack.push([this.time1, this.markstart, this.tick2time]);
332
+ } else {
333
+ this.timestack.push([this.time1, p.t1, this.tick2time]);
334
+ }
335
+
336
+ const frameRate = 1000 / 40; // 25ms, equivalent to 40 FPS
337
+ let lastTime = performance.now();
338
+
339
+
340
+ const playLoop = () => {
341
+ const currentTime = performance.now();
342
+ const deltaTime = currentTime - lastTime;
343
+
344
+ if (deltaTime >= frameRate) {
345
+ const current = performance.now() / 1000;
346
+
347
+ while (this.timestack.length > 1 && current >= this.timestack[1][0]) {
348
+ this.timestack.shift();
349
+ }
350
+
351
+ this.cursor = this.timestack[0][1] + (current - this.timestack[0][0]) / this.timestack[0][2];
352
+ this.redrawMarker();
353
+
354
+ while (current + this.preload >= this.time1) {
355
+ this.time0 = this.time1;
356
+ this.tick0 = this.tick1;
357
+ let e = this.sequence[this.index1];
358
+
359
+ if (!e || e.t >= this.markend) {
360
+ this.timestack.push([this.time1, this.markstart, this.tick2time]);
361
+ const p = this.findNextEv(this.markstart);
362
+ this.time1 += p.dt * this.tick2time;
363
+ this.index1 = p.i;
364
+ } else {
365
+ this.tick1 = e.t;
366
+ this.timestack.push([this.time1, e.t, this.tick2time]);
367
+ let gmax = Math.min(e.t + e.g, this.markend) - e.t;
368
+
369
+ if (this.editmode == "gridmono" || this.editmode == "gridpoly") {
370
+ gmax *= this.gridnoteratio;
371
+ }
372
+
373
+ const cbev = {t: this.time1, g: this.time1 + gmax * this.tick2time, n: e.n};
374
+
375
+ if (this.playcallback) {
376
+ this.playcallback(cbev);
377
+ }
378
+
379
+ e = this.sequence[++this.index1];
380
+
381
+ if (!e || e.t >= this.markend) {
382
+ this.time1 += (this.markend - this.tick1) * this.tick2time;
383
+ const p = this.findNextEv(this.markstart);
384
+ this.timestack.push([this.time1, this.markstart, this.tick2time]);
385
+ this.time1 += p.dt * this.tick2time;
386
+ this.index1 = p.i;
387
+ } else {
388
+ this.time1 += (e.t - this.tick1) * this.tick2time;
389
+ }
390
+ }
391
+ }
392
+
393
+ lastTime = currentTime;
394
+ }
395
+
396
+ this.timer = requestAnimationFrame(playLoop);
397
+ };
398
+
399
+
400
+ this.timer = requestAnimationFrame(playLoop);
401
+
402
+ this.stop = function () {
403
+ if (this.timer) {
404
+ cancelAnimationFrame(this.timer);
405
+ this.timer = null;
406
+ }
407
+ };
408
+
409
+ };
410
+ this.stop = function () {
411
+
412
+ if (this.timer)
413
+ clearInterval(this.timer);
414
+ this.timer = null;
415
+ };
416
+ this.setMMLString = function (s) {
417
+ this.sequence = [];
418
+ let i, l, n, t, defo, defl, tie, evlast;
419
+ const parse = {s: s, i: i, tb: this.timebase};
420
+
421
+ function getNum(p) {
422
+ var n = 0;
423
+ while (p.s[p.i] >= "0" && p.s[p.i] <= "9") {
424
+ n = n * 10 + parseInt(p.s[p.i]);
425
+ ++p.i;
426
+ }
427
+ return n;
428
+ }
429
+
430
+ function getLen(p) {
431
+ var n = getNum(p);
432
+ if (n == 0)
433
+ n = defl;
434
+ n = p.tb / n;
435
+ var n2 = n;
436
+ while (p.s[p.i] == ".") {
437
+ ++p.i;
438
+ n += (n2 >>= 1);
439
+ }
440
+ return n;
441
+ }
442
+
443
+ function getNote(p) {
444
+ switch (p.s[p.i]) {
445
+ case "c":
446
+ case "C":
447
+ n = 0;
448
+ break;
449
+ case "d":
450
+ case "D":
451
+ n = 2;
452
+ break;
453
+ case "e":
454
+ case "E":
455
+ n = 4;
456
+ break;
457
+ case "f":
458
+ case "F":
459
+ n = 5;
460
+ break;
461
+ case "g":
462
+ case "G":
463
+ n = 7;
464
+ break;
465
+ case "a":
466
+ case "A":
467
+ n = 9;
468
+ break;
469
+ case "b":
470
+ case "B":
471
+ n = 11;
472
+ break;
473
+ default:
474
+ n = -1;
475
+ }
476
+ ++p.i;
477
+ if (n < 0)
478
+ return -1;
479
+ for (; ;) {
480
+ switch (p.s[p.i]) {
481
+ case "-":
482
+ --n;
483
+ break;
484
+ case "+":
485
+ ++n;
486
+ break;
487
+ case "#":
488
+ ++n;
489
+ break;
490
+ default:
491
+ return n;
492
+ }
493
+ ++p.i;
494
+ }
495
+ }
496
+
497
+ defo = 4;
498
+ defl = 8;
499
+ t = 0;
500
+ tie = 0;
501
+ evlast = null;
502
+ for (parse.i = 0; parse.i < parse.s.length;) {
503
+ switch (parse.s[parse.i]) {
504
+ case '>':
505
+ ++parse.i;
506
+ ++defo;
507
+ n = -1;
508
+ l = 0;
509
+ break;
510
+ case '<':
511
+ ++parse.i;
512
+ --defo;
513
+ n = -1;
514
+ l = 0;
515
+ break;
516
+ case '&':
517
+ case '^':
518
+ ++parse.i;
519
+ tie = 1;
520
+ n = -1;
521
+ l = 0;
522
+ break;
523
+ case 't':
524
+ case 'T':
525
+ ++parse.i;
526
+ n = -1;
527
+ l = 0;
528
+ this.tempo = getNum(parse);
529
+ break;
530
+ case 'o':
531
+ case 'O':
532
+ ++parse.i;
533
+ n = -1;
534
+ l = 0;
535
+ defo = getNum(parse);
536
+ break;
537
+ case 'l':
538
+ case 'L':
539
+ ++parse.i;
540
+ n = -1;
541
+ l = 0;
542
+ defl = getNum(parse);
543
+ break;
544
+ case 'r':
545
+ case 'R':
546
+ ++parse.i;
547
+ n = -1;
548
+ l = getLen(parse);
549
+ break;
550
+ default:
551
+ n = getNote(parse);
552
+ if (n >= 0)
553
+ l = getLen(parse);
554
+ else
555
+ l = 0;
556
+ break;
557
+ }
558
+ if (n >= 0) {
559
+ n = (defo - this.octadj) * 12 + n;
560
+ if (tie && evlast && evlast.n == n) {
561
+ evlast.g += l;
562
+ tie = 0;
563
+ } else
564
+ this.sequence.push(evlast = {t: t, n: n, g: l, f: 0});
565
+ }
566
+ t += l;
567
+ }
568
+ this.redraw();
569
+ };
570
+ this.getMMLString = function () {
571
+ function makeNote(n, l, tb) {
572
+ var mmlnote = "";
573
+ var ltab = [
574
+ [960, "1"], [840, "2.."], [720, "2."], [480, "2"],
575
+ [420, "4.."], [360, "4."], [240, "4"],
576
+ [210, "8.."], [180, "8."], [120, ""],
577
+ [105, "16.."], [90, "16."], [60, "16"],
578
+ [45, "32."], [30, "32"], [16, "60"], [15, "64"],
579
+ [8, "120"], [4, "240"], [2, "480"], [1, "960"]
580
+ ];
581
+ l = l * 960 / tb;
582
+ while (l > 0) {
583
+ for (let j = 0; j < ltab.length; ++j) {
584
+ while (l >= ltab[j][0]) {
585
+ l -= ltab[j][0];
586
+ mmlnote += "&" + n + ltab[j][1];
587
+ }
588
+ }
589
+ }
590
+ return mmlnote.substring(1);
591
+ }
592
+
593
+ var mml = "t" + this.tempo + "o4l8";
594
+ var ti = 0, meas = 0, oct = 5, n;
595
+ var notes = ["c", "d-", "d", "e-", "e", "f", "g-", "g", "a-", "a", "b-", "b"];
596
+ for (let i = 0; i < this.sequence.length; ++i) {
597
+ var ev = this.sequence[i];
598
+ if (ev.t > ti) {
599
+ var l = ev.t - ti;
600
+ mml += makeNote("r", l, this.timebase);
601
+ ti = ev.t;
602
+ }
603
+ var n = ev.n;
604
+ if (n < oct * 12 || n >= oct * 12 + 12) {
605
+ oct = (n / 12) | 0;
606
+ mml += "o" + (oct + this.octadj);
607
+ }
608
+ n = notes[n % 12];
609
+ var l = ev.g;
610
+ if (i + 1 < this.sequence.length) {
611
+ var ev2 = this.sequence[i + 1];
612
+ if (ev2.t < ev.t + l) {
613
+ l = ev2.t - ev.t;
614
+ ti = ev2.t;
615
+ } else
616
+ ti = ev.t + ev.g;
617
+ } else
618
+ ti = ev.t + ev.g;
619
+ mml += makeNote(n, l, this.timebase);
620
+ }
621
+ return mml;
622
+ };
623
+ this.hitTest = function (pos) {
624
+ const ht = {t: 0, n: 0, i: -1, m: " "};
625
+ const l = this.sequence.length;
626
+ if (pos.t == this.menu) {
627
+ ht.m = "m";
628
+ return ht;
629
+ }
630
+ ht.t = (this.xoffset + (pos.x - this.yruler - this.kbwidth) / this.swidth * this.xrange);
631
+ ht.n = this.yoffset - (pos.y - this.height) / this.steph;
632
+ if (pos.y >= this.height || pos.x >= this.width) {
633
+ return ht;
634
+ }
635
+ if (pos.y < this.xruler) {
636
+ ht.m = "x";
637
+ return ht;
638
+ }
639
+ if (pos.x < this.yruler + this.kbwidth) {
640
+ ht.m = "y";
641
+ return ht;
642
+ }
643
+ for (let i = 0; i < l; ++i) {
644
+ const ev = this.sequence[i];
645
+ if ((ht.n | 0) == ev.n) {
646
+ if (ev.f && Math.abs(ev.t - ht.t) * this.stepw < 8) {
647
+ ht.m = "B";
648
+ ht.i = i;
649
+ return ht;
650
+ }
651
+ if (ev.f && Math.abs(ev.t + ev.g - ht.t) * this.stepw < 8) {
652
+ ht.m = "E";
653
+ ht.i = i;
654
+ return ht;
655
+ }
656
+ if (ht.t >= ev.t && ht.t < ev.t + ev.g) {
657
+ ht.i = i;
658
+ if (this.sequence[i].f)
659
+ ht.m = "N";
660
+ else
661
+ ht.m = "n";
662
+ return ht;
663
+ }
664
+ }
665
+ }
666
+ ht.m = "s";
667
+ return ht;
668
+ };
669
+ this.applyTexture = function (ev) {
670
+ if (this.noteTexture && this.noteTexture.complete) {
671
+ const w = ev.g * this.stepw;
672
+ const x = (ev.t - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
673
+ const y = this.height - (ev.n - this.yoffset) * this.steph;
674
+ const x2 = (x + w) | 0;
675
+ const y2 = (y - this.steph) | 0;
676
+
677
+ if (ev.f) {
678
+ this.ctx.fillStyle = this.colnotesel; // green if selected
679
+ } else {
680
+ this.ctx.fillStyle = this.colnote; // red if not selected
681
+ }
682
+ this.ctx.fillRect(x, y2, x2 - x, y - y2);
683
+
684
+ this.ctx.globalAlpha = 0.5; // texture opacity
685
+ this.ctx.drawImage(this.noteTexture, x, y2, x2 - x, y - y2);
686
+ this.ctx.globalAlpha = 1.0; // réinitialiser l'opacité
687
+ ev.textureApplied = true;
688
+ } else {
689
+ console.warn('noteTexture is not yet loaded or initialized.');
690
+ }
691
+ };
692
+
693
+ this.addNote = function (t, n, g, v, f, type = 'note', details = {}) {
694
+ if (t >= 0 && n >= 0 && n < 128) {
695
+ const id = this.noteIdCounter++;
696
+ const ev = {id: id, t: t, n: n, g: g, v: v, f: f, type: type, details: details};
697
+ console.log('programatic note creation : ' + id + ' type: ' + type + ', details' + details);
698
+
699
+ if (!this.noteTexture || !this.noteTexture.complete) {
700
+ this.noteTexture = new Image();
701
+ this.noteTexture.src = 'medias/images/waveform.png';
702
+ this.noteTexture.onload = () => {
703
+ this.applyTexture(ev);
704
+ };
705
+ } else {
706
+ this.applyTexture(ev);
707
+ }
708
+
709
+ this.sequence.push(ev);
710
+ this.sortSequence();
711
+ this.redraw();
712
+ return ev;
713
+ }
714
+ return null;
715
+ };
716
+ this.selAreaNote = function (t1, t2, n1, n2) {
717
+ let t, i = 0, e = this.sequence[i];
718
+ if (n1 > n2)
719
+ t = n1, n1 = n2, n2 = t;
720
+ if (t1 > t2)
721
+ t = t1, t1 = t2, t2 = t;
722
+ while (e) {
723
+ if (e.t >= t1 && e.t < t2 && e.n >= n1 && e.n <= n2)
724
+ e.f = 1;
725
+ else
726
+ e.f = 0;
727
+ e = this.sequence[++i];
728
+ }
729
+ };
730
+ this.delNote = function (idx) {
731
+ this.sequence.splice(idx, 1);
732
+ this.redraw();
733
+ };
734
+ this.delAreaNote = function (t, g, n) {
735
+ const l = this.sequence.length;
736
+ for (let i = l - 1; i >= 0; --i) {
737
+ const ev = this.sequence[i];
738
+ if (typeof (n) != "undefined" && n != i) {
739
+ if (t <= ev.t && t + g >= ev.t + ev.g) {
740
+ this.sequence.splice(i, 1);
741
+ } else if (t <= ev.t && t + g > ev.t && t + g < ev.t + ev.g) {
742
+ ev.g = ev.t + ev.g - (t + g);
743
+ ev.t = t + g;
744
+ } else if (t >= ev.t && t < ev.t + ev.g && t + g >= ev.t + ev.g) {
745
+ ev.g = t - ev.t;
746
+ } else if (t > ev.t && t + g < ev.t + ev.g) {
747
+ this.addNote(t + g, ev.n, ev.t + ev.g - t - g, this.defvelo);
748
+ ev.g = t - ev.t;
749
+ }
750
+ }
751
+ }
752
+ };
753
+ this.delSelectedNote = function () {
754
+ console.log('deleting note')
755
+ const l = this.sequence.length;
756
+ for (let i = l - 1; i >= 0; --i) {
757
+ const ev = this.sequence[i];
758
+ if (ev.f)
759
+ this.sequence.splice(i, 1);
760
+ }
761
+ };
762
+ this.moveSelectedNote = function (dt, dn) {
763
+ console.log('moving note')
764
+ const l = this.sequence.length;
765
+ for (let i = 0; i < l; ++i) {
766
+ const ev = this.sequence[i];
767
+ if (ev.f && ev.ot + dt < 0)
768
+ dt = -ev.ot;
769
+ }
770
+ for (let i = 0; i < l; ++i) {
771
+ const ev = this.sequence[i];
772
+ if (ev.f) {
773
+ ev.t = (((ev.ot + dt) / this.snap + .5) | 0) * this.snap;
774
+ ev.n = ev.on + dn;
775
+ }
776
+ }
777
+ };
778
+ this.clearSel = function () {
779
+ const l = this.sequence.length;
780
+ for (let i = 0; i < l; ++i) {
781
+ this.sequence[i].f = 0;
782
+ }
783
+ };
784
+ this.selectedNotes = function () {
785
+ let obj = [];
786
+ for (let i = this.sequence.length - 1; i >= 0; --i) {
787
+ const ev = this.sequence[i];
788
+ if (ev.f)
789
+ obj.push({i: i, ev: ev, t: ev.t, g: ev.g});
790
+ }
791
+ return obj;
792
+ };
793
+ this.editDragDown = function (pos) {
794
+ const ht = this.hitTest(pos);
795
+ let ev;
796
+ if (ht.m == "N") {
797
+ ev = this.sequence[ht.i];
798
+ this.dragging = {o: "D", m: "N", i: ht.i, t: ht.t, n: ev.n, dt: ht.t - ev.t};
799
+ for (let i = 0, l = this.sequence.length; i < l; ++i) {
800
+ ev = this.sequence[i];
801
+ if (ev.f)
802
+ ev.on = ev.n, ev.ot = ev.t, ev.og = ev.g;
803
+ }
804
+ this.redraw();
805
+ } else if (ht.m == "n") {
806
+ ev = this.sequence[ht.i];
807
+ this.clearSel();
808
+ ev.f = 1;
809
+ this.redraw();
810
+ } else if (ht.m == "E") {
811
+ this.tool = 'trim_end'
812
+ const ev = this.sequence[ht.i];
813
+ console.log('1 note end changed:');
814
+
815
+ this.dragging = {o: "D", m: "E", i: ht.i, t: ev.t, g: ev.g, ev: this.selectedNotes()};
816
+ } else if (ht.m == "B") {
817
+ this.tool = 'trim_start'
818
+ const ev = this.sequence[ht.i];
819
+ console.log('2 note start changed:');
820
+
821
+ this.dragging = {o: "D", m: "B", i: ht.i, t: ev.t, g: ev.g, ev: this.selectedNotes()};
822
+ } else if (ht.m == "s" && ht.t >= 0) {
823
+ this.clearSel();
824
+ if (this.editing === true || this.tool === !'select') {
825
+ var t = ((ht.t / this.snap) | 0) * this.snap;
826
+ const id = this.noteIdCounter++;
827
+ console.log('visual note creation : ' + id);
828
+ var details = {in: 0, out: 0, group: {}};
829
+
830
+ const ev = {
831
+ id: id,
832
+ t: t,
833
+ n: ht.n | 0,
834
+ g: 1,
835
+ f: 1,
836
+ type: 'note',
837
+ details: details,
838
+ textureApplied: false
839
+ };
840
+ this.sequence.push(ev);
841
+
842
+ if (!this.noteTexture || !this.noteTexture.complete) {
843
+ this.noteTexture = new Image();
844
+ this.noteTexture.src = 'medias/images/waveform.png';
845
+ this.noteTexture.onload = () => {
846
+ this.applyTexture(ev);
847
+ this.redraw();
848
+ };
849
+ } else {
850
+ this.applyTexture(ev);
851
+ this.redraw();
852
+ }
853
+
854
+ this.dragging = {
855
+ o: "D",
856
+ m: "E",
857
+ i: this.sequence.length - 1,
858
+ t: t,
859
+ g: 1,
860
+ ev: [{t: t, g: 1, ev: this.sequence[this.sequence.length - 1]}]
861
+ };
862
+ } else {
863
+ switch (this.downht.m) {
864
+ case "N":
865
+ case "B":
866
+ case "E":
867
+ console.log('open menu');
868
+ this.popMenu(this.downpos);
869
+ this.dragging = {o: "m"};
870
+ break;
871
+ default:
872
+ if (this.editmode == "dragmono" || this.editmode == "dragpoly")
873
+ this.dragging = {
874
+ o: "A",
875
+ p: this.downpos,
876
+ p2: this.downpos,
877
+ t1: this.downht.t,
878
+ n1: this.downht.n
879
+ };
880
+ break;
881
+ }
882
+ this.canvas.focus();
883
+ return false;
884
+ }
885
+
886
+ this.redraw();
887
+ }
888
+ };
889
+ this.editDragMove = function (pos) {
890
+ const ht = this.hitTest(pos);
891
+ let ev, t;
892
+ if (this.dragging.o == "D") {
893
+ switch (this.dragging.m) {
894
+ case "E":
895
+ if (this.dragging.ev) {
896
+ const dt = ((Math.max(0, ht.t) / this.snap + 0.9) | 0) * this.snap - this.dragging.t - this.dragging.g;
897
+ const list = this.dragging.ev;
898
+ for (let i = list.length - 1; i >= 0; --i) {
899
+ const ev = list[i].ev;
900
+ ev.g = list[i].g + dt;
901
+
902
+ if (ev.g <= 0)
903
+ ev.g = 1;
904
+ if (this.editmove == "dragmono")
905
+ this.delAreaNote(ev.t, ev.g);
906
+ }
907
+ }
908
+ this.redraw();
909
+ break;
910
+ case "B":
911
+ if (this.dragging.ev) {
912
+ const dt = ((Math.max(0, ht.t) / this.snap + 0.9) | 0) * this.snap - this.dragging.t;
913
+ const list = this.dragging.ev;
914
+ for (let i = list.length - 1; i >= 0; --i) {
915
+ const ev = list[i].ev;
916
+ ev.t = list[i].t + dt;
917
+ ev.g = list[i].g - dt;
918
+
919
+ if (ev.g <= 0)
920
+ ev.g = 1;
921
+ if (this.editmove == "dragmono")
922
+ this.delAreaNote(ev.t, ev.g);
923
+ }
924
+ }
925
+ this.redraw();
926
+ break;
927
+
928
+ ev = this.sequence[this.dragging.i];
929
+ t = ((Math.max(0, ht.t) / this.snap + 0.5) | 0) * this.snap;
930
+ ev.g = ev.t + ev.g - t;
931
+ ev.t = t;
932
+ if (ev.g < 0) {
933
+ ev.t += ev.g;
934
+ ev.g = -ev.g;
935
+ this.dragging.m = "E";
936
+ } else if (ev.g == 0) {
937
+ ev.t = t - 1;
938
+ ev.g = 1;
939
+ }
940
+ this.redraw();
941
+ break;
942
+ case "N":
943
+ this.tool = 'drag'
944
+ ev = this.sequence[this.dragging.i];
945
+ console.log('4 note. dragged : ');
946
+ this.moveSelectedNote((ht.t - this.dragging.t) | 0, (ht.n | 0) - this.dragging.n);
947
+ this.redraw();
948
+ break;
949
+ }
950
+ }
951
+ };
952
+ this.editGridDown = function (pos) {
953
+ const ht = this.hitTest(pos);
954
+ if (ht.m == "n") {
955
+ this.delNote(ht.i);
956
+ this.dragging = {o: "G", m: "0"};
957
+ } else if (ht.m == "s" && ht.t >= 0) {
958
+ const pt = Math.floor(ht.t);
959
+ if (this.editmode == "gridmono")
960
+ this.delAreaNote(pt, 1, ht.i);
961
+ this.addNote(pt, ht.n | 0, 1, this.defvelo);
962
+ this.dragging = {o: "G", m: "1"};
963
+ }
964
+ };
965
+ this.editGridMove = function (pos) {
966
+ const ht = this.hitTest(pos);
967
+ if (this.dragging.o == "G") {
968
+ switch (this.dragging.m) {
969
+ case "1":
970
+ const px = Math.floor(ht.t);
971
+ if (ht.m == "s") {
972
+ if (this.editmode == "gridmono")
973
+ this.delAreaNote(px, 1, ht.i);
974
+ this.addNote(px, ht.n | 0, 1, this.defvelo);
975
+ }
976
+ break;
977
+ case "0":
978
+ if (ht.m == "n")
979
+ this.delNote(ht.i);
980
+ break;
981
+ }
982
+ }
983
+ };
984
+ this.setListener = function (el, mode) {
985
+ this.bindcontextmenu = this.contextmenu.bind(this);
986
+ this.bindpointermove = this.pointermove.bind(this);
987
+ this.bindcancel = this.cancel.bind(this);
988
+ el.addEventListener("mousedown", this.pointerdown.bind(this), true);
989
+ el.addEventListener("touchstart", this.pointerdown.bind(this), false);
990
+ if (mode) {
991
+ el.addEventListener("mouseover", this.pointerover.bind(this), false);
992
+ el.addEventListener("mouseout", this.pointerout.bind(this), false);
993
+ }
994
+ };
995
+ this.handleKeyboardClick = function (e) {
996
+ const kbRect = this.kb.getBoundingClientRect();
997
+ const clickY = e.clientY - kbRect.top;
998
+
999
+ const noteNumber = Math.floor(clickY / this.steph);
1000
+ console.log("note to trig :", noteNumber);
1001
+ };
1002
+ this.ready = function () {
1003
+ this.body = root.children[1];
1004
+ this.elem = root.childNodes[2];
1005
+ this.proll = this.elem.children[0];
1006
+ this.canvas = this.elem.children[0];
1007
+ this.kb = this.elem.children[1];
1008
+ this.ctx = this.canvas.getContext("2d");
1009
+ this.kbimg = this.elem.children[1];
1010
+ this.markstartimg = this.elem.children[2];
1011
+ this.markendimg = this.elem.children[3];
1012
+ this.cursorimg = this.elem.children[4];
1013
+ this.menu = this.elem.children[5];
1014
+ this.rcMenu = {x: 0, y: 0, width: 0, height: 0};
1015
+ this.lastx = 0;
1016
+ this.lasty = 0;
1017
+ this.kb.addEventListener('click', this.handleKeyboardClick.bind(this), false);
1018
+ this.canvas.addEventListener('mousemove', this.mousemove.bind(this), false);
1019
+ this.canvas.addEventListener('keydown', this.keydown.bind(this), false);
1020
+ this.canvas.addEventListener('DOMMouseScroll', this.wheel.bind(this), false);
1021
+ this.canvas.addEventListener('mousewheel', this.wheel.bind(this), false);
1022
+ this.setListener(this.canvas, true);
1023
+ this.setListener(this.markendimg, true);
1024
+ this.setListener(this.markstartimg, true);
1025
+ this.setListener(this.cursorimg, true);
1026
+ this.setListener(this.menu, false);
1027
+ this.sequence = [];
1028
+ this.dragging = {o: null};
1029
+ this.kbimg.style.height = this.sheight + "px";
1030
+ this.kbimg.style.backgroundSize = (this.steph * 12) + "px";
1031
+ this.layout();
1032
+ this.initialized = 1;
1033
+
1034
+ this.canvas.addEventListener('wheel', function(e) {
1035
+ const scrollSpeedFactor = 10; // Ajoutez cette ligne pour définir le facteur de réduction
1036
+
1037
+ if (!this.lockedDirection) {
1038
+ const absDeltaY = Math.abs(e.deltaY);
1039
+ const absDeltaX = Math.abs(e.deltaX);
1040
+
1041
+ if (absDeltaY > absDeltaX) {
1042
+ this.lockedDirection = 'vertical';
1043
+ } else {
1044
+ this.lockedDirection = 'horizontal';
1045
+ }
1046
+ }
1047
+
1048
+ if (this.lockedDirection === 'vertical' && e.deltaY !== 0) {
1049
+ const newYOffset = this.yoffset + e.deltaY / scrollSpeedFactor; // Divisez e.deltaY par le facteur de réduction
1050
+ this.yoffset = Math.max(0, Math.min(newYOffset, 112));
1051
+ console.log(`Scroll vertical de ${this.yoffset} pixels`);
1052
+ }
1053
+
1054
+ if (this.lockedDirection === 'horizontal' && e.deltaX !== 0) {
1055
+ const newXOffset = this.xoffset + e.deltaX / scrollSpeedFactor; // Divisez e.deltaX par le facteur de réduction
1056
+ this.xoffset = Math.max(0, Math.min(newXOffset, 500000));
1057
+ console.log(`Scroll horizontal de ${this.xoffset} pixels`);
1058
+ }
1059
+
1060
+ clearTimeout(this.resetScrollTimeout);
1061
+ this.resetScrollTimeout = setTimeout(() => {
1062
+ this.lockedDirection = null;
1063
+ }, 200);
1064
+
1065
+ e.preventDefault();
1066
+ }.bind(this), { passive: false });
1067
+
1068
+ this.redraw();
1069
+ };
1070
+ this.setupImage = function () {
1071
+ };
1072
+ this.preventScroll = function (e) {
1073
+ if (e.preventDefault)
1074
+ e.preventDefault();
1075
+ };
1076
+ this.getPos = function (e) {
1077
+ let t = null;
1078
+ if (e) {
1079
+ t = e.target;
1080
+ this.lastx = e.clientX - this.rcTarget.left;
1081
+ this.lasty = e.clientY - this.rcTarget.top;
1082
+ }
1083
+ if (this.lastx >= this.rcMenu.x && this.lastx < this.rcMenu.x + this.rcMenu.width
1084
+ && this.lasty >= this.rcMenu.y && this.lasty < this.rcMenu.y + this.rcMenu.height)
1085
+ t = this.menu;
1086
+ return {t: t, x: this.lastx, y: this.lasty};
1087
+ };
1088
+ this.contextmenu = function (e) {
1089
+ e.stopPropagation();
1090
+ e.preventDefault();
1091
+ window.removeEventListener("contextmenu", this.bindcontextmenu);
1092
+ return false;
1093
+ };
1094
+ this.keydown = function (e) {
1095
+ switch (e.keyCode) {
1096
+ case 8: //delNote using backspace key
1097
+ this.delSelectedNote();
1098
+ this.redraw();
1099
+ break;
1100
+ }
1101
+ };
1102
+ this.popMenu = function (pos) {
1103
+ console.log('pop menu call from shortcut')
1104
+ };
1105
+ this.longtapcountup = function () {
1106
+ if (++this.longtapcount >= 18) {
1107
+ clearInterval(this.longtaptimer);
1108
+ switch (this.downht.m) {
1109
+ case "N":
1110
+ case "B":
1111
+ case "E":
1112
+ this.popMenu(this.downpos);
1113
+ this.dragging = {o: "m"};
1114
+ break;
1115
+ }
1116
+ }
1117
+ };
1118
+ this.pointerdown = function (ev) {
1119
+ let e;
1120
+ if (!this.enable) {
1121
+ console.log('here 1');
1122
+ return;
1123
+ }
1124
+
1125
+ if (ev.touches) {
1126
+ console.log('here 2');
1127
+
1128
+ e = ev.touches[0];
1129
+ } else {
1130
+ e = ev;
1131
+ this.rcTarget = this.canvas.getBoundingClientRect();
1132
+ this.downpos = this.getPos(e);
1133
+ this.downht = this.hitTest(this.downpos);
1134
+
1135
+ if (this.downht.i >= 0) {
1136
+ let clickedNote = this.sequence[this.downht.i];
1137
+ let noteId = clickedNote.id;
1138
+ console.log("Note ID :", noteId + ' note type: ' + clickedNote.type + ', note detail : ' + clickedNote.details);
1139
+ console.log('-- details below ---')
1140
+ console.log(clickedNote.details.group)
1141
+ console.log(clickedNote.details.in)
1142
+ console.log('-- end details ---')
1143
+ }
1144
+
1145
+
1146
+ this.longtapcount = 0;
1147
+ this.longtaptimer = setInterval(this.longtapcountup.bind(this), 100);
1148
+ window.addEventListener("touchmove", this.bindpointermove, false);
1149
+ window.addEventListener("mousemove", this.bindpointermove, false);
1150
+ window.addEventListener("touchend", this.bindcancel);
1151
+ window.addEventListener("mouseup", this.bindcancel);
1152
+ window.addEventListener("contextmenu", this.bindcontextmenu);
1153
+
1154
+
1155
+ if (e.button == 2 || e.ctrlKey) {
1156
+
1157
+ console.log(' open the menu now!!!')
1158
+ switch (this.downht.m) {
1159
+ case "N":
1160
+ case "B":
1161
+ case "E":
1162
+ console.log('open menu');
1163
+ this.popMenu(this.downpos);
1164
+ this.dragging = {o: "m"};
1165
+ break;
1166
+ default:
1167
+ if (this.editmode == "dragmono" || this.editmode == "dragpoly")
1168
+ this.dragging = {
1169
+ o: "A",
1170
+ p: this.downpos,
1171
+ p2: this.downpos,
1172
+ t1: this.downht.t,
1173
+ n1: this.downht.n
1174
+ };
1175
+ break;
1176
+ }
1177
+ ev.preventDefault();
1178
+ ev.stopPropagation();
1179
+ this.canvas.focus();
1180
+ return false;
1181
+ }
1182
+ switch (e.target) {
1183
+ case this.markendimg:
1184
+ this.dragging = {o: "E", x: this.downpos.x, m: this.markend};
1185
+ ev.preventDefault();
1186
+ ev.stopPropagation();
1187
+ return false;
1188
+ case this.markstartimg:
1189
+ this.dragging = {o: "S", x: this.downpos.x, m: this.markstart};
1190
+ ev.preventDefault();
1191
+ ev.stopPropagation();
1192
+ return false;
1193
+ case this.cursorimg:
1194
+ this.dragging = {o: "P", x: this.downpos.x, m: this.cursor};
1195
+ ev.preventDefault();
1196
+ ev.stopPropagation();
1197
+ return false;
1198
+ }
1199
+ this.dragging = {
1200
+ o: null,
1201
+ x: this.downpos.x,
1202
+ y: this.downpos.y,
1203
+ offsx: this.xoffset,
1204
+ offsy: this.yoffset
1205
+ };
1206
+ this.canvas.focus();
1207
+ switch (this.editmode) {
1208
+ case "gridpoly":
1209
+ case "gridmono":
1210
+ this.editGridDown(this.downpos);
1211
+ break;
1212
+ case "dragpoly":
1213
+ case "dragmono":
1214
+ this.editDragDown(this.downpos);
1215
+ break;
1216
+ }
1217
+ this.press = 1;
1218
+ if (ev.preventDefault)
1219
+ ev.preventDefault();
1220
+ if (ev.stopPropagation)
1221
+ ev.stopPropagation();
1222
+ return false;
1223
+ }
1224
+ };
1225
+ this.mousemove = function (e) {
1226
+ if (this.dragging.o == null) {
1227
+ this.rcTarget = this.canvas.getBoundingClientRect();
1228
+ const pos = this.getPos(e);
1229
+ const ht = this.hitTest(pos);
1230
+ switch (ht.m) {
1231
+ case "E":
1232
+ this.canvas.style.cursor = "e-resize";
1233
+ break;
1234
+ case "B":
1235
+ this.canvas.style.cursor = "w-resize";
1236
+ break;
1237
+ case "N":
1238
+ this.canvas.style.cursor = "move";
1239
+ break;
1240
+ case "n":
1241
+ this.canvas.style.cursor = "pointer";
1242
+ break;
1243
+ case "s":
1244
+ this.canvas.style.cursor = "pointer";
1245
+ break;
1246
+ }
1247
+ }
1248
+ };
1249
+ this.pointermove = function (ev) {
1250
+ let e;
1251
+ this.rcTarget = this.canvas.getBoundingClientRect();
1252
+ if (ev.touches)
1253
+ e = ev.touches[0];
1254
+ else
1255
+ e = ev;
1256
+ if (this.longtaptimer)
1257
+ clearInterval(this.longtaptimer);
1258
+ const pos = this.getPos(e);
1259
+ const ht = this.hitTest(pos);
1260
+ switch (this.dragging.o) {
1261
+ case null:
1262
+ if (this.xscroll)
1263
+ this.xoffset = this.dragging.offsx + (this.dragging.x - pos.x) * (this.xrange / this.width);
1264
+ if (this.yscroll)
1265
+ this.yoffset = this.dragging.offsy + (pos.y - this.dragging.y) * (this.yrange / this.height);
1266
+ break;
1267
+ case "m":
1268
+ if (ht.m == "m") {
1269
+ this.menu.style.background = "#ff6";
1270
+ } else {
1271
+ this.menu.style.background = "#eef";
1272
+ }
1273
+ break;
1274
+ case "A":
1275
+ this.dragging.p2 = pos;
1276
+ this.dragging.t2 = ht.t;
1277
+ this.dragging.n2 = ht.n;
1278
+ this.redraw();
1279
+ break;
1280
+ case "E":
1281
+ console.log('marker end')
1282
+ var p = Math.max(1, (this.dragging.m + (pos.x - this.dragging.x) / this.stepw + .5) | 0);
1283
+ if (this.markstart >= p)
1284
+ this.markstart = p - 1;
1285
+ this.markend = p;
1286
+ break;
1287
+ case "S":
1288
+ console.log('marker start')
1289
+ var p = Math.max(0, (this.dragging.m + (pos.x - this.dragging.x) / this.stepw + .5) | 0);
1290
+ if (this.markend <= p)
1291
+ this.markend = p + 1;
1292
+ this.markstart = p;
1293
+ break;
1294
+ case "P":
1295
+ console.log('playhead')
1296
+ this.cursor = Math.max(0, (this.dragging.m + (pos.x - this.dragging.x) / this.stepw + .5) | 0);
1297
+ break;
1298
+ }
1299
+ switch (this.editmode) {
1300
+ case "gridpoly":
1301
+ case "gridmono":
1302
+ this.editGridMove(pos);
1303
+ break;
1304
+ case "dragpoly":
1305
+ case "dragmono":
1306
+ this.editDragMove(pos);
1307
+ break;
1308
+ }
1309
+ ev.preventDefault();
1310
+ ev.stopPropagation();
1311
+ return false;
1312
+ };
1313
+ this.cancel = function (ev) {
1314
+ let e;
1315
+ if (ev.touches)
1316
+ e = null;
1317
+ else
1318
+ e = ev;
1319
+ if (this.longtaptimer)
1320
+ clearInterval(this.longtaptimer);
1321
+ const pos = this.getPos(e);
1322
+ if (this.dragging.o == "m") {
1323
+
1324
+ }
1325
+ if (this.dragging.o == "A") {
1326
+ this.selAreaNote(this.dragging.t1, this.dragging.t2, this.dragging.n1, this.dragging.n2);
1327
+ this.dragging = {o: null};
1328
+ this.redraw();
1329
+ }
1330
+ if (this.editmode == "dragmono") {
1331
+ for (let ii = this.sequence.length - 1; ii >= 0; --ii) {
1332
+ const ev = this.sequence[ii];
1333
+ if (ev && ev.f) {
1334
+ this.delAreaNote(ev.t, ev.g, ii);
1335
+ }
1336
+ }
1337
+ }
1338
+ this.redraw();
1339
+ this.dragging = {o: null};
1340
+ if (this.press) {
1341
+ this.sortSequence();
1342
+ }
1343
+ this.press = 0;
1344
+ window.removeEventListener('touchstart', this.preventScroll, false);
1345
+ window.removeEventListener("mousemove", this.bindpointermove, false);
1346
+ window.removeEventListener("touchend", this.bindcancel, false);
1347
+ window.removeEventListener("mouseup", this.bindcancel, false);
1348
+ ev.preventDefault();
1349
+ ev.stopPropagation();
1350
+ return false;
1351
+ };
1352
+ this.pointerover = function (e) {
1353
+ };
1354
+ this.pointerout = function (e) {
1355
+ };
1356
+ this.wheel = function (e) {
1357
+ let delta = 0;
1358
+ const pos = this.getPos(e);
1359
+ if (!e)
1360
+ e = window.event;
1361
+ if (e.wheelDelta)
1362
+ delta = e.wheelDelta / 120;
1363
+ else if (e.detail)
1364
+ delta = -e.detail / 3;
1365
+ const ht = this.hitTest(pos);
1366
+ if ((this.wheelzoomx || this.wheelzoom) && ht.m == "x") {
1367
+ if (delta > 0) {
1368
+ this.xoffset = ht.t - (ht.t - this.xoffset) / 1.2
1369
+ this.xrange /= 1.2;
1370
+ } else {
1371
+ this.xoffset = ht.t - (ht.t - this.xoffset) * 1.2
1372
+ this.xrange *= 1.2;
1373
+ }
1374
+ }
1375
+ if ((this.wheelzoomy || this.wheelzoom) && ht.m == "y") {
1376
+ if (delta > 0) {
1377
+ this.yoffset = ht.n - (ht.n - this.yoffset) / 1.2
1378
+ this.yrange /= 1.2;
1379
+ } else {
1380
+ this.yoffset = ht.n - (ht.n - this.yoffset) * 1.2
1381
+ this.yrange *= 1.2;
1382
+ }
1383
+
1384
+ }
1385
+ e.preventDefault();
1386
+ };
1387
+ this.layout = function () {
1388
+ if (typeof (this.kbwidth) == "undefined")
1389
+ return;
1390
+ const proll = this.proll;
1391
+ const bodystyle = this.body.style;
1392
+ if (this.bgsrc)
1393
+ proll.style.background = "url('" + this.bgsrc + "')";
1394
+ this.kbimg.style.background = "url('" + this.kbsrc + "')";
1395
+ if (this.width) {
1396
+ proll.width = this.width;
1397
+ bodystyle.width = proll.style.width = this.width + "px";
1398
+ }
1399
+ if (this.height) {
1400
+ proll.height = this.height;
1401
+ bodystyle.height = proll.style.height = this.height + "px";
1402
+ }
1403
+ this.swidth = proll.width - this.yruler;
1404
+ this.swidth -= this.kbwidth;
1405
+ this.sheight = proll.height - this.xruler;
1406
+ this.redraw();
1407
+ };
1408
+ this.redrawMarker = function () {
1409
+ if (!this.initialized)
1410
+ return;
1411
+ const cur = (this.cursor - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
1412
+ this.cursorimg.style.left = (cur + this.cursoroffset) + "px";
1413
+ const start = (this.markstart - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
1414
+ this.markstartimg.style.left = (start + this.markstartoffset) + "px";
1415
+ const end = (this.markend - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
1416
+ this.markendimg.style.left = (end + this.markendoffset) + "px";
1417
+ };
1418
+ this.redrawGrid = function () {
1419
+ for (let y = 0; y < 128; ++y) {
1420
+ if (this.semiflag[y % 12] & 1)
1421
+ this.ctx.fillStyle = this.coldk;
1422
+ else
1423
+ this.ctx.fillStyle = this.collt;
1424
+ let ys = this.height - (y - this.yoffset) * this.steph;
1425
+ this.ctx.fillRect(this.yruler + this.kbwidth, ys | 0, this.swidth, -this.steph);
1426
+ this.ctx.fillStyle = this.colgrid;
1427
+ this.ctx.fillRect(this.yruler + this.kbwidth, ys | 0, this.swidth, 1);
1428
+ }
1429
+ for (let t = 0; ; t += this.grid) {
1430
+ let x = this.stepw * (t - this.xoffset) + this.yruler + this.kbwidth;
1431
+ this.ctx.fillRect(x | 0, this.xruler, 1, this.sheight);
1432
+ if (x >= this.width)
1433
+ break;
1434
+ }
1435
+ };
1436
+ this.semiflag = [6, 1, 0, 1, 0, 2, 1, 0, 1, 0, 1, 0];
1437
+ this.redrawXRuler = function () {
1438
+ if (this.xruler) {
1439
+ this.ctx.textAlign = "left";
1440
+ this.ctx.font = (this.xruler / 2) + "px 'sans-serif'";
1441
+ this.ctx.fillStyle = this.colrulerbg;
1442
+ this.ctx.fillRect(0, 0, this.width, this.xruler);
1443
+ this.ctx.fillStyle = this.colrulerborder;
1444
+ this.ctx.fillRect(0, 0, this.width, 1);
1445
+ this.ctx.fillRect(0, 0, 1, this.xruler);
1446
+ this.ctx.fillRect(0, this.xruler - 1, this.width, 1);
1447
+ this.ctx.fillRect(this.width - 1, 0, 1, this.xruler);
1448
+ this.ctx.fillStyle = this.colrulerfg;
1449
+ for (let t = 0; ; t += this.timebase) {
1450
+ let x = (t - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
1451
+ this.ctx.fillRect(x, 0, 1, this.xruler);
1452
+ this.ctx.fillText(t / this.timebase + 1, x + 4, this.xruler - 8);
1453
+ if (x >= this.width)
1454
+ break;
1455
+ }
1456
+ }
1457
+ };
1458
+ this.redrawYRuler = function () {
1459
+ if (this.yruler) {
1460
+ this.ctx.textAlign = "right";
1461
+ this.ctx.font = (this.steph / 2) + "px 'sans-serif'";
1462
+ this.ctx.fillStyle = this.colrulerbg;
1463
+ this.ctx.fillRect(0, this.xruler, this.yruler, this.sheight);
1464
+ this.ctx.fillStyle = this.colrulerborder;
1465
+ this.ctx.fillRect(0, this.xruler, 1, this.sheight);
1466
+ this.ctx.fillRect(this.yruler, this.xruler, 1, this.sheight);
1467
+ this.ctx.fillRect(0, this.height - 1, this.yruler, 1);
1468
+ this.ctx.fillStyle = this.colrulerfg;
1469
+ for (let y = 0; y < 128; y += 12) {
1470
+ const ys = this.height - this.steph * (y - this.yoffset);
1471
+ this.ctx.fillRect(0, ys | 0, this.yruler, -1);
1472
+ this.ctx.fillText("C" + (((y / 12) | 0) + this.octadj), this.yruler - 4, ys - 4);
1473
+ }
1474
+ }
1475
+ this.kbimg.style.top = (this.xruler) + "px";
1476
+ this.kbimg.style.left = this.yruler + "px";
1477
+ this.kbimg.style.width = this.kbwidth + "px";
1478
+ this.kbimg.style.backgroundSize = "100% " + (this.steph * 12) + "px";
1479
+ this.kbimg.style.backgroundPosition = "0px " + (this.sheight + this.steph * this.yoffset) + "px";
1480
+ };
1481
+ this.redrawKeyboard = function () {
1482
+ if (this.yruler) {
1483
+ this.ctx.textAlign = "right";
1484
+ this.ctx.font = (this.steph / 2) + "px 'sans-serif'";
1485
+ this.ctx.fillStyle = this.colortab.kbwh;
1486
+ this.ctx.fillRect(1, this.xruler, this.yruler, this.sheight);
1487
+ this.ctx.fillStyle = this.colortab.kbbk;
1488
+ for (let y = 0; y < 128; ++y) {
1489
+ const ys = this.height - this.steph * (y - this.yoffset);
1490
+ const ysemi = y % 12;
1491
+ const fsemi = this.semiflag[ysemi];
1492
+ if (fsemi & 1) {
1493
+ this.ctx.fillRect(0, ys, this.yruler / 2, -this.steph);
1494
+ this.ctx.fillRect(0, (ys - this.steph / 2) | 0, this.yruler, -1);
1495
+ }
1496
+ if (fsemi & 2)
1497
+ this.ctx.fillRect(0, ys | 0, this.yruler, -1);
1498
+ if (fsemi & 4)
1499
+ this.ctx.fillText("C" + (((y / 12) | 0) + this.octadj), this.yruler - 4, ys - 4);
1500
+ }
1501
+ this.ctx.fillRect(this.yruler, this.xruler, 1, this.sheight);
1502
+ }
1503
+ };
1504
+ this.redrawAreaSel = function () {
1505
+ if (this.dragging && this.dragging.o == "A") {
1506
+ this.ctx.fillStyle = this.colselarea;
1507
+ this.ctx.fillRect(this.dragging.p.x, this.dragging.p.y, this.dragging.p2.x - this.dragging.p.x, this.dragging.p2.y - this.dragging.p.y);
1508
+ }
1509
+ };
1510
+ this.redraw = function () {
1511
+ let x, w, y;
1512
+ if (!this.ctx) return;
1513
+
1514
+ this.ctx.clearRect(0, 0, this.width, this.height);
1515
+ this.stepw = this.swidth / this.xrange;
1516
+ this.steph = this.sheight / this.yrange;
1517
+
1518
+ this.redrawGrid();
1519
+
1520
+ const l = this.sequence.length;
1521
+ for (let s = 0; s < l; ++s) {
1522
+ const ev = this.sequence[s];
1523
+ const noteHeight = this.steph;
1524
+ console.log('tool active: ' + this.tool + ', length : ' + ev.g + ' start: ' + ev.t)
1525
+
1526
+ if (ev.f) {
1527
+ this.ctx.fillStyle = this.colnotesel;
1528
+ } else {
1529
+ this.ctx.fillStyle = this.colnote;
1530
+ }
1531
+
1532
+ w = ev.g * this.stepw;
1533
+ x = (ev.t - this.xoffset) * this.stepw + this.yruler + this.kbwidth;
1534
+ y = this.height - (ev.n - this.yoffset) * this.steph;
1535
+
1536
+ this.ctx.fillRect(x, y - noteHeight, w, noteHeight);
1537
+
1538
+ this.applyTexture(ev);
1539
+ }
1540
+
1541
+ this.redrawYRuler();
1542
+ this.redrawXRuler();
1543
+ this.redrawMarker();
1544
+ this.redrawAreaSel();
1545
+ };
1546
+ this.ready();
1547
+ }
1548
+
1549
+ getAttr(n, def) {
1550
+ let v = this.getAttribute(n);
1551
+ if (v == "" || v == null) return def;
1552
+ switch (typeof (def)) {
1553
+ case "number":
1554
+ if (v == "true") return 1;
1555
+ v = +v;
1556
+ if (isNaN(v)) return 0;
1557
+ return v;
1558
+ }
1559
+ return v;
1560
+ }
1561
+ });
1562
+
1563
+
1564
+ /// pianoroll creator :
1565
+
1566
+ function aRoll(id, target, width, height) {
1567
+ // we build the pianoroll here
1568
+ const pianoRoll = document.createElement('webaudio-pianoroll');
1569
+
1570
+ pianoRoll.setAttribute('id', id);
1571
+ pianoRoll.setAttribute('width', width);
1572
+ pianoRoll.setAttribute('height', height);
1573
+
1574
+ const targetElement = document.getElementById(target);
1575
+
1576
+ if (targetElement) {
1577
+ targetElement.appendChild(pianoRoll);
1578
+ } else {
1579
+ console.error('Target element not found');
1580
+ }
1581
+ }
1582
+
1583
+ /// pianoroll builder below
1584
+
1585
+ function setTempo(id, tempo) {
1586
+ let pianoRoll = document.getElementById(id);
1587
+ pianoRoll.tempo = tempo;
1588
+ pianoRoll.updateTimer();
1589
+ console.log('Tempo:', pianoRoll.tempo);
1590
+ }
1591
+
1592
+ function changeEditMode(id, mode) {
1593
+ document.getElementById(id).editmode = mode;
1594
+ }
1595
+
1596
+ function AddNote(id) {
1597
+ let sequence = document.getElementById(id);
1598
+ sequence.addNote(
1599
+ 0, // Tick
1600
+ 66, // Note
1601
+ 2, // Duration
1602
+ 39, // velocity???
1603
+ 0, // selected or not
1604
+ 'notes' // type (group)
1605
+ );
1606
+ }
1607
+
1608
+ function setMarkStart(id) {
1609
+ let sequence = document.getElementById(id);
1610
+ sequence.markstart = (3)
1611
+ }
1612
+
1613
+ function setMarkEnd(id) {
1614
+ let sequence = document.getElementById(id);
1615
+ sequence.markend = (7)
1616
+ }
1617
+
1618
+ function playHead(id) {
1619
+ let sequence = document.getElementById(id);
1620
+ sequence.locate(3);
1621
+ }
1622
+
1623
+ function menu(id) {
1624
+ console.log('open a menu here!!!')
1625
+ }
1626
+
1627
+ function editing(id) {
1628
+ let sequence = document.getElementById(id);
1629
+ if (sequence.editing) {
1630
+ sequence.editing = false
1631
+ sequence.tool = 'select'
1632
+ console.log('no editing')
1633
+ } else {
1634
+ sequence.editing = true
1635
+ sequence.tool = 'create'
1636
+ console.log('editing active')
1637
+ }
1638
+
1639
+ }
1640
+
1641
+ function createExtendedNote(notes) {
1642
+ if (notes.length === 0) {
1643
+ return null;
1644
+ }
1645
+
1646
+ let selectedNotes = notes.filter(note => note.f === 1);
1647
+
1648
+ if (selectedNotes.length === 0) {
1649
+ return null;
1650
+ }
1651
+
1652
+ let earliestStartNote = selectedNotes.reduce((earliest, note) => note.t < earliest.t ? note : earliest, selectedNotes[0]);
1653
+
1654
+ let latestEndNote = selectedNotes.reduce((latest, note) => (note.t + note.g) > (latest.t + latest.g) ? note : latest, selectedNotes[0]);
1655
+
1656
+ let newNote = {
1657
+ id: Math.max(...notes.map(note => note.id)) + 1, // new id build on previous build id
1658
+ t: earliestStartNote.t, // start of first selected note in timecode
1659
+ n: earliestStartNote.n, // use the same pitch as the first seledted note
1660
+ g: (latestEndNote.t + latestEndNote.g) - earliestStartNote.t, // compute total length
1661
+ f: 1 // by default select the newly created note
1662
+ };
1663
+
1664
+ return newNote;
1665
+ }
1666
+
1667
+
1668
+ function deleteSelectedNotes(id) {
1669
+ let pianoroll = document.getElementById(id);
1670
+ let sequence = pianoroll.sequence;
1671
+ if (Array.isArray(sequence)) {
1672
+ pianoroll.sequence = sequence.filter(note => note.f !== 1);
1673
+ if (typeof pianoroll.redraw === 'function') {
1674
+ pianoroll.redraw();
1675
+ }
1676
+ }
1677
+ }
1678
+
1679
+ function group(id) {
1680
+ let sequence = document.getElementById(id);
1681
+ let notes = sequence.sequence;
1682
+ let newNote = createExtendedNote(notes)
1683
+ let noteToDel = [];
1684
+ notes.forEach(note => {
1685
+ if (note.f === 1) {
1686
+ noteToDel.push(note)
1687
+ }
1688
+ });
1689
+ noteToDel.forEach(note => {
1690
+ const index = sequence.sequence.indexOf(note);
1691
+ if (index !== -1) {
1692
+ sequence.sequence.splice(index, 1);
1693
+ }
1694
+ });
1695
+ sequence.addNote(newNote.t, 60, newNote.g, 8, 1, 'group', {in: 0, out: 0, group: noteToDel});
1696
+ }
1697
+
1698
+ function notes(id) {
1699
+ let sequence = document.getElementById(id);
1700
+ let notes = sequence.sequence;
1701
+ console.log('note found : '+notes)
1702
+ console.log(notes)
1703
+
1704
+ }
1705
+
1706
+ function selectAll(id) {
1707
+ let pianoroll = document.getElementById(id);
1708
+ pianoroll.sequence.forEach(note => {
1709
+ note.f = 1;
1710
+ });
1711
+ pianoroll.redraw();
1712
+ }
1713
+
1714
+ function deSelectAll(id) {
1715
+ let pianoroll = document.getElementById(id);
1716
+ pianoroll.sequence.forEach(note => {
1717
+ note.f = 0;
1718
+ });
1719
+ pianoroll.redraw();
1720
+ }
1721
+
1722
+ function marker(id) {
1723
+ const pianoRoll = document.getElementById(id);
1724
+ pianoRoll.marker(12, 'playheadID1', 'My First Playhead');
1725
+ }
1726
+
1727
+ function removeMarker(id) {
1728
+ const pianoRoll = document.getElementById(id);
1729
+ pianoRoll.removeMarker('playheadID1');
1730
+ }
1731
+
1732
+ function removeAllMarkers(id) {
1733
+ const pianoRoll = document.getElementById(id);
1734
+ pianoRoll.removeAllMarkers('playheadID1');
1735
+ }
1736
+
1737
+
1738
+
1739
+ function clear_sequence(id) {
1740
+ const pianoRoll = document.getElementById(id);
1741
+ pianoRoll.clearSequence();
1742
+ }
1743
+
1744
+ function fill_sequence(id, seq) {
1745
+ const pianoRoll = document.getElementById(id);
1746
+ pianoRoll.setSequence(seq);
1747
+ }