From f2f8e36f6b62d9a762ecc3332c921fd253b622d4 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 31 Aug 2015 13:58:42 +0200 Subject: Add api that allows other app to register "previews" by mimetype --- js/editor.js | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'js') diff --git a/js/editor.js b/js/editor.js index 8fef31e..c8321a8 100644 --- a/js/editor.js +++ b/js/editor.js @@ -42,6 +42,22 @@ var Files_Texteditor = { */ saveTimer: null, + /** + * preview plugins by mimetype + */ + previewPlugins: {}, + + registerPreviewPlugin: function(mimeType, plugin) { + this.previewPlugins[mimeType] = plugin; + }, + + /** + * preview element + */ + preview: null, + + previewPluginOnChange: null, + /** * Save handler, triggered by the button, or keyboard */ @@ -168,6 +184,10 @@ var Files_Texteditor = { OCA.Files_Texteditor._onUnsaved(); } } + if (this.previewPluginOnChange) { + var text = window.aceEditor.getSession().getValue(); + this.previewPluginOnChange(text, this.preview); + } }, /** @@ -187,6 +207,9 @@ var Files_Texteditor = { this.$container = container; this.registerFileActions(); this.oldTitle = document.title; + $.each(this.previewPlugins, function(mime, plugin) { + plugin.init(); + }); }, /** @@ -227,7 +250,7 @@ var Files_Texteditor = { container.html( '
' +'
' - +'
'); + +'
'); $('#app-content').append(container); // Get the file data @@ -246,6 +269,17 @@ var Files_Texteditor = { _self.loadControlBar(file, _self.currentContext); window.aceEditor.getSession().on('change', _self.setupAutosave); window.aceEditor.focus(); + + if (_self.previewPlugins[file.mime]){ + _self.preview = container.find('#preview'); + _self.preview.addClass(file.mime.replace('/','-')); + container.find('#editor_container').addClass('hasPreview'); + _self.previewPluginOnChange = _.debounce(_self.previewPlugins[file.mime].preview, 200); + var text = window.aceEditor.getSession().getValue(); + _self.previewPluginOnChange(text, _self.preview); + } else { + _self.previewPluginOnChange = null; + } }, function(message){ // Oh dear @@ -327,7 +361,7 @@ var Files_Texteditor = { } ); // Bind the edit event - window.aceEditor.getSession().on('change', this._onEdit); + window.aceEditor.getSession().on('change', this._onEdit.bind(this)); // Bind save trigger window.aceEditor.commands.addCommand({ name: "save", -- cgit v1.2.3