Skip to main content

extension-code-block

package @remirror/extension-code-block

class CodeBlockExtension

Signature:

export declare class CodeBlockExtension extends NodeExtension<CodeBlockOptions> 

Extends: NodeExtension<CodeBlockOptions>

(Some inherited members may not be shown because they are not represented in the documentation.)

property name

Signature:

get name(): "codeBlock";

method backspaceKey

Signature:

backspaceKey({ dispatch, tr, state }: KeyBindingProps): boolean;

Parameters:

ParameterTypeDescription
{ dispatch, tr, state }KeyBindingProps

Returns:

boolean

method createAttributes

Add the syntax theme class to the editor.

Signature:

createAttributes(): ProsemirrorAttributes;

Returns:

ProsemirrorAttributes

method createCodeBlock

Creates a code at the current position.

commands.createCodeBlock({ language: 'js' });

Signature:

createCodeBlock(attributes: CodeBlockAttributes): CommandFunction;

Parameters:

ParameterTypeDescription
attributesCodeBlockAttributes

Returns:

CommandFunction

method createInputRules

Create an input rule that listens converts the code fence into a code block when typing triple back tick followed by a space.

Signature:

createInputRules(): InputRule[];

Returns:

InputRule[]

method createNodeSpec

Signature:

createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec;

Parameters:

ParameterTypeDescription
extraApplySchemaAttributes
overrideNodeSpecOverride

Returns:

NodeExtensionSpec

method createPlugin

Create the custom code block plugin which handles the delete key amongst other things.

Signature:

createPlugin(): CreateExtensionPlugin<CodeBlockState>;

Returns:

CreateExtensionPlugin<CodeBlockState>

method createTags

Signature:

createTags(): ("code" | "block")[];

Returns:

("code" | "block")[]

method enterKey

Signature:

enterKey({ dispatch, tr }: KeyBindingProps): boolean;

Parameters:

ParameterTypeDescription
{ dispatch, tr }KeyBindingProps

Returns:

boolean

method formatCodeBlock

Format the code block with the code formatting function passed as an option.

Code formatters (like prettier) add a lot to the bundle size and hence it is up to you to provide a formatter which will be run on the entire code block when this method is used.

if (actions.formatCodeBlock.enabled()) {
actions.formatCodeBlock();
// Or to format a separate code block via position
actions.formatCodeBlock({ pos: 100 });
}

Signature:

formatCodeBlock({ pos }?: Partial<PosProps>): NonChainableCommandFunction;

Parameters:

ParameterTypeDescription
{ pos }Partial<PosProps>(Optional)

Returns:

NonChainableCommandFunction

method formatShortcut

Signature:

formatShortcut({ tr }: KeyBindingProps): boolean;

Parameters:

ParameterTypeDescription
{ tr }KeyBindingProps

Returns:

boolean

method init

Add the languages to the environment if they have not yet been added.

Signature:

protected init(): void;

Returns:

void

method onSetOptions

Signature:

protected onSetOptions(props: OnSetOptionsProps<CodeBlockOptions>): void;

Parameters:

ParameterTypeDescription
propsOnSetOptionsProps<CodeBlockOptions>

Returns:

void

method tabKey

Signature:

tabKey({ state, dispatch }: KeyBindingProps): boolean;

Parameters:

ParameterTypeDescription
{ state, dispatch }KeyBindingProps

Returns:

boolean

method toggleCodeBlock

Call this method to toggle the code block.

Signature:

toggleCodeBlock(attributes?: Partial<CodeBlockAttributes>): CommandFunction;

Parameters:

ParameterTypeDescription
attributesPartial<CodeBlockAttributes>(Optional)

Returns:

CommandFunction

Remarks:

actions.toggleCodeBlock({ language: 'ts' });

The above makes the current node a codeBlock with the language ts or remove the code block altogether.

method updateCodeBlock

Update the code block at the current position. Primarily this is used to change the language.

if (commands.updateCodeBlock.enabled()) {
commands.updateCodeBlock({ language: 'markdown' });
}

Signature:

updateCodeBlock(attributes: CodeBlockAttributes): CommandFunction;

Parameters:

ParameterTypeDescription
attributesCodeBlockAttributes

Returns:

CommandFunction

function getLanguage()

Get the language from user input.

Signature:

export declare function getLanguage(props: GetLanguageProps): string;

Parameters:

ParameterTypeDescription
propsGetLanguageProps

Returns:

string

variable codeBlockPositioner

Signature:

codeBlockPositioner: Positioner<FindProsemirrorNodeResult>

interface CodeBlockAttributes

Signature:

export interface CodeBlockAttributes extends ProsemirrorAttributes 

Extends: ProsemirrorAttributes

(Some inherited members may not be shown because they are not represented in the documentation.)

property language

The language attribute

Signature:

language: string;

property wrap

Set to true to active the wrapping of the content within the editor.

Signature:

wrap?: boolean;

interface CodeBlockOptions

Signature:

export interface CodeBlockOptions 

property defaultLanguage

The default language to use when none is provided.

It is a property so it can change during the editor's life.

Signature:

defaultLanguage?: string;

property defaultWrap

Set to true to wrap content by default.

Signature:

defaultWrap?: boolean;

property formatter

Provide a formatter which can format the provided source code.

Signature:

formatter?: CodeBlockFormatter;

property getLanguageFromDom

Extract the language string from a code block.

Signature:

getLanguageFromDom?: Static<(codeElement: HTMLElement, preElement: HTMLElement) => string | undefined>;

property plainTextClassName

Class to use in decorations of plain text nodes.

Signature:

plainTextClassName?: string;

Remarks:

refractor highlighting produces elements to indicate the type of a part of the code. These elements get translated into decorations by this plugin.

For all other parts of the code the decoration will use this class name if it is set to a non-empty value, otherwise no decoration will be produced.

property supportedLanguages

Import languages from refractor.

Signature:

supportedLanguages?: RefractorSyntax[];

Remarks:

import jsx from 'refractor/lang/jsx.js'
import typescript from 'refractor/lang/typescript.js'

And pass them into the config when initializing this extension.

import { CodeBlockExtension } from '@remirror/extension-code-block';

new CodeBlockExtension({ supportedLanguages: [typescript, jsx] })

Or as a component

<RemirrorManager>
<RemirrorExtension Constructor={CodeBlockExtension} supportedLanguages={[typescript, jsx]} />
</RemirrorManager>

By default refractor bundles the following languages: markup, css, clike, js

property syntaxTheme

The theme to use for the codeBlocks.

Signature:

syntaxTheme?: SyntaxTheme;

Remarks:

Currently only one theme can be set per editor.

Set this to false if you want to manage the syntax styles by yourself. For tips on how this could be accomplished see https://prismjs.com

property toggleName

The name of the node that the code block should toggle back and forth from.

Signature:

toggleName?: string;

interface FormattedContent

Data returned from a code formatter.

Signature:

export interface FormattedContent 

property cursorOffset

The new cursor position after formatting

Signature:

cursorOffset: number;

property formatted

The transformed source.

Signature:

formatted: string;

interface FormatterProps

Signature:

export interface FormatterProps 

property cursorOffset

Specify where the cursor is. This option cannot be used with rangeStart and rangeEnd. This allows the command to both formats the code, and translates a cursor position from unformatted code to formatted code.

Signature:

cursorOffset: number;

property language

The language of the code block. Should be used to determine whether the formatter can support the transformation.

Possible languages are available here https://github.com/wooorm/refractor/tree/716fe904c37cd7ebfde53ac5157e7d6c323a3986/lang

Signature:

language: string;

property source

The code to be formatted

Signature:

source: string;

type CodeBlockFormatter

A function which takes code and formats the code.

TODO - possibly allow error management if failure is because of invalid syntax

Signature:

export type CodeBlockFormatter = (params: FormatterProps) => Promise<FormattedContent | void>;

References: FormatterProps, FormattedContent

type SyntaxTheme

The default supported syntax themes.

Signature:

export type SyntaxTheme = Lowercase<StringKey<typeof ExtensionCodeBlockTheme>>;

References: StringKey