j1-template 2022.3.0 → 2022.3.1

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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/cookieConsent.js +1 -1
  3. data/assets/themes/j1/adapter/js/nbinteract.js +174 -81
  4. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +1 -0
  5. data/lib/j1/version.rb +1 -1
  6. data/lib/starter_web/Gemfile +1 -1
  7. data/lib/starter_web/_config.yml +1 -1
  8. data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +4 -1
  9. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  10. data/lib/starter_web/package.json +1 -1
  11. data/lib/starter_web/pages/public/jupyter/docs/j1-nbinteract-doc.adoc +21 -6
  12. data/lib/starter_web/pages/public/jupyter/docs/nbi-widget-manual.adoc +6 -6
  13. data/lib/starter_web/pages/public/jupyter/docs/nbinteract-doc.adoc +11 -6
  14. data/lib/starter_web/pages/public/jupyter/examples/j1-circular-times-table.adoc +10 -11
  15. data/lib/starter_web/pages/public/jupyter/examples/j1-interactive-widgets.adoc +9 -5
  16. data/lib/starter_web/pages/public/jupyter/examples/j1-odes-in-python.adoc +10 -6
  17. data/lib/starter_web/pages/public/jupyter/examples/j1-testing-plotly.adoc +13 -4
  18. data/lib/starter_web/pages/public/jupyter/examples/j1_climate-change-forecast.adoc +4 -4
  19. data/lib/starter_web/pages/public/jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
  20. data/lib/starter_web/pages/public/jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +10 -10
  21. data/lib/starter_web/pages/public/jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
  22. data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_circular_times_table.ipynb +10 -13
  23. data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_odes_in_python.ipynb +15 -15
  24. data/lib/starter_web/pages/public/jupyter/notebooks/j1/line_by_line.mp4 +0 -0
  25. data/lib/starter_web/pages/public/jupyter/notebooks/j1/point_by_point.mp4 +0 -0
  26. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_circular_times_table.html +6 -9
  27. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +10 -10
  28. data/lib/starter_web/pages/public/jupyter/services/jupyterhub.adoc +6 -7
  29. data/lib/starter_web/pages/public/se/se-fake.adoc +47 -0
  30. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  31. data/lib/starter_web/utilsrv/package.json +1 -1
  32. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82f5e2dc4a146967bfdd30880b23b9dc68a10ab9066ef4f6422316b1a629ca81
4
- data.tar.gz: b7f527c39bd3af9dc47b85b6fa66b48e4d07b5256302443fe513c0e3617b008d
3
+ metadata.gz: 7e8a8bf49396d4fe36c0390c3d0e56028fc6836f7d796a0a848d4446a4925c0a
4
+ data.tar.gz: ff9e9fb6c8063c8f623a72a5ca396cbd0aba4e2bc7b6de639c53e4ad224c1830
5
5
  SHA512:
6
- metadata.gz: 0c91bffcd8335d97b5fd6c56bc5c258350d986200116e7f28ef5acb871b00049a454e47abf76c46a39c9fbc2de453a4748c21230c3e8b9a602df8f9f276c9a99
7
- data.tar.gz: fc26b6afd986fa6f804636f0e19959865bcbf81948800b93eaaefb8c48a6461600face260960109a81aeb1ff6e738838be2f217546caaa4db18048bc5ca7cbaf
6
+ metadata.gz: e662b6d65a3a15424e157bfb2acb767575dac5c31cb65b2ec3d4ba575ef534d40de491e981a523330765cc8f198157b03f02ce623b6fca6c47e4df12bfeb9194
7
+ data.tar.gz: 2872c3531e4f5adecb327af16d5cb7cac8e680b3cfb44b5f3d07121eb3d47a827e86c1ff2a8887391aaf9223744b0ea94cad5c46961a08a8747933fd5c356693
@@ -212,7 +212,7 @@ j1.adapter.cookieConsent = (function (j1, window) {
212
212
  cookieSecure: secure, // only sent to the server with an encrypted request over HTTPS
213
213
  cookieDomain: domainAttribute, // set domain (hostname|domain)
214
214
  dialogLanguage: moduleOptions.dialogLanguage, // language for the dialog (modal)
215
- whitelisted: moduleOptions.whitelisted, // pages NOt dialog is shown
215
+ whitelisted: moduleOptions.whitelisted, // pages NO cookie dialog is shown
216
216
  reloadPageOnChange: moduleOptions.reloadPageOnChange, // reload if setzings has changed
217
217
  dialogContainerID: moduleOptions.dialogContainerID, // container, the dialog modal is (dynamically) loaded
218
218
  xhrDataElement: moduleOptions.xhrDataElement, // container for all language-specific dialogs (modals)
@@ -83,6 +83,9 @@ j1.adapter.nbinteract = (function (j1, window) {
83
83
  var moduleOptions = {};
84
84
  var moduleSettings = {};
85
85
  var message = {};
86
+ var flags = {
87
+ checkURL: false
88
+ };
86
89
  var spinnerOpts = { // (default) options for a spinner
87
90
  lines: 13, // number of lines to draw
88
91
  length: 38, // length of each line
@@ -107,7 +110,8 @@ j1.adapter.nbinteract = (function (j1, window) {
107
110
  var nbiContentModalInfoID = 'nbiModalInfoBody'; // ID of the content (messages) for the INFO modal
108
111
  var nbiContentModalSuccessID = 'nbiModalSuccessBody'; // ID of the content (messages) for the SUCCESS modal
109
112
  var nbiContentModalErrorID = 'nbiModalErrorBody'; // ID of the content (messages) for the SUCCESS modal
110
- var nbiModalInfoID = '#' + 'nbiModalTopInfo'; // ID of the SUCCESS modal
113
+ var nbiModalTopInfo = '#' + 'nbiModalTopInfo'; // ID of the TopInfo modal
114
+ var nbiModalTRInfo = '#' + 'nbiModalTRInfo'; // ID of the TRInfo modal
111
115
  var nbiModalSuccessID = '#' + 'nbiModalTRSuccess'; // ID of the SUCCESS modal
112
116
  var nbiModalErrorID = '#' + 'nbiModalTLDanger'; // ID of the ERROR modal
113
117
  var nbinteract_prepared = false; // switch to indicate if ???
@@ -187,6 +191,7 @@ j1.adapter.nbinteract = (function (j1, window) {
187
191
  // run a spinner to indicate activity of 'nbInteract' if enabled
188
192
  // -------------------------------------------------------------------
189
193
  $(document).ready(function() {
194
+
190
195
  if (nbiIndicateNbiActivity && !spinnerStarted) {
191
196
  spinnerStarted = true;
192
197
  target = document.getElementById('content');
@@ -391,98 +396,124 @@ j1.adapter.nbinteract = (function (j1, window) {
391
396
  // controlled by nbinteract_prepared.
392
397
  // -------------------------------------------------------------------------
393
398
  interactNbiTextbooks: function (options) {
399
+ var state;
394
400
  var textbook = options;
395
401
 
396
402
  // initialize state flag
397
403
  _this.setState('started');
398
404
  logger.debug('\n' + 'state: ' + _this.getState());
399
405
 
406
+ // check if the Binder Service is available
407
+ //
408
+ _this.checkURL(options.baseUrl, flags);
409
+
400
410
  var log_text = '\n' + 'nbinteract is being initialized';
401
411
  logger.info(log_text);
402
412
 
403
- // var nbiButtonsFound = document.querySelectorAll('.js-nbinteract-widget')
404
-
405
- {% comment %} initialize nbinteract per textbook
406
- {% assign textbook_spec = item.textbook.spec %}
407
- {% assign textbook_baseUrl = item.textbook.baseUrl %}
408
- {% assign textbook_provider = item.textbook.provider %}
409
- -------------------------------------------------------------------------- {% endcomment %}
410
- {% for item in nbinteract_options.textbooks %} {% if item.textbook.enabled %}
411
- {% assign textbook_id = item.textbook.id %}
412
-
413
- if ($('#{{textbook_id}}').length) {
414
- var dependencies_met_nb_loaded = setInterval(function() {
415
- if ($('#{{textbook_id}}').attr('data-nb-textbook') == 'loaded') {
416
-
417
- var nbiButtonsFound = document.querySelectorAll('.js-nbinteract-widget').length
418
- if (nbiIndicateNbiActivity && nbiButtonsFound == 1) {
419
- var log_text = '\n' + 'non-nbi textbook found, skip NBI initialization for: {{textbook_id}}';
420
- logger.warn(log_text);
421
- spinner.stop();
422
- }
423
-
424
- if(!nbinteract_prepared && nbiButtonsFound > 1) {
425
- logText = '\n' + 'jupyter kernel is being generated ...';
426
- logger.info(logText);
413
+ var dependencies_met_binder_responsive = setInterval(function() {
414
+ state = _this.getState();
415
+ if (state == 'finished_checks') {
416
+ clearInterval(dependencies_met_binder_responsive);
417
+ if (flags.checkURL) {
418
+ {% comment %} initialize nbinteract per textbook
419
+ {% assign textbook_spec = item.textbook.spec %}
420
+ {% assign textbook_baseUrl = item.textbook.baseUrl %}
421
+ {% assign textbook_provider = item.textbook.provider %}
422
+ -------------------------------------------------------------------------- {% endcomment %}
423
+ {% for item in nbinteract_options.textbooks %} {% if item.textbook.enabled %}
424
+ {% assign textbook_id = item.textbook.id %}
425
+
426
+ if ($('#{{textbook_id}}').length) {
427
+ var dependencies_met_nb_loaded = setInterval(function() {
428
+ if ($('#{{textbook_id}}').attr('data-nb-textbook') == 'loaded') {
429
+
430
+ var nbiButtonsFound = document.querySelectorAll('.js-nbinteract-widget').length
431
+ if (nbiIndicateNbiActivity && nbiButtonsFound == 1) {
432
+ var log_text = '\n' + 'non-nbi textbook found, skip NBI initialization for: {{textbook_id}}';
433
+ logger.warn(log_text);
434
+ spinner.stop();
435
+ }
427
436
 
428
- // create nbInteract (core) instance
429
- //
430
- coreLogger = log4javascript.getLogger('nbinteract.core');
431
- interact = new NbInteract({
432
- spec: options.spec,
433
- baseUrl: options.baseUrl,
434
- provider: options.provider,
435
- logger: coreLogger,
436
- j1API: j1,
437
- });
438
-
439
- // generate a jupyter kernel via BinderHub
440
- interact.prepare();
441
- nbinteract_prepared = true;
442
-
443
- // issue an error if the NBI (init) button never removed by
444
- // nbInteract-core (util or manager)
445
- // TODO: The 'timeout' condition should be replaced
446
- // state-based triggered from nbInteract-core.
447
- //
448
- window.setTimeout(function() {
449
- var nbiButtonState = _this.getNbiButtonState();
450
- if (nbiButtonState) {
451
- // button NOT removed
452
- logger.warn('NBI initialialization failed on textbook: {{textbook_id}}');
453
- // hide the info modal
454
- $(nbiModalSuccessID).modal('hide');
455
-
456
- // show the error modal
457
- $(nbiModalSuccessID).on('hidden.bs.modal', function () {
458
- if ($(nbiModalErrorID).is(':hidden')) {
459
- var messageErrorUL = document.getElementById(nbiModalErrorMessagesID);
460
- _this.appendModalMessage(messageErrorUL, 'NBI initialialization failed for textbook: {{textbook_id}}')
461
- $(nbiModalErrorID).modal('show');
462
-
463
- // auto-close the error modal
464
- if (nbiModalAutoClose) {
465
- window.setTimeout(function() {
466
- $(nbiModalErrorID).modal('hide');
467
- }, nbiModalAutoCloseDelay);
437
+ if(!nbinteract_prepared && nbiButtonsFound > 1) {
438
+ logText = '\n' + 'jupyter kernel is being generated ...';
439
+ logger.info(logText);
440
+
441
+ // create nbInteract (core) instance
442
+ //
443
+ coreLogger = log4javascript.getLogger('nbinteract.core');
444
+ interact = new NbInteract({
445
+ spec: options.spec,
446
+ baseUrl: options.baseUrl,
447
+ provider: options.provider,
448
+ logger: coreLogger,
449
+ j1API: j1,
450
+ });
451
+
452
+ // generate a jupyter kernel via BinderHub
453
+ interact.prepare();
454
+ nbinteract_prepared = true;
455
+
456
+ // issue an error if the NBI (init) button never removed by
457
+ // nbInteract-core (util or manager)
458
+ // TODO: The 'timeout' condition should be replaced
459
+ // state-based triggered from nbInteract-core.
460
+ //
461
+ window.setTimeout(function() {
462
+ var nbiButtonState = _this.getNbiButtonState();
463
+ if (nbiButtonState) {
464
+ // button NOT removed
465
+ logger.warn('NBI initialialization failed on textbook: {{textbook_id}}');
466
+ // hide the info modal
467
+ $(nbiModalSuccessID).modal('hide');
468
+
469
+ // show the error modal
470
+ $(nbiModalSuccessID).on('hidden.bs.modal', function () {
471
+ if ($(nbiModalErrorID).is(':hidden')) {
472
+ var messageErrorUL = document.getElementById(nbiModalErrorMessagesID);
473
+ _this.appendModalMessage(messageErrorUL, 'NBI initialialization failed for textbook: {{textbook_id}}')
474
+ $(nbiModalErrorID).modal('show');
475
+
476
+ // auto-close the error modal
477
+ if (nbiModalAutoClose) {
478
+ window.setTimeout(function() {
479
+ $(nbiModalErrorID).modal('hide');
480
+ }, nbiModalAutoCloseDelay);
481
+ }
482
+ }
483
+ });
484
+ } else {
485
+ // button removed
486
+ logger.info('NBI initialized successfully.');
468
487
  }
469
- }
470
- });
471
- } else {
472
- // button removed
473
- logger.info('NBI initialized successfully.');
474
- }
475
- }, nbiInitTimeout);
488
+ }, nbiInitTimeout);
489
+
490
+ }
476
491
 
492
+ clearInterval(dependencies_met_nb_loaded);
493
+ } // END dependencies_met_nb_loaded
494
+ }, 25);
495
+ return;
496
+ }
497
+ // END textbook_id: {{ textbook_id }}
498
+ {% endif %} {% endfor %}
499
+ } else {
500
+ spinner.stop();
501
+ var modaBodyText = `
502
+ The <i>Binder Service</i> is currently not available or is overloaded.
503
+ All interactive components on the page are <b>not</b> available.
504
+ You can reload the page or re-open later again.
505
+ `;
506
+ logger.error('\n', 'Binder access: failed');
507
+ if ($(nbiModalTRInfo).is(':hidden')) {
508
+ document.getElementById('nbiModalTRInfoBody').innerHTML = modaBodyText;
509
+ $(nbiModalTRInfo).modal('show');
477
510
  }
511
+ clearInterval(dependencies_met_binder_responsive);
512
+ }
513
+
514
+ }
515
+ }, 25); // END dependencies_met_binder_responsive
478
516
 
479
- clearInterval(dependencies_met_nb_loaded);
480
- } // END dependencies_met_nb_loaded
481
- }, 25);
482
- return;
483
- }
484
- // END textbook_id: {{ textbook_id }}
485
- {% endif %} {% endfor %}
486
517
  },
487
518
 
488
519
  // -------------------------------------------------------------------------
@@ -815,6 +846,45 @@ j1.adapter.nbinteract = (function (j1, window) {
815
846
  </div>
816
847
  </div>
817
848
  `
849
+
850
+ const nbiModalTRInfo = `
851
+ <div id="nbiModalTRInfo"
852
+ class="modal fade right"
853
+ tabindex="-1"
854
+ role="dialog"
855
+ aria-labelledby="myModalLabel" aria-hidden="true"
856
+ data-bs-keyboard="false"
857
+ data-bs-backdrop="static">
858
+ <div class="modal-dialog modal-dialog-scrollable modal-side-2x modal-top-right modal-notify modal-success" role="document">
859
+ <!-- Content -->
860
+ <div class="modal-content">
861
+ <!-- Header -->
862
+ <div class="modal-header">
863
+ <p class="lead">Information</p>
864
+ <button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
865
+ <i class="mdi mdi-close mdi-dark mdi-48px"></i>
866
+ </button>
867
+ </div>
868
+ <!-- Icon -->
869
+ <div class="text-center">
870
+ <i class="mdi mdi-10x mdi-information-variant mdi-spin md-green mb-1"></i>
871
+ </div>
872
+ <!-- Body -->
873
+ <div id="nbiModalTRInfoBody" class="modal-body">
874
+ <div>
875
+ <p> Placeholder </p>
876
+ </div>
877
+ </div>
878
+ <!-- Footer -->
879
+ <div class="modal-footer justify-content-center">
880
+ <a type="button" class="btn btn-primary" data-bs-dismiss="modal">OK, thanks</a>
881
+ </div>
882
+ </div>
883
+ <!-- END Content -->
884
+ </div>
885
+ </div>
886
+ `
887
+
818
888
  const nbiModalTRSuccess = `
819
889
  <div id="nbiModalTRSuccess"
820
890
  class="modal fade right"
@@ -828,7 +898,7 @@ j1.adapter.nbinteract = (function (j1, window) {
828
898
  <div class="modal-content">
829
899
  <!-- Header -->
830
900
  <div class="modal-header">
831
- <p class="lead">Info - NbInteract</p>
901
+ <p class="lead">NBI - Information</p>
832
902
  <button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
833
903
  <i class="mdi mdi-close mdi-dark mdi-48px"></i>
834
904
  </button>
@@ -853,6 +923,7 @@ j1.adapter.nbinteract = (function (j1, window) {
853
923
  </div>
854
924
  </div>
855
925
  `
926
+
856
927
  const nbiModalTLDanger = `
857
928
  <div id="nbiModalTLDanger"
858
929
  class="modal fade left"
@@ -866,7 +937,7 @@ j1.adapter.nbinteract = (function (j1, window) {
866
937
  <div id="nbiModalErrorBody" class="modal-content">
867
938
  <!--Header-->
868
939
  <div class="modal-header">
869
- <p class="lead">Error - NbInteract</p>
940
+ <p class="lead">NBI - Error</p>
870
941
  <button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
871
942
  <i class="mdi mdi-close mdi-dark mdi-48px"></i>
872
943
  </button>
@@ -897,6 +968,12 @@ j1.adapter.nbinteract = (function (j1, window) {
897
968
  nbiModal.innerHTML = nbiModalTopInfo;
898
969
  document.body.appendChild(nbiModal);
899
970
 
971
+ nbiModal = document.createElement('div');
972
+ nbiModal.id = 'nbi-modal-info';
973
+ nbiModal.className = 'nbi-modal';
974
+ nbiModal.innerHTML = nbiModalTRInfo;
975
+ document.body.appendChild(nbiModal);
976
+
900
977
  nbiModal = document.createElement('div');
901
978
  nbiModal.id = 'nbi-modal-success';
902
979
  nbiModal.className = 'nbi-modal';
@@ -1096,6 +1173,22 @@ j1.adapter.nbinteract = (function (j1, window) {
1096
1173
  return _this.state;
1097
1174
  }, // END getState
1098
1175
 
1176
+ // -------------------------------------------------------------------------
1177
+ // getState()
1178
+ // Returns the current (processing) state of the module
1179
+ // -------------------------------------------------------------------------
1180
+ checkURL: function (uri, flags) {
1181
+ _this.setState('process_checks');
1182
+ $.get(uri).done(function () {
1183
+ _this.setState('finished_checks');
1184
+ flags.checkURL = true;
1185
+ return true;
1186
+ }).fail(function () {
1187
+ _this.setState('finished_checks');
1188
+ flags.checkURL = false;
1189
+ });
1190
+
1191
+ }, // END checkURL
1099
1192
  // -------------------------------------------------------------------------
1100
1193
  // appendModalMessage()
1101
1194
  // Appends a message to given (NBI) modal
@@ -365,6 +365,7 @@ function CookieConsent(props) {
365
365
  // call consent dialog if no cookie found or cookie NOT accepted (except whitelisted pages)
366
366
  //
367
367
  whitelisted = (this.props.whitelisted.indexOf(window.location.pathname) > -1);
368
+
368
369
  var consentCookie = Cookie.get(this.props.cookieName);
369
370
  if ((consentCookie === undefined || consentCookie === "false") && this.props.autoShowDialog && !whitelisted) {
370
371
  showDialog();
data/lib/j1/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module J1
2
- VERSION = '2022.3.0'
2
+ VERSION = '2022.3.1'
3
3
  end
@@ -53,7 +53,7 @@ gem 'jekyll', '~> 4.2'
53
53
 
54
54
  # Theme Rubies, default: J1 Template (NOT used for the development system)
55
55
  #
56
- gem 'j1-template', '~> 2022.3.0'
56
+ gem 'j1-template', '~> 2022.3.1'
57
57
 
58
58
  # ------------------------------------------------------------------------------
59
59
  # PRODUCTION: Gem needed for the Jekyll and J1 prod environment
@@ -53,7 +53,7 @@ environment: development
53
53
  # ------------------------------------------------------------------------------
54
54
  # Sets the build version of J1 Template Gem
55
55
  #
56
- version: 2022.3.0
56
+ version: 2022.3.1
57
57
 
58
58
  # version
59
59
  # ------------------------------------------------------------------------------
@@ -35,7 +35,10 @@ defaults:
35
35
  # cookieStorageDays: 365 # duration the consent cookie is stored
36
36
  # cookieSameSite: Strict # restrict consent cookie to first-party, do NOT send cookie to other domains
37
37
  reloadPageOnChange: true # reload current page if user settings has been changed
38
- whitelisted: [ '/pages/public/legal/en/privacy' ] # pages NO consent issued, currently NOT supported
38
+ whitelisted: [ # pages NO consent issued
39
+ '/pages/public/legal/en/privacy/',
40
+ '/pages/public/se-fake/',
41
+ ]
39
42
  xhrDataElement: consent-data # container for all language-specific consent modals (taken from contentURL)
40
43
  dialogContainerID: consent-dialog # container, the dialog modal is (dynamically) loaded
41
44
  postSelectionCallback: j1.adapter.cookieConsent.cbCookie # called after the user has made his selection
@@ -369,6 +369,6 @@ end
369
369
 
370
370
  module Jekyll
371
371
  module J1LunrSearch
372
- VERSION = '2022.3.0'
372
+ VERSION = '2022.3.1'
373
373
  end
374
374
  end
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": true,
3
3
  "name": "j1",
4
- "version": "2022.3.0",
4
+ "version": "2022.3.1",
5
5
  "description": "J1 Template Starter Web",
6
6
  "homepage": "https://your.site",
7
7
  "author": {
@@ -60,11 +60,12 @@ resource_options:
60
60
 
61
61
  // Set (local) page attributes here
62
62
  // -----------------------------------------------------------------------------
63
- // :page--attr: <attr-value>
64
- :binder-badges-enabled: true
65
- :binder--home: https://mybinder.org/
66
- :binder--docs: https://mybinder.readthedocs.io/en/latest/
67
- :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
63
+ // :page--attr: <attr-value>
64
+ :binder-badges-enabled: true
65
+ :binder--home: https://mybinder.org/
66
+ :binder--docs: https://mybinder.readthedocs.io/en/latest/
67
+ :github-repo--binderhub: https://github.com/jupyterhub/binderhub
68
+ :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
68
69
 
69
70
  // Load Liquid procedures
70
71
  // -----------------------------------------------------------------------------
@@ -94,6 +95,11 @@ endif::[]
94
95
 
95
96
  // info: https://en.wikipedia.org/wiki/Galileo_Galilei
96
97
 
98
+ CAUTION: Each interactive element presented on this page uses *time-consuming*
99
+ operations that take a while to finish. The images and the interactive
100
+ elements are built through a backend in the cloud. Please be patient
101
+ to see the results.
102
+
97
103
  The Jupyter Project is a non-profit organization founded in 2014 by
98
104
  _Fernando Perez_. The Jupyter project supports interactive scientific
99
105
  Data evaluations and scientific calculations. The main applications provided
@@ -163,6 +169,15 @@ It is customizable and scalable and is suitable for small and large teams,
163
169
  academic courses, and large-scale infrastructure (for example like the
164
170
  Binder service).
165
171
 
172
+ == Binder
173
+
174
+ Binder allows you to create custom computing environments that can be
175
+ shared and used by many remote users. A Binder service is powered by
176
+ link:{github-repo--binderhub}[BinderHub Repo on Github, {browser-window--new}],
177
+ an open-source tool that runs on Kubernetes, a portable, extensible,
178
+ open-source platform for managing containerized services. One such deployment
179
+ lives at link:{binder--home}[Binder Home, {browser-window--new}], and is free
180
+ to use.
166
181
 
167
182
  == The Package nbInteract (NBI)
168
183
 
@@ -480,7 +495,7 @@ regenerate: true
480
495
 
481
496
  resources: [ nbinteract, rouge ] <2>
482
497
  ----
483
- <1> Binder's services require *Personalization* accepted in the users
498
+ <1> Binder's services require *Personalization* accepted in the users
484
499
  *cookie* settings. Difficulties with the rules of privacy should be
485
500
  explicitly pointed out and responded to in a suitable form if the cookie
486
501
  settings of the visitor do not allow this.
@@ -53,12 +53,12 @@ resource_options:
53
53
 
54
54
  // Set (local) page attributes here
55
55
  // -----------------------------------------------------------------------------
56
- // :page--attr: <attr-value>
57
- :badges-enabled: false
58
- :binder-badge-enabled: false
59
- :binder--home: https://mybinder.org/
60
- :binder--docs: https://mybinder.readthedocs.io/en/latest/
61
- :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
56
+ // :page--attr: <attr-value>
57
+ :badges-enabled: false
58
+ :binder-badge-enabled: false
59
+ :binder--home: https://mybinder.org/
60
+ :binder--docs: https://mybinder.readthedocs.io/en/latest/
61
+ :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
62
62
 
63
63
  // Load Liquid procedures
64
64
  // -----------------------------------------------------------------------------
@@ -60,12 +60,12 @@ resource_options:
60
60
 
61
61
  // Set (local) page attributes here
62
62
  // -----------------------------------------------------------------------------
63
- // :page--attr: <attr-value>
64
- :badges-enabled: true
65
- :binder-badge-enabled: false
66
- :binder--home: https://mybinder.org/
67
- :binder--docs: https://mybinder.readthedocs.io/en/latest/
68
- :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
63
+ // :page--attr: <attr-value>
64
+ :badges-enabled: true
65
+ :binder-badge-enabled: false
66
+ :binder--home: https://mybinder.org/
67
+ :binder--docs: https://mybinder.readthedocs.io/en/latest/
68
+ :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
69
69
 
70
70
  // Load Liquid procedures
71
71
  // -----------------------------------------------------------------------------
@@ -123,6 +123,11 @@ In addition, `nbinteract` provides a Python package. Once imported, the package
123
123
  provides helper methods that allow users to create simple interactive
124
124
  visualizations with single function calls.
125
125
 
126
+ CAUTION: Each interactive element presented on this page uses *time-consuming*
127
+ operations that take a while to finish. The images and the interactive
128
+ elements are built through a backend in the cloud. Please be patient
129
+ to see the results.
130
+
126
131
  == Getting Started
127
132
 
128
133
  The following pages will show you how to use `nbinteract` and its related
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: Time Tables
2
+ title: Times Tables
3
3
  tagline: visualize patterns
4
4
  date: 2022-03-28 00:00:00
5
5
  description: >
@@ -55,12 +55,11 @@ resource_options:
55
55
 
56
56
  // Set (local) page attributes here
57
57
  // -----------------------------------------------------------------------------
58
- // :page--attr: <attr-value>
59
- :binder-badges-enabled: true
60
- :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
61
- :binder-app-launch--notebook: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?filepath=notebooks/j1/j1_circular_times_table.ipynb
62
-
63
- :time-tables-visualization: https://elc.github.io/posts/times-tables/
58
+ // :page--attr: <attr-value>
59
+ :binder-badges-enabled: true
60
+ :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
61
+ :binder-app-launch--notebook: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?filepath=notebooks/j1/j1_circular_times_table.ipynb
62
+ :times-tables-visualization: https://elc.github.io/posts/times-tables/
64
63
 
65
64
  // Load Liquid procedures
66
65
  // -----------------------------------------------------------------------------
@@ -83,7 +82,7 @@ image:https://mybinder.org/badge_logo.svg[Binder, link="{binder-app-launch--tree
83
82
  endif::[]
84
83
 
85
84
  NOTE: All examples are taken from
86
- link:{time-tables-visualization}[Time Tables Visualization - Finding Patterns, {browser-window--new}],
85
+ link:{times-tables-visualization}[Times Tables Visualization - Finding Patterns, {browser-window--new}],
87
86
  and re-written for the use of module J1 NBI. Some text is used from the
88
87
  original post but re-written for clarity and simplicity.
89
88
 
@@ -126,12 +125,12 @@ what _Mathologer_ is doing:
126
125
  * an animated version to construct the image Factor by Factor: the lines
127
126
  and the number of points is fixed, but the factor increases per iteration.
128
127
 
129
- WARNING: Each scenario presented on this page uses *time-consuming*
128
+ Start your journey on the power of Mathematics!
129
+
130
+ CAUTION: Each interactive element presented on this page uses *time-consuming*
130
131
  operations that take a while to finish. The images and the interactive
131
132
  elements are built through a backend in the cloud. Please be patient
132
133
  to see the results.
133
134
 
134
- Start your journey on the power of Mathematics!
135
-
136
135
  // textbook::circular_times_table[]
137
136
  textbook::j1_circular_times_table[]
@@ -60,11 +60,10 @@ resource_options:
60
60
 
61
61
  // Set (local) page attributes here
62
62
  // -----------------------------------------------------------------------------
63
- // :page--attr: <attr-value>
64
- :binder-badges-enabled: true
65
- :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
66
- :binder-app-launch--notebook: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?filepath=notebooks/j1/j1_interactive_widgets.ipynb
67
-
63
+ // :page--attr: <attr-value>
64
+ :binder-badges-enabled: true
65
+ :binder-app-launch--tree: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?urlpath=/tree
66
+ :binder-app-launch--notebook: https://mybinder.org/v2/gh/jekyll-one/j1-binder-repo/main?filepath=notebooks/j1/j1_interactive_widgets.ipynb
68
67
 
69
68
  // Load Liquid procedures
70
69
  // -----------------------------------------------------------------------------
@@ -98,4 +97,9 @@ the most used. Interactive widgets are provided natively by Jupyter Notebooks
98
97
  using the library `ipywidgets`. Some more widgets are provided by `nbinteract`.
99
98
  Find common examples in the textbooks below.
100
99
 
100
+ CAUTION: Each interactive element presented on this page uses *time-consuming*
101
+ operations that take a while to finish. The images and the interactive
102
+ elements are built through a backend in the cloud. Please be patient
103
+ to see the results.
104
+
101
105
  textbook::j1_interactive_widgets[]