Перейти к содержимому
Фреймворк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
  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,
    },
  },
});