mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 21:27:20 +00:00
120 lines
3.3 KiB
TypeScript
120 lines
3.3 KiB
TypeScript
import {
|
|
type ReferenceNodeConfig,
|
|
ReferenceNodeConfigIdentifier,
|
|
} from '@blocksuite/affine-components/rich-text';
|
|
import {
|
|
type BlockStdScope,
|
|
ConfigIdentifier,
|
|
LifeCycleWatcher,
|
|
WidgetViewMapIdentifier,
|
|
type WidgetViewMapType,
|
|
} from '@blocksuite/block-std';
|
|
import type { Container } from '@blocksuite/global/di';
|
|
|
|
import type { CodeBlockConfig } from '../../code-block/code-block-config.js';
|
|
import { AFFINE_EMBED_CARD_TOOLBAR_WIDGET } from '../../root-block/widgets/embed-card-toolbar/embed-card-toolbar.js';
|
|
import { AFFINE_FORMAT_BAR_WIDGET } from '../../root-block/widgets/format-bar/format-bar.js';
|
|
import { AFFINE_SLASH_MENU_WIDGET } from '../../root-block/widgets/slash-menu/index.js';
|
|
|
|
export class MobileSpecsPatches extends LifeCycleWatcher {
|
|
static override key = 'mobile-patches';
|
|
|
|
constructor(std: BlockStdScope) {
|
|
super(std);
|
|
|
|
std.doc.awarenessStore.setFlag('enable_mobile_keyboard_toolbar', true);
|
|
std.doc.awarenessStore.setFlag('enable_mobile_linked_doc_menu', true);
|
|
}
|
|
|
|
static override setup(di: Container) {
|
|
super.setup(di);
|
|
|
|
// Hide reference popup on mobile.
|
|
{
|
|
const prev = di.getFactory(ReferenceNodeConfigIdentifier);
|
|
di.override(ReferenceNodeConfigIdentifier, provider => {
|
|
return {
|
|
...prev?.(provider),
|
|
hidePopup: true,
|
|
} satisfies ReferenceNodeConfig;
|
|
});
|
|
}
|
|
|
|
// Hide number lines for code block on mobile.
|
|
{
|
|
const codeConfigIdentifier = ConfigIdentifier('affine:code');
|
|
const prev = di.getFactory(codeConfigIdentifier);
|
|
di.override(codeConfigIdentifier, provider => {
|
|
return {
|
|
...prev?.(provider),
|
|
showLineNumbers: false,
|
|
} satisfies CodeBlockConfig;
|
|
});
|
|
}
|
|
|
|
// Disable root level widgets for mobile.
|
|
{
|
|
const rootWidgetViewMapIdentifier =
|
|
WidgetViewMapIdentifier('affine:page');
|
|
|
|
const prev = di.getFactory(rootWidgetViewMapIdentifier);
|
|
|
|
di.override(rootWidgetViewMapIdentifier, provider => {
|
|
const ignoreWidgets = [
|
|
AFFINE_FORMAT_BAR_WIDGET,
|
|
AFFINE_EMBED_CARD_TOOLBAR_WIDGET,
|
|
AFFINE_SLASH_MENU_WIDGET,
|
|
];
|
|
|
|
const newMap = { ...prev?.(provider) };
|
|
|
|
ignoreWidgets.forEach(widget => {
|
|
if (widget in newMap) delete newMap[widget];
|
|
});
|
|
|
|
return newMap;
|
|
});
|
|
}
|
|
|
|
// Disable block level toolbar widgets for mobile.
|
|
{
|
|
di.override(
|
|
WidgetViewMapIdentifier('affine:code'),
|
|
(): WidgetViewMapType => ({})
|
|
);
|
|
|
|
di.override(
|
|
WidgetViewMapIdentifier('affine:image'),
|
|
(): WidgetViewMapType => ({})
|
|
);
|
|
|
|
di.override(
|
|
WidgetViewMapIdentifier('affine:surface-ref'),
|
|
(): WidgetViewMapType => ({})
|
|
);
|
|
}
|
|
}
|
|
|
|
override mounted() {
|
|
// remove slash placeholder for mobile: `type / ...`
|
|
{
|
|
const paragraphService = this.std.getService('affine:paragraph');
|
|
if (!paragraphService) return;
|
|
|
|
paragraphService.placeholderGenerator = model => {
|
|
const placeholders = {
|
|
text: '',
|
|
h1: 'Heading 1',
|
|
h2: 'Heading 2',
|
|
h3: 'Heading 3',
|
|
h4: 'Heading 4',
|
|
h5: 'Heading 5',
|
|
h6: 'Heading 6',
|
|
quote: '',
|
|
};
|
|
return placeholders[model.type];
|
|
};
|
|
}
|
|
}
|
|
}
|