From 05487ea82f112984ecb7190264f696e217417c70 Mon Sep 17 00:00:00 2001 From: Hans Pagel Date: Fri, 22 Jan 2021 00:16:58 +0100 Subject: [PATCH] add table headers --- docs/src/demos/Nodes/Table/index.vue | 20 +++++--- docs/src/docPages/api/nodes/table-header.md | 8 +++ docs/src/links.yaml | 3 ++ packages/extension-table-header/README.md | 14 +++++ packages/extension-table-header/package.json | 27 ++++++++++ packages/extension-table-header/src/index.ts | 5 ++ .../src/table-header.ts | 51 +++++++++++++++++++ packages/extension-table-row/src/table-row.ts | 3 +- 8 files changed, 122 insertions(+), 9 deletions(-) create mode 100644 docs/src/docPages/api/nodes/table-header.md create mode 100644 packages/extension-table-header/README.md create mode 100644 packages/extension-table-header/package.json create mode 100644 packages/extension-table-header/src/index.ts create mode 100644 packages/extension-table-header/src/table-header.ts diff --git a/docs/src/demos/Nodes/Table/index.vue b/docs/src/demos/Nodes/Table/index.vue index f9898eba..f22af0ed 100644 --- a/docs/src/demos/Nodes/Table/index.vue +++ b/docs/src/demos/Nodes/Table/index.vue @@ -31,13 +31,13 @@ ⚠️ splitCell @@ -52,6 +52,7 @@ import Text from '@tiptap/extension-text' import Table from '@tiptap/extension-table' import TableRow from '@tiptap/extension-table-row' import TableCell from '@tiptap/extension-table-cell' +import TableHeader from '@tiptap/extension-table-header' export default { components: { @@ -72,6 +73,7 @@ export default { Text, Table, TableRow, + TableHeader, TableCell, ], content: ` @@ -79,9 +81,9 @@ export default { - - - + + + @@ -103,8 +105,12 @@ export default { diff --git a/docs/src/docPages/api/nodes/table-header.md b/docs/src/docPages/api/nodes/table-header.md new file mode 100644 index 00000000..ea9e355a --- /dev/null +++ b/docs/src/docPages/api/nodes/table-header.md @@ -0,0 +1,8 @@ +# TableHeader + +:::pro Fund the development 💖 +We need your support to maintain, update, support and develop tiptap 2. If you’re waiting for this extension, [become a sponsor and fund open source](/sponsor). +::: + +TODO + diff --git a/docs/src/links.yaml b/docs/src/links.yaml index ff19c090..a8ad84ed 100644 --- a/docs/src/links.yaml +++ b/docs/src/links.yaml @@ -135,6 +135,9 @@ - title: TableCell link: /api/nodes/table-cell type: draft + - title: TableHeader + link: /api/nodes/table-header + type: draft - title: TaskList link: /api/nodes/task-list - title: TaskItem diff --git a/packages/extension-table-header/README.md b/packages/extension-table-header/README.md new file mode 100644 index 00000000..4dba7844 --- /dev/null +++ b/packages/extension-table-header/README.md @@ -0,0 +1,14 @@ +# @tiptap/extension-table-header +[![Version](https://img.shields.io/npm/v/@tiptap/extension-table-header.svg?label=version)](https://www.npmjs.com/package/@tiptap/extension-table-header) +[![Downloads](https://img.shields.io/npm/dm/@tiptap/extension-table-header.svg)](https://npmcharts.com/compare/tiptap?minimal=true) +[![License](https://img.shields.io/npm/l/@tiptap/extension-table-header.svg)](https://www.npmjs.com/package/@tiptap/extension-table-header) +[![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub)](https://github.com/sponsors/ueberdosis) + +## Introduction +tiptap is a headless wrapper around [ProseMirror](https://ProseMirror.net) – a toolkit for building rich text WYSIWYG editors, which is already in use at many well-known companies such as *New York Times*, *The Guardian* or *Atlassian*. + +## Offical Documentation +Documentation can be found on the [tiptap website](https://tiptap.dev). + +## License +tiptap is open-sourced software licensed under the [MIT license](https://github.com/ueberdosis/tiptap-next/blob/main/LICENSE.md). diff --git a/packages/extension-table-header/package.json b/packages/extension-table-header/package.json new file mode 100644 index 00000000..b08cc214 --- /dev/null +++ b/packages/extension-table-header/package.json @@ -0,0 +1,27 @@ +{ + "name": "@tiptap/extension-table-header", + "description": "table cell extension for tiptap", + "version": "2.0.0-alpha.5", + "homepage": "https://tiptap.dev", + "keywords": [ + "tiptap", + "tiptap extension" + ], + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "main": "dist/tiptap-extension-table-header.cjs.js", + "umd": "dist/tiptap-extension-table-header.umd.js", + "module": "dist/tiptap-extension-table-header.esm.js", + "unpkg": "dist/tiptap-extension-table-header.bundle.umd.min.js", + "types": "dist/packages/extension-table-header/src/index.d.ts", + "files": [ + "src", + "dist" + ], + "peerDependencies": { + "@tiptap/core": "^2.0.0-alpha.6" + } +} diff --git a/packages/extension-table-header/src/index.ts b/packages/extension-table-header/src/index.ts new file mode 100644 index 00000000..bfa5d100 --- /dev/null +++ b/packages/extension-table-header/src/index.ts @@ -0,0 +1,5 @@ +import { TableHeader } from './table-header' + +export * from './table-header' + +export default TableHeader diff --git a/packages/extension-table-header/src/table-header.ts b/packages/extension-table-header/src/table-header.ts new file mode 100644 index 00000000..6802ccf4 --- /dev/null +++ b/packages/extension-table-header/src/table-header.ts @@ -0,0 +1,51 @@ +import { Node, mergeAttributes } from '@tiptap/core' + +export interface TableHeaderOptions { + HTMLAttributes: { + [key: string]: any + }, +} +export const TableHeader = Node.create({ + name: 'table_header', + + defaultOptions: { + HTMLAttributes: {}, + }, + + content: 'block+', + + addAttributes() { + return { + colspan: { + default: 1, + }, + rowspan: { + default: 1, + }, + colwidth: { + default: null, + }, + } + }, + + tableRole: 'header_cell', + + isolating: true, + + parseHTML() { + // return [{ tag: 'th', getAttrs: dom => getCellAttrs(dom, extraAttrs) }] + return [{ tag: 'th' }] + }, + + renderHTML({ HTMLAttributes }) { + // toDOM(node) { return ["th", setCellAttrs(node, extraAttrs), 0] } + return ['th', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0] + }, + +}) + +declare module '@tiptap/core' { + interface AllExtensions { + TableHeader: typeof TableHeader, + } +} diff --git a/packages/extension-table-row/src/table-row.ts b/packages/extension-table-row/src/table-row.ts index c8368e8d..6f75613e 100644 --- a/packages/extension-table-row/src/table-row.ts +++ b/packages/extension-table-row/src/table-row.ts @@ -13,8 +13,7 @@ export const TableRow = Node.create({ HTMLAttributes: {}, }, - // content: '(tableCell | tableHeader)*', - content: 'table_cell*', + content: '(table_cell | table_header)*', tableRole: 'row',
TestTestTestTestTestTest
Test