Path: blob/master/src/packages/frontend/editors/slate/elements/heading/editable.tsx
1698 views
/*1* This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import React from "react";6import { ReactEditor } from "../../slate-react";7import { register } from "../register";8import { useSlateStatic } from "../hooks";9import { HeadingToggle } from "./toggle";10import { mark_block } from "../../util";1112register({13slateType: "heading",1415Element: ({ attributes, children, element }) => {16const editor = useSlateStatic();17if (element.type != "heading") throw Error("bug");18const { level } = element;19if (!level || level < 1 || level > 6) {20// Shouldn't be allowed, but at least we can render it somehow...21return <b>{children}</b>;22}23let x;24if (ReactEditor.isUsingWindowing(editor)) {25x = [26<HeadingToggle element={element} key="toggle" />,27<span key="children">{children}</span>,28];29} else {30x = children;31}32return React.createElement(`h${level}`, attributes, x);33},3435fromSlate: ({ node, children }) => {36let h = "\n#";37for (let n = 1; n < ((node.level as any) ?? 1); n++) {38h += "#";39}40return mark_block(children, h).trim() + "\n\n";41},4243rules: { autoFocus: true, autoAdvance: false },44});454647