Compare commits

..
Author SHA1 Message Date
Laurent Cozic 0680c47b05 Adding service for ResourceEditWatcher 2020-10-29 11:01:48 +00:00
4504 changed files with 329383 additions and 550508 deletions

No files matched your search

-10
View File
@@ -1,10 +0,0 @@
**/node_modules
Assets/
.git/
_releases/
packages/app-desktop
packages/app-cli
packages/app-mobile
packages/app-clipper
packages/generator-joplin
packages/plugin-repo-cli
-26
View File
@@ -1,26 +0,0 @@
# =============================================================================
# PRODUCTION CONFIG EXAMPLE
# -----------------------------------------------------------------------------
# By default it will use SQLite, but that's mostly to test and evaluate the
# server. So you'll want to specify db connection settings to use Postgres.
# =============================================================================
#
# APP_BASE_URL=https://example.com/joplin
# APP_PORT=22300
#
# DB_CLIENT=pg
# POSTGRES_PASSWORD=joplin
# POSTGRES_DATABASE=joplin
# POSTGRES_USER=joplin
# POSTGRES_PORT=5432
# POSTGRES_HOST=localhost
# =============================================================================
# DEV CONFIG EXAMPLE
# -----------------------------------------------------------------------------
# Example of local config, for development. In dev mode, you would usually use
# SQLite so database settings are not needed.
# =============================================================================
#
# APP_BASE_URL=http://localhost:22300
# APP_PORT=22300
+347 -1602
View File
File diff suppressed because it is too large. Load diff
+4 -42
View File
@@ -1,5 +1,4 @@
module.exports = {
'root': true,
'env': {
'browser': true,
'es6': true,
@@ -16,8 +15,7 @@ module.exports = {
'Atomics': 'readonly',
'SharedArrayBuffer': 'readonly',
// Jest variables
'test': 'readonly',
// Jasmine variables
'expect': 'readonly',
'describe': 'readonly',
'it': 'readonly',
@@ -25,7 +23,7 @@ module.exports = {
'afterAll': 'readonly',
'beforeEach': 'readonly',
'afterEach': 'readonly',
'jest': 'readonly',
'jasmine': 'readonly',
// React Native variables
'__DEV__': 'readonly',
@@ -35,9 +33,6 @@ module.exports = {
'chrome': 'readonly',
'browser': 'readonly',
// Server admin UI global variables
'onDocumentReady': 'readonly',
'tinymce': 'readonly',
},
'parserOptions': {
@@ -65,18 +60,13 @@ module.exports = {
'no-var': ['error'],
'no-new-func': ['error'],
'import/prefer-default-export': ['error'],
// This rule should not be enabled since it matters in what order
// imports are done, in particular in relation to the shim.setReact
// call, which should be done first, but this rule might move it down.
// 'import/first': ['error'],
'import/first': ['error'],
'no-array-constructor': ['error'],
'radix': ['error'],
// Warn only for now because fixing everything would take too much
// refactoring, but new code should try to stick to it.
// 'complexity': ['warn', { max: 10 }],
'complexity': ['warn', { max: 10 }],
// Checks rules of Hooks
'react-hooks/rules-of-hooks': 'error',
@@ -125,7 +115,6 @@ module.exports = {
'space-before-blocks': 'error',
'spaced-comment': ['error', 'always'],
'keyword-spacing': ['error', { 'before': true, 'after': true }],
'no-multi-spaces': ['error'],
},
'plugins': [
'react',
@@ -137,37 +126,10 @@ module.exports = {
{
// enable the rule specifically for TypeScript files
'files': ['*.ts', '*.tsx'],
'parserOptions': {
// Required for @typescript-eslint/no-floating-promises
'project': './tsconfig.eslint.json',
},
'rules': {
// Warn only because it would make it difficult to convert JS classes to TypeScript, unless we
// make everything public which is not great. New code however should specify member accessibility.
'@typescript-eslint/explicit-member-accessibility': ['warn'],
'@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }],
'@typescript-eslint/comma-dangle': ['error', {
'arrays': 'always-multiline',
'objects': 'always-multiline',
'imports': 'always-multiline',
'exports': 'always-multiline',
'enums': 'always-multiline',
'generics': 'always-multiline',
'tuples': 'always-multiline',
'functions': 'never',
}],
'@typescript-eslint/semi': ['error', 'always'],
'@typescript-eslint/member-delimiter-style': ['error', {
'multiline': {
'delimiter': 'semi',
'requireLast': true,
},
'singleline': {
'delimiter': 'semi',
'requireLast': false,
},
}],
'@typescript-eslint/no-floating-promises': ['error'],
},
},
],
@@ -0,0 +1,15 @@
---
name: "\U0001F914 Feature requests and support"
about: 'For non-bug issues we recommend using the forum, where you''ll be more likely
to get an answer: https://discourse.joplinapp.org/'
title: ''
labels: ''
assignees: ''
---
If this is a feature request or a support query, please note that you'll not get an answer here.
Instead we recommend using the forum where you'll are a lot more likely to get an answer: https://discourse.joplinapp.org/
The forum is also the right place to submit a feature request so that it can be discussed by other users.
-5
View File
@@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: "\U0001F914 Feature requests and support"
url: https://discourse.joplinapp.org/
about: I have a question or feature request …
-2
View File
@@ -9,9 +9,7 @@ exemptLabels:
- "upstream"
- "backlog"
- "high"
- "medium"
- "spec"
- "cannot reproduce"
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
+335 -1582
View File
File diff suppressed because it is too large. Load diff
+301
View File
@@ -0,0 +1,301 @@
# This is used by VSCode to ignore patterns during search.
# Before they were in joplin.code-workspace, under the `files.exclude` key
# but it eventually reached the limit with ENAMETOOLONG error.
#
# https://github.com/microsoft/vscode/issues/94718
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
CliClient/app/LinkSelector.js
CliClient/app/services/plugins/PluginRunner.js
CliClient/tests/fsDriver.js
CliClient/tests/InMemoryCache.js
CliClient/tests/MdToHtml.js
CliClient/tests/models_Setting.js
CliClient/tests/services_CommandService.js
CliClient/tests/services_InteropService.js
CliClient/tests/services_keychainService.js
CliClient/tests/services_PluginService.js
CliClient/tests/services_rest_Api.js
CliClient/tests/services/plugins/api/JoplinSetting.js
CliClient/tests/services/plugins/sandboxProxy.js
CliClient/tests/synchronizer_LockHandler.js
CliClient/tests/synchronizer_MigrationHandler.js
ElectronClient/app.js
ElectronClient/bridge.js
ElectronClient/commands/copyDevCommand.js
ElectronClient/commands/focusElement.js
ElectronClient/commands/openProfileDirectory.js
ElectronClient/commands/startExternalEditing.js
ElectronClient/commands/stopExternalEditing.js
ElectronClient/commands/toggleExternalEditing.js
ElectronClient/ElectronAppWrapper.js
ElectronClient/global.d.js
ElectronClient/gui/Button/Button.js
ElectronClient/gui/ConfigScreen/ButtonBar.js
ElectronClient/gui/ConfigScreen/ConfigScreen.js
ElectronClient/gui/ConfigScreen/SideBar.js
ElectronClient/gui/DropboxLoginScreen.js
ElectronClient/gui/ErrorBoundary.js
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
ElectronClient/gui/KeymapConfig/styles/index.js
ElectronClient/gui/KeymapConfig/utils/getLabel.js
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
ElectronClient/gui/MainScreen/commands/editAlarm.js
ElectronClient/gui/MainScreen/commands/exportPdf.js
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
ElectronClient/gui/MainScreen/commands/moveToFolder.js
ElectronClient/gui/MainScreen/commands/newFolder.js
ElectronClient/gui/MainScreen/commands/newNote.js
ElectronClient/gui/MainScreen/commands/newSubFolder.js
ElectronClient/gui/MainScreen/commands/newTodo.js
ElectronClient/gui/MainScreen/commands/openFolder.js
ElectronClient/gui/MainScreen/commands/openNote.js
ElectronClient/gui/MainScreen/commands/openTag.js
ElectronClient/gui/MainScreen/commands/print.js
ElectronClient/gui/MainScreen/commands/renameFolder.js
ElectronClient/gui/MainScreen/commands/renameTag.js
ElectronClient/gui/MainScreen/commands/search.js
ElectronClient/gui/MainScreen/commands/selectTemplate.js
ElectronClient/gui/MainScreen/commands/setTags.js
ElectronClient/gui/MainScreen/commands/showModalMessage.js
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
ElectronClient/gui/MainScreen/commands/toggleEditors.js
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
ElectronClient/gui/MainScreen/commands/toggleSideBar.js
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
ElectronClient/gui/MainScreen/MainScreen.js
ElectronClient/gui/MenuBar.js
ElectronClient/gui/MultiNoteActions.js
ElectronClient/gui/NoteContentPropertiesDialog.js
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
ElectronClient/gui/NoteEditor/commands/showRevisions.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
ElectronClient/gui/NoteEditor/NoteEditor.js
ElectronClient/gui/NoteEditor/styles/index.js
ElectronClient/gui/NoteEditor/utils/contextMenu.js
ElectronClient/gui/NoteEditor/utils/index.js
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
ElectronClient/gui/NoteEditor/utils/types.js
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
ElectronClient/gui/NoteEditor/utils/useFolder.js
ElectronClient/gui/NoteEditor/utils/useFormNote.js
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
ElectronClient/gui/NoteList/NoteList.js
ElectronClient/gui/NoteListControls/commands/focusSearch.js
ElectronClient/gui/NoteListControls/NoteListControls.js
ElectronClient/gui/NoteListItem.js
ElectronClient/gui/NoteTextViewer.js
ElectronClient/gui/NoteToolbar/NoteToolbar.js
ElectronClient/gui/OneDriveLoginScreen.js
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
ElectronClient/gui/ResizableLayout/ResizableLayout.js
ElectronClient/gui/ResourceScreen.js
ElectronClient/gui/Root_UpgradeSyncTarget.js
ElectronClient/gui/Root.js
ElectronClient/gui/SearchBar/hooks/useSearch.js
ElectronClient/gui/SearchBar/SearchBar.js
ElectronClient/gui/SearchBar/styles/index.js
ElectronClient/gui/ShareNoteDialog.js
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
ElectronClient/gui/SideBar/SideBar.js
ElectronClient/gui/SideBar/styles/index.js
ElectronClient/gui/StatusScreen/StatusScreen.js
ElectronClient/gui/style/StyledInput.js
ElectronClient/gui/style/StyledTextInput.js
ElectronClient/gui/TagList.js
ElectronClient/gui/ToggleEditorsButton/styles/index.js
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
ElectronClient/gui/ToolbarBase.js
ElectronClient/gui/ToolbarButton/styles/index.js
ElectronClient/gui/ToolbarButton/ToolbarButton.js
ElectronClient/gui/utils/NoteListUtils.js
ElectronClient/InteropServiceHelper.js
ElectronClient/plugins/GotoAnything.js
ElectronClient/services/bridge.js
ElectronClient/services/commands/types.js
ElectronClient/services/plugins/hooks/useThemeCss.js
ElectronClient/services/plugins/hooks/useViewIsReady.js
ElectronClient/services/plugins/PlatformImplementation.js
ElectronClient/services/plugins/PluginRunner.js
ElectronClient/services/plugins/UserWebview.js
ElectronClient/services/plugins/UserWebviewDialog.js
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
ReactNativeClient/lib/AsyncActionQueue.js
ReactNativeClient/lib/BaseApplication.js
ReactNativeClient/lib/checkPermissions.js
ReactNativeClient/lib/commands/historyBackward.js
ReactNativeClient/lib/commands/historyForward.js
ReactNativeClient/lib/commands/synchronize.js
ReactNativeClient/lib/components/BackButtonDialogBox.js
ReactNativeClient/lib/components/CameraView.js
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js
ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js
ReactNativeClient/lib/components/screens/Note.js
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
ReactNativeClient/lib/components/SelectDateTimeDialog.js
ReactNativeClient/lib/errorUtils.js
ReactNativeClient/lib/eventManager.js
ReactNativeClient/lib/fs-driver-node.js
ReactNativeClient/lib/hooks/useEffectDebugger.js
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
ReactNativeClient/lib/hooks/usePrevious.js
ReactNativeClient/lib/hooks/usePropsDebugger.js
ReactNativeClient/lib/InMemoryCache.js
ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js
ReactNativeClient/lib/joplin-renderer/MdToHtml.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
ReactNativeClient/lib/joplin-renderer/noteStyle.js
ReactNativeClient/lib/joplin-renderer/pathUtils.js
ReactNativeClient/lib/JoplinServerApi.js
ReactNativeClient/lib/locale.js
ReactNativeClient/lib/Logger.js
ReactNativeClient/lib/markdownUtils.js
ReactNativeClient/lib/markupLanguageUtils.js
ReactNativeClient/lib/models/Alarm.js
ReactNativeClient/lib/models/Setting.js
ReactNativeClient/lib/ntpDate.js
ReactNativeClient/lib/path-utils.js
ReactNativeClient/lib/PoorManIntervals.js
ReactNativeClient/lib/reducer.js
ReactNativeClient/lib/services/AlarmService.js
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
ReactNativeClient/lib/services/BaseService.js
ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js
ReactNativeClient/lib/services/commands/MenuUtils.js
ReactNativeClient/lib/services/commands/propsHaveChanged.js
ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
ReactNativeClient/lib/services/CommandService.js
ReactNativeClient/lib/services/contextkey/contextkey.js
ReactNativeClient/lib/services/debug/populateDatabase.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
ReactNativeClient/lib/services/interop/InteropService.js
ReactNativeClient/lib/services/interop/types.js
ReactNativeClient/lib/services/keychain/KeychainService.js
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
ReactNativeClient/lib/services/KeymapService.js
ReactNativeClient/lib/services/plugins/api/Global.js
ReactNativeClient/lib/services/plugins/api/Joplin.js
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
ReactNativeClient/lib/services/plugins/api/JoplinData.js
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
ReactNativeClient/lib/services/plugins/api/types.js
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
ReactNativeClient/lib/services/plugins/MenuController.js
ReactNativeClient/lib/services/plugins/MenuItemController.js
ReactNativeClient/lib/services/plugins/Plugin.js
ReactNativeClient/lib/services/plugins/PluginService.js
ReactNativeClient/lib/services/plugins/reducer.js
ReactNativeClient/lib/services/plugins/sandboxProxy.js
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
ReactNativeClient/lib/services/plugins/utils/types.js
ReactNativeClient/lib/services/plugins/ViewController.js
ReactNativeClient/lib/services/plugins/WebviewController.js
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
ReactNativeClient/lib/services/rest/actionApi.desktop.js
ReactNativeClient/lib/services/rest/Api.js
ReactNativeClient/lib/services/rest/errors.js
ReactNativeClient/lib/services/searchengine/filterParser.js
ReactNativeClient/lib/services/searchengine/queryBuilder.js
ReactNativeClient/lib/services/SettingUtils.js
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
ReactNativeClient/lib/services/synchronizer/LockHandler.js
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
ReactNativeClient/lib/services/synchronizer/migrations/1.js
ReactNativeClient/lib/services/synchronizer/migrations/2.js
ReactNativeClient/lib/services/synchronizer/utils/types.js
ReactNativeClient/lib/services/UndoRedoService.js
ReactNativeClient/lib/services/WhenClause.js
ReactNativeClient/lib/ShareExtension.js
ReactNativeClient/lib/shareHandler.js
ReactNativeClient/lib/shim.js
ReactNativeClient/lib/Synchronizer.js
ReactNativeClient/lib/theme.js
ReactNativeClient/lib/themes/aritimDark.js
ReactNativeClient/lib/themes/dark.js
ReactNativeClient/lib/themes/dracula.js
ReactNativeClient/lib/themes/light.js
ReactNativeClient/lib/themes/nord.js
ReactNativeClient/lib/themes/oledDark.js
ReactNativeClient/lib/themes/solarizedDark.js
ReactNativeClient/lib/themes/solarizedLight.js
ReactNativeClient/lib/themes/type.js
ReactNativeClient/lib/uuid.js
ReactNativeClient/lib/versionInfo.js
ReactNativeClient/PluginAssetsLoader.js
ReactNativeClient/setUpQuickActions.js
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
+20 -42
View File
@@ -1,5 +1,5 @@
# Only build tags (Doesn't work - doesn't build anything)
if: tag IS present OR type = pull_request OR branch = dev
if: tag IS present OR type = pull_request
rvm: 2.3.3
@@ -15,30 +15,21 @@ branches:
matrix:
include:
- os: osx
osx_image: xcode12
osx_image: xcode9.0
language: node_js
node_js: "12"
cache:
npm: false
# Cache was disabled because when changing from node_js 10 to node_js 12
# it was still using build files from Node 10 when building SQLite which
# was making it fail. Might be ok to re-enable later on, although it doesn't
# make build that much faster.
#
# env:
# - ELECTRON_CACHE=$HOME/.cache/electron
# - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
node_js: "10"
env:
- ELECTRON_CACHE=$HOME/.cache/electron
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
- os: linux
sudo: required
dist: trusty
language: node_js
node_js: "12"
cache:
npm: false
# env:
# - ELECTRON_CACHE=$HOME/.cache/electron
# - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
node_js: "10"
env:
- ELECTRON_CACHE=$HOME/.cache/electron
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
# cache:
# directories:
@@ -68,24 +59,23 @@ before_install:
script:
- |
# Prints some env variables
echo "TRAVIS_OS_NAME=$TRAVIS_OS_NAME"
echo "TRAVIS_BRANCH=$TRAVIS_BRANCH"
echo "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST"
echo "TRAVIS_TAG=$TRAVIS_TAG"
# Install tools
npm install
cd Tools
npm install
cd ..
# Run test units.
# Only do it for pull requests because Travis randomly fails to run them
# and that would break the desktop release.
if [ "$TRAVIS_PULL_REQUEST" != "false" ] || [ "$TRAVIS_BRANCH" = "dev" ]; then
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
cd CliClient
npm run test-ci
testResult=$?
if [ $testResult -ne 0 ]; then
exit $testResult
fi
cd ..
fi
# Run linter for pull requests only - this is so that
@@ -103,7 +93,7 @@ script:
# tool like poedit. Doing it for Linux only is sufficient.
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
if [ "$TRAVIS_OS_NAME" != "osx" ]; then
node packages/tools/validate-translation.js
node Tools/validate-translation.js
testResult=$?
if [ $testResult -ne 0 ]; then
exit $testResult
@@ -112,7 +102,7 @@ script:
fi
# Find out if we should run the build or not. Electron-builder gets stuck when
# building PRs so we disable it in this case. The Linux build should provide
# builing PRs so we disable it in this case. The Linux build should provide
# enough info if the app builds or not.
# https://github.com/electron-userland/electron-builder/issues/4263
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
@@ -122,17 +112,5 @@ script:
fi
# Prepare the Electron app and build it
#
# If the current tag is a desktop release tag (starts with "v", such as
# "v1.4.7"), we build and publish to github
#
# Otherwise we only build but don't publish to GitHub. It helps finding
# out any issue in pull requests and dev branch.
cd packages/app-desktop
if [[ $TRAVIS_TAG = v* ]]; then
USE_HARD_LINKS=false npm run dist
else
USE_HARD_LINKS=false npm run dist -- --publish=never
fi
cd ElectronClient
USE_HARD_LINKS=false npm run dist
Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 59 KiB

-37
View File
@@ -1,37 +0,0 @@
function camelCaseToDots(s) {
const output = [];
for (let i = 0; i < s.length; i++) {
const c = s[i];
if (c === c.toLowerCase() || i === 0) {
output.push(c.toLowerCase());
} else {
output.push('.');
output.push(c.toLowerCase());
}
}
return output.join('');
}
module.exports = {
jpFormatClassName: function(className) {
if (className.indexOf('Joplin') !== 0 || className.indexOf(' ') >= 0) return className;
const p = className.substr(6);
if (p === '') return 'joplin';
return `joplin.${camelCaseToDots(p)
.replace(/menu\.items/, 'menuItems')
.replace(/toolbar\.buttons/, 'toolbarButtons')
.replace(/content\.scripts/, 'contentScripts')}`;
},
jpIsAllowedGroup: function(name) {
return name !== 'Constructors';
},
jsIsNotKindVariable: function(classes) {
if (!classes) return true;
return classes.indexOf('tsd-kind-variable') < 0;
},
};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 300 KiB

-27
View File
@@ -1,27 +0,0 @@
const iconPackager = require('@ephox/oxide-icons-tools').iconPackager;
const clean = require('gulp-clean');
const gulp = require('gulp');
const fs = require('fs');
gulp.task('icon-packager', function() {
const contents = fs.readFileSync('package.json');
const name = JSON.parse(contents).iconPackName;
return gulp.src('src/svg/**/*.svg')
.pipe(iconPackager({ name }))
.pipe(gulp.dest('dist'));
});
gulp.task('deploy', function() {
fs.copyFileSync(`${__dirname}/dist/icons/Joplin/icons.js`, `${__dirname}/../../../packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/icons.js`);
return Promise.resolve();
});
gulp.task('clean', function() {
return gulp.src('./dist', {
read: false,
allowEmpty: true,
}).pipe(clean());
});
gulp.task('default', gulp.series('clean', 'icon-packager', 'deploy'));
-13
View File
@@ -1,13 +0,0 @@
# TinyMCE Joplin Lists Plugin
**As of 2020-11-02 this module no longer builds (a ton of TypeScript errors). No idea why since nothing was changed but should be investigated if modifying this plugin is ever needed.**
This is based on https://github.com/tinymce/tinymce/tree/59748a11303fb7cf00fdb8c9392dcb082ee9d965/modules/tinymce/src/plugins/lists
But with support for Joplin checkboxes.
## Building
Use `npm i && npm run build` to build the plugin, which will also copy the compiled version to the right packages/app-desktop sub-directory.
To test the plugin, use `npm run buildAndStart`, which will build the plugin and start the desktop application.
-54
View File
@@ -1,54 +0,0 @@
{
"name": "joplin-tinymce-lists",
"version": "1.0.0",
"description": "",
"scripts": {
"prepublishOnly": "npm run lint && npm run build",
"lint": "tslint src/**/*.ts",
"build": "grunt",
"test": "bedrock-auto -b phantomjs -d src/test/ts/",
"test-manual": "bedrock -d src/test/ts/",
"start": "grunt webpack",
"buildAndStart": "yarn build && cd .. && cd .. && cd .. && cd packages/app-desktop && npm start"
},
"keywords": [],
"author": "Tiny Technologies Inc.",
"devDependencies": {
"@ephox/agar": "latest",
"@ephox/bedrock": "latest",
"@ephox/mcagar": "latest",
"@ephox/swag": "latest",
"@ephox/tslint-rules": "latest",
"awesome-typescript-loader": "^5.2.1",
"grunt": "^1.0.4",
"grunt-contrib-clean": "^2.0.0",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^4.0.0",
"grunt-shell": "^2.1.0",
"grunt-tslint": "^5.0.2",
"grunt-webpack": "^3.1.3",
"load-grunt-tasks": "^4.0.0",
"tinymce": "latest",
"ts-loader": "^5.3.0",
"tslib": "^1.9.3",
"tslint": "^5.11.0",
"typescript": "^3.1.6",
"webpack": "^4.25.1",
"webpack-livereload-plugin": "^2.1.1"
},
"files": [
"lib/main",
"lib/demo",
"lib/test",
"src",
"tsconfig.json",
"readme.md",
"LEGAL.txt",
"LICENSE.txt"
],
"main": "./lib/main/ts/api/Main.js",
"module": "./lib/main/ts/api/Main.js",
"types": "./lib/main/ts/api/Main.d.ts",
"license": "Apache-2.0"
}
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20" role="img" aria-label="Donate: IBAN"><title>Donate: IBAN</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="49" height="20" fill="#555"/><rect x="49" width="37" height="20" fill="#007ec6"/><rect width="86" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="255" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">Donate</text><text x="255" y="140" transform="scale(.1)" fill="#fff" textLength="390">Donate</text><text aria-hidden="true" x="665" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">IBAN</text><text x="665" y="140" transform="scale(.1)" fill="#fff" textLength="270">IBAN</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.
+26 -39
View File
@@ -2,28 +2,16 @@
# Building the applications
The Joplin source code is hosted on a [monorepo](https://en.wikipedia.org/wiki/Monorepo) managed by Lerna. The usage of Lerna is mostly transparent as the needed commands have been moved to the root package.json and thus are invoked for example when running `npm install` or `npm run watch`. The main thing to know about Lerna is that it links the packages in the monorepo using `npm link`, so if you check the node_modules directory you will see links instead of actual directories for certain packages. This is something to keep in mind as these links can cause issues in some cases.
The list of the main sub-packages is below:
Package name | Description
--- | ---
app-cli | The CLI application
app-clipper | The web clipper
app-desktop | The desktop application
app-mobile | The mobile application
lib | The core library, shared by all applications. It deals with things like synchronisation, encryption, import/export, database and pretty much all the app business logic
renderer | The Joplin Markdown and HTML renderer
tools | Tools used to build the apps and other tasks
There are also a few forks of existing packages under the "fork-*" name.
Note that all the applications share the same library, which, for historical reasons, is in `ReactNativeClient/lib`. This library is copied to the relevant directories when building each app.
## Required dependencies
- Install yarn - https://yarnpkg.com/lang/en/docs/install/
- Install node 10+ - https://nodejs.org/en/
- macOS, Linux: Install rsync - https://nodejs.org/en/
- macOS: Install Cocoapods - `brew install cocoapods`
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools --vs2015`
- Linux: Install dependencies - `sudo apt install libnss3 libsecret-1-dev python rsync`
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools`
- Linux: Install dependencies - `sudo apt install libnss3 libsecret-1-dev`
## Building
@@ -35,32 +23,33 @@ Then you can test the various applications:
## Testing the desktop application
cd packages/app-desktop
cd ElectronClient
npm start
You can also run it under WSL 2. To do so, [follow these instructions](https://www.beekeeperstudio.io/blog/building-electron-windows-ubuntu-wsl2) to setup your environment.
## Testing the Terminal application
cd packages/app-cli
cd CliClient
npm start
## Testing the Mobile application
First you need to setup React Native to build projects with native code. For this, follow the instructions on the [Get Started](https://facebook.github.io/react-native/docs/getting-started.html) tutorial, in the "React Native CLI Quickstart" tab.
Then, for **Android**:
Then:
cd packages/app-mobile/android
./gradlew installDebug # or gradlew.bat installDebug on Windows
cd ReactNativeClient
npm run start-android
# Or: npm run start-ios
On **iOS**, open the file `ios/Joplin.xcworkspace` on XCode and run the app from there.
To run the iOS application, it might be easier to open the file `ios/Joplin.xcworkspace` on XCode and run the app from there.
Normally the **bundler** should start automatically with the application. If it doesn't, run `npm start` from `packages/app-mobile`.
Normally the bundler should start automatically with the application. If it doesn't, run `npm start`.
## Building the clipper
cd packages/app-clipper/popup
cd Clipper/popup
npm install
npm run watch # To watch for changes
@@ -68,36 +57,30 @@ To test the extension please refer to the relevant pages for each browser: [Fire
## Watching files
To make changes to the application, you'll need to rebuild any TypeScript file you've changed. The simplest way to do this is to watch for changes from the root of the project. Simply run this command, and it should take care of the rest:
To make changes to the application, you'll need to rebuild any TypeScript file you've changed, and rebuild the lib. The simplest way to do all this is to watch for changes from the root of the project. Simply run this command, and it should take care of the rest:
npm run watch
Running `npm run tsc` would have the same effect, but without watching.
Running `npm run build` would have the same effect, but without watching.
## Running an application with additional parameters
You can specify additional parameters when running the desktop or CLI application. To do so, add `--` to the `npm start` command, followed by your flags. For example:
npm start -- --debug
## Adding a new dependency
Since Joplin uses Lerna, adding a new dependency should not be done using `npm i -s ...`. Instead you should use the `lerna add` command, which will take care of adding the package while handling the linked packages correctly. For example, to add the package "leftpad" to the "app-desktop" sub-package, you would run:
npx lerna add leftpad --scope=@joplin/app-desktop
Note that you should most likely always specify a scope because otherwise it will add the package to all the sub-packages.
npm start -- --profile ~/MyTestProfile
## TypeScript
The application was originally written in JavaScript, however it has slowly been migrated to [TypeScript](https://www.typescriptlang.org/). New classes and files should be written in TypeScript. All compiled files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base.
Most of the application is written in JavaScript, however new classes and files should generally be written in [TypeScript](https://www.typescriptlang.org/). All TypeScript files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base.
In the current setup, `tsc` is executed from the root of the project, and will compile everything in CliClient, ElectronClient, etc. This is more convenient to have just one place to compile everything, and it also means there's only one watch command to run. However, one drawback is that TypeScript doesn't find types defined in node_modules folders in sub-directories. For example, if you install `immer` in ElectronClient, then try to use the package, TypeScript will report that it cannot find this module. In theory using `typeRoots`, it should be possible to make it find the right modules but it doesn't seem to work in this case. Currently the workaround is to install any such package at the root of the project. By doing so, TypeScript will find the type definitions and compilation will work. It's not ideal since the module is installed at the root even though it's not used, but for now that will work.
## Hot reload
If you'd like to auto-reload the desktop app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html):
```sh
cd packages/app-desktop
cd ElectronClient
watchman-make -p '**/*.js' '**/*.jsx' --run "npm start"
```
@@ -107,6 +90,10 @@ It still requires you to quit the application each time you want it to rebuild,
2. Switch to the Electron app and <kbd>cmd</kbd>+<kbd>Q</kbd> to quit it.
3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter).
# Updating Markdown renderer packages
The Markdown renderer is located under ReactNativeClient/lib/joplin-renderer. Whenever updating one of its dependencies, such as Mermaid or Katex, please run `npm run buildAssets` to make sure all assets such as fonts or CSS files are deployed correctly.
# Troubleshooting
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
+4 -4
View File
@@ -44,9 +44,9 @@ Building the apps is relatively easy - please [see the build instructions](https
Coding style is enforced by a pre-commit hook that runs eslint. This hook is installed whenever running `npm install` on any of the application directory. If for some reason the pre-commit hook didn't get installed, you can manually install it by running `npm install` at the root of the repository.
For new React components, please use [React Hooks](https://reactjs.org/docs/hooks-intro.html). For new code in general, please use TypeScript. Even if you are modifying a file that was originally in JavaScript you should ideally convert it first to TypeScript before modifying it. Doing so is relatively easy and it helps maintain code quality.
For new React components, please use [React Hooks](https://reactjs.org/docs/hooks-intro.html). For new code in general, please use TypeScript (unless you are modifying a file that was originally in JavaScript).
For changes made to the Desktop client that affect the user interface, refer to `packages/app-desktop/theme.ts` for all styling information. The goal is to create a consistent user interface to allow for easy navigation of Joplin's various features and improve the overall user experience.
For changes made to the Desktop client that affect the user interface, refer to `ElectronClient/app/theme.js` for all styling information. The goal is to create a consistent user interface to allow for easy navigation of Joplin's various features and improve the overall user experience.
## Automated tests
@@ -56,11 +56,11 @@ When submitting a pull request for a new feature or a bug fix, please add automa
* **Feature tests** on the other hand are to test higher level functionalities such as interactions with the GUI and how they affect the underlying model. Often these tests would dispatch Redux actions, and inspect how the application state has been changed. The feature tests should be prefixed with "feature_", for example "feature_TagList". There's a good explanation on what qualifies as a feature test in [this post](https://github.com/laurent22/joplin/pull/2819#issuecomment-603502230).
The tests are under packages/app-cli/tests. To get them running, you first need to build the CLI app:
The tests are under CliClient/tests. To get them running, you first need to build the CLI app:
```sh
npm install
cd packages/app-cli
cd CliClient
```
To run all the test units:
File renamed without changes.
File renamed without changes.
@@ -41,8 +41,7 @@ class LinkSelector {
const newLinkStore: LinkStoreEntry[] = [];
const lines: string[] = renderedText.split('\n');
for (let i = 0; i < lines.length; i++) {
const r = (lines[i] as any).matchAll(this.linkRegex_);
const matches = [...r];
const matches = [...lines[i].matchAll(this.linkRegex_)];
matches.forEach((_e, n) => {
newLinkStore.push(
{
@@ -1,5 +1,5 @@
const Logger = require('@joplin/lib/Logger').default;
const { netUtils } = require('@joplin/lib/net-utils.js');
const Logger = require('lib/Logger').default;
const { netUtils } = require('lib/net-utils.js');
const http = require('http');
const urlParser = require('url');
@@ -1,17 +1,17 @@
const Logger = require('@joplin/lib/Logger').default;
const Folder = require('@joplin/lib/models/Folder').default;
const BaseItem = require('@joplin/lib/models/BaseItem').default;
const Tag = require('@joplin/lib/models/Tag').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const Note = require('@joplin/lib/models/Note').default;
const Resource = require('@joplin/lib/models/Resource').default;
const Setting = require('@joplin/lib/models/Setting').default;
const reducer = require('@joplin/lib/reducer').default;
const { defaultState } = require('@joplin/lib/reducer');
const { splitCommandString } = require('@joplin/lib/string-utils.js');
const { reg } = require('@joplin/lib/registry.js');
const { _ } = require('@joplin/lib/locale');
const shim = require('@joplin/lib/shim').default;
const Logger = require('lib/Logger').default;
const Folder = require('lib/models/Folder.js');
const BaseItem = require('lib/models/BaseItem.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const Resource = require('lib/models/Resource.js');
const Setting = require('lib/models/Setting').default;
const reducer = require('lib/reducer').default;
const { defaultState } = require('lib/reducer');
const { splitCommandString } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale');
const shim = require('lib/shim').default;
const Entities = require('html-entities').AllHtmlEntities;
const htmlentities = new Entities().encode;
@@ -19,7 +19,7 @@ const chalk = require('chalk');
const tk = require('terminal-kit');
const TermWrapper = require('tkwidgets/framework/TermWrapper.js');
const Renderer = require('tkwidgets/framework/Renderer.js');
const DecryptionWorker = require('@joplin/lib/services/DecryptionWorker').default;
const DecryptionWorker = require('lib/services/DecryptionWorker');
const BaseWidget = require('tkwidgets/BaseWidget.js');
const TextWidget = require('tkwidgets/TextWidget.js');
@@ -1,21 +1,20 @@
const BaseApplication = require('@joplin/lib/BaseApplication').default;
const { FoldersScreenUtils } = require('@joplin/lib/folders-screen-utils.js');
const ResourceService = require('@joplin/lib/services/ResourceService').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const BaseItem = require('@joplin/lib/models/BaseItem').default;
const Note = require('@joplin/lib/models/Note').default;
const Tag = require('@joplin/lib/models/Tag').default;
const Setting = require('@joplin/lib/models/Setting').default;
const { reg } = require('@joplin/lib/registry.js');
const { fileExtension } = require('@joplin/lib/path-utils');
const { splitCommandString } = require('@joplin/lib/string-utils');
const { _ } = require('@joplin/lib/locale');
const BaseApplication = require('lib/BaseApplication').default;
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
const ResourceService = require('lib/services/ResourceService');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const BaseItem = require('lib/models/BaseItem.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
const Setting = require('lib/models/Setting').default;
const { reg } = require('lib/registry.js');
const { fileExtension } = require('lib/path-utils');
const { _ } = require('lib/locale');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const Cache = require('@joplin/lib/Cache');
const RevisionService = require('@joplin/lib/services/RevisionService').default;
const shim = require('@joplin/lib/shim').default;
const Cache = require('lib/Cache');
const RevisionService = require('lib/services/RevisionService');
const shim = require('lib/shim').default;
class Application extends BaseApplication {
constructor() {
@@ -387,21 +386,6 @@ class Application extends BaseApplication {
return output;
}
async commandList(argv) {
if (argv.length && argv[0] === 'batch') {
const commands = [];
const commandLines = (await fs.readFile(argv[1], 'utf-8')).split('\n');
for (const commandLine of commandLines) {
if (!commandLine.trim()) continue;
const splitted = splitCommandString(commandLine.trim());
commands.push(splitted);
}
return commands;
} else {
return [argv];
}
}
async start(argv) {
argv = await super.start(argv);
@@ -419,10 +403,7 @@ class Application extends BaseApplication {
await this.applySettingsSideEffects();
try {
const commands = await this.commandList(argv);
for (const command of commands) {
await this.execCommand(command);
}
await this.execCommand(argv);
} catch (error) {
if (this.showStackTraces_) {
console.error(error);
@@ -445,7 +426,7 @@ class Application extends BaseApplication {
const AppGui = require('./app-gui.js');
this.gui_ = new AppGui(this, this.store(), keymap);
this.gui_.setLogger(this.logger());
this.gui_.setLogger(this.logger_);
await this.gui_.start();
// Since the settings need to be loaded before the store is created, it will never
@@ -1,7 +1,7 @@
const { app } = require('./app.js');
const Note = require('@joplin/lib/models/Note').default;
const Folder = require('@joplin/lib/models/Folder').default;
const Tag = require('@joplin/lib/models/Tag').default;
const Note = require('lib/models/Note.js');
const Folder = require('lib/models/Folder.js');
const Tag = require('lib/models/Tag.js');
const { cliUtils } = require('./cli-utils.js');
const yargParser = require('yargs-parser');
const fs = require('fs-extra');
@@ -1,5 +1,5 @@
const { _ } = require('@joplin/lib/locale');
const { reg } = require('@joplin/lib/registry.js');
const { _ } = require('lib/locale');
const { reg } = require('lib/registry.js');
class BaseCommand {
constructor() {
@@ -1,7 +1,7 @@
const fs = require('fs-extra');
const { fileExtension, dirname } = require('@joplin/lib/path-utils');
const { fileExtension, dirname } = require('lib/path-utils');
const wrap_ = require('word-wrap');
const { languageCode } = require('@joplin/lib/locale');
const { languageCode } = require('lib/locale');
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
@@ -1,17 +1,21 @@
'use strict';
const fs = require('fs-extra');
const Logger = require('@joplin/lib/Logger').default;
const { dirname } = require('@joplin/lib/path-utils');
const { DatabaseDriverNode } = require('@joplin/lib/database-driver-node.js');
const JoplinDatabase = require('@joplin/lib/JoplinDatabase').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const Note = require('@joplin/lib/models/Note').default;
const Setting = require('@joplin/lib/models/Setting').default;
const Logger = require('lib/Logger').default;
const { dirname } = require('lib/path-utils');
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
const { JoplinDatabase } = require('lib/joplin-database.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting').default;
const { sprintf } = require('sprintf-js');
const exec = require('child_process').exec;
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled promise rejection', p, 'reason:', reason);
});
const baseDir = `${dirname(__dirname)}/tests/cli-integration`;
const joplinAppPath = `${__dirname}/main.js`;
@@ -1,8 +1,8 @@
const yargParser = require('yargs-parser');
const { _ } = require('@joplin/lib/locale');
const time = require('@joplin/lib/time').default;
const { _ } = require('lib/locale');
const { time } = require('lib/time-utils.js');
const stringPadding = require('string-padding');
const Logger = require('@joplin/lib/Logger').default;
const Logger = require('lib/Logger').default;
const cliUtils = {};
@@ -1,15 +1,14 @@
const { BaseCommand } = require('./base-command.js');
const BaseItem = require('@joplin/lib/models/BaseItem').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const { toTitleCase } = require('@joplin/lib/string-utils.js');
const { reg } = require('@joplin/lib/registry.js');
const markdownUtils = require('@joplin/lib/markdownUtils').default;
const Database = require('@joplin/lib/database').default;
const shim = require('@joplin/lib/shim').default;
const BaseItem = require('lib/models/BaseItem');
const BaseModel = require('lib/BaseModel');
const { toTitleCase } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const markdownUtils = require('lib/markdownUtils').default;
const { Database } = require('lib/database.js');
class Command extends BaseCommand {
usage() {
return 'apidoc <file>';
return 'apidoc';
}
description() {
@@ -36,7 +35,7 @@ class Command extends BaseCommand {
return markdownUtils.createMarkdownTable(headers, tableFields);
}
async action(args) {
async action() {
const models = [
{
type: BaseModel.TYPE_NOTE,
@@ -113,50 +112,6 @@ class Command extends BaseCommand {
lines.push('');
lines.push('\tcurl http://localhost:41184/tags?fields=id');
lines.push('');
lines.push('By default API results will contain the following fields: **id**, **parent_id**, **title**');
lines.push('# Pagination');
lines.push('');
lines.push('All API calls that return multiple results will be paginated and will return the following structure:');
lines.push('');
lines.push('Key | Always present? | Description');
lines.push('--- | --- | ---');
lines.push('`items` | Yes | The array of items you have requested.');
lines.push('`has_more` | Yes | If `true`, there are more items after this page. If `false`, it means you have reached the end of the data set.');
lines.push('');
lines.push('You can specify how the results should be sorted using the `order_by` and `order_dir` query parameters, and which page to retrieve using the `page` parameter (starts at and defaults to 1). You can specify the number of items to be returned using the `limit` parameter (the maximum being 100 items).');
lines.push('');
lines.push('The following call for example will initiate a request to fetch all the notes, 10 at a time, and sorted by "updated_time" ascending:');
lines.push('');
lines.push('\tcurl http://localhost:41184/notes?order_by=updated_time&order_dir=ASC&limit=10');
lines.push('');
lines.push('This will return a result like this');
lines.push('');
lines.push('\t{ "items": [ /* 10 notes */ ], "has_more": true }');
lines.push('');
lines.push('Then you will resume fetching the results using this query:');
lines.push('');
lines.push('\tcurl http://localhost:41184/notes?order_by=updated_time&order_dir=ASC&limit=10&page=2');
lines.push('');
lines.push('Eventually you will get some results that do not contain an "has_more" paramater, at which point you will have retrieved all the results');
lines.push('');
lines.push('As an example the pseudo-code below could be used to fetch all the notes:');
lines.push('');
lines.push('```javascript');
lines.push(`
async function fetchJson(url) {
return (await fetch(url)).json();
}
async function fetchAllNotes() {
let pageNum = 1;
do {
const response = await fetchJson((http://localhost:41184/notes?page=' + pageNum++);
console.info('Printing notes:', response.items);
} while (response.has_more)
}`);
lines.push('```');
lines.push('');
lines.push('# Error handling');
lines.push('');
@@ -293,11 +248,6 @@ async function fetchAllNotes() {
lines.push('');
lines.push('Gets the actual file associated with this resource.');
lines.push('');
lines.push('## GET /resources/:id/notes');
lines.push('');
lines.push('Gets the notes (IDs) associated with a resource.');
lines.push('');
}
lines.push(`## POST /${tableName}`);
@@ -312,20 +262,6 @@ async function fetchAllNotes() {
lines.push('');
lines.push('The "data" field is required, while the "props" one is not. If not specified, default values will be used.');
lines.push('');
lines.push('**From a plugin** the syntax to create a resource is also a bit special:');
lines.push('');
lines.push('```javascript');
lines.push('\tawait joplin.data.post(');
lines.push('\t\t["resources"],');
lines.push('\t\tnull,');
lines.push('\t\t{ title: "test.jpg" }, // Resource metadata');
lines.push('\t\t[');
lines.push('\t\t\t{');
lines.push('\t\t\t\tpath: "/path/to/test.jpg", // Actual file');
lines.push('\t\t\t},');
lines.push('\t\t]');
lines.push('\t);');
lines.push('```');
}
if (model.type === BaseModel.TYPE_TAG) {
@@ -378,9 +314,7 @@ async function fetchAllNotes() {
}
}
const outFilePath = args['file'];
await shim.fsDriver().writeFile(outFilePath, lines.join('\n'), 'utf8');
this.stdout(lines.join('\n'));
}
}
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const shim = require('@joplin/lib/shim').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const shim = require('lib/shim').default;
class Command extends BaseCommand {
usage() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const BaseItem = require('@joplin/lib/models/BaseItem').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const BaseItem = require('lib/models/BaseItem.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { _, setLocale } = require('@joplin/lib/locale');
const { _, setLocale } = require('lib/locale');
const { app } = require('./app.js');
const fs = require('fs-extra');
const Setting = require('@joplin/lib/models/Setting').default;
const Setting = require('lib/models/Setting').default;
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Note = require('@joplin/lib/models/Note').default;
const time = require('@joplin/lib/time').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const Folder = require('@joplin/lib/models/Folder').default;
const Note = require('@joplin/lib/models/Note').default;
const Tag = require('@joplin/lib/models/Tag').default;
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
class Command extends BaseCommand {
usage() {
@@ -1,11 +1,11 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('@joplin/lib/locale');
const EncryptionService = require('@joplin/lib/services/EncryptionService').default;
const DecryptionWorker = require('@joplin/lib/services/DecryptionWorker').default;
const BaseItem = require('@joplin/lib/models/BaseItem').default;
const Setting = require('@joplin/lib/models/Setting').default;
const shim = require('@joplin/lib/shim').default;
const pathUtils = require('@joplin/lib/path-utils');
const { _ } = require('lib/locale');
const EncryptionService = require('lib/services/EncryptionService');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const BaseItem = require('lib/models/BaseItem');
const Setting = require('lib/models/Setting').default;
const shim = require('lib/shim').default;
const pathUtils = require('lib/path-utils');
const imageType = require('image-type');
const readChunk = require('read-chunk');
@@ -45,12 +45,10 @@ class Command extends BaseCommand {
const startDecryption = async () => {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
while (true) {
try {
const result = await DecryptionWorker.instance().start();
if (result.error) throw result.error;
const line = [];
line.push(_('Decrypted items: %d', result.decryptedItemCount));
if (result.skippedItemCount) line.push(_('Skipped items: %d (use --retry-failed-items to retry decrypting them)', result.skippedItemCount));
@@ -1,12 +1,12 @@
const fs = require('fs-extra');
const { BaseCommand } = require('./base-command.js');
const { splitCommandString } = require('@joplin/lib/string-utils.js');
const uuid = require('@joplin/lib/uuid').default;
const { splitCommandString } = require('lib/string-utils.js');
const uuid = require('lib/uuid').default;
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Note = require('@joplin/lib/models/Note').default;
const Setting = require('@joplin/lib/models/Setting').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const { _ } = require('lib/locale');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting').default;
const BaseModel = require('lib/BaseModel.js');
class Command extends BaseCommand {
usage() {
@@ -1,6 +1,6 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
class Command extends BaseCommand {
usage() {
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const Setting = require('@joplin/lib/models/Setting').default;
const ReportService = require('@joplin/lib/services/ReportService').default;
const Setting = require('lib/models/Setting').default;
const { ReportService } = require('lib/services/report.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const InteropService = require('@joplin/lib/services/interop/InteropService').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const InteropService = require('lib/services/interop/InteropService').default;
const BaseModel = require('lib/BaseModel.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { renderCommandHelp } = require('./help-utils.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const InteropService = require('@joplin/lib/services/interop/InteropService').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const InteropService = require('lib/services/interop/InteropService').default;
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
class Command extends BaseCommand {
usage() {
@@ -55,7 +55,7 @@ class Command extends BaseCommand {
};
importOptions.onError = error => {
const s = error.stack ? error.stack : error.toString();
const s = error.trace ? error.trace : error.toString();
this.stdout(s);
};
@@ -1,12 +1,12 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const Setting = require('@joplin/lib/models/Setting').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Setting = require('lib/models/Setting').default;
const Note = require('lib/models/Note.js');
const { sprintf } = require('sprintf-js');
const time = require('@joplin/lib/time').default;
const { time } = require('lib/time-utils.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
@@ -27,7 +27,7 @@ class Command extends BaseCommand {
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')],
['-r, --reverse', _('Reverses the sorting order.')],
['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-tnt` would display notes and to-dos.')],
['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')],
['-f, --format <format>', _('Either "text" or "json"')],
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
];
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Folder = require('@joplin/lib/models/Folder').default;
const { _ } = require('lib/locale');
const Folder = require('lib/models/Folder.js');
class Command extends BaseCommand {
usage() {
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Folder = require('@joplin/lib/models/Folder').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const { _ } = require('lib/locale');
const Folder = require('lib/models/Folder.js');
const BaseModel = require('lib/BaseModel.js');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Note = require('@joplin/lib/models/Note').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const { _ } = require('lib/locale');
const Note = require('lib/models/Note.js');
const BaseModel = require('lib/BaseModel.js');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('@joplin/lib/models/Folder').default;
const uuid = require('@joplin/lib/uuid').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const uuid = require('lib/uuid').default;
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('@joplin/lib/locale');
const Setting = require('@joplin/lib/models/Setting').default;
const Logger = require('@joplin/lib/Logger').default;
const shim = require('@joplin/lib/shim').default;
const { _ } = require('lib/locale');
const Setting = require('lib/models/Setting').default;
const Logger = require('lib/Logger').default;
const shim = require('lib/shim').default;
class Command extends BaseCommand {
@@ -17,7 +17,7 @@ class Command extends BaseCommand {
async action(args) {
const command = args.command;
const ClipperServer = require('@joplin/lib/ClipperServer');
const ClipperServer = require('lib/ClipperServer');
ClipperServer.instance().initialize();
const stdoutFn = (...s) => this.stdout(s.join(' '));
const clipperLogger = new Logger();
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Database = require('@joplin/lib/database').default;
const Note = require('@joplin/lib/models/Note').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const { Database } = require('lib/database.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const Setting = require('@joplin/lib/models/Setting').default;
const { _ } = require('@joplin/lib/locale');
const ReportService = require('@joplin/lib/services/ReportService').default;
const Setting = require('lib/models/Setting').default;
const { _ } = require('lib/locale');
const { ReportService } = require('lib/services/report.js');
class Command extends BaseCommand {
usage() {
@@ -1,17 +1,17 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const { OneDriveApiNodeUtils } = require('@joplin/lib/onedrive-api-node-utils.js');
const Setting = require('@joplin/lib/models/Setting').default;
const ResourceFetcher = require('@joplin/lib/services/ResourceFetcher').default;
const Synchronizer = require('@joplin/lib/Synchronizer').default;
const { reg } = require('@joplin/lib/registry.js');
const { _ } = require('lib/locale');
const { OneDriveApiNodeUtils } = require('lib/onedrive-api-node-utils.js');
const Setting = require('lib/models/Setting').default;
const ResourceFetcher = require('lib/services/ResourceFetcher');
const Synchronizer = require('lib/Synchronizer').default;
const { reg } = require('lib/registry.js');
const { cliUtils } = require('./cli-utils.js');
const md5 = require('md5');
const locker = require('proper-lockfile');
const fs = require('fs-extra');
const SyncTargetRegistry = require('@joplin/lib/SyncTargetRegistry');
const MigrationHandler = require('@joplin/lib/services/synchronizer/MigrationHandler').default;
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const MigrationHandler = require('lib/services/synchronizer/MigrationHandler').default;
class Command extends BaseCommand {
constructor() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const Tag = require('@joplin/lib/models/Tag').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const time = require('@joplin/lib/time').default;
const { _ } = require('lib/locale');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const Note = require('@joplin/lib/models/Note').default;
const time = require('@joplin/lib/time').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
@@ -1,5 +1,5 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
const CommandDone = require('./command-done.js');
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('@joplin/lib/locale');
const BaseModel = require('@joplin/lib/BaseModel').default;
const { _ } = require('lib/locale');
const BaseModel = require('lib/BaseModel.js');
class Command extends BaseCommand {
usage() {
@@ -1,6 +1,6 @@
const { BaseCommand } = require('./base-command.js');
const Setting = require('@joplin/lib/models/Setting').default;
const { _ } = require('@joplin/lib/locale');
const Setting = require('lib/models/Setting').default;
const { _ } = require('lib/locale');
class Command extends BaseCommand {
usage() {
@@ -1,10 +1,10 @@
'use strict';
const time = require('@joplin/lib/time').default;
const Logger = require('@joplin/lib/Logger').default;
const Resource = require('@joplin/lib/models/Resource').default;
const { dirname } = require('@joplin/lib/path-utils');
const FsDriverNode = require('@joplin/lib/fs-driver-node').default;
const { time } = require('lib/time-utils.js');
const Logger = require('lib/Logger').default;
const Resource = require('lib/models/Resource.js');
const { dirname } = require('lib/path-utils');
const FsDriverNode = require('lib/fs-driver-node').default;
const lodash = require('lodash');
const exec = require('child_process').exec;
const fs = require('fs-extra');
@@ -22,6 +22,10 @@ const logger = new Logger();
logger.addTarget('console');
logger.setLevel(Logger.LEVEL_DEBUG);
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled promise rejection', p, 'reason:', reason);
});
function createClient(id) {
return {
id: id,
File renamed without changes.
@@ -1,8 +1,8 @@
const Folder = require('@joplin/lib/models/Folder').default;
const Tag = require('@joplin/lib/models/Tag').default;
const BaseModel = require('@joplin/lib/BaseModel').default;
const Folder = require('lib/models/Folder.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const ListWidget = require('tkwidgets/ListWidget.js');
const _ = require('@joplin/lib/locale')._;
const _ = require('lib/locale')._;
class FolderListWidget extends ListWidget {
constructor() {
@@ -1,4 +1,4 @@
const Note = require('@joplin/lib/models/Note').default;
const Note = require('lib/models/Note.js');
const ListWidget = require('tkwidgets/ListWidget.js');
class NoteListWidget extends ListWidget {
@@ -1,4 +1,4 @@
const Note = require('@joplin/lib/models/Note').default;
const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
class NoteMetadataWidget extends TextWidget {
@@ -1,6 +1,6 @@
const Note = require('@joplin/lib/models/Note').default;
const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
const { _ } = require('@joplin/lib/locale');
const { _ } = require('lib/locale');
class NoteWidget extends TextWidget {
constructor() {
@@ -1,6 +1,6 @@
const { wrap } = require('@joplin/lib/string-utils.js');
const Setting = require('@joplin/lib/models/Setting').default;
const { _ } = require('@joplin/lib/locale');
const { wrap } = require('lib/string-utils.js');
const Setting = require('lib/models/Setting').default;
const { _ } = require('lib/locale');
const MAX_WIDTH = 78;
const INDENT = ' ';
+87
View File
@@ -0,0 +1,87 @@
#!/usr/bin/env node
// Use njstrace to find out what Node.js might be spending time on
// var njstrace = require('njstrace').inject();
// Make it possible to require("/lib/...") without specifying full path
require('app-module-path').addPath(__dirname);
const compareVersion = require('compare-version');
const nodeVersion = process && process.versions && process.versions.node ? process.versions.node : '0.0.0';
if (compareVersion(nodeVersion, '10.0.0') < 0) {
console.error(`Joplin requires Node 10+. Detected version ${nodeVersion}`);
process.exit(1);
}
const { app } = require('./app.js');
const Folder = require('lib/models/Folder.js');
const Resource = require('lib/models/Resource.js');
const BaseItem = require('lib/models/BaseItem.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
const NoteTag = require('lib/models/NoteTag.js');
const MasterKey = require('lib/models/MasterKey');
const Setting = require('lib/models/Setting').default;
const Revision = require('lib/models/Revision.js');
const Logger = require('lib/Logger').default;
const FsDriverNode = require('lib/fs-driver-node').default;
const { shimInit } = require('lib/shim-init-node.js');
const { _ } = require('lib/locale');
const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
const EncryptionService = require('lib/services/EncryptionService');
const envFromArgs = require('lib/envFromArgs');
const env = envFromArgs(process.argv);
const fsDriver = new FsDriverNode();
Logger.fsDriver_ = fsDriver;
Resource.fsDriver_ = fsDriver;
EncryptionService.fsDriver_ = fsDriver;
FileApiDriverLocal.fsDriver_ = fsDriver;
// That's not good, but it's to avoid circular dependency issues
// in the BaseItem class.
BaseItem.loadClass('Note', Note);
BaseItem.loadClass('Folder', Folder);
BaseItem.loadClass('Resource', Resource);
BaseItem.loadClass('Tag', Tag);
BaseItem.loadClass('NoteTag', NoteTag);
BaseItem.loadClass('MasterKey', MasterKey);
BaseItem.loadClass('Revision', Revision);
Setting.setConstant('appId', `net.cozic.joplin${env === 'dev' ? 'dev' : ''}-cli`);
Setting.setConstant('appType', 'cli');
shimInit();
const application = app();
if (process.platform === 'win32') {
const rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('SIGINT', function() {
process.emit('SIGINT');
});
}
process.stdout.on('error', function(err) {
// https://stackoverflow.com/questions/12329816/error-write-epipe-when-piping-node-output-to-head#15884508
if (err.code == 'EPIPE') {
process.exit(0);
}
});
application.start(process.argv).catch(error => {
if (error.code == 'flagError') {
console.error(error.message);
console.error(_('Type `joplin help` for usage information.'));
} else {
console.error(_('Fatal error:'));
console.error(error);
}
process.exit(1);
});
@@ -0,0 +1,78 @@
import * as vm from 'vm';
import Plugin from 'lib/services/plugins/Plugin';
import sandboxProxy from 'lib/services/plugins/sandboxProxy';
import BasePluginRunner from 'lib/services/plugins/BasePluginRunner';
import executeSandboxCall from 'lib/services/plugins/utils/executeSandboxCall';
import Global from 'lib/services/plugins/api/Global';
import mapEventHandlersToIds, { EventHandlers } from 'lib/services/plugins/utils/mapEventHandlersToIds';
function createConsoleWrapper(pluginId:string) {
const wrapper:any = {};
for (const n in console) {
if (!console.hasOwnProperty(n)) continue;
wrapper[n] = (...args:any[]) => {
const newArgs = args.slice();
newArgs.splice(0, 0, `Plugin "${pluginId}":`);
return (console as any)[n](...newArgs);
};
}
return wrapper;
}
// The CLI plugin runner is more complex than it needs to be because it more or less emulates
// how it would work in a multi-process architecture, as in the desktop app (and probably how
// it would work in the mobile app too). This is mainly to allow doing integration testing.
//
// For example, all plugin calls go through a proxy, however they could made directly since
// the plugin script is running within the same process as the main app.
export default class PluginRunner extends BasePluginRunner {
private eventHandlers_:EventHandlers = {};
constructor() {
super();
this.eventHandler = this.eventHandler.bind(this);
}
private async eventHandler(eventHandlerId:string, args:any[]) {
const cb = this.eventHandlers_[eventHandlerId];
return cb(...args);
}
private newSandboxProxy(pluginId:string, sandbox:Global) {
const target = async (path:string, args:any[]) => {
return executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler);
};
return {
joplin: sandboxProxy(target),
console: createConsoleWrapper(pluginId),
};
}
async run(plugin:Plugin, sandbox:Global):Promise<void> {
return new Promise((resolve:Function, reject:Function) => {
const onStarted = () => {
plugin.off('started', onStarted);
resolve();
};
plugin.on('started', onStarted);
const vmSandbox = vm.createContext(this.newSandboxProxy(plugin.id, sandbox));
try {
vm.runInContext(plugin.scriptText, vmSandbox);
} catch (error) {
reject(error);
// this.logger().error(`In plugin ${plugin.id}:`, error);
// return;
}
});
}
}
File renamed without changes.
File renamed without changes.
@@ -1,4 +1,3 @@
#!/bin/bash
#
set -e
npm run build && NODE_PATH="build/" node build/fuzzing.js
+84
View File
@@ -0,0 +1,84 @@
const gulp = require('gulp');
const fs = require('fs-extra');
const utils = require('../Tools/gulp/utils');
const tasks = {
compileExtensions: {
fn: require('../Tools/gulp/tasks/compileExtensions.js'),
},
copyLib: require('../Tools/gulp/tasks/copyLib'),
tsc: require('../Tools/gulp/tasks/tsc'),
updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'),
};
tasks.prepareBuild = {
fn: async () => {
const buildDir = `${__dirname}/build`;
await utils.copyDir(`${__dirname}/app`, buildDir, {
excluded: ['node_modules'],
});
await utils.copyDir(`${__dirname}/locales-build`, `${buildDir}/locales`);
await tasks.copyLib.fn();
await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`);
await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`);
await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`);
// Import all the patches inside the CliClient directory
// and build file. Needs to be in CliClient dir for when running
// in dev mode, and in build dir for production.
const localPatchDir = `${buildDir}/patches`;
await fs.remove(localPatchDir);
await fs.mkdirp(localPatchDir);
await utils.copyDir(`${__dirname}/../patches/shared`, `${localPatchDir}`, { delete: false });
await utils.copyDir(`${__dirname}/../patches/node`, `${localPatchDir}`, { delete: false });
await fs.remove(`${__dirname}/patches`);
await utils.copyDir(`${localPatchDir}`, `${__dirname}/patches`);
const packageRaw = await fs.readFile(`${buildDir}/package.json`);
const package = JSON.parse(packageRaw.toString());
package.scripts.postinstall = 'patch-package';
await fs.writeFile(`${buildDir}/package.json`, JSON.stringify(package, null, 2), 'utf8');
fs.chmodSync(`${buildDir}/main.js`, 0o755);
},
};
tasks.prepareTestBuild = {
fn: async () => {
const testBuildDir = `${__dirname}/tests-build`;
await utils.copyDir(`${__dirname}/tests`, testBuildDir, {
excluded: [
'lib/',
'locales/',
'node_modules/',
'*.ts',
'*.tsx',
],
});
const rootDir = utils.rootDir();
await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${testBuildDir}/lib`, {
excluded: [
`${rootDir}/ReactNativeClient/lib/joplin-renderer/node_modules`,
],
});
await utils.copyDir(`${rootDir}/ReactNativeClient/locales`, `${testBuildDir}/locales`);
await fs.mkdirp(`${testBuildDir}/data`);
},
};
utils.registerGulpTasks(gulp, tasks);
gulp.task('build', gulp.series([
'prepareBuild',
'compileExtensions',
'copyLib',
]));
gulp.task('buildTests', gulp.series([
'prepareTestBuild',
'compileExtensions',
'copyLib',
]));
+1
View File
@@ -0,0 +1 @@
{"OK":"موافق","Cancel":"إلغاء","Yes":"نعم","No":"لا","Close":"إغلاق","Current version is up-to-date.":"النسخة الحالية محدَّثة.","%s (pre-release)":"%s (ما قبل الإصدار)","An update is available, do you want to download it now?":"يتوفر تحديث ، هل تريد تنزيله الآن؟","Your version: %s":"النسخة لديك: %s","New version: %s":"النسخة الجديدة: %s","Full Release Notes":"ملاحظات الإصدار الكامل","Exporting to \"%s\" as \"%s\" format. Please wait...":"التصدير إلى \"%s\" بتنسيق \"%s\". فضلاً انتظر...","Goto Anything...":"اذهب إلى أي شيء...","Search in all the notes":"البحث في كل الملاحظات","ID":"المعرّف","Untitled":"بدون اسم","Delete":"حذف","Clear":"مسح","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"سيتم إنشاء دفتر الملاحظات \"%s\" و استيراد الملف \"%s\" إليه","Found: %d.":"تم العثور عليها: %d.","Created: %d.":"تم إنشاؤها: %d.","Updated: %d.":"تم تحديثها: %d.","Skipped: %d.":"تم تجاوزها: %d.","Resources: %d.":"الموارد: %d.","Tagged: %d.":"تم وسمها: %d.","The notes have been imported: %s":"جرى استيراد الملاحظات: %s","This will open a new screen. Save your current changes?":"هذا سيفتح شاشة جديدة. حفظ التغييرات الحالية الخاصة بك؟","Check synchronisation configuration":"فحص ضبط المزامنة","Unknown":"مجهول","Checking...":"تدقيق...","Error":"خطأ","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"تطبيق Joplin Nextcloud إما غير مثبت أو تم تكوينه بشكل خاطئ. يرجى الاطلاع على رسالة الخطأ الكاملة أدناه:","Show Log":"إظهار السجل","Joplin Nextcloud App status:":"حالة تطبيق Joplin Nextcloud:","Check Status":"تحقق من الحالة","Help":"مساعدة","Show Advanced Settings":"أظهر الاعدادات المتقدمة","Browse...":"استعراض...","Edit":"تحرير","Back":"عودة","Apply":"تطبيق","Please select where the sync status should be exported to":"فضلاً اختر أين سيتم تصدير حالة المزامنة","Retry":"إعادة المحاولة","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"يرجى اتباع الخطوات التالية للسماح لـ Joplin بالمزامنة مع Dropbox:","Step 1: Open this URL in your browser to authorise the application:":"الخطوة 1: إفتح عنوان URL هذا في المستعرض للتصريح للتطبيق:","Step 2: Enter the code provided by Dropbox:":"الخطوة 2: أدخل الرمز المزوّد من Dropbox:","Submit":"إرسال","Synchronising...":"مزامنة...","Generating link...":"جارٍ إنشاء الرابط...","Link has been copied to clipboard!":"تم نسخ الرابط إلى الحافظة!","Note: When a note is shared, it will no longer be encrypted on the server.":"ملاحظة: عند مشاركة ملاحظة ، لن يتم تشفيرها على الخادم.","Share Notes":"مشاركة ملاحظات","Copy Shareable Link":"نسخ رابط قابل للمشاركة","Attach file":"إرفاق ملف","Insert Date Time":"إدراج التاريخ والوقت","strong text":"نص مشدَّد","Insert Hyperlink":"إدراج ارتباط تشعبي","List item":"عنصر قائمة","Cut":"قص","Copy":"نسخ","Paste":"لصق","Layout":"تخطيط","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"ليس لهذه الملاحظة أي محتوى. اضغط على \"%s\" لتبديل المحرّر وتحرير الملاحظة.","to-do":"قائمة مهام","note":"ملاحظة","Creating new %s...":"إنشاء %s جديد ...","In: %s":"في: %s","Open...":"فتح...","Save as...":"حفظ باسم...","Copy path to clipboard":"نسخ المسار إلى الحافظة","Copy Link Address":"نسخ عنوان الرابط","Unsupported link or message: %s":"رابط أو رسالة غير مدعومان: %s","Note title":"عنوان الملاحظة","Focus":"تركيز","Select all":"اختيار الكل","Bold":"غامق","Italic":"مائل","Hyperlink":"ارتباط تشعبي","Code":"رمز","Numbered List":"قائمة مرقّمة","Bulleted List":"قائمة تعداد نقطي","Checkbox":"خانة اختيار","Heading":"ترويسة","Horizontal Rule":"خط تسطير أفقي","Note body":"متن الملاحظة","Search in current note":"البحث في الملاحظة الحاليّة","Authentication was not completed (did not receive an authentication token).":"لم تكتمل المصادقة (لم أستلم الرمز المميز للمصادقة).","Some itemsLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"Добре","Cancel":"Отмени","Yes":"Да","No":"Не","Current version is up-to-date.":"Настоящата версия е най-новата.","%s (pre-release)":"%s (експериментална)","An update is available, do you want to download it now?":"Има обновление, искате ли да го свалите сега?","Your version: %s":"Вашата версия: %s","New version: %s":"Нова версия: %s","Exporting to \"%s\" as \"%s\" format. Please wait...":"Експортирам към \"%s\" във формат \"%s\". Моля изчакайте...","Goto Anything...":"Отиди на нещо...","Search in all the notes":"Търсене във всички бележки","ID":"Идентификатор","Untitled":"Без заглавие","Delete":"Изтрий","Clear":"Изчисти","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Нова тетрадка \"%s\" ще бъде създадена и файл \"%s\" ще бъде импортиран в нея","Found: %d.":"Намерени: %d.","Created: %d.":"Създадени: %d.","Updated: %d.":"Обновени: %d.","Skipped: %d.":"Пропуснати: %d.","Resources: %d.":"Ресурси: %d.","Tagged: %d.":"Тагнати: %d.","The notes have been imported: %s":"Бележките бяха импортирани: %s","Check synchronisation configuration":"Провери настройките за синхронизация","Browse...":"Търсене...","Edit":"Редактиране","Back":"Назад","Apply":"Приложи","Please select where the sync status should be exported to":"Моля изберете къде да бъде експортиран статуса на синхронизацията","Retry":"Нов опит","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"За да позволите на Joplin да синхронизира с Dropbox, моля изпълнете следните стъпки:","Step 1: Open this URL in your browser to authorise the application:":"1ва стъпка: Отворете този адрес в браузър и оторизирайте приложението:","Step 2: Enter the code provided by Dropbox:":"2ра стъпка: Въведете кода предоставен от Dropbox:","Submit":"Предай","Attach file":"Прикачи файл","Insert Date Time":"Постави датата и часа","strong text":"силно наблегнат текст","Insert Hyperlink":"Вкарай линк","List item":"Елемент на списък","Cut":"Изрежи","Copy":"Копирай","Paste":"Постави","Layout":"Разположеня","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Тази бележка няма съдържание. Натиснете \"%s\" за да покажете редакторя и да редактирате бележката.","to-do":"задача","note":"бележка","Creating new %s...":"Създаване на нова %s...","In: %s":"В: %s","Open...":"Отвори...","Save as...":"Запазаи като...","Copy path to clipboard":"Копирай пътя в клипборда","Copy Link Address":"Копирай адреса на линка","Unsupported link or message: %s":"Неподдържан линк или съобщение: %s","Note title":"Заглавие на бележката","Focus":"Фокусирай","Select all":"Избери всичко","Bold":"Удебелен","Italic":"Курсив","Hyperlink":"Линк","Code":"Код","Numbered List":"Номериран списък","Bulleted List":"Неномериран списък","Checkbox":"Поле за отметка","Heading":"Заглавие","Horizontal Rule":"Хоризонтална черта","Note body":"Съдържание на бележката","Search in current note":"Търсене в настоящата бележка","Authentication was not completed (did not receive an authentication token).":"Оторизирането не беше завършено (не получих оторизационен жетон).","Some items cannot be synchronised.":"Някои обекти не можаха да бъдат синхронизирани.","View them now":"Покажи ги сега","One or more master keys need a password.":"Поне един главен ключ се нуждае от парола.","Set the password":"Задаване на паролата","Search...":"Търсене...","Tags":"Тагове","Add or remove tags:":"Добавяне и махане на тагове:","Note properties":"Атрибути на бележката","Toggle sidebar":"Страничен панел","Rename":"Преименувай","Rename tag:":"Преименуване на таг:","New notebook":"Нова тетрадка","Notebook title:":"ЗаглавиLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"Uredu","Cancel":"Otkaži","Yes":"Da","No":"Ne","Close":"Zatvori","Current version is up-to-date.":"Trenutna je verzija ažurirana.","%s (pre-release)":"%s (verzija pred objavljivanje)","An update is available, do you want to download it now?":"Nova je verzija dostupna. Želite li je preuzeti?","Your version: %s":"Vaša verzija: %s","New version: %s":"Nova verzija: %s","Goto Anything...":"Pronađite bilo šta...","Search in all the notes":"Pretraži sve bilješke","Size":"Veličina","ID":"ID","Untitled":"Bez naziva","Delete":"Izbriši","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Ovo je napredna alatka za prikazivanje priloga koji se nalaze u Vašim bilješkama. Molimo budite oprezni prilikom brisanja priloga, jer se oni više neće moći rekonstruisati.","No resources!":"Nema resursa!","Warning: not all resources shown for performance reasons (limit: %s).":"Upozorenje: zbog performansi nisu prikazani svi resursi (granica: %s).","Clear":"Počisti","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Kreirat će se nova bilježnica \"%s\" i u nju će biti unesena datoteka \"%s\"","Found: %d.":"Pronađeno: %d.","Created: %d.":"Kreirano: %d.","Updated: %d.":"Ažurirano: %d.","Skipped: %d.":"Preskočeno: %d.","Resources: %d.":"Resursi: %d.","Tagged: %d.":"Označeno: %d.","The notes have been imported: %s":"Bilješke su unesene: %s","This will open a new screen. Save your current changes?":"Otvorit će se novi prikaz. Želite li memorisati trenutne izmjene?","Check synchronisation configuration":"Provjeri postavke za sinhronizaciju","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud aplikacija nije instalirana ili je pogrešno konfigurisana. Molimo pogledajte puni izvještaj o greški kako slijedi:","Joplin Nextcloud App status:":"Status Joplin Nextcloud aplikacije:","Browse...":"Pregledaj...","Edit":"Uredi","Back":"Nazad","Apply":"Primijeni","Please select where the sync status should be exported to":"Navedite gdje će biti pohranjen status sinhronizacije","Retry":"Ponovi","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Slijedite ove korake da dopustite Joplinu sinhronizovanje sa Dropboxom:","Step 1: Open this URL in your browser to authorise the application:":"Korak 1: otvorite ovu adresu u Vašem internet pregledniku i ovjerite aplikaciju:","Step 2: Enter the code provided by Dropbox:":"Korak 2: unesite kōd koji Vam je poslao Dropbox:","Submit":"Pošalji","Note: When a note is shared, it will no longer be encrypted on the server.":"Napomena: bilješka koja se podijeli s drugima više neće biti šifrirana na serveru.","Attach file":"Priloži datoteku","Code Block":"Kōd (izdvojen)","Inline Code":"Kōd (unutar teksta)","Insert Date Time":"Unesi datum i vrijeme","Drop notes or files here":"Ispustite bilješke ili datoteke ovdje","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Pričekajte dok svi prilozi ne budu preuzeti i dešifrovani. Također možete otvoriti %s da uredite bilješku.","strong text":"podebljani tekst","Insert Hyperlink":"Unesi poveznicu","List item":"Stavka nabrajanja","Cut":"Izreži","Copy":"Kopiraj","Paste":"Zalijepi","Layout":"Prikaz","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Bilješka je prazna. Pritisnite na \"%s\" da otvorite program za rad s tekstom i uredite bilješku.","to-do":"zadatak","note":"bilješka","Creating new %s...":"Kreiram: %s...","In: %s":"U: %s","Open...":"Otvori...","Save as...":"Pohrani kao...","Reveal file in folder":"Pokaži datoteku u direktoriju","Copy path to clipboard":"Kopiraj putanju u spremnik","Copy Link Address":"Kopiraj adresu veze","There was an error downloading this attachment:":"Došlo je do greške prilikom preuzimanja priloga:","Unsupported link or message: %s":"Nepodržana veza ili poruka: %s","Focus":"Fokus","Select all":"Označi sve","Bold":"Masna slova","Italic":"Kurziv","Hyperlink":"Poveznica","Code":"Kōd","Numbered List":"Numerisano nabrajanje","Bulleted List":"Nabrajanje","Checkbox":"Polje za kvačicu","Heading":"Naslov","Horizontal Rule":"Vodoravna linija","Search in current note":"Potraži u trenutnoj bilješci","Authentication was not completed (did not receive an authentication token).":"Ovjera nije završena (nije primljena potvrda /token/).","Some items cannot be synchronised.":"Neke stavke nije moguće sinhronizovati.","View them now":"Pregledajte ih sada","One or more master keys need a password.":"Jedan ili više glavnih ključeva zahtijevaju lozinku.","Set the password":"Zadajte lozinku","Search...":"Pretraživanje...","Tags":"Oznake","Add or remove tags:":"Dodajte ili uklonite oznake:","Note properties":"Svojstva bilješke","Toggle sidebar":"Bočni meni","Rename":"PreimLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"D'acord","Cancel":"Cancel·la","Yes":"Sí","No":"No","Close":"Tanca","Current version is up-to-date.":"La versió actual està actualitzada.","%s (pre-release)":"%s (pre-llençament)","An update is available, do you want to download it now?":"Hi ha disponible una actualització. Voleu descarregar-la ara?","Your version: %s":"La vostra versió: %s","New version: %s":"Nova versió: %s","Full Release Notes":"Notes completes de la versió","Exporting to \"%s\" as \"%s\" format. Please wait...":"S'està exportant a «%s» com a format «%s». Espereu...","Could not export notes: %s":"No s'han pogut exportar les notes: %s","Goto Anything...":"Anar a qualsevol cosa...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Escriviu un títol de nota o part del seu contingut per saltar a la nota. O escriviu # seguit d'un nom d'etiqueta, o @ seguit d'un nom de bloc de notes.","Search in all the notes":"Cerca a totes les notes","Title":"Títol","Size":"Mida","ID":"ID","Action":"Acció","Untitled":"Sense títol","Delete":"Suprimeix","Delete attachment \"%s\"?":"Voleu suprimir l'adjunt \"%s\"?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Aquesta és una eina avançada per mostrar els adjunts que estan enllaçats a les vostres notes. Tingueu precaució en suprimir-ne un, ja que després no es poden restaurar.","Please wait...":"Espereu...","No resources!":"No hi ha recursos!","Warning: not all resources shown for performance reasons (limit: %s).":"Avís: no es mostren tots els recursos per motius de rendiment (límit:% s).","Clear":"Neteja","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Es crearà un bloc de notes «%s» i s'hi importarà el fitxer «%s»","Found: %d.":"Trobades: %d.","Created: %d.":"Creades: %d.","Updated: %d.":"Actualitzades: %d.","Skipped: %d.":"Omeses: %d.","Resources: %d.":"Recursos: %d.","Tagged: %d.":"Etiquetats: %d.","The notes have been imported: %s":"Notes s'han importat: %s","This will open a new screen. Save your current changes?":"Això obrirà una nova pantalla. Voleu desar els canvis actuals?","Check synchronisation configuration":"Comprova la configuració de la sincronització","Unknown":"Desconegut","Checking...":"Verificant...","Error":"Error","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"L'aplicació Joplin Nextcloud no està instal·lada, o està mal configurada. Llegiu el missatge d'error complet a continuació:","Show Log":"Mostra el registre","Joplin Nextcloud App status:":"Estat de l'aplicació Joplin Nextcloud:","Check Status":"Verifica l'estat","Help":"Ajuda","Show Advanced Settings":"Mostra opcions avançades","Browse...":"Navega...","Edit":"Edita","Back":"Enrere","Apply":"Aplica","Please select where the sync status should be exported to":"Seleccioneu on s'hauria d'exportar l'estat de la sincronització","Retry All":"Torna a provar-los tots","Retry":"Torna a provar","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Per a permetre que el Joplin sincronitzi amb el Dropbox, seguiu les passes següents:","Step 1: Open this URL in your browser to authorise the application:":"Pas 1: Obriu aquest URL al navegador per autoritzar l'aplicació:","Step 2: Enter the code provided by Dropbox:":"Pas 2: Introduïu el codi proporcionat per Dropbox:","Submit":"Tramet","Synchronising...":"Sincronitzant...","Generating link...":"Generant enllaç...","Link has been copied to clipboard!":"L'enllaç s'ha copiat al porta-retalls!","Note: When a note is shared, it will no longer be encrypted on the server.":"Nota: quan es comparteix una nota, deixa d'estar xifrada al servidor.","Share Notes":"Comparteix notes","Copy Shareable Link":"Copia l'enllaç compartible","Attach file":"Adjunta un fitxer","Code Block":"Bloc de codi","Inline Code":"Codi en línia","Insert Date Time":"Insereix la data i hora","Drop notes or files here":"Arrossega les notes o fitxers aquí","Code View":"Vista de codi","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Espereu que tots els adjunts hagin estat descarregats i desxifrats. També podeu canviar a %s per editar la nota.","Checkbox list":"Llista de caselles de verificació","strong text":"text destacat","emphasised text":"text ressaltat","Insert Hyperlink":"Introdueix un enllaç","List item":"Element de llista","Cut":"Retalla","Copy":"Copia","Paste":"Enganxa","Layout":"Disposició","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Aquesta nota no té contingut. Feu clic a «%s» per a anar a l'editor i modificar-la.","to-do":"tasques pendents","note":"nota","Creating new %s...":"S'està creant una %s...","In: %s":"A: %s","Open...":"Obre...","Save as...":Line truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Zrušit","Yes":"Ano","No":"Ne","Close":"Zavřít","Current version is up-to-date.":"Současná verze je aktuální.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Je k dispozici update, chcete jej stáhnout?","Your version: %s":"Vaše verze: %s","New version: %s":"Nová verze: %s","Full Release Notes":"Úplné poznámky k verzi","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportuji do \"%s\" jako formát \"%s\". Chvíli strpení...","Could not export notes: %s":"Nelze exportovat poznámky: %s","Goto Anything...":"Přejít kamkoliv...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Zadejte název poznámky (případně část jejího obsahu), na kterou chcete přeskočit. Nebo zadejte # následovaný názvem značky/tagu nebo @ následovaným názvem poznámkového bloku.","Search in all the notes":"Hledat ve všech poznámkách","Title":"Název","Size":"Velikost","ID":"ID","Action":"Akce","Untitled":"Bez názvu","Delete":"Odstranit","Delete attachment \"%s\"?":"Odstranit přílohu \"%s\"?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Toto je pokročilý nástroj pro zobrazení příloh, které jsou připojeny k vašim poznámkám. Při odstraňování přílohy buďte opatrní, protože odstraněnou přílohu nelze obnovit.","Please wait...":"Počkejte prosím...","No resources!":"Žádné zdroje!","Warning: not all resources shown for performance reasons (limit: %s).":"Upozornění: nejsou zobrazeny všechny prostředky z důvodů výkonu (limit: %s).","Clear":"Vyčistit","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Bude vytvořen zápisník \"%s\" a soubor \"%s\" do něj bude importován","Found: %d.":"Nalezeno: %d.","Created: %d.":"Vytvořeno: %d.","Updated: %d.":"Upraveno: %d.","Skipped: %d.":"Přeskočeno: %d.","Resources: %d.":"Zdroje: %d.","Tagged: %d.":"Otagováno: %d.","The notes have been imported: %s":"Poznámky importovány: %s","This will open a new screen. Save your current changes?":"Toto otevře nové okno. Chcete uložit současné změny?","Check synchronisation configuration":"Zkontrolujte nastavení synchronizace","Unknown":"Neznámý/á","Checking...":"Kontroluji...","Error":"Chyba","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud aplikace není nainstalována nebo je špatně nakonfigurována. Prosím zkontrolujte celou chybovou zprávu:","Show Log":"Zobrazit log","Joplin Nextcloud App status:":"Stav aplikace Joplin Nextcloud:","Check Status":"Zkontrolovat stav","Help":"Nápověda","Show Advanced Settings":"Ukázat pokročilá nastavení","Browse...":"Procházet...","Edit":"Upravit","Back":"Zpět","Apply":"Použít","Please select where the sync status should be exported to":"Prosím vyberte, kam má být stav synchronizace exportován","Retry All":"Opakovat vše","Retry":"Znovu","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Chcete-li povolit synchronizaci služby Joplin se službou Dropbox, postupujte podle následujících kroků:","Step 1: Open this URL in your browser to authorise the application:":"Krok 1: Chcete-li povolit aplikaci, otevřete tuto adresu URL ve svém prohlížeči:","Step 2: Enter the code provided by Dropbox:":"Krok 2: Zadejte kód poskytnutý službou Dropbox:","Submit":"Odeslat","Synchronising...":"Synchronizuji...","Generating link...":"Vytvářím odkaz...","Link has been copied to clipboard!":"Odkaz byl zkopírován do schránky!","Note: When a note is shared, it will no longer be encrypted on the server.":"Poznámka: pokud je poznámka sdílena, už nebude na serveru šifrována.","Share Notes":"Sdílet poznámky","Copy Shareable Link":"Kopírovat odkaz ke sdílení","Attach file":"Přiložit soubor","Code Block":"Blok kódu","Inline Code":"Vložený kód","Insert Date Time":"Vložit datum a čas","Drop notes or files here":"Sem přetáhněte poznámky nebo soubory","Code View":"Zobrazit kód","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Počkejte prosím na stažení a dešifrování všech příloh. Můžete také přepnout na %s a poznámku upravit.","Checkbox list":"Zaškrtávací pole","strong text":"tučný text","emphasised text":"zvýrazněný text","Insert Hyperlink":"Vložit odkaz","List item":"Seznam položek","Cut":"Vyjmout","Copy":"Kopírovat","Paste":"Vložit","Layout":"Rozvržení","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Tato poznámka je prázdný. Klikněte na \"%s\" pro otevření editoru.","to-do":"úkol","note":"poznámka","Creating new %s...":"Vytvářím %s...","The following attachments are being waLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Fortryd","Yes":"Ja","No":"Nej","Current version is up-to-date.":"Aktuel version er nyeste.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Opdatering er til rådighed, vil du hente den nu?","Your version: %s":"Din version: %s","New version: %s":"Ny version: %s","Full Release Notes":"Fulde udgivelses noter","Exporting to \"%s\" as \"%s\" format. Please wait...":"Eksporterer til \"%s\" som \"%s\"-format. Vent venligst...","Search in all the notes":"Søg i alle noter","ID":"ID","Untitled":"Samlet","Delete":"Slet","Clear":"Ryd/slet","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Ny notesbog \"%s\" bliver oprettet og filen \"%s\" importeres til den","Found: %d.":"Fundet: %d.","Created: %d.":"Oprettet: %d.","Updated: %d.":"Opdateret %d.","Skipped: %d.":"Droppet %d.","Resources: %d.":"Ressourcer: %d.","Tagged: %d.":"Markeret: %d.","The notes have been imported: %s":"Noterne er importeret: %s","This will open a new screen. Save your current changes?":"Dette åbner i et nyt vindue. Vil du gemme dine ændringer?","Check synchronisation configuration":"Check synkroniserings Indstillinger","Browse...":"Gennemse...","Edit":"Ret","Back":"Tilbage","Apply":"Udfør","Please select where the sync status should be exported to":"Vælg hvor sync status skal eksporteres til","Retry":"Prøv igen","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"For at Joplin kan synkronisere med Dropbox, skal man igennem nedenstående trin:","Step 1: Open this URL in your browser to authorise the application:":"Trin 1: Åben denne URL i din browser for at autorisere applikationen:","Step 2: Enter the code provided by Dropbox:":"Trin 2: Indtast koden, som er oplyst af Dropbox:","Submit":"Gem","Attach file":"Vedhæft fil","Insert Date Time":"Indsæt dato og tid","Insert Hyperlink":"Indsæt hyperlink","List item":"Listepunkt","Cut":"Klip","Copy":"Kopier","Paste":"Indsæt","Layout":"Layout","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Denne note er tom. Klik på \"%s\" for at starte editor og rette noten.","to-do":"opgave","note":"note","Creating new %s...":"Opretter ny %s...","In: %s":"I: %s","Open...":"Åben...","Save as...":"Gem som...","Copy path to clipboard":"Kopier sti til udklipsholderen","Copy Link Address":"Kopier link","Unsupported link or message: %s":"Ugyldigt- eller ulovligt link eller besked: %s","Focus":"Fokuser","Select all":"Vælg alt","Bold":"Fremhævet","Italic":"Kursiv","Hyperlink":"Hyperlink","Code":"Kode","Numbered List":"Nummeret liste","Bulleted List":"Punktliste","Checkbox":"Afkrydsningsfelt","Heading":"Overskrift","Horizontal Rule":"Vandret linje","Search in current note":"Søg i denne note","Authentication was not completed (did not receive an authentication token).":"Godkendelse blev ikke fuldført (modtog ikke godkendelses token).","Some items cannot be synchronised.":"Nogle emner kan ikke synkroniseres.","View them now":"Vis dem nu","Some items cannot be decrypted.":"Nogle emner kan ikke krypteres.","One or more master keys need a password.":"En eller flere hovednøgler mangler et kodeord.","Set the password":"Indstil kodeord","Search...":"Søg...","Tags":"Mærker","Add or remove tags:":"Tilføj eller slet mærker:","Note properties":"Note egenskaber","Toggle sidebar":"Slå sidebar til eller fra","Rename":"Omdøb","Rename tag:":"Omdøb mærke:","New notebook":"Ny notesbog","Notebook title:":"Notesbogs titel:","Rename notebook:":"Omdøb notesbog:","Set alarm":"Indstil alarm","Set alarm:":"Indstil alarm:","New to-do":"Ny opgave","PDF File":"PDF fil","Toggle editor layout":"Skift editor layout","Print":"Udskriv","New note":"Ny note","Template file:":"Skabelonfil:","Save":"Gem","Status":"Status","Encryption is:":"Kryptering er:","Enabled":"Aktiveret","Disabled":"Deaktiveret","Created":"Oprettet","Updated":"Opdateret","Location":"Placering","URL":"URL","Note History":"Notehistore","Markup":"Markup","Previous versions of this note":"Tidligere udgaver af denne note","Remove":"Fjern","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Slet notesbogen \"%s\"?\n\nAlle noter og undernotesbøger i notesbogen bliver også slettet.","Remove tag \"%s\" from all notes?":"Slet markeringen \"%s\" fra alle noter?","Remove this search from the sidebar?":"Slet denne søgning fra sidebjælke?","Export":"Eksporter","All notes":"Alle noter","Synchronise":"Synkroniser","Notebooks":"Notesbøger","Decrypting items: %d/%d":"Dekrypterede emner: %d/%d","Fetching resources: %d/%d":"Henter ressourcer: %d/%d","Token has been copied to the clipboard!":"Din token er blevet kopieret til udklipsholderen!","The web clipper service is enabled and set to auto-start.":"Web-clipper tjenesten er slået til og sat til at starte automatisk.","Status: Started on port %d":"Status: Startet på port %d","Status: %s":"Tilstand: %s","Disable Web ClLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Abbrechen","Yes":"Ja","No":"Nein","Close":"Schließen","Current version is up-to-date.":"Die aktuelle Version ist auf dem neuesten Stand.","%s (pre-release)":"%s (Vorabversion)","An update is available, do you want to download it now?":"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?","Your version: %s":"Deine Version: %s","New version: %s":"Neue Version: %s","Full Release Notes":"Alle Versionshinweise","Exporting to \"%s\" as \"%s\" format. Please wait...":"Es wird nach „%s“ im Format „%s“ exportiert. Bitte warten ...","Could not export notes: %s":"Konnte Notizen nicht exportieren: %s","Goto Anything...":"Gehe zu ...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Gib den Titel einer Notiz oder einen Teil seines Inhalts ein, um dorthin zu springen. Oder gib # gefolgt von einem Schlagwort oder @ gefolgt vom Namen eines Notizbuchs ein.","Search in all the notes":"Alle Notizen durchsuchen","Title":"Titel","Size":"Größe","ID":"ID","Action":"Aktion","Untitled":"Unbenannt","Delete":"Löschen","Delete attachment \"%s\"?":"Anhang „%s“ löschen?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Dies ist ein Werkzeug für Fortgeschrittene, um die Anhänge anzuzeigen, die mit deinen Notizen verknüpft sind. Bitte sei vorsichtig, wenn du einen davon löschst, da sie danach nicht wiederhergestellt werden können.","Please wait...":"Bitte warten ...","No resources!":"Keine Anhänge!","Warning: not all resources shown for performance reasons (limit: %s).":"Warnung: Aus Leistungsgründen werden nicht alle Anhänge angezeigt (Obergrenze: %s).","Clear":"Leeren","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Neues Notizbuch „%s“ wird erstellt und die Datei „%s“ wird dort hinein importiert","Found: %d.":"Gefunden: %d.","Created: %d.":"Erstellt: %d.","Updated: %d.":"Aktualisiert: %d.","Skipped: %d.":"Übersprungen: %d.","Resources: %d.":"Anhänge: %d.","Tagged: %d.":"Verschlagwortet: %d.","The notes have been imported: %s":"Die Notizen wurden importiert: %s","This will open a new screen. Save your current changes?":"Diese Aktion wird ein neues Fenster öffnen. Aktuelle Änderungen speichern?","Check synchronisation configuration":"Überprüfen der Synchronisationseinstellungen","Unknown":"Unbekannt","Checking...":"Wird überprüft ...","Error":"Fehler","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Die Joplin Nextcloud App ist entweder nicht installiert oder falsch konfiguriert. Bitte beachte die vollständige Fehlermeldung unten:","Show Log":"Protokoll anzeigen","Joplin Nextcloud App status:":"Joplin Nextcloud App-Status:","Check Status":"Status überprüfen","Help":"Hilfe","Show Advanced Settings":"Erweiterte Einstellungen anzeigen","Browse...":"Durchsuchen ...","Edit":"Bearbeiten","Back":"Zurück","Apply":"Anwenden","Please select where the sync status should be exported to":"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll","Retry All":"Erneut alle versuchen","Retry":"Erneut versuchen","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Um Joplin die Synchronisation mit Dropbox zu ermöglichen, folge bitte den folgenden Schritten:","Step 1: Open this URL in your browser to authorise the application:":"Schritt 1: Öffne diese URL im Browser, um die Anwendung zu autorisieren:","Step 2: Enter the code provided by Dropbox:":"Schritt 2: Gib den von Dropbox bereitgestellten Code ein:","Submit":"Absenden","Synchronising...":"Wird synchronisiert ...","Generating link...":"Link wird erzeugt ...","Link has been copied to clipboard!":"Der Link wurde in die Zwischenablage kopiert!","Note: When a note is shared, it will no longer be encrypted on the server.":"Achtung: Wenn eine Notiz geteilt wird, wird sie auf dem Server nicht mehr verschlüsselt sein.","Share Notes":"Notizen teilen","Copy Shareable Link":"Teilbaren Link kopieren","Attach file":"Datei anhängen","Code Block":"Code-Block","Inline Code":"Code im Fließtext","Insert Date Time":"Datum / Uhrzeit einfügen","Drop notes or files here":"Notizen oder Dateien hierher ziehen","Code View":"Code-Ansicht","Checkbox list":"Liste mit Kontrollkästchen","strong text":"fetter Text","emphasised text":"hervorgehobener Text","Insert Hyperlink":"Weblink einfügen","List item":"Listeneintrag","Cut":"Ausschneiden","Copy":"Kopieren","Paste":"Einfügen","Layout":"Layout","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Diese Notiz hat keinen Inhalt. Klicke auf „%s“, um den Editor zu aktivieren und die Notiz zu bearbeiten.","to-do":"Aufgabe","note":"Notiz","Creating new %s...":"Neue(s) %s wird erstellt ...","The following attachments are beingLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"Εντάξει","Cancel":"Άκυρο","Yes":"Ναι","No":"Όχι","Close":"Κλείσιμο","Current version is up-to-date.":"Η τρέχουσα έκδοση είναι ενημερωμένη.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Υπάρχει διαθέσιμη μια ενημέρωση, θέλετε να την κατεβάσετε τώρα;","Your version: %s":"Η έκδοσή σου: %s","New version: %s":"Νέα έκδοση: %s","Full Release Notes":"Πλήρεις σημειώσεις έκδοσης","Exporting to \"%s\" as \"%s\" format. Please wait...":"Γίνεται εξαγωγή στο \"%s\" με μορφή \"%s\". Παρακαλώ περιμένετε...","Could not export notes: %s":"Δεν ήταν δυνατή η εξαγωγή σημειώσεων: %s","Goto Anything...":"Γρήγορη Μετακίνηση...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Πληκτρολογήστε έναν τίτλο σημείωσης ή μέρος του περιεχομένου του για να μεταβείτε σε αυτόν. Ή πληκτρολογήστε # ακολουθούμενο από ένα όνομα ετικέτας ή @ ακολουθούμενο από ένα σημειωματάριο.","Search in all the notes":"Αναζήτηση σε όλες τις σημειώσεις","Title":"Τίτλος","Size":"Μέγεθος","ID":"ID","Action":"Ενέργεια","Untitled":"Χωρίς τίτλο","Delete":"Διαγραφή","Delete attachment \"%s\"?":"Διαγραφή συνημμένου \"%s\";","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Αυτό είναι ένα προηγμένο εργαλείο για την εμφάνιση των συνημμένων που συνδέονται με τις σημειώσεις σας. Να είστε προσεκτικοί όταν διαγράφετε ένα από αυτά, καθώς δεν μπορούν να αποκατασταθούν μετά.","Please wait...":"Παρακαλώ περιμένετε...","No resources!":"Χωρίς πόρους!","Warning: not all resources shown for performance reasons (limit: %s).":"Προειδοποίηση: δεν εμφανίζονται όλοι οι πόροι για λόγους απόδοσης (όριο:% s).","Clear":"Καθαρισμός","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Θα δημιουργηθεί νέο σημειωματάριο \"% s\" και θα εισαχθεί το αρχείο \"% s\"","Found: %d.":"Βρέθηκε: %d.","Created: %d.":"Δημιουργήθηκε: %d.","Updated: %d.":"Ενημερώθηκε: %d.","Skipped: %d.":"Παραλείφθηκε: %d.","Resources: %d.":"Πόροι: %d.","Tagged: %d.":"Με ετικέτα: %d.","The notes have been imported: %s":"Οι σημειώσεις έχουν εισαχθεί: %s","This will open a new screen. Save your current changes?":"Αυτό θα ανοίξει μια νέα οθόνη. Να αποθηκευθούν οι τρέχουσες αλλαγές;","Check synchronisation configuration":"Ελέγχος ρυθμίσεων συγχρονισμού","Unknown":"Άγνωστο","Checking...":"Έλεγχος...","Error":"Σφάλμα","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Η εφαρμογή Joplin δεν έχει εγκατασταθεί ή έχει ρυθμιστεί εσφαλμένα. Δείτε το πλήρες μήνυμα σφάλματος παρακάτω:","Show Log":"Εμφάνιση αρχείου καταγραφής","Joplin Nextcloud App status:":"Κατάσταση εφαρμογής Joplin:","Check Status":"Έλεγχος Κατάστασης","Help":"Βοήθεια","Show Advanced Settings":"Εμφάνιση επιλογών για προχωρημένους","Browse...":"Αναζήτηση...","Edit":"Επεξεργασία","Back":"Πίσω","Apply":"Εφαρμογή","Please select where the sync status should be exported to":"Επιλέξτε την τοποθεσία στην οποία θα εξαχθεί η κατάσταση του συγχρονισμού","Retry All":"Δοκιμή ξανά για Όλα","Retry":"Δοκιμή ξανά","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Για να επιτρέψετε στο Joplin να συγχρονιστεί με το Dropbox, ακολουθήστε τα παρακάτω βήματα:","Step 1: Open this URL in your browser to authorise the application:":"Βήμα 1: Ανοίξτε αυτήν τη διεύθυνση URL στο πρόγραμμα περιήγησής σας για να εξουσιοδοτήσετε την εLine truncated
File renamed without changes.
+1
View File
@@ -0,0 +1 @@
{"Search in all the notes":"Search in all notes","Check synchronisation configuration":"Check synchronization configuration","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"To allow Joplin to synchronize with Dropbox, please follow the steps below:","Step 1: Open this URL in your browser to authorise the application:":"Step 1: Open this URL in your browser to authorize the application:","Synchronising...":"Synchronizing...","emphasised text":"emphasized text","Some items cannot be synchronised.":"Some items cannot be synchronized.","Some items cannot be decrypted.":"Some items cannot be synchronized.","In order to do so, your entire data set will have to be encrypted and synchronised, so it is best to run it overnight.\n\nTo start, please follow these instructions:\n\n1. Synchronise all your devices.\n2. Click \"%s\".\n3. Let it run to completion. While it runs, avoid changing any note on your other devices, to avoid conflicts.\n4. Once sync is done on this device, sync all your other devices and let it run to completion.\n\nImportant: you only need to run this ONCE on one device.":"In order to do so, your entire data set will have to be encrypted and synchronized, so it is best to run it overnight.\n\nTo start, please follow these instructions:\n\n1. Synchronize all your devices.\n2. Click \"%s\".\n3. Let it run to completion. While it runs, avoid changing any note on your other devices, to avoid conflicts.\n4. Once sync is done on this device, sync all your other devices and let it run to completion.\n\nImportant: you only need to run this ONCE on one device.","Synchronise":"Synchronize","Authorisation token:":"Authorization token:","This authorisation token is only needed to allow third-party applications to access Joplin.":"This authorization token is only needed to allow third-party applications to access Joplin.","Synchronisation Status":"Synchronization Status","For information on how to customise the shortcuts please visit %s":"For information on how to customize the shortcuts please visit %s","To maximise/minimise the console, press \"tc\".":"To maximize/minimize the console, press \"tc\".","Synchronises with remote storage.":"Synchronizes with remote storage.","Not authentified with %s. Please provide any missing credentials.":"Not authenticated with %s. Please provide any missing credentials.","Synchronisation is already in progress.":"Synchronization is already in progress.","Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.":"Lock file is already being held. If you know that no synchronization is taking place, you may delete the lock file at \"%s\" and resume the operation.","Synchronisation target: %s (%s)":"Synchronization target: %s (%s)","Cannot initialise synchroniser.":"Cannot initialize synchronizer.","Starting synchronisation...":"Starting synchronization...","Cancelling background synchronisation... Please wait.":"Cancelling background synchronization... Please wait.","Items that cannot be synchronised":"Items that cannot be synchronized","Coming alarms":"Scheduled alarms","Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.":"Cannot refresh token: authentication data is missing. Starting the synchronization again may fix the problem.","Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronisation config screen. Full error was:\n\n%s":"Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronization config screen. Full error was:\n\n%s","The application has been authorised - you may now close this browser tab.":"The application has been authorized - you may now close this browser tab.","The application has been successfully authorised.":"The application has been successfully authorized.","In order to use file system synchronisation your permission to write to external storage is required.":"In order to use file system synchronization your permission to write to external storage is required.","- Storage: to allow attaching files to notes and to enable filesystem synchronisation.":"- Storage: to allow attaching files to notes and to enable filesystem synchronization.","Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.":"Enabling encryption means *all* your notes and attachments are going to be re-synchronized and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.","The master keys with these IDs are used to encrypt some of your items, however the applicatiLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"Bone","Cancel":"Nuligi","Yes":"Jes","No":"Ne","%s (pre-release)":"%s (antaŭeldono)","Your version: %s":"Via versio: %s","New version: %s":"Nova versio: %s","Search in all the notes":"Ŝerci en ĉiuj notoj","ID":"Identigilo","Untitled":"Sen titolo","Delete":"Forigi","Clear":"Klariĝi","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Nova notlibro \"%s\" estos kreita kaj dosiero \"%s\" estos importita al ĝi","Found: %d.":"Trovita: %d.","Created: %d.":"Kreita: %d.","Updated: %d.":"Ĝisdatigita: %d.","The notes have been imported: %s":"La notoj estis importitaj: %s","Browse...":"Esplori...","Edit":"Redakti","Back":"Reen","Apply":"Apliki","Retry":"Reprovi","Submit":"Submeti","Attach file":"Aldoni dosieron","Cut":"Eltondi","Copy":"Kopii","Paste":"Alglui","Layout":"Aspektigo","to-do":"tasko","note":"noto","Creating new %s...":"Kreante novan %s...","In: %s":"En: %s","Open...":"Malfermi...","Save as...":"Konservi kiel...","Focus":"Fokusi","Select all":"Elekti ĉiujn","Bold":"Grasa","Italic":"Kursiva","Hyperlink":"Hiperligilo","Code":"Kodo","Checkbox":"Markobutono","View them now":"Vidi ilin nun","Set the password":"Elekti pasvorton","Search...":"Serĉi...","Tags":"Etikedoj","Add or remove tags:":"Aldoni aŭ forigi etikedojn:","Note properties":"Notaj atributoj","Rename":"Renomi","Rename tag:":"Renomi etikedon:","New notebook":"Nova notlibro","Notebook title:":"Notlibra titolo:","Rename notebook:":"Renomi notlibron:","New to-do":"Nova tasko","PDF File":"PDF-dosiero","New note":"Nova noto","Template file:":"Modela dosiero:","Save":"Konservi","Status":"Stato","Enabled":"Ebligita","Disabled":"Malebligita","Created":"Kreita","Updated":"Ĝisdatigita","Location":"Loko","URL":"URL","Note History":"Nota Historio","Markup":"Markado","Remove":"Forigi","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Forigi notlibron \"%s\"?\n\nĈiuj notoj kaj subnotlibroj ene de tiu notlibro estos ankaŭ forigitaj.","Remove tag \"%s\" from all notes?":"Forigi etikedon \"%s\" el ĉiuj notoj?","Remove this search from the sidebar?":"Forigi tiun sercôn el la flankpanelo?","Export":"Eksporti","All notes":"Ĉiuj notoj","Synchronise":"Sinkronigi","Notebooks":"Notlibroj","Status: %s":"Stato: %s","Advanced options":"Altnivelaj opcioj","Copy token":"Kopii ĵetonon","This note has no history":"Tiu noto ne havas historion","Restore":"Restaŭri","Sort notes by":"Ordigi notojn laŭ","No notes in here. Create one by clicking on \"New note\".":"Neniu noto ĉi tie. Por krei noton, alklaku \"Nova noto\".","Duplicate":"Duobligi","%s - Copy":"%s - Kopii","Switch between note and to-do type":"Ŝalti inter nota kaj taska tipo","Switch to note type":"Ŝalti al nota tipo","Switch to to-do type":"Ŝalti al taska tipo","Delete note \"%s\"?":"Forigi noton \"%s\"?","Delete these %d notes?":"Forigi tiujn %d notojn?","Get it now:":"Akiri ĝin nun:","Usage":"Konsumado","Quit":"Eliri","Options":"Opcioj","&File":"&Dosiero","About Joplin":"Pri Joplin","Preferences...":"Preferoj...","Check for updates...":"Kontrolu ĝisdatigojn...","Templates":"Modeloj","Import":"Importi","Hide %s":"Kaŝi %s","Close Window":"Fermi Fenestron","&Edit":"&Redakti","&View":"&Monti","&Tools":"&Ilaro","&Help":"&Helpo","Website and documentation":"Retejo kaj dokumentado","Joplin Forum":"Joplin-forumo","OneDrive Login":"OneDrive-salutnomo","Dropbox Login":"Dropbox-salutnomo","Open %s":"Malfermi %s","Cannot find \"%s\".":"Ne eblas trovi \"%s\".","Invalid command: \"%s\"":"Malvalida komando: \"%s\"","%s %s (%s)":"%s %s (%s)","Creates a new to-do.":"Kreas novan taskon.","Notes can only be created within a notebook.":"Nur eblas krei notojn ene de notlibro.","The possible commands are:":"Eblaj komandoj estas:","Creates a new note.":"Kreas novan noton.","Downloading resources...":"Elŝutante risurcojn...","Exits the application.":"Eliri la aplikaĵon.","Fatal error:":"Neriparebla eraro:","Marks a to-do as done.":"Marki taskon kiel farita.","Note is not a to-do: \"%s\"":"Noto ne estas tasko: \"%s\"","Either \"text\" or \"json\"":"Aŭ \"teksto\" aŭ \"json\"","Please select a notebook first.":"Bonvolu elekti noton unue.","Delete note?":"Ĉu forigi noton?","Search:":"Serĉi:","Enter master password:":"Entajpu ĉefan pasvorton:","Operation cancelled":"Operacio nuligita","Confirm password:":"Konfirmi pasvorton:","Passwords do not match!":"Pasvorto ne kongruas!","Source format: %s":"Fonta aranĝo: %s","Do not ask for confirmation.":"Ne demandi pri konfirmo.","Importing notes...":"Importante notojn...","Deletes the notebook without asking for confirmation.":"Forigi la notlibron sen peti konfirmon.","Type: %s.":"Tipo: %s.","Possible values: %s.":"Eblaj valoroj: %s.","Default: %s":"Defaŭlto: %s","Possible keys/values:":"Eblaj valoroj/klavoj:","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","No notebook selected.":"Neniu notlibro elektita.","Y":"J","n":"n","N":"N","y":"j","Creates a new notebook.":"Kreas novan notlibron.",Line truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Cancelar","Yes":"Sí","No":"No","Close":"Cerrar","Current version is up-to-date.":"La versión actual está actualizada.","%s (pre-release)":"%s (prelanzamiento)","An update is available, do you want to download it now?":"Hay disponible una actualización. ¿Quiere descargarla ahora?","Your version: %s":"Tu versión: %s","New version: %s":"Nueva versión: %s","Full Release Notes":"Notas completas de la versión","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportando el formato de «%s» a «%s». Por favor espere...","Could not export notes: %s":"No se pudo exportar las notas: %s","Goto Anything...":"Ir a...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Escriba el título de una nota o una parte de su contenido para abrirla. O escriba # seguido de un nombre de etiqueta, o @ seguido del nombre de una libreta.","Search in all the notes":"Buscar en todas las notas","Title":"Título","Size":"Tamaño","ID":"ID","Action":"Acción","Untitled":"Sin título","Delete":"Eliminar","Delete attachment \"%s\"?":"¿Borrar adjunto «%s»?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Esta es una herramienta avanzada para mostrar los archivos adjuntos que están vinculados a sus notas. Por favor, tenga cuidado al eliminar uno de ellos, ya que no pueden ser recuperados después.","Please wait...":"Por favor espere...","No resources!":"¡No hay recursos!","Warning: not all resources shown for performance reasons (limit: %s).":"Aviso: no se muestran todos los recursos por razones de rendimiento (límite: % s).","Clear":"Limpiar","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Se creará la nueva libreta «%s» y se importará en ella el archivo «%s»","Found: %d.":"Encontrado: %d.","Created: %d.":"Creado: %d.","Updated: %d.":"Actualizado: %d.","Skipped: %d.":"Omitido: %d.","Resources: %d.":"Recursos: %d.","Tagged: %d.":"Etiquetado: %d.","The notes have been imported: %s":"Las notas han sido importadas: %s","This will open a new screen. Save your current changes?":"Esto abrirá una nueva pantalla. ¿Quieres salvar los cambios actuales?","Check synchronisation configuration":"Comprobar sincronización","Unknown":"Desconocido","Checking...":"Comprobando...","Error":"Error","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"La aplicación Joplin Nextcloud no está instalada o está mal configurada. Consulte el mensaje de error completo debajo:","Show Log":"Mostrar registro","Joplin Nextcloud App status:":"Estado de la App Joplin Nextcloud:","Check Status":"Comprobar estado","Help":"Ayuda","Show Advanced Settings":"Mostrar opciones avanzadas","Browse...":"Explorar...","Edit":"Editar","Back":"Atrás","Apply":"Aplicar","Please select where the sync status should be exported to":"Seleccione a dónde se debería exportar el estado de sincronización","Retry All":"Reintentar todos","Retry":"Reintento","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Para permitir a Joplin sincronizar con Dropbox, por favor siga estos pasos:","Step 1: Open this URL in your browser to authorise the application:":"Paso 1: Abra esta dirección en su navegador para autorizar a la aplicación:","Step 2: Enter the code provided by Dropbox:":"Paso 2: Introduzca el código provisto por Dropbox:","Submit":"Aceptar","Synchronising...":"Sincronizando...","Generating link...":"Creando enlace...","Link has been copied to clipboard!":"¡El enlace ha sido copiado al portapapeles!","Note: When a note is shared, it will no longer be encrypted on the server.":"Nota: Cuando se comparte una nota, ya no se cifrará en el servidor.","Share Notes":"Compartir Notas","Copy Shareable Link":"Copiar enlace compartible","Attach file":"Adjuntar archivo","Code Block":"Bloque de Código","Inline Code":"Código Integrado","Insert Date Time":"Introduce fecha","Drop notes or files here":"Suelta notas o archivos aquí","Code View":"Código","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Por favor espere a que todos los adjuntos hayan sido descargados y descifrados. Puede también cambiar a %s para editar la nota.","Checkbox list":"Casilla","strong text":"texto destacado","emphasised text":"texto resaltado","Insert Hyperlink":"Insertar hipervínculo","List item":"Listar elementos","Cut":"Cortar","Copy":"Copiar","Paste":"Pegar","Layout":"Diseño","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Esta nota no tiene contenido. Pulse en «%s» para cambiar al editor y editar la nota.","to-do":"lista de tareas","note":"nota","Creating new %s...":"Creando nuevo %s...","The following attachments are being watched for changes:":"Los siguientes adjunLine truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Tühista","Yes":"Jah","No":"Ei","Close":"Sulge","Current version is up-to-date.":"Praegune versioon on ajakohane.","%s (pre-release)":"%s (väljalaske-eelne)","An update is available, do you want to download it now?":"Saadaval on värskendus, kas soovite selle kohe alla laadida?","Your version: %s":"Teie versioon: %s","New version: %s":"Uus versioon: %s","Full Release Notes":"Täielikud väljalaskemärkmed","Search in all the notes":"Otsi kõigist märkmetest","ID":"ID","Untitled":"Pealkirjata","Delete":"Kustuta","Clear":"Tühjenda","Found: %d.":"Leitud: %d.","Created: %d.":"Loodud: %d.","Updated: %d.":"Värskendatud: %d.","Skipped: %d.":"Vahele jäetud: %d.","Resources: %d.":"Ressursid: %d.","Tagged: %d.":"Sildistatud: %d.","The notes have been imported: %s":"Märkmed on imporditud: %s","This will open a new screen. Save your current changes?":"See avab uue ekraani. Kas salvestada praegused muudatused?","Check synchronisation configuration":"Kontrolli sünkroniseerimise konfiguratsiooni","Unknown":"Tundmatu","Checking...":"Kontrollimine...","Error":"Viga","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud app ei ole installitud või valesti konfigureeritud. Palun vaadake täielikku tõrketeadet allpool:","Show Log":"Näita Logi","Joplin Nextcloud App status:":"Joplin Nextcloud rakenduse staatus:","Check Status":"Kontrolli olekut","Help":"Abi","Show Advanced Settings":"Kuva täpsemad sätted","Browse...":"Sirvi...","Edit":"Muuda","Back":"Tagasi","Apply":"Rakenda","Please select where the sync status should be exported to":"Palun valige, kus sünkroonimise olekut tuleks eksportida","Retry":"Uuesti","Submit":"Saada","Synchronising...":"Sünkroonimine...","Generating link...":"Lingi loomine...","Link has been copied to clipboard!":"Link on kopeeritud lõikelauale!","Share Notes":"Märkmete ühiskasutus","Copy Shareable Link":"Kopeeri jagatav link","Attach file":"Manusta fail","Insert Date Time":"Lisa kuupäev kellaaeg","Insert Hyperlink":"Lisa hüperlink","Cut":"Lõika","Copy":"Kopeeri","Paste":"Kleebi","Layout":"Paigutus","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Sellel märkel pole sisu. Klõpsake \" %s\" redaktori vahetamiseks ja märkme redigeerimiseks.","to-do":"ülesande nimekiri","note":"paberraha","Creating new %s...":"Uue %s loomine...","In: %s":"Asukoht: %s","Open...":"Avatud...","Save as...":"Salvesta kui...","Copy path to clipboard":"Kopeeri tee lõikelauale","Copy Link Address":"Kopeeri lingi aadress","There was an error downloading this attachment:":"Selle manuse allalaadimisel ilmnes tõrge:","This attachment is not downloaded or not decrypted yet":"Seda manust ei laadita alla või pole veel dekrüpteeritud","Unsupported link or message: %s":"Toetuseta link või sõnum: %s","Focus":"Fookus","Select all":"Vali kõik","Bold":"Paks","Italic":"Kald","Hyperlink":"Hüperlink","Code":"Kood","Numbered List":"Nummerdatud loend","Bulleted List":"Täpp-loend","Checkbox":"Märkekast","Heading":"Pealkiri","Search in current note":"Otsi praeguses märkuses","Some items cannot be synchronised.":"Mõnda üksust ei saa sünkroonida.","View them now":"Vaata neid nüüd","One or more master keys need a password.":"Üks või mitu Põhivõtit vajavad parooli.","Set the password":"Parooli seadmine","Search...":"Otsi...","Tags":"Sildid","Add or remove tags:":"Siltide lisamine või eemaldamine:","Toggle note list":"Lülita märkuseloend sisse/välja","Note properties":"Märkme atribuudid","Toggle sidebar":"Lülita külgriba sisse/välja","Rename":"Nimeta ümber","Rename tag:":"Nimeta silt ümber:","New notebook":"Uus märkmik","Notebook title:":"Märkmiku tiitel:","Share note...":"Jaga märkust...","Rename notebook:":"Märkmiku ümbernimetamine:","Set alarm":"Alarmi seadmine","Set alarm:":"Alarmi seadmine:","PDF File":"PDF-fail","Toggle editor layout":"Lülita redaktori paigutus sisse/välja","New note":"Uus Märkus","Template file:":"Mallifail:","Save":"Salvesta","Status":"Staatus","Encryption is:":"Krüpteerimine on:","Enabled":"Lubatud","Disabled":"Keelatud","Created":"Loodud","Updated":"Uuendatud","Completed":"Lõpetatud","Location":"Asukoht","URL":"URL","Note History":"Märkmete ajalugu","Previous versions of this note":"Selle märkme eelmised versioonid","Remove":"Eemalda","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Kas soovite märkmiku \"%s\"?\n\nKustutatakse ka kõik selle märkmiku märkmed ja alammärkmikud.","Remove tag \"%s\" from all notes?":"Kas eemaldada silt \"%s\" kõigist märkmetest?","Remove this search from the sidebar?":"Kas soovite selle otsingu külgribalt eemaldada?","Export":"Eksport","All notes":"Kõik märkmed","Synchronise":"Sünkroniseeri","Notebooks":"Sülearvutid","Decrypting items: %d/%d":"Üksuste dekrüpteerimine: %d/%d","Fetching resources: %d/%d":"Ressursside toomine: %d/%d","Token has Line truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"OK","Cancel":"Utzi","Search in all the notes":"Bilatu ohar guztietan","ID":"ID","Untitled":"Titulu gabekoa","Delete":"Ezabatu","Clear":"Garbitu","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"\"%s\" koaderno berria sortuko da eta \"%s\" Fitxategia inportatuko da bertara","Found: %d.":"Aurkitua: %d","Created: %d.":"Sortuta: %d.","Updated: %d.":"Eguneratuta: %d.","Skipped: %d.":"Saltatuta: %d.","Resources: %d.":"Baliabideak: %d.","Tagged: %d.":"Etiketatuta: %d.","The notes have been imported: %s":"Oharrak inportatu dira: %s","Edit":"Editatu","Back":"Atzera","Attach file":"Erantsi fitxategia","Cut":"Moztu","Copy":"Kopiatu","Paste":"Itsatsi","Layout":"Diseinua","Unsupported link or message: %s":"Esteka edo mezu ez dago onartua: %s","Authentication was not completed (did not receive an authentication token).":"Autentifikazioa ez da egin osorik (ez du token-ik hartu).","Some items cannot be synchronised.":"Zenbait item ezin dira sinkronizatu.","View them now":"Ikusi hori orain","Some items cannot be decrypted.":"Zenbait item ezin dira deszifratu.","Set the password":"Ezarri pasahitza","Tags":"Etiketak","Add or remove tags:":"Gehitu edo ezabatu etiketak:","Rename":"Berrizendatu","New notebook":"Koaderno berria","Notebook title:":"Koadernoaren izenburua: ","Rename notebook:":"Berrizendatu koadernoa:","Set alarm":"Ezarri alarma","Set alarm:":"Ezarri alarma:","New to-do":"Zeregin berria","New note":"Ohar berria","Save":"Gorde","Status":"Egoera","Encryption is:":"Zifratua da:","Enabled":"Gaituta","Disabled":"Desgaituta","Created":"Sortua","Updated":"Eguneratua","Remove this search from the sidebar?":"Kendu bilaketa hori ohar guztietatik?","Synchronise":"Sinkronizatu","Notebooks":"Koadernoak","No notes in here. Create one by clicking on \"New note\".":"Hemen ez dago oharrik. Sortu bat \"Ohar berria\" sakatuta.","There is currently no notebook. Create one by clicking on \"New notebook\".":"Momentuz ez dago koadernorik. Sortu bat \"Koaderno berria\" sakatuta.","Switch between note and to-do type":"Aldatu oharra eta zeregin eren artean.","Quit":"Irten","Synchronisation Status":"Sinkronizazioaren egoera","Options":"Aukerak","About Joplin":"Joplin-i buruz","Import":"Inportatu","Website and documentation":"Web orria eta dokumentazioa (en)","OneDrive Login":"Logeatu OneDriven","Error opening note in editor: %s":"Errorea editorean oharra zabaltzean: %s","Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE":"Zerrenda luzearen formatua erabili. Formatua hau da, ID, NOTE_COUNT (libururako), DATE, TODO_CHECKED (zereginetarako), TITLE","Cannot find \"%s\".":"Ezin aurkitu \"%s\"","Invalid command: \"%s\"":"Komando baliogabea: \"%s\"","Displays version information":"Erakutsi bertsioko informazioa","%s %s (%s)":"%s %s (%s)","Exports only the given note.":"Esportatu emandako oharra soilik.","Exports only the given notebook.":"Esportatu emandako koadernoa soilik.","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"<oharra>rekin bat datozen oharrak [koaderno]ra kopiatzen ditu. Koadernorik ez bada zehazten, oharra oraingo koadernoan bikoiztuko da","Attaches the given file to the note.":"Erantsi fitxategia notan","Creates a new to-do.":"Zeregin berria sortu.","Notes can only be created within a notebook.":"Oharrak soilik sor daitezke koaderno baten barruan.","Displays usage information.":"Erakutsi erabilera datuak.","Shortcuts are not available in CLI mode.":"CLI moduan ez dago lasterbiderik erabilgarri.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Idatzi `help [command]` komandoari buruzko informazio gehiagorako; edo idatzi `help all` erabilerari buruzko informazio osoa lortzeko.","The possible commands are:":"Litezkeen komandoak hauek dira:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"Edozein komandotan, oharra edo koadernoari erreferentzia egin ahal zaio izenburuz edo ID erabilita, edo `$n` edo `$b` lasterbideak erabilita, aukeratuta dagoen oharra edo koadernoa erabiltzeko. `$c` ere erabil daiteke aukeratutako elementua erabiltzeko.","To move from one pane to another, press Tab or Shift+Tab.":"Panel batetik bestera mugitzeko, sakatu Tab edo Shifft + Tab.","Use the arrows and page up/down to scroll the lists and text areas (including this console).":"Erabili geziak edo page up/down list eta testu guneen artean aldatzeko (kontsola hau ere kontuan izanda).","To enter command line mode, press \":\"":"Komando lerroa sartzeko, idatzi \":\"","To exit command line mode, press ESCAPE":"Komando lerrotik irteteko, sakatu ESC, mesedez","Displays a geolocation URL for the note.":"Erakutsi URL geolokalizazioa oharrean.","Creates Line truncated
+1
View File
@@ -0,0 +1 @@
{"OK":"باشه","Cancel":"لغو","Yes":"بله","No":"خیر","Close":"بستن","Current version is up-to-date.":"ورژن فعلی به‌روز است.","An update is available, do you want to download it now?":"یک بروزرسانی موجود است، آیا میخواهید هم اکنون بارگیری‌اش کنید؟","Your version: %s":"ورژن شما: %s","New version: %s":"ورژن جدید: %s","Full Release Notes":"انتشار کامل یادداشت‌ها","Exporting to \"%s\" as \"%s\" format. Please wait...":"در حال استخراج به «%s» با فرمت «%s». لطفا صبر کنید...","Could not export notes: %s":"یادداشت‌ها استخراج نشدند: %s","Goto Anything...":"رفنت به هر چیزی...","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"عنوان یادداشت یا بخشی از محتوای آن را تایپ کنید تا به آن بروید. یا # و به دنبال آن یک نام برچسب تایپ کنید ، یا @ و به دنبال آن یک نام دفترچه یادداشت وارد کنید.","Search in all the notes":"جستجو در تمام یادداشت ها","Title":"عنوان","Size":"اندازه","ID":"شناسه","Action":"عمل","Untitled":"بدون عنوان","Delete":"حذف","Delete attachment \"%s\"?":"پیوست «%s» حذف شود؟","Please wait...":"لطفا صبر کنید...","No resources!":"منبعی یافت نشد!","Clear":"پاک","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"دفترچه جدید «%s» ساخته خواهد شد و فایل «%s» به آن وارد خواهد شد","Found: %d.":"پیدا شده: %d.","Created: %d.":"ایجاد شده: %d.","Updated: %d.":"به‌روز شده: %d.","Skipped: %d.":"رد شده: %d.","Resources: %d.":"منابع: %d.","Tagged: %d.":"برچسب گذاری شده: %d.","The notes have been imported: %s":"یادداشت‌ها وارد شدند: %s","This will open a new screen. Save your current changes?":"این یک صفحه جدید باز می‌کند. تغییرات فعلی ذخیره شوند؟","Check synchronisation configuration":"بررسی تنظیمات همگام‌سازی","Unknown":"ناشناس","Checking...":"در حال بررسی...","Error":"خطا","Show Log":"نمایش لاگ","Check Status":"بررسی وضعیت","Help":"کمک","Show Advanced Settings":"نمایش تنظیمات پیشرفته","Browse...":"مرور...","Edit":"ویرایش","Back":"بازگشت","Apply":"اعمال","Please select where the sync status should be exported to":"لطفا محلی که وضعیت همگام‌سازی باید استخراج شود را مشخص کنید","Retry All":"تلاش مجدد همه","Retry":"تلاش مجدد","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"برای اینکه به Joplin اجازه همگام‌سازی با Dropbox را بدهید، مراحل زیر را دنبال کنید:","Step 1: Open this URL in your browser to authorise the application:":"مرحله ۱: برای اجازه دادن به برنامه این آدرس اینترنتی را در مرورگر خود باز کنید:","Step 2: Enter the code provided by Dropbox:":"مرحله ۲: کدی که توسط Dropbox داده شده را وارد کنید:","Submit":"ثبت","Synchronising...":"در حال همگام سازی...","Generating link...":"در حال بوجود آوردن پیوند‌ها...","Link has been copied to clipboard!":"پیوند‌ها در کلیپ بورد کپی شدند!","Share Notes":"به اشتراک گذاری یادداشت‌ها","Copy Shareable Link":"کپی کردن پیوند قابل به اشتراک گذاری","Attach file":"پیوست فایل","Code Block":"بلوک کد","Inline Code":"کد درون خطی","Insert Date Time":"درج تاریخ و ساعت","Drop notes or files here":"یادداشت‌ها یا فایل‌ها را اینجا رها کنید","Code View":"نمای کد","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"لطفا صبر کنید تا همه پیوست ها بارگیری و رمزگشایی شوند. شما همچنین می‌توانید به %s برای ویرایش یادداشت بروید.","Checkbox list":"لیست چک‌باکس","emphasised text":"متن تأکید شده","Insert Hyperlink":"درج پیوند برجسته","List item":"لیست مورد","Cut":"بریدن","Copy":"کپی","Paste":"چسباندن","Layout":"قالب","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"این یادداشت هیچ محتوایی ندارد. برای تغییر وضعیت ویرایشگر و ویرایش یادداشت ، روی \"%s\" کلیک کنید.","to-do":"فهرست کار","note":"یادداشت","CLine truncated
Loaded 100 of 4504 files, more files were not shown because too many files have changed in this diff. Show more