j1-template 2022.3.0 → 2022.3.1

Sign up to get free protection for your applications and to get access to all the features.
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[]