pyodide-mkdocs-theme 5.4.4__py3-none-any.whl → 5.4.5__py3-none-any.whl

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.
@@ -1 +1 @@
1
- __version__ = "5.4.4"
1
+ __version__ = "5.4.5"
@@ -577,26 +577,26 @@ class Ide(CommonTermIde):
577
577
  Build a list of all the buttons to add after the IDE.
578
578
  """
579
579
  buttons = [
580
- self.create_button("play"),
581
- self.create_button("check") if self.has_check_btn else "",
582
- self.create_button("download", margin_left=1 ),
583
- self.create_button("upload", margin_right=1 ),
584
- self.create_button("restart"),
585
- self.create_button("save"),
580
+ self.create_button("play", bare_tip=True),
581
+ self.create_button("check", bare_tip=True) if self.has_check_btn else "",
582
+ self.create_button("download", bare_tip=True, margin_left=1 ),
583
+ self.create_button("upload", bare_tip=True, margin_right=1 ),
584
+ self.create_button("restart", bare_tip=True),
585
+ self.create_button("save", bare_tip=True),
586
586
  ]
587
587
 
588
588
  if self.export:
589
589
  buttons.append(
590
- self.create_button("zip")
590
+ self.create_button("zip", bare_tip=True)
591
591
  )
592
592
  if self.has_corr_btn: # "mkdocs serve" only:
593
593
  buttons.append(
594
- self.create_button("corr_btn", margin_left=1)
594
+ self.create_button("corr_btn", bare_tip=True, margin_left=1)
595
595
  )
596
596
  if self.has_reveal_btn: # "mkdocs serve" only:
597
597
  margin_left = {} if self.has_corr_btn else {"margin_left": 1}
598
598
  buttons.append(
599
- self.create_button("show", **margin_left),
599
+ self.create_button("show", bare_tip=True, **margin_left),
600
600
  )
601
601
 
602
602
  return buttons
@@ -777,6 +777,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
777
777
  margin_right: float = 0.2,
778
778
  extra_btn_kls: str = "",
779
779
  tip_side: P5BtnLocation = "",
780
+ bare_tip: bool = False,
780
781
  **kwargs
781
782
  ) -> str:
782
783
  """
@@ -794,6 +795,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
794
795
  margin_right = margin_right,
795
796
  extra_btn_kls = extra_btn_kls,
796
797
  tip_side = tip_side,
798
+ bare_tip = bare_tip,
797
799
  **kwargs
798
800
  )
799
801
 
@@ -834,7 +836,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
834
836
  if bare_tip:
835
837
  tip_span = ""
836
838
  kwargs['data'] = kwargs.get('data', {})
837
- kwargs['data']['tip-txt'] = tip_txt
839
+ kwargs['data']['tip-txt'] = str(tip_txt)
838
840
  if tip_txt.em: kwargs['data']['tip-width'] = tip_txt.em
839
841
  else:
840
842
  tip_span = Html.tooltip(tip_txt, tip_txt.em, tip_side=tip_side or P5BtnLocation.bottom)
@@ -114,7 +114,7 @@ class IdePlayground(CommonGeneratedIde, Ide):
114
114
  """
115
115
 
116
116
  return f"""
117
- # Playground {'{'} data-search-exclude {'}'}
117
+ # Playground {{ data-search-exclude }}
118
118
 
119
119
 
120
120
  Cette page permet de développer dynamiquement dans un contexte où les différentes sections sont modifiables et exécutables à volonté : lorsque l'IDE est exécuté, les contenus de tous les autres éditeurs de la page sont utilisés en tant que sections de l'IDE.
@@ -124,7 +124,8 @@ Cette page permet de développer dynamiquement dans un contexte où les différe
124
124
  * Le bouton de téléchargement sous l'IDE permet de récupérer un fichier PMT correctement formaté, avec toutes les sections assemblées.
125
125
  * Le contenu de la section `tests` est automatiquement exécuté après le contenu de l'IDE : il n'est pas nécessaire d'en rajouter le code dans celui-ci pour retrouver le comportement habituel des IDEs normaux, que ce soit pour les tests publics ou les validations.
126
126
  * Mermaid est utilisable dans cette page, ainsi que les autres outils complémentaires (p5, matplotlib, ...).
127
- * Dans la apge Plyagournd, la sortie standard est toujours visible durant les validations, de manière à ne pas rencontrer d'erreurs si le code des tests secrets utilise `terminal_message`.
127
+ * Dans la page Playground, la sortie standard est toujours visible durant les validations, de manière à ne pas rencontrer d'erreurs si le code des tests secrets utilise `terminal_message`.
128
+ * L'id html de la figure a la valeur par défaut pour une page localisée directement dans le `docs_dir`.
128
129
 
129
130
  <br>
130
131
 
@@ -211,6 +211,11 @@ class Case:
211
211
  previously revealed stuff. Use 1000 to get infinite number of attempts.
212
212
  """
213
213
 
214
+ done: Optional[int] = None
215
+ """
216
+ Value to use for this.storage.done at the beginning of this test.
217
+ """
218
+
214
219
  show_only_assertion_errors_for_secrets: Optional[bool] = None
215
220
  """ Override the current value for the source page, if given. """
216
221
 
@@ -277,6 +277,7 @@ class PyodideSectionsRunnerBase {
277
277
  LOGGER_CONFIG.ACTIVATE && jsLogger(loggerName)
278
278
 
279
279
  CONFIG.calledMermaid = false
280
+ const wasDirty = this.isDirty
280
281
  this.makeDirty(false) // Assume executions will go well (see note in finally block)
281
282
  this.running = runningMan
282
283
  let runtime
@@ -307,10 +308,16 @@ class PyodideSectionsRunnerBase {
307
308
  // For isDirty update, DO NOT only rely on `this.isDirty = runtime.stopped`, so that the
308
309
  // runner itself can set the value on a success if needed, and it won't be overridden here
309
310
  // (useful if a valid "play" is still considered dirty when a validation exists...).
310
- if(!runtime || runtime.stopped){
311
+ if(!runtime || runtime.stopped || runningMan.isPlaying && wasDirty){
311
312
  this.makeDirty()
312
313
  }
313
314
 
315
+ // AFTER updating isDirty, remove the validation button border if the current execution
316
+ // is a validation:
317
+ if(runningMan.isValidating){
318
+ this._getJValidationButton().removeClass("dirty-validation")
319
+ }
320
+
314
321
  if(runtime){
315
322
  await finallyTeardown.call(this, runtime)
316
323
  }
@@ -544,7 +551,7 @@ class PyodideSequentialRunner extends PyodideSectionsRunnerBase {
544
551
  super(id)
545
552
 
546
553
  this.rotateTerminalMessage = true
547
- this.isDirty = true // Tell if the last run wa successful or not, or if the content has been modified
554
+ this.isDirty = true // Tell if the last run was successful or not, or if the content has been modified
548
555
  // without being run (handled unconditionally for all elements, even if they aren't
549
556
  // "in sequential run". The RUNNERS_MANAGER handles what is actually to be run or not).
550
557
  }
@@ -780,6 +780,7 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
780
780
 
781
781
  this.storeInitPositionsDataIfNeeded()
782
782
  const focused = document.activeElement
783
+ const floatingTip = $("#floating-tip").detach()
783
784
 
784
785
  this.global[0].requestFullscreen().then(async _=>{
785
786
  LOGGER_CONFIG.ACTIVATE && jsLogger('[ScreenMode]', "Full screen ready")
@@ -791,6 +792,8 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
791
792
  this.guiIdeFlags.internalIsFullScreen = true
792
793
  splitScreenBtn.addClass('deactivated')
793
794
  this.ideScreenModeVerticalResize({goingFullScreen: true})
795
+ this.global.append(floatingTip)
796
+
794
797
  focused.focus() // Always give back the focus to the element which had it before.
795
798
 
796
799
  LOGGER_CONFIG.ACTIVATE && jsLogger('[ScreenMode]', "Full screen setup - DONE")
@@ -806,6 +809,7 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
806
809
  '[ScreenMode]', "Full screen reversion with", minLines, maxLines
807
810
  )
808
811
 
812
+ floatingTip.detach().appendTo('body')
809
813
  if(this.splitScreenActivated) splitScreenBtn.removeClass('deactivated')
810
814
  this.guiIdeFlags.internalIsFullScreen = false
811
815
  const resizeOption = this.isInSplit ? {topDivH:this.setupTopDivHeight()}
@@ -177,7 +177,7 @@ class IdeHistoryManager extends IdeAceManager {
177
177
  * */
178
178
  updateValidationBtnColor(done=undefined, jElt=undefined){
179
179
  done ??= this.storage.done
180
- jElt ??= this.global.find("button[btn_kind=check]")
180
+ jElt ??= this._getJValidationButton()
181
181
  if(!this.isDelayedRevelation){
182
182
  const color = this.getIdeStateColor(done)
183
183
  jElt.css('--ide-btn-color', color)
@@ -185,6 +185,10 @@ class IdeHistoryManager extends IdeAceManager {
185
185
  return jElt
186
186
  }
187
187
 
188
+ _getJValidationButton(){
189
+ return this.global.find("button[btn_kind=check]")
190
+ }
191
+
188
192
 
189
193
  getIdeStateColor(done){ // CodCap
190
194
  return !done ? "unset" : done<0 ? 'red' : 'green'
@@ -193,6 +197,13 @@ class IdeHistoryManager extends IdeAceManager {
193
197
  clearValidations(){ this.validations.length = 0 }
194
198
 
195
199
 
200
+ makeDirty(isDirty=true){
201
+ super.makeDirty(isDirty)
202
+ if(isDirty){
203
+ this._getJValidationButton().addClass("dirty-validation")
204
+ }
205
+ }
206
+
196
207
 
197
208
  setupHistoryBtn(jHistItem, [done, time, code]){
198
209
  jHistItem.text(time)
@@ -262,20 +273,21 @@ class IdeFeedbackManager extends IdeHistoryManager {
262
273
  if(runtime.stopped || !step) return
263
274
 
264
275
  const playing = this.running.isPlaying
265
- const intro = playing ? "" : CONFIG.lang.validation.msg
266
276
  const section = CONFIG.lang[step].msg
267
- const ok = CONFIG.lang.successMsg.msg
277
+ const isDone = this.storage.done > 0
278
+ const okMsg = CONFIG.lang.successMsg.msg
279
+ const intro = playing ? "" : CONFIG.lang.validation.msg
268
280
 
269
- let msg = `${ intro }${ section }: ${ ok }` // Default section message
270
- if(!code) msg = "" // No default message if no code in the section...
271
- if(playing && !this.hasCheckBtn){ // ...but ensure the default ending message is shown,
272
- msg = CONFIG.lang.successMsgNoTests.msg // if this is "playing" and nothing else to do after.
281
+ let msg = `${ intro }${ section }: ${ okMsg }` // Default section message
282
+ if(!code) msg = "" // No default message if no code in the section...
283
+ if(playing && !this.hasCheckBtn){ // ...but ensure the default ending message is shown,
284
+ msg = CONFIG.lang.successMsgNoTests.msg // if this is "playing" and nothing else to do after.
273
285
  }
274
286
 
275
287
  if(msg) this.terminalEcho(msg)
276
288
 
277
289
  // Prepare a "very final" message if needed:
278
- if(playing && this.hasCheckBtn){
290
+ if(playing && this.hasCheckBtn && (!isDone || this.isDirty)){
279
291
  // If a validation button is present while running the public tests
280
292
  runtime.finalMsg = CONFIG.lang.unforgettable.msg
281
293
  }
@@ -718,6 +730,42 @@ class IdeRunnerLogic extends IdeFeedbackManager {
718
730
  * */
719
731
  export class IdeRunner extends IdeRunnerLogic {
720
732
 
733
+ static KEY_UP_NO_CHANGES = new Set(`
734
+ Control
735
+ Alt
736
+ AltGraph
737
+ Meta
738
+ CapsLock
739
+ NumLock
740
+ Shift
741
+ ContextMenu
742
+ F1
743
+ F2
744
+ F3
745
+ F4
746
+ F5
747
+ F6
748
+ F7
749
+ F8
750
+ F9
751
+ F10
752
+ F11
753
+ F12
754
+ Insert
755
+ PageUp
756
+ PageDown
757
+ End
758
+ Home
759
+ Escape
760
+ `.trim().split(/\s+/g))
761
+
762
+ static KEY_UP_ARROWS = new Set(`
763
+ ArrowLeft
764
+ ArrowRight
765
+ ArrowUp
766
+ ArrowDown
767
+ `.trim().split(/\s+/g))
768
+
721
769
 
722
770
  /**Process to "re-initiate" the internal state of the IDE (useful for testing) */
723
771
  _init(){
@@ -852,7 +900,7 @@ export class IdeRunner extends IdeRunnerLogic {
852
900
 
853
901
  // Add fullscreen activation binding, but NOT through the ACE editor commands
854
902
  // cannot control the exit :/ )
855
- this.global.on('keyup', this.respondToEscapeKeyUp.bind(this))
903
+ this.global.on('keyup', this.respondToKeyUp.bind(this))
856
904
 
857
905
  // Bind editor extra buttons:
858
906
  this.global.find(".comment.tooltip" ).on("click", this.toggleComments.bind(this))
@@ -930,22 +978,32 @@ export class IdeRunner extends IdeRunnerLogic {
930
978
  }
931
979
 
932
980
 
933
- async respondToEscapeKeyUp(event){
934
- if(
935
- event.key == 'Escape'
981
+ async respondToKeyUp(event){
982
+
983
+ const goFullScreen = (event.key == 'Escape'
936
984
  && !IdeFullScreenGlobalManager.someMenuOpened
937
985
  && !this.guiIdeFlags.escapeIdeSearch
938
986
  && !somethingFullScreen()
939
- ){
987
+ )
988
+ const justMoving = (
989
+ this.constructor.KEY_UP_NO_CHANGES.has(event.key) ||
990
+ this.constructor.KEY_UP_ARROWS.has(event.key) && !event.altKey ||
991
+ event.ctrlKey && "acfhs Enter".includes(event.key) ||
992
+ event.key == 'Escape'
993
+ )
994
+
995
+ if(goFullScreen){
940
996
  this.requestFullScreen()
941
- // The browser already handles on its own going out of fullscreen with escape => no else needed
997
+ // The browser already handles on its own going out of fullscreen with escape
998
+ // => no "else" needed for that
942
999
 
943
1000
  }else if(event.altKey && event.key==':'){
944
1001
  this.switchSplitScreenFromButton(event)
945
1002
 
946
- }else{
1003
+ }else if(!justMoving){
947
1004
  this.makeDirty()
948
1005
  }
1006
+
949
1007
  this.guiIdeFlags.escapeIdeSearch = false
950
1008
  }
951
1009
 
@@ -404,6 +404,13 @@ class IdeTesterGuiManager extends IdeRunner {
404
404
 
405
405
  _applyConfAndData(onLoad=false){
406
406
 
407
+ // Always reset the "done" state, to make tests independent of each others.
408
+ this.storage.done = 0
409
+ if('done' in this.conf){
410
+ this.storage.done = this.conf.done
411
+ }
412
+ this.updateValidationBtnColor()
413
+
407
414
  const hasSetMaxHide = 'set_max_and_hide' in this.conf
408
415
  if(onLoad || hasSetMaxHide){
409
416
  this.conf.reveal_corr_rems = false
@@ -119,7 +119,7 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
119
119
 
120
120
  /**Automatically define the position of the tooltip around the hovered element by mutation of pos
121
121
  * */
122
- const getAnchorPoint=({width, height, top, left}, pagePos)=>{
122
+ const getAnchorPoint=({width, height, top, left}, pagePos, obj)=>{
123
123
  const pos = defaultPos()
124
124
 
125
125
  pos.anchorX = Math.round(pagePos.left + width/2)
@@ -135,6 +135,10 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
135
135
  }else if (pointer.isRight){
136
136
  pos.translateX = -100
137
137
  }
138
+
139
+ const w = obj.dataset.tipWidth
140
+ if (w!==undefined) pos.width = w+'em'
141
+
138
142
  return pos
139
143
  }
140
144
 
@@ -167,9 +171,9 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
167
171
  // Positions & dimensions in viewport:
168
172
  const rect = this.getBoundingClientRect()
169
173
 
170
- pos = getAnchorPoint(rect, pagePos)
174
+ pos = getAnchorPoint(rect, pagePos, this)
171
175
  }
172
- tipSpan.text(this.dataset.tipTxt)
176
+ tipSpan.html(this.dataset.tipTxt)
173
177
  placement(pos)
174
178
  })
175
179
 
@@ -282,5 +282,5 @@ mais sans lien dessus */
282
282
  .tooltip.p5-btn > img { width: 24px; }
283
283
 
284
284
 
285
- #floating-tip { position: absolute; }
285
+ #floating-tip { position: absolute; z-index: 1 }
286
286
  #floating-tip > span { visibility: unset; }
@@ -22,7 +22,7 @@ If not, see <https://www.gnu.org/licenses/>.
22
22
  position: absolute;
23
23
  left: 50%;
24
24
  bottom: 50%;
25
- z-index: 1;
25
+ z-index: 4; /* above bare tooltips */
26
26
  background: var(--main-theme);
27
27
  border-radius: 10px;
28
28
  padding: var(--hist-size);
@@ -189,6 +189,9 @@ div[class*='ace-'] .ace_gutter {
189
189
  margin-right: calc(var(--marg-split) - 1px);
190
190
  }
191
191
 
192
+ .dirty-validation > img {
193
+ border: 3px solid orange;
194
+ }
192
195
 
193
196
  /*
194
197
  -------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyodide-mkdocs-theme
3
- Version: 5.4.4
3
+ Version: 5.4.5
4
4
  Summary: Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations
5
5
  License: GPL-3.0-or-later
6
6
  Keywords: mkdocs,mkdocs-plugin,pyodide,IDE,terminal
@@ -3,7 +3,7 @@ pyodide_mkdocs_theme/PMT_tools/vis/__init__.py,sha256=yz4vn9sdJbov4nnSY3qW2i2KBx
3
3
  pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py,sha256=xIHPG_LGtVNuWn31ES2cHBGMTPszW103xSL-X9rvass,19176
4
4
  pyodide_mkdocs_theme/__init__.py,sha256=eF71r5abmOC1RxEUnT2trZxTQWNmW69wUFWcBIEyxeI,2767
5
5
  pyodide_mkdocs_theme/__main__.py,sha256=AM77xwc-6A0UlQKDk5lQE2ZmQwFdB4SvipsB2-6ieCQ,10321
6
- pyodide_mkdocs_theme/__version__.py,sha256=f7P-4pQPWrr2eQfh2nK1_O6SOjiQQMhPgAD0sKQpVR4,22
6
+ pyodide_mkdocs_theme/__version__.py,sha256=mpYO1DeEAC8zUNUEdoRJ6o_ovaRbCBzwdfoUUC8Me_8,22
7
7
  pyodide_mkdocs_theme/basthon_p5_to_pmt.py,sha256=C0qeMygadJjAo4ERzWLqptyo0KPEvEwZ7DWC1Io0SqM,17446
8
8
  pyodide_mkdocs_theme/pyodide_macros/__init__.py,sha256=QsJobE1N4BzEm-ucPawBCcdXyCV_-40jGa3WlaQQGpo,1392
9
9
  pyodide_mkdocs_theme/pyodide_macros/exceptions.py,sha256=TPCoT52wD_huHT0BbWf17ESe90IeG4TrkM_yxUyvnQI,5699
@@ -23,9 +23,9 @@ pyodide_mkdocs_theme/pyodide_macros/indent_parser.py,sha256=TQisSkWrrfyTM6GGag19
23
23
  pyodide_mkdocs_theme/pyodide_macros/macros/IDEs.py,sha256=IHY6EqZOyN95x-rgxLwr914eHdue-fJcG1SRG2sRE7E,3204
24
24
  pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  pyodide_mkdocs_theme/pyodide_macros/macros/figure.py,sha256=0VRjFixZb19yDnjXCGyJJHnkRuLyuRvzIfdtmfsBxJw,2668
26
- pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py,sha256=_q22rP7LvJFro5ume1bIMgxXaef4TttVsQZiykBbrcw,23507
27
- pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py,sha256=6GEXkeaXyrE9qhYZrR4ok5MdnOxmGgxlZPhYhYdzYH0,41750
28
- pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py,sha256=lOdG_QSNhbyG73IV9pi_MAGM9uNFrazvzGr7t-t8iH0,4884
26
+ pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py,sha256=eudkZ-ouc92jrPpE3O_bJH55YQvzQsax1HZtzrDcAzA,23642
27
+ pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py,sha256=eIS0L30DrK3CnR-eIf1LnDFNPYXUjEHFEPGCBdvQEBQ,41831
28
+ pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py,sha256=-3g6JZpbvzN7MEi5TguCWQPT-TGxNB5lBmRVIQ7yfno,4984
29
29
  pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py,sha256=bgwUtQiUsSJMAEHONj_YMZ3AKsNCKCfeYlRmLg2NbBc,4507
30
30
  pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py,sha256=WnabtSWGc8Gn_TZdc-QRest9jjbZmfgvfXOFFHcNaXA,1718
31
31
  pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py,sha256=D89KAddfJb3bF5nTNigF8VdOYe4hMwac0do_Zo61wUE,4840
@@ -70,7 +70,7 @@ pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py,sha256=VaY8o-mpx
70
70
  pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py,sha256=knUeodgYGnmsROYj--sn4BijrEln0Vi7jKdsonZpazM,7477
71
71
  pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py,sha256=bxZFsXDDbYJo4Y3oTMoWV8cXZOEwdDTBON5EMnXtLb4,1238
72
72
  pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py,sha256=G2AytHPYqF8ZQvF_2ULaahR2eHkFhx5MIKZO0rw3R4E,12840
73
- pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py,sha256=4D0uu4N6k_rgb0CFNZfTZD6geGFMCpfbOY0n6eDLQVo,17717
73
+ pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py,sha256=QzEm4hjPY4LrSe0KmzuaLruoHUKnt498iAlzkCCj5lw,17835
74
74
  pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py,sha256=kubbAoNhiHnb_zsGxmelAWCVSsR09S6cp0v_l05ZdPE,4458
75
75
  pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py,sha256=JnXpmrwGSBG95o22e6R4cjftC8F6YJuNaLjDOfVLYgM,33625
76
76
  pyodide_mkdocs_theme/scripts/de/docs/exo.py,sha256=-RwHlOOTje9eqJDwmoW4QLMWcP2yRWzSgT3iWra6vcg,2702
@@ -112,19 +112,19 @@ pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js,sha256=nCgI4
112
112
  pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js,sha256=xUzvUAsUls2RkaDI6R-hchKhqLaYtXGUQ7nVS02nWfg,16273
113
113
  pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js,sha256=M3_lk5wUmUydOGqojlBJDnAHNKx1bzplZBs-p09s-SM,28779
114
114
  pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js,sha256=UBGGb-D9xpPijn8ye_I1G09VluRyJ6DrSRoww69nfH8,7654
115
- pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js,sha256=SdmYSG2nWvkNPDkcKCq6iA4iigt0hDVT327NkOExUdc,20448
115
+ pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js,sha256=SMueZOXGcx-VsFn0NY7u4PLnMoNZz2Od1gT_gO4XqAQ,20764
116
116
  pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js,sha256=rbJXGISSVJuZaj088PVk-Xu-iQySqJlTYksVrdTc0AE,1679
117
117
  pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js,sha256=JRD9l2ujyD4Xm8sBWb-rPD8w-dLJuet54FjXFaWq5QM,35101
118
118
  pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js,sha256=C4-3Utdh8ATPLUAH1UmeaawHNCNzJxsW4ZVeI3juclc,5588
119
- pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js,sha256=R-iyf5jc-5cxdJ33ydCDhcoMs1hdzS5dusSobbqspus,34716
120
- pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js,sha256=g65x5aCh58Kxe3PCMbMmtoaNq2ZVqZRVAM43hhVINiM,31464
121
- pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js,sha256=8kWT02wifIqg6O8o0R3S9mcPX88dLPb780BfGjxoI6E,28359
119
+ pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js,sha256=Z57mAbxz7kiJBkjNHjfNpifTZwupqqMZBYqk53bmlZ8,34851
120
+ pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js,sha256=JythKLaKWaj_M8goEMm7bS1Soupbk1C2FMfa_iWXeGs,32499
121
+ pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js,sha256=gp3zDjVLZBnk3j_8SHdPtQD8Q5O8x32rxcfVHhhd-PU,28578
122
122
  pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js,sha256=cOBcjttNrMfKwTVv49_JYUlO90vwGtkRc9RdatVBVzE,1318
123
123
  pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js,sha256=gUPxC7PWF_C1pYcYBsL2TTQgHX7e6TbXjXu0ilFwXIM,4189
124
124
  pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js,sha256=6uL25L5x9z8ghEF4ISPdfZX9LhBAhcSO8yC9cDi3sB4,13605
125
125
  pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js,sha256=zsSoDpE-xCbVSWe-Fna8iOh9qV_f9ak8gDOkjAgixY8,6905
126
126
  pyodide_mkdocs_theme/templates/js-scripts/overlord.js,sha256=1ePebj8t8rwxvNtMxtfDLu04aah3rXFIOQ_mPWQFiFA,1628
127
- pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js,sha256=I-m_KbYFxyDibGeKwJpjYXwk06HDcJlSxsvbWL7gy9g,12432
127
+ pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js,sha256=O8TFl1khQ2ay3W_BZlrZC8wv4qmkSYhieRENSJtIWiU,12522
128
128
  pyodide_mkdocs_theme/templates/main.html,sha256=GNFtiplYtkEnTMKsQ4cb0sMVq-dtRLVHdS9BBjmRVBU,30
129
129
  pyodide_mkdocs_theme/templates/mkdocs_theme.yml,sha256=8RC4XSxH2LPLMvhP3DCK_7VvmNw7vqc_XCOAX3kG2rk,1210
130
130
  pyodide_mkdocs_theme/templates/partials/content.html,sha256=FnrwEuDT2Ssta--V9esxvKE3EGpO3O64Iput1ljY2_E,459
@@ -132,16 +132,16 @@ pyodide_mkdocs_theme/templates/partials/copyright.html,sha256=AJRA8Y3HHqeUJ65kqz
132
132
  pyodide_mkdocs_theme/templates/partials/footer.html,sha256=Z50M500ZFaAeUSJxX-o2EuUs4QEP4xYdZVzT5dJB9D8,2146
133
133
  pyodide_mkdocs_theme/templates/partials/header.html,sha256=1Nd0pyqmLiV5bUzDp2XOBE-aT46RSJp9OD2ERhIa37o,2639
134
134
  pyodide_mkdocs_theme/templates/partials/social.html,sha256=XqTYfqQgozSc6ygXk9Qe1dz2daPi2mX5FkadT0p3tJw,892
135
- pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css,sha256=xpqiJFYAlIAG6YSiRe_QMSzOuwgRwiOG8qrZYm7eF4s,6456
135
+ pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css,sha256=-PCFq5YiCdWNCiZH1ZGXz9nfEO3uWykioGfzVvQBWX0,6467
136
136
  pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css,sha256=-TF_v1KsjpPNazQ-nN6bY-hnlfFSzAKuIUNJc9BvtYQ,1078
137
- pyodide_mkdocs_theme/templates/pyodide-css/history.css,sha256=ZcKK1GgtR5C52urlHxtbsDqzOKnvxvKLjCWf40zPUoQ,1063
137
+ pyodide_mkdocs_theme/templates/pyodide-css/history.css,sha256=PJgC0LZLQUFqShfkGcYi0W-AcRcl9PM_aywKZtwm_jk,1091
138
138
  pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css,sha256=VWUXzY4ih8kQi9nIc0BzbcEGVoNRYeLZs52MzammG5I,1947
139
- pyodide_mkdocs_theme/templates/pyodide-css/ide.css,sha256=UX_qKVgckw-TUVmZRvlu-MlXtKN7WcMuHCzLNBVInJU,5638
139
+ pyodide_mkdocs_theme/templates/pyodide-css/ide.css,sha256=cwtiW2FKCfMBmtvVnplgxYNlLpsbLjJs_T8tFjWuvW8,5694
140
140
  pyodide_mkdocs_theme/templates/pyodide-css/qcm.css,sha256=Mh2lg1WFgmHYuI69cxwUtfXuNl97XJkiOzN5jodww_o,4491
141
141
  pyodide_mkdocs_theme/templates/pyodide-css/terminal.css,sha256=emPONURSk0VaNXWPSz7Yj6LaoV8kzRhL0y2D9Q_wybQ,1688
142
142
  pyodide_mkdocs_theme/templates/pyodide-css/testing.css,sha256=V1BZ7UV6mOWd087VtARX0IWOiONQw3OmD-eCGmCggVQ,3293
143
- pyodide_mkdocs_theme-5.4.4.dist-info/LICENSE,sha256=KSvfLkVBOr2TwehfMhrI9Od3dHoyYFpxZH5GQCSflRE,35118
144
- pyodide_mkdocs_theme-5.4.4.dist-info/METADATA,sha256=SADET_an5JcvlAbnejKVpssCDqRppJHlX1MkC0Jsy2c,4471
145
- pyodide_mkdocs_theme-5.4.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
146
- pyodide_mkdocs_theme-5.4.4.dist-info/entry_points.txt,sha256=S7DNQF6CBMaqSasP1CZ_T5elFKAzwwldYuhVZmAUFu0,719
147
- pyodide_mkdocs_theme-5.4.4.dist-info/RECORD,,
143
+ pyodide_mkdocs_theme-5.4.5.dist-info/LICENSE,sha256=KSvfLkVBOr2TwehfMhrI9Od3dHoyYFpxZH5GQCSflRE,35118
144
+ pyodide_mkdocs_theme-5.4.5.dist-info/METADATA,sha256=7q3FaS-9IAZ1v6QFaRg_VNatkpfv40MhLLaSlYHWib8,4471
145
+ pyodide_mkdocs_theme-5.4.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
146
+ pyodide_mkdocs_theme-5.4.5.dist-info/entry_points.txt,sha256=S7DNQF6CBMaqSasP1CZ_T5elFKAzwwldYuhVZmAUFu0,719
147
+ pyodide_mkdocs_theme-5.4.5.dist-info/RECORD,,