%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/assets/374a8aa5/wrapper/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/assets/374a8aa5/wrapper/plugin.js |
/**
* plugin.js
*
* @link https://www.humhub.org/
* @copyright Copyright (c) 2022 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
* @author Lucas Bartholemy <lucas@bartholemy.com>
*/
tinymce.PluginManager.add('wrapper', function(editor, url) {
const config = editor.getParam('wrapper');
const wrapper = {
items: [
{tag: 'div', class: 'panel panel-default', style: 'background:#ededed; padding:5px; margin:-1rem'},
{tag: 'div', class: 'panel-body', style: 'background:#fff; border-radius:4px; box-shadow:0 0 3px #dadada; padding:10px'}
],
wrap: function (content) {
return this.startHtml() + content + this.endHtml();
},
unwrap: function (content) {
const regexp = new RegExp('^' + this.regexp('(.+?)') + '$', 'is');
return content.replace(regexp, '$1')
}
};
const onAction = (btn) => {
const content = editor.getContent();
if (wrapper.isActive()) {
editor.setContent(wrapper.unwrap(content));
btn.setActive(false);
} else {
editor.setContent(wrapper.wrap(content));
btn.setActive(true);
}
editor.focus();
}
editor.ui.registry.addToggleButton('wrapper', {
icon: 'unselected',
text: config.text,
tooltip: config.tooltip,
onAction,
onSetup: (btn) => {
btn.setActive(wrapper.isActive());
editor.on('NodeChange', () => {
btn.setActive(wrapper.isActive());
wrapper.cleanup();
});
}
});
wrapper.isActive = function () {
const nodes = editor.dom.getRoot().childNodes;
return nodes.length === 1 &&
editor.dom.is(nodes[0], this.selector(0)) &&
nodes[0].childNodes.length === 1 &&
editor.dom.is(nodes[0].childNodes[0], this.selector(1));
}
wrapper.startTag = function (i) {
if (typeof this.items[i] === 'undefined') {
return '';
}
let html = '<' + this.items[i].tag;
if (this.items[i].class) {
html += ' class="' + this.items[i].class + '"';
}
html += '>';
return html;
}
wrapper.endTag = function (i) {
if (typeof this.items[i] === 'undefined') {
return '';
}
return '</' + this.items[i].tag + '>';
}
wrapper.startHtml = function (separator) {
if (typeof separator === 'undefined') {
separator = '';
}
let html = '';
for (let i = 0; i < this.items.length; i++) {
html += this.startTag(i);
if (i < this.items.length - 1) {
html += separator;
}
}
return html;
}
wrapper.endHtml = function (separator) {
if (typeof separator === 'undefined') {
separator = '';
}
let html = '';
for (let i = this.items.length - 1; i >=0; i--) {
html += this.endTag(i);
if (i > 0) {
html += separator;
}
}
return html;
}
wrapper.selector = function (index) {
const item = this.items[index];
let selector = item.tag;
if (item.class) {
selector += '.' + item.class.replace(' ', '.');
}
return selector;
}
wrapper.regexp = function (separator) {
return this.startHtml('.*?') + separator + this.endHtml('.*?');
}
wrapper.cleanup = function () {
const content = editor.getContent();
let cleanContent = content;
const emptyLine = '<p> </p>';
const emptyBody = this.startTag(1) + ' ' + this.endTag(1);
const nl = '[\r\n]*';
if (cleanContent.match(new RegExp(emptyLine, 'i'))) {
const emptyLineRegexp = '(' + nl + emptyLine + nl + ')*';
cleanContent = cleanContent.replace(new RegExp('^' + emptyLineRegexp + '(' + this.regexp('.+?') + ')' + emptyLineRegexp + '$', 'is'), '$2');
}
if (cleanContent.match(new RegExp(emptyBody, 'i'))) {
cleanContent = cleanContent
.replace(new RegExp(this.endTag(1) + nl + emptyBody, 'ig'), emptyLine + this.endTag(1))
.replace(new RegExp(this.startTag(0) + nl + emptyBody, 'ig'), this.startHtml() + emptyLine);
}
if (cleanContent !== content) {
editor.setContent(cleanContent);
}
}
wrapper.initStyles = function () {
let styles = ''
let parentSelector = '';
for (let i = 0; i < this.items.length; i++) {
styles += parentSelector + this.selector(i) + ' {' + this.items[i].style + '}';
parentSelector = this.selector(i) + ' ';
}
editor.contentStyles.push(styles);
}
wrapper.initStyles();
})