Add local 3D model viewer (three.js + occt-import-js) for STEP/STL, 8px box + caption; embed guide; licenses
This commit is contained in:
@@ -40,6 +40,10 @@ no external dependencies (except `highlight.js`, vendored in `lib/`).
|
||||
- **Search** (client-side over a generated index), **RSS feed** and **sitemap.xml**.
|
||||
- **Widget rendering** for Mermaid, Excalidraw (canvas) and MindElixir (mind map) notes, with a
|
||||
collapsible, highlighted "Source" block and copy button.
|
||||
- **3D models**: `.step` / `.stp` / `.stl` files (as file notes or inline attachments) render
|
||||
in an interactive three.js viewer (STEP via occt-import-js, OpenCascade WASM) – drag to
|
||||
rotate, scroll to zoom, 8px rounded box with caption. All libraries are hosted locally.
|
||||
See [docs/embed-3d-model.md](docs/embed-3d-model.md).
|
||||
- Code highlighting (highlight.js + line numbers) and copy buttons on all code boxes.
|
||||
- Optional "Buy me a coffee" button with locally-hosted Cookie font.
|
||||
- `blog_generator` (backend) builds index/feed/sitemap/search-data; `blog_publish_manager` moves
|
||||
@@ -55,9 +59,11 @@ no external dependencies (except `highlight.js`, vendored in `lib/`).
|
||||
| `theme/favicon.svg` | default site favicon | code (SVG) |
|
||||
| `theme/cookie.woff2` | "Cookie" font for the Buy me a coffee button | file, `font/woff2` |
|
||||
| `lib/highlight.js` | vendored highlight.js | code, `application/javascript` |
|
||||
| `lib/3d/*` | three.js + OrbitControls + STLLoader + occt-import-js (WASM) for the 3D viewer | code / file |
|
||||
| `lib/hljs_line_numbers.js` | highlight.js line-numbers plugin | code |
|
||||
| `scripts/*.js` | frontend share snippets (content is pasted **verbatim** into a code note, including the `<script>`/`<style>` wrapper) | code |
|
||||
| `templates/blog_article.html` | article template with promoted labels | text |
|
||||
| `docs/embed-3d-model.md` | how to embed STEP/STL in a note | – |
|
||||
| `examples/*` | sample category logo + menu icon script (ignis8) | code / SVG |
|
||||
| `generated/*` | reference output, **regenerated automatically** by `blog_generator.js` | code / xml |
|
||||
|
||||
@@ -123,6 +129,12 @@ Under **`.blog`** create one code note per file, using the file name as the note
|
||||
| `search header` | `scripts/search_header.js` | `text/html` |
|
||||
| `note fallback` | `scripts/note_fallback.js` | `text/html` |
|
||||
| `menu date sort` | `scripts/menu_date_sort.js` | `text/html` |
|
||||
| `3d model viewer` | `scripts/3d_model_viewer.js` | `text/html` |
|
||||
| `three.js` | `lib/3d/three.min.js` | `application/javascript` |
|
||||
| `three orbit controls` | `lib/3d/OrbitControls.js` | `application/javascript` |
|
||||
| `three stl loader` | `lib/3d/STLLoader.js` | `application/javascript` |
|
||||
| `occt-import-js` | `lib/3d/occt-import-js.js` | `application/javascript` |
|
||||
| `occt-import-js.wasm` | `lib/3d/occt-import-js.wasm` | `application/wasm` (file note) |
|
||||
| `feed.xml` | `generated/feed.xml` | code (regenerated) |
|
||||
| `sitemap.xml` | `generated/sitemap.xml` | code (regenerated) |
|
||||
| `state_map` | `generated/state_map.js` | `text/html` (regenerated) |
|
||||
@@ -147,7 +159,7 @@ mime `application/javascript;env=backend`) and `blog_publish_manager` (from
|
||||
| `iconClass` | `bx bx-edit-alt` | – |
|
||||
| `~shareCss` | → `blog_share_theme.css` | yes |
|
||||
| `~shareFavicon` | → `favicon` | yes |
|
||||
| `~shareHtml` | → `table column hover`, `blog card click`, `garden row click`, `code note highlight`, `code copy & lines`, `state_map`, `title state badge`, `bmc button`, `logo share alias`, `blog_data`, `prev next`, `reading time`, `search header`, `ignis8 menu icon` (optional), `note fallback`, `menu date sort` | yes |
|
||||
| `~shareHtml` | → `table column hover`, `blog card click`, `garden row click`, `code note highlight`, `code copy & lines`, `state_map`, `title state badge`, `bmc button`, `logo share alias`, `blog_data`, `prev next`, `reading time`, `search header`, `ignis8 menu icon` (optional), `note fallback`, `menu date sort`, `3d model viewer` | yes |
|
||||
| `~shareHtml` | → `hide home title` | **no** (index only) |
|
||||
| `~runOnNoteContentChange`, `~runOnAttributeChange`, `~runOnNoteCreation`, `~runOnNoteTitleChange`, `~runOnAttributeCreation`, `~runOnBranchDeletion`, `~runOnChildNoteCreation` | → `blog_generator` | yes |
|
||||
| `~runOnAttributeChange`, `~runOnAttributeCreation` | → `blog_publish_manager` | yes |
|
||||
@@ -194,6 +206,11 @@ placeholder tokens. Replace every `__TOKEN__` with the real note ID of the corre
|
||||
| `__HLJS_ID__` | `highlight.js` |
|
||||
| `__HLJS_LN_ID__` | `hljs line numbers plugin` |
|
||||
| `__COOKIE_FONT_ID__` | `Cookie` |
|
||||
| `__THREE_ID__` | `three.js` |
|
||||
| `__THREE_ORBIT_ID__` | `three orbit controls` |
|
||||
| `__THREE_STL_ID__` | `three stl loader` |
|
||||
| `__OCCT_JS_ID__` | `occt-import-js` |
|
||||
| `__OCCT_WASM_ID__` | `occt-import-js.wasm` |
|
||||
| `__TITLE_ICON_ID__` | (only needed for the `ignis8` example) |
|
||||
| `__CATEGORY_NOTE_ID__` | (only needed for the `ignis8` example) |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user