Невозможно передать параметр из команды в конвертер - PullRequest
0 голосов
/ 28 декабря 2018

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

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

Что означает значение в команде:не передается в конвертер.

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

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

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

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

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

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 );
                }
            }
        }
    } );
}

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

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

...