| @@ -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(); | |||
| } | |||
| } | |||