koco-tinymce
Version:
Knockout Components handlers and utilities for the TinyMCE editor
50 lines (41 loc) • 1.72 kB
JavaScript
// Copyright (c) CBC/Radio-Canada. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
import $ from 'jquery';
import urls from 'koco-url-utilities';
import mceDialogFactory from 'tinymce-dialog-factory';
export default mceDialogFactory.createMcePlugin({
pluginName: 'htmlSnippet',
title: 'html-snippet.desc',
image: urls.url('/images/snippet.png'),
pluginInfo: {
longname: 'Html snippet plugin',
author: 'Plate-forme',
version: '1.0'
},
fromDialogResultToMarkup: fromDialogResultToMarkup,
fromMarkupToDialogInput: fromMarkupToDialogInput,
dialog: 'html-snippets'
});
function fromDialogResultToMarkup(dialogResult) {
var markup = '<figure class="snippet mceNonEditable" data-html-snippet-id="' + dialogResult.snippetId + '">';
markup += '<div class="placeholder">' + dialogResult.snippetBody + ' </div>';
markup += '</figure>';
return markup;
}
function fromMarkupToDialogInput(ed) {
var $figure = $(ed.selection.getNode()).closest('figure.snippet');
var snippetId = $figure.attr('data-html-snippet-id') || 0;
var markup = $figure.find('.placeholder > .sandbox').attr('srcdoc') || '';
var snippetBody = markup
.replace(/^( )+/gi, '')
.replace(/( )+$/gi, '')
.replace(/mce-text\//gi, 'text/')
.replace(/data-mce-src="[^"]*"/gi, '')
.replace(/((?!(\n)).|^)<(?!!\[CDATA\[)/gi, '$1\n<') // < not preceded by new line and not followed by ![CDATA[
.replace(/^\n</i, '<');
return {
isPredefinedSnippetsShown: true,
snippetBody: snippetBody,
snippetId: snippetId
};
}