orz-mdhtml 0.1.1 → 0.1.2

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.
package/assets/app.js CHANGED
@@ -63,11 +63,15 @@
63
63
  + '<article class="markdown-body" id="orz-doc"></article>'
64
64
  + '<script src="' + f.hljsJs + '"><\/script>'
65
65
  + '<script src="' + f.mermaidJs + '"><\/script>'
66
+ + '<script src="' + f.smilesJs + '"><\/script>'
66
67
  + '<script>try{mermaid.initialize({startOnLoad:false})}catch(e){}<\/script>'
67
68
  + '<script>' + guard(CFG.runtime) + '<\/script>'
68
69
  + '<script>window.__orzEnhance=function(){'
69
70
  + 'try{if(window.hljs){document.querySelectorAll("#orz-doc pre code:not(.hljs)").forEach(function(b){window.hljs.highlightElement(b)})}}catch(e){}'
70
71
  + 'try{if(window.mermaid){window.mermaid.run({querySelector:"#orz-doc .mermaid:not([data-processed])"})}}catch(e){}'
72
+ // SMILES: draw each canvas once (tracked via a JS prop so morphdom keeps
73
+ // the drawn canvas across edits — DOM attributes stay identical).
74
+ + 'try{if(window.SmilesDrawer){document.querySelectorAll("#orz-doc canvas[data-smiles]").forEach(function(c){if(c.__orzSmilesDone)return;var s=c.getAttribute("data-smiles");if(!s)return;c.__orzSmilesDone=true;var dr=new window.SmilesDrawer.Drawer({width:c.width,height:c.height});window.SmilesDrawer.parse(s,function(t){try{dr.draw(t,c,window.__orzSmilesTheme||"light",false)}catch(e){}},function(){})})}}catch(e){}'
71
75
  // Tabs init runs in the runtime on load (empty #orz-doc); re-run now that
72
76
  // content is injected, and after each incremental update. Idempotent.
73
77
  + 'try{if(window.OrzMarkdownRuntime&&window.OrzMarkdownRuntime.initTabs){window.OrzMarkdownRuntime.initTabs(document)}}catch(e){}'
@@ -94,7 +98,20 @@
94
98
 
95
99
  function enhance() {
96
100
  var w = frame.contentWindow;
97
- if (w && typeof w.__orzEnhance === 'function') { try { w.__orzEnhance(); } catch (e) {} }
101
+ if (!w) return;
102
+ try { w.__orzSmilesTheme = themeById(currentTheme).scheme === 'dark' ? 'dark' : 'light'; } catch (e) {}
103
+ if (typeof w.__orzEnhance === 'function') { try { w.__orzEnhance(); } catch (e) {} }
104
+ }
105
+
106
+ // Re-draw SMILES canvases (fresh, cleared) so they pick up the current
107
+ // light/dark theme; used after a theme switch.
108
+ function redrawSmiles() {
109
+ var doc = frameDoc(); if (!doc) return;
110
+ Array.prototype.forEach.call(doc.querySelectorAll('#orz-doc canvas[data-smiles]'), function (c) {
111
+ var fresh = c.cloneNode(false); // drops the drawing + the __orzSmilesDone JS prop
112
+ if (c.parentNode) c.parentNode.replaceChild(fresh, c);
113
+ });
114
+ enhance();
98
115
  }
99
116
  // CDN libs inside the iframe load async — retry enhance a few times.
100
117
  function enhanceSoon() { enhance(); setTimeout(enhance, 150); setTimeout(enhance, 600); setTimeout(enhance, 1500); }
@@ -330,6 +347,7 @@
330
347
  root.setAttribute('data-chrome', t.scheme);
331
348
  if (themeSelect) themeSelect.value = id;
332
349
  applyThemeToFrame(t);
350
+ redrawSmiles(); // pick up the new light/dark SMILES palette
333
351
  if (cm) cm.setOption('theme', cmTheme(t.scheme));
334
352
  markDirty();
335
353
  }
@@ -466,19 +484,30 @@
466
484
  }
467
485
 
468
486
  // ---- version check -------------------------------------------------------
487
+ // True only when `a` is a strictly newer semver than `b` (so an older
488
+ // resolved version never shows a bogus "update available").
489
+ function isNewer(a, b) {
490
+ var pa = String(a).split('.'), pb = String(b).split('.');
491
+ for (var i = 0; i < 3; i++) {
492
+ var x = parseInt(pa[i], 10) || 0, y = parseInt(pb[i], 10) || 0;
493
+ if (x > y) return true;
494
+ if (x < y) return false;
495
+ }
496
+ return false;
497
+ }
469
498
  function checkVersion() {
470
499
  if (!CFG.versionManifest || !CFG.rendererVersion) return;
471
500
  try {
472
501
  var cached = JSON.parse(localStorage.getItem('orz-mdhtml:vercheck') || 'null');
473
502
  if (cached && (Date.now() - cached.t) < 86400000) {
474
- if (cached.v && cached.v !== CFG.rendererVersion) showUpdate(cached.v);
503
+ if (cached.v && isNewer(cached.v, CFG.rendererVersion)) showUpdate(cached.v);
475
504
  return;
476
505
  }
477
506
  } catch (e) {}
478
507
  fetch(CFG.versionManifest).then(function (r) { return r.json(); }).then(function (j) {
479
508
  var latest = j && j.version;
480
509
  try { localStorage.setItem('orz-mdhtml:vercheck', JSON.stringify({ t: Date.now(), v: latest })); } catch (e) {}
481
- if (latest && latest !== CFG.rendererVersion) showUpdate(latest);
510
+ if (latest && isNewer(latest, CFG.rendererVersion)) showUpdate(latest);
482
511
  }).catch(function () {});
483
512
  }
484
513
  function showUpdate(latest) {
package/dist/cli.js CHANGED
@@ -140,6 +140,7 @@ function main() {
140
140
  hljsDarkCss: `${CDN.hl}/styles/atom-one-dark.min.css`,
141
141
  hljsJs: `${CDN.hl}/highlight.min.js`,
142
142
  mermaidJs: 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js',
143
+ smilesJs: 'https://cdn.jsdelivr.net/npm/smiles-drawer@1.0.10/dist/smiles-drawer.min.js',
143
144
  },
144
145
  editorLibs: {
145
146
  codemirrorCss: `${CDN.cm}/codemirror.min.css`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orz-mdhtml",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Generate self-contained, editable .md.html files from Markdown using orz-markdown — preview + edit modes, source-aware copy, in-place save.",
5
5
  "type": "module",
6
6
  "bin": {