mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
✨ Database kanban view https://github.com/siyuan-note/siyuan/issues/8873
Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
parent
f8d1d1958b
commit
ec77e2bafd
14 changed files with 42 additions and 5 deletions
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "عرض أيقونات المدخلات",
|
"showAllEntriesIcons": "عرض أيقونات المدخلات",
|
||||||
"wrapAllFields": "التفاف الحقول تلقائيًا",
|
"wrapAllFields": "التفاف الحقول تلقائيًا",
|
||||||
"gallery": "بطاقة",
|
"gallery": "بطاقة",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "علامة جديدة",
|
"newTag": "علامة جديدة",
|
||||||
"pleaseWait": "يرجى الانتظار...",
|
"pleaseWait": "يرجى الانتظار...",
|
||||||
"reconnectPrompt": "بعد تبديل التطبيقات، سيستغرق الأمر بعض الوقت لاستعادة تشغيل نواة SiYuan. يرجى الانتظار بضع ثوانٍ أو النقر فوق الزر \"إعادة المحاولة\"",
|
"reconnectPrompt": "بعد تبديل التطبيقات، سيستغرق الأمر بعض الوقت لاستعادة تشغيل نواة SiYuan. يرجى الانتظار بضع ثوانٍ أو النقر فوق الزر \"إعادة المحاولة\"",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "جدول",
|
"table": "جدول",
|
||||||
"gallery": "بطاقة",
|
"gallery": "بطاقة",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "المفتاح الرئيسي",
|
"key": "المفتاح الرئيسي",
|
||||||
"select": "تحديد"
|
"select": "تحديد"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Eintragssymbole anzeigen",
|
"showAllEntriesIcons": "Eintragssymbole anzeigen",
|
||||||
"wrapAllFields": "Felder automatisch umbrechen",
|
"wrapAllFields": "Felder automatisch umbrechen",
|
||||||
"gallery": "Karte",
|
"gallery": "Karte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Neuer Tag",
|
"newTag": "Neuer Tag",
|
||||||
"pleaseWait": "Bitte warten...",
|
"pleaseWait": "Bitte warten...",
|
||||||
"reconnectPrompt": "Nach dem Wechseln der Anwendungen dauert es einige Zeit, bis der Betrieb des SiYuan-Kernels wiederhergestellt ist. Bitte warten Sie einige Sekunden oder klicken Sie auf die Schaltfläche „Erneut versuchen“",
|
"reconnectPrompt": "Nach dem Wechseln der Anwendungen dauert es einige Zeit, bis der Betrieb des SiYuan-Kernels wiederhergestellt ist. Bitte warten Sie einige Sekunden oder klicken Sie auf die Schaltfläche „Erneut versuchen“",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabelle",
|
"table": "Tabelle",
|
||||||
"gallery": "Karte",
|
"gallery": "Karte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Primärschlüssel",
|
"key": "Primärschlüssel",
|
||||||
"select": "Auswählen"
|
"select": "Auswählen"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Show entry icons",
|
"showAllEntriesIcons": "Show entry icons",
|
||||||
"wrapAllFields": "Auto-wrap fields",
|
"wrapAllFields": "Auto-wrap fields",
|
||||||
"gallery": "Card",
|
"gallery": "Card",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "New tag",
|
"newTag": "New tag",
|
||||||
"pleaseWait": "Please wait...",
|
"pleaseWait": "Please wait...",
|
||||||
"reconnectPrompt": "After switching applications, it will take some time to restore the SiYuan kernel operation. Please wait a few seconds or click the \"Retry\" button",
|
"reconnectPrompt": "After switching applications, it will take some time to restore the SiYuan kernel operation. Please wait a few seconds or click the \"Retry\" button",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Table",
|
"table": "Table",
|
||||||
"gallery": "Card",
|
"gallery": "Card",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Primary Key",
|
"key": "Primary Key",
|
||||||
"select": "Select"
|
"select": "Select"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Mostrar íconos de entradas",
|
"showAllEntriesIcons": "Mostrar íconos de entradas",
|
||||||
"wrapAllFields": "Ajuste automático de campos",
|
"wrapAllFields": "Ajuste automático de campos",
|
||||||
"gallery": "Tarjeta",
|
"gallery": "Tarjeta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nueva etiqueta",
|
"newTag": "Nueva etiqueta",
|
||||||
"pleaseWait": "Por favor, espere...",
|
"pleaseWait": "Por favor, espere...",
|
||||||
"reconnectPrompt": "Después de cambiar de aplicación, tomará algún tiempo restaurar el funcionamiento del núcleo de SiYuan. Espere unos segundos o haga clic en el botón \"Reintentar\"",
|
"reconnectPrompt": "Después de cambiar de aplicación, tomará algún tiempo restaurar el funcionamiento del núcleo de SiYuan. Espere unos segundos o haga clic en el botón \"Reintentar\"",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabla",
|
"table": "Tabla",
|
||||||
"gallery": "Tarjeta",
|
"gallery": "Tarjeta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Clave principal",
|
"key": "Clave principal",
|
||||||
"select": "Selección"
|
"select": "Selección"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Afficher les icônes des entrées",
|
"showAllEntriesIcons": "Afficher les icônes des entrées",
|
||||||
"wrapAllFields": "Retour automatique des champs",
|
"wrapAllFields": "Retour automatique des champs",
|
||||||
"gallery": "Carte",
|
"gallery": "Carte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nouvelle étiquette",
|
"newTag": "Nouvelle étiquette",
|
||||||
"pleaseWait": "Veuillez patienter...",
|
"pleaseWait": "Veuillez patienter...",
|
||||||
"reconnectPrompt": "Après avoir changé d'application, il faudra un certain temps pour rétablir le fonctionnement du noyau SiYuan. Veuillez patienter quelques secondes ou cliquer sur le bouton « Réessayer »",
|
"reconnectPrompt": "Après avoir changé d'application, il faudra un certain temps pour rétablir le fonctionnement du noyau SiYuan. Veuillez patienter quelques secondes ou cliquer sur le bouton « Réessayer »",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tableau",
|
"table": "Tableau",
|
||||||
"gallery": "Carte",
|
"gallery": "Carte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Clé primaire",
|
"key": "Clé primaire",
|
||||||
"select": "Sélectionner"
|
"select": "Sélectionner"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "הצג סמלי כניסות",
|
"showAllEntriesIcons": "הצג סמלי כניסות",
|
||||||
"wrapAllFields": "עטיפת שדות אוטומטית",
|
"wrapAllFields": "עטיפת שדות אוטומטית",
|
||||||
"gallery": "כרטיס",
|
"gallery": "כרטיס",
|
||||||
|
"kanban": "קאנבן",
|
||||||
"newTag": "תג חדש",
|
"newTag": "תג חדש",
|
||||||
"pleaseWait": "אנא המתן...",
|
"pleaseWait": "אנא המתן...",
|
||||||
"reconnectPrompt": "לאחר מעבר בין יישומים, יידרש זמן מה כדי לשחזר את פעולת ליבת SiYuan. אנא המתן מספר שניות או לחץ על כפתור \"נסה שוב\"",
|
"reconnectPrompt": "לאחר מעבר בין יישומים, יידרש זמן מה כדי לשחזר את פעולת ליבת SiYuan. אנא המתן מספר שניות או לחץ על כפתור \"נסה שוב\"",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "טבלה",
|
"table": "טבלה",
|
||||||
"gallery": "כרטיס",
|
"gallery": "כרטיס",
|
||||||
|
"kanban": "קאנבן",
|
||||||
"key": "מפתח ראשי",
|
"key": "מפתח ראשי",
|
||||||
"select": "בחר"
|
"select": "בחר"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Mostra icone delle voci",
|
"showAllEntriesIcons": "Mostra icone delle voci",
|
||||||
"wrapAllFields": "Avvolgi automaticamente i campi",
|
"wrapAllFields": "Avvolgi automaticamente i campi",
|
||||||
"gallery": "Scheda",
|
"gallery": "Scheda",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nuova etichetta",
|
"newTag": "Nuova etichetta",
|
||||||
"pleaseWait": "Attendere prego...",
|
"pleaseWait": "Attendere prego...",
|
||||||
"reconnectPrompt": "Dopo aver cambiato applicazione, ci vorrà un po' di tempo per ripristinare il funzionamento del kernel SiYuan. Attendere qualche secondo o fare clic sul pulsante \"Riprova\"",
|
"reconnectPrompt": "Dopo aver cambiato applicazione, ci vorrà un po' di tempo per ripristinare il funzionamento del kernel SiYuan. Attendere qualche secondo o fare clic sul pulsante \"Riprova\"",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabella",
|
"table": "Tabella",
|
||||||
"gallery": "Scheda",
|
"gallery": "Scheda",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Chiave primaria",
|
"key": "Chiave primaria",
|
||||||
"select": "Seleziona"
|
"select": "Seleziona"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "エントリアイコンを表示",
|
"showAllEntriesIcons": "エントリアイコンを表示",
|
||||||
"wrapAllFields": "フィールドを自動折り返し",
|
"wrapAllFields": "フィールドを自動折り返し",
|
||||||
"gallery": "カード",
|
"gallery": "カード",
|
||||||
|
"kanban": "カンバン",
|
||||||
"newTag": "新しいタグ",
|
"newTag": "新しいタグ",
|
||||||
"pleaseWait": "しばらくお待ちください...",
|
"pleaseWait": "しばらくお待ちください...",
|
||||||
"reconnectPrompt": "アプリを切り替えた後、思源カーネルの実行を再開するには少し時間がかかります。数秒待つか、「再試行」ボタンをクリックしてください",
|
"reconnectPrompt": "アプリを切り替えた後、思源カーネルの実行を再開するには少し時間がかかります。数秒待つか、「再試行」ボタンをクリックしてください",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "テーブル",
|
"table": "テーブル",
|
||||||
"gallery": "カード",
|
"gallery": "カード",
|
||||||
|
"kanban": "カンバン",
|
||||||
"key": "プライマリキー",
|
"key": "プライマリキー",
|
||||||
"select": "選択"
|
"select": "選択"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Pokaż ikony wpisów",
|
"showAllEntriesIcons": "Pokaż ikony wpisów",
|
||||||
"wrapAllFields": "Automatyczne zawijanie pól",
|
"wrapAllFields": "Automatyczne zawijanie pól",
|
||||||
"gallery": "Karta",
|
"gallery": "Karta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nowy tag",
|
"newTag": "Nowy tag",
|
||||||
"pleaseWait": "Proszę czekać...",
|
"pleaseWait": "Proszę czekać...",
|
||||||
"reconnectPrompt": "Po przełączeniu aplikacji ponowne uruchomienie jądra SiYuan może zająć trochę czasu. Proszę poczekać kilka sekund lub kliknąć przycisk „Ponów próbę”",
|
"reconnectPrompt": "Po przełączeniu aplikacji ponowne uruchomienie jądra SiYuan może zająć trochę czasu. Proszę poczekać kilka sekund lub kliknąć przycisk „Ponów próbę”",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabela",
|
"table": "Tabela",
|
||||||
"gallery": "Karta",
|
"gallery": "Karta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Klucz główny",
|
"key": "Klucz główny",
|
||||||
"select": "Wybierz"
|
"select": "Wybierz"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Mostrar ícones de entradas",
|
"showAllEntriesIcons": "Mostrar ícones de entradas",
|
||||||
"wrapAllFields": "Quebrar automaticamente os campos",
|
"wrapAllFields": "Quebrar automaticamente os campos",
|
||||||
"gallery": "Cartão",
|
"gallery": "Cartão",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nova tag",
|
"newTag": "Nova tag",
|
||||||
"pleaseWait": "Por favor, aguarde...",
|
"pleaseWait": "Por favor, aguarde...",
|
||||||
"reconnectPrompt": "Após alternar aplicativos, levará algum tempo para restaurar a operação do kernel SiYuan. Por favor, aguarde alguns segundos ou clique no botão \"Tentar novamente\"",
|
"reconnectPrompt": "Após alternar aplicativos, levará algum tempo para restaurar a operação do kernel SiYuan. Por favor, aguarde alguns segundos ou clique no botão \"Tentar novamente\"",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabela",
|
"table": "Tabela",
|
||||||
"gallery": "Cartão",
|
"gallery": "Cartão",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Chave Primária",
|
"key": "Chave Primária",
|
||||||
"select": "Selecionar"
|
"select": "Selecionar"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "Показать значки записей",
|
"showAllEntriesIcons": "Показать значки записей",
|
||||||
"wrapAllFields": "Автоматический перенос полей",
|
"wrapAllFields": "Автоматический перенос полей",
|
||||||
"gallery": "Карточка",
|
"gallery": "Карточка",
|
||||||
|
"kanban": "Канбан",
|
||||||
"newTag": "Новый тег",
|
"newTag": "Новый тег",
|
||||||
"pleaseWait": "Пожалуйста, подождите...",
|
"pleaseWait": "Пожалуйста, подождите...",
|
||||||
"reconnectPrompt": "После переключения приложений потребуется некоторое время, чтобы восстановить работу ядра SiYuan. Пожалуйста, подождите несколько секунд или нажмите кнопку «Повторить»",
|
"reconnectPrompt": "После переключения приложений потребуется некоторое время, чтобы восстановить работу ядра SiYuan. Пожалуйста, подождите несколько секунд или нажмите кнопку «Повторить»",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Таблица",
|
"table": "Таблица",
|
||||||
"gallery": "Карточка",
|
"gallery": "Карточка",
|
||||||
|
"kanban": "Канбан",
|
||||||
"key": "Первичный ключ",
|
"key": "Первичный ключ",
|
||||||
"select": "Выбрать"
|
"select": "Выбрать"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "顯示條目圖標",
|
"showAllEntriesIcons": "顯示條目圖標",
|
||||||
"wrapAllFields": "欄位自動換行",
|
"wrapAllFields": "欄位自動換行",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"newTag": "新建標籤",
|
"newTag": "新建標籤",
|
||||||
"pleaseWait": "請稍等片刻...",
|
"pleaseWait": "請稍等片刻...",
|
||||||
"reconnectPrompt": "切換應用後再次進入需要一些時間恢復思源內核運行,請稍等幾秒或者點擊“重試”按鈕",
|
"reconnectPrompt": "切換應用後再次進入需要一些時間恢復思源內核運行,請稍等幾秒或者點擊“重試”按鈕",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"key": "主鍵",
|
"key": "主鍵",
|
||||||
"select": "單選"
|
"select": "單選"
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
"showAllEntriesIcons": "显示条目图标",
|
"showAllEntriesIcons": "显示条目图标",
|
||||||
"wrapAllFields": "字段自动换行",
|
"wrapAllFields": "字段自动换行",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"newTag": "新建标签",
|
"newTag": "新建标签",
|
||||||
"pleaseWait": "请稍等片刻...",
|
"pleaseWait": "请稍等片刻...",
|
||||||
"reconnectPrompt": "切换应用后再次进入需要一些时间恢复思源内核运行,请稍等几秒或者点击“重试”按钮",
|
"reconnectPrompt": "切换应用后再次进入需要一些时间恢复思源内核运行,请稍等几秒或者点击“重试”按钮",
|
||||||
|
@ -1387,6 +1388,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"key": "主键",
|
"key": "主键",
|
||||||
"select": "单选"
|
"select": "单选"
|
||||||
},
|
},
|
||||||
|
|
|
@ -207,6 +207,7 @@ type View struct {
|
||||||
LayoutType LayoutType `json:"type"` // 当前布局类型
|
LayoutType LayoutType `json:"type"` // 当前布局类型
|
||||||
Table *LayoutTable `json:"table,omitempty"` // 表格布局
|
Table *LayoutTable `json:"table,omitempty"` // 表格布局
|
||||||
Gallery *LayoutGallery `json:"gallery,omitempty"` // 卡片布局
|
Gallery *LayoutGallery `json:"gallery,omitempty"` // 卡片布局
|
||||||
|
Kanban *LayoutKanban `json:"kanban,omitempty"` // 看板布局
|
||||||
ItemIDs []string `json:"itemIds,omitempty"` // 项目 ID 列表,用于维护所有项目
|
ItemIDs []string `json:"itemIds,omitempty"` // 项目 ID 列表,用于维护所有项目
|
||||||
|
|
||||||
Group *ViewGroup `json:"group,omitempty"` // 分组规则
|
Group *ViewGroup `json:"group,omitempty"` // 分组规则
|
||||||
|
@ -306,8 +307,8 @@ const (
|
||||||
ViewDefaultPageSize = 50 // 视图默认分页大小
|
ViewDefaultPageSize = 50 // 视图默认分页大小
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewTableView() (ret *View) {
|
func NewTableView() *View {
|
||||||
ret = &View{
|
return &View{
|
||||||
ID: ast.NewNodeID(),
|
ID: ast.NewNodeID(),
|
||||||
Name: GetAttributeViewI18n("table"),
|
Name: GetAttributeViewI18n("table"),
|
||||||
Filters: []*ViewFilter{},
|
Filters: []*ViewFilter{},
|
||||||
|
@ -316,7 +317,6 @@ func NewTableView() (ret *View) {
|
||||||
LayoutType: LayoutTypeTable,
|
LayoutType: LayoutTypeTable,
|
||||||
Table: NewLayoutTable(),
|
Table: NewLayoutTable(),
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTableViewWithBlockKey(blockKeyID string) (view *View, blockKey, selectKey *Key) {
|
func NewTableViewWithBlockKey(blockKeyID string) (view *View, blockKey, selectKey *Key) {
|
||||||
|
@ -339,7 +339,7 @@ func NewTableViewWithBlockKey(blockKeyID string) (view *View, blockKey, selectKe
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGalleryView() (ret *View) {
|
func NewGalleryView() (ret *View) {
|
||||||
ret = &View{
|
return &View{
|
||||||
ID: ast.NewNodeID(),
|
ID: ast.NewNodeID(),
|
||||||
Name: GetAttributeViewI18n("gallery"),
|
Name: GetAttributeViewI18n("gallery"),
|
||||||
Filters: []*ViewFilter{},
|
Filters: []*ViewFilter{},
|
||||||
|
@ -348,7 +348,18 @@ func NewGalleryView() (ret *View) {
|
||||||
LayoutType: LayoutTypeGallery,
|
LayoutType: LayoutTypeGallery,
|
||||||
Gallery: NewLayoutGallery(),
|
Gallery: NewLayoutGallery(),
|
||||||
}
|
}
|
||||||
return
|
}
|
||||||
|
|
||||||
|
func NewKanbanView() (ret *View) {
|
||||||
|
return &View{
|
||||||
|
ID: ast.NewNodeID(),
|
||||||
|
Name: GetAttributeViewI18n("kanban"),
|
||||||
|
Filters: []*ViewFilter{},
|
||||||
|
Sorts: []*ViewSort{},
|
||||||
|
PageSize: ViewDefaultPageSize,
|
||||||
|
LayoutType: LayoutTypeKanban,
|
||||||
|
Kanban: NewLayoutKanban(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Viewable 描述了视图的接口。
|
// Viewable 描述了视图的接口。
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue