diff --git a/doc/assets/style.css b/doc/assets/style.css index 1c7c920..82245c7 100644 --- a/doc/assets/style.css +++ b/doc/assets/style.css @@ -296,4 +296,10 @@ td.hljs-ln-numbers { /* for block of code */ .hljs-ln td.hljs-ln-code { padding-left: 10px; +} + +model-viewer{ + /*border: 1px solid #333f67;*/ + width: 100%; + height: 350px; } \ No newline at end of file diff --git a/doc/controllers/doccontroller.lua b/doc/controllers/doccontroller.lua index 211597a..54235de 100644 --- a/doc/controllers/doccontroller.lua +++ b/doc/controllers/doccontroller.lua @@ -7,10 +7,12 @@ end local pre_process_md = function(str, obj) local content = str - for capture in str:gmatch("(%[%[@book:image:.*%]%])") do - local apath = capture:match("%[%[@book:image:(.*)%]%]") + for capture in str:gmatch("(%[%[@book:image:[^\n%]]*%]%])") do + local apath = capture:match("%[%[@book:image:([^\n%]]*)%]%]") local pattern = capture:gsub("%[", "%%["):gsub("%]", "%%]") if apath then + apath = apath:gsub(" ", "%%%%20") + print(apath) content = str:gsub(pattern, "![](" .. HTTP_ROOT .. "/" .. obj.name .. "/asset/" .. apath .. ")") @@ -19,6 +21,24 @@ local pre_process_md = function(str, obj) return content end +local post_process_md = function(str, obj) + local content = str + local has_model = false + for capture in str:gmatch("(%[%[@book:3dmodel:[^\n%]]*%]%])") do + local apath = capture:match("%[%[@book:3dmodel:([^\n%]]*)%]%]") + local pattern = capture:gsub("%[", "%%["):gsub("%]", "%%]") + if apath then + --apath = utils.urlencode(apath):gsub("%%", "%%%%") + apath = apath:gsub(" ", "%%20") + content = str:gsub(pattern, + "") + has_model = true + end + end + return content, has_model +end function DocController:loadTOC() local path = self.path_map.local_path .. "/meta.json" local result = {error = false} @@ -122,19 +142,19 @@ function DocController:index(...) path = self.path_map.local_path .. "/INTRO.md" end if path and ulib.exists(path) then + local has_3d = false local file = io.open(path, "r") local content = "" local md = require("md") - local callback = function(s) - content = content..s - end - md.to_html(file:read("*a"), callback) + local callback = function(s) content = content .. s end + md.to_html(pre_process_md(file:read("*a"), self), callback) file.close() + content, has_3d = post_process_md(content, self) -- replace some display plugins - content = pre_process_md(content, self) self.template:setView("index", "index") self.template:set("data", content) + self.template:set("has_3d", has_3d) else self.template:setView("notfound", "index") end diff --git a/doc/router.lua b/doc/router.lua index 953a75e..ab256b8 100644 --- a/doc/router.lua +++ b/doc/router.lua @@ -22,6 +22,8 @@ POST_LIMIT = 10 -- require needed library require(BASE_FRW.."silk.api") +POLICY.mimes["model/gltf-binary"] = true + if REQUEST.r then REQUEST.r = REQUEST.r:gsub("%:", "/") end diff --git a/doc/views/default/layout.ls b/doc/views/default/layout.ls index e2abf21..66a3826 100644 --- a/doc/views/default/layout.ls +++ b/doc/views/default/layout.ls @@ -1,6 +1,7 @@ @@ -13,10 +14,14 @@ local elinks = __main__:get("elinks") rel="stylesheet" type="text/css" href="/rst/katex/katex.min.css" /> - + + + + diff --git a/mimes.json b/mimes.json index 7cc007c..f4fd73f 100644 --- a/mimes.json +++ b/mimes.json @@ -19,5 +19,9 @@ "wasm": { "mime": "application/wasm", "binary": true + }, + "glb": { + "mime": "model/gltf-binary", + "binary": true } } \ No newline at end of file