TinyMCE 5 - отображать только первое слово в текстовой области и скрывать структуру - PullRequest
0 голосов
/ 09 февраля 2020

Я использую tinymce 5 для добавления синонима к слову:

enter image description here

Я добавляю код, подобный следующему - @addSynonym("Mike"," John"," Teresa") - поскольку я использую шаблонный язык фона в фоновом режиме, который имеет @addSynonym() -метод и случайным образом выбирает слово.

Я хотел бы отображать только первое слово в текстовом редакторе и отмечено желтым.

Примерно так:

<p>Hello, <span style="background-color: yellow;">Mike!</span></p>

enter image description here

Найдите ниже моего минимального жизнеспособного примера:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script>

    <script>
        var dialogConfig =  {
            title: 'Add synonym',
            body: {
                type: 'panel',
                items: [
                    {
                        type: 'input',
                        name: 'synonymData',
                        label: 'Enter synonyms comma seperated'
                    }
                ]
            },
            buttons: [
                {
                    type: 'cancel',
                    name: 'closeButton',
                    text: 'Cancel'
                },
                {
                    type: 'submit',
                    name: 'submitButton',
                    text: 'Submit',
                    primary: true
                }
            ],
            initialData: {
                synonymData: 'synonym1, synonym2, synonym3',
            },
            onSubmit: function (api) {
                var data = api.getData();
                var dataArr = data.synonymData.split(',');
                var stringData = dataArr.join('\",\"')

                tinymce.activeEditor.execCommand('mceInsertContent', false, '@addSynonym(\"' + stringData + '\")');
                api.close();
            }
        };

        tinymce.init({
            selector: '#mytextarea',
            plugins: "code",
            toolbar: ['dialog-example-btn', 'code'],
            setup: function (editor) {
                editor.ui.registry.addButton('dialog-example-btn', {
                    text: 'Add synonym',
                    onAction: function () {
                        editor.windowManager.open(dialogConfig)
                    }
                })
            }
        });

    </script>

</head>

<body>
<form method="post">
    <textarea id="mytextarea">Hello, World!</textarea>
</form>
</body>
</html>

Есть предложения, как реализовать этот вариант использования?

1 Ответ

1 голос
/ 13 февраля 2020

TinyMCE (по своей сути) просто рендерит HTML, который вы передаете редактору. Если вы хотите увидеть одну вещь визуально, но держитесь за другие данные, вам нужно будет найти способ трансформировать ваш код, чтобы получить желаемый визуальный результат.

Возможно, вы могли бы использовать атрибуты данных для хранения «реальных» данных и просто показать, что вы хотите? Для грубого примера:

<span data-function="addSynonym" data-options="['Mike', 'John', 'Theresa']">
    <span style="background-color: yellow;">Mike</span>
</span>

Это позволит вам не потерять фактические данные, а по-прежнему отображать их так, как вам нравится. Когда данные извлекаются из TinyMCE для хранения, вы просто изменяете процесс и воссоздаете код, необходимый для дальнейшей обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...