Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/files_markdown.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-02-27 16:56:56 +0300
committerRobin Appelman <robin@icewind.nl>2018-02-27 16:56:56 +0300
commit8c9740841feae5ea44a7bfc0e418472d26fc238c (patch)
tree43e342bfdfb233a0c5731815f4cf2e93e778e8a1
parent69672bfd5cf3720b00f720e97fdefb7b99de0271 (diff)
render public link shares
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--appinfo/app.php8
-rw-r--r--css/preview.css24
-rw-r--r--js/PublicPreview.ts41
-rw-r--r--js/Renderer.ts4
-rw-r--r--js/editor.ts13
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