1
0
mirror of https://github.com/laurent22/joplin.git synced 2026-04-02 10:51:52 +02:00

Compare commits

...

21 Commits

Author SHA1 Message Date
Laurent Cozic
c6ff42f374 Update shim-init-node.js 2023-08-08 15:48:31 +01:00
Laurent Cozic
a25117c41a Update Note.tsx 2023-08-08 15:47:51 +01:00
Laurent Cozic
6131d1ffd2 Update shim-init-node.js 2023-08-08 15:47:01 +01:00
Laurent Cozic
6dea4b8261 Update Note.tsx 2023-08-08 15:46:04 +01:00
Hubert
94b3de1370 Split message in two lines. 2023-08-04 17:40:54 -03:00
Hubert
cca501d819 Merge remote-tracking branch 'origin/dev' into issue-8566 2023-08-04 17:30:11 -03:00
renovate[bot]
2329e321ec Update dependency @rmp135/sql-ts to v1.18.0 (#8615)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-04 12:28:58 +01:00
Hubert
6c2e0d9262 Desktop: Fixes #8591: Error while quitting the app (#8612) 2023-08-04 11:00:39 +01:00
Laurent Cozic
887c271853 Chore: Trying to fix logger (#8610) 2023-08-04 10:57:54 +01:00
Milo Ivir
ea7c7f6447 Update Croatian translation file (#8608) 2023-08-03 15:51:06 +01:00
renovate[bot]
29931c05ad Update dependency sharp to v0.32.3 (#8606)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-03 13:06:41 +00:00
renovate[bot]
17c227024e Update dependency react-select to v5.7.4 (#8604)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-02 19:11:39 +00:00
Hubert
6fe33f3435 Label updated. 2023-08-02 16:09:37 -03:00
Hubert
4d05cc7595 Merge remote-tracking branch 'origin/dev' into issue-8566 2023-08-02 16:08:13 -03:00
renovate[bot]
406a1496db Update buildTools (major) (#8597)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
2023-08-02 11:24:54 +01:00
Hubert
30471d591a Modifications in the mobile app to support the choice of the user from menu. 2023-07-31 14:37:43 -03:00
Hubert
c997a7e480 Merge remote-tracking branch 'origin/dev' into issue-8566 2023-07-31 13:02:22 -03:00
Hubert
7ed133d960 Changes from review. 2023-07-31 12:03:10 -03:00
Hubert
c252937852 Update packages/lib/models/Setting.ts
Co-authored-by: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com>
2023-07-30 10:30:58 -03:00
Hubert
a9c919fe59 Removed the changes in the indentation. The code isn't related to my changes. 2023-07-28 16:51:13 -03:00
Hubert
772baf1e84 Added the option under note's menu that allowed the users to decide what to do when attaching some large image file to some note. 2023-07-28 16:34:14 -03:00
30 changed files with 208 additions and 184 deletions

View File

@@ -541,6 +541,7 @@ packages/lib/htmlUtils2.test.js
packages/lib/import-enex-md-gen.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex.js
packages/lib/initLib.js
packages/lib/locale.test.js
packages/lib/locale.js
packages/lib/markdownUtils.test.js

1
.gitignore vendored
View File

@@ -526,6 +526,7 @@ packages/lib/htmlUtils2.test.js
packages/lib/import-enex-md-gen.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex.js
packages/lib/initLib.js
packages/lib/locale.test.js
packages/lib/locale.js
packages/lib/markdownUtils.test.js

View File

@@ -64,7 +64,7 @@
}
},
"devDependencies": {
"@joplin/utils": "~2.11",
"@joplin/utils": "~2.12",
"@seiyab/eslint-plugin-react-hooks": "4.5.1-beta.0",
"@typescript-eslint/eslint-plugin": "5.60.0",
"@typescript-eslint/parser": "5.60.0",

View File

@@ -57,7 +57,7 @@
"proper-lockfile": "4.1.2",
"read-chunk": "2.1.0",
"server-destroy": "1.0.1",
"sharp": "0.32.2",
"sharp": "0.32.3",
"sprintf-js": "1.1.2",
"sqlite3": "5.1.6",
"string-padding": "1.0.2",

View File

@@ -174,7 +174,7 @@ export default class ElectronAppWrapper {
// so that it can tell us if we can really close the app or not.
// Search for "appClose" event for closing logic on renderer side.
event.preventDefault();
this.win_.webContents.send('appClose');
if (this.win_) this.win_.webContents.send('appClose');
} else {
// If the renderer process has responded, check if we can close or not
if (this.rendererProcessQuitReply_.canClose) {

View File

@@ -26,6 +26,7 @@ interface State {
interface Props {
message?: string;
children: any;
}
export default class ErrorBoundary extends React.Component<Props, State> {

View File

@@ -99,7 +99,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
}
}, []);
const addListItem = useCallback((string1, defaultText = '') => {
const addListItem = useCallback((string1: string, defaultText = '') => {
if (editorRef.current) {
if (editorRef.current.somethingSelected()) {
editorRef.current.wrapSelectionsByLine(string1);

View File

@@ -141,7 +141,7 @@ export default function useScrollHandler(editorRef: any, webviewRef: any, onScro
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
}, []);
const editor_resize = useCallback((cm) => {
const editor_resize = useCallback((cm: any) => {
if (isCodeMirrorReady(cm)) {
// This handler is called when resized and refreshed.
// Only when resized, the scroll position is restored.

View File

@@ -324,7 +324,7 @@ function NoteEditor(props: NoteEditorProps) {
const onMessage = useMessageHandler(scrollWhenReady, setScrollWhenReady, editorRef, setLocalSearchResultCount, props.dispatch, formNote);
const externalEditWatcher_noteChange = useCallback((event) => {
const externalEditWatcher_noteChange = useCallback((event: any) => {
if (event.id === formNote.id) {
const newFormNote = {
...formNote,
@@ -337,7 +337,7 @@ function NoteEditor(props: NoteEditorProps) {
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
}, [formNote]);
const onNotePropertyChange = useCallback((event) => {
const onNotePropertyChange = useCallback((event: any) => {
setFormNote(formNote => {
if (formNote.id !== event.note.id) return formNote;

View File

@@ -78,7 +78,7 @@ export async function commandAttachFileToBody(body: string, filePaths: string[]
logger.info(`Attaching ${filePath}`);
const newBody = await shim.attachFileToNoteBody(body, filePath, options.position, {
createFileURL: options.createFileURL,
resizeLargeImages: 'ask',
resizeLargeImages: Setting.value('imageResizing'),
});
if (!newBody) {

View File

@@ -84,11 +84,11 @@ function NoteListItem(props: NoteListItemProps, ref: any) {
dragItemPosition = 'bottom';
}
const onTitleClick = useCallback((event) => {
const onTitleClick = useCallback((event: any) => {
props.onTitleClick(event, props.item);
}, [props.onTitleClick, props.item]);
const onCheckboxClick = useCallback((event) => {
const onCheckboxClick = useCallback((event: any) => {
props.onCheckboxClick(event, props.item);
}, [props.onCheckboxClick, props.item]);

View File

@@ -1,5 +1,6 @@
const { default: Logger, TargetType } = require('@joplin/utils/Logger');
const initLib = require('@joplin/lib/initLib').default;
// TODO: Some libraries required by test-utils.js seem to fail to import with the
// jsdom environment.
@@ -11,9 +12,16 @@ const logger = new Logger();
logger.addTarget(TargetType.Console);
logger.setLevel(Logger.LEVEL_WARN);
Logger.initializeGlobalLogger(logger);
initLib(logger);
// @electron/remote requires electron to be running. Mock it.
jest.mock('@electron/remote', () => {
return { require };
return {
require: () => {
return {
default: {},
};
},
};
});

View File

@@ -29,6 +29,7 @@ const EncryptionService = require('@joplin/lib/services/e2ee/EncryptionService')
const { FileApiDriverLocal } = require('@joplin/lib/file-api-driver-local');
const React = require('react');
const nodeSqlite = require('sqlite3');
const initLib = require('@joplin/lib/initLib').default;
// Security: If we attempt to navigate away from the root HTML page, it's likely because
// of an improperly sanitized link. Prevent this by closing the window before we can
@@ -132,6 +133,10 @@ document.addEventListener('click', (event) => {
event.preventDefault();
});
const logger = new Logger();
Logger.initializeGlobalLogger(logger);
initLib(logger);
app().start(bridge().processArgv()).then((result) => {
if (!result || !result.action) {
require('./gui/Root');

View File

@@ -112,7 +112,7 @@
"@testing-library/react-hooks": "8.0.1",
"@types/jest": "29.5.3",
"@types/node": "18.16.18",
"@types/react": "16.14.43",
"@types/react": "18.0.24",
"@types/react-redux": "7.1.25",
"@types/styled-components": "5.1.26",
"electron": "25.3.1",
@@ -163,7 +163,7 @@
"react-datetime": "3.2.0",
"react-dom": "18.2.0",
"react-redux": "8.1.1",
"react-select": "5.7.3",
"react-select": "5.7.4",
"react-toggle-button": "2.2.0",
"react-tooltip": "4.5.1",
"redux": "4.2.1",

View File

@@ -572,29 +572,16 @@ class NoteScreenComponent extends BaseScreenComponent {
public async resizeImage(localFilePath: string, targetPath: string, mimeType: string) {
const maxSize = Resource.IMAGE_MAX_DIMENSION;
const dimensions: any = await this.imageDimensions(localFilePath);
reg.logger().info('Original dimensions ', dimensions);
let mustResize = dimensions.width > maxSize || dimensions.height > maxSize;
if (mustResize) {
const buttonId = await dialogs.pop(this, _('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', dimensions.width, dimensions.height, maxSize), [
{ text: _('Yes'), id: 'yes' },
{ text: _('No'), id: 'no' },
{ text: _('Cancel'), id: 'cancel' },
]);
if (buttonId === 'cancel') return false;
mustResize = buttonId === 'yes';
}
if (mustResize) {
const saveOriginalImage = async () => {
await shim.fsDriver().copy(localFilePath, targetPath);
return true;
};
const saveResizedImage = async () => {
dimensions.width = maxSize;
dimensions.height = maxSize;
reg.logger().info('New dimensions ', dimensions);
const format = mimeType === 'image/png' ? 'PNG' : 'JPEG';
@@ -612,11 +599,27 @@ class NoteScreenComponent extends BaseScreenComponent {
} catch (error) {
reg.logger().warn('Error when unlinking cached file: ', error);
}
} else {
await shim.fsDriver().copy(localFilePath, targetPath);
return true;
};
const canResize = dimensions.width > maxSize || dimensions.height > maxSize;
if (canResize) {
const resizeLargeImages = Setting.value('imageResizing');
if (resizeLargeImages === 'alwaysAsk') {
const userAnswer = await dialogs.pop(this, `${_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', dimensions.width, dimensions.height, maxSize)}\n\n${_('(You may disable this prompt in the options)')}`, [
{ text: _('Yes'), id: 'yes' },
{ text: _('No'), id: 'no' },
{ text: _('Cancel'), id: 'cancel' },
]);
if (userAnswer === 'yes') return await saveResizedImage();
if (userAnswer === 'no') return await saveOriginalImage();
if (userAnswer === 'cancel') return false;
} else if (resizeLargeImages === 'alwaysResize') {
return await saveResizedImage();
}
}
return true;
return await saveOriginalImage();
}
public async attachFile(pickerResponse: any, fileType: string) {

View File

@@ -85,6 +85,7 @@ const SyncTargetWebDAV = require('@joplin/lib/SyncTargetWebDAV.js');
const SyncTargetDropbox = require('@joplin/lib/SyncTargetDropbox.js');
const SyncTargetAmazonS3 = require('@joplin/lib/SyncTargetAmazonS3.js');
import BiometricPopup from './components/biometrics/BiometricPopup';
import initLib from '@joplin/lib/initLib';
SyncTargetRegistry.addClass(SyncTargetNone);
SyncTargetRegistry.addClass(SyncTargetOneDrive);
@@ -474,6 +475,7 @@ async function initialize(dispatch: Function) {
}
Logger.initializeGlobalLogger(mainLogger);
initLib(mainLogger);
reg.setLogger(mainLogger);
reg.setShowErrorMessageBoxHandler((message: string) => { alert(message); });

View File

@@ -6,6 +6,6 @@
},
"dependencies": {
"typedoc": "0.17.8",
"typescript": "4.9.5"
"typescript": "5.0.4"
}
}

View File

@@ -59,7 +59,6 @@ import Resource from './models/Resource';
import { ProfileConfig } from './services/profileConfig/types';
import initProfile from './services/profileConfig/initProfile';
import { parseShareCache } from './services/share/reducer';
import RotatingLogs from './RotatingLogs';
const appLogger: LoggerWrapper = Logger.create('App');
@@ -69,6 +68,7 @@ const appLogger: LoggerWrapper = Logger.create('App');
interface StartOptions {
keychainEnabled?: boolean;
setupGlobalLogger?: boolean;
}
export default class BaseApplication {
@@ -738,6 +738,7 @@ export default class BaseApplication {
public async start(argv: string[], options: StartOptions = null): Promise<any> {
options = {
keychainEnabled: true,
setupGlobalLogger: true,
...options,
};
@@ -800,18 +801,15 @@ export default class BaseApplication {
const extraFlags = await this.readFlagsFromFile(`${profileDir}/flags.txt`);
initArgs = { ...initArgs, ...extraFlags };
const globalLogger = Logger.globalLogger;
const globalLogger = new Logger();
globalLogger.addTarget(TargetType.File, { path: `${profileDir}/log.txt` });
if (Setting.value('appType') === 'desktop') {
globalLogger.addTarget(TargetType.Console);
if (options.setupGlobalLogger) {
globalLogger.addTarget(TargetType.File, { path: `${profileDir}/log.txt` });
if (Setting.value('appType') === 'desktop') {
globalLogger.addTarget(TargetType.Console);
}
globalLogger.setLevel(initArgs.logLevel);
}
globalLogger.setLevel(initArgs.logLevel);
Logger.initializeGlobalLogger(globalLogger);
reg.setLogger(Logger.create('') as Logger);
// reg.dispatch = () => {};

9
packages/lib/initLib.ts Normal file
View File

@@ -0,0 +1,9 @@
import Logger from '@joplin/utils/Logger';
// @joplin/lib has its own copy of the Logger class, however we want it to be
// initialised with the same logger instance as the calling application, so that
// the lib and app share the same log. This initLib() function is used for this
// and must be called by any "app" package that makes use of the lib package.
export default (globalLogger: Logger) => {
Logger.initializeGlobalLogger(globalLogger);
};

View File

@@ -1121,7 +1121,25 @@ class Setting extends BaseModel {
storage: SettingStorage.File,
isGlobal: true,
},
imageResizing: {
value: 'alwaysAsk',
type: SettingItemType.String,
section: 'note',
isEnum: true,
public: true,
appTypes: [AppType.Mobile, AppType.Desktop],
label: () => _('Resize large images:'),
description: () => _('Shrink large images before adding them to notes to save storage space.'),
options: () => {
return {
alwaysAsk: _('Always ask'),
alwaysResize: _('Always resize'),
neverResize: _('Never resize'),
};
},
storage: SettingStorage.File,
isGlobal: true,
},
'plugins.states': {
value: '',
type: SettingItemType.Object,

View File

@@ -21,11 +21,11 @@
"@types/js-yaml": "4.0.5",
"@types/node": "18.16.18",
"@types/node-rsa": "1.1.1",
"@types/react": "17.0.62",
"@types/uuid": "^9.0.0",
"@types/react": "18.0.24",
"@types/uuid": "9.0.2",
"clean-html": "1.5.0",
"jest": "29.5.0",
"sharp": "0.32.2",
"sharp": "0.32.3",
"typescript": "5.1.3"
},
"dependencies": {

View File

@@ -184,38 +184,42 @@ function shimInit(options = null) {
if (shim.isElectron()) {
// For Electron
const nativeImage = require('electron').nativeImage;
let image = nativeImage.createFromPath(filePath);
const image = nativeImage.createFromPath(filePath);
if (image.isEmpty()) throw new Error(`Image is invalid or does not exist: ${filePath}`);
const size = image.getSize();
let mustResize = size.width > maxDim || size.height > maxDim;
if (mustResize && resizeLargeImages === 'ask') {
const answer = shim.showMessageBox(_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', size.width, size.height, maxDim), {
buttons: [_('Yes'), _('No'), _('Cancel')],
});
if (answer === 2) return false;
mustResize = answer === 0;
}
if (!mustResize) {
const saveOriginalImage = async () => {
await shim.fsDriver().copy(filePath, targetPath);
return true;
};
const saveResizedImage = async () => {
const options = {};
if (size.width > size.height) {
options.width = maxDim;
} else {
options.height = maxDim;
}
const resizedImage = image.resize(options);
await shim.writeImageToFile(resizedImage, mime, targetPath);
return true;
};
const canResize = size.width > maxDim || size.height > maxDim;
if (canResize) {
if (resizeLargeImages === 'alwaysAsk') {
const Yes = 0, No = 1, Cancel = 2;
const userAnswer = shim.showMessageBox(`${_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', size.width, size.height, maxDim)}\n\n${_('(You may disable this prompt in the options)')}`, {
buttons: [_('Yes'), _('No'), _('Cancel')],
});
if (userAnswer === Yes) return await saveResizedImage();
if (userAnswer === No) return await saveOriginalImage();
if (userAnswer === Cancel) return false;
} else if (resizeLargeImages === 'alwaysResize') {
return await saveResizedImage();
}
}
const options = {};
if (size.width > size.height) {
options.width = maxDim;
} else {
options.height = maxDim;
}
image = image.resize(options);
await shim.writeImageToFile(image, mime, targetPath);
return await saveOriginalImage();
} else {
// For the CLI tool
const image = sharp(filePath);
@@ -241,8 +245,6 @@ function shimInit(options = null) {
});
});
}
return true;
};
// This is a bit of an ugly method that's used to both create a new resource

View File

@@ -63,6 +63,7 @@ const { S3Client } = require('@aws-sdk/client-s3');
const { Dirnames } = require('../services/synchronizer/utils/types');
import RSA from '../services/e2ee/RSA.node';
import { State as ShareState } from '../services/share/reducer';
import initLib from '../initLib';
// Each suite has its own separate data and temp directory so that multiple
// suites can be run at the same time. suiteName is what is used to
@@ -173,6 +174,7 @@ logger.addTarget(TargetType.Console);
logger.setLevel(LogLevel.Warn); // Set to DEBUG to display sync process in console
Logger.initializeGlobalLogger(logger);
initLib(logger);
BaseItem.loadClass('Note', Note);
BaseItem.loadClass('Folder', Folder);
@@ -916,7 +918,7 @@ class TestApp extends BaseApplication {
if (!argv.includes('--profile')) {
argv = argv.concat(['--profile', `tests-build/profile/${uuid.create()}`]);
}
argv = await super.start(['', ''].concat(argv));
argv = await super.start(['', ''].concat(argv), { setupGlobalLogger: false });
// For now, disable sync and encryption to avoid spurious intermittent failures
// caused by them interupting processing and causing delays.

View File

@@ -21,7 +21,7 @@
"devDependencies": {
"@types/jest": "29.5.3",
"@types/pdfjs-dist": "2.10.378",
"@types/react": "16.14.43",
"@types/react": "18.2.6",
"@types/react-dom": "18.2.6",
"@types/styled-components": "5.1.26",
"babel-jest": "29.5.0",

View File

@@ -60,7 +60,7 @@
},
"devDependencies": {
"@joplin/tools": "~2.12",
"@rmp135/sql-ts": "1.17.0",
"@rmp135/sql-ts": "1.18.0",
"@types/formidable": "2.0.6",
"@types/fs-extra": "11.0.1",
"@types/jest": "29.5.3",

View File

@@ -24,6 +24,7 @@ import { RouteResponseFormat, routeResponseFormat } from './utils/routeUtils';
import { parseEnv } from './env';
import storageConnectionCheck from './utils/storageConnectionCheck';
import { setLocale } from '@joplin/lib/locale';
import initLib from '@joplin/lib/initLib';
import checkAdminHandler from './middleware/checkAdminHandler';
interface Argv {
@@ -215,6 +216,7 @@ async function main() {
formatInfo: `%(date_time)s: ${instancePrefix}%(prefix)s: %(message)s`,
});
Logger.initializeGlobalLogger(globalLogger);
initLib(globalLogger);
if (envFilePath) appLogger().info(`Env variables were loaded from: ${envFilePath}`);

View File

@@ -25,6 +25,7 @@ import { createCsrfToken } from '../csrf';
import { cookieSet } from '../cookies';
import { parseEnv } from '../../env';
import { URL } from 'url';
import initLib from '@joplin/lib/initLib';
// Takes into account the fact that this file will be inside the /dist directory
// when it runs.
@@ -64,6 +65,7 @@ export async function makeTempFileWithContent(content: string | Buffer): Promise
function initGlobalLogger() {
const globalLogger = new Logger();
Logger.initializeGlobalLogger(globalLogger);
initLib(globalLogger);
}
let createdDbPath_: string = null;

View File

@@ -2,7 +2,7 @@
# Copyright (C) 2001 Laurent Cozic
# This file is distributed under the same license as the Joplin-CLI package.
# Hrvoje Mandić <trbuhom@net.hr>
# Milo Ivir <mail@milotype.de>, 2021., 2022.
# Milo Ivir <mail@milotype.de>, 2021., 2022., 2023.
#
msgid ""
msgstr ""
@@ -15,8 +15,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
#: packages/app-mobile/components/screens/ConfigScreen.tsx:687
msgid "- Camera: to allow taking a picture and attaching it to a note."
@@ -359,8 +361,8 @@ msgstr ""
#: packages/app-cli/app/command-mkbook.ts:33
#: packages/app-cli/app/command-mv.js:29
msgid ""
"Ambiguous notebook \"%s\". Please use short notebook id instead - press "
"\"ti\" to see the short notebook id"
"Ambiguous notebook \"%s\". Please use short notebook id instead - press \"ti"
"\" to see the short notebook id"
msgstr ""
"Nejednoznačna bilježnica „%s”. Umjesto toga koristi kratki ID bilježnice – "
"pritisni „ti” za prikaz kratkog ID-a bilježnice"
@@ -1424,9 +1426,8 @@ msgid "Downloading"
msgstr "Preuzimanje"
#: packages/app-mobile/components/voiceTyping/VoiceTypingDialog.tsx:89
#, fuzzy
msgid "Downloading %s language files..."
msgstr "Preuzimanje resursa …"
msgstr "Preuzimanje jezičnih datoteka za %s …"
#: packages/app-cli/app/command-sync.ts:218
msgid "Downloading resources..."
@@ -2021,9 +2022,8 @@ msgid "Help"
msgstr "Pomoć"
#: packages/app-mobile/components/screens/ConfigScreen.tsx:759
#, fuzzy
msgid "Hermes enabled: %d"
msgstr "Pretraživanje cijelog teksta je aktivirano: %d"
msgstr "Hermes aktiviran: %d"
#: packages/app-desktop/gui/MenuBar.tsx:567
msgid "Hide %s"
@@ -2445,6 +2445,7 @@ msgstr "Slijed gumbova rasporeda"
#: packages/lib/models/Setting.ts:1704
msgid "Leave it blank to download the language files from the default website"
msgstr ""
"Ostavi prazno za preuzimanje jezičnih datoteka sa standardne web stranice"
#: packages/app-desktop/gui/MainScreen/commands/leaveSharedFolder.ts:10
msgid "Leave notebook..."
@@ -3460,7 +3461,7 @@ msgstr "Zamijeni sa …"
#: packages/app-mobile/components/NoteEditor/SearchPanel.tsx:257
msgid "Replace: "
msgstr "Zamijeni:"
msgstr "Zamijeni: "
#: packages/app-desktop/gui/MainScreen/commands/resetLayout.ts:7
msgid "Reset application layout"
@@ -3649,9 +3650,8 @@ msgid "Select file..."
msgstr "Odaberi datoteku …"
#: packages/app-mobile/components/screens/folder.js:109
#, fuzzy
msgid "Select parent notebook"
msgstr "Obriši bilježnicu"
msgstr "Obriši nadređenu bilježnicu"
#: packages/app-cli/app/command-server.js:38
msgid "Server is already running on port %d"
@@ -4940,12 +4940,12 @@ msgstr "Vim"
#: packages/lib/models/Setting.ts:1705
msgid "Voice typing language files (URL)"
msgstr ""
msgstr "Jezične datoteke za tipkanje glasom (URL)"
#: packages/app-mobile/components/screens/Note.tsx:994
#: packages/app-mobile/components/voiceTyping/VoiceTypingDialog.tsx:119
msgid "Voice typing..."
msgstr "Tipkanje glasa …"
msgstr "Tipkanje glasom …"
#: packages/app-mobile/components/screens/ConfigScreen.tsx:83
msgid "Warning"
@@ -4999,9 +4999,8 @@ msgstr ""
"pritisni `mn`."
#: packages/lib/WelcomeUtils.ts:63
#, fuzzy
msgid "Welcome!"
msgstr "Dobro došli"
msgstr "Dobro došao, dobro došla!"
#: packages/lib/models/Setting.ts:1105
msgid "When creating a new note:"

View File

@@ -36,14 +36,14 @@
"node-fetch": "2.6.7",
"relative": "3.0.2",
"request": "2.88.2",
"sharp": "0.32.2",
"sharp": "0.32.3",
"source-map-support": "0.5.21",
"uri-template": "2.0.0",
"yargs": "17.7.2"
},
"devDependencies": {
"@joplin/fork-htmlparser2": "^4.1.44",
"@rmp135/sql-ts": "1.17.0",
"@rmp135/sql-ts": "1.18.0",
"@types/fs-extra": "11.0.1",
"@types/jest": "29.5.3",
"@types/mustache": "4.2.2",

143
yarn.lock
View File

@@ -4436,7 +4436,7 @@ __metadata:
"@testing-library/react-hooks": 8.0.1
"@types/jest": 29.5.3
"@types/node": 18.16.18
"@types/react": 16.14.43
"@types/react": 18.0.24
"@types/react-redux": 7.1.25
"@types/styled-components": 5.1.26
async-mutex: 0.4.0
@@ -4471,7 +4471,7 @@ __metadata:
react-datetime: 3.2.0
react-dom: 18.2.0
react-redux: 8.1.1
react-select: 5.7.3
react-select: 5.7.4
react-test-renderer: 18.2.0
react-toggle-button: 2.2.0
react-tooltip: 4.5.1
@@ -4688,8 +4688,8 @@ __metadata:
"@types/nanoid": 3.0.0
"@types/node": 18.16.18
"@types/node-rsa": 1.1.1
"@types/react": 17.0.62
"@types/uuid": ^9.0.0
"@types/react": 18.0.24
"@types/uuid": 9.0.2
async-mutex: 0.4.0
base-64: 1.0.0
base64-stream: 1.0.0
@@ -4734,7 +4734,7 @@ __metadata:
relative: 3.0.2
reselect: 4.1.8
server-destroy: 1.0.1
sharp: 0.32.2
sharp: 0.32.3
sprintf-js: 1.1.2
sqlite3: 5.1.6
string-padding: 1.0.2
@@ -4760,7 +4760,7 @@ __metadata:
"@joplin/lib": ~2.12
"@types/jest": 29.5.3
"@types/pdfjs-dist": 2.10.378
"@types/react": 16.14.43
"@types/react": 18.2.6
"@types/react-dom": 18.2.6
"@types/styled-components": 5.1.26
async-mutex: 0.4.0
@@ -4883,7 +4883,7 @@ __metadata:
"@joplin/tools": ~2.12
"@joplin/utils": ~2.12
"@koa/cors": 3.4.3
"@rmp135/sql-ts": 1.17.0
"@rmp135/sql-ts": 1.18.0
"@types/formidable": 2.0.6
"@types/fs-extra": 11.0.1
"@types/jest": 29.5.3
@@ -4943,7 +4943,7 @@ __metadata:
"@joplin/lib": ~2.12
"@joplin/renderer": ~2.12
"@joplin/utils": ~2.12
"@rmp135/sql-ts": 1.17.0
"@rmp135/sql-ts": 1.18.0
"@types/fs-extra": 11.0.1
"@types/jest": 29.5.3
"@types/mustache": 4.2.2
@@ -4969,7 +4969,7 @@ __metadata:
request: 2.88.2
rss: 1.2.2
sass: 1.63.6
sharp: 0.32.2
sharp: 0.32.3
source-map-support: 0.5.21
sqlite3: 5.1.6
typescript: 5.1.3
@@ -5007,17 +5007,6 @@ __metadata:
languageName: unknown
linkType: soft
"@joplin/utils@npm:~2.11":
version: 2.11.2
resolution: "@joplin/utils@npm:2.11.2"
dependencies:
execa: 5.1.1
fs-extra: 11.1.1
node-fetch: 2.6.7
checksum: 95ba577e6e5f7fb2c10e6bdb2694fdaaef31d6f650b5917b70ec35cb720b1357e182458cce894395f7109298847c21ad78932df6d3394fdbc315ecb5fde28630
languageName: node
linkType: hard
"@joplin/utils@workspace:packages/utils, @joplin/utils@~2.12":
version: 0.0.0-use.local
resolution: "@joplin/utils@workspace:packages/utils"
@@ -6949,9 +6938,9 @@ __metadata:
languageName: node
linkType: hard
"@rmp135/sql-ts@npm:1.17.0":
version: 1.17.0
resolution: "@rmp135/sql-ts@npm:1.17.0"
"@rmp135/sql-ts@npm:1.18.0":
version: 1.18.0
resolution: "@rmp135/sql-ts@npm:1.18.0"
dependencies:
change-case: ^4.1.2
handlebars: ^4.7.7
@@ -6979,7 +6968,7 @@ __metadata:
optional: true
bin:
sql-ts: bin/sql-ts
checksum: 88bdd92138a592d900755a73f132af5d1214f644a4f1051959faa59ac693e6c2111a27a89bc39ee45bebe1feadcf82022da59a3f8dbabfa2b9d5b3790ea0d5b2
checksum: c1a9bf4a4447fab0823e5200ed9c879900c9c744a5f0ff2f49a96b1e072035e37cb58e7be5e19cc6e0ab4e4446bdaeebe25acb7c2b551221b26b9a88e3542f00
languageName: node
linkType: hard
@@ -8010,28 +7999,6 @@ __metadata:
languageName: node
linkType: hard
"@types/react@npm:16.14.43":
version: 16.14.43
resolution: "@types/react@npm:16.14.43"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: 10ce3f8b80eadd66178a53845bddf264fa109fcfe0a615a0dce7e027dc426768573e87aee3eba7c53a2a867e159bba928bd86cac92ba93c5bd0152a63a49ccad
languageName: node
linkType: hard
"@types/react@npm:17.0.62":
version: 17.0.62
resolution: "@types/react@npm:17.0.62"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: 428a5aff44824ef504e9a9259b5894fe44a5db1c344b536990f07e132900ff5b34cbef0be77a84f30f37be1f88fc8b56dce328f568de8d65de3bfe414c05b2e1
languageName: node
linkType: hard
"@types/react@npm:18.0.24":
version: 18.0.24
resolution: "@types/react@npm:18.0.24"
@@ -8043,6 +8010,17 @@ __metadata:
languageName: node
linkType: hard
"@types/react@npm:18.2.6":
version: 18.2.6
resolution: "@types/react@npm:18.2.6"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: dea9d232d8df7ac357367a69dcb557711ab3d5501807ffa77cebeee73d49ee94d095f298e36853c63ed47cce097eee4c7eae2aaa8c02fac3f0171ec1b523a819
languageName: node
linkType: hard
"@types/react@npm:^17.0.52":
version: 17.0.52
resolution: "@types/react@npm:17.0.52"
@@ -8142,13 +8120,6 @@ __metadata:
languageName: node
linkType: hard
"@types/uuid@npm:^9.0.0":
version: 9.0.0
resolution: "@types/uuid@npm:9.0.0"
checksum: 59ae56d9547c8758588659da2a2b4c97cce79c2aae1798c892bb29452ef08e87859dea2ec3a66bfa88d0d2153147520be2b1893be920f9f0bc9c53a3207ea6aa
languageName: node
linkType: hard
"@types/verror@npm:^1.10.3":
version: 1.10.6
resolution: "@types/verror@npm:1.10.6"
@@ -17404,7 +17375,7 @@ __metadata:
resolution: "generate-plugin-doc@workspace:packages/generate-plugin-doc"
dependencies:
typedoc: 0.17.8
typescript: 4.9.5
typescript: 5.0.4
languageName: unknown
linkType: soft
@@ -21049,7 +21020,7 @@ __metadata:
proper-lockfile: 4.1.2
read-chunk: 2.1.0
server-destroy: 1.0.1
sharp: 0.32.2
sharp: 0.32.3
sprintf-js: 1.1.2
sqlite3: 5.1.6
string-padding: 1.0.2
@@ -28303,9 +28274,9 @@ __metadata:
languageName: node
linkType: hard
"react-select@npm:5.7.3":
version: 5.7.3
resolution: "react-select@npm:5.7.3"
"react-select@npm:5.7.4":
version: 5.7.4
resolution: "react-select@npm:5.7.4"
dependencies:
"@babel/runtime": ^7.12.0
"@emotion/cache": ^11.4.0
@@ -28319,7 +28290,7 @@ __metadata:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
checksum: 9ffa75afb395e7077076521c529611494164ace0c6b1ceb249406991ac668947cfd0424812c15c2a45c792bb2794b22f2df93c4c2f2515962b7dfc7c91b029ec
checksum: ca72941ad1d2c578ec04c09ed3deb7e373f987e589f403fadedc6fcc3e29935b5425ec4d2628f0fe58c21319bcaf153c0d0172432e09fc6423da869d848de757
languageName: node
linkType: hard
@@ -29473,7 +29444,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "root@workspace:."
dependencies:
"@joplin/utils": ~2.11
"@joplin/utils": ~2.12
"@seiyab/eslint-plugin-react-hooks": 4.5.1-beta.0
"@types/fs-extra": 11.0.1
"@typescript-eslint/eslint-plugin": 5.60.0
@@ -29990,9 +29961,9 @@ __metadata:
languageName: node
linkType: hard
"sharp@npm:0.32.2":
version: 0.32.2
resolution: "sharp@npm:0.32.2"
"sharp@npm:0.32.3":
version: 0.32.3
resolution: "sharp@npm:0.32.3"
dependencies:
color: ^4.2.3
detect-libc: ^2.0.1
@@ -30003,7 +29974,7 @@ __metadata:
simple-get: ^4.0.1
tar-fs: ^3.0.4
tunnel-agent: ^0.6.0
checksum: 2d6b9bcada4c4cc6f606003213d866f975254da011a30972d422086e69ae280973dbedbdb91aa636d98de874fd0eb7af42f0aaff044c22e7e65da28e25c7d63a
checksum: 8a6ed0d00bd4d3d6ba92c392fe1f00a4a207f138257a4d903ce5afe5c6d7f684b5218c5b4e8df1097aac960ac10e0114c823f6a8a7e18255bf4a8ec364087051
languageName: node
linkType: hard
@@ -32869,7 +32840,7 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:4 - 5":
"typescript@npm:4 - 5, typescript@npm:5.0.4":
version: 5.0.4
resolution: "typescript@npm:5.0.4"
bin:
@@ -32879,16 +32850,6 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:4.9.5, typescript@npm:^4.0.0, typescript@npm:^4.0.2, typescript@npm:^4.5.5":
version: 4.9.5
resolution: "typescript@npm:4.9.5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
languageName: node
linkType: hard
"typescript@npm:5.1.3":
version: 5.1.3
resolution: "typescript@npm:5.1.3"
@@ -32909,7 +32870,17 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@4 - 5#~builtin<compat/typescript>":
"typescript@npm:^4.0.0, typescript@npm:^4.0.2, typescript@npm:^4.5.5":
version: 4.9.5
resolution: "typescript@npm:4.9.5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
languageName: node
linkType: hard
"typescript@patch:typescript@4 - 5#~builtin<compat/typescript>, typescript@patch:typescript@5.0.4#~builtin<compat/typescript>":
version: 5.0.4
resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin<compat/typescript>::version=5.0.4&hash=ad5954"
bin:
@@ -32919,16 +32890,6 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@4.9.5#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.2#~builtin<compat/typescript>, typescript@patch:typescript@^4.5.5#~builtin<compat/typescript>":
version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
languageName: node
linkType: hard
"typescript@patch:typescript@5.1.3#~builtin<compat/typescript>":
version: 5.1.3
resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=ad5954"
@@ -32949,6 +32910,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@^4.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.2#~builtin<compat/typescript>, typescript@patch:typescript@^4.5.5#~builtin<compat/typescript>":
version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
languageName: node
linkType: hard
"typical@npm:^2.6.1":
version: 2.6.1
resolution: "typical@npm:2.6.1"