scarpe 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -1
  3. data/.yardopts +1 -0
  4. data/CHANGELOG.md +52 -6
  5. data/Gemfile +2 -1
  6. data/Gemfile.lock +20 -6
  7. data/LICENSE.txt +7 -1
  8. data/README.md +100 -21
  9. data/Rakefile +68 -1
  10. data/examples/Edit_box_Styles.rb +8 -0
  11. data/examples/Kerning.rb +7 -0
  12. data/examples/animate.rb +20 -0
  13. data/examples/arrow.rb +10 -0
  14. data/examples/border.rb +11 -0
  15. data/examples/btn_tooltip.rb +7 -0
  16. data/examples/button_style_changed.rb +7 -0
  17. data/examples/button_styles_default.rb +6 -0
  18. data/examples/check.rb +2 -0
  19. data/examples/download_and_show_image.rb +3 -0
  20. data/examples/flags/finland.rb +15 -0
  21. data/examples/flags/italy.rb +11 -0
  22. data/examples/flags/mauritius.rb +14 -0
  23. data/examples/font_family.rb +17 -0
  24. data/examples/font_shorthand.rb +9 -0
  25. data/examples/gen.rb +12 -8
  26. data/examples/highlander.rb +3 -3
  27. data/examples/legacy/README.md +6 -0
  28. data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +1 -1
  29. data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
  30. data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
  31. data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
  32. data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
  33. data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
  34. data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
  35. data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
  36. data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
  37. data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
  38. data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
  39. data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
  40. data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
  41. data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
  42. data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
  43. data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
  44. data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
  45. data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
  46. data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
  47. data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
  48. data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
  49. data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
  50. data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
  51. data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
  52. data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
  53. data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
  54. data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
  55. data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
  56. data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
  57. data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
  58. data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
  59. data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
  60. data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
  61. data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
  62. data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
  63. data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
  64. data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
  65. data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
  66. data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
  67. data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
  68. data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
  69. data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
  70. data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
  71. data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
  72. data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
  73. data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
  74. data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
  75. data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
  76. data/examples/legacy/not_checked/simple/anim-shapes.rb +1 -1
  77. data/examples/legacy/not_checked/speedometer_app.rb +55 -0
  78. data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
  79. data/examples/legacy/working/shoes_manual/animate.rb +7 -0
  80. data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
  81. data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
  82. data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
  83. data/examples/legacy/working/shoes_manual/download.rb +12 -0
  84. data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
  85. data/examples/legacy/working/shoes_manual/editline.rb +7 -0
  86. data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
  87. data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
  88. data/examples/legacy/working/shoes_manual/image.rb +5 -0
  89. data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
  90. data/examples/legacy/working/shoes_manual/message.rb +18 -0
  91. data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
  92. data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
  93. data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
  94. data/examples/legacy/working/shoes_manual/stack.rb +7 -0
  95. data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
  96. data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
  97. data/examples/legacy/working/shoes_manual/width.rb +4 -0
  98. data/examples/legacy/working/simple/image-icon.rb +3 -0
  99. data/examples/legacy/{not_checked → working}/simple/image.rb +1 -1
  100. data/examples/list_box_choose.rb +17 -0
  101. data/examples/local_assets/local_file_server.rb +82 -0
  102. data/examples/local_assets/multi_image.rb +5 -0
  103. data/examples/local_assets/sample.gif +0 -0
  104. data/examples/local_assets/sample.mp4 +0 -0
  105. data/examples/local_assets/small.png +0 -0
  106. data/examples/local_fonts.rb +5 -2
  107. data/examples/local_images.rb +2 -3
  108. data/examples/margin.rb +13 -0
  109. data/examples/margin_check.rb +27 -0
  110. data/examples/oval-with-kwargs.rb +3 -0
  111. data/examples/oval.rb +26 -0
  112. data/examples/para/para_text.rb +14 -0
  113. data/examples/para_font_styles.rb +17 -0
  114. data/examples/para_font_variant.rb +6 -0
  115. data/examples/para_fontweight.rb +13 -0
  116. data/examples/parse_xl_funnies.rb +3 -0
  117. data/examples/progress.rb +31 -0
  118. data/examples/radio/radio_groups.rb +2 -2
  119. data/examples/rect.rb +4 -0
  120. data/examples/rotate_shapes.rb +17 -0
  121. data/examples/scarpe_ext.rb +3 -0
  122. data/examples/shapes/star.rb +1 -3
  123. data/examples/simpler-menu.rb +21 -0
  124. data/examples/spacing.rb +1 -1
  125. data/examples/span.rb +4 -2
  126. data/exe/scarpe +2 -1
  127. data/lacci/Gemfile +2 -0
  128. data/lacci/Gemfile.lock +8 -1
  129. data/lacci/lacci.gemspec +2 -2
  130. data/lacci/lib/lacci/scarpe_cli.rb +2 -2
  131. data/lacci/lib/lacci/scarpe_core.rb +2 -1
  132. data/lacci/lib/lacci/version.rb +1 -1
  133. data/lacci/lib/scarpe/niente/app.rb +23 -0
  134. data/lacci/lib/scarpe/niente/display_service.rb +66 -0
  135. data/lacci/lib/scarpe/niente/drawable.rb +59 -0
  136. data/lacci/lib/scarpe/niente/shoes_spec.rb +93 -0
  137. data/lacci/lib/scarpe/niente.rb +32 -0
  138. data/lacci/lib/shoes/app.rb +111 -72
  139. data/lacci/lib/shoes/background.rb +2 -2
  140. data/lacci/lib/shoes/border.rb +2 -2
  141. data/lacci/lib/shoes/builtins.rb +63 -0
  142. data/lacci/lib/shoes/changelog.rb +52 -0
  143. data/lacci/lib/shoes/colors.rb +3 -1
  144. data/lacci/lib/shoes/constants.rb +41 -2
  145. data/lacci/lib/shoes/display_service.rb +80 -18
  146. data/lacci/lib/shoes/download.rb +2 -2
  147. data/lacci/lib/shoes/drawable.rb +654 -0
  148. data/lacci/lib/shoes/drawables/arc.rb +27 -0
  149. data/lacci/lib/shoes/drawables/arrow.rb +21 -0
  150. data/lacci/lib/shoes/drawables/border.rb +28 -0
  151. data/lacci/lib/shoes/drawables/button.rb +57 -0
  152. data/lacci/lib/shoes/drawables/check.rb +33 -0
  153. data/lacci/lib/shoes/drawables/document_root.rb +20 -0
  154. data/lacci/lib/shoes/{widgets → drawables}/edit_box.rb +9 -8
  155. data/lacci/lib/shoes/{widgets → drawables}/edit_line.rb +8 -7
  156. data/lacci/lib/shoes/drawables/flow.rb +20 -0
  157. data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
  158. data/lacci/lib/shoes/{widgets → drawables}/image.rb +7 -7
  159. data/lacci/lib/shoes/drawables/line.rb +17 -0
  160. data/lacci/lib/shoes/drawables/link.rb +31 -0
  161. data/lacci/lib/shoes/drawables/list_box.rb +59 -0
  162. data/lacci/lib/shoes/drawables/oval.rb +48 -0
  163. data/lacci/lib/shoes/drawables/para.rb +206 -0
  164. data/lacci/lib/shoes/drawables/progress.rb +15 -0
  165. data/lacci/lib/shoes/drawables/radio.rb +35 -0
  166. data/lacci/lib/shoes/drawables/rect.rb +18 -0
  167. data/lacci/lib/shoes/{widgets → drawables}/shape.rb +8 -8
  168. data/lacci/lib/shoes/drawables/slot.rb +178 -0
  169. data/lacci/lib/shoes/drawables/stack.rb +21 -0
  170. data/lacci/lib/shoes/drawables/star.rb +28 -0
  171. data/lacci/lib/shoes/drawables/subscription_item.rb +93 -0
  172. data/lacci/lib/shoes/drawables/text_drawable.rb +122 -0
  173. data/lacci/lib/shoes/drawables/video.rb +17 -0
  174. data/lacci/lib/shoes/drawables/widget.rb +74 -0
  175. data/lacci/lib/shoes/drawables.rb +32 -0
  176. data/lacci/lib/shoes/errors.rb +38 -0
  177. data/lacci/lib/shoes/log.rb +2 -2
  178. data/lacci/lib/shoes/margin_helper.rb +79 -0
  179. data/lacci/lib/shoes/ruby_extensions.rb +15 -0
  180. data/lacci/lib/shoes-spec.rb +93 -0
  181. data/lacci/lib/shoes.rb +31 -10
  182. data/lacci/test/.gitignore +1 -0
  183. data/lacci/test/test_draw_context.rb +167 -0
  184. data/lacci/test/test_font_helper.rb +57 -0
  185. data/lacci/test/test_helper.rb +81 -0
  186. data/lacci/test/test_lacci.rb +99 -3
  187. data/lacci/test/test_margin_helper.rb +82 -0
  188. data/lacci/test/test_niente_test_infra.rb +26 -0
  189. data/lacci/test/test_oval.rb +82 -0
  190. data/lacci/test/test_parenting.rb +140 -0
  191. data/lacci/test/test_shoes_errors.rb +49 -0
  192. data/lacci/test/test_text_drawables.rb +23 -0
  193. data/lib/scarpe/assets.rb +18 -0
  194. data/lib/scarpe/cats_cradle.rb +84 -103
  195. data/lib/scarpe/errors.rb +77 -0
  196. data/lib/scarpe/shoes_spec.rb +160 -0
  197. data/lib/scarpe/version.rb +2 -2
  198. data/lib/scarpe/wv/app.rb +21 -20
  199. data/lib/scarpe/wv/arc.rb +4 -51
  200. data/lib/scarpe/wv/arrow.rb +9 -0
  201. data/lib/scarpe/wv/border.rb +9 -18
  202. data/lib/scarpe/wv/button.rb +7 -35
  203. data/lib/scarpe/wv/check.rb +3 -5
  204. data/lib/scarpe/wv/control_interface.rb +20 -30
  205. data/lib/scarpe/wv/document_root.rb +81 -4
  206. data/lib/scarpe/wv/{widget.rb → drawable.rb} +71 -82
  207. data/lib/scarpe/wv/edit_box.rb +8 -18
  208. data/lib/scarpe/wv/edit_line.rb +9 -20
  209. data/lib/scarpe/wv/flow.rb +2 -18
  210. data/lib/scarpe/wv/image.rb +7 -30
  211. data/lib/scarpe/wv/line.rb +3 -25
  212. data/lib/scarpe/wv/link.rb +6 -17
  213. data/lib/scarpe/wv/list_box.rb +6 -29
  214. data/lib/scarpe/wv/oval.rb +13 -0
  215. data/lib/scarpe/wv/para.rb +12 -30
  216. data/lib/scarpe/wv/progress.rb +19 -0
  217. data/lib/scarpe/wv/radio.rb +9 -10
  218. data/lib/scarpe/wv/rect.rb +13 -0
  219. data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
  220. data/lib/scarpe/wv/shape.rb +13 -13
  221. data/lib/scarpe/wv/slot.rb +8 -25
  222. data/lib/scarpe/wv/stack.rb +2 -18
  223. data/lib/scarpe/wv/star.rb +3 -53
  224. data/lib/scarpe/wv/subscription_item.rb +38 -4
  225. data/lib/scarpe/wv/text_drawable.rb +90 -0
  226. data/lib/scarpe/wv/video.rb +15 -15
  227. data/lib/scarpe/wv/web_wrangler.rb +320 -328
  228. data/lib/scarpe/wv/webview_local_display.rb +52 -33
  229. data/lib/scarpe/wv/webview_relay_display.rb +12 -12
  230. data/lib/scarpe/wv/webview_relay_util.rb +7 -10
  231. data/lib/scarpe/wv/wv_display_worker.rb +2 -2
  232. data/lib/scarpe/wv.rb +52 -12
  233. data/lib/scarpe/wv_local.rb +1 -1
  234. data/lib/scarpe/wv_relay.rb +1 -1
  235. data/lib/scarpe.rb +1 -0
  236. data/logger/debug_web_wrangler.json +1 -1
  237. data/logger/scarpe_wv_test.json +1 -1
  238. data/scarpe-components/Gemfile +4 -1
  239. data/scarpe-components/Gemfile.lock +85 -0
  240. data/scarpe-components/README.md +2 -2
  241. data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
  242. data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
  243. data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
  244. data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
  245. data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
  246. data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
  247. data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
  248. data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
  249. data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
  250. data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
  251. data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
  252. data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
  253. data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
  254. data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
  255. data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
  256. data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
  257. data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
  258. data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
  259. data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
  260. data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
  261. data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
  262. data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
  263. data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
  264. data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
  265. data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
  266. data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
  267. data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
  268. data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
  269. data/scarpe-components/lib/scarpe/components/base64.rb +23 -5
  270. data/scarpe-components/lib/scarpe/components/calzini/alert.rb +49 -0
  271. data/scarpe-components/lib/scarpe/components/calzini/art_drawables.rb +227 -0
  272. data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
  273. data/scarpe-components/lib/scarpe/components/calzini/button.rb +37 -0
  274. data/scarpe-components/lib/scarpe/components/calzini/misc.rb +136 -0
  275. data/scarpe-components/lib/scarpe/components/calzini/para.rb +237 -0
  276. data/scarpe-components/lib/scarpe/components/calzini/slots.rb +109 -0
  277. data/scarpe-components/lib/scarpe/components/calzini.rb +236 -0
  278. data/scarpe-components/lib/scarpe/components/errors.rb +24 -0
  279. data/scarpe-components/lib/scarpe/components/file_helpers.rb +1 -0
  280. data/scarpe-components/lib/scarpe/components/html.rb +134 -0
  281. data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +83 -0
  282. data/scarpe-components/lib/scarpe/components/minitest_import_runnable.rb +98 -0
  283. data/scarpe-components/lib/scarpe/components/minitest_result.rb +127 -0
  284. data/scarpe-components/lib/scarpe/components/modular_logger.rb +5 -5
  285. data/scarpe-components/lib/scarpe/components/print_logger.rb +22 -3
  286. data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
  287. data/scarpe-components/lib/scarpe/components/promises.rb +14 -14
  288. data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +36 -17
  289. data/scarpe-components/lib/scarpe/components/string_helpers.rb +10 -0
  290. data/scarpe-components/lib/scarpe/components/tiranti.rb +167 -0
  291. data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +48 -6
  292. data/scarpe-components/lib/scarpe/components/version.rb +2 -2
  293. data/scarpe-components/test/assets/big-image.png +0 -0
  294. data/scarpe-components/test/assets/big-stylesheet.css +497 -0
  295. data/scarpe-components/test/assets/little-image.png +0 -0
  296. data/scarpe-components/test/assets/little-stylesheet.css +1 -0
  297. data/scarpe-components/test/calzini/test_calzini_alert.rb +30 -0
  298. data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +105 -0
  299. data/scarpe-components/test/calzini/test_calzini_button.rb +54 -0
  300. data/scarpe-components/test/calzini/test_calzini_misc.rb +115 -0
  301. data/scarpe-components/test/calzini/test_calzini_para.rb +34 -0
  302. data/scarpe-components/test/calzini/test_calzini_slots.rb +85 -0
  303. data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +106 -0
  304. data/scarpe-components/test/calzini/test_various.rb +133 -0
  305. data/scarpe-components/test/mtr_data/exception.json +1 -0
  306. data/scarpe-components/test/mtr_data/fail_with_message.json +1 -0
  307. data/scarpe-components/test/mtr_data/skipped_no_message.json +1 -0
  308. data/scarpe-components/test/mtr_data/skipped_w_msg.json +1 -0
  309. data/scarpe-components/test/mtr_data/succeed_2_asserts.json +1 -0
  310. data/scarpe-components/test/test_asset_server.rb +72 -0
  311. data/scarpe-components/test/test_components.rb +31 -2
  312. data/scarpe-components/test/test_dimensions.rb +26 -0
  313. data/scarpe-components/test/test_helper.rb +20 -1
  314. data/scarpe-components/test/test_html.rb +65 -0
  315. data/scarpe-components/test/test_minitest_result.rb +68 -0
  316. data/scarpe-components/test/test_promises.rb +5 -4
  317. data/scarpe-components/test/test_segmented_app_files.rb +10 -6
  318. data/scarpegen.rb +14 -14
  319. data/sig/scarpe.rbs +1 -1
  320. data/tasks/check_html_fixtures.rb +140 -0
  321. data/tasks/regenerate_html_fixtures.rb +104 -0
  322. data/templates/basic_class_template.erb +13 -14
  323. data/templates/class_template_with_event_bind.erb +4 -4
  324. data/templates/class_template_with_shapes.erb +8 -28
  325. data/templates/example_template.erb +1 -1
  326. data/templates/module_template.erb +4 -4
  327. data/templates/webview_template.erb +3 -2
  328. metadata +286 -80
  329. data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +0 -3
  330. data/lacci/lib/shoes/spacing.rb +0 -9
  331. data/lacci/lib/shoes/widget.rb +0 -218
  332. data/lacci/lib/shoes/widgets/alert.rb +0 -19
  333. data/lacci/lib/shoes/widgets/arc.rb +0 -51
  334. data/lacci/lib/shoes/widgets/button.rb +0 -35
  335. data/lacci/lib/shoes/widgets/check.rb +0 -28
  336. data/lacci/lib/shoes/widgets/document_root.rb +0 -20
  337. data/lacci/lib/shoes/widgets/flow.rb +0 -22
  338. data/lacci/lib/shoes/widgets/font.rb +0 -14
  339. data/lacci/lib/shoes/widgets/line.rb +0 -18
  340. data/lacci/lib/shoes/widgets/link.rb +0 -25
  341. data/lacci/lib/shoes/widgets/list_box.rb +0 -25
  342. data/lacci/lib/shoes/widgets/para.rb +0 -68
  343. data/lacci/lib/shoes/widgets/radio.rb +0 -35
  344. data/lacci/lib/shoes/widgets/slot.rb +0 -75
  345. data/lacci/lib/shoes/widgets/span.rb +0 -26
  346. data/lacci/lib/shoes/widgets/stack.rb +0 -24
  347. data/lacci/lib/shoes/widgets/star.rb +0 -44
  348. data/lacci/lib/shoes/widgets/subscription_item.rb +0 -60
  349. data/lacci/lib/shoes/widgets/text_widget.rb +0 -51
  350. data/lacci/lib/shoes/widgets/video.rb +0 -15
  351. data/lacci/lib/shoes/widgets.rb +0 -29
  352. data/lib/scarpe/evented_assertions.rb +0 -88
  353. data/lib/scarpe/wv/alert.rb +0 -66
  354. data/lib/scarpe/wv/background.rb +0 -27
  355. data/lib/scarpe/wv/control_interface_test.rb +0 -238
  356. data/lib/scarpe/wv/dimensions.rb +0 -22
  357. data/lib/scarpe/wv/font.rb +0 -36
  358. data/lib/scarpe/wv/html.rb +0 -108
  359. data/lib/scarpe/wv/spacing.rb +0 -41
  360. data/lib/scarpe/wv/span.rb +0 -68
  361. data/lib/scarpe/wv/text_widget.rb +0 -30
  362. /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/definr.rb +0 -0
  363. /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/funnies.rb +0 -0
  364. /data/examples/legacy/not_checked/shoes-contrib/{elements → basic}/list_box-select-class.rb +0 -0
  365. /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
  366. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/basic-edit-box.rb +0 -0
  367. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/basic-fps.rb +0 -0
  368. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/border-cat.rb +0 -0
  369. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/check-mate.rb +0 -0
  370. /data/examples/legacy/{not_checked/shoes-contrib/manipulation → working/simple}/clear-slot.rb +0 -0
  371. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/clock.rb +0 -0
  372. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/gradient-shoes.rb +0 -0
  373. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/list_box-shape-report.rb +0 -0
  374. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/list_box.rb +0 -0
  375. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/phat-button.rb +0 -0
  376. /data/examples/legacy/{not_checked/shoes-contrib → working}/simple/simple-calc.rb +0 -0
  377. /data/examples/legacy/{not_checked/shoes-contrib/position → working/simple}/stack-width.rb +0 -0
  378. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/width-introspec.rb +0 -0
@@ -1,18 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewEditLine < WebviewWidget
5
- attr_reader :text, :width
3
+ module Scarpe::Webview
4
+ class EditLine < Drawable
5
+ attr_reader :text, :width, :stroke, :font, :tooltip
6
6
 
7
7
  def initialize(properties)
8
8
  super
9
9
 
10
- # The JS handler sends a "change" event, which we forward to the Shoes widget tree
10
+ # The JS handler sends a "change" event, which we forward to the Shoes drawable tree
11
11
  bind("change") do |new_text|
12
12
  send_self_event(new_text, event_name: "change")
13
13
  end
14
+ bind("hover") do |new_text|
15
+ send_self_event(new_text, event_name: "hover")
16
+ end
14
17
  end
15
-
18
+
16
19
  def properties_changed(changes)
17
20
  t = changes.delete("text")
18
21
  if t
@@ -23,21 +26,7 @@ class Scarpe
23
26
  end
24
27
 
25
28
  def element
26
- oninput = handler_js_code("change", "this.value")
27
-
28
- HTML.render do |h|
29
- h.input(id: html_id, oninput: oninput, value: @text, style: style)
30
- end
31
- end
32
-
33
- protected
34
-
35
- def style
36
- styles = super
37
-
38
- styles[:width] = Dimensions.length(@width) if @width
39
-
40
- styles
29
+ render("edit_line")
41
30
  end
42
31
  end
43
32
  end
@@ -1,22 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewFlow < Scarpe::WebviewSlot
5
- def initialize(properties)
6
- super
7
- end
8
-
9
- protected
10
-
11
- def style
12
- {
13
- display: "flex",
14
- "flex-direction": "row",
15
- "flex-wrap": "wrap",
16
- "align-content": "flex-start",
17
- "justify-content": "flex-start",
18
- "align-items": "flex-start",
19
- }.merge(super)
20
- end
3
+ module Scarpe::Webview
4
+ class Flow < Slot
21
5
  end
22
6
  end
@@ -1,41 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "scarpe/components/base64"
4
-
5
- class Scarpe
6
- class WebviewImage < WebviewWidget
7
- include Components::Base64
3
+ module Scarpe::Webview
4
+ class Image < Drawable
8
5
  def initialize(properties)
9
6
  super
10
7
 
11
- @url = valid_url?(@url) ? @url : "data:image/png;base64,#{encode_file_to_base64(@url)}"
12
- end
13
-
14
- def element
15
- if @click
16
- HTML.render do |h|
17
- h.a(id: html_id, href: @click) { h.img(id: html_id, src: @url, style:) }
18
- end
19
- else
20
- HTML.render do |h|
21
- h.img(id: html_id, src: @url, style:)
22
- end
8
+ unless valid_url?(@url)
9
+ # It's assumed to be a file path.
10
+ @url = Scarpe::Webview.asset_server.asset_url(File.expand_path @url)
23
11
  end
24
12
  end
25
13
 
26
- protected
27
-
28
- def style
29
- styles = super
30
-
31
- styles[:width] = Dimensions.length(@width) if @width
32
- styles[:height] = Dimensions.length(@height) if @height
33
-
34
- styles[:top] = Dimensions.length(@top) if @top
35
- styles[:left] = Dimensions.length(@left) if @left
36
- styles[:position] = "absolute" if @top || @left
37
-
38
- styles
14
+ def element
15
+ render("image")
39
16
  end
40
17
  end
41
18
  end
@@ -1,35 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewLine < Scarpe::WebviewWidget
3
+ module Scarpe::Webview
4
+ class Line < Drawable
5
5
  def initialize(properties)
6
6
  super(properties)
7
7
  end
8
8
 
9
9
  def element
10
- HTML.render do |h|
11
- h.div(id: html_id, style: style) do
12
- h.svg(width: @x2, height: @y2) do
13
- h.line(x1: @left, y1: @top, x2: @x2, y2: @y2, style: line_style)
14
- end
15
- end
16
- end
17
- end
18
-
19
- protected
20
-
21
- def style
22
- super.merge({
23
- left: "#{@left}px",
24
- top: "#{@top}px",
25
- })
26
- end
27
-
28
- def line_style
29
- {
30
- stroke: @draw_context["stroke"],
31
- "stroke-width": "4",
32
- }
10
+ render("line")
33
11
  end
34
12
  end
35
13
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewLink < WebviewWidget
3
+ module Scarpe::Webview
4
+ class Link < TextDrawable
5
5
  def initialize(properties)
6
6
  super
7
7
 
@@ -10,21 +10,10 @@ class Scarpe
10
10
  end
11
11
  end
12
12
 
13
- def element
14
- HTML.render do |h|
15
- h.a(**attributes) do
16
- @text
17
- end
18
- end
19
- end
20
-
21
- def attributes
22
- {
23
- id: html_id,
24
- href: @click,
25
- onclick: (handler_js_code("click") if @has_block),
26
- style: style,
27
- }.compact
13
+ def to_calzini_hash
14
+ h = super
15
+ h[:tag] = "a"
16
+ h
28
17
  end
29
18
  end
30
19
  end
@@ -1,20 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewListBox < Scarpe::WebviewWidget
5
- attr_reader :selected_item, :items, :height, :width
3
+ module Scarpe::Webview
4
+ class ListBox < Drawable
5
+ attr_reader :items, :height, :width, :chosen
6
6
 
7
7
  def initialize(properties)
8
- super(properties)
8
+ super
9
9
 
10
- # The JS handler sends a "change" event, which we forward to the Shoes widget tree
11
10
  bind("change") do |new_item|
12
11
  send_self_event(new_item, event_name: "change")
13
12
  end
14
13
  end
15
14
 
16
15
  def properties_changed(changes)
17
- selected = changes.delete("selected_item")
16
+ selected = changes.delete("chosen")
18
17
  if selected
19
18
  html_element.value = selected
20
19
  end
@@ -22,29 +21,7 @@ class Scarpe
22
21
  end
23
22
 
24
23
  def element
25
- onchange = handler_js_code("change", "this.options[this.selectedIndex].value")
26
-
27
- select_attrs = { id: html_id, onchange: onchange, style: style }
28
- option_attrs = { value: nil, selected: false }
29
-
30
- HTML.render do |h|
31
- h.select(**select_attrs) do
32
- items.each do |item|
33
- h.option(**option_attrs, value: item, selected: (item == selected_item)) { item }
34
- end
35
- end
36
- end
37
- end
38
-
39
- protected
40
-
41
- def style
42
- styles = super
43
-
44
- styles[:height] = Dimensions.length(height) if height
45
- styles[:width] = Dimensions.length(width) if width
46
-
47
- styles
24
+ render("list_box")
48
25
  end
49
26
  end
50
27
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scarpe::Webview
4
+ class Oval < Drawable
5
+ def initialize(properties)
6
+ super(properties)
7
+ end
8
+
9
+ def element(&block)
10
+ render("oval", &block)
11
+ end
12
+ end
13
+ end
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewPara < WebviewWidget
3
+ module Scarpe::Webview
4
+ class Para < Drawable
5
+ # Currently this is duplicated in Calzini. How to refactor?
6
+ # Similarly, we make some assumptions about when size is a symbol
7
+ # versus string that may not survive JSON deserialization.
8
+ # Do we want to hardcode these sizes in Lacci and have it always
9
+ # pass numbers?
5
10
  SIZES = {
6
11
  inscription: 10,
7
12
  ins: 10,
@@ -14,10 +19,6 @@ class Scarpe
14
19
  }.freeze
15
20
  private_constant :SIZES
16
21
 
17
- def initialize(properties)
18
- super
19
- end
20
-
21
22
  def properties_changed(changes)
22
23
  items = changes.delete("text_items")
23
24
  if items
@@ -40,42 +41,27 @@ class Scarpe
40
41
  if item.is_a?(String)
41
42
  item
42
43
  else
43
- WebviewDisplayService.instance.query_display_widget_for(item)
44
+ Scarpe::Webview::DisplayService.instance.query_display_drawable_for(item)
44
45
  end
45
46
  end
46
47
  end
47
48
 
48
49
  def element(&block)
49
- HTML.render do |h|
50
- h.p(**options, &block)
51
- end
50
+ render("para", &block)
52
51
  end
53
52
 
53
+ # Because para's to_html takes a block, and it needs to convert IDs into display
54
+ # drawables, it needs to also override to_html
54
55
  def to_html
55
56
  @children ||= []
56
57
 
57
58
  element { child_markup }
58
59
  end
59
60
 
60
- protected
61
-
62
- def style
63
- super.merge({
64
- color: rgb_to_hex(@stroke),
65
- "font-size": font_size,
66
- "font-family": @font,
67
- }.compact)
68
- end
69
-
70
- def font_size
71
- font_size = @size.is_a?(Symbol) ? SIZES[@size] : @size
72
-
73
- Dimensions.length(font_size)
74
- end
75
-
76
61
  private
77
62
 
78
63
  def child_markup
64
+ # The children should be only text strings or TextDrawables.
79
65
  items_to_display_children(@text_items).map do |child|
80
66
  if child.respond_to?(:to_html)
81
67
  child.to_html
@@ -84,9 +70,5 @@ class Scarpe
84
70
  end
85
71
  end.join
86
72
  end
87
-
88
- def options
89
- @html_attributes.merge(id: html_id, style: style)
90
- end
91
73
  end
92
74
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scarpe::Webview
4
+ class Progress < Drawable
5
+ def initialize(properties)
6
+ super
7
+ end
8
+
9
+ # For now do *not* catch properties_changed and do a small update.
10
+ # Tiranti updates some additional fields (e.g. aria-valuenow) that
11
+ # Calzini does not. We'll want Calzini and Tiranti to handle the
12
+ # updates more for themselves. See issue #419 for updates on how
13
+ # we'll handle this. But for right now we re-render the whole
14
+ # drawable every time we change the progress fraction.
15
+ def element
16
+ render("progress")
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewRadio < Scarpe::WebviewWidget
3
+ module Scarpe::Webview
4
+ class Radio < Drawable
5
+ # TODO: is this needed?
5
6
  attr_reader :text
6
7
 
7
8
  def initialize(properties)
@@ -20,15 +21,13 @@ class Scarpe
20
21
  end
21
22
 
22
23
  def element
23
- HTML.render do |h|
24
- h.input(type: :radio, id: html_id, onclick: handler_js_code("click"), name: group_name, value: "hmm #{text}", checked: @checked, style: style)
25
- end
26
- end
24
+ props = shoes_styles
27
25
 
28
- private
29
-
30
- def group_name
31
- @group || @parent
26
+ # If a group isn't set, default to the linkable ID of the parent slot
27
+ unless @group
28
+ props["group"] = @parent ? @parent.shoes_linkable_id : "no_group"
29
+ end
30
+ render("radio", props)
32
31
  end
33
32
  end
34
33
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scarpe::Webview
4
+ class Rect < Drawable
5
+ def initialize(properties)
6
+ super(properties)
7
+ end
8
+
9
+ def element(&block)
10
+ render("rect", &block)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This may or may not stay. It's basically an example extension. It can be done
4
+ # better, and there's no reason it should be specific to button.
5
+ Shoes::Button.shoes_style :html_class, feature: :html
6
+
7
+ # We have a number of real Scarpe extensions that need to be properly marked as such
8
+ # and moved in here. Padding is a great example, as is html_attributes.
@@ -1,19 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- # Should inherit from Slot?
5
- class WebviewShape < Scarpe::WebviewWidget
6
- def initialize(properties)
7
- super(properties)
8
- end
9
-
3
+ module Scarpe::Webview
4
+ class Shape < Drawable
5
+ # Shape is the only (?) remaining drawable that doesn't use Calzini.
6
+ # It's also kind of broken - it doesn't do what a Shoes Shape is
7
+ # supposed to do yet. This can really use a rework at some point.
10
8
  def to_html
11
9
  @children ||= []
12
10
  child_markup = @children.map(&:to_html).join
13
11
 
14
12
  color = @draw_context["fill"] || "black"
15
13
  self_markup = HTML.render do |h|
16
- h.div(id: html_id, style: style) do
14
+ h.div(id: html_id, style: shape_style) do
17
15
  h.svg(width: "400", height: "500") do
18
16
  h.path(d: path_from_shape_commands, style: "fill:#{color};stroke-width:2;")
19
17
  end
@@ -27,7 +25,7 @@ class Scarpe
27
25
  def element(&block)
28
26
  color = @draw_context["fill"] || "black"
29
27
  HTML.render do |h|
30
- h.div(id: html_id, style: style) do
28
+ h.div(id: html_id, style: shape_style) do
31
29
  h.svg(width: "400", height: "500") do
32
30
  h.path(d: path_from_shape_commands, style: "fill:#{color};stroke-width:2;")
33
31
  end
@@ -51,7 +49,7 @@ class Scarpe
51
49
  x, y = *args
52
50
  current_path += "L #{x} #{y} "
53
51
  else
54
- raise "Unknown shape command! #{cmd.inspect}"
52
+ raise Scarpe::UnknownShapeCommandError, "Unknown shape command! #{cmd.inspect}"
55
53
  end
56
54
  end
57
55
 
@@ -60,11 +58,13 @@ class Scarpe
60
58
 
61
59
  protected
62
60
 
63
- def style
64
- super.merge({
61
+ def shape_style
62
+ s = {
65
63
  width: "400",
66
64
  height: "900",
67
- })
65
+ }
66
+ s[:display] = "none" if @hidden
67
+ s
68
68
  end
69
69
  end
70
70
  end
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewSlot < Scarpe::WebviewWidget
5
- include Scarpe::WebviewBackground
6
- include Scarpe::WebviewBorder
7
- include Scarpe::WebviewSpacing
8
-
3
+ module Scarpe::Webview
4
+ class Slot < Drawable
9
5
  def initialize(properties)
10
6
  @event_callbacks = {}
11
7
 
@@ -13,16 +9,16 @@ class Scarpe
13
9
  end
14
10
 
15
11
  def element(&block)
16
- HTML.render do |h|
17
- h.div(attributes.merge(id: html_id, style: style), &block)
18
- end
12
+ props = shoes_styles.merge("html_attributes" => html_attributes)
13
+ render_name = self.class.name.split("::")[-1].downcase # usually "stack" or "flow" or "documentroot"
14
+ render(render_name, props, &block)
19
15
  end
20
16
 
21
17
  def set_event_callback(obj, event_name, js_code)
22
18
  event_name = event_name.to_s
23
19
  @event_callbacks[event_name] ||= {}
24
20
  if @event_callbacks[event_name][obj]
25
- raise "Can't have two callbacks on the same event, from the same object, on the same parent!"
21
+ raise Scarpe::DuplicateCallbackError, "Can't have two callbacks on the same event, from the same object, on the same parent!"
26
22
  end
27
23
 
28
24
  @event_callbacks[event_name][obj] = js_code
@@ -54,7 +50,8 @@ class Scarpe
54
50
  html_element.set_attribute(event_name, @event_callbacks[event_name].values.join(";"))
55
51
  end
56
52
 
57
- def attributes
53
+ # These get added for event handlers and passed to Calzini
54
+ def html_attributes
58
55
  attr = {}
59
56
 
60
57
  @event_callbacks.each do |event_name, handlers|
@@ -63,19 +60,5 @@ class Scarpe
63
60
 
64
61
  attr
65
62
  end
66
-
67
- def style
68
- styles = super
69
-
70
- styles[:"margin-top"] = @margin_top if @margin_top
71
- styles[:"margin-bottom"] = @margin_bottom if @margin_bottom
72
- styles[:"margin-left"] = @margin_left if @margin_left
73
- styles[:"margin-right"] = @margin_right if @margin_right
74
-
75
- styles[:width] = Dimensions.length(@width) if @width
76
- styles[:height] = Dimensions.length(@height) if @height
77
-
78
- styles
79
- end
80
63
  end
81
64
  end
@@ -1,22 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewStack < Scarpe::WebviewSlot
5
- def get_style
6
- style
7
- end
8
-
9
- protected
10
-
11
- def style
12
- {
13
- display: "flex",
14
- "flex-direction": "column",
15
- "align-content": "flex-start",
16
- "justify-content": "flex-start",
17
- "align-items": "flex-start",
18
- overflow: @scroll ? "auto" : nil,
19
- }.compact.merge(super)
20
- end
3
+ module Scarpe::Webview
4
+ class Stack < Slot
21
5
  end
22
6
  end
@@ -1,63 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class WebviewStar < Scarpe::WebviewWidget
3
+ module Scarpe::Webview
4
+ class Star < Drawable
5
5
  def initialize(properties)
6
6
  super(properties)
7
7
  end
8
8
 
9
9
  def element(&block)
10
- fill = @draw_context["fill"]
11
- stroke = @draw_context["stroke"]
12
- fill = "black" if fill == ""
13
- stroke = "black" if stroke == ""
14
- HTML.render do |h|
15
- h.div(id: html_id, style: style) do
16
- h.svg(width: @outer, height: @outer, style: "fill:#{fill};") do
17
- h.polygon(points: star_points, style: "stroke:#{stroke};stroke-width:2")
18
- end
19
- block.call(h) if block_given?
20
- end
21
- end
22
- end
23
-
24
- protected
25
-
26
- def style
27
- super.merge({
28
- width: Dimensions.length(@width),
29
- height: Dimensions.length(@height),
30
- })
31
- end
32
-
33
- private
34
-
35
- def star_points
36
- get_star_points.join(",")
37
- end
38
-
39
- def get_star_points
40
- angle = 2 * Math::PI / @points
41
- coordinates = []
42
-
43
- @points.times do |i|
44
- outer_angle = i * angle
45
- inner_angle = outer_angle + angle / 2
46
-
47
- coordinates.concat(get_coordinates(outer_angle, inner_angle))
48
- end
49
-
50
- coordinates
51
- end
52
-
53
- def get_coordinates(outer_angle, inner_angle)
54
- outer_x = @outer / 2 + Math.cos(outer_angle) * @outer / 2
55
- outer_y = @outer / 2 + Math.sin(outer_angle) * @outer / 2
56
-
57
- inner_x = @outer / 2 + Math.cos(inner_angle) * @inner / 2
58
- inner_y = @outer / 2 + Math.sin(inner_angle) * @inner / 2
59
-
60
- [outer_x, outer_y, inner_x, inner_y]
10
+ render("star", &block)
61
11
  end
62
12
  end
63
13
  end