diff options
author | Robin Appelman <robin@icewind.nl> | 2018-02-27 16:56:56 +0300 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2018-02-27 16:56:56 +0300 |
commit | 8c9740841feae5ea44a7bfc0e418472d26fc238c (patch) | |
tree | 43e342bfdfb233a0c5731815f4cf2e93e778e8a1 /js | |
parent | 69672bfd5cf3720b00f720e97fdefb7b99de0271 (diff) |
render public link shares
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'js')
-rw-r--r-- | js/PublicPreview.ts | 41 | ||||
-rw-r--r-- | js/Renderer.ts | 4 | ||||
-rw-r--r-- | js/editor.ts | 13 |
3 files changed, 56 insertions, 2 deletions
diff --git a/js/PublicPreview.ts b/js/PublicPreview.ts new file mode 100644 index 0000000..335960a --- /dev/null +++ b/js/PublicPreview.ts @@ -0,0 +1,41 @@ +import {Renderer} from "./Renderer"; + +export class PublicPreview { + private renderer: Renderer; + + private initPromise: JQueryPromise<void> | null = null; + + init() { + if (!this.initPromise) { + const deferred = $.Deferred(); + require.ensure(['./Renderer'], () => { + const {Renderer} = require('./Renderer'); + this.renderer = new Renderer(true); + deferred.resolve(); + }); + this.initPromise = deferred.promise(); + } + return this.initPromise; + } + + attach(previewElement: JQuery, shareToken: string) { + previewElement + .addClass('icon-loading') + .children().remove(); + + $.when( + this.getFileContent(shareToken), + this.init() + ).then(([content]) => { + previewElement + .removeClass('icon-loading'); + + this.renderer.renderText(content, previewElement); + }); + } + + getFileContent(shareToken: string) { + const url = OC.generateUrl('/s/{token}/download', {token: shareToken}); + return $.get(url); + } +} diff --git a/js/Renderer.ts b/js/Renderer.ts index 1e0041a..eafd955 100644 --- a/js/Renderer.ts +++ b/js/Renderer.ts @@ -74,13 +74,13 @@ export class Renderer { } }; - constructor() { + constructor(readonly: boolean = false) { this.md = new MarkdownIt({ linkify: true }); this.md.use(CheckboxPlugin, { checkboxClass: 'checkbox', - readonly: false + readonly: readonly }); this.md.use(AnchorPlugin, { slugify: slugifyHeading diff --git a/js/editor.ts b/js/editor.ts index b7b1204..bf302ab 100644 --- a/js/editor.ts +++ b/js/editor.ts @@ -1,5 +1,6 @@ import {PreviewPlugin} from "./PreviewPlugin"; import {SidebarPreview} from "./SidebarPreview"; +import {PublicPreview} from "./PublicPreview"; const previewPlugin = new PreviewPlugin(); @@ -7,6 +8,18 @@ $(document).ready(function () { if (OCA.Files_Texteditor && OCA.Files_Texteditor.registerPreviewPlugin) { OCA.Files_Texteditor.registerPreviewPlugin('text/markdown', previewPlugin); } + + if ( + $('#isPublic').val() && + $('#mimetype').val() === 'text/markdown' + ) { + const publicPreview = new PublicPreview(); + const previewRoot = $('#preview'); + previewRoot.addClass('text-markdown'); + const previewFrame = $('<div class="public-preview"/>'); + previewRoot.prepend(previewFrame); + publicPreview.attach(previewFrame, $('#sharingToken').val()); + } }); // coerce webpack into loading scripts properly |