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 | |
parent | 69672bfd5cf3720b00f720e97fdefb7b99de0271 (diff) |
render public link shares
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | appinfo/app.php | 8 | ||||
-rw-r--r-- | css/preview.css | 24 | ||||
-rw-r--r-- | js/PublicPreview.ts | 41 | ||||
-rw-r--r-- | js/Renderer.ts | 4 | ||||
-rw-r--r-- | js/editor.ts | 13 |
5 files changed, 88 insertions, 2 deletions
diff --git a/appinfo/app.php b/appinfo/app.php index 33abf8e..55317c0 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -18,3 +18,11 @@ $eventDispatcher->addListener( OCP\Util::addStyle('files_markdown', '../build/styles'); OCP\Util::addStyle('files_markdown', 'preview'); }); + + +$eventDispatcher->addListener( + 'OCA\Files_Sharing::loadAdditionalScripts', + function () { + OCP\Util::addScript('files_markdown', '../build/editor'); + OCP\Util::addStyle('files_markdown', 'preview'); + }); diff --git a/css/preview.css b/css/preview.css index f0cda70..fe28fa0 100644 --- a/css/preview.css +++ b/css/preview.css @@ -15,6 +15,26 @@ font-size: 14px; } +/*hide plain text preview*/ +#preview.text-markdown #imgframe { + display: none; +} + +#preview.text-markdown .public-preview { + height: 75%; + width: 80%; + margin: 0 auto; + max-width: 1100px; + padding: 0 20px !important; + box-sizing: border-box; + font-size: 18px; + line-height: 1.6em; + min-height: 440px; + color: #333; + text-align: left; + margin-bottom: 170px !important; +} + #preview.text-markdown input[type="checkbox"].checkbox { display: none; } @@ -31,6 +51,10 @@ color: #4183C4; } +#preview.text-markdown a.button { + color: #545454; +} + #preview.text-markdown a.absent { color: #cc0000; } 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 |