Skip to content

Instantly share code, notes, and snippets.

@gregveres
Created May 3, 2022 23:26
Show Gist options
  • Save gregveres/973e8d545ab40dc375b47ebc63f92846 to your computer and use it in GitHub Desktop.
Save gregveres/973e8d545ab40dc375b47ebc63f92846 to your computer and use it in GitHub Desktop.
background-color for tiptap 2
import { Extension } from "@tiptap/core";
import "@tiptap/extension-text-style";
export type ColorOptions = {
types: string[];
};
declare module "@tiptap/core" {
interface Commands<ReturnType> {
backColor: {
/**
* Set the text color
*/
setBackColor: (color: string) => ReturnType;
/**
* Unset the text color
*/
unsetBackColor: () => ReturnType;
};
}
}
export const BackColor = Extension.create<ColorOptions>({
name: "backColor",
addOptions() {
return {
types: ["textStyle"],
};
},
addGlobalAttributes() {
return [
{
types: this.options.types,
attributes: {
backgroundColor: {
default: null,
parseHTML: (element) =>
element.style.backgroundColor.replace(/['"]+/g, ""),
renderHTML: (attributes) => {
if (!attributes.backgroundColor) {
return {};
}
return {
style: `background-color: ${attributes.backgroundColor}`,
};
},
},
},
},
];
},
addCommands() {
return {
setBackColor:
(color) =>
({ chain }) => {
return chain().setMark("textStyle", { backgroundColor: color }).run();
},
unsetBackColor:
() =>
({ chain }) => {
return chain()
.setMark("textStyle", { backgroundColor: null })
.removeEmptyTextStyle()
.run();
},
};
},
});
@namlh023
Copy link

namlh023 commented Feb 2, 2024

Thanks, it's work. Save me a lot of time.

@realmxu
Copy link

realmxu commented Jun 24, 2024

amazing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment