j1-template 2022.5.0.rc1 → 2022.5.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/banner.html +24 -1
  3. data/assets/themes/j1/adapter/js/masterslider.js +22 -5
  4. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +56 -0
  5. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  6. data/lib/j1/version.rb +1 -1
  7. data/lib/starter_web/Gemfile +270 -270
  8. data/lib/starter_web/_config.yml +19 -9
  9. data/lib/starter_web/_data/blocks/banner.yml +17 -0
  10. data/lib/starter_web/_data/modules/defaults/masterslider.yml +1 -1
  11. data/lib/starter_web/_data/modules/justifiedGallery.yml +82 -0
  12. data/lib/starter_web/_data/modules/masterslider.yml +5 -9
  13. data/lib/starter_web/_data/modules/navigator_menu.yml +208 -168
  14. data/lib/starter_web/_includes/attributes.asciidoc +18 -14
  15. data/lib/starter_web/_includes/tables/template_variables.asciidoc +1 -1
  16. data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +4 -4
  17. data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
  18. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
  19. data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
  20. data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
  21. data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
  22. data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
  23. data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
  24. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
  25. data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
  26. data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
  27. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
  28. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
  29. data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
  30. data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
  31. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
  32. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
  33. data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
  34. data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
  35. data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
  36. data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
  37. data/lib/starter_web/assets/images/sticker/600x600/sticker-new-version.png +0 -0
  38. data/lib/starter_web/assets/images/sticker/scalable/readme +0 -0
  39. data/lib/starter_web/package.json +6 -6
  40. data/lib/starter_web/pages/public/_jupyter/docs/_includes/attributes.asciidoc +67 -0
  41. data/lib/starter_web/pages/public/_jupyter/docs/_includes/documents/j1_docs_example_static.asciidoc +232 -0
  42. data/lib/starter_web/pages/public/_jupyter/docs/binderhub.adoc +631 -0
  43. data/lib/starter_web/pages/public/_jupyter/docs/j1-nbinteract.adoc +638 -0
  44. data/lib/starter_web/pages/public/_jupyter/docs/jupyterhub.adoc +248 -0
  45. data/lib/starter_web/pages/public/_jupyter/docs/nbinteract-widget-manual.adoc +928 -0
  46. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-circular-times-table.adoc +139 -0
  47. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-common-used-widgets.adoc +229 -0
  48. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-odes-in-python.adoc +112 -0
  49. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-altair/j1-altair-visualisations.adoc +142 -0
  50. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bokeh-visualisations.adoc +171 -0
  51. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bqplot-eamples.adoc +111 -0
  52. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-plotly/j1-plotly-visualisations.adoc +94 -0
  53. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1_climate-change-forecast.adoc +106 -0
  54. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16260 -0
  55. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_bgplot_line_plot-checkpoint.ipynb +247 -0
  56. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-Copy1-checkpoint.ipynb +12382 -0
  57. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
  58. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-short-checkpoint.ipynb +12170 -0
  59. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_climate_change_forecast-checkpoint.ipynb +1058 -0
  60. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_docs_example_dynamic-checkpoint.ipynb +14478 -0
  61. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-Copy1-checkpoint.ipynb +379 -0
  62. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-checkpoint.ipynb +442 -0
  63. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets-checkpoint.ipynb +523 -0
  64. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.line_charts-checkpoint.ipynb +84 -0
  65. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.questions-checkpoint.ipynb +194 -0
  66. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_chart-checkpoint.ipynb +89 -0
  67. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-Copy1-checkpoint.ipynb +164 -0
  68. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-checkpoint.ipynb +173 -0
  69. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts.1-checkpoint.ipynb +256 -0
  70. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_barcharts-checkpoint.ipynb +126 -0
  71. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_hist_chart-checkpoint.ipynb +87 -0
  72. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_chart-checkpoint.ipynb +90 -0
  73. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_charts-checkpoint.ipynb +87 -0
  74. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_multiple_choice-checkpoint.ipynb +64 -0
  75. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_short_answer-checkpoint.ipynb +122 -0
  76. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_questions-checkpoint.ipynb +181 -0
  77. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_chart-checkpoint.ipynb +89 -0
  78. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_charts-checkpoint.ipynb +175 -0
  79. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_drag_chart-checkpoint.ipynb +87 -0
  80. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_ode_selected-checkpoint.ipynb +14478 -0
  81. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +15227 -0
  82. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
  83. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_circular_times_table.ipynb +12382 -0
  84. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +1058 -0
  85. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +14478 -0
  86. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_interactive_widgets.ipynb +442 -0
  87. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets.ipynb +523 -0
  88. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +89 -0
  89. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +87 -0
  90. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +90 -0
  91. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +64 -0
  92. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +122 -0
  93. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +89 -0
  94. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +87 -0
  95. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_odes_in_python.ipynb +15227 -0
  96. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/line_by_line.mp4 +0 -0
  97. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/point_by_point.mp4 +0 -0
  98. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16296 -0
  99. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_non_interactive-checkpoint.ipynb +15385 -0
  100. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_interactive.ipynb +16296 -0
  101. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_non_interactive.ipynb +15385 -0
  102. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/00 - Introduction and Setup-checkpoint.ipynb +717 -0
  103. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/01 - Basic Plotting-checkpoint.ipynb +1381 -0
  104. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/02 - Styling and Theming-checkpoint.ipynb +1440 -0
  105. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/03 - Data Sources and Transformations-checkpoint.ipynb +927 -0
  106. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/04 - Adding Annotations-checkpoint.ipynb +1105 -0
  107. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/05 - Presentation Layouts-checkpoint.ipynb +578 -0
  108. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/06 - Linking and Interactions-checkpoint.ipynb +1196 -0
  109. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/07 - Bar and Categorical Data Plots-checkpoint.ipynb +1681 -0
  110. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/08 - Graph and Network Plots-checkpoint.ipynb +680 -0
  111. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/09 - Geographic Plots-checkpoint.ipynb +693 -0
  112. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/10 - Exporting and Embedding-checkpoint.ipynb +751 -0
  113. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/11 - Running Bokeh Applications-checkpoint.ipynb +770 -0
  114. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/bokeh_tut_00_introduction_and_setup-checkpoint.ipynb +666 -0
  115. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_01_basic_plotting-checkpoint.ipynb +1365 -0
  116. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_02_styling_and_theming-checkpoint.ipynb +1405 -0
  117. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_03_data_sources_and_transformations-checkpoint.ipynb +856 -0
  118. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_04_adding_annotations-checkpoint.ipynb +1167 -0
  119. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_05_presentation_layouts-checkpoint.ipynb +601 -0
  120. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_06_linking_and_interactions-checkpoint.ipynb +1356 -0
  121. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_07_bar_and_categorical_data_plots-checkpoint.ipynb +1742 -0
  122. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_08_graph_and_network_plots-checkpoint.ipynb +625 -0
  123. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_09_geographic_plots-checkpoint.ipynb +685 -0
  124. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.ipynb +726 -0
  125. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.org +726 -0
  126. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding.new-checkpoint.ipynb +560 -0
  127. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_11_running_bokeh_applications-checkpoint.ipynb +716 -0
  128. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_01_basic_plotting.ipynb +1365 -0
  129. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_02_styling_and_theming.ipynb +1405 -0
  130. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_03_data_sources_and_transformations.ipynb +856 -0
  131. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_04_adding_annotations.ipynb +1167 -0
  132. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_05_presentation_layouts.ipynb +601 -0
  133. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_06_linking_and_interactions.ipynb +1356 -0
  134. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_07_bar_and_categorical_data_plots.ipynb +1742 -0
  135. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_08_graph_and_network_plots.ipynb +625 -0
  136. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_09_geographic_plots.ipynb +685 -0
  137. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/.ipynb_checkpoints/j1_mathplot_vs_bqplot-checkpoint.ipynb +336 -0
  138. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/advanced/Feature_Vector_Distribution-Iris-Digits.ipynb +433 -0
  139. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_bgplot_line_plot.ipynb +244 -0
  140. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_circular_times_table-short.ipynb +12170 -0
  141. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_mathplot_vs_bqplot.ipynb +336 -0
  142. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Index-checkpoint.ipynb +163 -0
  143. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Tutorials-checkpoint.ipynb +51 -0
  144. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Advanced Plotting.ipynb +289 -0
  145. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Animations.ipynb +266 -0
  146. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Axis Properties.ipynb +396 -0
  147. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Plotting Dates.ipynb +318 -0
  148. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/Time Series.ipynb +158 -0
  149. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/spx_prices.csv +6799 -0
  150. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +470 -0
  151. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Index.ipynb +49 -0
  152. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Logs Analytics/Logs Dashboard.ipynb +378 -0
  153. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Mobile Patent Suits.ipynb +123 -0
  154. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Neural Network.ipynb +177 -0
  155. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Outlier Detection.ipynb +311 -0
  156. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Bubble Chart.ipynb +255 -0
  157. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Choropleth.ipynb +275 -0
  158. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/nations.json +1 -0
  159. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/world_map_codes.csv +234 -0
  160. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Basic Plotting-checkpoint.ipynb +186 -0
  161. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Pyplot-checkpoint.ipynb +794 -0
  162. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Untitled-checkpoint.ipynb +323 -0
  163. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Basic Plotting.ipynb +261 -0
  164. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Pyplot.ipynb +1489 -0
  165. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Index.ipynb +163 -0
  166. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Interaction Layer.ipynb +966 -0
  167. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Mark Interactions.ipynb +476 -0
  168. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Selectors.ipynb +427 -0
  169. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Introduction.ipynb +528 -0
  170. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bars.ipynb +480 -0
  171. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bins.ipynb +217 -0
  172. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Boxplot.ipynb +253 -0
  173. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Candles.ipynb +225 -0
  174. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/FlexLine.ipynb +123 -0
  175. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Graph.ipynb +357 -0
  176. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/GridHeatMap.ipynb +422 -0
  177. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/HeatMap.ipynb +157 -0
  178. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Hist.ipynb +176 -0
  179. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Image.ipynb +195 -0
  180. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Label.ipynb +189 -0
  181. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Lines.ipynb +565 -0
  182. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Map.ipynb +182 -0
  183. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Market Map.ipynb +315 -0
  184. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Pie.ipynb +465 -0
  185. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Scatter.ipynb +835 -0
  186. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bars.ipynb +362 -0
  187. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bins.ipynb +252 -0
  188. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Boxplot.ipynb +273 -0
  189. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Candles.ipynb +242 -0
  190. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/GridHeatMap.ipynb +417 -0
  191. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/HeatMap.ipynb +155 -0
  192. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Hist.ipynb +238 -0
  193. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Image.ipynb +152 -0
  194. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Label.ipynb +206 -0
  195. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Lines.ipynb +474 -0
  196. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Map.ipynb +181 -0
  197. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Pie.ipynb +310 -0
  198. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Scatter.ipynb +702 -0
  199. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Scales/Color Scales.ipynb +495 -0
  200. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Feature_Vector_Distribution-Iris-Digits-checkpoint.ipynb +433 -0
  201. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Linking Plots With Widgets-checkpoint.ipynb +326 -0
  202. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-Copy1-checkpoint.ipynb +177 -0
  203. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-checkpoint.ipynb +177 -0
  204. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Brush Interval Selector.ipynb +154 -0
  205. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Fast Interval Selector.ipynb +152 -0
  206. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density Widget.ipynb +128 -0
  207. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density.ipynb +113 -0
  208. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Linking Plots With Widgets.ipynb +326 -0
  209. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Object Model.ipynb +179 -0
  210. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Pyplot.ipynb +174 -0
  211. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Updating Plots.ipynb +177 -0
  212. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials.ipynb +51 -0
  213. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/country_codes.csv +213 -0
  214. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/gdp_per_capita.csv +56 -0
  215. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/state_codes.csv +52 -0
  216. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/trees.jpg +0 -0
  217. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_central_limit_theorem-checkpoint.ipynb +247 -0
  218. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_variability_of_the_sample_mean-checkpoint.ipynb +323 -0
  219. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_graphing-checkpoint.ipynb +387 -0
  220. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_interactive_questions-checkpoint.ipynb +185 -0
  221. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_layout-checkpoint.ipynb +384 -0
  222. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_interact-checkpoint.ipynb +254 -0
  223. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_monty_hall-checkpoint.ipynb +732 -0
  224. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_central_limit_theorem.ipynb +247 -0
  225. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_correlation.ipynb +651 -0
  226. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_empirical_distributions.ipynb +773 -0
  227. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_linear_regression.ipynb +111 -0
  228. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_probability_distribution_plots.ipynb +199 -0
  229. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_sampling_from_a_population.ipynb +421 -0
  230. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_variability_of_the_sample_mean.ipynb +323 -0
  231. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_graphing.ipynb +387 -0
  232. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_interactive_questions.ipynb +185 -0
  233. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_layout.ipynb +384 -0
  234. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_interact.ipynb +254 -0
  235. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_monty_hall.ipynb +732 -0
  236. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Advanced Plotting.html +373 -0
  237. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Animations.html +361 -0
  238. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Axis Properties.html +569 -0
  239. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bars.html +487 -0
  240. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Basic Plotting.html +341 -0
  241. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bins.html +259 -0
  242. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Boxplot.html +277 -0
  243. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Brush Interval Selector.html +182 -0
  244. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bubble Chart.html +299 -0
  245. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Candles.html +252 -0
  246. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Choropleth.html +318 -0
  247. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Color Scales.html +514 -0
  248. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Fast Interval Selector.html +182 -0
  249. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Feature_Vector_Distribution-Iris-Digits.html +479 -0
  250. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/FlexLine.html +128 -0
  251. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density Widget.html +152 -0
  252. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density.html +137 -0
  253. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Graph.html +484 -0
  254. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/GridHeatMap.html +483 -0
  255. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/HeatMap.html +170 -0
  256. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Hist.html +349 -0
  257. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Image.html +177 -0
  258. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Index.html +29 -0
  259. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Interaction Layer.html +1372 -0
  260. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Introduction.html +749 -0
  261. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Label.html +268 -0
  262. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Lines.html +704 -0
  263. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Linking Plots With Widgets.html +389 -0
  264. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Logs Dashboard.html +455 -0
  265. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Map.html +229 -0
  266. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mark Interactions.html +613 -0
  267. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Market Map.html +413 -0
  268. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mobile Patent Suits.html +131 -0
  269. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Neural Network.html +190 -0
  270. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Object Model.html +193 -0
  271. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Outlier Detection.html +363 -0
  272. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pie.html +367 -0
  273. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Plotting Dates.html +337 -0
  274. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pyplot.html +196 -0
  275. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Scatter.html +948 -0
  276. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Selectors.html +489 -0
  277. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Time Series.html +173 -0
  278. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Tutorials.html +40 -0
  279. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Updating Plots.html +228 -0
  280. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_interactive.html +2216 -0
  281. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_non_interactive.html +1170 -0
  282. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bgplot_line_plot.html +318 -0
  283. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_01_basic_plotting.html +1479 -0
  284. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_02_styling_and_theming.html +1524 -0
  285. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_03_data_sources_and_transformations.html +983 -0
  286. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_04_adding_annotations.html +1280 -0
  287. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_05_presentation_layouts.html +660 -0
  288. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_06_linking_and_interactions.html +1563 -0
  289. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_07_bar_and_categorical_data_plots.html +1888 -0
  290. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_08_graph_and_network_plots.html +689 -0
  291. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_09_geographic_plots.html +767 -0
  292. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table-short.html +475 -0
  293. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -0
  294. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -0
  295. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -0
  296. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -0
  297. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_mathplot_vs_bqplot.html +407 -0
  298. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -0
  299. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -0
  300. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -0
  301. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -0
  302. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -0
  303. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -0
  304. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -0
  305. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -0
  306. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -0
  307. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_central_limit_theorem.html +290 -0
  308. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_correlation.html +818 -0
  309. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_empirical_distributions.html +351 -0
  310. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_linear_regression.html +106 -0
  311. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_probability_distribution_plots.html +228 -0
  312. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_sampling_from_a_population.html +518 -0
  313. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_variability_of_the_sample_mean.html +372 -0
  314. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_graphing.html +473 -0
  315. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_interactive_questions.html +242 -0
  316. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_layout.html +496 -0
  317. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_interact.html +329 -0
  318. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_monty_hall.html +866 -0
  319. data/lib/starter_web/pages/public/_jupyter/where_to_go.adoc +270 -0
  320. data/lib/starter_web/pages/public/features/general.adoc +74 -33
  321. data/lib/starter_web/pages/public/features/template.adoc +159 -68
  322. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
  323. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
  324. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -95
  325. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
  326. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -96
  327. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
  328. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
  329. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -95
  330. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -93
  331. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
  332. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_images.adoc +313 -0
  333. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_videos.adoc +281 -0
  334. data/lib/starter_web/pages/public/learn/_roundtrip/200_typography.adoc +253 -0
  335. data/lib/starter_web/pages/public/learn/_roundtrip/300_icon_fonts.adoc +579 -0
  336. data/lib/starter_web/pages/public/learn/_roundtrip/400_asciidoc_extensions.adoc +718 -0
  337. data/lib/starter_web/pages/public/learn/_roundtrip/410_bs_modals_extentions.adoc +91 -0
  338. data/lib/starter_web/pages/public/learn/_roundtrip/420_responsive_tables_extensions.adoc +420 -0
  339. data/lib/starter_web/pages/public/learn/_roundtrip/500_themes.adoc +250 -0
  340. data/lib/starter_web/pages/public/learn/_roundtrip/600_quicksearch.adoc +425 -0
  341. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/attributes.asciidoc +118 -0
  342. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/100_gistblock.asciidoc +28 -0
  343. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_info.asciidoc +14 -0
  344. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
  345. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
  346. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_central_success.asciidoc +11 -0
  347. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_left_info.asciidoc +11 -0
  348. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_right_success.asciidoc +11 -0
  349. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
  350. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_info.asciidoc +11 -0
  351. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_left_info.asciidoc +11 -0
  352. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_right_success.asciidoc +11 -0
  353. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
  354. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
  355. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/google-ad.js +130 -0
  356. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +6 -5
  357. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -2
  358. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +4 -2
  359. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
  360. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
  361. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  362. data/lib/starter_web/utilsrv/package.json +1 -1
  363. metadata +384 -17
  364. data/lib/starter_web/_includes/_attributes.asciidoc +0 -575
  365. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1080x800.jpg +0 -0
  366. data/lib/starter_web/assets/images/pages/features/comments-1080x600.jpg +0 -0
  367. data/lib/starter_web/assets/images/pages/features/cookie-consent-1080x800.jpg +0 -0
  368. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1080x800.jpg +0 -0
  369. data/lib/starter_web/assets/images/pages/features/fab-1080x500.jpg +0 -0
  370. data/lib/starter_web/assets/images/pages/features/full-text-search-1080x800.jpg +0 -0
  371. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  372. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  373. data/lib/starter_web/assets/images/pages/features/intro-panel-1080x800.jpg +0 -0
  374. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  375. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  376. data/lib/starter_web/assets/images/pages/features/nav-module-1080x300.jpg +0 -0
  377. data/lib/starter_web/assets/images/pages/features/teaser-banner-1080x600.jpg +0 -0
  378. data/lib/starter_web/assets/images/pages/features/translator-1080x800.jpg +0 -0
@@ -0,0 +1,716 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "## 11. Running Bokeh Applications\n",
8
+ "\n",
9
+ "The architecture of Bokeh is such that high-level “model objects” (representing things like plots, ranges, axes, glyphs, etc.) are created in Python, and then converted to a JSON format that is consumed by the client library, BokehJS. Using the Bokeh Server, it is possible to keep the “model objects” in python and in the browser in sync with one another, creating powerful capabilities:\n",
10
+ "\n",
11
+ "* respond to UI and tool events generated in a browser with computations or queries using the full power of python\n",
12
+ "* automatically push updates the UI (i.e. widgets or plots), in a browser\n",
13
+ "* use periodic, timeout, and asychronous callbacks drive streaming updates\n",
14
+ "\n",
15
+ "***This capability to synchronize between python and the browser is the main purpose of the Bokeh Server.***"
16
+ ]
17
+ },
18
+ {
19
+ "cell_type": "code",
20
+ "execution_count": 1,
21
+ "metadata": {},
22
+ "outputs": [],
23
+ "source": [
24
+ "from bokeh.io import output_notebook, show\n",
25
+ "from bokeh.plotting import figure"
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "code",
30
+ "execution_count": 2,
31
+ "metadata": {},
32
+ "outputs": [
33
+ {
34
+ "data": {
35
+ "text/html": [
36
+ "<div class=\"bk-root\">\n",
37
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
38
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
39
+ " </div>\n"
40
+ ]
41
+ },
42
+ "metadata": {},
43
+ "output_type": "display_data"
44
+ },
45
+ {
46
+ "data": {
47
+ "application/javascript": [
48
+ "(function(root) {\n",
49
+ " function now() {\n",
50
+ " return new Date();\n",
51
+ " }\n",
52
+ "\n",
53
+ " const force = true;\n",
54
+ "\n",
55
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
56
+ " root._bokeh_onload_callbacks = [];\n",
57
+ " root._bokeh_is_loading = undefined;\n",
58
+ " }\n",
59
+ "\n",
60
+ "const JS_MIME_TYPE = 'application/javascript';\n",
61
+ " const HTML_MIME_TYPE = 'text/html';\n",
62
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
63
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
64
+ "\n",
65
+ " /**\n",
66
+ " * Render data to the DOM node\n",
67
+ " */\n",
68
+ " function render(props, node) {\n",
69
+ " const script = document.createElement(\"script\");\n",
70
+ " node.appendChild(script);\n",
71
+ " }\n",
72
+ "\n",
73
+ " /**\n",
74
+ " * Handle when an output is cleared or removed\n",
75
+ " */\n",
76
+ " function handleClearOutput(event, handle) {\n",
77
+ " const cell = handle.cell;\n",
78
+ "\n",
79
+ " const id = cell.output_area._bokeh_element_id;\n",
80
+ " const server_id = cell.output_area._bokeh_server_id;\n",
81
+ " // Clean up Bokeh references\n",
82
+ " if (id != null && id in Bokeh.index) {\n",
83
+ " Bokeh.index[id].model.document.clear();\n",
84
+ " delete Bokeh.index[id];\n",
85
+ " }\n",
86
+ "\n",
87
+ " if (server_id !== undefined) {\n",
88
+ " // Clean up Bokeh references\n",
89
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
90
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
91
+ " iopub: {\n",
92
+ " output: function(msg) {\n",
93
+ " const id = msg.content.text.trim();\n",
94
+ " if (id in Bokeh.index) {\n",
95
+ " Bokeh.index[id].model.document.clear();\n",
96
+ " delete Bokeh.index[id];\n",
97
+ " }\n",
98
+ " }\n",
99
+ " }\n",
100
+ " });\n",
101
+ " // Destroy server and session\n",
102
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
103
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
104
+ " }\n",
105
+ " }\n",
106
+ "\n",
107
+ " /**\n",
108
+ " * Handle when a new output is added\n",
109
+ " */\n",
110
+ " function handleAddOutput(event, handle) {\n",
111
+ " const output_area = handle.output_area;\n",
112
+ " const output = handle.output;\n",
113
+ "\n",
114
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
115
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
116
+ " return\n",
117
+ " }\n",
118
+ "\n",
119
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
120
+ "\n",
121
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
122
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
123
+ " // store reference to embed id on output_area\n",
124
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
125
+ " }\n",
126
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
127
+ " const bk_div = document.createElement(\"div\");\n",
128
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
129
+ " const script_attrs = bk_div.children[0].attributes;\n",
130
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
131
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
132
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
133
+ " }\n",
134
+ " // store reference to server id on output_area\n",
135
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
136
+ " }\n",
137
+ " }\n",
138
+ "\n",
139
+ " function register_renderer(events, OutputArea) {\n",
140
+ "\n",
141
+ " function append_mime(data, metadata, element) {\n",
142
+ " // create a DOM node to render to\n",
143
+ " const toinsert = this.create_output_subarea(\n",
144
+ " metadata,\n",
145
+ " CLASS_NAME,\n",
146
+ " EXEC_MIME_TYPE\n",
147
+ " );\n",
148
+ " this.keyboard_manager.register_events(toinsert);\n",
149
+ " // Render to node\n",
150
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
151
+ " render(props, toinsert[toinsert.length - 1]);\n",
152
+ " element.append(toinsert);\n",
153
+ " return toinsert\n",
154
+ " }\n",
155
+ "\n",
156
+ " /* Handle when an output is cleared or removed */\n",
157
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
158
+ " events.on('delete.Cell', handleClearOutput);\n",
159
+ "\n",
160
+ " /* Handle when a new output is added */\n",
161
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
162
+ "\n",
163
+ " /**\n",
164
+ " * Register the mime type and append_mime function with output_area\n",
165
+ " */\n",
166
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
167
+ " /* Is output safe? */\n",
168
+ " safe: true,\n",
169
+ " /* Index of renderer in `output_area.display_order` */\n",
170
+ " index: 0\n",
171
+ " });\n",
172
+ " }\n",
173
+ "\n",
174
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
175
+ " if (root.Jupyter !== undefined) {\n",
176
+ " const events = require('base/js/events');\n",
177
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
178
+ "\n",
179
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
180
+ " register_renderer(events, OutputArea);\n",
181
+ " }\n",
182
+ " }\n",
183
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
184
+ " root._bokeh_timeout = Date.now() + 5000;\n",
185
+ " root._bokeh_failed_load = false;\n",
186
+ " }\n",
187
+ "\n",
188
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
189
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
190
+ " \"<p>\\n\"+\n",
191
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
192
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
193
+ " \"</p>\\n\"+\n",
194
+ " \"<ul>\\n\"+\n",
195
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
196
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
197
+ " \"</ul>\\n\"+\n",
198
+ " \"<code>\\n\"+\n",
199
+ " \"from bokeh.resources import INLINE\\n\"+\n",
200
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
201
+ " \"</code>\\n\"+\n",
202
+ " \"</div>\"}};\n",
203
+ "\n",
204
+ " function display_loaded() {\n",
205
+ " const el = document.getElementById(\"1002\");\n",
206
+ " if (el != null) {\n",
207
+ " el.textContent = \"BokehJS is loading...\";\n",
208
+ " }\n",
209
+ " if (root.Bokeh !== undefined) {\n",
210
+ " if (el != null) {\n",
211
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
212
+ " }\n",
213
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
214
+ " setTimeout(display_loaded, 100)\n",
215
+ " }\n",
216
+ " }\n",
217
+ "\n",
218
+ " function run_callbacks() {\n",
219
+ " try {\n",
220
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
221
+ " if (callback != null)\n",
222
+ " callback();\n",
223
+ " });\n",
224
+ " } finally {\n",
225
+ " delete root._bokeh_onload_callbacks\n",
226
+ " }\n",
227
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
228
+ " }\n",
229
+ "\n",
230
+ " function load_libs(css_urls, js_urls, callback) {\n",
231
+ " if (css_urls == null) css_urls = [];\n",
232
+ " if (js_urls == null) js_urls = [];\n",
233
+ "\n",
234
+ " root._bokeh_onload_callbacks.push(callback);\n",
235
+ " if (root._bokeh_is_loading > 0) {\n",
236
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
237
+ " return null;\n",
238
+ " }\n",
239
+ " if (js_urls == null || js_urls.length === 0) {\n",
240
+ " run_callbacks();\n",
241
+ " return null;\n",
242
+ " }\n",
243
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
244
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
245
+ "\n",
246
+ " function on_load() {\n",
247
+ " root._bokeh_is_loading--;\n",
248
+ " if (root._bokeh_is_loading === 0) {\n",
249
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
250
+ " run_callbacks()\n",
251
+ " }\n",
252
+ " }\n",
253
+ "\n",
254
+ " function on_error(url) {\n",
255
+ " console.error(\"failed to load \" + url);\n",
256
+ " }\n",
257
+ "\n",
258
+ " for (let i = 0; i < css_urls.length; i++) {\n",
259
+ " const url = css_urls[i];\n",
260
+ " const element = document.createElement(\"link\");\n",
261
+ " element.onload = on_load;\n",
262
+ " element.onerror = on_error.bind(null, url);\n",
263
+ " element.rel = \"stylesheet\";\n",
264
+ " element.type = \"text/css\";\n",
265
+ " element.href = url;\n",
266
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
267
+ " document.body.appendChild(element);\n",
268
+ " }\n",
269
+ "\n",
270
+ " for (let i = 0; i < js_urls.length; i++) {\n",
271
+ " const url = js_urls[i];\n",
272
+ " const element = document.createElement('script');\n",
273
+ " element.onload = on_load;\n",
274
+ " element.onerror = on_error.bind(null, url);\n",
275
+ " element.async = false;\n",
276
+ " element.src = url;\n",
277
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
278
+ " document.head.appendChild(element);\n",
279
+ " }\n",
280
+ " };\n",
281
+ "\n",
282
+ " function inject_raw_css(css) {\n",
283
+ " const element = document.createElement(\"style\");\n",
284
+ " element.appendChild(document.createTextNode(css));\n",
285
+ " document.body.appendChild(element);\n",
286
+ " }\n",
287
+ "\n",
288
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n",
289
+ " const css_urls = [];\n",
290
+ "\n",
291
+ " const inline_js = [ function(Bokeh) {\n",
292
+ " Bokeh.set_log_level(\"info\");\n",
293
+ " },\n",
294
+ "function(Bokeh) {\n",
295
+ " }\n",
296
+ " ];\n",
297
+ "\n",
298
+ " function run_inline_js() {\n",
299
+ " if (root.Bokeh !== undefined || force === true) {\n",
300
+ " for (let i = 0; i < inline_js.length; i++) {\n",
301
+ " inline_js[i].call(root, root.Bokeh);\n",
302
+ " }\n",
303
+ "if (force === true) {\n",
304
+ " display_loaded();\n",
305
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
306
+ " setTimeout(run_inline_js, 100);\n",
307
+ " } else if (!root._bokeh_failed_load) {\n",
308
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
309
+ " root._bokeh_failed_load = true;\n",
310
+ " } else if (force !== true) {\n",
311
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
312
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
313
+ " }\n",
314
+ " }\n",
315
+ "\n",
316
+ " if (root._bokeh_is_loading === 0) {\n",
317
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
318
+ " run_inline_js();\n",
319
+ " } else {\n",
320
+ " load_libs(css_urls, js_urls, function() {\n",
321
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
322
+ " run_inline_js();\n",
323
+ " });\n",
324
+ " }\n",
325
+ "}(window));"
326
+ ],
327
+ "application/vnd.bokehjs_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
328
+ },
329
+ "metadata": {},
330
+ "output_type": "display_data"
331
+ }
332
+ ],
333
+ "source": [
334
+ "#nbi:hide_out\n",
335
+ "# Make all outputs INLINE for default (why a hell this is needed !!!)\n",
336
+ "output_notebook()"
337
+ ]
338
+ },
339
+ {
340
+ "cell_type": "markdown",
341
+ "metadata": {},
342
+ "source": [
343
+ "### Bokeh Apps in Notebooks\n",
344
+ "\n",
345
+ "The easiest way to embed a Bokeh application in a notebook is to make a function `modify_doc(doc)` that creates Bokeh content, and adds it to the document. This function can be passed to `show`, and the app defined by the function will be displayed inline. A short complete example is below"
346
+ ]
347
+ },
348
+ {
349
+ "cell_type": "code",
350
+ "execution_count": 3,
351
+ "metadata": {},
352
+ "outputs": [
353
+ {
354
+ "data": {
355
+ "application/vnd.bokehjs_exec.v0+json": "",
356
+ "text/html": [
357
+ "<script id=\"1003\">\n",
358
+ " (function() {\n",
359
+ " const xhr = new XMLHttpRequest()\n",
360
+ " xhr.responseType = 'blob';\n",
361
+ " xhr.open('GET', \"http://localhost:56008/autoload.js?bokeh-autoload-element=1003&bokeh-absolute-url=http://localhost:56008&resources=none\", true);\n",
362
+ " xhr.onload = function (event) {\n",
363
+ " const script = document.createElement('script');\n",
364
+ " const src = URL.createObjectURL(event.target.response);\n",
365
+ " script.src = src;\n",
366
+ " document.body.appendChild(script);\n",
367
+ " };\n",
368
+ " xhr.send();\n",
369
+ " })();\n",
370
+ "</script>"
371
+ ]
372
+ },
373
+ "metadata": {
374
+ "application/vnd.bokehjs_exec.v0+json": {
375
+ "server_id": "8f7f3f1ad0674faa9ce5b21f2ffabfb3"
376
+ }
377
+ },
378
+ "output_type": "display_data"
379
+ }
380
+ ],
381
+ "source": [
382
+ "from bokeh.layouts import column\n",
383
+ "from bokeh.models import TextInput, Button, Paragraph\n",
384
+ "\n",
385
+ "def modify_doc(doc):\n",
386
+ " \n",
387
+ " # create some widgets\n",
388
+ " button = Button(label=\"Say HI\")\n",
389
+ " input = TextInput(value=\"Bokeh\")\n",
390
+ " output = Paragraph()\n",
391
+ "\n",
392
+ " # add a callback to a widget\n",
393
+ " def update():\n",
394
+ " output.text = \"Hello, \" + input.value\n",
395
+ " button.on_click(update)\n",
396
+ "\n",
397
+ " # create a layout for everything\n",
398
+ " layout = column(button, input, output)\n",
399
+ "\n",
400
+ " # add the layout to curdoc\n",
401
+ " doc.add_root(layout)\n",
402
+ " \n",
403
+ "# In the notebook, just pass the function that defines the app to show\n",
404
+ "# You may need to supply notebook_url, e.g notebook_url=\"http://localhost:8889\" \n",
405
+ "show(modify_doc) "
406
+ ]
407
+ },
408
+ {
409
+ "cell_type": "markdown",
410
+ "metadata": {},
411
+ "source": [
412
+ "### Bokeh Apps with `bokeh serve`\n",
413
+ "\n",
414
+ "It's also possible to define Bokeh applications by creating a standard Python script. In this case, there is no need to make a function like `modify_doc`. Typically, the script should simply create all the Bokeh content, then add it to the doc with a line like\n",
415
+ "```python\n",
416
+ "curdoc().add_root(layout)\n",
417
+ "```\n",
418
+ "\n",
419
+ "To try out the example below, copy the code into a file ``hello.py`` and then execute:\n",
420
+ "```bash\n",
421
+ "bokeh serve --show hello.py \n",
422
+ "```\n",
423
+ "\n",
424
+ "<center><div style=\"font-size: 14pt;color: firebrick;\"> NOTE: The exercise below require work outside the notebook <div></center>"
425
+ ]
426
+ },
427
+ {
428
+ "cell_type": "markdown",
429
+ "metadata": {},
430
+ "source": [
431
+ "```python\n",
432
+ "# hello.py \n",
433
+ "\n",
434
+ "from bokeh.io import curdoc\n",
435
+ "from bokeh.layouts import column\n",
436
+ "from bokeh.models.widgets import TextInput, Button, Paragraph\n",
437
+ "\n",
438
+ "# create some widgets\n",
439
+ "button = Button(label=\"Say HI\")\n",
440
+ "input = TextInput(value=\"Bokeh\")\n",
441
+ "output = Paragraph()\n",
442
+ "\n",
443
+ "# add a callback to a widget\n",
444
+ "def update():\n",
445
+ " output.text = \"Hello, \" + input.value\n",
446
+ "button.on_click(update)\n",
447
+ "\n",
448
+ "# create a layout for everything\n",
449
+ "layout = column(button, input, output)\n",
450
+ "\n",
451
+ "# add the layout to curdoc\n",
452
+ "curdoc().add_root(layout)\n",
453
+ "```"
454
+ ]
455
+ },
456
+ {
457
+ "cell_type": "markdown",
458
+ "metadata": {},
459
+ "source": [
460
+ "Copy this code to a script `hello.py` and run it with the Bokeh server."
461
+ ]
462
+ },
463
+ {
464
+ "cell_type": "markdown",
465
+ "metadata": {},
466
+ "source": [
467
+ "### Linking Plots and Widgets\n",
468
+ "\n",
469
+ "Lets take a look at a more involved example that links several widgets to a plot. "
470
+ ]
471
+ },
472
+ {
473
+ "cell_type": "code",
474
+ "execution_count": 4,
475
+ "metadata": {},
476
+ "outputs": [
477
+ {
478
+ "data": {
479
+ "application/vnd.bokehjs_exec.v0+json": "",
480
+ "text/html": [
481
+ "<script id=\"1004\">\n",
482
+ " (function() {\n",
483
+ " const xhr = new XMLHttpRequest()\n",
484
+ " xhr.responseType = 'blob';\n",
485
+ " xhr.open('GET', \"http://localhost:56010/autoload.js?bokeh-autoload-element=1004&bokeh-absolute-url=http://localhost:56010&resources=none\", true);\n",
486
+ " xhr.onload = function (event) {\n",
487
+ " const script = document.createElement('script');\n",
488
+ " const src = URL.createObjectURL(event.target.response);\n",
489
+ " script.src = src;\n",
490
+ " document.body.appendChild(script);\n",
491
+ " };\n",
492
+ " xhr.send();\n",
493
+ " })();\n",
494
+ "</script>"
495
+ ]
496
+ },
497
+ "metadata": {
498
+ "application/vnd.bokehjs_exec.v0+json": {
499
+ "server_id": "8c579b88e485486685bcf39f5a0b78a5"
500
+ }
501
+ },
502
+ "output_type": "display_data"
503
+ }
504
+ ],
505
+ "source": [
506
+ "from numpy.random import random\n",
507
+ "\n",
508
+ "from bokeh.layouts import column, row\n",
509
+ "from bokeh.plotting import figure\n",
510
+ "from bokeh.models import ColumnDataSource, Select, TextInput\n",
511
+ "\n",
512
+ "def get_data(N):\n",
513
+ " return dict(x=random(size=N), y=random(size=N), r=random(size=N) * 0.03)\n",
514
+ "\n",
515
+ "COLORS = [\"black\", \"firebrick\", \"navy\", \"olive\", \"goldenrod\"]\n",
516
+ "\n",
517
+ "def modify_doc(doc):\n",
518
+ " source = ColumnDataSource(data=get_data(200))\n",
519
+ "\n",
520
+ " p = figure(tools=\"\", toolbar_location=None)\n",
521
+ " r = p.circle(x='x', y='y', radius='r', source=source,\n",
522
+ " color=\"navy\", alpha=0.6, line_color=\"white\")\n",
523
+ "\n",
524
+ " \n",
525
+ " select = Select(title=\"Color\", value=\"navy\", options=COLORS)\n",
526
+ " input = TextInput(title=\"Number of points\", value=\"200\")\n",
527
+ "\n",
528
+ " def update_color(attrname, old, new):\n",
529
+ " r.glyph.fill_color = select.value\n",
530
+ " select.on_change('value', update_color)\n",
531
+ "\n",
532
+ " def update_points(attrname, old, new):\n",
533
+ " N = int(input.value)\n",
534
+ " source.data = get_data(N)\n",
535
+ " input.on_change('value', update_points)\n",
536
+ "\n",
537
+ " layout = column(row(select, input, width=400), row(p))\n",
538
+ "\n",
539
+ " doc.add_root(layout)\n",
540
+ "\n",
541
+ "show(modify_doc)"
542
+ ]
543
+ },
544
+ {
545
+ "cell_type": "markdown",
546
+ "metadata": {},
547
+ "source": [
548
+ "### Streaming Data\n",
549
+ "\n",
550
+ "It is possible to efficiently stream new data to column data sources by using the ``stream`` method. This method accepts two argmuments:\n",
551
+ "* ``new_data`` &mdash; a dictionary with the same structure as the column data source\n",
552
+ "* ``rollover`` &mdash; a maximum column length on the client (earlier data is dropped) *[optional]*\n",
553
+ "\n",
554
+ "If no ``rollover`` is specified, data is never dropped on the client and columns grow without bound.\n",
555
+ "\n",
556
+ "It is often useful to use periodic callbacks in conjuction with streaming data The ``add_periodic_callback`` method of ``curdoc()`` accepts a callback function, and a time interval (in ms) to repeatedly execute the callback. \n"
557
+ ]
558
+ },
559
+ {
560
+ "cell_type": "code",
561
+ "execution_count": 5,
562
+ "metadata": {},
563
+ "outputs": [
564
+ {
565
+ "data": {
566
+ "application/vnd.bokehjs_exec.v0+json": "",
567
+ "text/html": [
568
+ "<script id=\"1005\">\n",
569
+ " (function() {\n",
570
+ " const xhr = new XMLHttpRequest()\n",
571
+ " xhr.responseType = 'blob';\n",
572
+ " xhr.open('GET', \"http://localhost:56012/autoload.js?bokeh-autoload-element=1005&bokeh-absolute-url=http://localhost:56012&resources=none\", true);\n",
573
+ " xhr.onload = function (event) {\n",
574
+ " const script = document.createElement('script');\n",
575
+ " const src = URL.createObjectURL(event.target.response);\n",
576
+ " script.src = src;\n",
577
+ " document.body.appendChild(script);\n",
578
+ " };\n",
579
+ " xhr.send();\n",
580
+ " })();\n",
581
+ "</script>"
582
+ ]
583
+ },
584
+ "metadata": {
585
+ "application/vnd.bokehjs_exec.v0+json": {
586
+ "server_id": "fa8838fad38e47b483f03fd5cb005740"
587
+ }
588
+ },
589
+ "output_type": "display_data"
590
+ }
591
+ ],
592
+ "source": [
593
+ "from math import cos, sin\n",
594
+ "\n",
595
+ "from bokeh.models import ColumnDataSource\n",
596
+ "\n",
597
+ "def modify_doc(doc):\n",
598
+ " p = figure(match_aspect=True)\n",
599
+ " p.circle(x=0, y=0, radius=1, fill_color=None, line_width=2)\n",
600
+ " \n",
601
+ " # this is just to help the auto-datarange\n",
602
+ " p.rect(0, 0, 2, 2, alpha=0)\n",
603
+ "\n",
604
+ " # this is the data source we will stream to\n",
605
+ " source = ColumnDataSource(data=dict(x=[1], y=[0]))\n",
606
+ " p.circle(x='x', y='y', size=12, fill_color='white', source=source)\n",
607
+ "\n",
608
+ " def update():\n",
609
+ " x, y = source.data['x'][-1], source.data['y'][-1]\n",
610
+ "\n",
611
+ " # construct the new values for all columns, and pass to stream\n",
612
+ " new_data = dict(x=[x*cos(0.1) - y*sin(0.1)], y=[x*sin(0.1) + y*cos(0.1)])\n",
613
+ " source.stream(new_data, rollover=8)\n",
614
+ "\n",
615
+ " doc.add_periodic_callback(update, 150)\n",
616
+ " doc.add_root(p)\n",
617
+ " \n",
618
+ "show(modify_doc)"
619
+ ]
620
+ },
621
+ {
622
+ "cell_type": "markdown",
623
+ "metadata": {},
624
+ "source": [
625
+ "Bokeh column data sources also support a `patch` method that can be used to efficiently update subsets of data."
626
+ ]
627
+ },
628
+ {
629
+ "cell_type": "markdown",
630
+ "metadata": {},
631
+ "source": [
632
+ "### Directory Format Apps and Templates\n",
633
+ "\n",
634
+ "Bokeh apps can also be defined with a directory format. This format affords the use of extra modules, data files, templates, theme files, and other features. The directory should contain a `main.py` which is the \"entry point\" for the app, but may contain extra parts:\n",
635
+ "```\n",
636
+ "myapp\n",
637
+ " |\n",
638
+ " +---main.py\n",
639
+ " +---server_lifecycle.py\n",
640
+ " +---static\n",
641
+ " +---theme.yaml\n",
642
+ " +---templates\n",
643
+ " +---index.html\n",
644
+ "```\n",
645
+ "The [Directory Format](https://bokeh.pydata.org/en/latest/docs/user_guide/server.html#directory-format) section of the User's Guide has more information. \n",
646
+ "\n",
647
+ "See a complete sophisticated example at: https://github.com/bokeh/bokeh/tree/master/examples/app/dash\n",
648
+ "\n",
649
+ "<img src=\"https://static.bokeh.org/dash.png\">"
650
+ ]
651
+ },
652
+ {
653
+ "cell_type": "markdown",
654
+ "metadata": {},
655
+ "source": [
656
+ "## Tips and Tricks\n",
657
+ "\n",
658
+ " \n",
659
+ "* Real Python callbacks *require* a Bokeh server application. They cannot work with `output_file`, `components` or other functions that generate standalone output. Standalone content can only use `CustomJS` callbacks. \n",
660
+ "\n",
661
+ "\n",
662
+ "* Try to update data sources \"all at once\" whenever possible, i.e. prefer this:\n",
663
+ "\n",
664
+ " ```python\n",
665
+ " source.data = new_data_dict # GOOD\n",
666
+ " ```\n",
667
+ " \n",
668
+ " rather then updating individual columns sequentially:\n",
669
+ "\n",
670
+ " ```python\n",
671
+ " # LESS GOOD\n",
672
+ " source.data['foo'] = new_foo_column\n",
673
+ " source.data['bar'] = new_bar_column \n",
674
+ " ```\n",
675
+ " \n",
676
+ "If the new columns are exactly the same length as the old ones, then updating sequentially will trigger extra updates and may result in bad visual effects. If the new columns are a different length than the old ones, then updating \"all at once\" is **mandatory**.\n",
677
+ " \n",
678
+ "\n",
679
+ "* Each time a session is started, the Bokeh server runs the script (or `modify_doc`) function, and the code that is run ***must return completely new Bokeh objects every time***. It is not possible to share Bokeh objects between sessions. As a concrete example, this is what NOT to do:\n",
680
+ "\n",
681
+ " ```python\n",
682
+ " source = ColumnDataSource(data) # VERY BAD - global outside modify_doc\n",
683
+ " \n",
684
+ " def modify_doc(doc):\n",
685
+ " p = figure()\n",
686
+ " p.circle('x', 'y', source=source)\n",
687
+ " doc.add_root(p)\n",
688
+ " \n",
689
+ " ```\n",
690
+ " \n",
691
+ " The analogous situation would occur with a script if the script imports a global Bokeh object from a separate module (due to the way Python caches imports)."
692
+ ]
693
+ }
694
+ ],
695
+ "metadata": {
696
+ "kernelspec": {
697
+ "display_name": "Python 3",
698
+ "language": "python",
699
+ "name": "python3"
700
+ },
701
+ "language_info": {
702
+ "codemirror_mode": {
703
+ "name": "ipython",
704
+ "version": 3
705
+ },
706
+ "file_extension": ".py",
707
+ "mimetype": "text/x-python",
708
+ "name": "python",
709
+ "nbconvert_exporter": "python",
710
+ "pygments_lexer": "ipython3",
711
+ "version": "3.7.9"
712
+ }
713
+ },
714
+ "nbformat": 4,
715
+ "nbformat_minor": 4
716
+ }