Перейти к содержимому
ФреймворкJavaScript

Таблица: объединённые ячейки и контент ячеек

Полнофункциональный блок таблицы. Каждая ячейка содержит собственный редактор блоков. В ячейке допустим любой тип блока, кроме header, table и column_list: они всегда запрещены внутри ячеек.

Поддерживаются объединение и разделение ячеек. Для этого используются colspan/rowspan, а перекрытые ячейки записываются как mergedInto.

  • Есть строки заголовков, столбцы заголовков и изменение ширины столбцов.
  • Поддерживаются цвет фона и текста ячеек.
  • Есть элементы управления для добавления и удаления строк и столбцов, а также копирование и вставка.

В меню настроек блока есть переключение плотности текста: компактная или комфортная.

Импорт

TypeScript
import { Table } from '@bloklabs/core/tools';

Конфигурация

ОпцияТипПо умолчаниюОписание
rowsnumber3

Начальное количество строк при вставке новой таблицы.

colsnumber3

Начальное количество столбцов при вставке новой таблицы.

withHeadingsbooleanfalse

Оформлять ли первую строку как строку заголовков по умолчанию.

withHeadingColumnbooleanfalse

Оформлять ли первый столбец как столбец заголовков по умолчанию.

stretchedbooleanfalse

Если true, таблица по умолчанию занимает всю ширину редактора.

restrictedToolsstring[][]

Дополнительные имена инструментов, которые нельзя вставлять в ячейки таблицы.

Формат данных

TypeScript
interface TableData {
  withHeadings: boolean;       // First row is a heading row
  withHeadingColumn: boolean;  // First column is a heading column
  stretched?: boolean;
  content: CellContent[][];    // 2D array of cell content
  colWidths?: number[];        // Column widths in pixels
  initialColWidth?: number;    // Per-column width in px captured at creation; new columns get initialColWidth / 2
  textSize?: 'compact' | 'comfortable'; // Cell text density; omitted = 'compact' (small text)
}

// Each cell:
interface CellContent {
  blocks: string[];    // IDs of child blocks in this cell
  id?: string;         // Column id, the same on every cell of the column; minted on load when missing
  rowId?: string;      // Row id, the same on every cell of the row; minted on load when missing
  color?: string;      // Cell background colour
  textColor?: string;  // Cell text colour
  placement?: CellPlacement; // 9-way vertical+horizontal alignment (e.g. 'top-left', 'middle-center')
  colspan?: number;    // Columns this cell spans (origin cells only)
  rowspan?: number;    // Rows this cell spans (origin cells only)
  mergedInto?: [number, number]; // Set when covered by a merge; origin cell at [row, col]
}
JSON
{
  "id": "jkl012",
  "type": "table",
  "data": {
    "withHeadings": true,
    "withHeadingColumn": false,
    "content": [
      [{ "blocks": ["block1"] }, { "blocks": ["block2"] }],
      [{ "blocks": ["block3"] }, { "blocks": ["block4"] }]
    ]
  }
}

Пример использования

TypeScript
import { Blok } from '@bloklabs/core';
import { Table } from '@bloklabs/core/tools';

const editor = new Blok({
  holder: 'editor',
  tools: {
    table: {
      class: Table,
      rows: 3,
      cols: 3,
      withHeadings: true,
    },
  },
});