mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-18 02:21:51 +08:00
83670ab335
Closes: [BS-3122](https://linear.app/affine-design/issue/BS-3122/footnote-definition-adapter-适配) Closes: [BS-3123](https://linear.app/affine-design/issue/BS-3123/几个-block-card-view-适配-footnote-态) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a new citation card component and web element for displaying citations. - Added support for citation-style rendering in attachment, bookmark, and linked document blocks. - Enabled citation parsing from footnote definitions in markdown for attachments, bookmarks, and linked docs. - Added a feature flag to enable or disable citation features. - Provided new toolbar logic to disable downloads for citation-style attachments. - **Improvements** - Updated block models and properties to support citation identifiers. - Added localization and settings for the citation experimental feature. - Enhanced markdown adapters to recognize and process citation footnotes. - Included new constants and styles for citation card display. - **Bug Fixes** - Ensured readonly state is respected in block interactions and rendering for citation blocks. - **Documentation** - Added exports and effects for new citation components and features. - **Tests** - Updated snapshots to include citation-related properties in block data. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import {
|
|
EdgelessCRUDIdentifier,
|
|
reassociateConnectorsCommand,
|
|
} from '@blocksuite/affine-block-surface';
|
|
import {
|
|
EMBED_CARD_HEIGHT,
|
|
EMBED_CARD_WIDTH,
|
|
} from '@blocksuite/affine-shared/consts';
|
|
import {
|
|
cloneReferenceInfoWithoutAliases,
|
|
isNewTabTrigger,
|
|
isNewViewTrigger,
|
|
} from '@blocksuite/affine-shared/utils';
|
|
import { Bound } from '@blocksuite/global/gfx';
|
|
|
|
import { toEdgelessEmbedBlock } from '../common/to-edgeless-embed-block.js';
|
|
import { EmbedLinkedDocBlockComponent } from './embed-linked-doc-block.js';
|
|
|
|
export class EmbedEdgelessLinkedDocBlockComponent extends toEdgelessEmbedBlock(
|
|
EmbedLinkedDocBlockComponent
|
|
) {
|
|
override convertToEmbed = () => {
|
|
const { caption, xywh } = this.model.props;
|
|
const { doc, id } = this.model;
|
|
|
|
const style = 'syncedDoc';
|
|
const bound = Bound.deserialize(xywh);
|
|
bound.w = EMBED_CARD_WIDTH[style];
|
|
bound.h = EMBED_CARD_HEIGHT[style];
|
|
|
|
const { addBlock } = this.std.get(EdgelessCRUDIdentifier);
|
|
const surface = this.gfx.surface ?? undefined;
|
|
const newId = addBlock(
|
|
'affine:embed-synced-doc',
|
|
{
|
|
xywh: bound.serialize(),
|
|
caption,
|
|
...cloneReferenceInfoWithoutAliases(this.referenceInfo$.peek()),
|
|
},
|
|
surface
|
|
);
|
|
|
|
this.std.command.exec(reassociateConnectorsCommand, {
|
|
oldId: id,
|
|
newId,
|
|
});
|
|
|
|
this.gfx.selection.set({
|
|
editing: false,
|
|
elements: [newId],
|
|
});
|
|
|
|
doc.deleteBlock(this.model);
|
|
};
|
|
|
|
protected override _handleClick = (evt: MouseEvent): void => {
|
|
if (isNewTabTrigger(evt)) {
|
|
this.open({ openMode: 'open-in-new-tab', event: evt });
|
|
} else if (isNewViewTrigger(evt)) {
|
|
this.open({ openMode: 'open-in-new-view', event: evt });
|
|
}
|
|
};
|
|
}
|