1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-06-15 23:00:36 +02:00

All: Add support for application plugins (#3257)

This commit is contained in:
Laurent
2020-10-09 18:35:46 +01:00
committed by GitHub
parent 833fb1264f
commit fe41d37f8f
804 changed files with 95622 additions and 5307 deletions

View File

@ -4,9 +4,9 @@ const Component = React.Component;
const { connect } = require('react-redux');
const { View, TouchableOpacity, Text, Dimensions } = require('react-native');
const Icon = require('react-native-vector-icons/Ionicons').default;
const { _ } = require('lib/locale.js');
const { shim } = require('lib/shim');
const Setting = require('lib/models/Setting');
const { _ } = require('lib/locale');
const shim = require('lib/shim').default;
const Setting = require('lib/models/Setting').default;
Icon.loadFont();

View File

@ -5,7 +5,7 @@ const Note = require('lib/models/Note');
const Icon = require('react-native-vector-icons/Ionicons').default;
const ReactNativeActionButton = require('react-native-action-button').default;
const { connect } = require('react-redux');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
Icon.loadFont();

View File

@ -1,4 +1,4 @@
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const { Platform } = require('react-native');
const { themeById } = require('lib/theme');

View File

@ -5,9 +5,9 @@ const Component = React.Component;
const { Platform, View, Text } = require('react-native');
const { WebView } = require('react-native-webview');
const { themeStyle } = require('lib/components/global-style.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const { reg } = require('lib/registry.js');
const { shim } = require('lib/shim');
const shim = require('lib/shim').default;
const { assetsToHeaders } = require('lib/joplin-renderer');
const shared = require('lib/components/shared/note-screen-shared.js');
const markupLanguageUtils = require('lib/markupLanguageUtils');
@ -51,11 +51,11 @@ class NoteBodyViewer extends Component {
const mdOptions = {
onResourceLoaded: () => {
if (this.resourceLoadedTimeoutId_) {
clearTimeout(this.resourceLoadedTimeoutId_);
shim.clearTimeout(this.resourceLoadedTimeoutId_);
this.resourceLoadedTimeoutId_ = null;
}
this.resourceLoadedTimeoutId_ = setTimeout(() => {
this.resourceLoadedTimeoutId_ = shim.setTimeout(() => {
this.resourceLoadedTimeoutId_ = null;
this.forceUpdate();
}, 100);
@ -87,16 +87,16 @@ class NoteBodyViewer extends Component {
injectedJs.push('window.joplinPostMessage_ = (msg, args) => { return window.ReactNativeWebView.postMessage(msg); };');
injectedJs.push('webviewLib.initialize({ postMessage: msg => { return window.ReactNativeWebView.postMessage(msg); } });');
injectedJs.push(`
const readyStateCheckInterval = setInterval(function() {
const readyStateCheckInterval = shim.setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
shim.clearInterval(readyStateCheckInterval);
if ("${resourceDownloadMode}" === "manual") webviewLib.setupResourceManualDownload();
const hash = "${this.props.noteHash}";
// Gives it a bit of time before scrolling to the anchor
// so that images are loaded.
if (hash) {
setTimeout(() => {
shim.setTimeout(() => {
const e = document.getElementById(hash);
if (!e) {
console.warn('Cannot find hash', hash);
@ -152,7 +152,7 @@ class NoteBodyViewer extends Component {
}
onLoadEnd() {
setTimeout(() => {
shim.setTimeout(() => {
if (this.props.onLoadEnd) this.props.onLoadEnd();
}, 100);
@ -160,7 +160,7 @@ class NoteBodyViewer extends Component {
// Need to display after a delay to avoid a white flash before
// the content is displayed.
setTimeout(() => {
shim.setTimeout(() => {
if (!this.isMounted_) return;
this.setState({ webViewLoaded: true });
}, 100);

View File

@ -2,7 +2,7 @@ const React = require('react');
const Component = React.Component;
const { connect } = require('react-redux');
const { FlatList, Text, StyleSheet, Button, View } = require('react-native');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { NoteItem } = require('lib/components/note-item.js');
const { time } = require('lib/time-utils.js');
const { themeStyle } = require('lib/components/global-style.js');

View File

@ -6,8 +6,8 @@ const Icon = require('react-native-vector-icons/Ionicons').default;
const { BackButtonService } = require('lib/services/back-button.js');
const NavService = require('lib/services/NavService.js');
const { Menu, MenuOptions, MenuOption, MenuTrigger } = require('react-native-popup-menu');
const { _ } = require('lib/locale.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale');
const Setting = require('lib/models/Setting').default;
const Note = require('lib/models/Note.js');
const Folder = require('lib/models/Folder.js');
const { themeStyle } = require('lib/components/global-style.js');

View File

@ -3,7 +3,7 @@ const React = require('react');
const { StyleSheet, View, Text, FlatList, TouchableOpacity, TextInput } = require('react-native');
const { connect } = require('react-redux');
const Tag = require('lib/models/Tag.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { themeStyle } = require('lib/components/global-style.js');
const Icon = require('react-native-vector-icons/Ionicons').default;
const ModalDialog = require('lib/components/ModalDialog');

View File

@ -1,11 +1,11 @@
import * as React from 'react';
import useSyncTargetUpgrade from 'lib/services/synchronizer/gui/useSyncTargetUpgrade';
import { _ } from 'lib/locale';
const { View, Text, ScrollView } = require('react-native');
const { connect } = require('react-redux');
const { themeStyle } = require('lib/components/global-style.js');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
function UpgradeSyncTargetScreen(props:any) {
const upgradeResult = useSyncTargetUpgrade();

View File

@ -3,11 +3,11 @@ const React = require('react');
const { Platform, TouchableOpacity, Linking, View, Switch, StyleSheet, Text, Button, ScrollView, TextInput, Alert, PermissionsAndroid } = require('react-native');
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { Dropdown } = require('lib/components/Dropdown.js');
const { themeStyle } = require('lib/components/global-style.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const shared = require('lib/components/shared/config-shared.js');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const { reg } = require('lib/registry.js');
@ -15,7 +15,7 @@ const NavService = require('lib/services/NavService.js');
const VersionInfo = require('react-native-version-info').default;
const { ReportService } = require('lib/services/report.js');
const { time } = require('lib/time-utils');
const { shim } = require('lib/shim');
const shim = require('lib/shim').default;
const SearchEngine = require('lib/services/searchengine/SearchEngine');
const RNFS = require('react-native-fs');
const checkPermissions = require('lib/checkPermissions.js').default;

View File

@ -3,7 +3,7 @@ const React = require('react');
const { View, Button, Text, TextInput, TouchableOpacity, StyleSheet, ScrollView } = require('react-native');
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const DialogBox = require('react-native-dialogbox').default;
const { dialogs } = require('lib/dialogs.js');

View File

@ -4,7 +4,7 @@ const { TextInput, TouchableOpacity, Linking, View, StyleSheet, Text, Button, Sc
const EncryptionService = require('lib/services/EncryptionService');
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { themeStyle } = require('lib/components/global-style.js');
const { time } = require('lib/time-utils.js');
@ -17,8 +17,8 @@ class EncryptionConfigScreenComponent extends BaseScreenComponent {
return { header: null };
}
constructor() {
super();
constructor(props) {
super(props);
this.state = {
passwordPromptShow: false,
@ -26,7 +26,7 @@ class EncryptionConfigScreenComponent extends BaseScreenComponent {
passwordPromptConfirmAnswer: '',
};
shared.constructor(this);
shared.constructor(this, props);
this.styles_ = {};
}
@ -107,7 +107,7 @@ class EncryptionConfigScreenComponent extends BaseScreenComponent {
return shared.onPasswordChange(this, mk, text);
};
const password = this.props.passwords[mk.id] ? this.props.passwords[mk.id] : '';
const password = this.state.passwords[mk.id] ? this.state.passwords[mk.id] : '';
const passwordOk = this.state.passwordChecks[mk.id] === true ? '✔' : '❌';
const inputStyle = { flex: 1, marginRight: 10, color: theme.color };

View File

@ -8,7 +8,7 @@ const { ScreenHeader } = require('lib/components/screen-header.js');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { dialogs } = require('lib/dialogs.js');
const { themeStyle } = require('lib/components/global-style.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
class FolderScreenComponent extends BaseScreenComponent {
static navigationOptions() {

View File

@ -6,9 +6,9 @@ const { reg } = require('lib/registry.js');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { time } = require('lib/time-utils');
const { themeStyle } = require('lib/components/global-style.js');
const { Logger } = require('lib/logger.js');
const Logger = require('lib/Logger').default;
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
class LogScreenComponent extends BaseScreenComponent {
static navigationOptions() {

View File

@ -4,13 +4,13 @@ import AsyncActionQueue from '../../AsyncActionQueue';
const React = require('react');
const { Platform, Clipboard, Keyboard, View, TextInput, StyleSheet, Linking, Image, Share } = require('react-native');
const { connect } = require('react-redux');
const { uuid } = require('lib/uuid.js');
const uuid = require('lib/uuid').default;
const { MarkdownEditor } = require('../../../MarkdownEditor/index.js');
const RNFS = require('react-native-fs');
const Note = require('lib/models/Note.js');
const UndoRedoService = require('lib/services/UndoRedoService.js').default;
const BaseItem = require('lib/models/BaseItem.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const Resource = require('lib/models/Resource.js');
const Folder = require('lib/models/Folder.js');
const md5 = require('md5');
@ -24,9 +24,9 @@ const { ScreenHeader } = require('lib/components/screen-header.js');
const NoteTagsDialog = require('lib/components/screens/NoteTagsDialog');
const { time } = require('lib/time-utils.js');
const { Checkbox } = require('lib/components/checkbox.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { reg } = require('lib/registry.js');
const { shim } = require('lib/shim.js');
const shim = require('lib/shim').default;
const ResourceFetcher = require('lib/services/ResourceFetcher');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { themeStyle, editorFont } = require('lib/components/global-style.js');
@ -167,7 +167,7 @@ class NoteScreenComponent extends BaseScreenComponent {
type: 'NAV_BACK',
});
setTimeout(() => {
shim.setTimeout(() => {
this.props.dispatch({
type: 'NAV_GO',
routeName: 'Note',
@ -894,16 +894,16 @@ class NoteScreenComponent extends BaseScreenComponent {
}
scheduleFocusUpdate() {
if (this.focusUpdateIID_) clearTimeout(this.focusUpdateIID_);
if (this.focusUpdateIID_) shim.clearTimeout(this.focusUpdateIID_);
this.focusUpdateIID_ = setTimeout(() => {
this.focusUpdateIID_ = shim.setTimeout(() => {
this.focusUpdateIID_ = null;
this.focusUpdate();
}, 100);
}
focusUpdate() {
if (this.focusUpdateIID_) clearTimeout(this.focusUpdateIID_);
if (this.focusUpdateIID_) shim.clearTimeout(this.focusUpdateIID_);
this.focusUpdateIID_ = null;
if (!this.state.note) return;
@ -1005,9 +1005,9 @@ class NoteScreenComponent extends BaseScreenComponent {
}}
onMarkForDownload={this.onMarkForDownload}
onLoadEnd={() => {
setTimeout(() => {
shim.setTimeout(() => {
this.setState({ HACK_webviewLoadingState: 1 });
setTimeout(() => {
shim.setTimeout(() => {
this.setState({ HACK_webviewLoadingState: 0 });
}, 50);
}, 5);
@ -1062,9 +1062,9 @@ class NoteScreenComponent extends BaseScreenComponent {
},
onMarkForDownload: this.onMarkForDownload,
onLoadEnd: () => {
setTimeout(() => {
shim.setTimeout(() => {
this.setState({ HACK_webviewLoadingState: 1 });
setTimeout(() => {
shim.setTimeout(() => {
this.setState({ HACK_webviewLoadingState: 0 });
}, 50);
}, 5);

View File

@ -1,16 +1,16 @@
const React = require('react');
const { AppState, View, StyleSheet } = require('react-native');
const { stateUtils } = require('lib/reducer.js');
const { stateUtils } = require('lib/reducer');
const { connect } = require('react-redux');
const { NoteList } = require('lib/components/note-list.js');
const Folder = require('lib/models/Folder.js');
const Tag = require('lib/models/Tag.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const { themeStyle } = require('lib/components/global-style.js');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { ActionButton } = require('lib/components/action-button.js');
const { dialogs } = require('lib/dialogs.js');
const DialogBox = require('react-native-dialogbox').default;

View File

@ -6,10 +6,11 @@ const { WebView } = require('react-native-webview');
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const parseUri = require('lib/parseUri');
const { themeStyle } = require('lib/components/global-style.js');
const shim = require('lib/shim').default;
class OneDriveLoginScreenComponent extends BaseScreenComponent {
static navigationOptions() {
@ -91,7 +92,7 @@ class OneDriveLoginScreenComponent extends BaseScreenComponent {
});
this.forceUpdate();
setTimeout(() => {
shim.setTimeout(() => {
this.setState({
webviewUrl: this.startUrl(),
});

View File

@ -4,7 +4,7 @@ const { StyleSheet, View, TextInput, FlatList, TouchableHighlight } = require('r
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const Icon = require('react-native-vector-icons/Ionicons').default;
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const Note = require('lib/models/Note.js');
const { NoteItem } = require('lib/components/note-item.js');
const { BaseScreenComponent } = require('lib/components/base-screen.js');

View File

@ -1,11 +1,11 @@
const React = require('react');
const { View, Text, Button, FlatList } = require('react-native');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const { connect } = require('react-redux');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { ReportService } = require('lib/services/report.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
const { themeStyle } = require('lib/components/global-style.js');

View File

@ -5,7 +5,7 @@ const { connect } = require('react-redux');
const Tag = require('lib/models/Tag.js');
const { themeStyle } = require('lib/components/global-style.js');
const { ScreenHeader } = require('lib/components/screen-header.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { BaseScreenComponent } = require('lib/components/base-screen.js');
class TagsScreenComponent extends BaseScreenComponent {

View File

@ -1,7 +1,7 @@
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const ObjectUtils = require('lib/ObjectUtils');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { createSelector } = require('reselect');
const { reg } = require('lib/registry');

View File

@ -1,8 +1,8 @@
const { shim } = require('lib/shim');
const shim = require('lib/shim').default;
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale.js');
const Setting = require('lib/models/Setting');
const { _ } = require('lib/locale');
const Setting = require('lib/models/Setting').default;
class Shared {
constructor(comp, showInfoMessageBox, showErrorMessageBox) {

View File

@ -1,19 +1,21 @@
const EncryptionService = require('lib/services/EncryptionService');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const BaseItem = require('lib/models/BaseItem.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const MasterKey = require('lib/models/MasterKey.js');
const { reg } = require('lib/registry.js');
const shim = require('lib/shim').default;
const shared = {};
shared.constructor = function(comp) {
shared.constructor = function(comp, props) {
comp.state = {
passwordChecks: {},
stats: {
encrypted: null,
total: null,
},
passwords: Object.assign({}, props.passwords),
};
comp.isMounted_ = false;
@ -49,7 +51,7 @@ shared.upgradeMasterKey = async function(comp, masterKey) {
}
try {
const password = comp.props.passwords[masterKey.id];
const password = comp.state.passwords[masterKey.id];
const newMasterKey = await EncryptionService.instance().upgradeMasterKey(masterKey, password);
await MasterKey.save(newMasterKey);
reg.waitForSyncFinishedThenSync();
@ -65,13 +67,13 @@ shared.componentDidMount = async function(comp) {
shared.refreshStats(comp);
if (shared.refreshStatsIID_) {
clearInterval(shared.refreshStatsIID_);
shim.clearInterval(shared.refreshStatsIID_);
shared.refreshStatsIID_ = null;
}
shared.refreshStatsIID_ = setInterval(() => {
shared.refreshStatsIID_ = shim.setInterval(() => {
if (!comp.isMounted_) {
clearInterval(shared.refreshStatsIID_);
shim.clearInterval(shared.refreshStatsIID_);
shared.refreshStatsIID_ = null;
return;
}
@ -80,6 +82,10 @@ shared.componentDidMount = async function(comp) {
};
shared.componentDidUpdate = async function(comp, prevProps = null) {
if (prevProps && comp.props.passwords !== prevProps.passwords) {
comp.setState({ passwords: Object.assign({}, comp.props.passwords) });
}
if (!prevProps || comp.props.masterKeys !== prevProps.masterKeys || comp.props.passwords !== prevProps.passwords) {
comp.checkPasswords();
}
@ -87,7 +93,7 @@ shared.componentDidUpdate = async function(comp, prevProps = null) {
shared.componentWillUnmount = function() {
if (shared.refreshStatsIID_) {
clearInterval(shared.refreshStatsIID_);
shim.clearInterval(shared.refreshStatsIID_);
shared.refreshStatsIID_ = null;
}
};
@ -96,7 +102,7 @@ shared.checkPasswords = async function(comp) {
const passwordChecks = Object.assign({}, comp.state.passwordChecks);
for (let i = 0; i < comp.props.masterKeys.length; i++) {
const mk = comp.props.masterKeys[i];
const password = comp.props.passwords[mk.id];
const password = comp.state.passwords[mk.id];
const ok = password ? await EncryptionService.instance().checkMasterKeyPassword(mk, password) : false;
passwordChecks[mk.id] = ok;
}
@ -111,18 +117,18 @@ shared.decryptedStatText = function(comp) {
};
shared.onSavePasswordClick = function(comp, mk) {
const password = comp.props.passwords[mk.id];
const password = comp.state.passwords[mk.id];
if (!password) {
Setting.deleteObjectKey('encryption.passwordCache', mk.id);
Setting.deleteObjectValue('encryption.passwordCache', mk.id);
} else {
Setting.setObjectKey('encryption.passwordCache', mk.id, password);
Setting.setObjectValue('encryption.passwordCache', mk.id, password);
}
comp.checkPasswords();
};
shared.onPasswordChange = function(comp, mk, password) {
const passwords = comp.props.passwords;
const passwords = Object.assign({}, comp.state.passwords);
passwords[mk.id] = password;
comp.setState({ passwords: passwords });
};

View File

@ -5,7 +5,7 @@ const Note = require('lib/models/Note.js');
const Resource = require('lib/models/Resource.js');
const ResourceFetcher = require('lib/services/ResourceFetcher.js');
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
const Setting = require('lib/models/Setting.js');
const Setting = require('lib/models/Setting').default;
const Mutex = require('async-mutex').Mutex;
const shared = {};

View File

@ -1,14 +1,17 @@
const Setting = require('lib/models/Setting');
const Setting = require('lib/models/Setting').default;
const Tag = require('lib/models/Tag');
const BaseModel = require('lib/BaseModel');
const Note = require('lib/models/Note');
const { reg } = require('lib/registry.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const eventManager = require('lib/eventManager').default;
const reduxSharedMiddleware = async function(store, next, action) {
const newState = store.getState();
eventManager.appStateEmit(newState);
let refreshTags = false;
if (action.type == 'FOLDER_SET_COLLAPSED' || action.type == 'FOLDER_TOGGLE') {

View File

@ -4,9 +4,9 @@ const { Easing, Animated, TouchableOpacity, Text, StyleSheet, ScrollView, View,
const { connect } = require('react-redux');
const Icon = require('react-native-vector-icons/Ionicons').default;
const Folder = require('lib/models/Folder.js');
const { Synchronizer } = require('lib/synchronizer.js');
const Synchronizer = require('lib/Synchronizer').default;
const NavService = require('lib/services/NavService.js');
const { _ } = require('lib/locale.js');
const { _ } = require('lib/locale');
const { themeStyle } = require('lib/components/global-style.js');
const shared = require('lib/components/shared/side-menu-shared.js');