Невозможно передать параметр из команды в конвертер

Я пытаюсь отредактировать фактический существующий плагин выделения, чтобы иметь возможность добавлять цвет текста, настраиваемый из аргумента команды, что означает, что если вы установите RGB или шестнадцатеричный цвет, он будет выбран при создании атрибута представления style = 'color: ПАРАМЕТР"

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

Это означает, что значение команды не передается в преобразователь.

Я не могу найти способ передачи входной информации из команды для использования непосредственно в конвертере, чтобы эта функция работала.

Нормальное поведение в этом плагине делает невозможным использование 16 миллионов цветов из RGB, и для этого требуется устаревшая модель определенных цветов.

Вы можете видеть / редактировать / использовать то, что я сделал в этом репо

https://github.com/klys/ckeditor5-highlight-inline

В этой части конвертер создает элемент шрифта с цветом стиля, но с неправильным значением значения цвета.

editor.conversion.attributeToElement( {
        model: HIGHLIGHT,
            view: {
                name: 'font',
                styles: {
                    'color': true
                },
                priority: 5,
                model: {
                    key: 'highlight',
                    value: viewElement => viewElement.getAttribute( 'color' )
                },
                type:'pen'
            }
    } );

И это отредактированный исполнитель команд из исходного плагина, который я редактирую, чтобы удовлетворить потребности этой функции.

    execute( color ) {

    const model = this.editor.model;
    const document = model.document;
    const selection = document.selection;

    //const highlighter = options.value;
    /*var __model;
    for ( const option of options ) {
     __model = new Model( {
            model: 'color model',
            class: 'color-class',
            title: 'color pen',
            color: option.value,
            type: 'pen'
        } );
    }
    const highlighter = __model;*/

    model.change( writer => {
        const ranges = model.schema.getValidRanges( selection.getRanges(), 'highlight' );

        if ( selection.isCollapsed ) {
            const position = selection.getFirstPosition();

            // When selection is inside text with `highlight` attribute.
            if ( selection.hasAttribute( 'highlight' ) ) {
                // Find the full highlighted range.
                const isSameHighlight = value => {
                    return value.item.hasAttribute( 'highlight' ) && value.item.getAttribute( 'highlight' ) === this.value;
                };

                const highlightStart = position.getLastMatchingPosition( isSameHighlight, { direction: 'backward' } );
                const highlightEnd = position.getLastMatchingPosition( isSameHighlight );
                const highlightRange = writer.createRange( highlightStart, highlightEnd );

                // Then depending on current value...
                if ( !color || this.value === color ) {
                    // ...remove attribute when passing highlighter different then current or executing "eraser".
                    writer.removeAttribute( 'highlight', highlightRange );
                    writer.removeSelectionAttribute( 'highlight' );
                } else {
                    // ...update `highlight` value.
                    writer.setAttribute( 'highlight', color, highlightRange );
                    writer.setSelectionAttribute( 'highlight', color );
                }
            } else if ( color ) {
                writer.setSelectionAttribute( 'highlight', color );
            }
        } else {
            for ( const range of ranges ) {
                if ( color ) {
                    writer.setAttribute( 'highlight', color, range );
                } else {
                    writer.removeAttribute( 'highlight', range );
                }
            }
        }
    } );
}

Я был почти неделю в этой проблеме.

Если вы хотя бы сможете указать мне правильное направление, вы не представляете, как сильно вы мне поможете.

0 ответов

Другие вопросы по тегам