From 23d326df38def4825382c6adaae23111cc4dfd0b Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Tue, 2 Aug 2022 14:44:44 +0800 Subject: [PATCH] =?UTF-8?q?notebook=E6=96=87=E4=BB=B6markdown=E4=B8=AD?= =?UTF-8?q?=E7=BA=AFhtml=E4=B8=AD=E7=9A=84=E5=9B=BE=E7=89=87=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/repo/view_file.tmpl | 69 +++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/templates/repo/view_file.tmpl b/templates/repo/view_file.tmpl index 91ec9b0bb8..72446c3fee 100755 --- a/templates/repo/view_file.tmpl +++ b/templates/repo/view_file.tmpl @@ -133,16 +133,79 @@ function submitDeleteForm() { $("#delete-file-form").submit() } } + + +const baseUrls = {}; +const justDomain = /^[^:]+:\/*[^/]*$/; +const protocol = /^([^:]+:)[\s\S]*$/; +const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; +const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; +function rtrim(str, c, invert) { + const l = str.length; + if (l === 0) { + return ''; + } + let suffLen = 0; + while (suffLen < l) { + const currChar = str.charAt(l - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.slice(0, l - suffLen); +} +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + const relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + return base.replace(domain, '$1') + href; + } else { + return base + href; + } +} function showNoteBook(){ - var isNoteBook = {{.IsNoteBook}} + var isNoteBook = {{.IsNoteBook}}; if (isNoteBook) { - var jsonStr = "{{.FileContent}}" + var jsonStr = "{{.FileContent}}"; + var baseUrl={{.FileParentURL}}; nb.markdown.setOptions({ - baseUrl: {{.FileParentURL}} + baseUrl: baseUrl }); var notebook = nb.parse(JSON.parse(jsonStr)); var rendered = notebook.render(); $("#notebook").append(rendered); + + $("#notebook img").each(function(){ + + var oldSrc = $(this).attr('src'); + if (!originIndependentUrl.test(oldSrc)){ + var newSrc=resolveUrl(baseUrl,oldSrc); + $(this).attr('src', newSrc); + + } + + }); Prism.highlightAll(); } } -- 2.34.1