Skip to content

Commit 35a0b22

Browse files
Desktop: Accessibility: Add setting to increase scrollbar and other small control sizes (#11627)
1 parent e177bff commit 35a0b22

23 files changed

Lines changed: 281 additions & 224 deletions

.eslintignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,6 @@ packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js
289289
packages/app-desktop/gui/NoteEditor/utils/useFolder.js
290290
packages/app-desktop/gui/NoteEditor/utils/useFormNote.test.js
291291
packages/app-desktop/gui/NoteEditor/utils/useFormNote.js
292-
packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js
293292
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
294293
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
295294
packages/app-desktop/gui/NoteEditor/utils/usePluginEditorView.test.js
@@ -480,6 +479,7 @@ packages/app-desktop/gui/hooks/useDocument.js
480479
packages/app-desktop/gui/hooks/useEffectDebugger.js
481480
packages/app-desktop/gui/hooks/useElementHeight.js
482481
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
482+
packages/app-desktop/gui/hooks/useMarkupToHtml.js
483483
packages/app-desktop/gui/hooks/usePrevious.js
484484
packages/app-desktop/gui/hooks/usePropsDebugger.js
485485
packages/app-desktop/gui/lib/SearchInput/SearchInput.js

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js
264264
packages/app-desktop/gui/NoteEditor/utils/useFolder.js
265265
packages/app-desktop/gui/NoteEditor/utils/useFormNote.test.js
266266
packages/app-desktop/gui/NoteEditor/utils/useFormNote.js
267-
packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js
268267
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
269268
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
270269
packages/app-desktop/gui/NoteEditor/utils/usePluginEditorView.test.js
@@ -455,6 +454,7 @@ packages/app-desktop/gui/hooks/useDocument.js
455454
packages/app-desktop/gui/hooks/useEffectDebugger.js
456455
packages/app-desktop/gui/hooks/useElementHeight.js
457456
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
457+
packages/app-desktop/gui/hooks/useMarkupToHtml.js
458458
packages/app-desktop/gui/hooks/usePrevious.js
459459
packages/app-desktop/gui/hooks/usePropsDebugger.js
460460
packages/app-desktop/gui/lib/SearchInput/SearchInput.js

packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/v5/CodeMirror.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22
import { useState, useEffect, useRef, forwardRef, useCallback, useImperativeHandle, ForwardedRef, useContext } from 'react';
33

44
// eslint-disable-next-line no-unused-vars
5-
import { EditorCommand, MarkupToHtmlOptions, NoteBodyEditorProps, NoteBodyEditorRef } from '../../../utils/types';
5+
import { EditorCommand, NoteBodyEditorProps, NoteBodyEditorRef } from '../../../utils/types';
66
import { commandAttachFileToBody, getResourcesFromPasteEvent } from '../../../utils/resourceHandling';
77
import { ScrollOptions, ScrollOptionTypes } from '../../../utils/types';
88
import { CommandValue } from '../../../utils/types';
@@ -34,6 +34,7 @@ import useWebviewIpcMessage from '../utils/useWebviewIpcMessage';
3434
import useEditorSearchHandler from '../utils/useEditorSearchHandler';
3535
import { focus } from '@joplin/lib/utils/focusHandler';
3636
import { WindowIdContext } from '../../../../NewWindowOrIFrame';
37+
import { MarkupToHtmlOptions } from '../../../../hooks/useMarkupToHtml';
3738

3839
function markupRenderOptions(override: MarkupToHtmlOptions = null): MarkupToHtmlOptions {
3940
return { ...override };

packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,7 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
10351035

10361036
const allAssetsOptions: NoteStyleOptions = {
10371037
contentMaxWidthTarget: '.mce-content-body',
1038+
scrollbarSize: props.scrollbarSize,
10381039
themeId: props.contentMarkupLanguage === MarkupLanguage.Html ? 1 : null,
10391040
whiteBackgroundNoteRendering: props.whiteBackgroundNoteRendering,
10401041
};
@@ -1051,7 +1052,7 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
10511052
cancelled = true;
10521053
};
10531054
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
1054-
}, [editor, props.themeId, props.markupToHtml, props.allAssets, props.content, props.resourceInfos, props.contentKey, props.contentMarkupLanguage, props.whiteBackgroundNoteRendering]);
1055+
}, [editor, props.themeId, props.scrollbarSize, props.markupToHtml, props.allAssets, props.content, props.resourceInfos, props.contentKey, props.contentMarkupLanguage, props.whiteBackgroundNoteRendering]);
10551056

10561057
useEffect(() => {
10571058
if (!editor) return () => {};

packages/app-desktop/gui/NoteEditor/NoteEditor.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import useNoteSearchBar from './utils/useNoteSearchBar';
99
import useMessageHandler from './utils/useMessageHandler';
1010
import useWindowCommandHandler from './utils/useWindowCommandHandler';
1111
import useDropHandler from './utils/useDropHandler';
12-
import useMarkupToHtml from './utils/useMarkupToHtml';
12+
import useMarkupToHtml from '../hooks/useMarkupToHtml';
1313
import useFormNote, { OnLoadEvent, OnSetFormNote } from './utils/useFormNote';
1414
import useEffectiveNoteId from './utils/useEffectiveNoteId';
1515
import useFolder from './utils/useFolder';
@@ -45,7 +45,6 @@ import PlainEditor from './NoteBody/PlainEditor/PlainEditor';
4545
import CodeMirror6 from './NoteBody/CodeMirror/v6/CodeMirror';
4646
import CodeMirror5 from './NoteBody/CodeMirror/v5/CodeMirror';
4747
import { openItemById } from './utils/contextMenu';
48-
import getPluginSettingValue from '@joplin/lib/services/plugins/utils/getPluginSettingValue';
4948
import { MarkupLanguage } from '@joplin/renderer';
5049
import useScrollWhenReadyOptions from './utils/useScrollWhenReadyOptions';
5150
import useScheduleSaveCallbacks from './utils/useScheduleSaveCallbacks';
@@ -180,7 +179,7 @@ function NoteEditorContent(props: NoteEditorProps) {
180179
whiteBackgroundNoteRendering,
181180
customCss: props.customCss,
182181
plugins: props.plugins,
183-
settingValue: getPluginSettingValue,
182+
scrollbarSize: props.scrollbarSize,
184183
});
185184

186185
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
@@ -200,9 +199,10 @@ function NoteEditorContent(props: NoteEditorProps) {
200199
return markupToHtml.allAssets(markupLanguage, theme, {
201200
contentMaxWidth: props.contentMaxWidth,
202201
contentMaxWidthTarget: options.contentMaxWidthTarget,
202+
scrollbarSize: props.scrollbarSize,
203203
whiteBackgroundNoteRendering: options.whiteBackgroundNoteRendering,
204204
});
205-
}, [props.themeId, props.customCss, props.contentMaxWidth]);
205+
}, [props.themeId, props.scrollbarSize, props.customCss, props.contentMaxWidth]);
206206

207207
const handleProvisionalFlag = useCallback(() => {
208208
if (props.isProvisional) {
@@ -494,6 +494,7 @@ function NoteEditorContent(props: NoteEditorProps) {
494494
plugins: props.plugins,
495495
fontSize: Setting.value('style.editor.fontSize'),
496496
contentMaxWidth: props.contentMaxWidth,
497+
scrollbarSize: props.scrollbarSize,
497498
isSafeMode: props.isSafeMode,
498499
useCustomPdfViewer: props.useCustomPdfViewer,
499500
// We need it to identify the context for which media is rendered.
@@ -747,6 +748,7 @@ const mapStateToProps = (state: AppState, ownProps: ConnectProps) => {
747748
'setTags',
748749
], whenClauseContext)[0] as ToolbarButtonInfo,
749750
contentMaxWidth: state.settings['style.editor.contentMaxWidth'],
751+
scrollbarSize: state.settings['style.scrollbarSize'],
750752
isSafeMode: state.settings.isSafeMode,
751753
useCustomPdfViewer: false,
752754
syncUserId: state.settings['sync.userId'],

packages/app-desktop/gui/NoteEditor/style.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55
@use "./styles/note-title-wrapper.scss";
66
@use "./styles/note-editor-wrapper.scss";
77
@use "./styles/note-editor-viewer-row.scss";
8+
@use "./styles/revision-viewer-root.scss";
9+
@use "./styles/revision-viewer-title.scss";
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
.revision-viewer-root {
3+
background-color: var(--joplin-background-color);
4+
display: flex;
5+
flex-direction: column;
6+
flex: 1;
7+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
.revision-viewer-title {
3+
display: flex;
4+
flex-direction: row;
5+
align-items: center;
6+
margin-bottom: 10px;
7+
border-width: 1px;
8+
border-bottom-style: solid;
9+
border-color: var(--joplin-divider-color);
10+
padding-bottom: 10px;
11+
12+
> .revisions {
13+
margin-left: 10px;
14+
flex: 0.5;
15+
}
16+
17+
> .title {
18+
flex: 1;
19+
}
20+
}

packages/app-desktop/gui/NoteEditor/utils/types.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { DropHandler } from './useDropHandler';
99
import { SearchMarkers } from './useSearchMarkers';
1010
import { ParseOptions } from '@joplin/lib/HtmlToMd';
1111
import { ScrollStrategy } from '@joplin/editor/CodeMirror/CodeMirrorControl';
12+
import { MarkupToHtmlOptions } from '../../hooks/useMarkupToHtml';
13+
import { ScrollbarSize } from '@joplin/lib/models/settings/builtInMetadata';
1214

1315
export interface AllAssetsOptions {
1416
contentMaxWidthTarget?: string;
@@ -51,6 +53,7 @@ export interface NoteEditorProps {
5153
toolbarButtonInfos: ToolbarItem[];
5254
setTagsToolbarButtonInfo: ToolbarButtonInfo;
5355
contentMaxWidth: number;
56+
scrollbarSize: ScrollbarSize;
5457
isSafeMode: boolean;
5558
useCustomPdfViewer: boolean;
5659
shareCacheSetting: string;
@@ -72,22 +75,7 @@ export interface NoteBodyEditorRef {
7275
execCommand(command: CommandValue): Promise<void>;
7376
}
7477

75-
export interface MarkupToHtmlOptions {
76-
replaceResourceInternalToExternalLinks?: boolean;
77-
resourceInfos?: ResourceInfos;
78-
contentMaxWidth?: number;
79-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
80-
plugins?: Record<string, any>;
81-
bodyOnly?: boolean;
82-
mapsToLine?: boolean;
83-
useCustomPdfViewer?: boolean;
84-
noteId?: string;
85-
vendorDir?: string;
86-
platformName?: string;
87-
allowedFilePrefixes?: string[];
88-
whiteBackgroundNoteRendering?: boolean;
89-
}
90-
78+
export { MarkupToHtmlOptions };
9179
export type MarkupToHtmlHandler = (markupLanguage: MarkupLanguage, markup: string, options: MarkupToHtmlOptions)=> Promise<RenderResult>;
9280
export type HtmlToMarkdownHandler = (markupLanguage: number, html: string, originalCss: string, parseOptions?: ParseOptions)=> Promise<string>;
9381

@@ -105,6 +93,8 @@ export interface NoteBodyEditorProps {
10593
// avoid cases where black text is rendered over a dark background.
10694
whiteBackgroundNoteRendering: boolean;
10795

96+
scrollbarSize: ScrollbarSize;
97+
10898
content: string;
10999
contentKey: string;
110100
contentMarkupLanguage: number;

0 commit comments

Comments
 (0)