Skip to content

Commit 4022d30

Browse files
authored
Merge pull request #2045 from umbraco/v14/feature/dynamic-label-api
Feature: Umbraco Flavored Markdown
2 parents 985975f + dfde9e1 commit 4022d30

File tree

31 files changed

+490
-42
lines changed

31 files changed

+490
-42
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
"./themes": "./dist-cms/packages/core/themes/index.js",
8787
"./tiny-mce": "./dist-cms/packages/tiny-mce/index.js",
8888
"./tree": "./dist-cms/packages/core/tree/index.js",
89+
"./ufm": "./dist-cms/packages/ufm/index.js",
8990
"./user-group": "./dist-cms/packages/user/user-group/index.js",
9091
"./user-permission": "./dist-cms/packages/user/user-permission/index.js",
9192
"./user": "./dist-cms/packages/user/user/index.js",

src/apps/backoffice/backoffice.element.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const CORE_PACKAGES = [
3333
import('../../packages/tags/umbraco-package.js'),
3434
import('../../packages/templating/umbraco-package.js'),
3535
import('../../packages/tiny-mce/umbraco-package.js'),
36+
import('../../packages/ufm/umbraco-package.js'),
3637
import('../../packages/umbraco-news/umbraco-package.js'),
3738
import('../../packages/user/umbraco-package.js'),
3839
import('../../packages/webhook/umbraco-package.js'),

src/libs/context-api/consume/context-consumer.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe('UmbContextConsumer', () => {
3939

4040
describe('events', () => {
4141
it('dispatches context request event when constructed', async () => {
42-
const listener = oneEvent(window, UMB_CONTENT_REQUEST_EVENT_TYPE, false);
42+
const listener = oneEvent(window, UMB_CONTENT_REQUEST_EVENT_TYPE);
4343

4444
consumer.hostConnected();
4545

src/libs/formatting-api/formatting.controller.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ UmbDomPurify.addHook('afterSanitizeAttributes', function (node) {
1616

1717
/**
1818
* @description - Controller for formatting text.
19+
* @deprecated - Use the `<umb-ufm-render>` component instead. This method will be removed in Umbraco 15.
1920
*/
2021
export class UmbFormattingController extends UmbControllerBase {
2122
#localize = new UmbLocalizationController(this._host);
2223

2324
/**
2425
* A method to localize the string input then transform any markdown to santized HTML.
26+
* @deprecated - Use the `<umb-ufm-render>` component instead. This method will be removed in Umbraco 15.
2527
*/
2628
public transform(input?: string): string {
2729
if (!input) return '';
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { UmbFormattingController } from './formatting.controller.js';
22
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
33

4+
/**
5+
* @deprecated - Use the `<umb-ufm-render>` component instead. This method will be removed in Umbraco 15.
6+
*/
47
export function localizeAndTransform(host: UmbControllerHost, input: string): string {
58
return new UmbFormattingController(host).transform(input);
69
}

src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
2-
import { css, customElement, html, property } from '@umbraco-cms/backoffice/external/lit';
2+
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
3+
import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from '../../context/block-grid-entry.context-token.js';
4+
import type { UmbBlockDataType, UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
5+
6+
import '@umbraco-cms/backoffice/ufm';
37
import '../block-grid-areas-container/index.js';
48
import '../ref-grid-block/index.js';
5-
import type { UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
69

710
/**
811
* @element umb-block-grid-block
@@ -16,8 +19,26 @@ export class UmbBlockGridBlockElement extends UmbLitElement {
1619
@property({ attribute: false })
1720
urls?: UmbBlockViewUrlsPropType;
1821

22+
@state()
23+
_content?: UmbBlockDataType;
24+
25+
constructor() {
26+
super();
27+
28+
this.consumeContext(UMB_BLOCK_GRID_ENTRY_CONTEXT, (context) => {
29+
this.observe(
30+
context.content,
31+
(content) => {
32+
this._content = content;
33+
},
34+
'observeContent',
35+
);
36+
});
37+
}
38+
1939
override render() {
20-
return html`<umb-ref-grid-block standalone .name=${this.label ?? ''} href=${this.urls?.editContent ?? ''}>
40+
return html`<umb-ref-grid-block standalone href=${this.urls?.editContent ?? ''}>
41+
<umb-ufm-render inline .markdown=${this.label} .value=${this._content}></umb-ufm-render>
2142
<umb-block-grid-areas-container slot="areas"></umb-block-grid-areas-container>
2243
</umb-ref-grid-block>`;
2344
}

src/packages/block/block-list/components/ref-list-block/ref-list-block.element.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
import { UMB_BLOCK_ENTRY_CONTEXT } from '@umbraco-cms/backoffice/block';
21
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
32
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
3+
import { UMB_BLOCK_ENTRY_CONTEXT } from '@umbraco-cms/backoffice/block';
4+
import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block';
5+
6+
import '@umbraco-cms/backoffice/ufm';
47

58
/**
69
* @element umb-ref-list-block
@@ -11,6 +14,9 @@ export class UmbRefListBlockElement extends UmbLitElement {
1114
@property({ type: String })
1215
label?: string;
1316

17+
@state()
18+
_content?: UmbBlockDataType;
19+
1420
@state()
1521
_workspaceEditPath?: string;
1622

@@ -19,6 +25,14 @@ export class UmbRefListBlockElement extends UmbLitElement {
1925

2026
// UMB_BLOCK_LIST_ENTRY_CONTEXT
2127
this.consumeContext(UMB_BLOCK_ENTRY_CONTEXT, (context) => {
28+
this.observe(
29+
context.content,
30+
(content) => {
31+
this._content = content;
32+
},
33+
'observeContent',
34+
);
35+
2236
this.observe(
2337
context.workspaceEditContentPath,
2438
(workspaceEditPath) => {
@@ -30,10 +44,11 @@ export class UmbRefListBlockElement extends UmbLitElement {
3044
}
3145

3246
override render() {
33-
return html`<uui-ref-node
34-
standalone
35-
.name=${this.label ?? ''}
36-
href=${this._workspaceEditPath ?? '#'}></uui-ref-node>`;
47+
return html`
48+
<uui-ref-node standalone href=${this._workspaceEditPath ?? '#'}>
49+
<umb-ufm-render inline .markdown=${this.label} .value=${this._content}></umb-ufm-render>
50+
</uui-ref-node>
51+
`;
3752
}
3853

3954
static override styles = [

src/packages/core/components/table/table.element.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import type { UmbUfmRenderElement } from '../../../ufm/components/ufm-render/index.js';
12
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
23
import {
34
css,
5+
customElement,
46
html,
5-
LitElement,
67
ifDefined,
7-
when,
8-
customElement,
98
property,
10-
state,
119
repeat,
10+
state,
11+
when,
12+
LitElement,
1213
} from '@umbraco-cms/backoffice/external/lit';
1314

1415
// TODO: move to UI Library - entity actions should NOT be moved to UI Library but stay in an UmbTable element
@@ -31,6 +32,7 @@ export interface UmbTableColumn {
3132
width?: string;
3233
allowSorting?: boolean;
3334
align?: 'left' | 'center' | 'right';
35+
labelTemplate?: string;
3436
}
3537

3638
export interface UmbTableColumnLayoutElement extends HTMLElement {
@@ -263,6 +265,15 @@ export class UmbTableElement extends LitElement {
263265
return element;
264266
}
265267

268+
if (column.labelTemplate) {
269+
import('@umbraco-cms/backoffice/ufm');
270+
const element = document.createElement('umb-ufm-render') as UmbUfmRenderElement;
271+
element.inline = true;
272+
element.markdown = column.labelTemplate;
273+
element.value = value;
274+
return element;
275+
}
276+
266277
return value;
267278
}
268279

src/packages/core/extension-registry/models/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import type { ManifestTheme } from './theme.model.js';
4545
import type { ManifestTinyMcePlugin } from './tinymce-plugin.model.js';
4646
import type { ManifestTree } from './tree.model.js';
4747
import type { ManifestTreeItem } from './tree-item.model.js';
48+
import type { ManifestUfmComponent } from './ufm-component.model.js';
4849
import type { ManifestUserProfileApp } from './user-profile-app.model.js';
4950
import type { ManifestWorkspace, ManifestWorkspaceRoutableKind } from './workspace.model.js';
5051
import type { ManifestWorkspaceAction, ManifestWorkspaceActionDefaultKind } from './workspace-action.model.js';
@@ -113,6 +114,7 @@ export type * from './theme.model.js';
113114
export type * from './tinymce-plugin.model.js';
114115
export type * from './tree-item.model.js';
115116
export type * from './tree.model.js';
117+
export type * from './ufm-component.model.js';
116118
export type * from './user-granular-permission.model.js';
117119
export type * from './user-profile-app.model.js';
118120
export type * from './workspace-action-menu-item.model.js';
@@ -204,6 +206,7 @@ export type ManifestTypes =
204206
| ManifestTree
205207
| ManifestTreeItem
206208
| ManifestTreeStore
209+
| ManifestUfmComponent
207210
| ManifestUserProfileApp
208211
| ManifestWorkspaceActionMenuItem
209212
| ManifestWorkspaceActions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { ManifestApi, UmbApi } from '@umbraco-cms/backoffice/extension-api';
2+
import type { Tokens } from '@umbraco-cms/backoffice/external/marked';
3+
4+
export interface UmbUfmComponentApi extends UmbApi {
5+
render(token: Tokens.Generic): string | undefined;
6+
}
7+
8+
export interface MetaUfmComponent {
9+
marker: string;
10+
}
11+
12+
export interface ManifestUfmComponent extends ManifestApi<UmbUfmComponentApi> {
13+
type: 'ufmComponent';
14+
meta: MetaUfmComponent;
15+
}

0 commit comments

Comments
 (0)