提示字体大小反应
tiptap font size react
我在我的 React 应用程序中使用 tiptap 作为编辑器,
问题是我还没有找到如何在我的编辑器中修改字体大小,我已经搜索了一个外部包但我没有找到任何。
有人能告诉我是否有用于 tiptap 的 font-size 包和 react?
如何在 tiptap 中处理字体大小的答案是使用“@tiptap/extension-text-style”扩展中的 setMark。
例如:
<button
onClick={() => {
editor
.chain()
.focus()
.setMark("textStyle", {
fontSize: "100px"
})
.run();
}}
>
要在 tiptap 中处理字体大小,您可以创建自定义扩展,例如:
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.0/umd/react-dom.production.min.js"></script>
import { Extension } from '@tiptap/react';
/**
* FontSize - Custom Extension
* editor.commands.setFontSize(e.target.value) :set the font-size.
*/
export const FontSize = Extension.create({
name: 'fontSize',
addOptions() {
return {
types: ['textStyle'],
};
},
addGlobalAttributes() {
return [
{
types: this.options.types,
attributes: {
fontSize: {
default: null,
parseHTML: element => element.style.fontSize.replace(/['"]+/g, ''),
renderHTML: attributes => {
if (!attributes.fontSize) {
return {};
}
return {
style: `font-size: ${attributes.fontSize}`,
};
},
},
},
},
];
},
addCommands() {
return {
setFontSize: fontSize => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: fontSize + "px" })
.run();
},
unsetFontSize: () => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: null })
.removeEmptyTextStyle()
.run();
},
};
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
请注意@Raed BAHRI 的回答会导致 TypeScript 错误。要修复,您需要扩展命令接口,如下所示:
import { Extension } from '@tiptap/react';
/**
* FontSize - Custom Extension
* editor.commands.setFontSize(e.target.value) :set the font-size.
*/
// --------- add this block ---- vvvvvv ----------
declare module '@tiptap/core' {
interface Commands<ReturnType> {
fontSize: {
/**
* Set the font size
*/
setFontSize: (size: string) => ReturnType;
/**
* Unset the font size
*/
unsetFontSize: () => ReturnType;
};
}
}
// ---------------- add this block ----- ^^^^ --------------
export const FontSize = Extension.create({
name: 'fontSize',
addOptions() {
return {
types: ['textStyle'],
};
},
addGlobalAttributes() {
return [
{
types: this.options.types,
attributes: {
fontSize: {
default: null,
parseHTML: element => element.style.fontSize.replace(/['"]+/g, ''),
renderHTML: attributes => {
if (!attributes.fontSize) {
return {};
}
return {
style: `font-size: ${attributes.fontSize}`,
};
},
},
},
},
];
},
addCommands() {
return {
setFontSize: fontSize => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: fontSize + "px" })
.run();
},
unsetFontSize: () => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: null })
.removeEmptyTextStyle()
.run();
},
};
},
});
我在我的 React 应用程序中使用 tiptap 作为编辑器, 问题是我还没有找到如何在我的编辑器中修改字体大小,我已经搜索了一个外部包但我没有找到任何。 有人能告诉我是否有用于 tiptap 的 font-size 包和 react?
如何在 tiptap 中处理字体大小的答案是使用“@tiptap/extension-text-style”扩展中的 setMark。 例如:
<button
onClick={() => {
editor
.chain()
.focus()
.setMark("textStyle", {
fontSize: "100px"
})
.run();
}}
>
要在 tiptap 中处理字体大小,您可以创建自定义扩展,例如:
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.0/umd/react-dom.production.min.js"></script>
import { Extension } from '@tiptap/react';
/**
* FontSize - Custom Extension
* editor.commands.setFontSize(e.target.value) :set the font-size.
*/
export const FontSize = Extension.create({
name: 'fontSize',
addOptions() {
return {
types: ['textStyle'],
};
},
addGlobalAttributes() {
return [
{
types: this.options.types,
attributes: {
fontSize: {
default: null,
parseHTML: element => element.style.fontSize.replace(/['"]+/g, ''),
renderHTML: attributes => {
if (!attributes.fontSize) {
return {};
}
return {
style: `font-size: ${attributes.fontSize}`,
};
},
},
},
},
];
},
addCommands() {
return {
setFontSize: fontSize => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: fontSize + "px" })
.run();
},
unsetFontSize: () => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: null })
.removeEmptyTextStyle()
.run();
},
};
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
请注意@Raed BAHRI 的回答会导致 TypeScript 错误。要修复,您需要扩展命令接口,如下所示:
import { Extension } from '@tiptap/react';
/**
* FontSize - Custom Extension
* editor.commands.setFontSize(e.target.value) :set the font-size.
*/
// --------- add this block ---- vvvvvv ----------
declare module '@tiptap/core' {
interface Commands<ReturnType> {
fontSize: {
/**
* Set the font size
*/
setFontSize: (size: string) => ReturnType;
/**
* Unset the font size
*/
unsetFontSize: () => ReturnType;
};
}
}
// ---------------- add this block ----- ^^^^ --------------
export const FontSize = Extension.create({
name: 'fontSize',
addOptions() {
return {
types: ['textStyle'],
};
},
addGlobalAttributes() {
return [
{
types: this.options.types,
attributes: {
fontSize: {
default: null,
parseHTML: element => element.style.fontSize.replace(/['"]+/g, ''),
renderHTML: attributes => {
if (!attributes.fontSize) {
return {};
}
return {
style: `font-size: ${attributes.fontSize}`,
};
},
},
},
},
];
},
addCommands() {
return {
setFontSize: fontSize => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: fontSize + "px" })
.run();
},
unsetFontSize: () => ({ chain }) => {
return chain()
.setMark('textStyle', { fontSize: null })
.removeEmptyTextStyle()
.run();
},
};
},
});