Compare commits

...
Author SHA1 Message Date
Laurent Cozic 812666957c update 2025-02-12 18:13:27 +00:00
Laurent Cozic dabb7e08b4 init 2025-02-12 15:30:21 +00:00
29 changed files with 345 additions and 123 deletions

No files matched your search

+3 -2
View File
@@ -456,7 +456,6 @@ packages/app-desktop/gui/WindowCommandsAndDialogs/commands/restoreNote.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/revealResourceFile.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/search.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/setTags.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showEditorPlugin.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showModalMessage.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showNoteContentProperties.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showNoteProperties.js
@@ -465,7 +464,6 @@ packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showShareFolderDialog
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showShareNoteDialog.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showSpellCheckerMenu.test.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showSpellCheckerMenu.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleEditorPlugin.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleEditors.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleLayoutMoveMode.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleMenuBar.js
@@ -1021,7 +1019,9 @@ packages/lib/commands/openMasterPasswordDialog.js
packages/lib/commands/permanentlyDeleteNote.js
packages/lib/commands/renderMarkup.test.js
packages/lib/commands/renderMarkup.js
packages/lib/commands/showEditorPlugin.js
packages/lib/commands/synchronize.js
packages/lib/commands/toggleEditorPlugin.js
packages/lib/components/EncryptionConfigScreen/utils.test.js
packages/lib/components/EncryptionConfigScreen/utils.js
packages/lib/components/shared/NoteList/getEmptyFolderMessage.js
@@ -1303,6 +1303,7 @@ packages/lib/services/plugins/utils/getPluginIssueReportUrl.js
packages/lib/services/plugins/utils/getPluginNamespacedSettingKey.js
packages/lib/services/plugins/utils/getPluginSettingKeyPrefix.js
packages/lib/services/plugins/utils/getPluginSettingValue.js
packages/lib/services/plugins/utils/getShownPluginEditorView.js
packages/lib/services/plugins/utils/isCompatible/getDefaultPlatforms.js
packages/lib/services/plugins/utils/isCompatible/index.test.js
packages/lib/services/plugins/utils/isCompatible/index.js
+3 -2
View File
@@ -431,7 +431,6 @@ packages/app-desktop/gui/WindowCommandsAndDialogs/commands/restoreNote.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/revealResourceFile.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/search.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/setTags.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showEditorPlugin.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showModalMessage.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showNoteContentProperties.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showNoteProperties.js
@@ -440,7 +439,6 @@ packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showShareFolderDialog
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showShareNoteDialog.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showSpellCheckerMenu.test.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/showSpellCheckerMenu.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleEditorPlugin.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleEditors.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleLayoutMoveMode.js
packages/app-desktop/gui/WindowCommandsAndDialogs/commands/toggleMenuBar.js
@@ -996,7 +994,9 @@ packages/lib/commands/openMasterPasswordDialog.js
packages/lib/commands/permanentlyDeleteNote.js
packages/lib/commands/renderMarkup.test.js
packages/lib/commands/renderMarkup.js
packages/lib/commands/showEditorPlugin.js
packages/lib/commands/synchronize.js
packages/lib/commands/toggleEditorPlugin.js
packages/lib/components/EncryptionConfigScreen/utils.test.js
packages/lib/components/EncryptionConfigScreen/utils.js
packages/lib/components/shared/NoteList/getEmptyFolderMessage.js
@@ -1278,6 +1278,7 @@ packages/lib/services/plugins/utils/getPluginIssueReportUrl.js
packages/lib/services/plugins/utils/getPluginNamespacedSettingKey.js
packages/lib/services/plugins/utils/getPluginSettingKeyPrefix.js
packages/lib/services/plugins/utils/getPluginSettingValue.js
packages/lib/services/plugins/utils/getShownPluginEditorView.js
packages/lib/services/plugins/utils/isCompatible/getDefaultPlatforms.js
packages/lib/services/plugins/utils/isCompatible/index.test.js
packages/lib/services/plugins/utils/isCompatible/index.js
@@ -1,15 +1,11 @@
import { useMemo } from 'react';
import { PluginStates } from '@joplin/lib/services/plugins/reducer';
import getActivePluginEditorView from '@joplin/lib/services/plugins/utils/getActivePluginEditorView';
import getShownPluginEditorView from '@joplin/lib/services/plugins/utils/getShownPluginEditorView';
// If a plugin editor should be shown for the current note, this function will return the plugin and
// associated view.
export default (plugins: PluginStates, shownEditorViewIds: string[]) => {
return useMemo(() => {
const { editorPlugin, editorView } = getActivePluginEditorView(plugins);
if (editorView) {
if (!shownEditorViewIds.includes(editorView.id)) return { editorPlugin: null, editorView: null };
}
return { editorPlugin, editorView };
return getShownPluginEditorView(plugins, shownEditorViewIds);
}, [plugins, shownEditorViewIds]);
};
@@ -28,7 +28,6 @@ import * as restoreNote from './restoreNote';
import * as revealResourceFile from './revealResourceFile';
import * as search from './search';
import * as setTags from './setTags';
import * as showEditorPlugin from './showEditorPlugin';
import * as showModalMessage from './showModalMessage';
import * as showNoteContentProperties from './showNoteContentProperties';
import * as showNoteProperties from './showNoteProperties';
@@ -36,7 +35,6 @@ import * as showPrompt from './showPrompt';
import * as showShareFolderDialog from './showShareFolderDialog';
import * as showShareNoteDialog from './showShareNoteDialog';
import * as showSpellCheckerMenu from './showSpellCheckerMenu';
import * as toggleEditorPlugin from './toggleEditorPlugin';
import * as toggleEditors from './toggleEditors';
import * as toggleLayoutMoveMode from './toggleLayoutMoveMode';
import * as toggleMenuBar from './toggleMenuBar';
@@ -78,7 +76,6 @@ const index: any[] = [
revealResourceFile,
search,
setTags,
showEditorPlugin,
showModalMessage,
showNoteContentProperties,
showNoteProperties,
@@ -86,7 +83,6 @@ const index: any[] = [
showShareFolderDialog,
showShareNoteDialog,
showSpellCheckerMenu,
toggleEditorPlugin,
toggleEditors,
toggleLayoutMoveMode,
toggleMenuBar,
@@ -25,6 +25,7 @@ import WebBetaButton from './WebBetaButton';
import Menu, { MenuOptionType } from './Menu';
import shim from '@joplin/lib/shim';
import CommandService from '@joplin/lib/services/CommandService';
export { MenuOptionType };
// Rather than applying a padding to the whole bar, it is applied to each
@@ -67,6 +68,7 @@ interface ScreenHeaderProps {
showSideMenuButton?: boolean;
showSearchButton?: boolean;
showContextMenuButton?: boolean;
showPluginEditorButton?: boolean;
showBackButton?: boolean;
saveButtonDisabled?: boolean;
@@ -419,6 +421,28 @@ class ScreenHeaderComponent extends PureComponent<ScreenHeaderProps, ScreenHeade
);
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const renderTogglePluginEditorButton = (styles: any, onPress: OnPressCallback, disabled: boolean) => {
if (!this.props.showPluginEditorButton) return null;
return (
<IconButton
onPress={onPress}
disabled={disabled}
themeId={themeId}
description={_('Toggle plugin editor')}
accessibilityHint={
disabled ? null : _('Toggle plugin editor')
}
contentWrapperStyle={disabled ? styles.iconButtonDisabled : styles.iconButton}
iconName='ionicon eye'
iconStyle={styles.topIcon}
/>
);
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
function deleteButton(styles: any, onPress: OnPressCallback, disabled: boolean) {
return (
@@ -631,6 +655,8 @@ class ScreenHeaderComponent extends PureComponent<ScreenHeaderProps, ScreenHeade
</Menu>
);
const togglePluginEditorButton = renderTogglePluginEditorButton(this.styles(), () => CommandService.instance().execute('toggleEditorPlugin'), false);
return (
<View style={this.styles().container}>
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
@@ -653,6 +679,7 @@ class ScreenHeaderComponent extends PureComponent<ScreenHeaderProps, ScreenHeade
{restoreButtonComp}
{duplicateButtonComp}
{sortButtonComp}
{togglePluginEditorButton}
{menuComp}
</View>
<WarningBanner
@@ -28,7 +28,7 @@ const PluginDialogManager: React.FC<Props> = props => {
const dialogs: ReactElement[] = [];
for (const viewInfo of viewInfos) {
if (viewInfo.view.containerType === ContainerType.Panel || !viewInfo.view.opened) {
if (viewInfo.view.containerType === ContainerType.Panel || viewInfo.view.containerType === ContainerType.Editor || !viewInfo.view.opened) {
continue;
}
@@ -1,4 +1,4 @@
import AsyncActionQueue from '@joplin/lib/AsyncActionQueue';
import AsyncActionQueue, { IntervalType } from '@joplin/lib/AsyncActionQueue';
import uuid from '@joplin/lib/uuid';
import Setting from '@joplin/lib/models/Setting';
import shim from '@joplin/lib/shim';
@@ -51,7 +51,7 @@ import { getNoteCallbackUrl } from '@joplin/lib/callbackUrlUtils';
import { AppState } from '../../../utils/types';
import restoreItems from '@joplin/lib/services/trash/restoreItems';
import { getDisplayParentTitle } from '@joplin/lib/services/trash';
import { PluginStates, utils as pluginUtils } from '@joplin/lib/services/plugins/reducer';
import { PluginHtmlContents, PluginStates, utils as pluginUtils } from '@joplin/lib/services/plugins/reducer';
import debounce from '../../../utils/debounce';
import { focus } from '@joplin/lib/utils/focusHandler';
import CommandService, { RegisteredRuntime } from '@joplin/lib/services/CommandService';
@@ -63,6 +63,14 @@ import { DialogContext, DialogControl } from '../../DialogManager';
import { CommandRuntimeProps, EditorMode, PickerResponse } from './types';
import commands from './commands';
import { AttachFileAction, AttachFileOptions } from './commands/attachFile';
import { EditorActivationCheckFilterObject } from '@joplin/lib/services/plugins/api/types';
import eventManager from '@joplin/lib/eventManager';
import PluginService from '@joplin/lib/services/plugins/PluginService';
import WebviewController from '@joplin/lib/services/plugins/WebviewController';
import PluginUserWebView from '../../plugins/dialogs/PluginUserWebView';
import getShownPluginEditorView from '@joplin/lib/services/plugins/utils/getShownPluginEditorView';
import getActivePluginEditorView from '@joplin/lib/services/plugins/utils/getActivePluginEditorView';
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
const emptyArray: any[] = [];
@@ -97,6 +105,9 @@ interface Props extends BaseProps {
highlightedWords: string[];
noteHash: string;
toolbarEnabled: boolean;
'plugins.shownEditorViewIds': string[];
pluginHtmlContents: PluginHtmlContents;
editorNoteReloadTimeRequest: number;
}
interface ComponentProps extends Props {
@@ -122,6 +133,7 @@ interface State {
imageEditorResourceFilepath: string;
noteResources: Record<string, ResourceInfo>;
newAndNoTitleChangeNoteId: boolean|null;
noteLastLoadTime: number;
undoRedoButtonState: {
canUndo: boolean;
@@ -131,6 +143,20 @@ interface State {
voiceTypingDialogShown: boolean;
}
// TODO: COPIED FROM DESKTOP
const makeNoteUpdateAction = (shownEditorViewIds: string[]) => {
return async () => {
for (const viewId of shownEditorViewIds) {
const controller = PluginService.instance().viewControllerByViewId(viewId) as WebviewController;
if (controller) controller.emitUpdate();
}
};
};
class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> implements BaseNoteScreenComponent {
// This isn't in this.state because we don't want changing scroll to trigger
// a re-render.
@@ -163,6 +189,8 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
public dialogbox: any;
private commandRegistration_: RegisteredRuntime|null = null;
private viewUpdateAsyncQueue_ = new AsyncActionQueue(100, IntervalType.Fixed);
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
public static navigationOptions(): any {
return { header: null };
@@ -189,6 +217,7 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
noteResources: {},
imageEditorResourceFilepath: null,
newAndNoTitleChangeNoteId: null,
noteLastLoadTime: Date.now(),
undoRedoButtonState: {
canUndo: false,
@@ -551,6 +580,9 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
}
}, 100);
}
// TODO: set shownEditorViewIds
this.viewUpdateAsyncQueue_.push(makeNoteUpdateAction(['plugin-view-org.joplinapp.plugins.YesYouKan-kanbanBoard']));
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
@@ -610,6 +642,28 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
noteHash: noteHash,
});
}
if (this.props['plugins.shownEditorViewIds'] !== prevProps['plugins.shownEditorViewIds']) {
const { editorPlugin } = getShownPluginEditorView(this.props.plugins, this.props['plugins.shownEditorViewIds']);
if (!editorPlugin && this.props.editorNoteReloadTimeRequest > this.state.noteLastLoadTime) {
void shared.reloadNote(this);
}
}
// **************** TODO: REUSED FROM DESKTOP APP
setTimeout(async () => {
let filterObject: EditorActivationCheckFilterObject = {
activatedEditors: [],
};
filterObject = await eventManager.filterEmit('editorActivationCheck', filterObject);
for (const editor of filterObject.activatedEditors) {
const controller = PluginService.instance().pluginById(editor.pluginId).viewController(editor.viewId) as WebviewController;
controller.setActive(editor.isActive);
}
}, 50);
// **************** REUSED FROM DESKTOP APP
}
public componentWillUnmount() {
@@ -1420,6 +1474,8 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
// multiple times.
this.registerCommands();
const { editorPlugin, editorView } = getShownPluginEditorView(this.props.plugins, this.props['plugins.shownEditorViewIds']);
if (this.state.isLoading) {
return (
<View style={this.styles().screen}>
@@ -1448,97 +1504,113 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
/>;
}
const renderPluginEditor = () => {
return <PluginUserWebView
viewInfo={{ plugin: editorPlugin, view: editorView }}
themeId={this.props.themeId}
onLoadEnd={() => {}}
pluginHtmlContents={this.props.pluginHtmlContents}
setDialogControl={() => {}}
style={{}}
/>;
};
// Currently keyword highlighting is supported only when FTS is available.
const keywords = this.props.searchQuery && !!this.props.ftsEnabled ? this.props.highlightedWords : emptyArray;
let bodyComponent = null;
if (this.state.mode === 'view') {
// Note: as of 2018-12-29 it's important not to display the viewer if the note body is empty,
// to avoid the HACK_webviewLoadingState related bug.
bodyComponent =
!note || !note.body.trim() ? null : (
<NoteBodyViewer
onJoplinLinkClick={this.onJoplinLinkClick_}
style={this.styles().noteBodyViewer}
// Extra bottom padding to make it possible to scroll past the
// action button (so that it doesn't overlap the text)
paddingBottom={150}
noteBody={note.body}
noteMarkupLanguage={note.markup_language}
noteResources={this.state.noteResources}
highlightedKeywords={keywords}
themeId={this.props.themeId}
fontSize={this.props.viewerFontSize}
noteHash={this.props.noteHash}
onCheckboxChange={this.onBodyViewerCheckboxChange}
onMarkForDownload={this.onMarkForDownload}
onRequestEditResource={this.onEditResource}
onScroll={this.onBodyViewerScroll}
initialScroll={this.lastBodyScroll}
pluginStates={this.props.plugins}
/>
);
if (editorView) {
bodyComponent = renderPluginEditor();
} else {
// Note: In theory ScrollView can be used to provide smoother scrolling of the TextInput.
// However it causes memory or rendering issues on older Android devices, probably because
// the whole text input has to be in memory for the scrollview to work. So we keep it as
// a plain TextInput for now.
// See https://github.com/laurent22/joplin/issues/3041
// IMPORTANT: The TextInput selection is unreliable and cannot be used in a controlled component
// context. In other words, the selection should be considered read-only. For example, if the selection
// is saved to the state in onSelectionChange and the current text in onChangeText, then set
// back in `selection` and `value` props, it will mostly work. But when typing fast, sooner or
// later the real selection will be different from what is stored in the state, thus making
// the cursor jump around. Eg, when typing "abcdef", it will do this:
// abcd|
// abcde|
// abcde|f
if (!this.useEditorBeta()) {
bodyComponent = (
<TextInput
autoCapitalize="sentences"
style={this.styles().bodyTextInput}
ref="noteBodyTextField"
multiline={true}
value={note.body}
onChangeText={this.onPlainEditorTextChange}
onSelectionChange={this.onPlainEditorSelectionChange}
blurOnSubmit={false}
selectionColor={theme.textSelectionColor}
keyboardAppearance={theme.keyboardAppearance}
placeholder={_('Add body')}
placeholderTextColor={theme.colorFaded}
// need some extra padding for iOS so that the keyboard won't cover last line of the note
// see https://github.com/laurent22/joplin/issues/3607
// Property is gone as of RN 0.72?
// paddingBottom={ (Platform.OS === 'ios' ? 40 : 0) as any}
/>
);
if (this.state.mode === 'view') {
// Note: as of 2018-12-29 it's important not to display the viewer if the note body is empty,
// to avoid the HACK_webviewLoadingState related bug.
bodyComponent =
!note || !note.body.trim() ? null : (
<NoteBodyViewer
onJoplinLinkClick={this.onJoplinLinkClick_}
style={this.styles().noteBodyViewer}
// Extra bottom padding to make it possible to scroll past the
// action button (so that it doesn't overlap the text)
paddingBottom={150}
noteBody={note.body}
noteMarkupLanguage={note.markup_language}
noteResources={this.state.noteResources}
highlightedKeywords={keywords}
themeId={this.props.themeId}
fontSize={this.props.viewerFontSize}
noteHash={this.props.noteHash}
onCheckboxChange={this.onBodyViewerCheckboxChange}
onMarkForDownload={this.onMarkForDownload}
onRequestEditResource={this.onEditResource}
onScroll={this.onBodyViewerScroll}
initialScroll={this.lastBodyScroll}
pluginStates={this.props.plugins}
/>
);
} else {
const editorStyle = this.styles().bodyTextInput;
// Note: In theory ScrollView can be used to provide smoother scrolling of the TextInput.
// However it causes memory or rendering issues on older Android devices, probably because
// the whole text input has to be in memory for the scrollview to work. So we keep it as
// a plain TextInput for now.
// See https://github.com/laurent22/joplin/issues/3041
bodyComponent = <NoteEditor
ref={this.editorRef}
toolbarEnabled={this.props.toolbarEnabled}
themeId={this.props.themeId}
initialText={note.body}
initialSelection={this.selection}
onChange={this.onMarkdownEditorTextChange}
onSelectionChange={this.onMarkdownEditorSelectionChange}
onUndoRedoDepthChange={this.onUndoRedoDepthChange}
onAttach={this.onAttach}
readOnly={this.state.readOnly}
plugins={this.props.plugins}
style={{
...editorStyle,
// IMPORTANT: The TextInput selection is unreliable and cannot be used in a controlled component
// context. In other words, the selection should be considered read-only. For example, if the selection
// is saved to the state in onSelectionChange and the current text in onChangeText, then set
// back in `selection` and `value` props, it will mostly work. But when typing fast, sooner or
// later the real selection will be different from what is stored in the state, thus making
// the cursor jump around. Eg, when typing "abcdef", it will do this:
// abcd|
// abcde|
// abcde|f
// Allow the editor to set its own padding
paddingLeft: 0,
paddingRight: 0,
}}
/>;
if (!this.useEditorBeta()) {
bodyComponent = (
<TextInput
autoCapitalize="sentences"
style={this.styles().bodyTextInput}
ref="noteBodyTextField"
multiline={true}
value={note.body}
onChangeText={this.onPlainEditorTextChange}
onSelectionChange={this.onPlainEditorSelectionChange}
blurOnSubmit={false}
selectionColor={theme.textSelectionColor}
keyboardAppearance={theme.keyboardAppearance}
placeholder={_('Add body')}
placeholderTextColor={theme.colorFaded}
// need some extra padding for iOS so that the keyboard won't cover last line of the note
// see https://github.com/laurent22/joplin/issues/3607
// Property is gone as of RN 0.72?
// paddingBottom={ (Platform.OS === 'ios' ? 40 : 0) as any}
/>
);
} else {
const editorStyle = this.styles().bodyTextInput;
bodyComponent = <NoteEditor
ref={this.editorRef}
toolbarEnabled={this.props.toolbarEnabled}
themeId={this.props.themeId}
initialText={note.body}
initialSelection={this.selection}
onChange={this.onMarkdownEditorTextChange}
onSelectionChange={this.onMarkdownEditorSelectionChange}
onUndoRedoDepthChange={this.onUndoRedoDepthChange}
onAttach={this.onAttach}
readOnly={this.state.readOnly}
plugins={this.props.plugins}
style={{
...editorStyle,
// Allow the editor to set its own padding
paddingLeft: 0,
paddingRight: 0,
}}
/>;
}
}
}
@@ -1595,6 +1667,8 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
return <VoiceTypingDialog locale={currentLocale()} onText={this.voiceTypingDialog_onText} onDismiss={this.voiceTypingDialog_onDismiss}/>;
};
const { editorPlugin: activeEditorPlugin } = getActivePluginEditorView(this.props.plugins);
return (
<View style={this.rootStyle(this.props.themeId).root}>
<ScreenHeader
@@ -1607,6 +1681,7 @@ class NoteScreenComponent extends BaseScreenComponent<ComponentProps, State> imp
showSearchButton={false}
showUndoButton={(this.state.undoRedoButtonState.canUndo || this.state.undoRedoButtonState.canRedo) && this.state.mode === 'edit'}
showRedoButton={this.state.undoRedoButtonState.canRedo && this.state.mode === 'edit'}
showPluginEditorButton={!!activeEditorPlugin}
undoButtonDisabled={!this.state.undoRedoButtonState.canUndo && this.state.undoRedoButtonState.canRedo}
onUndoButtonPress={this.screenHeader_undoButtonPress}
onRedoButtonPress={this.screenHeader_redoButtonPress}
@@ -1654,6 +1729,9 @@ const NoteScreen = connect((state: AppState) => {
provisionalNoteIds: state.provisionalNoteIds,
highlightedWords: state.highlightedWords,
plugins: state.pluginService.plugins,
'plugins.shownEditorViewIds': state.settings['plugins.shownEditorViewIds'] || [],
pluginHtmlContents: state.pluginService.pluginHtmlContents,
editorNoteReloadTimeRequest: state.editorNoteReloadTimeRequest,
// What we call "beta editor" in this component is actually the (now
// default) CodeMirror editor. That should be refactored to make it less
@@ -288,7 +288,14 @@ class NotesScreenComponent extends BaseScreenComponent<ComponentProps, State> {
inert={accessibilityHidden}
>
<ScreenHeader title={iconString + title} showBackButton={false} sortButton_press={this.sortButton_press} folderPickerOptions={this.folderPickerOptions()} showSearchButton={true} showSideMenuButton={true} />
<ScreenHeader
title={iconString + title}
showBackButton={false}
sortButton_press={this.sortButton_press}
folderPickerOptions={this.folderPickerOptions()}
showSearchButton={true}
showSideMenuButton={true}
/>
<NoteList />
{actionButtonComp}
</AccessibleView>
@@ -1 +1 @@
module.exports = {"hash":"cfa07333af79f4db4bc9ca008fb257f8","files":["highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]}
module.exports = {"hash":"cfa07333af79f4db4bc9ca008fb257f8","files":[".DS_Store","highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]}
@@ -0,0 +1 @@
module.exports = 'LyohCiAqIEZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tCiAqIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpCiAqIENvcHlyaWdodCAyMDI0IEZvbnRpY29ucywgSW5jLgogKi8KLmZhe2ZvbnQtZmFtaWx5OnZhcigtLWZhLXN0eWxlLWZhbWlseSwiRm9udCBBd2Vzb21lIDYgRnJlZSIpO2ZvbnQtd2VpZ2h0OnZhcigtLWZhLXN0eWxlLDkwMCl9LmZhLC5mYS1icmFuZHMsLmZhLXJlZ3VsYXIsLmZhLXNvbGlkLC5mYWIsLmZhciwuZmFzey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2Rpc3BsYXk6dmFyKC0tZmEtZGlzcGxheSxpbmxpbmUtYmxvY2spO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7bGluZS1oZWlnaHQ6MTt0ZXh0LXJlbmRlcmluZzphdXRvfS5mYS1icmFuZHM6YmVmb3JlLC5mYS1yZWd1bGFyOmJlZm9yZSwuZmEtc29saWQ6YmVmb3JlLC5mYTpiZWZvcmUsLmZhYjpiZWZvcmUsLmZhcjpiZWZvcmUsLmZhczpiZWZvcmV7Y29udGVudDp2YXIoLS1mYSl9LmZhLWNsYXNzaWMsLmZhLXJlZ3VsYXIsLmZhLXNvbGlkLC5mYXIsLmZhc3tmb250LWZhbWlseToiRm9udCBBd2Vzb21lIDYgRnJlZSJ9LmZhLWJyYW5kcywuZmFie2ZvbnQtZmFtaWx5OiJGb250IEF3ZXNvbWUgNiBCcmFuZHMifS5mYS0xeHtmb250LXNpemU6MWVtfS5mYS0yeHtmb250LXNpemU6MmVtfS5mYS0zeHtmb250LXNpemU6M2VtfS5mYS00eHtmb250LXNpemU6NGVtfS5mYS01eHtmb250LXNpemU6NWVtfS5mYS02eHtmb250LXNpemU6NmVtfS5mYS03eHtmb250LXNpemU6N2VtfS5mYS04eHtmb250LXNpemU6OGVtfS5mYS05eHtmb250LXNpemU6OWVtfS5mYS0xMHh7Zm9udC1zaXplOjEwZW19LmZhLTJ4c3tmb250LXNpemU6LjYyNWVtO2xpbmUtaGVpZ2h0Oi4xZW07dmVydGljYWwtYWxpZ246LjIyNWVtfS5mYS14c3tmb250LXNpemU6Ljc1ZW07bGluZS1oZWlnaHQ6LjA4MzMzZW07dmVydGljYWwtYWxpZ246LjEyNWVtfS5mYS1zbXtmb250LXNpemU6Ljg3NWVtO2xpbmUtaGVpZ2h0Oi4wNzE0M2VtO3ZlcnRpY2FsLWFsaWduOi4wNTM1N2VtfS5mYS1sZ3tmb250LXNpemU6MS4yNWVtO2xpbmUtaGVpZ2h0Oi4wNWVtO3ZlcnRpY2FsLWFsaWduOi0uMDc1ZW19LmZhLXhse2ZvbnQtc2l6ZToxLjVlbTtsaW5lLWhlaWdodDouMDQxNjdlbTt2ZXJ0aWNhbC1hbGlnbjotLjEyNWVtfS5mYS0yeGx7Zm9udC1zaXplOjJlbTtsaW5lLWhlaWdodDouMDMxMjVlbTt2ZXJ0aWNhbC1hbGlnbjotLjE4NzVlbX0uZmEtZnd7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MS4yNWVtfS5mYS11bHtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW4tbGVmdDp2YXIoLS1mYS1saS1tYXJnaW4sMi41ZW0pO3BhZGRpbmctbGVmdDowfS5mYS11bD5saXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmEtbGl7bGVmdDpjYWxjKHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKi0xKTtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDp2YXIoLS1mYS1saS13aWR0aCwyZW0pO2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLWJvcmRlcntib3JkZXItcmFkaXVzOnZhcigtLWZhLWJvcmRlci1yYWRpdXMsLjFlbSk7Ym9yZGVyOnZhcigtLWZhLWJvcmRlci13aWR0aCwuMDhlbSkgdmFyKC0tZmEtYm9yZGVyLXN0eWxlLHNvbGlkKSB2YXIoLS1mYS1ib3JkZXItY29sb3IsI2VlZSk7cGFkZGluZzp2YXIoLS1mYS1ib3JkZXItcGFkZGluZywuMmVtIC4yNWVtIC4xNWVtKX0uZmEtcHVsbC1sZWZ0e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OnZhcigtLWZhLXB1bGwtbWFyZ2luLC4zZW0pfS5mYS1wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OnZhcigtLWZhLXB1bGwtbWFyZ2luLC4zZW0pfS5mYS1iZWF0e2FuaW1hdGlvbi1uYW1lOmZhLWJlYXQ7YW5pbWF0aW9uLWRlbGF5OnZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwwcyk7YW5pbWF0aW9uLWRpcmVjdGlvbjp2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLG5vcm1hbCk7YW5pbWF0aW9uLWR1cmF0aW9uOnZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwxcyk7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDp2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LGluZmluaXRlKTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsZWFzZS1pbi1vdXQpfS5mYS1ib3VuY2V7YW5pbWF0aW9uLW5hbWU6ZmEtYm91bmNlO2FuaW1hdGlvbi1kZWxheTp2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksMHMpO2FuaW1hdGlvbi1kaXJlY3Rpb246dmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpO2FuaW1hdGlvbi1kdXJhdGlvbjp2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sMXMpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6dmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCxpbmZpbml0ZSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLGN1YmljLWJlemllciguMjgsLjg0LC40MiwxKSl9LmZhLWZhZGV7YW5pbWF0aW9uLW5hbWU6ZmEtZmFkZTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OnZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsaW5maW5pdGUpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZyxjdWJpYy1iZXppZXIoLjQsMCwuNiwxKSl9LmZhLWJlYXQtZmFkZSwuZmEtZmFkZXthbmltYXRpb24tZGVsYXk6dmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LDBzKTthbmltYXRpb24tZGlyZWN0aW9uOnZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKTthbmltYXRpb24tZHVyYXRpb246dmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLDFzKX0uZmEtYmVhdC1mYWRle2FuaW1hdGlvbi1uYW1lOmZhLWJlYXQtZmFkZTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OnZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsaW5maW5pdGUpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZyxjdWJpYy1iZXppZXIoLjQsMCwuNiwxKSl9LmZhLWZsaXB7YW5pbWF0aW9uLW5hbWU6ZmEtZmxpcDthbmltYXRpb24tZGVsYXk6dmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LDBzKTthbmltYXRpb24tZGlyZWN0aW9uOnZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKTthbmltYXRpb24tZHVyYXRpb246dmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLDFzKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OnZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsaW5maW5pdGUpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZyxlYXNlLWluLW91dCl9LmZhLXNoYWtle2FuaW1hdGlvbi1uYW1lOmZhLXNoYWtlO2FuaW1hdGlvbi1kdXJhdGlvbjp2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sMXMpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6dmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCxpbmZpbml0ZSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1mYS1hbmltYXRpbLine truncated
@@ -0,0 +1 @@
module.exports = 'AAEAAAAKAIAAAwAgT1MvMl94XncAAAEoAAAAYGNtYXC7HEo7AAAKCAAAE3ZnbHlmP4dM9gAAJgQAAvUUaGVhZCuvGqYAAACsAAAANmhoZWEEVARHAAAA5AAAACRobXR4BkMICQAAAYgAAAiAbG9jYQK+HLAAAB2AAAAIhG1heHACSQRRAAABCAAAACBuYW1lsbXnfwADGxgAAAQdcG9zdKPrI1AAAx84AAAYLgABAAADBwUAz3pYeF8PPPUACwIAAAAAAOOCapMAAAAA44Jqk//1/7YCkAHMAAAACAACAAEAAAAAAAEAAAHM/7YAAAKB//X/7wKQAAEAAAAAAAAAAAAAAAAAAAIgAAEAAAIgBE8AJwAAAAAAAQAAAAEAAQAAAAAAAAAAAAAABAHkAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAABEAAAAAAAAAAAAAAAQVdTTQDAACH//wHM/7YAAAHMAEoAAAABAAAAAAFCAbAAAAAgAAABgAAAAIAAEwHAAAABQAAKAYAAAAGA//4BwAAQAUAAAAEA//4BQP/7AUD//gGA//wBQP/+AUAAAAFAAAABQAAAAUAAAAGAAAABwAAQAYD//gFAABACAAAAAYD//gFAAAABgP/5AYAAAAFAAAABQAAAAcAAAAGAAAABQAAAAUAAAAFAAAABQAAgAcAAAAGAAAABwAAAAUAAAAHAAAABQAAAAUD//AGAAAABgAAAAYD//gJA//4BgP//AYD//gGA//sCAAAMAkAAIAHAAAIBwAAAAcAAAAHAAAABwAAAAgAAHwHAAAUCQAAAAgAAGgKA//UCAAAAAcD//AHAAAACgAAAAcAABQIAAAACgAAAAgAABwIAAAwBwAAAAcAADAIAABACgAAAAYAAAAIAADMCgAAAAoD/+gIAAAACgP//AgAAAAHAAAACAAAAAoAAAAKA//4CAP/4AkAAJAIAAA8CAAAAAcAAAAHAAAACAAAAAcAAAAHAABQCAAAgAcAAEAHAAAABwAAAAgAAGwKAAAICgAAAAcAAAAIAAAACAAAAAcAABgHAAAgBwAAAAoEAAQKAAAACAAAAAgAAAgHAAAABwAAAAoAAAAHAAAABwAAAAgAAAAHAABACAAAKAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAgAAAAIAAAAB8AAAAfAAAAHAAAABwAAAAoAADQHAAAAB4P//AgAAAAGAAAACAAAAAYAABAJAAA8BgP/9AcAAAAIQAAABgAADAcAAAAHAAAAB8AAAAgAABgFAAAgBwAAAAYAABAHAAAACQAAAAcAACQIAAAgBwAAAAXAAAAHAAAAB8AAAAcD//wIAAAACAAAIAYAAAAHAABIBwAAAAcAAAAIAAAgBwAAAAgAADwHoAAACAAAAAcAAAAHwAAgCAAAAAcAAAAIAAAABwAAAAkAABwHAAB4BwAAAAkAAAAHAAAAB8AAAAcAAAAHwAAABQAAAAoD//wGAAAACAAAAAkAAAAIAAAwB8AAAAcAAAAIA//8BwAAAAYAAEQHAAAgCQAANAgAAAgIAABgBgP/9AYAAAAHAAAUCQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAAAAcAAAAKAAAABwAAsAcAAAAJAAA4BwAATAcAAAAJAAAcCgAAGAcAAAAIAAAQCgAAAAYAAAAHAAAABgAAAAoAAAAHAAAACQP/6AoAAAAHwAAACQAAAAkAAAAHwAAACAAAAAgAACQFAAAEBwAAAAcAAAAKAAAACAAAIAgAAAAIAAAIB8AAAAgAAAAIAAAABwAAgAcAABQHAABEBwAAAAcAAAAHAAAACAAAAAgAAAAHYAAABwAAIAgAAEgKAAAACAAAIAoAAAAGAAAABwAAgAUAAGgIA//kCAAALAcAAAAHAAAABwAAAAcAAIAHAAAEBwAAAAgAACQHAAAAB4AAgAcAABQHAAAACAP//AgAACAIAAAwBwAALAcAABwJAAAMB8AAAAgAACAIAAAgBgAAAAcAAAAIAAA0BwAAAAcAAAAIAAAACAP/6AcAAAAHAABgCgP/+AgAAAAIA//kCAAAAAcAADwKA//8CAAAIAcAAAAKA//4CQAAAAoAAAAIA//wCgP/+AcAAAAIAAAgB8P/4AgAAAAHAAAABwAAAAcAAAAIAAAIBwAAAAgAAAAJoAAACgP/8AYAAAAG4AAACQAAWAgAAAAHg//8CAAAIAoAAFAHAAAABoAAAAoD//AHgAAABwAAAAaAAAAHg//wCgAAAAUAADgIAAAgBgAAAAYAAAAIAAAgBwP/6AlAACAGQAAABwAAAAYAAHAIAAAACAAAZAYAAIAGAAAIBAAAMAcAAAAIAAAACAAAgAgAAGQHAAAABgP/6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 Line truncated
@@ -0,0 +1 @@
module.exports = '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 Line truncated
@@ -0,0 +1 @@
module.exports = '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 Line truncated
@@ -0,0 +1 @@
module.exports = 'd09GMgABAAAAAGOAAAoAAAAA/00AAGM2AwcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYCJAQgBmADhlAArwDKg7tUy4MqBYgFByAFpn9lQfSkFvcQUVHrYRGpST0AqmqZEG+vGhC//PbHX//89xeBcRMf6zzfEEUurUfGRHt3dowsmSGwYXQIYIPEW/cioAmhIERcem0HlHgICJY+GdDzUO8f+GeTTB9PMj2hkujgKq4kf8AV+e7+hdO399ax1iCttJb05LBj2VKw47VsKVCG/MMcccu5yT/gIrjEPkpzXAQfEKfEhyrb/0fL9P/eaqjGquYa0GCPpkcr6lZrpiWtJc/ai15nrV2TDLFl+lmzHtjZ8IQch2WHSIkDe953TjbEE/AD1CPWA6LRTzi1ft6gNNKMwAJTYseOLSclyaQUcCnllCDlBe5RFyg9IMwR5/cT5ZDIhYfPru9vz0KqJ/U8UYMaqOZ098KIhGgjZ7vfkRAZEej//1KT25taYfpPexelHZ5OYKhZCtv3ZgTelwRmbAN5tSlaBYxSJafJdkbbSkOboMWZsb2la+ytLL1gbWplQQtgAkODaYJJCIDxv7dVvf4nDB9IakvA/ieyBewBuXTPu2m8zJdGZlUb2WBUdX2o7hkjq1tQNbPvZWVlZ1ZV41BPD/YXzc4SfeCqqTG6d9boAWOXB4Se9C3RIvQIgC2ZsnqF4I08mZLhff+HLMmUbawpG6OVs16lgQUY9+lE1Jr700sdrwBCfpUxoznfdSiodKXxdYQr/p/pl3btrtMxICQsY8MOEePEGGsHg4BPgB8dj7xVp89rtR9gGv8BoPjzvOHrH/HOY+eKsVjeAAIh2baAvOFcAcPjPHYeG4vzqn3RT0Iv/STgCa+oPGsod+4rH8oa/EBayWCgqbu/B0SxAAz8fLKcT4J4ialf3bE1XpIcpx4j5A2alfJmIvXkBJAI4gE8JIoXxI0pHkQ8zlPxEiRuEJyn4naeiNt5Jh7nhVvd9KH3nAfSqCc+E/S/EsQfIB7nCY2bLu1NM5J8solx43tpOZ3nPN/4Pec8M8JanSewz8tTmP4kw02YeP0Z8uX4kb5Xup2Xhsd5ksZ3XoY7dB0e53l+7c7jzUmfqs943vdw/PMJEq/z3PDEpdzjuZFKPxF3WEZ4UVv3+Z0Xkq8bH+LNaPid9NZxc9v0CdRdn5klGvny+3AviWmk3hrXrpVCrFHXcBvC6aZzGXzPJPKV651100l43us8z2c0ZNXuPMsj6y6bdbPJSNXXkeHYe/ecx2Fz4oF2TMPPdxMWC/gCPkCq/4HAYnx6XpCKDzXD/pe1voFBIO8IBPAOSaSRRQXd6Ud/BjCQQQxmCEMZxnBGMJJRjGYMYxnHeCYwkUlMZgpTmcZ0jnIqJT3lXsrLtD1p76c9S3tuYQVbcVaF1d3qYfW0elm9rT7WIOuYddy6afvZNWzTdtkFdiO7id3R7mR3tqvtgfbGrJis2KzUrHY/Lvzxpfqon/prgIZquEZotMZonCZrquZqXW2kjbWJdtOe2kuH6DAdrWN1gk7SmerRRbpYl+hSXaYbdJNu1p26R/dpD+vsGXvePrdv7Fv7yQbsd/vD/rT/JZrEkNgSRxJKYkkiqSS9ZJRcUlrKSjmpKFWlptSRxtJGxspUmS4zZa5skQtyRe7LA3kkr+SjfJcf8kt+axStoBW1ilbXmtpIm2hv7a8DdZCO0kk6WafoVJ2pc3Sx7tV9ekAP6iE9rEf0qB7Xk3pKb+ptfaxfAqGB9IFGgTWBG150L41X0CvmlfBKeWW8cl5jb4i3xXvovfUz+zn8vH4Jv67fzh/oT/YX+2v83f5+/7h/0j8fDAIpSEVGslOYFrSkFa1pQ1vaIdFbEu7G6928QWa1PWPP3dTHm44fVUWqSx1pJK1ljGmecXNOnFDuntXWJtpD++uAG999xxN6Sq/fWvXvbIA/zJ/rr/Z3/VcPPg8+Cz4K3gve4SVB0k1Jc0H0rBA9C0D0pPQvED129FjRo5g/5rtpM69z2Ya5bq6ZK+ayOWdOm2OmzBwBs8sXvclsALPWTDDjTY/4XHvTgq68iakPpqw/X9wUq1N9JoNJYOKDiWNimZhgopgwt7xI9yG4x90t7kZ3edjhz3Wnu2PAHQVuLzcfuLnBze5mc7O6icCNR/lwRHAjtHgbznNwnoLzBJzH5hhzHoBzGZxTzi5nmTPQqeSERrsXbQFE6x5ND0e6RriGu4a5hro6gcvX/IJzCc1eZmuztllu5pnpZowZaQabQaa58pGXuSxf7D90RrKRaWAkGkHyj9yXP+Q3w1ceynfyl1FqVBqVRq6Rb+TLOflCPpO78o28IQ/lofQ1Ag1/GSj9pY20kg3SwahlBMkFWbFgq+MAyDyQ3+QMyE/ym/BQ7DeVbbIJZLgMl1iJxETLAlkA0gikt0irVbpHB0hdaeDW3ivGaqQJSLZkx5dHSjqf8TpxASnmxV5ydpeB0hckFBQkXWoSBZIM1K+zxIJEs3WRSJAGfLb4rFteZTgjuQESCOIP4gtipLYvY0ZmJ/ZdoG5yfY7eIJdc0klke1gw8Pm9/L+kYGoRQihhhBNBJFFEE0MsccSTQCJJJJNCKmlY2KSTQSZZZJNDLnkUUkQxZZRTRW3qUJ8GNKQxTWhGK9rRnk50pgvVdKMHvehNH/oyR+uo0fvNnsFMPMxnIctYzhrWsZ4NbGIzW9jKdnazh/0c4CCHOMoxjnOCk5ziNGc4i6v32VYt7CSNgaT37gKkAGlLjJcnE8gC/IB8oAIIAGoD3YFgoB9MONDfRAADTCQw0EQBg0w0MNjEAENMLDDUxAHDTDww3CQAI0wiMNIkAaNMMjDapABjTCow1qQB44wFjDc2MMGkAxNNBjDJZAKTTRYwxWQDU00OMM3kAtNNHnDUzAROXbYcUtKBHpByD5gPKS+B4ZC2B2gHae8D1ZD2jOPsc/i0a55vwUvfCt6APmDFAa3AqgC6gdUdOA5WD+AUWD2B02D1Ao6B1Rs4AVYf4CRYg4BCsI4B1WAdZ7+9CWAa2H5AH7BrAO3BNoGFYLuAZWAXAH5gNwJ2g92EYTsCCAW7E8N2xtDP275dDbZ2IIBCsDcC/pAVA5yBrFiGTQVQDVntgCL4cSGQDz++BApAfWJoD+oL6leer/4AikADgGLQUGAPaDgwCDQCKAGNBvaDxgCHQOOAXqDJQCloKlAGmguUg9YFKkAbAZWgjYG+oE0S0Ae0GrQbUAXa07C1vQDUBh0C+IMOA/xARwN1QccC9UAnAG7QSQmoDzoDdCbQANRjgEagi4DGoD2MA9qBHQ+0BzsBKAt2IvPdzgZQDuxcoDrYecwXuwRAebDLgQpgVyagNtjVYNcBFcGeMQmoCvYc2PNANbDPDcvevgG3zb4FtyH+I9hPQE2wAXAZ9juAtmB/AF3A/gTqgP0P1AWJBtQDicF+GxtASZA4CSgFEh8kIVAfJLEBGoEkAfKBpALKgqQHYoNkHPp1K19yAWgMUhpoAlIWaApSjq2tiBiagVQBqapnFVIdpOac4kudLYYwkEYgjftAhbQGaTNvVMgYkLFzhS9TLbAGZHoMq0FmgMzcfJkL5pfdghi6gJwAuTB3+HIFQD+Q+0B/kAfst4/AvLavAAwA+QgMBPkODAL5wdb+AjAY5DcQBzRKAoaAlgOtAAwFrWiA4aBVgBGg1YFRoDV7YSRobdBGcbYJEjAJtAdob2AyaH/TC9NBB4AOtHYQgB2go4DyoJOAmaCTGXYKgFmgUxl2JoBQ0DlAONDFCSgCuht0LzAbdJ8B5oIeAOaBHmTYQwDmgx5m2CMAFoAeZdjjSEBu0BOgJ4GFoKdMAhaBXge9CSwGvW2ADT3w/3fgOP//BU5Q1QAnqZrHOEU1nWrWWOxXZwHOU30MLlBqg4uUJmAPpSe4ROkHLlMGgCuUQeAqZQi4RhkGrlNmgxuU9WAK5Sq4SfkG3KL8DPaQrUFdsgOoR3YFdcgBoBY5Fdwm538E3CFXk2twl9xI7sR9ch95BK+TZ8izeI+8Td7BB+QDAz4iX4CPyVfAJ+RbxKeiakxZJKpRlGGi+p6yVFQ/UaaIqlC6iTKA0leUMZT5ooylLBBlDqWzKLsp50U5SOkoyiGxehgSp0cgVk+CMkmUK5Sbotyi1BTlNmW4KM8o40R5SRkoyiuUQaK8RpkryuuU2aK8IdB3QTklyr+UNSLrUyaLbEBZK7IhpbvIRpQlIjtTponsItBJoHQRuYUyQeQ+ylaRZ5gvXl4Ct83LO6CMEPmQMk/kY8oqkc+5/V6+BMPLd8Hw8gNIev0clKMiv6AcEfkbZYDI3+k9BGA/wP+/TAE6gClQgDsBU6QAPwZMGQXoAaYZCnAXYDpEAe4GTLMU4B7AVKMA9wGmeQpwM2BaoAC/AkwNCnAvYGpRgLcCph4F+D5gWqYAPwRMhynADwDTUQrwbcB0jAJ8FzAdpwDfAUwrFOAWwLRKAX4JmAYU4HbAdI77kpfOgwLcAZguUIBfAKa7UIDfAKYRBbgNMI0pwM8A070pwBpgui8F+DngC9usK94LD0L8+hAkTh+GWH0EYvVRUIAbAV94TKw+DrH6BMTqkxCrT0Ho9Gmw33vJAPdP7yUBsToCCnAa4Es+Bbgf8KUZCvAA4EsPShp9Fh96gPdAFmDQwxOxBxoY4MAotAGShCehkl7kR6HiiRd6UvHEj3xPJVNxolScTCnyyJNK4xqfUkEYhLKxsbGxMf7YY49tbHQ2NjY23uR9Ffs/R0M4WHGEgWgIp7/tCANHNjc3N/u3zm5u/mpzcxMP3fzV5iZV5t2Xtx67wKAy2IZ3YxeKMAFgB6HGpSIvTmSmmSgVt1th4Fe55joeRWuMiDEiVhb5fD4vXNfAM4kx6m8/iJX+WmRB5PPw1YKkg39gD78AB8IOAJs4V5FKVOzZFsjTuK9a0MIgSVQLQRgnkbpa7HGe8CP273OZeYLFyc2IA4gx2jF+O Line truncated
@@ -0,0 +1 @@
module.exports = 'AAEAAAAKAIAAAwAgT1MvMmFrYlMAAAEoAAAAYGNtYXCkr08aAAAXdAAASPpnbHlmyrT8aAAAdmAABbhgaGVhZCupGqQAAACsAAAANmhoZWEETQemAAAA5AAAACRobXR4C1QOjgAAAYgAABXsbG9jYQ+N9XgAAGBwAAAV8G1heHAFkgeFAAABCAAAACBuYW1lcb56mQAGLsAAAAPtcG9zdIbhlrIABjKwAABN0AABAAADBwUAcdD+eF8PPPUACwIAAAAAAOOCapMAAAAA44Jqk//0/7UCiwHLAAAACAACAAEAAAAAAAEAAAHL/7UAAAKA//T/9QKLAAEAAAAAAAAAAAAAAAAAAAV7AAEAAAV7B4MAFQAAAAAAAQAAAAEAAQAAAAAAAAAAAAAABAIDA4QABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIACQMAAAAAAAAAAAABEAAAAAAAAAAAAAAAQVdTTQCAACH//wHL/7UAAAHLAEsAAAABAAAAAAFBAa8AAAAgAAABgAAAAIAAEwHAAAABQAAKAYAAAAGA//4BwAAQAUAAAAEA//4BQP/7AUD//gGA//wBQP/+AUAAAAFAAAABQAAAAUAAAAGAAAABwAAQAYD//gFAABACAAAAAYD//gFAAAABgP/5AYAAAAFAAAABQAAAAcAAAAGAAAABQAAAAUAAAAFAAAABQAAgAcAAAAGAAAABwAAAAUAAAAHAAAABQAAAAUD//AGAAAABgAAAAYD//gJA//4BgP//AYD//gGA//sCAAAAAgAAAAJAAAACQAAAAkAAIAJAACACgAAAAoD//gIA//0CAAAAAkAAAAKAAAACQAAgAoD/+QKA//kCgAAAAoD/+QJAACACAAAAAkAAAAKA//sCgAAAAoAAFAKA//kBwAAhAcAAIQIAAA8CAAAAAgAAAAHAABACgP/5AoD/+QKA//kCgP/5AgAAAAKA//kCgAAAAcAAAAHAAAACQAAAAkAAAAHAAAABwAAAAUAAAAFAAAABgAAAAcAAAAKAAEABgAAgAgAAAAIAAAACAAAAAcAAAAIAAAABwAAAAgAAAAGAACABwAAgAkAAAAGAAAACAAAAAkD/+gGAAAACAAAAAUAAAAGAAAACQAAAAgD/+QJAAAABQP/8AYAAAAGAAAABgP/+AYAAAAKAAAABgAAAAoAAAAHAAAABgAAAAoAAAAGAAAABgAAAAgAAAAIAAAACQAAAAoAAAAIAAAABgP/+AkAAAAJAAAACAAAAAcAAAAGA//8CAAAAAYAAHgJAAAACQAAAAkAAAAGAACABgAAAAkAAAwEA//4CAAAAAgAAAAHAAAACAAAAAgAAAAIAAAACAAAAAoD/+QJAAAACgAAAAgAAAAKA//kCgP/5AoD/+QKA//kCgP/5AkAAAAKAAAACgAAAAkD//gJA//4CQAAAAkAAAAKAAAoCgAAAAgAAIAIAAAACgAAAAgAAAAKAAAEBwAAAAgD/9wJAAAACAAAAAUAAIAFAACACAAAAAoAAAAJAAAACgAAgAoAAIAKAACACgAAgAkD//gHAAAACQP/+AoAAAAKAAAACgAAAAoAAAAKAAAACQAAAAYAAAAJAAAABgAAAAoAAAAKAAAACAP/7AgAAGQIAAAACQAAeAoD//wIAAAABgAAAAkD//gKAAAABwAAAAoAAAAJAAAACQP/+AkAAAAJAAAACQAAAAkAAAAKAAAACQP/6AoAAAAGA//8BgP//AgAABwJA//4CgAAAAoAAIAKAAAACgAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAgAAAgIAAAACQAAAAkAAAAKAAAACgAAAAoAAAAKAAAACgP/7AkD//gKAAAACgAAAAoAAAAKAAAACgAAAAoD/+wJA//4BQAAAAUAAAAIAAAABgAAAAkAAAAKAABoCAP/8AoAAAAGA//4CAAAAAkD/+QIAAAACAAAAAoAAAgKAAAACgAAAAUAAAAKAAAACAAAAAgAAAAKAAAACgAAAAkAAGwKA//sCgAAAAkAAAAKAAAACgAAAAkAAAAJAAAgCgP/+AoAAAAKAAAABwP/9AoAAAgHAAB4CgAAeAkD//gJA//4CQP/+AkD//gJA//4CQP/+AoAAAgJA//4CAAA6AoAAAAFA//4CQP/+AkAAIAIAAB0CAAAAAgD/+QJAAA0CAAAAAoAAAAKAAAACgAAAAkAAIgKAAAACgAAAAoAAAAKAAAACAAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAoAAAAKAAAACgAAAAoAAIAKAACACgAAgAoAAIAKAAAACgAAAAgAAAAKAAAACgAAAAoAAAAJAAAACgAAAAYAAAAIAAA8CAAAPAgAADwHAAAABwAAAAcAAAAGAAAACgAAAAkAAAAJAAAACQP//AoAAAAJAAAACQAAAAkAAAQKA//4BQAAAAkAAAAJAAAACAAAAAoAAAAIA//wCAAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKA//kCgAAAAoAAAAIAAAACAAAAAoAAAAIAACACgP/5AUD//wGAAA4CQAAAAkAAAAKAAAACAAAAAoAAAAHA//kCgAAAAoAAAAKAAAACgP/5AoAAAAIAAAACgP/+AYAAAAGAAAABwP/8AkD//AHAAAACAP/7AgAAAAIAAAACAAAAAkAAFAHAAAACAAAAAgAAAAIAAAACAAAAAcAAAAGAACACAAAAAgAAAAIAABACgAAgAgAADAJAAAACAAAAAkAAAAIAAAACAAAAAgAAGQIAABACQAAAAcAAAAHAAAACAAAAAUAAAAHAAAACgAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAABwAAAAYAAAAGAAAACQAAAAcAAAAHAAAABwAAAAcAAAAHAAAACAAAQAcD/9AHAAAACQAAAAgAAAAGAAAACAAAAAYAAAAIAAAACAAAAAUAAAAIAAAACAAAAAYAAAAFAAAABgAAAAgAAAAIAAAABQAAAAcD/+QFAAAABQABAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABwAAAAcAAAAGAAAABgAAAAgAAAAHAAAABwAAAAcAAEAIAAAACAAAAAgAAAAHAAAACQP/+AoD/+QIA//sCQAAAAcAAAAIAAAACAP/+AcAAAAIAACACAAAgAkD/+wJAAAACAAAAAkD//AFAACACAAAAAgAAAAIAAAACAAAAAoAAAAKA//4CQAAUAgAAAAGA//0CAAAAAgAAAAJAAAACAAAAAcD//gIAAAABwAAAAcAAAAJAAAABwAAAAgAAAAIAAAACAP/+AgAAAAIAAAABgAAAAYAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIA//kCAP/6AgAAAAIAAAACgAAAAoAAEgKAAAABwAAAAgAAAAHAAAABwAAEAcAAAAHAAAABwAAAAgAACgIAAAECAAAAAcAAAAIAAAACAAAAAoAAAAJAAAABQP/7AUD/+wEAAAABAABAAgAAAAFA//sBQP/7AUD/+wIAAAACAAAQAgAAAAHAABsCQAAAAkAAAgIAAAABgAAQAcAAAAKAAAACgAAAAcAAAAJAACACAAAAAcD/+wKAAAACgAAAAoAAAAIAAAACgAAAAgAAIAHAAAABwAAAAgAAIAIAAEABwAAgAcAAIAFAACABQABAAcAAIAHAACACgAAAAcAAAAGAABABwAAAAcAAAAIA//oCAAAAAgAAAAIAAAACAAAAAoAAAAJAAAABwAAAAkAAAAKAAAACQAATAcAADQIAAAABwAAAAoD/+QDAAAACAAAAAgAAAAJAACcCAAAAAYAAEAKA//kCAAAPAcAAAAIA//sCAP/9AgAAAAIAAAACAAAAAgAAAAJA//kBwAAAAgAAAAHAAAgAgAAAAcAAAAIAAAACQAAAAcAAAAGAAAABgAAAAcAAAAHAAAABwAAAAkAAAAIAAAABwAAAAcAAAAHAAAABQAAAAUD//AHAAAABQP/+AYAAAAIA//4BgAAAAYAAAAJAACcCQAAnAkAABwJAAAcCQAAnAkAAJwIAAAACAAAAAYAAIAGAACACAAAAAgAAAAFA//4BQP/+AgD//gGAAAACAAAAAgAAAAHAAAACAAAAAgAAAAFA//wCgAAAAcAAAAIA//wCgP/+AoAAAAIAAAABgAAAAUD//gIA//4CAAAAAkAAAAIAAAACAAAAAgAAAAHAAAABwAAAAgAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAgAAAAIAAAACAAAAAgAAAAHAAAABwAAgAgAAAAHAAAABwAAAAgAAAAIAAAACAAABAgAAAAGAAAACAAAAAoAAAAGAAAACgP/5AcAAAAIAAAACAP/5AkAAIAHAAAACAAAAAkAAIAIAAAACQAAAAkAAAAKAAAACQAAgAkAAAAHAAAACQAAAAkAAAAIAAAACQP/+AcAAAAKAAAACAAAAAgAAAAGAABABwAAAAYAAEAIAAGACAAAAAoAAEAKAAAACgAAAAgAAIAFAAAACgAAgAYAAEAGAABACAAAAAoAAAAKAAAACgAAAAcAAAAHAAAACQAAAAkAAAAJAAAACQAAAAkAAAAFAAAABAP//AkAAAAKAAAABwAAAAgAAAAKA//4BgAAAAYAAAAGAAAABgAAAAcAAIAIAAAACAAAAAgAAAAJAACABwP/+AgAAHgKAAAACAAAAAoAAAAHAAAABwAAAAcAAAAHAAAACQAAgAUAAEAIAAAICQAAAAgAAAAIAAAACAAAAAcAAAAJAAAACAAAAAgAAHgJAAAACAAAAAoD/9wIAAAACgAAAAgAAAAJAACACgP/5AgAADAKAAAACAAAAAgAAIAJAAAACAAAAAYAAAAJAAAABQAAQAUAAEAFAABABQAAQAUAAEAIAAAACAAAAAcAAAAIAAAACAAAAAgAAA Line truncated
@@ -0,0 +1 @@
module.exports = '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 Line truncated
@@ -0,0 +1 @@
module.exports = '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 Line truncated
@@ -0,0 +1 @@
module.exports = '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 Line truncated
@@ -0,0 +1,13 @@
module.exports = {
hash: '55cc4fcf19c129e3824873d98ad417c9', files: {
'fontawesome/css/all.min.css': { data: require('./fontawesome/css/all.min.css.base64.js'), mime: 'text/css', encoding: 'base64' },
'fontawesome/webfonts/fa-brands-400.ttf': { data: require('./fontawesome/webfonts/fa-brands-400.ttf.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-brands-400.woff2': { data: require('./fontawesome/webfonts/fa-brands-400.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-regular-400.ttf': { data: require('./fontawesome/webfonts/fa-regular-400.ttf.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-regular-400.woff2': { data: require('./fontawesome/webfonts/fa-regular-400.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-solid-900.ttf': { data: require('./fontawesome/webfonts/fa-solid-900.ttf.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-solid-900.woff2': { data: require('./fontawesome/webfonts/fa-solid-900.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-v4compatibility.ttf': { data: require('./fontawesome/webfonts/fa-v4compatibility.ttf.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
'fontawesome/webfonts/fa-v4compatibility.woff2': { data: require('./fontawesome/webfonts/fa-v4compatibility.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' },
},
};
@@ -0,0 +1 @@
module.exports = { 'hash': '55cc4fcf19c129e3824873d98ad417c9', 'files': ['fontawesome/css/all.min.css', 'fontawesome/webfonts/fa-brands-400.ttf', 'fontawesome/webfonts/fa-brands-400.woff2', 'fontawesome/webfonts/fa-regular-400.ttf', 'fontawesome/webfonts/fa-regular-400.woff2', 'fontawesome/webfonts/fa-solid-900.ttf', 'fontawesome/webfonts/fa-solid-900.woff2', 'fontawesome/webfonts/fa-v4compatibility.ttf', 'fontawesome/webfonts/fa-v4compatibility.woff2'] };
+46 -8
View File
@@ -5,7 +5,7 @@ const path = require('path');
const md5 = require('md5');
const rootDir = `${__dirname}/..`;
const outputDir = `${rootDir}/pluginAssets`;
const defaultOutputDir = `${rootDir}/pluginAssets`;
const walk = function(dir) {
let results = [];
@@ -37,7 +37,7 @@ const readAsBase64 = async (path, mime) => {
return buffer.toString('base64');
};
async function encodeFile(sourcePath, destPath) {
async function encodeFile(sourcePath, destPath, outputDir) {
const ext = utils.fileExtension(sourcePath).toLowerCase();
let mime = 'application/octet-stream';
if (ext === 'js') mime = 'application/javascript';
@@ -60,19 +60,35 @@ async function encodeFile(sourcePath, destPath) {
};
}
async function main() {
const copyFontAwesomeAssets = async () => {
const sourceDir = `${rootDir}/node_modules/@fortawesome/fontawesome-free`;
const targetDir = `${rootDir}/fontawesome-temp`;
await fs.remove(targetDir);
await fs.mkdirp(`${targetDir}/fontawesome/css`);
await fs.mkdirp(`${targetDir}/fontawesome/webfonts`);
await fs.copyFile(`${sourceDir}/css/all.min.css`, `${targetDir}/fontawesome/css/all.min.css`);
await fs.copy(`${sourceDir}/webfonts`, `${targetDir}/fontawesome/webfonts`);
return targetDir;
};
const encodeDirectory = async (sourceAssetDir) => {
for (let i = 0; i < 3; i++) {
try {
const outputDir = sourceAssetDir.destination ? sourceAssetDir.destination : defaultOutputDir;
await fs.remove(outputDir);
await utils.mkdirp(outputDir);
const encodedFiles = [];
const sourceAssetDir = `${rootDir}/../renderer/assets`;
const files = walk(sourceAssetDir);
const files = walk(sourceAssetDir.source);
for (const file of files) {
const destFile = file.substr(sourceAssetDir.length + 1);
encodedFiles.push(await encodeFile(file, destFile));
if (file.endsWith('.DS_Store')) continue;
const destFile = file.substr(sourceAssetDir.source.length + 1);
encodedFiles.push(await encodeFile(file, destFile, outputDir));
}
const hashes = [];
@@ -87,7 +103,7 @@ async function main() {
await fs.writeFile(`${outputDir}/index.js`, `module.exports = {\nhash:"${hash}", files: {\n${indexJs.join('\n')}\n}\n};`);
await fs.writeFile(`${outputDir}/index.web.js`, `module.exports = ${JSON.stringify({
hash,
files: files.map(file => toForwardSlashes(path.relative(sourceAssetDir, file))),
files: files.map(file => toForwardSlashes(path.relative(sourceAssetDir.source, file))),
})}`);
return;
@@ -115,6 +131,28 @@ async function main() {
}
throw new Error('Could not encode file after multiple attempts. See above for errors.');
};
async function main() {
const fontAwesomeAssetDir = await copyFontAwesomeAssets();
const sourceAssetDirs = [
{
source: `${rootDir}/../renderer/assets`,
},
{
source: fontAwesomeAssetDir,
destination: `${rootDir}/plugins/pluginUserWebViewAssets/fontawesome`,
},
];
try {
for (const sourceAssetDir of sourceAssetDirs) {
await encodeDirectory(sourceAssetDir);
}
} finally {
await fs.remove(fontAwesomeAssetDir);
}
}
module.exports = main;
+4
View File
@@ -5,7 +5,9 @@ import * as historyForward from './historyForward';
import * as openMasterPasswordDialog from './openMasterPasswordDialog';
import * as permanentlyDeleteNote from './permanentlyDeleteNote';
import * as renderMarkup from './renderMarkup';
import * as showEditorPlugin from './showEditorPlugin';
import * as synchronize from './synchronize';
import * as toggleEditorPlugin from './toggleEditorPlugin';
const index: any[] = [
deleteNote,
@@ -14,7 +16,9 @@ const index: any[] = [
openMasterPasswordDialog,
permanentlyDeleteNote,
renderMarkup,
showEditorPlugin,
synchronize,
toggleEditorPlugin,
];
export default index;
@@ -1,6 +1,6 @@
import { CommandContext, CommandDeclaration, CommandRuntime } from '@joplin/lib/services/CommandService';
import Setting from '@joplin/lib/models/Setting';
import getActivePluginEditorView from '@joplin/lib/services/plugins/utils/getActivePluginEditorView';
import { CommandContext, CommandDeclaration, CommandRuntime } from '../services/CommandService';
import Setting from '../models/Setting';
import getActivePluginEditorView from '../services/plugins/utils/getActivePluginEditorView';
import Logger from '@joplin/utils/Logger';
const logger = Logger.create('showEditorPlugin');
@@ -1,7 +1,7 @@
import { CommandContext, CommandDeclaration, CommandRuntime } from '@joplin/lib/services/CommandService';
import { _ } from '@joplin/lib/locale';
import Setting from '@joplin/lib/models/Setting';
import getActivePluginEditorView from '@joplin/lib/services/plugins/utils/getActivePluginEditorView';
import { CommandContext, CommandDeclaration, CommandRuntime } from '../services/CommandService';
import { _ } from '../locale';
import Setting from '../models/Setting';
import getActivePluginEditorView from '../services/plugins/utils/getActivePluginEditorView';
import Logger from '@joplin/utils/Logger';
const logger = Logger.create('toggleEditorPlugin');
@@ -24,14 +24,26 @@ export const runtime = (): CommandRuntime => {
}
const idx = shownEditorViewIds.indexOf(editorView.id);
let hasBeenHidden = false;
if (idx < 0) {
shownEditorViewIds.push(editorView.id);
} else {
shownEditorViewIds.splice(idx, 1);
hasBeenHidden = true;
}
logger.info('New shown editor views: ', shownEditorViewIds);
Setting.setValue('plugins.shownEditorViewIds', shownEditorViewIds);
if (hasBeenHidden) {
// When the plugin editor goes from visible to hidden, we need to reload the note
// because it may have been changed via the data API.
context.dispatch({
type: 'EDITOR_NOTE_NEEDS_RELOAD',
});
}
},
};
};
@@ -67,6 +67,8 @@ interface Shared {
installResourceHandling?: (refreshResourceHandler: any)=> void;
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
uninstallResourceHandling?: (refreshResourceHandler: any)=> void;
reloadNote?: (comp: BaseNoteScreenComponent)=> Promise<NoteEntity>;
}
const shared: Shared = {};
@@ -268,7 +270,7 @@ shared.isModified = function(comp: BaseNoteScreenComponent) {
return !!Object.getOwnPropertyNames(diff).length;
};
shared.initState = async function(comp: BaseNoteScreenComponent) {
shared.reloadNote = async (comp: BaseNoteScreenComponent) => {
const isProvisionalNote = comp.props.provisionalNoteIds.includes(comp.props.noteId);
const note = await Note.load(comp.props.noteId);
@@ -292,6 +294,7 @@ shared.initState = async function(comp: BaseNoteScreenComponent) {
fromShare: !!comp.props.sharedData,
noteResources: await shared.attachedResources(note ? note.body : ''),
readOnly: itemIsReadOnlySync(ModelType.Note, ItemChange.SOURCE_UNSPECIFIED, note as ItemSlice, Setting.value('sync.userId'), BaseItem.syncShareCache),
noteLastLoadTime: Date.now(),
});
} else {
// Handle the case where a non-existent note is loaded. This can happen briefly after deleting a note.
@@ -304,9 +307,16 @@ shared.initState = async function(comp: BaseNoteScreenComponent) {
fromShare,
noteResources: [],
readOnly: true,
noteLastLoadTime: Date.now(),
});
}
return note;
};
shared.initState = async function(comp: BaseNoteScreenComponent) {
const note = await shared.reloadNote(comp);
if (comp.props.sharedData) {
if (comp.props.sharedData.title) {
this.noteComponent_change(comp, 'title', comp.props.sharedData.title);
+8
View File
@@ -170,6 +170,7 @@ export interface State extends WindowState {
mustUpgradeAppMessage: string;
mustAuthenticate: boolean;
toast: Toast | null;
editorNoteReloadTimeRequest: number;
allowSelectionInOtherFolders: boolean;
@@ -241,6 +242,7 @@ export const defaultState: State = {
mustUpgradeAppMessage: '',
mustAuthenticate: false,
allowSelectionInOtherFolders: false,
editorNoteReloadTimeRequest: 0,
pluginService: pluginServiceDefaultState,
shareService: shareServiceDefaultState,
@@ -1512,6 +1514,12 @@ const reducer = produce((draft: Draft<State> = defaultState, action: any) => {
}
break;
case 'EDITOR_NOTE_NEEDS_RELOAD':
{
draft.editorNoteReloadTimeRequest = Date.now();
}
break;
case 'TOAST_SHOW':
draft.toast = {
duration: 6000,
@@ -157,10 +157,13 @@ export default class WebviewController extends ViewController {
public emitUpdate() {
if (!this.updateListener_) return;
if (this.containerType_ === ContainerType.Editor && (!this.isActive() || !this.isVisible())) {
logger.info('emitMessage: Not emitting update because editor is disabled or hidden:', this.pluginId, this.handle, this.isActive(), this.isVisible());
return;
}
// TODO:
// if (this.containerType_ === ContainerType.Editor && (!this.isActive() || !this.isVisible())) {
// logger.info('emitMessage: Not emitting update because editor is disabled or hidden:', this.pluginId, this.handle, this.isActive(), this.isVisible());
// return;
// }
this.updateListener_();
}
@@ -279,7 +282,7 @@ export default class WebviewController extends ViewController {
return this.storeView.opened;
}
public async isVisible(): Promise<boolean> {
public isVisible(): boolean {
if (!this.storeView.opened) return false;
const shownEditorViewIds: string[] = this.store.getState().settings['plugins.shownEditorViewIds'];
return shownEditorViewIds.includes(this.handle);
@@ -0,0 +1,10 @@
import { PluginStates } from '../reducer';
import getActivePluginEditorView from './getActivePluginEditorView';
export default (plugins: PluginStates, shownEditorViewIds: string[]) => {
const { editorPlugin, editorView } = getActivePluginEditorView(plugins);
if (editorView) {
if (!shownEditorViewIds.includes(editorView.id)) return { editorPlugin: null, editorView: null };
}
return { editorPlugin, editorView };
};
+8
View File
@@ -7468,6 +7468,13 @@ __metadata:
languageName: node
linkType: hard
"@fortawesome/fontawesome-free@npm:^6.7.2":
version: 6.7.2
resolution: "@fortawesome/fontawesome-free@npm:6.7.2"
checksum: 2ceb384ada8e4a1e8a8e24384a35e3afa01589ddec67c8c52e3ad5d7db1662d0fc92560bd9a23baa4e0676e721e423aef99fb79fe6899bf13900fd1e611b6760
languageName: node
linkType: hard
"@fortawesome/fontawesome-svg-core@npm:6.1.2":
version: 6.1.2
resolution: "@fortawesome/fontawesome-svg-core@npm:6.1.2"
@@ -8355,6 +8362,7 @@ __metadata:
"@babel/preset-env": 7.24.7
"@babel/runtime": 7.24.7
"@bam.tech/react-native-image-resizer": 3.0.10
"@fortawesome/fontawesome-free": ^6.7.2
"@joplin/editor": ~3.3
"@joplin/lib": ~3.3
"@joplin/react-native-alarm-notification": ~3.3