ckeditor/ckeditor5-engine

View on GitHub
docs/_snippets/framework/extending-content-add-link-class.js

Summary

Maintainability
A
3 hrs
Test Coverage
/**
 * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
 * For licensing, see LICENSE.md.
 */

/* globals ClassicEditor, console, window, document */

import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config';

function AddClassToAllLinks( editor ) {
    editor.conversion.for( 'downcast' ).add( dispatcher => {
        dispatcher.on( 'attribute:linkHref', ( evt, data, conversionApi ) => {
            const viewWriter = conversionApi.writer;
            const viewSelection = viewWriter.document.selection;
            const viewElement = viewWriter.createAttributeElement( 'a', {
                class: 'my-green-link'
            }, {
                priority: 5
            } );

            if ( data.item.is( 'selection' ) ) {
                viewWriter.wrap( viewSelection.getFirstRange(), viewElement );
            } else {
                viewWriter.wrap( conversionApi.mapper.toViewRange( data.range ), viewElement );
            }
        }, { priority: 'low' } );
    } );
}

ClassicEditor
    .create( document.querySelector( '#snippet-link-classes' ), {
        cloudServices: CS_CONFIG,
        extraPlugins: [ AddClassToAllLinks ],
        toolbar: {
            viewportTopOffset: window.getViewportTopOffsetConfig()
        }
    } )
    .then( editor => {
        window.editor = editor;
    } )
    .catch( err => {
        console.error( err.stack );
    } );