1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-20 13:49:42 +02:00
documize/gui/public/tinymce/plugins/noneditable/plugin.js

119 lines
4.1 KiB
JavaScript
Raw Normal View History

2017-12-09 12:42:35 +00:00
(function () {
2018-01-19 11:36:38 +00:00
var noneditable = (function () {
'use strict';
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
var PluginManager = tinymce.util.Tools.resolve('tinymce.PluginManager');
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
var Tools = tinymce.util.Tools.resolve('tinymce.util.Tools');
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
var getNonEditableClass = function (editor) {
return editor.getParam('noneditable_noneditable_class', 'mceNonEditable');
2017-12-09 12:42:35 +00:00
};
2018-01-19 11:36:38 +00:00
var getEditableClass = function (editor) {
return editor.getParam('noneditable_editable_class', 'mceEditable');
};
var getNonEditableRegExps = function (editor) {
var nonEditableRegExps = editor.getParam('noneditable_regexp', []);
if (nonEditableRegExps && nonEditableRegExps.constructor === RegExp) {
return [nonEditableRegExps];
} else {
return nonEditableRegExps;
2017-12-09 12:42:35 +00:00
}
2018-01-19 11:36:38 +00:00
};
2018-01-25 16:14:37 +00:00
var $_18xs49gljcun3ypj = {
2018-01-19 11:36:38 +00:00
getNonEditableClass: getNonEditableClass,
getEditableClass: getEditableClass,
getNonEditableRegExps: getNonEditableRegExps
};
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
var hasClass = function (checkClassName) {
return function (node) {
return (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;
2017-12-09 12:42:35 +00:00
};
2018-01-19 11:36:38 +00:00
};
var replaceMatchWithSpan = function (editor, content, cls) {
return function (match) {
var args = arguments, index = args[args.length - 2];
var prevChar = index > 0 ? content.charAt(index - 1) : '';
if (prevChar === '"') {
return match;
2017-12-09 12:42:35 +00:00
}
2018-01-19 11:36:38 +00:00
if (prevChar === '>') {
var findStartTagIndex = content.lastIndexOf('<', index);
if (findStartTagIndex !== -1) {
var tagHtml = content.substring(findStartTagIndex, index);
if (tagHtml.indexOf('contenteditable="false"') !== -1) {
return match;
2017-12-09 12:42:35 +00:00
}
}
}
2018-01-19 11:36:38 +00:00
return '<span class="' + cls + '" data-mce-content="' + editor.dom.encode(args[0]) + '">' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '</span>';
2017-12-09 12:42:35 +00:00
};
2018-01-19 11:36:38 +00:00
};
var convertRegExpsToNonEditable = function (editor, nonEditableRegExps, e) {
var i = nonEditableRegExps.length, content = e.content;
if (e.format === 'raw') {
return;
}
while (i--) {
2018-01-25 16:14:37 +00:00
content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, $_18xs49gljcun3ypj.getNonEditableClass(editor)));
2018-01-19 11:36:38 +00:00
}
e.content = content;
};
var setup = function (editor) {
var editClass, nonEditClass;
var contentEditableAttrName = 'contenteditable';
2018-01-25 16:14:37 +00:00
editClass = ' ' + Tools.trim($_18xs49gljcun3ypj.getEditableClass(editor)) + ' ';
nonEditClass = ' ' + Tools.trim($_18xs49gljcun3ypj.getNonEditableClass(editor)) + ' ';
2018-01-19 11:36:38 +00:00
var hasEditClass = hasClass(editClass);
var hasNonEditClass = hasClass(nonEditClass);
2018-01-25 16:14:37 +00:00
var nonEditableRegExps = $_18xs49gljcun3ypj.getNonEditableRegExps(editor);
2018-01-19 11:36:38 +00:00
editor.on('PreInit', function () {
if (nonEditableRegExps.length > 0) {
editor.on('BeforeSetContent', function (e) {
convertRegExpsToNonEditable(editor, nonEditableRegExps, e);
});
}
editor.parser.addAttributeFilter('class', function (nodes) {
var i = nodes.length, node;
while (i--) {
node = nodes[i];
if (hasEditClass(node)) {
node.attr(contentEditableAttrName, 'true');
} else if (hasNonEditClass(node)) {
node.attr(contentEditableAttrName, 'false');
}
2017-12-09 12:42:35 +00:00
}
2018-01-19 11:36:38 +00:00
});
editor.serializer.addAttributeFilter(contentEditableAttrName, function (nodes) {
var i = nodes.length, node;
while (i--) {
node = nodes[i];
if (!hasEditClass(node) && !hasNonEditClass(node)) {
continue;
2017-12-09 12:42:35 +00:00
}
2018-01-19 11:36:38 +00:00
if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {
node.name = '#text';
node.type = 3;
node.raw = true;
node.value = node.attr('data-mce-content');
} else {
node.attr(contentEditableAttrName, null);
2017-12-09 12:42:35 +00:00
}
2018-01-19 11:36:38 +00:00
}
2017-12-09 12:42:35 +00:00
});
2018-01-19 11:36:38 +00:00
});
};
2018-01-25 16:14:37 +00:00
var $_2nojchgjjcun3ype = { setup: setup };
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
PluginManager.add('noneditable', function (editor) {
2018-01-25 16:14:37 +00:00
$_2nojchgjjcun3ype.setup(editor);
2018-01-19 11:36:38 +00:00
});
var Plugin = function () {
};
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
return Plugin;
2017-12-09 12:42:35 +00:00
2018-01-19 11:36:38 +00:00
}());
})()