1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-27 20:29:45 +02:00

Compare commits

...

104 Commits

Author SHA1 Message Date
Laurent Cozic
f07bb5c275 Android release v1.0.304 2019-09-09 18:26:55 +01:00
Laurent Cozic
0e2cc418e2 Electron release v1.0.166 2019-09-09 18:22:42 +01:00
Laurent Cozic
0340456d55 Update translations 2019-09-09 18:22:20 +01:00
Laurent Cozic
7aea2cec69 Desktop: Resolves #1490: Add support for anchor hashes in note links 2019-09-09 18:16:00 +01:00
Laurent Cozic
fa83107840 Doc: Update CLI installation info 2019-09-08 20:21:14 +01:00
Laurent Cozic
bb0bf46f81 CLI v1.0.146 2019-09-08 20:12:49 +01:00
Laurent Cozic
694c3fed2d Cli: Fixed regression that was making installation fail 2019-09-08 20:12:25 +01:00
Laurent Cozic
772e39b710 Tools: Improved git-changelog so that it is less error prone 2019-09-08 17:54:41 +01:00
Laurent Cozic
05e0a2c29d CLI v1.0.145 2019-09-08 17:24:00 +01:00
Laurent Cozic
78e0efb95f Trying CLI release 2019-09-08 17:19:22 +01:00
Laurent Cozic
a5f749cfd2 Tools: Added moment package 2019-09-08 17:18:44 +01:00
Laurent Cozic
3d6c932e1b Cli: Added headless server command (Beta) (#1860)
* Trying to implement headless server

* Cli: Cleaned up and completed server command so that it is usable. Added warnings as it is advanced usage only at this point.

* Restored welcome assets
2019-09-08 17:16:45 +01:00
archont00
4488a1b95f Doc: Update explanation of enabling E2EE (#1859)
As per https://discourse.joplinapp.org/t/totally-confused-re-e2ee/3295, I tried to improve the explanation of the process to avoid multiple encryption keys.
2019-09-08 16:35:10 +01:00
archont00
e2808a90c6 Doc: Update re. impossibility to delete unused Master Keys (#1858)
As per discussion at https://discourse.joplinapp.org/t/totally-confused-re-e2ee/3295/2, I propose to add info about Master Keys persistence.
2019-09-08 16:34:37 +01:00
Laurent Cozic
755a972e02 Update website 2019-09-08 11:09:02 +01:00
Laurent Cozic
8b1de22049 Merge branch 'master' of github.com:laurent22/joplin 2019-09-08 11:07:54 +01:00
Laurent Cozic
a9735123b7 Doc: Added warning to generated HTML files 2019-09-08 11:06:53 +01:00
Laurent Cozic
5ccafa2838 Doc: Added warning to generated HTML files 2019-09-08 10:46:35 +01:00
archont00
e2926a4f82 Doc: Update explanation of enabling E2EE (#1856)
As per https://discourse.joplinapp.org/t/totally-confused-re-e2ee/3295, I tried to improve the explanation of the process to avoid multiple encryption keys.
2019-09-08 10:35:15 +01:00
Laurent Cozic
09df315639 Desktop: Fixes #1833: Do not scroll text when search is open and user type in note 2019-09-07 11:57:31 +01:00
Laurent Cozic
5a9b3b6c7c Desktop, Mobile: Resolves #1832: Only support checkboxes that start with a dash 2019-09-07 11:18:07 +01:00
Laurent Cozic
6da6f35ddd Merge branch 'master' of github.com:laurent22/joplin 2019-09-07 10:47:51 +01:00
Laurent Cozic
dcb5590842 Clipper: Fixes #1851: Fixed error when trying to import certain pages using "Clip simplified page" feature 2019-09-07 10:47:31 +01:00
Laurent Cozic
5135c8a782 Clipper: Fixes #1783: Fixed importing tables that contain pipes 2019-09-07 10:32:52 +01:00
Laurent Cozic
1b2f4fb036 Update bug_report.md 2019-09-07 10:09:05 +01:00
Laurent Cozic
76a4a445f0 Doc: Added info about SKIP_PREFLIGHT_CHECK 2019-09-07 09:56:06 +01:00
Helmut K. C. Tessarek
20abb125a5 infrastructure: skip preflight check for building clipper 2019-09-06 13:53:35 -04:00
Laurent Cozic
be9e50b4a1 Update FUNDING.yml 2019-09-06 18:48:05 +01:00
Helmut K. C. Tessarek
02bfcf577d Clipper release v1.0.18 2019-09-06 13:37:55 -04:00
Laurent Cozic
038efa10f2 Update website 2019-09-06 18:34:47 +01:00
Laurent Cozic
dfa692569b Update translations 2019-09-06 18:33:30 +01:00
Laurent Cozic
9abc6a2e44 CLI: Fixes #1779: Make sure setting side-effects are applied even when running in command line mode 2019-09-06 18:29:40 +01:00
Laurent Cozic
11f23f4e00 Android release v1.0.303 2019-09-06 17:51:38 +01:00
Laurent Cozic
6a7d40d171 Merge branch 'master' of github.com:laurent22/joplin 2019-09-06 17:50:39 +01:00
Laurent Cozic
bf5601429e Mobile: Fixes #1767: Fixed broken search when certain notes are too large 2019-09-06 17:39:36 +01:00
abonte
73ae8aaf2f Update it_IT.po (#1853) 2019-09-05 22:45:36 -04:00
axq
7eb7bd98f3 Doc: Minor English improvements in README.md (#1852) 2019-09-05 17:11:45 +01:00
Laurent Cozic
10e22654ea Desktop: Fixes #1815: Fixed cropped content issue when printing or exporting to PDF 2019-09-04 20:11:35 +01:00
Joan Montané
ccfc80ad04 Update ca.po (#1836) 2019-08-29 17:39:35 +01:00
stellarpower
5e95278084 Fix Cinnamon Detection (#1828)
$desktop was converted to lowercase, but matched against 'X-Cinnamon'
2019-08-29 17:39:10 +01:00
Helmut K. C. Tessarek
d69ba6bc75 All: fix typo on encryption options screen (#1823)
fixes #1798
2019-08-29 17:38:54 +01:00
Caleb John
d28fbe2d3b Desktop: Apply current locale to date and time (#1822) 2019-08-29 17:38:24 +01:00
Caleb John
415e7b84da Desktop: Change localeCompare functiion for tags (#1811)
* change localeCompare functin for tags

* Fix spacing
2019-08-29 17:36:53 +01:00
Caleb John
ac4986b620 Desktop: Fixes #1803: Use correct date format for templates (#1810) 2019-08-29 17:35:43 +01:00
Caleb John
9a4f4cbb65 Desktop: Change template prompt to sans and sort templates (#1806)
* Change template prompt to sans and sort templates

* Sort templates by filename to ensure order
2019-08-29 17:34:54 +01:00
Helmut K. C. Tessarek
8e32957111 Infrastructure: build-translation.js - add support for macOS (#1804)
* remove unnecessary comment

It's totally fine to add the double quotes after -i.
Using gsed would mean that people had to install GNU sed. For what, if the same is possible with the system's sed with a slight modification.
Checking for gsed and using it is more trouble than it's worth.

* build-translation.js: add support for macOS

* implement requested changes
2019-08-29 17:34:05 +01:00
Helmut K. C. Tessarek
91aa3703d4 CLI: Fixes fatal error with cli 1.0.141 on start (#1791)
- updated terminal-kit to 1.30.0
- do not call method, if object does not exist

fixes #1778
2019-08-29 17:05:20 +01:00
FoxMaSk
a889762056 Update README.md
Double line fixed
2019-08-21 10:14:15 +02:00
Robert
6478d6c9c9 Update nl_NL.po (#1821) 2019-08-19 17:59:43 -04:00
FoxMaSk
7a681d0a4a README: add Discord Community Server (#1800)
* Discord Community Server

* Discord Server Link fixed

* improvment
2019-08-19 13:34:43 -04:00
Rafael Teixeira
83b6eba8bd Updated Last Translator pt_BR (#1813) 2019-08-17 02:36:25 -04:00
Helmut K. C. Tessarek
2766ded5f6 Update website 2019-08-16 19:55:27 -04:00
Rafael Teixeira
ca0d966ed9 Translation: Translation Update pt_BR (#1809)
* Updated translation pt-BR

* New updates translation pt_BR
2019-08-16 03:58:07 -04:00
Woosuk Park
386c583b0e Translation : Korean Translation #2 (#1802)
* Korean Language Support

Korean Language 100% Translated, but something is roughted. soon fix it ;)

* some improved

Some Improved

* Improve v2

some polished

* Ok, now Completed

For Now, Completed Polish(Change Respect of Users, and several fixing & polishing) + 100% Translated. Ready to Shipping

* Korean Language Update #2

1. 조플린 -> Joplin (Sorry i forgot)
2. Fuzzy correction.

Korean Language Update #2

1. 조플린 -> Joplin (Sorry i forgot)
2. Fuzzy correction.
2019-08-15 13:15:32 -04:00
Laurent Cozic
b3d34ad7e9 Android release v1.0.299 2019-08-14 23:47:38 +02:00
Laurent Cozic
ba5c636dda Android: Fixed AndroidX transition issue 2019-08-14 23:44:57 +02:00
Laurent Cozic
ea16f6e0b1 Revert "Trying to fix Android buikld"
This reverts commit 0dd0dc5489.
2019-08-14 23:23:27 +02:00
Laurent Cozic
0dd0dc5489 Trying to fix Android buikld 2019-08-14 23:22:52 +02:00
Laurent Cozic
f3ab21ff43 Electron release v1.0.165 2019-08-14 23:17:25 +02:00
Laurent Cozic
5ac6b46efd Desktop: Fixed theme options for Solarized theme 2019-08-14 23:17:02 +02:00
Laurent Cozic
6548f30a4b Electron release v1.0.164 2019-08-14 22:49:45 +02:00
Laurent Cozic
849d7983f6 Desktop: Added support for Fountain screenwriting language 2019-08-14 12:40:06 +02:00
Helmut K. C. Tessarek
e32e4423db change feature request template 2019-08-14 02:08:35 -04:00
Laurent Cozic
7f5bf131a8 Add back files that might have been modified by linter 2019-07-30 11:40:33 +02:00
Laurent Cozic
87a639df2b Mobile: Disabled solarized themes on mobile 2019-07-30 11:37:52 +02:00
Laurent Cozic
bdd8eab87e Mobile: Make it clearer when there are no notebooks and added a button create one 2019-07-30 11:36:56 +02:00
Laurent Cozic
b9e5c8a387 Electron release v1.0.163 2019-07-30 09:52:26 +02:00
Laurent Cozic
d646a2dd01 Fix Linux and macOS build to go around this bug: https://github.com/electron-userland/electron-builder/issues/3179 2019-07-30 09:52:16 +02:00
Laurent Cozic
71a3a0176e Android release v1.0.294 2019-07-30 09:42:09 +02:00
Laurent Cozic
a363d119cf Electron release v1.0.162 2019-07-30 09:37:23 +02:00
Laurent Cozic
ff08bdbc0b Merge branch 'master' of github.com:laurent22/joplin 2019-07-30 09:35:49 +02:00
Laurent Cozic
71efff6827 Linter update (#1777)
* Update eslint config

* Applied linter to lib

* Applied eslint config to CliClient/app

* Removed prettier due to https://github.com/prettier/prettier/pull/4765

* First pass on test units

* Applied linter config to test units

* Applied eslint config to clipper

* Applied to plugin dir

* Applied to root of ElectronClient

* Applied on RN root

* Applied on CLI root

* Applied on Clipper root

* Applied config to tools

* test hook

* test hook

* test hook

* Added pre-commit hook

* Applied rule no-trailing-spaces

* Make sure root packages are installed when installing sub-dir

* Added doc
2019-07-30 09:35:42 +02:00
Laurent Cozic
7595fe4a8c Merge branch 'master' of github.com:laurent22/joplin 2019-07-30 09:32:34 +02:00
Laurent Cozic
7697e75466 Update eslint config 2019-07-29 21:23:14 +02:00
Helmut K. C. Tessarek
b8fbaa2029 Update en_US.po 2019-07-29 11:34:52 -04:00
Helmut K. C. Tessarek
38bc750ecf Update de_DE.po 2019-07-29 11:34:02 -04:00
Laurent Cozic
6cfacb1a48 Second pass at linting lib dir 2019-07-29 15:58:33 +02:00
Laurent Cozic
0b9078d034 config 2019-07-29 15:58:17 +02:00
Laurent Cozic
86dc72b204 First pass at linting lib dir 2019-07-29 15:43:53 +02:00
Laurent Cozic
64b7bc3d62 More config 2019-07-29 15:43:39 +02:00
Laurent Cozic
086f9e1123 Started applying config to Electron app 2019-07-29 14:13:23 +02:00
Laurent Cozic
4fe70fe8ee Ignore some files 2019-07-29 14:13:09 +02:00
Laurent Cozic
95a1f40404 Tweaked linter config 2019-07-29 14:10:07 +02:00
Laurent Cozic
88f04509ee Also added prettier config 2019-07-29 13:48:43 +02:00
Laurent Cozic
7eebd544d6 Fixed eslint 2019-07-29 12:55:50 +02:00
Laurent Cozic
e369a8decf Added eslint config 2019-07-29 12:55:39 +02:00
Helmut K. C. Tessarek
ad8054ba4b Desktop: Better handling of adding the title to print and export to PDF (#1744)
fixes #1743
2019-07-29 12:33:40 +02:00
J0J0 T
b47cb4e29a Desktop, Cli: Improved bold formatting support in Enex import (#1708)
* Dekstop,CLI: enex_to_md: add html/md test file pairs

* one pair for basic text formatting tags: strong, b, i, em
* and one using span tags with inline styles for bold formatting

Note: The html files include the Evernote-typical "linebreak tags inside of separate <div> tags"
to represent empty lines!

* Desktop,Cli: enex_to_md: support bold in span tags using inline styles

* function isSpanWithStyle() checks if further processing of a span tag
  makes sense
* function isSpanStyleBold() checks if bold formatting via styles is
  used - a similar function could be written for each span-inline-style-format
  that should be supported

* Desktop,Cli: enex_to_md: fix saving span attrs in state object

pushing attributes of span tag to state object now
happens outside of isSpanWithStyle()
2019-07-29 12:25:25 +02:00
Laurent Cozic
8c42ddf6c3 Merge branch 'master' of github.com:laurent22/joplin 2019-07-29 12:17:33 +02:00
tfinnberg
f7fcabbf41 Desktop: Create fileURLs via drag and drop (#1653)
* enable drag and drop fileURLs

* fix windows fileURL syntax

* introduce encodeURI function

* fixed encoding issue

* use path-utils.js to deal with fileURL path conversion

* add changes as requested

* Minor rewording 'On the' -> 'In the', additional info about attaching files

* change call of toFileProtocolPath

* enable test script to check syntax for all OS-platforms
2019-07-29 12:16:47 +02:00
Shane Kilkelly
38a51070fc Desktop: add depthColor for solarized light and dark themes (#1765) 2019-07-29 12:08:49 +02:00
Laurent Cozic
44fa099a77 Desktop: No longer crash if certain theme properties are not set 2019-07-29 12:05:58 +02:00
sumomo-99
af6f3999df Update ja_JP.po (#1776) 2019-07-29 11:55:02 +02:00
Laurent Cozic
6fbeb35951 Update translations 2019-07-29 11:52:19 +02:00
Laurent Cozic
b2eadffde0 Using British English by default for consistency 2019-07-29 11:51:09 +02:00
Laurent Cozic
200ba2775f All: Resolves #1459: Make translation files smaller by not including untranslated strings. Also add percentage translated to config screen. 2019-07-29 11:47:50 +02:00
Laurent Cozic
39ba021a79 Merge branch 'master' of github.com:laurent22/joplin 2019-07-29 10:12:45 +02:00
Laurent Cozic
2c6b291b9b Desktop: Only repeat failed requests up to 3 times during sync 2019-07-29 10:12:23 +02:00
Devon Zuegel
770846be2e Doc: Add docs to clarify how to test (#1775) 2019-07-29 09:42:10 +02:00
Laurent Cozic
af4aa01b75 Mobile: Upgraded packages to fix security issues 2019-07-28 23:03:54 +02:00
Laurent Cozic
1bf2bec805 CLI v1.0.141 2019-07-28 22:54:45 +02:00
Laurent Cozic
3a41ac9be0 CLI: Upgraded packages to fix security issues 2019-07-28 22:54:29 +02:00
Laurent Cozic
f2c9cdd7f1 Desktop: Upgraded packages to fix security issue 2019-07-28 22:48:30 +02:00
Laurent Cozic
058f418cc7 Tools: Do not display full release info when releasing Android app 2019-07-28 22:43:33 +02:00
475 changed files with 18580 additions and 11004 deletions

41
.eslintignore Normal file
View File

@@ -0,0 +1,41 @@
*.min.js
.git/
.github/
_mydocs/
_releases/
Assets/
CliClient/build
CliClient/locales
CliClient/node_modules
CliClient/tests-build
CliClient/tests/enex_to_md
CliClient/tests/html_to_md
CliClient/tests/logs
CliClient/tests/support
CliClient/tests/sync
CliClient/tests/tmp
Clipper/joplin-webclipper/content_scripts/JSDOMParser.js
Clipper/joplin-webclipper/content_scripts/Readability-readerable.js
Clipper/joplin-webclipper/content_scripts/Readability.js
Clipper/joplin-webclipper/dist
Clipper/joplin-webclipper/icons
Clipper/joplin-webclipper/popup/build
Clipper/joplin-webclipper/popup/node_modules
docs/
ElectronClient/app/dist
ElectronClient/app/lib
ElectronClient/app/lib/vendor/sjcl-rn.js
ElectronClient/app/lib/vendor/sjcl.js
ElectronClient/app/locales
ElectronClient/app/node_modules
highlight.pack.js
node_modules/
ReactNativeClient/android
ReactNativeClient/ios
ReactNativeClient/lib/vendor/
ReactNativeClient/lib/welcomeAssets.js
ReactNativeClient/locales
ReactNativeClient/node_modules
readme/
Tools/node_modules
Tools/PortableAppsLauncher

53
.eslintrc.js Normal file
View File

@@ -0,0 +1,53 @@
module.exports = {
'env': {
'browser': true,
'es6': true,
'node': true,
},
'extends': ['eslint:recommended'],
'globals': {
'Atomics': 'readonly',
'SharedArrayBuffer': 'readonly',
// Jasmine variables
'expect': 'readonly',
'describe': 'readonly',
'it': 'readonly',
'beforeEach': 'readonly',
'jasmine': 'readonly',
// React Native variables
'__DEV__': 'readonly',
// Clipper variables
'browserSupportsPromises_': true,
'chrome': 'readonly',
'browser': 'readonly',
},
'parserOptions': {
'ecmaVersion': 2018,
"ecmaFeatures": {
"jsx": true,
},
"sourceType": "module",
},
'rules': {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
// Ignore all unused function arguments, because in some
// case they are kept to indicate the function signature.
"no-unused-vars": ["error", { "argsIgnorePattern": ".*" }],
"no-constant-condition": 0,
"no-prototype-builtins": 0,
"space-in-parens": ["error", "never"],
"semi": ["error", "always"],
"eol-last": ["error", "always"],
"quotes": ["error", "single"],
"indent": ["error", "tab"],
"comma-dangle": ["error", "always-multiline"],
"no-trailing-spaces": "error",
},
"plugins": [
"react",
],
};

1
.github/FUNDING.yml vendored
View File

@@ -1,4 +1,5 @@
# These are supported funding model platforms
patreon: joplin
github: laurent22
custom: https://joplinapp.org/donate/

View File

@@ -12,6 +12,11 @@ labels: 'bug'
Please test using the latest Joplin release to make sure your issue has not already been fixed.
-->
<!--
IMPORTANT: If you are reporting a clipper bug, please include an example URL that shows the issue.
Without the URL the issue is likely to be closed.
-->
## Environment
Joplin version:

View File

@@ -1,33 +1,20 @@
---
name: Feature request
about: Suggest a feature for Joplin.
title: '[Feature request] '
labels: 'feature request'
---
<!--
Please search open issues first - many features have already been requested!
-->
## Has it been discussed in the forum? Link to topic.
<!--
Feature requests should be discussed in the forum first. https://discourse.joplinapp.org
Please provide a link to the topic.
-->
## Is your feature request related to a problem? Please describe.
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
## Describe the solution you'd like
<!-- A clear and concise description of what you want to happen. -->
## Describe alternatives you've considered
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
## Additional context
<!-- Add any other context or screenshots about the feature request here. -->
---
name: Feature request
about: Report an accepted feature request.
title: '[Feature request] '
labels: 'feature request'
---
<!--
Please search open issues first - many features have already been requested!
-->
🚨 A feature request that has not been accepted on the forum will be closed! 🚨
## Has it been discussed in the forum? Link to topic.
<!--
Feature requests must be discussed and accepted in the forum first. https://discourse.joplinapp.org
Please provide a link to the topic.
Feature requests without a link to the discussion/topic on the forum will be closed.
-->

View File

@@ -58,4 +58,4 @@ script:
npm install
cd ../ElectronClient/app
rsync -aP --delete ../../ReactNativeClient/lib/ lib/
npm install && yarn dist
npm install && USE_HARD_LINKS=false yarn dist

View File

@@ -40,10 +40,7 @@ Building the apps is relatively easy - please [see the build instructions](https
## Coding style
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
- **Please use tabs, NOT spaces.**
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
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.
## Unit tests
@@ -54,7 +51,20 @@ The tests are under CliClient/tests. To get them running, you first need to buil
cd CliClient
npm i
Then to run all the test units:
To run the test units, you must have an instance of the cli app running. In a first window navigate into `CliClient` and run:
```sh
./run.sh
```
> If you get an error like `Error: Cannot find module '../locales/index.js'`, this means you must (a) rebuild translations or (b) take > them from one of the other apps. To do option b, you can run the following command to copy them from the `ReactNativeClient` directory:>
>
> ```sh
> cd .. # Return to the root of the project
> rsync -aP ./ReactNativeClient/locales/ ./CliClient/build/locales/
> ```
Then run the tests in a second window. To run all the test units:
./run_test.sh

View File

@@ -1,14 +1,11 @@
const { _ } = require('lib/locale.js');
const { Logger } = require('lib/logger.js');
const Resource = require('lib/models/Resource.js');
const { netUtils } = require('lib/net-utils.js');
const http = require("http");
const urlParser = require("url");
const http = require('http');
const urlParser = require('url');
const enableServerDestroy = require('server-destroy');
class ResourceServer {
constructor() {
this.server_ = null;
this.logger_ = new Logger();
@@ -40,7 +37,7 @@ class ResourceServer {
async start() {
this.port_ = await netUtils.findAvailablePort([9167, 9267, 8167, 8267]);
if (!this.port_) {
if (!this.port_) {
this.logger().error('Could not find available port to start resource server. Please report the error at https://github.com/laurent22/joplin');
return;
}
@@ -48,11 +45,10 @@ class ResourceServer {
this.server_ = http.createServer();
this.server_.on('request', async (request, response) => {
const writeResponse = (message) => {
const writeResponse = message => {
response.write(message);
response.end();
}
};
const url = urlParser.parse(request.url, true);
let resourceId = url.pathname.split('/');
@@ -69,6 +65,7 @@ class ResourceServer {
if (!done) throw new Error('Unhandled resource: ' + resourceId);
} catch (error) {
response.setHeader('Content-Type', 'text/plain');
// eslint-disable-next-line require-atomic-updates
response.statusCode = 400;
response.write(error.message);
}
@@ -76,7 +73,7 @@ class ResourceServer {
response.end();
});
this.server_.on('error', (error) => {
this.server_.on('error', error => {
this.logger().error('Resource server:', error);
});
@@ -91,7 +88,6 @@ class ResourceServer {
if (this.server_) this.server_.destroy();
this.server_ = null;
}
}
module.exports = ResourceServer;
module.exports = ResourceServer;

View File

@@ -5,13 +5,12 @@ 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 { cliUtils } = require('./cli-utils.js');
const { reducer, defaultState } = require('lib/reducer.js');
const { splitCommandString } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale.js');
const Entities = require('html-entities').AllHtmlEntities;
const htmlentities = (new Entities()).encode;
const htmlentities = new Entities().encode;
const chalk = require('chalk');
const tk = require('terminal-kit');
@@ -20,12 +19,10 @@ const Renderer = require('tkwidgets/framework/Renderer.js');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const BaseWidget = require('tkwidgets/BaseWidget.js');
const ListWidget = require('tkwidgets/ListWidget.js');
const TextWidget = require('tkwidgets/TextWidget.js');
const HLayoutWidget = require('tkwidgets/HLayoutWidget.js');
const VLayoutWidget = require('tkwidgets/VLayoutWidget.js');
const ReduxRootWidget = require('tkwidgets/ReduxRootWidget.js');
const RootWidget = require('tkwidgets/RootWidget.js');
const WindowWidget = require('tkwidgets/WindowWidget.js');
const NoteWidget = require('./gui/NoteWidget.js');
@@ -37,7 +34,6 @@ const StatusBarWidget = require('./gui/StatusBarWidget.js');
const ConsoleWidget = require('./gui/ConsoleWidget.js');
class AppGui {
constructor(app, store, keymap) {
try {
this.app_ = app;
@@ -50,12 +46,12 @@ class AppGui {
// Some keys are directly handled by the tkwidget framework
// so they need to be remapped in a different way.
this.tkWidgetKeys_ = {
'focus_next': 'TAB',
'focus_previous': 'SHIFT_TAB',
'move_up': 'UP',
'move_down': 'DOWN',
'page_down': 'PAGE_DOWN',
'page_up': 'PAGE_UP',
focus_next: 'TAB',
focus_previous: 'SHIFT_TAB',
move_up: 'UP',
move_down: 'DOWN',
page_down: 'PAGE_DOWN',
page_up: 'PAGE_UP',
};
this.renderer_ = null;
@@ -64,7 +60,7 @@ class AppGui {
this.renderer_ = new Renderer(this.term(), this.rootWidget_);
this.app_.on('modelAction', async (event) => {
this.app_.on('modelAction', async event => {
await this.handleModelAction(event.action);
});
@@ -83,7 +79,7 @@ class AppGui {
reg.setupRecurrentSync();
DecryptionWorker.instance().scheduleStart();
} catch (error) {
this.fullScreen(false);
if (this.term_) { this.fullScreen(false); }
console.error(error);
process.exit(1);
}
@@ -134,7 +130,7 @@ class AppGui {
};
folderList.name = 'folderList';
folderList.vStretch = true;
folderList.on('currentItemChange', async (event) => {
folderList.on('currentItemChange', async event => {
const item = folderList.currentItem;
if (item === '-') {
@@ -169,7 +165,7 @@ class AppGui {
});
}
});
this.rootWidget_.connect(folderList, (state) => {
this.rootWidget_.connect(folderList, state => {
return {
selectedFolderId: state.selectedFolderId,
selectedTagId: state.selectedTagId,
@@ -196,7 +192,7 @@ class AppGui {
id: note ? note.id : null,
});
});
this.rootWidget_.connect(noteList, (state) => {
this.rootWidget_.connect(noteList, state => {
return {
selectedNoteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
items: state.notes,
@@ -210,7 +206,7 @@ class AppGui {
borderBottomWidth: 1,
borderLeftWidth: 1,
};
this.rootWidget_.connect(noteText, (state) => {
this.rootWidget_.connect(noteText, state => {
return {
noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
notes: state.notes,
@@ -225,7 +221,7 @@ class AppGui {
borderLeftWidth: 1,
borderRightWidth: 1,
};
this.rootWidget_.connect(noteMetadata, (state) => {
this.rootWidget_.connect(noteMetadata, state => {
return { noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null };
});
noteMetadata.hide();
@@ -292,7 +288,7 @@ class AppGui {
if (!cmd) return;
const isConfigPassword = cmd.indexOf('config ') >= 0 && cmd.indexOf('password') >= 0;
if (isConfigPassword) return;
this.stdout(chalk.cyan.bold('> ' + cmd));
this.stdout(chalk.cyan.bold('> ' + cmd));
}
setupKeymap(keymap) {
@@ -408,7 +404,7 @@ class AppGui {
activeListItem() {
const widget = this.widget('mainWindow').focusedWidget;
if (!widget) return null;
if (widget.name == 'noteList' || widget.name == 'folderList') {
return widget.currentItem;
}
@@ -430,18 +426,14 @@ class AppGui {
}
async processFunctionCommand(cmd) {
if (cmd === 'activate') {
const w = this.widget('mainWindow').focusedWidget;
if (w.name === 'folderList') {
this.widget('noteList').focus();
} else if (w.name === 'noteList' || w.name === 'noteText') {
this.processPromptCommand('edit $n');
}
} else if (cmd === 'delete') {
if (this.widget('folderList').hasFocus) {
const item = this.widget('folderList').selectedJoplinItem;
@@ -462,9 +454,7 @@ class AppGui {
} else {
this.stdout(_('Please select the note or notebook to be deleted first.'));
}
} else if (cmd === 'toggle_console') {
if (!this.consoleIsShown()) {
this.showConsole();
this.minimizeConsole();
@@ -475,22 +465,15 @@ class AppGui {
this.maximizeConsole();
}
}
} else if (cmd === 'toggle_metadata') {
this.toggleNoteMetadata();
} else if (cmd === 'enter_command_line_mode') {
const cmd = await this.widget('statusBar').prompt();
if (!cmd) return;
this.addCommandToConsole(cmd);
await this.processPromptCommand(cmd);
await this.processPromptCommand(cmd);
} else {
throw new Error('Unknown command: ' + cmd);
}
}
@@ -501,7 +484,7 @@ class AppGui {
// this.logger().debug('Got command: ' + cmd);
try {
try {
let note = this.widget('noteList').currentItem;
let folder = this.widget('folderList').currentItem;
let args = splitCommandString(cmd);
@@ -511,7 +494,7 @@ class AppGui {
args[i] = note ? note.id : '';
} else if (args[i] == '$b') {
args[i] = folder ? folder.id : '';
} else if (args[i] == '$c') {
} else if (args[i] == '$c') {
const item = this.activeListItem();
args[i] = item ? item.id : '';
}
@@ -523,7 +506,7 @@ class AppGui {
}
this.widget('console').scrollBottom();
// Invalidate so that the screen is redrawn in case inputting a command has moved
// the GUI up (in particular due to autocompletion), it's moved back to the right position.
this.widget('root').invalidate();
@@ -603,7 +586,7 @@ class AppGui {
async setupResourceServer() {
const linkStyle = chalk.blue.underline;
const noteTextWidget = this.widget('noteText');
const resourceIdRegex = /^:\/[a-f0-9]+$/i
const resourceIdRegex = /^:\/[a-f0-9]+$/i;
const noteLinks = {};
const hasProtocol = function(s, protocols) {
@@ -613,7 +596,7 @@ class AppGui {
if (s.indexOf(protocols[i] + '://') === 0) return true;
}
return false;
}
};
// By default, before the server is started, only the regular
// URLs appear in blue.
@@ -637,7 +620,7 @@ class AppGui {
const link = noteLinks[path];
if (link.type === 'url') {
response.writeHead(302, { 'Location': link.url });
response.writeHead(302, { Location: link.url });
return true;
}
@@ -650,11 +633,13 @@ class AppGui {
if (item.mime) response.setHeader('Content-Type', item.mime);
response.write(await Resource.content(item));
} else if (item.type_ === BaseModel.TYPE_NOTE) {
const html = [`
const html = [
`
<!DOCTYPE html>
<html class="client-nojs" lang="en" dir="ltr">
<head><meta charset="UTF-8"/></head><body>
`];
`,
];
html.push('<pre>' + htmlentities(item.title) + '\n\n' + htmlentities(item.body) + '</pre>');
html.push('</body></html>');
response.write(html.join(''));
@@ -679,7 +664,7 @@ class AppGui {
noteLinks[index] = {
type: 'item',
id: url.substr(2),
};
};
} else if (hasProtocol(url, ['http', 'https', 'file', 'ftp'])) {
noteLinks[index] = {
type: 'url',
@@ -711,7 +696,6 @@ class AppGui {
term.grabInput();
term.on('key', async (name, matches, data) => {
// -------------------------------------------------------------------------
// Handle special shortcuts
// -------------------------------------------------------------------------
@@ -729,13 +713,13 @@ class AppGui {
return;
}
if (name === 'CTRL_C' ) {
if (name === 'CTRL_C') {
const cmd = this.app().currentCommand();
if (!cmd || !cmd.cancellable() || this.commandCancelCalled_) {
this.stdout(_('Press Ctrl+D or type "exit" to exit the application'));
} else {
this.commandCancelCalled_ = true;
await cmd.cancel()
await cmd.cancel();
this.commandCancelCalled_ = false;
}
return;
@@ -744,8 +728,8 @@ class AppGui {
// -------------------------------------------------------------------------
// Build up current shortcut
// -------------------------------------------------------------------------
const now = (new Date()).getTime();
const now = new Date().getTime();
if (now - this.lastShortcutKeyTime_ > 800 || this.isSpecialKey(name)) {
this.currentShortcutKeys_ = [name];
@@ -813,7 +797,6 @@ class AppGui {
process.exit(1);
});
}
}
AppGui.INPUT_MODE_NORMAL = 1;

View File

@@ -1,10 +1,5 @@
const { BaseApplication } = require('lib/BaseApplication');
const { createStore, applyMiddleware } = require('redux');
const { reducer, defaultState } = require('lib/reducer.js');
const { JoplinDatabase } = require('lib/joplin-database.js');
const { Database } = require('lib/database.js');
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
const ResourceService = require('lib/services/ResourceService');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
@@ -12,21 +7,15 @@ 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.js');
const { Logger } = require('lib/logger.js');
const { sprintf } = require('sprintf-js');
const { reg } = require('lib/registry.js');
const { fileExtension } = require('lib/path-utils.js');
const { shim } = require('lib/shim.js');
const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale.js');
const os = require('os');
const { _ } = require('lib/locale.js');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const Cache = require('lib/Cache');
const WelcomeUtils = require('lib/WelcomeUtils');
const RevisionService = require('lib/services/RevisionService');
class Application extends BaseApplication {
constructor() {
super();
@@ -75,7 +64,7 @@ class Application extends BaseApplication {
// const response = await cliUtils.promptMcq(msg, answers);
// if (!response) return null;
return output[response - 1];
// return output[response - 1];
} else {
return output.length ? output[0] : null;
}
@@ -97,10 +86,12 @@ class Application extends BaseApplication {
const parent = options.parent ? options.parent : app().currentFolder();
const ItemClass = BaseItem.itemClass(type);
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) { // Handle it as pattern
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) {
// Handle it as pattern
if (!parent) throw new Error(_('No notebook selected.'));
return await Note.previews(parent.id, { titlePattern: pattern });
} else { // Single item
} else {
// Single item
let item = null;
if (type == BaseModel.TYPE_NOTE) {
if (!parent) throw new Error(_('No notebook has been specified.'));
@@ -126,15 +117,15 @@ class Application extends BaseApplication {
}
setupCommand(cmd) {
cmd.setStdout((text) => {
cmd.setStdout(text => {
return this.stdout(text);
});
cmd.setDispatcher((action) => {
cmd.setDispatcher(action => {
if (this.store()) {
return this.store().dispatch(action);
} else {
return (action) => {};
return action => {};
}
});
@@ -185,9 +176,9 @@ class Application extends BaseApplication {
commands(uiType = null) {
if (!this.allCommandsLoaded_) {
fs.readdirSync(__dirname).forEach((path) => {
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
const ext = fileExtension(path);
if (ext != 'js') return;
let CommandClass = require('./' + path);
@@ -276,19 +267,27 @@ class Application extends BaseApplication {
dummyGui() {
return {
isDummy: () => { return true; },
prompt: (initialText = '', promptString = '', options = null) => { return cliUtils.prompt(initialText, promptString, options); },
isDummy: () => {
return true;
},
prompt: (initialText = '', promptString = '', options = null) => {
return cliUtils.prompt(initialText, promptString, options);
},
showConsole: () => {},
maximizeConsole: () => {},
stdout: (text) => { console.info(text); },
fullScreen: (b=true) => {},
stdout: text => {
console.info(text);
},
fullScreen: (b = true) => {},
exit: () => {},
showModalOverlay: (text) => {},
showModalOverlay: text => {},
hideModalOverlay: () => {},
stdoutMaxWidth: () => { return 100; },
stdoutMaxWidth: () => {
return 100;
},
forceRender: () => {},
termSaveState: () => {},
termRestoreState: (state) => {},
termRestoreState: state => {},
};
}
@@ -300,7 +299,7 @@ class Application extends BaseApplication {
let outException = null;
try {
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
const cmdArgs = cliUtils.makeCommandArgs(this.activeCommand_, argv);
await this.activeCommand_.action(cmdArgs);
} catch (error) {
@@ -316,24 +315,24 @@ class Application extends BaseApplication {
async loadKeymaps() {
const defaultKeyMap = [
{ "keys": [":"], "type": "function", "command": "enter_command_line_mode" },
{ "keys": ["TAB"], "type": "function", "command": "focus_next" },
{ "keys": ["SHIFT_TAB"], "type": "function", "command": "focus_previous" },
{ "keys": ["UP"], "type": "function", "command": "move_up" },
{ "keys": ["DOWN"], "type": "function", "command": "move_down" },
{ "keys": ["PAGE_UP"], "type": "function", "command": "page_up" },
{ "keys": ["PAGE_DOWN"], "type": "function", "command": "page_down" },
{ "keys": ["ENTER"], "type": "function", "command": "activate" },
{ "keys": ["DELETE", "BACKSPACE"], "type": "function", "command": "delete" },
{ "keys": [" "], "command": "todo toggle $n" },
{ "keys": ["tc"], "type": "function", "command": "toggle_console" },
{ "keys": ["tm"], "type": "function", "command": "toggle_metadata" },
{ "keys": ["/"], "type": "prompt", "command": "search \"\"", "cursorPosition": -2 },
{ "keys": ["mn"], "type": "prompt", "command": "mknote \"\"", "cursorPosition": -2 },
{ "keys": ["mt"], "type": "prompt", "command": "mktodo \"\"", "cursorPosition": -2 },
{ "keys": ["mb"], "type": "prompt", "command": "mkbook \"\"", "cursorPosition": -2 },
{ "keys": ["yn"], "type": "prompt", "command": "cp $n \"\"", "cursorPosition": -2 },
{ "keys": ["dn"], "type": "prompt", "command": "mv $n \"\"", "cursorPosition": -2 }
{ keys: [':'], type: 'function', command: 'enter_command_line_mode' },
{ keys: ['TAB'], type: 'function', command: 'focus_next' },
{ keys: ['SHIFT_TAB'], type: 'function', command: 'focus_previous' },
{ keys: ['UP'], type: 'function', command: 'move_up' },
{ keys: ['DOWN'], type: 'function', command: 'move_down' },
{ keys: ['PAGE_UP'], type: 'function', command: 'page_up' },
{ keys: ['PAGE_DOWN'], type: 'function', command: 'page_down' },
{ keys: ['ENTER'], type: 'function', command: 'activate' },
{ keys: ['DELETE', 'BACKSPACE'], type: 'function', command: 'delete' },
{ keys: [' '], command: 'todo toggle $n' },
{ keys: ['tc'], type: 'function', command: 'toggle_console' },
{ keys: ['tm'], type: 'function', command: 'toggle_metadata' },
{ keys: ['/'], type: 'prompt', command: 'search ""', cursorPosition: -2 },
{ keys: ['mn'], type: 'prompt', command: 'mknote ""', cursorPosition: -2 },
{ keys: ['mt'], type: 'prompt', command: 'mktodo ""', cursorPosition: -2 },
{ keys: ['mb'], type: 'prompt', command: 'mkbook ""', cursorPosition: -2 },
{ keys: ['yn'], type: 'prompt', command: 'cp $n ""', cursorPosition: -2 },
{ keys: ['dn'], type: 'prompt', command: 'mv $n ""', cursorPosition: -2 },
];
// Filter the keymap item by command so that items in keymap.json can override
@@ -341,7 +340,7 @@ class Application extends BaseApplication {
const itemsByCommand = {};
for (let i = 0; i < defaultKeyMap.length; i++) {
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i]
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i];
}
const filePath = Setting.value('profileDir') + '/keymap.json';
@@ -374,7 +373,7 @@ class Application extends BaseApplication {
async start(argv) {
argv = await super.start(argv);
cliUtils.setStdout((object) => {
cliUtils.setStdout(object => {
return this.stdout(object);
});
@@ -385,6 +384,8 @@ class Application extends BaseApplication {
this.currentFolder_ = await Folder.load(Setting.value('activeFolderId'));
await this.applySettingsSideEffects();
try {
await this.execCommand(argv);
} catch (error) {
@@ -401,7 +402,8 @@ class Application extends BaseApplication {
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
// https://stackoverflow.com/questions/18050095
process.exit(0);
} else { // Otherwise open the GUI
} else {
// Otherwise open the GUI
this.initRedux();
const keymap = await this.loadKeymaps();
@@ -421,7 +423,7 @@ class Application extends BaseApplication {
const tags = await Tag.allWithNotes();
ResourceService.runInBackground();
RevisionService.instance().runInBackground();
this.dispatch({
@@ -435,7 +437,6 @@ class Application extends BaseApplication {
});
}
}
}
let application_ = null;
@@ -446,4 +447,4 @@ function app() {
return application_;
}
module.exports = { app };
module.exports = { app };

View File

@@ -14,11 +14,11 @@ async function handleAutocompletionPromise(line) {
//should look for commmands it could be
if (words.length == 1) {
if (names.indexOf(words[0]) === -1) {
let x = names.filter((n) => n.indexOf(words[0]) === 0);
let x = names.filter(n => n.indexOf(words[0]) === 0);
if (x.length === 1) {
return x[0] + ' ';
}
return x.length > 0 ? x.map((a) => a + ' ') : line;
return x.length > 0 ? x.map(a => a + ' ') : line;
} else {
return line;
}
@@ -34,9 +34,9 @@ async function handleAutocompletionPromise(line) {
let next = words.length > 1 ? words[words.length - 1] : '';
let l = [];
if (next[0] === '-') {
for (let i = 0; i<metadata.options.length; i++) {
for (let i = 0; i < metadata.options.length; i++) {
const options = metadata.options[i][0].split(' ');
//if there are multiple options then they will be separated by comma and
//if there are multiple options then they will be separated by comma and
//space. The comma should be removed
if (options[0][options[0].length - 1] === ',') {
options[0] = options[0].slice(0, -1);
@@ -55,20 +55,19 @@ async function handleAutocompletionPromise(line) {
if (l.length === 0) {
return line;
}
let ret = l.map(a=>toCommandLine(a));
let ret = l.map(a => toCommandLine(a));
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
return ret;
}
//Complete an argument
//Determine the number of positional arguments by counting the number of
//words that don't start with a - less one for the command name
const positionalArgs = words.filter((a)=>a.indexOf('-') !== 0).length - 1;
const positionalArgs = words.filter(a => a.indexOf('-') !== 0).length - 1;
let cmdUsage = yargParser(metadata.usage)['_'];
cmdUsage.splice(0, 1);
if (cmdUsage.length >= positionalArgs) {
let argName = cmdUsage[positionalArgs - 1];
argName = cliUtils.parseCommandArg(argName).name;
@@ -76,23 +75,23 @@ async function handleAutocompletionPromise(line) {
if (argName == 'note' || argName == 'note-pattern') {
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
l.push(...notes.map((n) => n.title));
l.push(...notes.map(n => n.title));
}
if (argName == 'notebook') {
const folders = await Folder.search({ titlePattern: next + '*' });
l.push(...folders.map((n) => n.title));
l.push(...folders.map(n => n.title));
}
if (argName == 'item') {
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
const folders = await Folder.search({ titlePattern: next + '*' });
l.push(...notes.map((n) => n.title), folders.map((n) => n.title));
l.push(...notes.map(n => n.title), folders.map(n => n.title));
}
if (argName == 'tag') {
let tags = await Tag.search({ titlePattern: next + '*' });
l.push(...tags.map((n) => n.title));
l.push(...tags.map(n => n.title));
}
if (argName == 'file') {
@@ -113,12 +112,11 @@ async function handleAutocompletionPromise(line) {
if (l.length === 1) {
return toCommandLine([...words.slice(0, -1), l[0]]);
} else if (l.length > 1) {
let ret = l.map(a=>toCommandLine(a));
let ret = l.map(a => toCommandLine(a));
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
return ret;
}
return line;
}
function handleAutocompletion(str, callback) {
handleAutocompletionPromise(str).then(function(res) {
@@ -127,19 +125,21 @@ function handleAutocompletion(str, callback) {
}
function toCommandLine(args) {
if (Array.isArray(args)) {
return args.map(function(a) {
if(a.indexOf('"') !== -1 || a.indexOf(' ') !== -1) {
return "'" + a + "'";
} else if (a.indexOf("'") !== -1) {
return '"' + a + '"';
} else {
return a;
}
}).join(' ');
return args
.map(function(a) {
if (a.indexOf('"') !== -1 || a.indexOf(' ') !== -1) {
return '\'' + a + '\'';
} else if (a.indexOf('\'') !== -1) {
return '"' + a + '"';
} else {
return a;
}
})
.join(' ');
} else {
if(args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
return "'" + args + "' ";
} else if (args.indexOf("'") !== -1) {
if (args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
return '\'' + args + '\' ';
} else if (args.indexOf('\'') !== -1) {
return '"' + args + '" ';
} else {
return args + ' ';
@@ -151,9 +151,9 @@ function getArguments(line) {
let inDoubleQuotes = false;
let currentWord = '';
let parsed = [];
for(let i = 0; i<line.length; i++) {
if(line[i] === '"') {
if(inDoubleQuotes) {
for (let i = 0; i < line.length; i++) {
if (line[i] === '"') {
if (inDoubleQuotes) {
inDoubleQuotes = false;
//maybe push word to parsed?
//currentWord += '"';
@@ -161,8 +161,8 @@ function getArguments(line) {
inDoubleQuotes = true;
//currentWord += '"';
}
} else if(line[i] === "'") {
if(inSingleQuotes) {
} else if (line[i] === '\'') {
if (inSingleQuotes) {
inSingleQuotes = false;
//maybe push word to parsed?
//currentWord += "'";
@@ -170,8 +170,7 @@ function getArguments(line) {
inSingleQuotes = true;
//currentWord += "'";
}
} else if (/\s/.test(line[i]) &&
!(inDoubleQuotes || inSingleQuotes)) {
} else if (/\s/.test(line[i]) && !(inDoubleQuotes || inSingleQuotes)) {
if (currentWord !== '') {
parsed.push(currentWord);
currentWord = '';

View File

@@ -2,7 +2,6 @@ const { _ } = require('lib/locale.js');
const { reg } = require('lib/registry.js');
class BaseCommand {
constructor() {
this.stdout_ = null;
this.prompt_ = null;
@@ -93,7 +92,6 @@ class BaseCommand {
logger() {
return reg.logger();
}
}
module.exports = { BaseCommand };
module.exports = { BaseCommand };

View File

@@ -1,7 +1,7 @@
const fs = require('fs-extra');
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
const { fileExtension, dirname } = require('lib/path-utils.js');
const wrap_ = require('word-wrap');
const { _, setLocale, languageCode } = require('lib/locale.js');
const { languageCode } = require('lib/locale.js');
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
@@ -22,14 +22,14 @@ function renderOptions(options) {
let option = options[i];
const flag = option[0];
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
let r = wrap(option[1], indent);
r = r.substr(flag.length + (INDENT + INDENT).length);
r = INDENT + INDENT + flag + r;
output.push(r);
}
return output.join("\n");
return output.join('\n');
}
function renderCommand(cmd) {
@@ -44,14 +44,14 @@ function renderCommand(cmd) {
output.push('');
output.push(optionString);
}
return output.join("\n");
return output.join('\n');
}
function getCommands() {
let output = [];
fs.readdirSync(__dirname).forEach((path) => {
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
const ext = fileExtension(path);
if (ext != 'js') return;
let CommandClass = require('./' + path);
@@ -87,14 +87,14 @@ function getHeader() {
let description = [];
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
description.push("\n\n");
description.push('\n\n');
description.push('The notes can be synchronised with various target including the file system (for example with a network directory) or with Microsoft OneDrive.');
description.push("\n\n");
description.push('\n\n');
description.push('Notes exported from Evenotes via .enex files can be imported into Joplin, including the formatted content, resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.).');
output.push(wrap(description.join(''), INDENT));
return output.join("\n");
return output.join('\n');
}
function getFooter() {
@@ -113,7 +113,7 @@ function getFooter() {
const licenseText = fs.readFileSync(filePath, 'utf8');
output.push(wrap(licenseText, INDENT));
return output.join("\n");
return output.join('\n');
}
async function main() {
@@ -128,12 +128,12 @@ async function main() {
}
const headerText = getHeader();
const commandsText = commandBlocks.join("\n\n");
const commandsText = commandBlocks.join('\n\n');
const footerText = getFooter();
console.info(headerText + "\n\n" + 'USAGE' + "\n\n" + commandsText + "\n\n" + footerText);
console.info(headerText + '\n\n' + 'USAGE' + '\n\n' + commandsText + '\n\n' + footerText);
}
main().catch((error) => {
main().catch(error => {
console.error(error);
});
});

View File

@@ -1,4 +1,4 @@
"use strict"
'use strict';
const fs = require('fs-extra');
const { Logger } = require('lib/logger.js');
@@ -10,7 +10,7 @@ const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting.js');
const { sprintf } = require('sprintf-js');
const exec = require('child_process').exec
const exec = require('child_process').exec;
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled promise rejection', p, 'reason:', reason);
@@ -32,8 +32,8 @@ db.setLogger(dbLogger);
function createClient(id) {
return {
'id': id,
'profileDir': baseDir + '/client' + id,
id: id,
profileDir: baseDir + '/client' + id,
};
}
@@ -72,14 +72,7 @@ function assertEquals(expected, real) {
}
async function clearDatabase() {
await db.transactionExecBatch([
'DELETE FROM folders',
'DELETE FROM notes',
'DELETE FROM tags',
'DELETE FROM note_tags',
'DELETE FROM resources',
'DELETE FROM deleted_items',
]);
await db.transactionExecBatch(['DELETE FROM folders', 'DELETE FROM notes', 'DELETE FROM tags', 'DELETE FROM note_tags', 'DELETE FROM resources', 'DELETE FROM deleted_items']);
}
const testUnits = {};
@@ -101,7 +94,7 @@ testUnits.testFolders = async () => {
folders = await Folder.all();
assertEquals(0, folders.length);
}
};
testUnits.testNotes = async () => {
await execCommand(client, 'mkbook nb1');
@@ -121,16 +114,16 @@ testUnits.testNotes = async () => {
notes = await Note.all();
assertEquals(2, notes.length);
await execCommand(client, "rm -f 'blabla*'");
await execCommand(client, 'rm -f \'blabla*\'');
notes = await Note.all();
assertEquals(2, notes.length);
await execCommand(client, "rm -f 'n*'");
await execCommand(client, 'rm -f \'n*\'');
notes = await Note.all();
assertEquals(0, notes.length);
}
};
testUnits.testCat = async () => {
await execCommand(client, 'mkbook nb1');
@@ -145,7 +138,7 @@ testUnits.testCat = async () => {
r = await execCommand(client, 'cat -v mynote');
assertTrue(r.indexOf(note.id) >= 0);
}
};
testUnits.testConfig = async () => {
await execCommand(client, 'config editor vim');
@@ -159,7 +152,7 @@ testUnits.testConfig = async () => {
let r = await execCommand(client, 'config');
assertTrue(r.indexOf('editor') >= 0);
assertTrue(r.indexOf('subl') >= 0);
}
};
testUnits.testCp = async () => {
await execCommand(client, 'mkbook nb2');
@@ -180,7 +173,7 @@ testUnits.testCp = async () => {
notes = await Note.previews(f2.id);
assertEquals(1, notes.length);
assertEquals(notesF1[0].title, notes[0].title);
}
};
testUnits.testLs = async () => {
await execCommand(client, 'mkbook nb1');
@@ -190,7 +183,7 @@ testUnits.testLs = async () => {
assertTrue(r.indexOf('note1') >= 0);
assertTrue(r.indexOf('note2') >= 0);
}
};
testUnits.testMv = async () => {
await execCommand(client, 'mkbook nb2');
@@ -210,14 +203,14 @@ testUnits.testMv = async () => {
await execCommand(client, 'mknote note2');
await execCommand(client, 'mknote note3');
await execCommand(client, 'mknote blabla');
await execCommand(client, "mv 'note*' nb2");
await execCommand(client, 'mv \'note*\' nb2');
notes1 = await Note.previews(f1.id);
notes2 = await Note.previews(f2.id);
assertEquals(1, notes1.length);
assertEquals(4, notes2.length);
}
};
async function main(argv) {
await fs.remove(baseDir);
@@ -243,7 +236,7 @@ async function main(argv) {
}
}
main(process.argv).catch((error) => {
main(process.argv).catch(error => {
console.info('');
logger.error(error);
});
});

View File

@@ -16,7 +16,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
for (let j = 0; j < row.length; j++) {
let item = row[j];
let width = item ? item.toString().length : 0;
@@ -26,7 +26,6 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
}
}
let lines = [];
for (let row = 0; row < rows.length; row++) {
let line = [];
for (let col = 0; col < colWidths.length; col++) {
@@ -37,7 +36,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
}
logFunction(line.join(' '));
}
}
};
cliUtils.parseFlags = function(flags) {
let output = {};
@@ -56,7 +55,7 @@ cliUtils.parseFlags = function(flags) {
}
}
return output;
}
};
cliUtils.parseCommandArg = function(arg) {
if (arg.length <= 2) throw new Error('Invalid command arg: ' + arg);
@@ -72,7 +71,7 @@ cliUtils.parseCommandArg = function(arg) {
} else {
throw new Error('Invalid command arg: ' + arg);
}
}
};
cliUtils.makeCommandArgs = function(cmd, argv) {
let cmdUsage = cmd.usage();
@@ -85,7 +84,6 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
for (let i = 0; i < options.length; i++) {
if (options[i].length != 2) throw new Error('Invalid options: ' + options[i]);
let flags = options[i][0];
let text = options[i][1];
flags = cliUtils.parseFlags(flags);
@@ -125,27 +123,27 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
output.options = argOptions;
return output;
}
};
cliUtils.promptMcq = function(message, answers) {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
message += "\n\n";
message += '\n\n';
for (let n in answers) {
if (!answers.hasOwnProperty(n)) continue;
message += _('%s: %s', n, answers[n]) + "\n";
message += _('%s: %s', n, answers[n]) + '\n';
}
message += "\n";
message += '\n';
message += _('Your choice: ');
return new Promise((resolve, reject) => {
rl.question(message, (answer) => {
rl.question(message, answer => {
rl.close();
if (!(answer in answers)) {
@@ -156,7 +154,7 @@ cliUtils.promptMcq = function(message, answers) {
resolve(answer);
});
});
}
};
cliUtils.promptConfirm = function(message, answers = null) {
if (!answers) answers = [_('Y'), _('n')];
@@ -164,19 +162,19 @@ cliUtils.promptConfirm = function(message, answers = null) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
message += ' (' + answers.join('/') + ')';
return new Promise((resolve, reject) => {
rl.question(message + ' ', (answer) => {
rl.question(message + ' ', answer => {
const ok = !answer || answer.toLowerCase() == answers[0].toLowerCase();
rl.close();
resolve(ok);
});
});
}
};
// Note: initialText is there to have the same signature as statusBar.prompt() so that
// it can be a drop-in replacement, however initialText is not used (and cannot be
@@ -189,10 +187,9 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
const mutableStdout = new Writable({
write: function(chunk, encoding, callback) {
if (!this.muted)
process.stdout.write(chunk, encoding);
if (!this.muted) process.stdout.write(chunk, encoding);
callback();
}
},
});
const rl = readline.createInterface({
@@ -204,15 +201,15 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
return new Promise((resolve, reject) => {
mutableStdout.muted = false;
rl.question(promptString, (answer) => {
rl.question(promptString, answer => {
rl.close();
if (!!options.secure) this.stdout_('');
if (options.secure) this.stdout_('');
resolve(answer);
});
mutableStdout.muted = !!options.secure;
});
}
};
let redrawStarted_ = false;
let redrawLastLog_ = null;
@@ -220,7 +217,7 @@ let redrawLastUpdateTime_ = 0;
cliUtils.setStdout = function(v) {
this.stdout_ = v;
}
};
cliUtils.redraw = function(s) {
const now = time.unixMs();
@@ -233,8 +230,8 @@ cliUtils.redraw = function(s) {
redrawLastLog_ = s;
}
redrawStarted_ = true;
}
redrawStarted_ = true;
};
cliUtils.redrawDone = function() {
if (!redrawStarted_) return;
@@ -245,6 +242,6 @@ cliUtils.redrawDone = function() {
redrawLastLog_ = null;
redrawStarted_ = false;
}
};
module.exports = { cliUtils };
module.exports = { cliUtils };

View File

@@ -1,19 +1,12 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
const EncryptionService = require('lib/services/EncryptionService');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem');
const BaseModel = require('lib/BaseModel');
const Setting = require('lib/models/Setting.js');
const { toTitleCase } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const markdownUtils = require('lib/markdownUtils');
const { Database } = require('lib/database.js');
class Command extends BaseCommand {
usage() {
return 'apidoc';
}
@@ -23,15 +16,19 @@ class Command extends BaseCommand {
}
createPropertiesTable(tableFields) {
const headers = [
{ name: 'name', label: 'Name' },
{ name: 'type', label: 'Type', filter: (value) => {
return Database.enumName('fieldType', value);
}},
{ name: 'description', label: 'Description' },
];
return markdownUtils.createMarkdownTable(headers, tableFields);
const headers = [
{ name: 'name', label: 'Name' },
{
name: 'type',
label: 'Type',
filter: value => {
return Database.enumName('fieldType', value);
},
},
{ name: 'description', label: 'Description' },
];
return markdownUtils.createMarkdownTable(headers, tableFields);
}
async action(args) {
@@ -70,8 +67,8 @@ class Command extends BaseCommand {
lines.push('}');
lines.push('```');
lines.push('');
lines.push('# Authorisation')
lines.push('# Authorisation');
lines.push('');
lines.push('To prevent unauthorised applications from accessing the API, the calls must be authentified. To do so, you must provide a token as a query parameter for each API call. You can get this token from the Joplin desktop application, on the Web Clipper Options screen.');
lines.push('');
@@ -293,7 +290,6 @@ class Command extends BaseCommand {
this.stdout(lines.join('\n'));
}
}
module.exports = Command;

View File

@@ -3,10 +3,8 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'attach <note> <file>';
}
@@ -26,7 +24,6 @@ class Command extends BaseCommand {
await shim.attachFileToNote(note, localFilePath);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
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() {
return 'cat <note>';
}
@@ -16,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-v, --verbose', _('Displays the complete information about note.')],
];
return [['-v, --verbose', _('Displays the complete information about note.')]];
}
async action(args) {
@@ -30,10 +26,13 @@ class Command extends BaseCommand {
const content = args.options.verbose ? await Note.serialize(item) : await Note.serializeForEdit(item);
this.stdout(content);
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,25 +4,22 @@ const { app } = require('./app.js');
const Setting = require('lib/models/Setting.js');
class Command extends BaseCommand {
usage() {
return 'config [name] [value]';
}
description() {
return _("Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.");
return _('Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.');
}
options() {
return [
['-v, --verbose', _('Also displays unset and hidden config variables.')],
];
return [['-v, --verbose', _('Also displays unset and hidden config variables.')]];
}
async action(args) {
const verbose = args.options.verbose;
const renderKeyValue = (name) => {
const renderKeyValue = name => {
const md = Setting.settingMetadata(name);
let value = Setting.value(name);
if (typeof value === 'object' || Array.isArray(value)) value = JSON.stringify(value);
@@ -33,7 +30,7 @@ class Command extends BaseCommand {
} else {
return _('%s = %s', name, value);
}
}
};
if (!args.name && !args.value) {
let keys = Setting.keys(!verbose, 'cli');
@@ -43,15 +40,23 @@ class Command extends BaseCommand {
if (!verbose && !value) continue;
this.stdout(renderKeyValue(keys[i]));
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
return;
}
if (args.name && !args.value) {
this.stdout(renderKeyValue(args.name));
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
return;
}
@@ -64,7 +69,6 @@ class Command extends BaseCommand {
await Setting.saveAll();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
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() {
return 'cp <note> [notebook]';
}
@@ -33,7 +31,6 @@ class Command extends BaseCommand {
Note.updateGeolocation(newNote.id);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
return 'done <note>';
}
@@ -35,7 +33,6 @@ class Command extends BaseCommand {
async action(args) {
await Command.handleAction(this, args, true);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,12 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
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() {
return 'dump';
}
@@ -35,10 +32,9 @@ class Command extends BaseCommand {
}
items = items.concat(tags);
this.stdout(JSON.stringify(items));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,9 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
const EncryptionService = require('lib/services/EncryptionService');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem');
const Setting = require('lib/models/Setting.js');
const { shim } = require('lib/shim');
@@ -12,7 +10,6 @@ const imageType = require('image-type');
const readChunk = require('read-chunk');
class Command extends BaseCommand {
usage() {
return 'e2ee <command> [path]';
}
@@ -35,7 +32,7 @@ class Command extends BaseCommand {
const options = args.options;
const askForMasterKey = async (error) => {
const askForMasterKey = async error => {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
@@ -45,7 +42,7 @@ class Command extends BaseCommand {
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
return true;
}
};
if (args.command === 'enable') {
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
@@ -100,7 +97,7 @@ class Command extends BaseCommand {
while (true) {
try {
const outputDir = options.output ? options.output : require('os').tmpdir();
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
await EncryptionService.instance().decryptFile(args.path, outFile);
const buffer = await readChunk(outFile, 0, 64);
const detectedType = imageType(buffer);
@@ -128,19 +125,17 @@ class Command extends BaseCommand {
if (args.command === 'target-status') {
const fs = require('fs-extra');
const pathUtils = require('lib/path-utils.js');
const fsDriver = new (require('lib/fs-driver-node.js').FsDriverNode)();
const targetPath = args.path;
if (!targetPath) throw new Error('Please specify the sync target path.');
const dirPaths = function(targetPath) {
let paths = [];
fs.readdirSync(targetPath).forEach((path) => {
fs.readdirSync(targetPath).forEach(path => {
paths.push(path);
});
return paths;
}
};
let itemCount = 0;
let resourceCount = 0;
@@ -224,7 +219,6 @@ class Command extends BaseCommand {
return;
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,15 +3,11 @@ const { BaseCommand } = require('./base-command.js');
const { uuid } = require('lib/uuid.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
return 'edit <note>';
}
@@ -21,20 +17,19 @@ class Command extends BaseCommand {
}
async action(args) {
let watcher = null;
let tempFilePath = null;
const onFinishedEditing = async () => {
if (tempFilePath) fs.removeSync(tempFilePath);
}
};
const textEditorPath = () => {
if (Setting.value('editor')) return Setting.value('editor');
if (process.env.EDITOR) return process.env.EDITOR;
throw new Error(_('No text editor is defined. Please set it using `config editor <editor-path>`'));
}
};
try {
try {
// -------------------------------------------------------------------------
// Load note or create it if it doesn't exist
// -------------------------------------------------------------------------
@@ -76,18 +71,30 @@ class Command extends BaseCommand {
this.logger().info('Disabling fullscreen...');
app().gui().showModalOverlay(_('Starting to edit note. Close the editor to get back to the prompt.'));
await app().gui().forceRender();
const termState = app().gui().termSaveState();
app()
.gui()
.showModalOverlay(_('Starting to edit note. Close the editor to get back to the prompt.'));
await app()
.gui()
.forceRender();
const termState = app()
.gui()
.termSaveState();
const spawnSync = require('child_process').spawnSync;
const spawnSync = require('child_process').spawnSync;
const result = spawnSync(editorPath, editorArgs, { stdio: 'inherit' });
if (result.error) this.stdout(_('Error opening note in editor: %s', result.error.message));
app().gui().termRestoreState(termState);
app().gui().hideModalOverlay();
app().gui().forceRender();
app()
.gui()
.termRestoreState(termState);
app()
.gui()
.hideModalOverlay();
app()
.gui()
.forceRender();
// -------------------------------------------------------------------------
// Save the note and clean up
@@ -107,13 +114,11 @@ class Command extends BaseCommand {
});
await onFinishedEditing();
} catch(error) {
} catch (error) {
await onFinishedEditing();
throw error;
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,6 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
class Command extends BaseCommand {
usage() {
return 'exit';
}
@@ -19,7 +18,6 @@ class Command extends BaseCommand {
async action(args) {
await app().exit();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,13 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { Database } = require('lib/database.js');
const { app } = require('./app.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'export-sync-status';
}
@@ -23,14 +20,17 @@ class Command extends BaseCommand {
async action(args) {
const service = new ReportService();
const csv = await service.basicItemList({ format: 'csv' });
const filePath = Setting.value('profileDir') + '/syncReport-' + (new Date()).getTime() + '.csv';
const filePath = Setting.value('profileDir') + '/syncReport-' + new Date().getTime() + '.csv';
await fs.writeFileSync(filePath, csv);
this.stdout('Sync status exported to ' + filePath);
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const InteropService = require('lib/services/InteropService.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { reg } = require('lib/registry.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'export <path>';
}
@@ -19,17 +15,14 @@ class Command extends BaseCommand {
options() {
const service = new InteropService();
const formats = service.modules()
const formats = service
.modules()
.filter(m => m.type === 'exporter')
.map(m => m.format + (m.description ? ' (' + m.description + ')' : ''));
return [
['--format <format>', _('Destination format: %s', formats.join(', '))],
['--note <note>', _('Exports only the given note.')],
['--notebook <notebook>', _('Exports only the given notebook.')],
];
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
}
async action(args) {
let exportOptions = {};
exportOptions.path = args.path;
@@ -37,25 +30,20 @@ class Command extends BaseCommand {
exportOptions.format = args.options.format ? args.options.format : 'jex';
if (args.options.note) {
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
exportOptions.sourceNoteIds = notes.map((n) => n.id);
exportOptions.sourceNoteIds = notes.map(n => n.id);
} else if (args.options.notebook) {
const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook);
if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook));
exportOptions.sourceFolderIds = folders.map((n) => n.id);
exportOptions.sourceFolderIds = folders.map(n => n.id);
}
const service = new InteropService();
const result = await service.export(exportOptions);
result.warnings.map((w) => this.stdout(w));
result.warnings.map(w => this.stdout(w));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
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() {
return 'geoloc <note>';
}
@@ -23,9 +21,10 @@ class Command extends BaseCommand {
const url = Note.geolocationUrl(item);
this.stdout(url);
app().gui().showConsole();
app()
.gui()
.showConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { renderCommandHelp } = require('./help-utils.js');
const { Database } = require('lib/database.js');
const Setting = require('lib/models/Setting.js');
const { wrap } = require('lib/string-utils.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'help [command]';
}
@@ -28,7 +24,7 @@ class Command extends BaseCommand {
output.push(command);
}
output.sort((a, b) => a.name() < b.name() ? -1 : +1);
output.sort((a, b) => (a.name() < b.name() ? -1 : +1));
return output;
}
@@ -40,31 +36,37 @@ class Command extends BaseCommand {
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
this.stdout('');
if (app().gui().isDummy()) {
if (
app()
.gui()
.isDummy()
) {
throw new Error(_('Shortcuts are not available in CLI mode.'));
}
const keymap = app().gui().keymap();
const keymap = app()
.gui()
.keymap();
let rows = [];
for (let i = 0; i < keymap.length; i++) {
const item = keymap[i];
const keys = item.keys.map((k) => k === ' ' ? '(SPACE)' : k);
const keys = item.keys.map(k => (k === ' ' ? '(SPACE)' : k));
rows.push([keys.join(', '), item.command]);
}
cliUtils.printArray(this.stdout.bind(this), rows);
} else if (args.command === 'all') {
const commands = this.allCommands();
const output = commands.map((c) => renderCommandHelp(c));
const output = commands.map(c => renderCommandHelp(c));
this.stdout(output.join('\n\n'));
} else if (args.command) {
const command = app().findCommandByName(args['command']);
if (!command) throw new Error(_('Cannot find "%s".', args.command));
this.stdout(renderCommandHelp(command, stdoutWidth));
} else {
const commandNames = this.allCommands().map((a) => a.name());
const commandNames = this.allCommands().map(a => a.name());
this.stdout(_('Type `help [command]` for more information about a command; or type `help all` for the complete usage information.'));
this.stdout('');
@@ -82,10 +84,13 @@ class Command extends BaseCommand {
this.stdout(_('For the list of keyboard shortcuts and config options, type `help keymap`'));
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,17 +1,11 @@
const { BaseCommand } = require('./base-command.js');
const InteropService = require('lib/services/InteropService.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { filename, basename, fileExtension } = require('lib/path-utils.js');
const { importEnex } = require('lib/import-enex');
const { cliUtils } = require('./cli-utils.js');
const { reg } = require('lib/registry.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'import <path> [notebook]';
}
@@ -22,14 +16,14 @@ class Command extends BaseCommand {
options() {
const service = new InteropService();
const formats = service.modules().filter(m => m.type === 'importer').map(m => m.format);
const formats = service
.modules()
.filter(m => m.type === 'importer')
.map(m => m.format);
return [
['--format <format>', _('Source format: %s', (['auto'].concat(formats)).join(', '))],
['-f, --force', _('Do not ask for confirmation.')],
];
return [['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))], ['-f, --force', _('Do not ask for confirmation.')]];
}
async action(args) {
let folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
@@ -44,7 +38,7 @@ class Command extends BaseCommand {
// onProgress/onError supported by Enex import only
importOptions.onProgress = (progressState) => {
importOptions.onProgress = progressState => {
let line = [];
line.push(_('Found: %d.', progressState.loaded));
line.push(_('Created: %d.', progressState.created));
@@ -56,20 +50,21 @@ class Command extends BaseCommand {
cliUtils.redraw(lastProgress);
};
importOptions.onError = (error) => {
importOptions.onError = error => {
let s = error.trace ? error.trace : error.toString();
this.stdout(s);
};
app().gui().showConsole();
app()
.gui()
.showConsole();
this.stdout(_('Importing notes...'));
const service = new InteropService();
const result = await service.import(importOptions);
result.warnings.map((w) => this.stdout(w));
result.warnings.map(w => this.stdout(w));
cliUtils.redrawDone();
if (lastProgress) this.stdout(_('The notes have been imported: %s', lastProgress));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -10,7 +10,6 @@ const { time } = require('lib/time-utils.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'ls [note-pattern]';
}
@@ -24,14 +23,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-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 `-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')],
];
return [['-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 `-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')]];
}
async action(args) {
@@ -105,7 +97,7 @@ class Command extends BaseCommand {
if (hasTodos) {
if (item.is_todo) {
row.push(sprintf('[%s]', !!item.todo_completed ? 'X' : ' '));
row.push(sprintf('[%s]', item.todo_completed ? 'X' : ' '));
} else {
row.push(' ');
}
@@ -118,9 +110,7 @@ class Command extends BaseCommand {
cliUtils.printArray(this.stdout.bind(this), rows);
}
}
}
module.exports = Command;

View File

@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const Folder = require('lib/models/Folder.js');
const { reg } = require('lib/registry.js');
class Command extends BaseCommand {
usage() {
return 'mkbook <new-notebook>';
}
@@ -15,10 +13,9 @@ class Command extends BaseCommand {
}
async action(args) {
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
app().switchCurrentFolder(folder);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mknote <new-note>';
}
@@ -26,7 +25,6 @@ class Command extends BaseCommand {
app().switchCurrentFolder(app().currentFolder());
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mktodo <new-todo>';
}
@@ -27,7 +26,6 @@ class Command extends BaseCommand {
app().switchCurrentFolder(app().currentFolder());
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mv <note> [notebook]';
}
@@ -18,7 +17,7 @@ class Command extends BaseCommand {
async action(args) {
const pattern = args['note'];
const destination = args['notebook'];
const folder = await Folder.loadByField('title', destination);
if (!folder) throw new Error(_('Cannot find "%s".', destination));
@@ -29,7 +28,6 @@ class Command extends BaseCommand {
await Note.moveToFolder(notes[i].id, folder.id);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'ren <item> <name>';
}
@@ -35,7 +34,6 @@ class Command extends BaseCommand {
await Note.save(newItem);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseItem = require('lib/models/BaseItem.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'rmbook <notebook>';
}
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-f, --force', _('Deletes the notebook without asking for confirmation.')],
];
return [['-f, --force', _('Deletes the notebook without asking for confirmation.')]];
}
async action(args) {
@@ -34,7 +28,6 @@ class Command extends BaseCommand {
await Folder.delete(folder.id);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseItem = require('lib/models/BaseItem.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'rmnote <note-pattern>';
}
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-f, --force', _('Deletes the notes without asking for confirmation.')],
];
return [['-f, --force', _('Deletes the notes without asking for confirmation.')]];
}
async action(args) {
@@ -32,10 +26,9 @@ class Command extends BaseCommand {
const ok = force ? true : await this.prompt(notes.length > 1 ? _('%d notes match this pattern. Delete them?', notes.length) : _('Delete note?'), { booleanAnswerDefault: 'n' });
if (!ok) return;
let ids = notes.map((n) => n.id);
let ids = notes.map(n => n.id);
await Note.batchDelete(ids);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,15 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { sprintf } = require('sprintf-js');
const { time } = require('lib/time-utils.js');
const { uuid } = require('lib/uuid.js');
class Command extends BaseCommand {
usage() {
return 'search <pattern> [notebook]';
}
@@ -50,7 +45,6 @@ class Command extends BaseCommand {
id: searchId,
});
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -0,0 +1,57 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('lib/locale.js');
const Setting = require('lib/models/Setting.js');
const { Logger } = require('lib/logger.js');
const { shim } = require('lib/shim');
class Command extends BaseCommand {
usage() {
return 'server <command>';
}
description() {
return _('Start, stop or check the API server. To specify on which port it should run, set the api.port config variable. Commands are (%s).', ['start', 'stop', 'status'].join('|')) + ' This is an experimental feature - use at your own risks! It is recommended that the server runs off its own separate profile so that no two CLI instances access that profile at the same time. Use --profile to specify the profile path.';
}
async action(args) {
const command = args.command;
const ClipperServer = require('lib/ClipperServer');
const stdoutFn = (s) => this.stdout(s);
const clipperLogger = new Logger();
clipperLogger.addTarget('file', { path: Setting.value('profileDir') + '/log-clipper.txt' });
clipperLogger.addTarget('console', { console: {
info: stdoutFn,
warn: stdoutFn,
error: stdoutFn,
}});
ClipperServer.instance().setDispatch(action => {});
ClipperServer.instance().setLogger(clipperLogger);
const pidPath = Setting.value('profileDir') + '/clipper-pid.txt';
const runningOnPort = await ClipperServer.instance().isRunning();
if (command === 'start') {
if (runningOnPort) {
this.stdout(_('Server is already running on port %d', runningOnPort));
} else {
await shim.fsDriver().writeFile(pidPath, process.pid.toString(), 'utf-8');
await ClipperServer.instance().start(); // Never exit
}
} else if (command === 'status') {
this.stdout(runningOnPort ? _('Server is running on port %d', runningOnPort) : _('Server is not running.'));
} else if (command === 'stop') {
if (!runningOnPort) {
this.stdout(_('Server is not running.'));
return;
}
const pid = await shim.fsDriver().readFile(pidPath);
if (!pid) return;
process.kill(pid, 'SIGTERM');
}
}
}
module.exports = Command;

View File

@@ -3,12 +3,9 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const { Database } = require('lib/database.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseItem = require('lib/models/BaseItem.js');
class Command extends BaseCommand {
usage() {
return 'set <note> <name> [value]';
}
@@ -45,7 +42,6 @@ class Command extends BaseCommand {
await Note.save(newNote);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,12 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { Database } = require('lib/database.js');
const { app } = require('./app.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
class Command extends BaseCommand {
usage() {
return 'status';
}
@@ -34,10 +32,13 @@ class Command extends BaseCommand {
}
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,6 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { OneDriveApiNodeUtils } = require('./onedrive-api-node-utils.js');
const Setting = require('lib/models/Setting.js');
const BaseItem = require('lib/models/BaseItem.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const { Synchronizer } = require('lib/synchronizer.js');
const { reg } = require('lib/registry.js');
@@ -14,7 +13,6 @@ const fs = require('fs-extra');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
class Command extends BaseCommand {
constructor() {
super();
this.syncTargetId_ = null;
@@ -31,9 +29,7 @@ class Command extends BaseCommand {
}
options() {
return [
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
];
return [['--target <target>', _('Sync to provided target (defaults to sync.target config value)')]];
}
static lockFile(filePath) {
@@ -66,13 +62,16 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(this.syncTargetId_);
const syncTargetMd = SyncTargetRegistry.idToMetadata(this.syncTargetId_);
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) { // OneDrive
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) {
// OneDrive
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
const auth = await this.oneDriveApiUtils_.oauthDance({
log: (...s) => { return this.stdout(...s); }
log: (...s) => {
return this.stdout(...s);
},
});
this.oneDriveApiUtils_ = null;
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', auth ? JSON.stringify(auth) : null);
if (!auth) {
this.stdout(_('Authentication was not completed (did not receive an authentication token).'));
@@ -80,7 +79,8 @@ class Command extends BaseCommand {
}
return true;
} else if (syncTargetMd.name === 'dropbox') { // Dropbox
} else if (syncTargetMd.name === 'dropbox') {
// Dropbox
const api = await syncTarget.api();
const loginUrl = api.loginUrl();
this.stdout(_('To allow Joplin to synchronise with Dropbox, please follow the steps below:'));
@@ -118,7 +118,7 @@ class Command extends BaseCommand {
// Lock is unique per profile/database
const lockFilePath = require('os').tmpdir() + '/synclock_' + md5(escape(Setting.value('profileDir'))); // https://github.com/pvorb/node-md5/issues/41
if (!await fs.pathExists(lockFilePath)) await fs.writeFile(lockFilePath, 'synclock');
if (!(await fs.pathExists(lockFilePath))) await fs.writeFile(lockFilePath, 'synclock');
try {
if (await Command.isLocked(lockFilePath)) throw new Error(_('Synchronisation is already in progress.'));
@@ -147,22 +147,26 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(this.syncTargetId_);
if (!await syncTarget.isAuthenticated()) {
app().gui().showConsole();
app().gui().maximizeConsole();
if (!(await syncTarget.isAuthenticated())) {
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
const authDone = await this.doAuth();
if (!authDone) return cleanUp();
}
const sync = await syncTarget.synchronizer();
let options = {
onProgress: (report) => {
onProgress: report => {
let lines = Synchronizer.reportToLines(report);
if (lines.length) cliUtils.redraw(lines.join(' '));
},
onMessage: (msg) => {
onMessage: msg => {
cliUtils.redrawDone();
this.stdout(msg);
},
@@ -237,7 +241,6 @@ class Command extends BaseCommand {
cancellable() {
return true;
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -6,7 +6,6 @@ const BaseModel = require('lib/BaseModel.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
return 'tag <tag-command> [tag] [note]';
}
@@ -16,9 +15,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
];
return [['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')]];
}
async action(args) {
@@ -50,7 +47,7 @@ class Command extends BaseCommand {
} else if (command == 'list') {
if (tag) {
let notes = await Tag.notes(tag.id);
notes.map((note) => {
notes.map(note => {
let line = '';
if (options.long) {
line += BaseModel.shortId(note.id);
@@ -61,7 +58,7 @@ class Command extends BaseCommand {
if (note.is_todo) {
line += '[';
if (note.todo_completed) {
line += 'X';
line += 'X';
} else {
line += ' ';
}
@@ -74,13 +71,14 @@ class Command extends BaseCommand {
});
} else {
let tags = await Tag.all();
tags.map((tag) => { this.stdout(tag.title); });
tags.map(tag => {
this.stdout(tag.title);
});
}
} else {
throw new Error(_('Invalid command: "%s"', command));
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
return 'todo <todo-command> <note-pattern>';
}
@@ -39,12 +37,11 @@ class Command extends BaseCommand {
}
} else if (action == 'clear') {
toSave.is_todo = 0;
}
}
await Note.save(toSave);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,15 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
const CommandDone = require('./command-done.js');
class Command extends BaseCommand {
usage() {
return 'undone <note>';
}
@@ -21,7 +15,6 @@ class Command extends BaseCommand {
async action(args) {
await CommandDone.handleAction(this, args, false);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
class Command extends BaseCommand {
usage() {
return 'use <notebook>';
}
@@ -14,10 +12,6 @@ class Command extends BaseCommand {
return _('Switches to [notebook] - all further operations will happen within this notebook.');
}
autocomplete() {
return { data: autocompleteFolders };
}
compatibleUis() {
return ['cli'];
}
@@ -27,7 +21,6 @@ class Command extends BaseCommand {
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
app().switchCurrentFolder(folder);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,6 @@ const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
class Command extends BaseCommand {
usage() {
return 'version';
}
@@ -16,7 +15,6 @@ class Command extends BaseCommand {
const p = require('./package.json');
this.stdout(_('%s %s (%s)', p.name, p.version, Setting.value('env')));
}
}
module.exports = Command;
module.exports = Command;

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,6 @@
const TextWidget = require('tkwidgets/TextWidget.js');
class ConsoleWidget extends TextWidget {
constructor() {
super();
this.lines_ = [];
@@ -16,7 +15,7 @@ class ConsoleWidget extends TextWidget {
}
get lastLine() {
return this.lines_.length ? this.lines_[this.lines_.length-1] : '';
return this.lines_.length ? this.lines_[this.lines_.length - 1] : '';
}
addLine(line) {
@@ -40,13 +39,12 @@ class ConsoleWidget extends TextWidget {
if (this.lines_.length > this.maxLines_) {
this.lines_.splice(0, this.lines_.length - this.maxLines_);
}
this.text = this.lines_.join("\n");
this.text = this.lines_.join('\n');
this.updateText_ = false;
}
super.render();
}
}
module.exports = ConsoleWidget;
module.exports = ConsoleWidget;

View File

@@ -5,7 +5,6 @@ const ListWidget = require('tkwidgets/ListWidget.js');
const _ = require('lib/locale.js')._;
class FolderListWidget extends ListWidget {
constructor() {
super();
@@ -20,7 +19,7 @@ class FolderListWidget extends ListWidget {
this.updateItems_ = false;
this.trimItemTitle = false;
this.itemRenderer = (item) => {
this.itemRenderer = item => {
let output = [];
if (item === '-') {
output.push('-'.repeat(this.innerWidth));
@@ -32,7 +31,7 @@ class FolderListWidget extends ListWidget {
output.push(_('Search:'));
output.push(item.title);
}
return output.join(' ');
};
}
@@ -45,7 +44,6 @@ class FolderListWidget extends ListWidget {
output++;
folderId = folder.parent_id;
}
throw new Error('unreachable');
}
get selectedFolderId() {
@@ -54,7 +52,7 @@ class FolderListWidget extends ListWidget {
set selectedFolderId(v) {
this.selectedFolderId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -64,7 +62,7 @@ class FolderListWidget extends ListWidget {
set selectedSearchId(v) {
this.selectedSearchId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -74,7 +72,7 @@ class FolderListWidget extends ListWidget {
set selectedTagId(v) {
this.selectedTagId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -84,7 +82,7 @@ class FolderListWidget extends ListWidget {
set notesParentType(v) {
this.notesParentType_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -95,7 +93,7 @@ class FolderListWidget extends ListWidget {
set searches(v) {
this.searches_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -106,7 +104,7 @@ class FolderListWidget extends ListWidget {
set tags(v) {
this.tags_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -117,7 +115,7 @@ class FolderListWidget extends ListWidget {
set folders(v) {
this.folders_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -128,7 +126,7 @@ class FolderListWidget extends ListWidget {
}
return false;
}
render() {
if (this.updateItems_) {
this.logger().debug('Rebuilding items...', this.notesParentType, this.selectedJoplinItemId, this.selectedSearchId);
@@ -136,7 +134,7 @@ class FolderListWidget extends ListWidget {
const previousParentType = this.notesParentType;
let newItems = [];
const orderFolders = (parentId) => {
const orderFolders = parentId => {
for (let i = 0; i < this.folders.length; i++) {
const f = this.folders[i];
const folderParentId = f.parent_id ? f.parent_id : '';
@@ -145,7 +143,7 @@ class FolderListWidget extends ListWidget {
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
}
}
}
};
orderFolders('');
@@ -162,7 +160,7 @@ class FolderListWidget extends ListWidget {
this.items = newItems;
this.notesParentType = previousParentType;
this.updateIndexFromSelectedItemId(wasSelectedItemId)
this.updateIndexFromSelectedItemId(wasSelectedItemId);
this.updateItems_ = false;
}
@@ -188,7 +186,6 @@ class FolderListWidget extends ListWidget {
const index = this.itemIndexByKey('id', itemId);
this.currentIndex = index >= 0 ? index : 0;
}
}
module.exports = FolderListWidget;
module.exports = FolderListWidget;

View File

@@ -2,14 +2,13 @@ const Note = require('lib/models/Note.js');
const ListWidget = require('tkwidgets/ListWidget.js');
class NoteListWidget extends ListWidget {
constructor() {
super();
this.selectedNoteId_ = 0;
this.updateIndexFromSelectedNoteId_ = false;
this.itemRenderer = (note) => {
this.itemRenderer = note => {
let label = Note.displayTitle(note); // + ' ' + note.id;
if (note.is_todo) {
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
@@ -32,7 +31,6 @@ class NoteListWidget extends ListWidget {
super.render();
}
}
module.exports = NoteListWidget;
module.exports = NoteListWidget;

View File

@@ -2,7 +2,6 @@ const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
class NoteMetadataWidget extends TextWidget {
constructor() {
super();
this.noteId_ = 0;
@@ -30,7 +29,6 @@ class NoteMetadataWidget extends TextWidget {
this.text = this.note_ ? await Note.minimalSerializeForDisplay(this.note_) : '';
}
}
}
module.exports = NoteMetadataWidget;
module.exports = NoteMetadataWidget;

View File

@@ -3,7 +3,6 @@ const TextWidget = require('tkwidgets/TextWidget.js');
const { _ } = require('lib/locale.js');
class NoteWidget extends TextWidget {
constructor() {
super();
this.noteId_ = 0;
@@ -44,11 +43,11 @@ class NoteWidget extends TextWidget {
} else if (this.noteId_) {
this.doAsync('loadNote', async () => {
this.note_ = await Note.load(this.noteId_);
if (this.note_ && this.note_.encryption_applied) {
this.text = _('One or more items are currently encrypted and you may need to supply a master password. To do so please type `e2ee decrypt`. If you have already supplied the password, the encrypted items are being decrypted in the background and will be available soon.');
} else {
this.text = this.note_ ? this.note_.title + "\n\n" + this.note_.body : '';
this.text = this.note_ ? this.note_.title + '\n\n' + this.note_.body : '';
}
if (this.lastLoadedNoteId_ !== this.noteId_) this.scrollTop = 0;
@@ -59,7 +58,6 @@ class NoteWidget extends TextWidget {
this.scrollTop = 0;
}
}
}
module.exports = NoteWidget;
module.exports = NoteWidget;

View File

@@ -5,7 +5,6 @@ const stripAnsi = require('strip-ansi');
const { handleAutocompletion } = require('../autocompletion.js');
class StatusBarWidget extends BaseWidget {
constructor() {
super();
@@ -75,7 +74,7 @@ class StatusBarWidget extends BaseWidget {
super.render();
const doSaveCursor = !this.promptActive;
if (doSaveCursor) this.term.saveCursor();
this.innerClear();
@@ -87,14 +86,13 @@ class StatusBarWidget extends BaseWidget {
//const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
//const textStyle = (s) => s;
const textStyle = this.promptActive ? (s) => s : chalk.gray;
const textStyle = this.promptActive ? s => s : chalk.gray;
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
this.term.moveTo(this.absoluteInnerX, this.absoluteInnerY);
if (this.promptActive) {
this.term.write(textStyle(this.promptState_.promptString));
if (this.inputEventEmitter_) {
@@ -113,8 +111,8 @@ class StatusBarWidget extends BaseWidget {
history: this.history,
default: this.promptState_.initialText,
autoComplete: handleAutocompletion,
autoCompleteHint : true,
autoCompleteMenu : true,
autoCompleteHint: true,
autoCompleteMenu: true,
};
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
@@ -153,19 +151,15 @@ class StatusBarWidget extends BaseWidget {
// Only callback once everything has been cleaned up and reset
resolveFn(resolveResult);
});
} else {
for (let i = 0; i < this.items_.length; i++) {
const s = this.items_[i].substr(0, this.innerWidth - 1);
this.term.write(textStyle(s));
}
}
if (doSaveCursor) this.term.restoreCursor();
}
}
module.exports = StatusBarWidget;

View File

@@ -1,10 +1,7 @@
const fs = require('fs-extra');
const { wrap } = require('lib/string-utils.js');
const Setting = require('lib/models/Setting.js');
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
const { _, setLocale, languageCode } = require('lib/locale.js');
const { _ } = require('lib/locale.js');
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
const INDENT = ' ';
@@ -16,14 +13,14 @@ function renderTwoColumnData(options, baseIndent, width) {
let option = options[i];
const flag = option[0];
const indent = baseIndent + INDENT + ' '.repeat(optionColWidth + 2);
let r = wrap(option[1], indent, width);
r = r.substr(flag.length + (baseIndent + INDENT).length);
r = baseIndent + INDENT + flag + r;
output.push(r);
}
return output.join("\n");
return output.join('\n');
}
function renderCommandHelp(cmd, width = null) {
@@ -44,7 +41,7 @@ function renderCommandHelp(cmd, width = null) {
}
if (cmd.name() === 'config') {
const renderMetadata = (md) => {
const renderMetadata = md => {
let desc = [];
if (md.label) {
@@ -67,13 +64,13 @@ function renderCommandHelp(cmd, width = null) {
} else if (md.type === Setting.TYPE_INT) {
defaultString = (md.value ? md.value : 0).toString();
} else if (md.type === Setting.TYPE_BOOL) {
defaultString = (md.value === true ? 'true' : 'false');
defaultString = md.value === true ? 'true' : 'false';
}
}
if (defaultString !== null) desc.push(_('Default: %s', defaultString));
return [md.key, desc.join("\n")];
return [md.key, desc.join('\n')];
};
output.push('');
@@ -83,7 +80,7 @@ function renderCommandHelp(cmd, width = null) {
let keysValues = [];
const keys = Setting.keys(true, 'cli');
for (let i = 0; i < keys.length; i++) {
if (keysValues.length) keysValues.push(['','']);
if (keysValues.length) keysValues.push(['', '']);
const md = Setting.settingMetadata(keys[i]);
if (!md.label) continue;
keysValues.push(renderMetadata(md));
@@ -91,8 +88,8 @@ function renderCommandHelp(cmd, width = null) {
output.push(renderTwoColumnData(keysValues, baseIndent, width));
}
return output.join("\n");
return output.join('\n');
}
function getOptionColWidth(options) {
@@ -104,4 +101,4 @@ function getOptionColWidth(options) {
return output;
}
module.exports = { renderCommandHelp };
module.exports = { renderCommandHelp };

View File

@@ -53,25 +53,25 @@ shimInit();
const application = app();
if (process.platform === "win32") {
var rl = require("readline").createInterface({
if (process.platform === 'win32') {
var rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
rl.on("SIGINT", function () {
process.emit("SIGINT");
rl.on('SIGINT', function() {
process.emit('SIGINT');
});
}
process.stdout.on('error', function( err ) {
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") {
if (err.code == 'EPIPE') {
process.exit(0);
}
});
application.start(process.argv).catch((error) => {
application.start(process.argv).catch(error => {
if (error.code == 'flagError') {
console.error(error.message);
console.error(_('Type `joplin help` for usage information.'));
@@ -81,4 +81,4 @@ application.start(process.argv).catch((error) => {
}
process.exit(1);
});
});

View File

@@ -1,13 +1,11 @@
const { _ } = require('lib/locale.js');
const { netUtils } = require('lib/net-utils.js');
const http = require("http");
const urlParser = require("url");
const FormData = require('form-data');
const http = require('http');
const urlParser = require('url');
const enableServerDestroy = require('server-destroy');
class OneDriveApiNodeUtils {
constructor(api) {
this.api_ = api;
this.oauthServer_ = null;
@@ -48,7 +46,7 @@ class OneDriveApiNodeUtils {
let authCodeUrl = this.api().authCodeUrl('http://localhost:' + port);
return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
this.oauthServer_ = http.createServer();
let errorMessage = null;
@@ -56,7 +54,7 @@ class OneDriveApiNodeUtils {
const url = urlParser.parse(request.url, true);
if (url.pathname === '/auth') {
response.writeHead(302, { 'Location': authCodeUrl });
response.writeHead(302, { Location: authCodeUrl });
response.end();
return;
}
@@ -64,10 +62,10 @@ class OneDriveApiNodeUtils {
const query = url.query;
const writeResponse = (code, message) => {
response.writeHead(code, {"Content-Type": "text/html"});
response.writeHead(code, { 'Content-Type': 'text/html' });
response.write(this.makePage(message));
response.end();
}
};
// After the response has been received, don't destroy the server right
// away or the browser might display a connection reset error (even
@@ -77,21 +75,24 @@ class OneDriveApiNodeUtils {
this.oauthServer_.destroy();
this.oauthServer_ = null;
}, 1000);
}
};
if (!query.code) return writeResponse(400, '"code" query parameter is missing');
this.api().execTokenRequest(query.code, 'http://localhost:' + port.toString()).then(() => {
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
targetConsole.log('');
targetConsole.log(_('The application has been successfully authorised.'));
waitAndDestroy();
}).catch((error) => {
writeResponse(400, error.message);
targetConsole.log('');
targetConsole.log(error.message);
waitAndDestroy();
});
this.api()
.execTokenRequest(query.code, 'http://localhost:' + port.toString())
.then(() => {
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
targetConsole.log('');
targetConsole.log(_('The application has been successfully authorised.'));
waitAndDestroy();
})
.catch(error => {
writeResponse(400, error.message);
targetConsole.log('');
targetConsole.log(error.message);
waitAndDestroy();
});
});
this.oauthServer_.on('close', () => {
@@ -116,7 +117,6 @@ class OneDriveApiNodeUtils {
targetConsole.log('http://127.0.0.1:' + port + '/auth');
});
}
}
module.exports = { OneDriveApiNodeUtils };
module.exports = { OneDriveApiNodeUtils };

View File

@@ -385,6 +385,23 @@ msgstr "حذف الملاحظة؟"
msgid "Searches for the given <pattern> in all the notes."
msgstr "يبحث عن الـ <pattern> (نمط) المعطى في كل الملاحظات."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -737,6 +754,10 @@ msgstr "م&ساعدة"
msgid "Website and documentation"
msgstr "موقع الويب و التوثيق"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin نسخة %s"
msgid "Make a donation"
msgstr "تبرَّع"
@@ -935,8 +956,8 @@ msgstr ""
"فيما بعد عبر المزامنة."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"يرجى الرجوع إلى التوثيق للمزيد من المعلومات عن التشفير من الطرف للطرف (E2EE) "
"و طرق تفعيله."
@@ -1456,10 +1477,10 @@ msgstr "فاتحة"
msgid "Dark"
msgstr "غامقة"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1530,6 +1551,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "إظهار أيقونة لوحة النظام"
@@ -1615,6 +1639,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "تجاهل أخطاء شهادات TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "تفعيل التشفير"
@@ -1770,6 +1799,14 @@ msgstr "الإذن باستخدام الكاميرا"
msgid "Your permission to use your camera is required."
msgstr "إذنك باستخدام كاميرا الجوال مطلوب."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "لا يوجد دفتر ملاحظات نشط."
#, fuzzy
msgid "Create a notebook"
msgstr "ينشئ دفتر ملاحظات جديد."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "لا توجد ملاحظات حالياً. أنشئ واحدة بالضغط على زر (+)."
@@ -2110,6 +2147,3 @@ msgstr "بحث"
#~ msgid "Remove?"
#~ msgstr "إزالة ؟"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin نسخة %s"

View File

@@ -392,6 +392,23 @@ msgstr "Да изтрия ли бележката?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Търси всред всички бележки за зададения <шаблон>."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -754,6 +771,10 @@ msgstr "Помощ (&H)"
msgid "Website and documentation"
msgstr "Уебсайт и документация"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin експорт файл"
msgid "Make a donation"
msgstr "Искам да направя дарение"
@@ -958,8 +979,8 @@ msgstr ""
"ще бъдат свалени тепърва чрез синхронизация."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"За повече информация относно криптирането от край до край (E2EE) и за съвети "
"относно как да го пуснете, вижте документацията:"
@@ -1492,10 +1513,10 @@ msgstr "Светла"
msgid "Dark"
msgstr "Тъмна"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1564,6 +1585,10 @@ msgstr "Пусни синтаксис ++вметка++"
msgid "Enable multimarkdown table extension"
msgstr "Пусни разширението за multimarkdown таблици"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Пусни синтаксис ~ниско~"
msgid "Show tray icon"
msgstr "Покажи иконка до часовника"
@@ -1654,6 +1679,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Игнорирай грешки в TLS сертификати"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Пусни история за бележките"
@@ -1812,6 +1842,14 @@ msgstr "Разрешение за употреба на камерата"
msgid "Your permission to use your camera is required."
msgstr "Трябва да разрешените употребата на камерата."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Няма активна тетрадка."
#, fuzzy
msgid "Create a notebook"
msgstr "Създава нова тетрадка."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "В момента няма бележки. Натиснете бутон (+) за да създадете бележка."

View File

@@ -1,14 +1,17 @@
# Catalan Joplin Translation.
# Copyright (C) 2018 Joan Montané
# Copyright (C) 2019 Joan Montané, Josep Maria Planell
# This file is distributed under the same license as the Joplin-CLI package.
# Joan Montané <jmontane@softcatala.org>, 2018.
#
# Translators:
# Josep Maria Planell <planell.josep@gmail.com>, 2019
# Joan Montané <jmontane@softcatala.org>, 2019
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Joplin-CLI 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: jmontane, 2018\n"
"Last-Translator: jmontane, 2019\n"
"Language-Team: jmontane@softcatala.org\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
@@ -65,7 +68,7 @@ msgstr "No es pot canviar l'element xifrat"
#, javascript-format
msgid "Missing required argument: %s"
msgstr "Manca un argument requerit: 1%s"
msgstr "Manca un argument requerit: %s"
#, javascript-format
msgid "%s: %s"
@@ -287,7 +290,7 @@ msgstr "Creades: %d."
#, javascript-format
msgid "Updated: %d."
msgstr "Acualitzades: %d."
msgstr "Actualitzades: %d."
#, javascript-format
msgid "Skipped: %d."
@@ -394,6 +397,23 @@ msgstr "Voleu suprimir la nota?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Cerca el patró <pattern> en totes les notes."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -474,8 +494,9 @@ msgid ""
"`tag list` can be used to list all the tags (use -l for long option)."
msgstr ""
"<tag-command>pot ser «add», «remove» o «list» per a assignar o suprimir "
"[tag] de la [nota], o per a llistar les notes associades amb [tag]. L'ordre "
"«tag list» es pot usar per a llistar totes les etiquetes."
"l'[etiqueta] de la [nota], o per a llistar les notes associades amb "
"l'[etiqueta]. L'ordre «tag list» es pot usar per a llistar totes les "
"etiquetes."
#, javascript-format
msgid "Invalid command: \"%s\""
@@ -645,8 +666,9 @@ msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr ""
msgstr "Insereix la data i hora"
#, fuzzy
msgid "Open template directory"
@@ -716,22 +738,22 @@ msgid "Select all"
msgstr "Seleccioneu una data"
msgid "Bold"
msgstr ""
msgstr "Negreta"
msgid "Italic"
msgstr ""
msgstr "Cursiva"
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgstr "Codi"
msgid "Insert Date Time"
msgstr ""
msgstr "Insereix la data i hora"
msgid "Edit in external editor"
msgstr ""
msgstr "Edita en un editor extern"
msgid "Tags"
msgstr "Etiquetes"
@@ -768,6 +790,10 @@ msgstr "Ajuda"
msgid "Website and documentation"
msgstr "Lloc web i documentació"
#, fuzzy
msgid "Joplin Forum"
msgstr "Fitxer d'exportació del Joplin"
msgid "Make a donation"
msgstr "Donatius"
@@ -890,7 +916,7 @@ msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
msgstr "Aplica"
msgid "Submit"
msgstr "Tramet"
@@ -971,8 +997,8 @@ msgstr ""
"sincrontizació."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Per a més informació sobre el xifratge d'extrem a extrem (E2EE) i consells "
"sobre com activar-lo, llegiu la documentació:"
@@ -1053,9 +1079,8 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Blocs de notes"
msgstr ""
msgid "Markup"
msgstr ""
@@ -1086,9 +1111,9 @@ msgstr ""
msgid "Open..."
msgstr "Obre..."
#, fuzzy, javascript-format
#, javascript-format
msgid "This file could not be opened: %s"
msgstr "No s'ha pogut desar el bloc de notes: %s"
msgstr "Aquest fitxer no s'ha pogut obrir: %s"
msgid "Save as..."
msgstr "Anomena i desa..."
@@ -1097,7 +1122,7 @@ msgid "Copy path to clipboard"
msgstr "Copia el camí al porta-retalls"
msgid "Copy Link Address"
msgstr ""
msgstr "Copia l'adreça de l'enllaç"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
@@ -1118,16 +1143,16 @@ msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgid "strong text"
msgstr ""
msgstr "text en negreta"
msgid "emphasized text"
msgstr ""
msgstr "text amb èmfasi"
msgid "List item"
msgstr ""
msgstr "Element de llista"
msgid "Insert Hyperlink"
msgstr ""
msgstr "insereix un enllaç"
msgid "Attach file"
msgstr "Adjunta un fitxer"
@@ -1140,29 +1165,28 @@ msgid "In: %s"
msgstr "A: %s"
msgid "Hyperlink"
msgstr ""
msgstr "Enllaç"
msgid "Numbered List"
msgstr ""
msgstr "Llista numerada"
msgid "Bulleted List"
msgstr ""
msgstr "Llista de pics"
msgid "Checkbox"
msgstr ""
msgstr "Casella de verificació"
msgid "Heading"
msgstr ""
msgstr "Capçalera"
msgid "Horizontal Rule"
msgstr ""
msgstr "Línia horitzontal"
msgid "Click to stop external editing"
msgstr ""
msgstr "Feu-hi clic per a aturar l'edició externa"
#, fuzzy
msgid "Watching..."
msgstr "S'està cancel·lant..."
msgstr "S'està vigilant..."
msgid "to-do"
msgstr "Tasques pendents"
@@ -1229,13 +1253,12 @@ msgstr ""
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
#, fuzzy
msgid "Duplicate"
msgstr "Surt de l'aplicació"
msgstr "Duplica"
#, fuzzy, javascript-format
#, javascript-format
msgid "%s - Copy"
msgstr "Copia"
msgstr "%s - Còpia"
msgid "Switch between note and to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
@@ -1496,10 +1519,10 @@ msgstr "Clar"
msgid "Dark"
msgstr "Fosc"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1570,6 +1593,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Mostra la icona a la safata"
@@ -1628,20 +1654,19 @@ msgstr "%d hora"
msgid "%d hours"
msgstr "%d hores"
#, fuzzy
msgid "Text editor command"
msgstr "Editor de text"
msgstr "Ordre de l'editor de text"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"L'editor que s'usarà per a obrir una nota. Si no s'indica cap, intentarà "
"detectar automàticament l'editor predeterminat."
"L'ordre de l'editor (que pot incloure arguments) que s'usarà per a obrir una "
"nota. Si no se'n proporciona cap, l'editor predeterminat es detectarà "
"automàticament."
msgid "Custom TLS certificates"
msgstr ""
msgstr "Certificats TLS personalitzats"
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
@@ -1649,8 +1674,18 @@ msgid ""
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
"Una llista separada per comes de camins a directoris d'on carregar els "
"certificats, o el camí a fitxers de certificats concrets. Per exemple, "
"el_meu/dir_cert, /altres/personalitzat.pem. Tingueu en compte que si feu "
"canvis en la configuració TLS, cal que els deseu abans de fer clic a "
"«Comprova la configuració de la sincronització»."
msgid "Ignore TLS certificate errors"
msgstr "Ignora els errors de certificat TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
@@ -1758,11 +1793,11 @@ msgstr ""
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "No s'ha pogut desar el bloc de notes: %s"
msgstr "Aquest fitxer no s'ha pogut obrir: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "No s'ha pogut desar el bloc de notes: %s"
msgstr "Aquest fitxer no s'ha pogut obrir: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
@@ -1813,6 +1848,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "No hi ha cap bloc de notes actiu."
#, fuzzy
msgid "Create a notebook"
msgstr "Crea un bloc de notes nou."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Ara mateix no hi ha cap nota. Creeu-ne una fent clic en el botó (+)."
@@ -1857,17 +1900,17 @@ msgstr "Bloc de notes nou"
msgid "Configuration"
msgstr "Configuració"
#, fuzzy, javascript-format
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d"
msgstr "S'estan desxifrant els elements: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
msgstr "Elements obtinguts: %d/%d."
#, fuzzy
msgid "All notes"
msgstr "nota"
msgstr "Voleu suprimir les notes?"
msgid "Notebooks"
msgstr "Blocs de notes"
@@ -1900,7 +1943,7 @@ msgstr ""
#, fuzzy, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Elements obtinguts: %d/%d."
msgstr "S'estan desxifrant els elements: %d/%d"
msgid "New tags:"
msgstr "Etiquetes noves:"
@@ -1923,7 +1966,6 @@ msgstr "Configuració"
msgid "Encryption Config"
msgstr "Configuració del xifratge"
#, fuzzy
msgid "Tools"
msgstr "Eines"
@@ -2058,7 +2100,7 @@ msgstr "Tipus d'imatge no admesa: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Acualitzades: %d."
msgstr "Actualitzades: %d."
msgid "View on map"
msgstr "Mostra-ho al mapa"
@@ -2112,6 +2154,31 @@ msgstr "Inicia sessió amb OneDrive"
msgid "Search"
msgstr "Cerca"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separeu les etiquetes amb comes."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns elements no s'han pogut desxifrar."
#, javascript-format
#~ msgid "State: %s."
#~ msgstr "Estat: %s."
#, javascript-format
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Ja existeix un bloc de notes amb aquest títol: «%s»"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
#~ "«sync.target»."
#, javascript-format
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancel·la la sincronització"
@@ -2138,29 +2205,3 @@ msgstr "Cerca"
#~ msgid "Welcome"
#~ msgstr "Benvingut"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separeu les etiquetes amb comes."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns elements no s'han pogut desxifrar."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
#~ "«sync.target»."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Lloc web del Joplin"
#~ msgid "State: %s."
#~ msgstr "Estat: %s"
#~ msgid "A notebook with this title already exists: \"%s\""
#~ msgstr "Ja existeix un bloc de notes amb aquest títol: «%s»"

View File

@@ -385,6 +385,23 @@ msgstr "Smazat poznámku?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Hledá <zadání> ve všech poznámkách."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -750,6 +767,10 @@ msgstr "Nápověda"
msgid "Website and documentation"
msgstr "Web a dokumentace"
#, fuzzy
msgid "Joplin Forum"
msgstr "Web Joplinu"
msgid "Make a donation"
msgstr "Přispět"
@@ -950,8 +971,8 @@ msgstr ""
"staženy při synchronizaci."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Pro více informací o End-To-End šifrování (E2EE) a návod jak je povolit "
"náhledněte do dokumentace:"
@@ -1475,10 +1496,10 @@ msgstr "Světlý"
msgid "Dark"
msgstr "Tmavý"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1547,6 +1568,10 @@ msgstr "Povolit ++insert++ syntaxi"
msgid "Enable multimarkdown table extension"
msgstr "Povolit rozšíření multimarkdown tabulky"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Povolit ~sub~ syntaxi"
msgid "Show tray icon"
msgstr "Zobrazovat ikonu v panelu"
@@ -1633,6 +1658,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorovat chyby TLS certifikátu"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Povolit poznámky pod čarou"
@@ -1788,6 +1818,14 @@ msgstr "Oprávnění použít kameru"
msgid "Your permission to use your camera is required."
msgstr "Je vyžadováno oprávnění použít vaši kameru."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Není vybrán žádný zápisník."
#, fuzzy
msgid "Create a notebook"
msgstr "Vytvoří nový zápisník."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Nemáte žádné poznámky. Vytvořte jednu kliknutím na tlačítko (+)."
@@ -2134,10 +2172,6 @@ msgstr "Hledání"
#~ "Cesta ke složce, se kterou synchronizovat, pokud je cílem synchronizace "
#~ "místní souborový systém. Viz `sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Web Joplinu"
#~ msgid "State: %s."
#~ msgstr "Stav: %s."

View File

@@ -390,6 +390,23 @@ msgstr "Slet note?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Søger efter <pattern> mønster i alle noter."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -755,6 +772,10 @@ msgstr "Hjælp"
msgid "Website and documentation"
msgstr "Joplins hjemmeside og dokumentation"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin hjemmeside"
msgid "Make a donation"
msgstr "Giv en donation"
@@ -950,8 +971,8 @@ msgstr ""
"(på et eller andet tidspunkt) via synkroniseringen."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Se dokumentationen for nærmere oplysninger om End-To-End-kryptering (E2EE) "
"og vejledning om hvordan det skal opsættes_"
@@ -1477,10 +1498,10 @@ msgstr "Lyst"
msgid "Dark"
msgstr "Mørkt"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1552,6 +1573,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Vis ikon på bundbjælke"
@@ -1635,6 +1659,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Start kryptering"
@@ -1795,6 +1824,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ingen aktiv notesbog."
#, fuzzy
msgid "Create a notebook"
msgstr "Opretter en ny notesbog."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Der er ingen noter. Opret note ved at klikke på (+) knappen."
@@ -2130,10 +2167,6 @@ msgstr "Søg"
#~ "Sti til synkronisering, når filsystem synkronisering er slået til. Se "
#~ "`sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin hjemmeside"
#~ msgid "State: %s."
#~ msgstr "Tilstand: %s."

View File

@@ -403,6 +403,23 @@ msgstr "Notiz löschen?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Sucht nach dem angegebenen <pattern> in allen Notizen."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -768,6 +785,10 @@ msgstr "&Hilfe"
msgid "Website and documentation"
msgstr "Webseite und Dokumentation"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Spenden"
@@ -973,8 +994,8 @@ msgstr ""
"Die Hauptschlüssel dieser IDs werden für die Verschlüsselung einiger ..."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Weitere Informationen zur Ende-zu-Ende-Verschlüsselung (E2EE) und Hinweise "
"zur Aktivierung findest du in der Dokumentation (auf Englisch):"
@@ -1513,11 +1534,11 @@ msgstr "Hell"
msgid "Dark"
msgstr "Dunkel"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr "Solarized Hell"
msgid "Solarized Dark"
msgstr "Solarized Dunkel"
msgid "Solarised Dark"
msgstr "Solarised Dark"
msgid "Uncompleted to-dos on top"
msgstr "Zeige unvollständige To-Dos an oberster Stelle"
@@ -1585,6 +1606,10 @@ msgstr "Aktiviere ++insert++ Syntax"
msgid "Enable multimarkdown table extension"
msgstr "Aktiviere multimarkdown Tabellen Erweiterung"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Aktiviere ~sub~ Syntax"
msgid "Show tray icon"
msgstr "Zeige Tray-Icon"
@@ -1673,6 +1698,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoriere TLS-Zertifikatfehler"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Aktiviere Notizen-Verlauf"
@@ -1833,6 +1863,14 @@ msgstr "Berechtigung zur Verwendung der Kamera"
msgid "Your permission to use your camera is required."
msgstr "Deine Zustimmung zur Verwendung deiner Kamera ist erforderlich."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Die/das momentan ausgewählte Notiz(-buch) löschen."
#, fuzzy
msgid "Create a notebook"
msgstr "Erstellt ein neues Notizbuch."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Momentan existieren noch keine Notizen. Erstelle eine, indem du auf den (+) "
@@ -2181,9 +2219,6 @@ msgstr "Suchen"
#~ "Der Pfad, mit dem synchronisiert werden soll, wenn die Dateisystem-"
#~ "Synchronisation aktiviert ist. Siehe `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "Löschen?"
@@ -2242,9 +2277,6 @@ msgstr "Suchen"
#~ msgid "Exit the application."
#~ msgstr "Das Programm verlassen."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Die/das momentan ausgewählte Notiz(-buch) löschen."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Ein To-Do als abgeschlossen / nicht abgeschlossen markieren"

View File

@@ -353,6 +353,23 @@ msgstr ""
msgid "Searches for the given <pattern> in all the notes."
msgstr ""
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -675,6 +692,9 @@ msgstr ""
msgid "Website and documentation"
msgstr ""
msgid "Joplin Forum"
msgstr ""
msgid "Make a donation"
msgstr ""
@@ -856,8 +876,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1355,10 +1375,10 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1427,6 +1447,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1502,6 +1525,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr ""
@@ -1650,6 +1678,12 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "You currently have no notebooks."
msgstr ""
msgid "Create a notebook"
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""

View File

@@ -354,6 +354,23 @@ msgstr ""
msgid "Searches for the given <pattern> in all the notes."
msgstr ""
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -681,6 +698,9 @@ msgstr ""
msgid "Website and documentation"
msgstr ""
msgid "Joplin Forum"
msgstr ""
msgid "Make a donation"
msgstr ""
@@ -874,8 +894,8 @@ msgstr ""
"they will eventually be downloaded via synchronization."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1377,11 +1397,11 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgstr ""
msgid "Solarised Light"
msgstr "Solarized Light"
msgid "Solarized Dark"
msgstr ""
msgid "Solarised Dark"
msgstr "Solarized Dark"
msgid "Uncompleted to-dos on top"
msgstr ""
@@ -1449,6 +1469,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1527,6 +1550,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr ""
@@ -1675,6 +1703,12 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "You currently have no notebooks."
msgstr ""
msgid "Create a notebook"
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""

View File

@@ -396,6 +396,23 @@ msgstr "¿Eliminar nota?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Buscar el patrón <pattern> en todas las notas."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -758,6 +775,10 @@ msgstr "&Ayuda"
msgid "Website and documentation"
msgstr "Sitio web y documentación"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Hacer una donación"
@@ -961,8 +982,8 @@ msgstr ""
"través de la sincronización."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Para más información acerca del cifrado extremo a extremo (E2EE) y "
"advertencias de como habilitarlo por favor revise la documentación:"
@@ -1495,10 +1516,10 @@ msgstr "Claro"
msgid "Dark"
msgstr "Oscuro"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1567,6 +1588,10 @@ msgstr "Activar sintaxis ++insert++"
msgid "Enable multimarkdown table extension"
msgstr "Activar extensión de tablas multimarkdown"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Activar sintaxis ~sub~"
msgid "Show tray icon"
msgstr "Mostrar icono en la bandeja"
@@ -1656,6 +1681,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar errores en certificados TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Habilitar historial de notas"
@@ -1810,6 +1840,14 @@ msgstr "Permiso para usar tu cámara"
msgid "Your permission to use your camera is required."
msgstr "El permiso para usar tu cámara es necesario."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Eliminar la nota o libreta seleccionada."
#, fuzzy
msgid "Create a notebook"
msgstr "Crea una nueva libreta."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "No hay notas. Cree una pulsando en el botón (+)."
@@ -2159,9 +2197,6 @@ msgstr "Buscar"
#~ "La ruta a la que sincronizar cuando se activa la sincronización con "
#~ "sistema de archivos. Vea «sync.target»."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "¿Borrar?"
@@ -2224,9 +2259,6 @@ msgstr "Buscar"
#~ msgid "Cancel the current command."
#~ msgstr "Cancelar el comando actual."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Eliminar la nota o libreta seleccionada."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Marca una tarea como completada/no completada"

View File

@@ -391,6 +391,23 @@ msgstr "Oharra ezabatu?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Emandako <pattern> bilatzen du ohar guztietan."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -760,6 +777,10 @@ msgstr "Laguntza"
msgid "Website and documentation"
msgstr "Web orria eta dokumentazioa (en)"
#, fuzzy
msgid "Joplin Forum"
msgstr "Evernotetik esportatutako fitxategiak"
#, fuzzy
msgid "Make a donation"
msgstr "Web orria eta dokumentazioa (en)"
@@ -957,8 +978,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1494,10 +1515,10 @@ msgstr "Argia"
msgid "Dark"
msgstr "Iluna"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
#, fuzzy
@@ -1573,6 +1594,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1654,6 +1678,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Zifratua gaitu"
@@ -1814,6 +1843,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ezabatu aukeratutako oharra edo koadernoa"
#, fuzzy
msgid "Create a notebook"
msgstr "Koaderno berria sortzen du."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Ez dago oharrik. Sortu bat (+) botoian klik eginaz."
@@ -2200,9 +2237,6 @@ msgstr "Bilatu"
#~ msgid "Cancel the current command."
#~ msgstr "Utzi uneko komandoa"
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Ezabatu aukeratutako oharra edo koadernoa"
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Zeregina eginda / ez-eginda markatu"

View File

@@ -356,6 +356,23 @@ msgstr "پاک کردن یادداشت؟"
msgid "Searches for the given <pattern> in all the notes."
msgstr ""
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -684,6 +701,10 @@ msgstr "&کمک"
msgid "Website and documentation"
msgstr ""
#, fuzzy
msgid "Joplin Forum"
msgstr "فایل خروجی Joplin"
msgid "Make a donation"
msgstr ""
@@ -866,8 +887,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1376,10 +1397,10 @@ msgstr "روشن"
msgid "Dark"
msgstr "تیره"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1448,6 +1469,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1524,6 +1548,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "فعال سایز ثبت تاریخچه ی یادداشت"
@@ -1672,6 +1701,14 @@ msgstr "اجازه برای استفاده از دوربین"
msgid "Your permission to use your camera is required."
msgstr "اجازه ی شما برای استفاده از دوربین شما نیاز است."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "دفترچه‌ی فعالی وجود ندارد."
#, fuzzy
msgid "Create a notebook"
msgstr "ایجاد دفترچه جدید."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""

View File

@@ -13,7 +13,9 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.3\n"
"X-Generator: Poedit 2.2.1\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
msgid "To delete a tag, untag the associated notes."
msgstr "Pour supprimer une vignette, enlever là des notes associées."
@@ -389,6 +391,26 @@ msgstr "Supprimer la note ?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Chercher le motif <pattern> dans toutes les notes."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
"Démarre, stop ou vérifie l'état du serveur API. Pour spécifier sur quel port "
"il doit tourner, veuillez utiliser la variable de config api.port. Les "
"commandes sont (%s)."
#, javascript-format
msgid "Server is already running on port %d"
msgstr "Le serveur tourne déjà sur le port %d"
#, javascript-format
msgid "Server is running on port %d"
msgstr "Le serveur tourne sur le port %d"
msgid "Server is not running."
msgstr "Le serveur est arrêté."
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -753,6 +775,9 @@ msgstr "&Aide"
msgid "Website and documentation"
msgstr "Documentation en ligne"
msgid "Joplin Forum"
msgstr "Forum Joplin"
msgid "Make a donation"
msgstr "Faire un don"
@@ -959,8 +984,8 @@ msgstr ""
"probable qu'elle vont être prochainement disponible via la synchronisation."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Pour plus d'informations sur le chiffrement de bout en bout, ainsi que des "
"conseils pour l'activer, veuillez consulter la documentation :"
@@ -1005,9 +1030,8 @@ msgstr "Renommer étiquette :"
msgid "Set alarm:"
msgstr "Régler alarme :"
#, fuzzy
msgid "Template file:"
msgstr "Modèles"
msgstr "Fichier de modèle :"
msgid "Layout"
msgstr "Disposition"
@@ -1047,7 +1071,7 @@ msgid "Note History"
msgstr "Historique des notes"
msgid "Markup"
msgstr ""
msgstr "Langage de balisage"
msgid "Previous versions of this note"
msgstr "Versions précédentes de cette note"
@@ -1497,11 +1521,11 @@ msgstr "Clair"
msgid "Dark"
msgstr "Sombre"
msgid "Solarized Light"
msgstr ""
msgid "Solarised Light"
msgstr "Solarisé clair"
msgid "Solarized Dark"
msgstr ""
msgid "Solarised Dark"
msgstr "Solarisé sombre"
msgid "Uncompleted to-dos on top"
msgstr "Tâches non-terminées en haut"
@@ -1569,6 +1593,9 @@ msgstr "Activer la syntaxe ++insertion++"
msgid "Enable multimarkdown table extension"
msgstr "Activer les tables multi-markdown"
msgid "Enable Fountain syntax support"
msgstr "Activer la syntaxe \"Fountain\""
msgid "Show tray icon"
msgstr "Afficher l'icône dans la zone de notifications"
@@ -1657,6 +1684,13 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer les erreurs de certificats TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
"Détermine quel port sera utilisé par le serveur API. Si aucun n'est "
"spécifié, un port par défaut sera utilisé."
msgid "Enable note history"
msgstr "Activer l'historique des notes"
@@ -1813,6 +1847,12 @@ msgstr "Permission d'utiliser l'appareil photo"
msgid "Your permission to use your camera is required."
msgstr "Votre permission est requise pour utiliser l'appareil photo."
msgid "You currently have no notebooks."
msgstr "Vous n'avez pour l'instant pas de carnets."
msgid "Create a notebook"
msgstr "Créer un carnet"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Ce carnet ne contient aucune note. Créez-en une en appuyant sur le bouton "
@@ -1913,7 +1953,6 @@ msgstr "Entrez de nouvelles étiquettes ou sélectionnez de la liste"
msgid "Warning"
msgstr "Avertissement"
#, fuzzy
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
@@ -1948,13 +1987,12 @@ msgstr "Correction de l'index..."
msgid "Fix search index"
msgstr "Corriger index de recherche"
#, fuzzy
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time depending on the number of notes."
msgstr ""
"Utilisez ceci pour corriger l'index du moteur de recherche en cas de "
"problème. Cela peut prendre assez longtemps selon le nombre de notes."
"problème. Cela peut prendre longtemps selon le nombre de notes."
msgid "More information"
msgstr "Plus d'information"
@@ -2166,9 +2204,6 @@ msgstr "Chercher"
#~ "Le chemin du répertoire avec lequel synchroniser lorsque la "
#~ "synchronisation par système de fichier est activée. Voir `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "Supprimer ?"
@@ -2234,9 +2269,6 @@ msgstr "Chercher"
#~ msgid "Exit the application."
#~ msgstr "Quitter le logiciel."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Supprimer la note ou carnet sélectionné."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Marquer une tâches comme complétée / non-complétée"

View File

@@ -388,6 +388,23 @@ msgstr "Eliminar nota?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Busca o patrón <pattern> en todas as notas."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -755,6 +772,10 @@ msgstr "Axuda"
msgid "Website and documentation"
msgstr "Sitio web e documentación"
#, fuzzy
msgid "Joplin Forum"
msgstr "Sitio web de Joplin"
msgid "Make a donation"
msgstr "Doar"
@@ -950,8 +971,8 @@ msgstr ""
"descargados pola sincronización."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1477,10 +1498,10 @@ msgstr "Claro"
msgid "Dark"
msgstr "Escuro"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1552,6 +1573,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Mostrar a icona na bandexa"
@@ -1635,6 +1659,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activar cifrado"
@@ -1795,6 +1824,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ningún caderno activo."
#, fuzzy
msgid "Create a notebook"
msgstr "Crea un caderno novo."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Non ten notas actualmente. Cree unha premendo no botón (+)."
@@ -2130,10 +2167,6 @@ msgstr "Buscar"
#~ "Ruta para sincronizar cando estea activada a sincronización do sistema de "
#~ "ficheiros. Vexa «sync.target»."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Sitio web de Joplin"
#~ msgid "State: %s."
#~ msgstr "Estado: %s."

View File

@@ -393,6 +393,23 @@ msgstr "Obrisati bilješku?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Pretražuje dati <pattern> u svim bilješkama."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, fuzzy, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -758,6 +775,10 @@ msgstr "Pomoć"
msgid "Website and documentation"
msgstr "Website i dokumentacija"
#, fuzzy
msgid "Joplin Forum"
msgstr "Evernote izvozne datoteke"
#, fuzzy
msgid "Make a donation"
msgstr "Website i dokumentacija"
@@ -943,8 +964,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1469,10 +1490,10 @@ msgstr "Svijetla"
msgid "Dark"
msgstr "Tamna"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
#, fuzzy
@@ -1548,6 +1569,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1628,6 +1652,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Bilješka je promijenjena:"
@@ -1786,6 +1815,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Obriši odabranu bilješku ili bilježnicu."
#, fuzzy
msgid "Create a notebook"
msgstr "Stvara novu bilježnicu."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Trenutno nema bilješki. Stvori novu klikom na (+) gumb."
@@ -2175,9 +2212,6 @@ msgstr "Traži"
#~ msgid "Cancel the current command."
#~ msgstr "Prekini trenutnu naredbu."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Obriši odabranu bilješku ili bilježnicu."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Postavi zadatak kao završen/nezavršen"

View File

@@ -17,7 +17,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "To delete a tag, untag the associated notes."
msgstr "Per eliminare un'etichetta, togli l'etichetta dalle note a cui è associata."
msgstr ""
"Per eliminare un'etichetta, togli l'etichetta dalle note a cui è associata."
msgid "Please select the note or notebook to be deleted first."
msgstr "Per favore seleziona la nota o il taccuino da eliminare."
@@ -393,6 +394,23 @@ msgstr "Eliminare la nota?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Cerca <pattern> in tutte le note."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -537,6 +555,7 @@ msgstr "Errore fatale:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
"Tutte le potenziali porte sono in uso - prego riportare il problema a %s"
msgid ""
"The application has been authorised - you may now close this browser tab."
@@ -638,25 +657,23 @@ msgid "Web clipper options"
msgstr "Opzioni Web Clipper"
msgid "Create note from template"
msgstr ""
msgstr "Crea nota da modello"
msgid "Create to-do from template"
msgstr ""
msgstr "Nuovo \"Cose-da-fare\" da modello"
#, fuzzy
msgid "Insert template"
msgstr "Inserisci data e ora"
msgstr "Inserisci modello"
#, fuzzy
msgid "Open template directory"
msgstr "Cartella di esportazione di Joplin"
msgstr "Apri cartella modelli"
msgid "Refresh templates"
msgstr ""
msgstr "Aggiorna modelli"
#, fuzzy, javascript-format
#, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
msgstr "Revisione: %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
@@ -675,7 +692,7 @@ msgid "Check for updates..."
msgstr "Controlla aggiornamenti..."
msgid "Templates"
msgstr ""
msgstr "Modelli"
msgid "Import"
msgstr "Importa"
@@ -759,6 +776,10 @@ msgstr "&Aiuto"
msgid "Website and documentation"
msgstr "Sito web e documentazione"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Fai una donazione"
@@ -963,8 +984,8 @@ msgstr ""
"ad essi. È probabile che verranno scaricati tramite la sincronizzazione."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Per ulteriori informazioni sulla crittografia end-to-end (E2EE) e consigli "
"su come abilitarlo, consultare la documentazione:"
@@ -996,7 +1017,7 @@ msgid "Notebook title:"
msgstr "Titolo del Taccuino:"
msgid "Add or remove tags:"
msgstr "Aggiungi or rimuovi etichetta:"
msgstr "Aggiungi o rimuovi etichetta:"
msgid "Rename notebook:"
msgstr "Rinomina il Taccuino:"
@@ -1008,7 +1029,7 @@ msgid "Set alarm:"
msgstr "Imposta allarme:"
msgid "Template file:"
msgstr ""
msgstr "File del modello:"
msgid "Layout"
msgstr "Disposizione"
@@ -1495,17 +1516,17 @@ msgstr "Chiaro"
msgid "Dark"
msgstr "Scuro"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Cose da fare incomplete in cima alla lista"
msgstr "\"Cose-da-fare\" incomplete in cima alla lista"
msgid "Show completed to-dos"
msgstr "Mostra le cose da fare completate"
msgstr "Mostra le \"Cose-da-fare\" completate"
msgid "Sort notes by"
msgstr "Ordina le note per"
@@ -1567,6 +1588,10 @@ msgstr "Attiva sintassi ++insert++"
msgid "Enable multimarkdown table extension"
msgstr ""
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Attiva sintassi ~sub~"
msgid "Show tray icon"
msgstr "Visualizza tray icon"
@@ -1656,6 +1681,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignora gli errori del certificato TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Attiva cronologia della nota"
@@ -1812,6 +1842,14 @@ msgstr "Permesso di usare la fotocamera"
msgid "Your permission to use your camera is required."
msgstr "E’ richiesto il permesso di usare la fotocamera."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Elimina la nota o il taccuino selezionato."
#, fuzzy
msgid "Create a notebook"
msgstr "Crea un nuovo Taccuino."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Al momento non ci sono note. Creane una cliccando sul bottone (+)."
@@ -1840,17 +1878,15 @@ msgstr "Seleziona la data"
msgid "Confirm"
msgstr "Conferma"
#, fuzzy, javascript-format
#, javascript-format
msgid "Notebook: %s"
msgstr "Taccuini"
msgstr "Taccuini: %s"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Gli elementi crittografati non possono essere modificati"
msgstr "I Taccuini crittografati non possono essere rinominati"
#, fuzzy
msgid "New Notebook"
msgstr "Nuovo taccuino"
msgstr "Nuovo Taccuino"
msgid "Configuration"
msgstr "Configurazione"
@@ -1863,9 +1899,8 @@ msgstr "Decrittografia Elementi: %d/%d"
msgid "Fetching resources: %d/%d"
msgstr "Recupero risorse: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "Eliminare le note?"
msgstr "Tutte le note"
msgid "Notebooks"
msgstr "Taccuini"
@@ -1913,48 +1948,46 @@ msgid "Type new tags or select from list"
msgstr "Digita nuovi tag o seleziona dalla lista"
msgid "Warning"
msgstr ""
msgstr "Attenzione"
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Maggiori informazioni"
msgstr "Informazioni"
msgid "Encryption Config"
msgstr "Configurazione Crittografia"
#, fuzzy
msgid "Tools"
msgstr "&Strumenti"
msgstr "Strumenti"
#, fuzzy
msgid "Sync Status"
msgstr "Stato"
msgstr "Stato sincronizzazione"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Creare nuovo %s..."
msgstr "Creazione report..."
msgid "Export Debug Report"
msgstr "Esporta il Report di Debug"
msgid "Fixing search index..."
msgstr ""
msgstr "Correzione indice di ricerca..."
msgid "Fix search index"
msgstr ""
msgstr "Correggi indice di ricerca"
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time depending on the number of notes."
msgstr ""
"Usa questo per ricostruire l’indice di ricerca se c’è un problema con la "
"ricerca. Potrebbe richiedere molto tempo, dipende dal numero di note."
msgid "More information"
msgstr "Maggiori informazioni"
@@ -2024,9 +2057,8 @@ msgstr "Il Taccuino non può essere salvato: %s"
msgid "Edit notebook"
msgstr "Modifica Taccuino"
#, fuzzy
msgid "Enter notebook title"
msgstr "Titolo del Taccuino:"
msgstr "Inserisci titolo del Taccuino"
msgid "Show all"
msgstr "Mostra tutto"
@@ -2060,9 +2092,9 @@ msgstr "Collegamenti con protocollo \"%s\" non sono supportati"
msgid "Unsupported image type: %s"
msgstr "Tipo di immagine non supportata: %s"
#, fuzzy, javascript-format
#, javascript-format
msgid "Updated: %s"
msgstr "Aggiornato: %d."
msgstr "Aggiornato: %s"
msgid "View on map"
msgstr "Guarda sulla mappa"
@@ -2070,13 +2102,11 @@ msgstr "Guarda sulla mappa"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Cerca..."
msgstr "Allega..."
#, fuzzy
msgid "Choose an option"
msgstr "Mostra opzioni avanzate"
msgstr "Scegli un’opzione"
msgid "Take photo"
msgstr "Scatta foto"
@@ -2096,19 +2126,17 @@ msgstr "Converti in nota"
msgid "Convert to todo"
msgstr "Converti in Todo"
#, fuzzy
msgid "Properties"
msgstr "Proprietà della nota"
msgstr "Proprietà"
msgid "Add body"
msgstr ""
msgstr "Aggiungi corpo"
msgid "Edit"
msgstr "Modifica"
#, fuzzy
msgid "Add title"
msgstr "titolo"
msgstr "Aggiungi titolo"
msgid "Login with OneDrive"
msgstr "Accedi a OneDrive"
@@ -2164,9 +2192,6 @@ msgstr "Cerca"
#~ "Il percorso di sincronizzazione quando la sincronizzazione è abilitata. "
#~ "Vedi `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "State: %s."
#~ msgstr "Stato: %s."
@@ -2233,9 +2258,6 @@ msgstr "Cerca"
#~ msgid "Cancel the current command."
#~ msgstr "Annulla il comando corrente."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Elimina la nota o il taccuino selezionato."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Imposta un \"Cose-da-fare\" come completato / non completato"

View File

@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "To delete a tag, untag the associated notes."
@@ -385,6 +385,23 @@ msgstr "ノートを削除しますか?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "指定された<pattern>をすべてのノートから検索する。"
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -519,7 +536,7 @@ msgstr "致命的なエラー:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgstr "すべての潜在ポートは利用中です - 問題を %s に報告してください"
msgid ""
"The application has been authorised - you may now close this browser tab."
@@ -576,18 +593,16 @@ msgstr ""
"\"%s\" を \"%s\" フォーマットにエクスポート中。しばらくお待ちください..."
msgid "Sidebar"
msgstr ""
msgstr "サイドバー"
msgid "Note list"
msgstr ""
msgstr "ノートの一覧"
#, fuzzy
msgid "Note title"
msgstr "ノートブックの題名:"
msgstr "ノートの題名:"
#, fuzzy
msgid "Note body"
msgstr "ノートブック"
msgstr "ノートの本文"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
@@ -622,45 +637,43 @@ msgid "Web clipper options"
msgstr "Webクリッパーのオプション"
msgid "Create note from template"
msgstr ""
msgstr "テンプレートからノートを作成"
msgid "Create to-do from template"
msgstr ""
msgstr "テンプレートからto-doを作成"
#, fuzzy
msgid "Insert template"
msgstr "日付の入力"
msgstr "テンプレートを挿入"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin エクスポートディレクトリ"
msgstr "テンプレートディレクトリを開く"
msgid "Refresh templates"
msgstr ""
msgstr "テンプレートの更新"
#, fuzzy, javascript-format
#, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
msgstr "リビジョン: %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "ファイル"
msgstr "&ファイル"
msgid "About Joplin"
msgstr "Joplinについて"
#, fuzzy
msgid "Preferences..."
msgstr ""
msgstr "環境設定"
msgid "Check for updates..."
msgstr "アップデートのチェック..."
msgid "Templates"
msgstr ""
msgstr "テンプレート"
msgid "Import"
msgstr "インポート"
@@ -679,11 +692,10 @@ msgid "Quit"
msgstr "終了"
msgid "Close Window"
msgstr ""
msgstr "ウィンドウを閉じる"
#, fuzzy
msgid "&Edit"
msgstr "編集"
msgstr "&編集"
msgid "Copy"
msgstr "コピー"
@@ -704,7 +716,7 @@ msgid "Italic"
msgstr "斜体"
msgid "Link"
msgstr ""
msgstr "リンク"
msgid "Code"
msgstr "コード"
@@ -724,9 +736,8 @@ msgstr "すべてのノートを検索"
msgid "Search in current note"
msgstr "現在のノートを検索"
#, fuzzy
msgid "&View"
msgstr "表示"
msgstr "&表示"
msgid "Toggle sidebar"
msgstr "サイドバーの表示切り替え"
@@ -734,26 +745,27 @@ msgstr "サイドバーの表示切り替え"
msgid "Toggle editor layout"
msgstr "エディターレイアウトの表示切り替え"
#, fuzzy
msgid "Focus"
msgstr "本文にフォーカス"
msgstr "フォーカス"
#, fuzzy
msgid "&Tools"
msgstr "ツール"
msgstr "&ツール"
#, fuzzy
msgid "&Help"
msgstr "ヘルプ"
msgstr "&ヘルプ"
msgid "Website and documentation"
msgstr "Webサイトとドキュメント"
#, fuzzy
msgid "Joplin Forum"
msgstr "JoplinのWebサイト"
msgid "Make a donation"
msgstr "寄付する"
msgid "Toggle development tools"
msgstr ""
msgstr "開発者ツールのオンオフを切り替える"
#, javascript-format
msgid "Open %s"
@@ -773,18 +785,18 @@ msgstr "現在のバージョンは最新版です。"
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (プレリリース)"
msgid "An update is available, do you want to download it now?"
msgstr "アップデートがあります。すぐにダウンロードしますか?"
#, javascript-format
msgid "Your version: %s"
msgstr ""
msgstr "あなたのバージョン: %s"
#, javascript-format
msgid "New version: %s"
msgstr ""
msgstr "新バージョン: %s"
msgid "Yes"
msgstr "Yes"
@@ -867,7 +879,7 @@ msgid "Check synchronisation configuration"
msgstr "同期の設定を確認する"
msgid "Browse..."
msgstr ""
msgstr "参照..."
msgid "Apply"
msgstr "適用"
@@ -948,8 +960,8 @@ msgstr ""
"ロードしてきたのでしょう。"
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"エンドツーエンド暗号化(E2EE)に関する詳細な情報とどのように有効化するのかのア"
"ドバイスは、次のドキュメントをご覧ください:"
@@ -960,9 +972,8 @@ msgstr "状態"
msgid "Encryption is:"
msgstr "暗号化の状態:"
#, fuzzy
msgid "Usage"
msgstr "使用方法: %s"
msgstr "使い方"
msgid "Back"
msgstr "戻る"
@@ -996,7 +1007,7 @@ msgid "Set alarm:"
msgstr "アラームをセット:"
msgid "Template file:"
msgstr ""
msgstr "テンプレートファイル:"
msgid "Layout"
msgstr "レイアウト"
@@ -1010,9 +1021,8 @@ msgstr "いくつかの項目は同期されませんでした。"
msgid "View them now"
msgstr "今すぐ表示"
#, fuzzy
msgid "One or more master keys need a password."
msgstr "マスターパスワードを入力してください:"
msgstr "パスワードに1つ以上のマスターキーが必要です"
msgid "Set the password"
msgstr "パスワードの設定"
@@ -1030,35 +1040,35 @@ msgstr "場所"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "ノートブック"
msgstr "ノートの履歴"
msgid "Markup"
msgstr ""
msgstr "マークアップ"
msgid "Previous versions of this note"
msgstr ""
msgstr "このノートの以前のバージョン"
msgid "Note properties"
msgstr "ノートのプロパティ"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgstr "ノート \"%s\" のノートブック \"%s\"への復元は成功しました。"
#, fuzzy
msgid "This note has no history"
msgstr "ノートは変更されています:"
msgstr "こののーとに履歴はありません"
msgid "Restore"
msgstr ""
msgstr "復元"
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
"\"%s\"をクリックすると復元を行います。復元されるノートは\"%s\"というノート"
"ブックにコピーされます。現在のバージョンのノートの置換や変更は行われません。"
msgid "Open..."
msgstr "開く..."
@@ -1092,7 +1102,7 @@ msgstr ""
"ノートを編集してください。"
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "一度に一つのノートだけPDFに印刷もしくはエクスポートができます。"
msgid "strong text"
msgstr "文字を太字に"
@@ -1174,18 +1184,19 @@ msgstr "暗号化のオプション"
msgid "Clipper Options"
msgstr "Clipperのオプション"
#, fuzzy, javascript-format
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"ノートブックを削除しますか? このノートブックにあるノートとサブノートはすべ"
"て消えてしまいます。"
"ノートブック \"%s\" を削除しますか?\n"
"\n"
"このノートブックにあるノートとサブノートはすべて消えてしまいます。"
#, fuzzy, javascript-format
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "すべてのノートからこのタグを削除しますか?"
msgstr "すべてのノートからタグ \"%s\" を削除しますか?"
msgid "Remove this search from the sidebar?"
msgstr "サイドバーからこの検索を削除しますか?"
@@ -1200,7 +1211,7 @@ msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
msgid "Retry"
msgstr ""
msgstr "再実行"
msgid "Add or remove tags"
msgstr "タグの追加と削除"
@@ -1224,21 +1235,23 @@ msgstr "ToDoに切り替え"
msgid "Copy Markdown link"
msgstr "Markdownのリンクをコピー"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "ノートを削除しますか?"
msgstr "ノート \"%s\" を削除しますか?"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete these %d notes?"
msgstr "ノートを削除しますか?"
msgstr "ノート \"%d\" を削除しますか?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
"ノートタイトルを入力すると、そのノートに移動します。または#につづいてタグ名も"
"しくは@につづいてノートブック名を使うこともできます。"
msgid "Goto Anything..."
msgstr ""
msgstr "Goto Anything..."
#, javascript-format
msgid "Usage: %s"
@@ -1355,6 +1368,8 @@ msgstr "同期作業はすでに実行中です。状態: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
"不明なアイテムタイプをダウンロードしました - 最新のJoplinにアップデートしてく"
"ださい"
msgid "Encrypted"
msgstr "暗号化済"
@@ -1436,25 +1451,28 @@ msgid "WebDAV password"
msgstr "WevDAV パスワード"
msgid "Attachment download behaviour"
msgstr ""
msgstr "添付ファイルのダウンロードの動作"
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
"\"手動\"モードは添付ファイルをクリックしたときのみダウンロードをします。\"自"
"動\"はノートを開いたときにダウンロードをします。\"いつも\"はノートを開いてい"
"るか閉じているかにかかわらずダウンロードをします。"
msgid "Always"
msgstr ""
msgstr "いつも"
msgid "Manual"
msgstr ""
msgstr "手動"
msgid "Auto"
msgstr ""
msgstr "自動"
msgid "Max concurrent connections"
msgstr ""
msgstr "最大同時接続数"
msgid "Language"
msgstr "言語"
@@ -1474,10 +1492,10 @@ msgstr "明るい"
msgid "Dark"
msgstr "暗い"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1492,9 +1510,8 @@ msgstr "ノートのソート方法"
msgid "Reverse sort order"
msgstr "逆順に並び替え"
#, fuzzy
msgid "Sort notebooks by"
msgstr "ノートのソート方法"
msgstr "ノートブックのソート方法"
msgid "Save geo-location with notes"
msgstr "ノートに位置情報を保存"
@@ -1512,41 +1529,44 @@ msgid "When creating a new note:"
msgstr "新しいノートを作成した際:"
msgid "Enable soft breaks"
msgstr ""
msgstr "ソフトブレークを有効にする"
#, fuzzy
msgid "Enable math expressions"
msgstr "暗号化を有効にする"
msgstr "数式表現を有効にする"
msgid "Enable ==mark== syntax"
msgstr ""
msgstr "==ハイライト==構文を有効にする"
msgid "Enable footnotes"
msgstr ""
msgstr "脚注を有効にする"
msgid "Enable table of contents extension"
msgstr ""
msgstr "目次拡張を有効にする"
msgid "Enable ~sub~ syntax"
msgstr ""
msgstr "~下付きテキスト~構文を有効にする"
msgid "Enable ^sup^ syntax"
msgstr ""
msgstr "^上付きテキスト^構文を有効にする"
msgid "Enable deflist syntax"
msgstr ""
msgstr "定義リスト構文を有効にする"
msgid "Enable abbreviation syntax"
msgstr ""
msgstr "略語構文を有効にする"
msgid "Enable markdown emoji"
msgstr ""
msgstr "マークダウン絵文字を有効にする"
msgid "Enable ++insert++ syntax"
msgstr ""
msgstr "++追加++構文を有効にする"
msgid "Enable multimarkdown table extension"
msgstr ""
msgstr "MultiMarkdownのテーブル拡張を有効にする"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "~下付きテキスト~構文を有効にする"
msgid "Show tray icon"
msgstr "トレイアイコンの表示"
@@ -1633,45 +1653,45 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS証明書のエラーを無視"
#, fuzzy
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "暗号化を有効にする"
msgstr "ノートの履歴を有効にする"
msgid "days"
msgstr ""
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgstr "%d 日"
msgid "Keep note history for"
msgstr ""
msgstr "ノート履歴の保存期間"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
#, fuzzy
msgid "General"
msgstr "全般のオプション"
msgstr "全般"
#, fuzzy
msgid "Synchronisation"
msgstr "同期状況"
msgstr "同期"
msgid "Appearance"
msgstr ""
msgstr "スタイル"
#, fuzzy
msgid "Note"
msgstr "ノートブック"
msgstr "ノート"
msgid "Plugins"
msgstr ""
msgstr "プラグイン"
#, fuzzy
msgid "Application"
msgstr "場所"
msgstr "アプリケーション"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
@@ -1721,7 +1741,7 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr "ノートをどのノートブックにインポートするのか指定してください。"
msgid "Restored Notes"
msgstr ""
msgstr "復元されたノート"
msgid "Items that cannot be synchronised"
msgstr "同期ができなかったアイテム"
@@ -1735,23 +1755,25 @@ msgstr ""
"のようなアイテムを探すには、タイトルまたはID(上記の括弧内に表示されている)で"
"検索してください。"
#, fuzzy, javascript-format
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "次のファイルは開くことができません:%s"
msgstr "%s (%s)はアップロードできませんでした:%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "次のファイルは開くことができません:%s"
msgstr "アイテム \"%s\" はダウンロードできませんでした:%s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "同期ができなかったアイテム"
msgstr "復号ができなかったアイテム"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
"Joplinはアイテムが破損もしくは大きすぎるため、これらのアイテムの復号化に複数"
"回失敗しました。これらのアイテムはデバイス上に残りますが、Joplinはこれらの復"
"号化は行いません。"
msgid "Sync status (synced items / total items)"
msgstr "同期状況 (同期済/総数)"
@@ -1792,6 +1814,14 @@ msgstr "カメラ使用の許可"
msgid "Your permission to use your camera is required."
msgstr "カメラを使用するには権限が必要です。"
#, fuzzy
msgid "You currently have no notebooks."
msgstr "選択中のノートまたはノートブックを削除"
#, fuzzy
msgid "Create a notebook"
msgstr "あたらしいノートブックを作成します。"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "ノートがありません。(+)ボタンを押して新しいノートを作成してください。"
@@ -1820,15 +1850,13 @@ msgstr "日付の選択"
msgid "Confirm"
msgstr "確認"
#, fuzzy, javascript-format
#, javascript-format
msgid "Notebook: %s"
msgstr "ノートブック"
msgstr "ノートブック: %s"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "暗号化したアイテムは修正できません"
msgstr "暗号化したアイテムはリネームできません"
#, fuzzy
msgid "New Notebook"
msgstr "新しいノートブック"
@@ -1843,9 +1871,8 @@ msgstr "復号中のアイテム: %d/%d"
msgid "Fetching resources: %d/%d"
msgstr "取得中のリソース: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "ノート"
msgstr "すべてのノート"
msgid "Notebooks"
msgstr "ノートブック"
@@ -1891,52 +1918,50 @@ msgid "Type new tags or select from list"
msgstr "新しいタグを入力するか、リストから選択してください"
msgid "Warning"
msgstr ""
msgstr "警告"
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
"ファイルシステムの同期を使うには、外部ストレージへの書き込み権限が必要です。"
#, fuzzy
msgid "Information"
msgstr "設定"
msgstr "情報"
msgid "Encryption Config"
msgstr "暗号化の設定"
#, fuzzy
msgid "Tools"
msgstr "ツール"
#, fuzzy
msgid "Sync Status"
msgstr "状態"
msgstr "同期の状態"
msgid "Log"
msgstr "ログ"
#, fuzzy
msgid "Creating report..."
msgstr "新しい %s を作成中..."
msgstr "レポート を作成中..."
msgid "Export Debug Report"
msgstr "デバッグレポートの出力"
msgid "Fixing search index..."
msgstr ""
msgstr "検索インデックスの修正中..."
msgid "Fix search index"
msgstr ""
msgstr "検索インデックスの修正"
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time depending on the number of notes."
msgstr ""
"検索に問題がある場合は、これを利用して検索インデックスの再構築を行います。"
"ノートの数に依存して、時間がかかる場合があります。"
#, fuzzy
msgid "More information"
msgstr "設定"
msgstr "詳細情報"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
@@ -1963,18 +1988,17 @@ msgstr "JoplinのWebサイト"
#, javascript-format
msgid "Database v%s"
msgstr ""
msgstr "データベース v%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "FTS enabled: %d"
msgstr "削除予定: %d"
msgstr "FTS有効: %d"
msgid "Login with Dropbox"
msgstr "Dropboxでログイン"
#, fuzzy
msgid "Enter code here"
msgstr "コマンドラインモードに入"
msgstr "コードをここに入"
#, javascript-format
msgid "Master Key %s"
@@ -2000,9 +2024,8 @@ msgstr "ノートブックは保存できませんでした:%s"
msgid "Edit notebook"
msgstr "ノートブックの編集"
#, fuzzy
msgid "Enter notebook title"
msgstr "ノートブックの題名:"
msgstr "ノートブックのタイトルを入力"
msgid "Show all"
msgstr "すべて表示"
@@ -2029,15 +2052,15 @@ msgstr "Joplinモバイルアプリは次のタイプのリンクをまだサポ
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
msgstr "プロトコル \"%s\" でのリンクはサポートされていません"
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "サポートされていない画像の形式: %s"
#, fuzzy, javascript-format
#, javascript-format
msgid "Updated: %s"
msgstr "アップデート: %d."
msgstr "アップデート: %s"
msgid "View on map"
msgstr "地図上に表示"
@@ -2047,11 +2070,10 @@ msgstr "ソースURLに行く"
#, fuzzy
msgid "Attach..."
msgstr "検索..."
msgstr "添付..."
#, fuzzy
msgid "Choose an option"
msgstr "詳細な設定の表示"
msgstr "オプションを選択"
msgid "Take photo"
msgstr "写真を撮影する"
@@ -2071,19 +2093,19 @@ msgstr "ノートに変換"
msgid "Convert to todo"
msgstr "ToDoに変換"
#, fuzzy
msgid "Properties"
msgstr "ノートのプロパティ"
msgstr "プロパティ"
#, fuzzy
msgid "Add body"
msgstr ""
msgstr "ボディを追加"
msgid "Edit"
msgstr "編集"
#, fuzzy
msgid "Add title"
msgstr "タイトル"
msgstr "タイトルを追加"
msgid "Login with OneDrive"
msgstr "OneDriveログイン"
@@ -2139,10 +2161,6 @@ msgstr "検索"
#~ "ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にし"
#~ "てください。"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "JoplinのWebサイト"
#~ msgid "State: %s."
#~ msgstr "状態: \"%s\"."
@@ -2195,9 +2213,6 @@ msgstr "検索"
#~ msgid "Exit the application."
#~ msgstr "アプリケーションを終了する"
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "選択中のノートまたはノートブックを削除"
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "ToDoを完了/未完に設定"

View File

@@ -353,6 +353,23 @@ msgstr ""
msgid "Searches for the given <pattern> in all the notes."
msgstr ""
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -675,6 +692,9 @@ msgstr ""
msgid "Website and documentation"
msgstr ""
msgid "Joplin Forum"
msgstr ""
msgid "Make a donation"
msgstr ""
@@ -856,8 +876,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1355,10 +1375,10 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1427,6 +1447,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1502,6 +1525,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr ""
@@ -1650,6 +1678,12 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
msgid "You currently have no notebooks."
msgstr ""
msgid "Create a notebook"
msgstr ""
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""

View File

@@ -15,8 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
msgid "To delete a tag, untag the associated notes."
msgstr "태그를 삭제하려면 먼저 연결된 노트의 태그를 해제해주세요."
@@ -192,7 +190,7 @@ msgid ""
"Exports Joplin data to the given path. By default, it will export the "
"complete database including notebooks, notes, tags and resources."
msgstr ""
"조플린의 데이터를 주어진 경로로 내보냅니다. 기본적으로 노트북, 노트, 태그, 기"
"Joplin의 데이터를 주어진 경로로 내보냅니다. 기본적으로 노트북, 노트, 태그, 기"
"타 자원을 포함한 완전한 데이터베이스를 내보내게 됩니다."
#, javascript-format
@@ -261,7 +259,7 @@ msgid ""
msgstr "키보드 단축키 및 설정 옵션을 변경하려면 `help keymap`을 입력해주세요"
msgid "Imports data into Joplin."
msgstr "데이터를 조플린으로 가져옵니다."
msgstr "데이터를 Joplin으로 가져옵니다."
#, javascript-format
msgid "Source format: %s"
@@ -386,6 +384,23 @@ msgstr "이 노트를 삭제할까요?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "주어진 <pattern>을 모든 노트에서 검색합니다."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -413,7 +428,7 @@ msgstr "인증이 완료되지 않았습니다 (인증 토큰을 받을 수 없
msgid ""
"To allow Joplin to synchronise with Dropbox, please follow the steps below:"
msgstr "조플린을 Dropbox와 동기화하려면 다음 절차를 따라주세요:"
msgstr "Joplin을 Dropbox와 동기화하려면 다음 절차를 따라주세요:"
msgid "Step 1: Open this URL in your browser to authorise the application:"
msgstr "1단계: 브라우저에서 이 URL에 접근하여 애플리케이션을 허가합니다:"
@@ -552,7 +567,7 @@ msgid ""
"\n"
"For example, to create a notebook press `mb`; to create a note press `mn`."
msgstr ""
"조플린에 오신 것을 환영합니다!\n"
"Joplin에 오신 것을 환영합니다!\n"
"\n"
"`:help shortcuts`를 입력하면 키보드 단축키 목록을 확인할 수 있습니다. `:help`"
"를 입력하시면 사용 방법을 확인하실 수 있습니다.\n"
@@ -640,12 +655,11 @@ msgstr "개정판: %s (%s)"
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "파일"
msgid "About Joplin"
msgstr "조플린에 대해서"
msgstr "Joplin에 대해서"
msgid "Preferences..."
msgstr "설정…"
@@ -675,7 +689,6 @@ msgstr "종료"
msgid "Close Window"
msgstr "창 닫기"
#, fuzzy
msgid "&Edit"
msgstr "편집"
@@ -718,7 +731,6 @@ msgstr "모든 노트에서 검색"
msgid "Search in current note"
msgstr "현재 노트에서 검색"
#, fuzzy
msgid "&View"
msgstr "보기"
@@ -731,17 +743,19 @@ msgstr "편집기 배치 형태 전환"
msgid "Focus"
msgstr "강조"
#, fuzzy
msgid "&Tools"
msgstr "도구"
#, fuzzy
msgid "&Help"
msgstr "도움말"
msgid "Website and documentation"
msgstr "웹사이트 및 각종 문서"
#, fuzzy
msgid "Joplin Forum"
msgstr "조플린 v%s"
msgid "Make a donation"
msgstr "기부하기"
@@ -762,7 +776,7 @@ msgid "Cancel"
msgstr "취소"
msgid "Current version is up-to-date."
msgstr "현재 최신 버전을 사용하고 있으십니다."
msgstr "현재 최신 버전을 사용중입니다."
#, javascript-format
msgid "%s (pre-release)"
@@ -812,7 +826,7 @@ msgid ""
"Joplin Web Clipper allows saving web pages and screenshots from your browser "
"to Joplin."
msgstr ""
"조플린 웹 수집기는 브라우저에서 웹 페이지 및 스크린샷을 조플린에 저장할 수 있"
"Joplin 웹 수집기는 브라우저에서 웹 페이지 및 스크린샷을 Joplin에 저장할 수 있"
"게 해줍니다."
msgid "In order to use the web clipper, you need to do the following:"
@@ -826,8 +840,8 @@ msgid ""
"enabling it your firewall may ask you to give permission to Joplin to listen "
"to a particular port."
msgstr ""
"이 서비스는 브라우저 확장 기능이 조플린과 연결하 해줍니다. 활성화시 방화벽"
"에서 조플린에게 특정 포트 접근을 허가할 것인지 물어볼 수 있습니다."
"이 서비스는 브라우저 확장 기능이 Joplin과 연결하도록 해줍니다. 서비스를 활성"
"화시 방화벽에서 Joplin에게 특정 포트 접근을 허가할 것인지 물어볼 수 있습니다."
msgid "Step 2: Install the extension"
msgstr "2단계: 확장 기능 설치"
@@ -848,7 +862,7 @@ msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"이 인증 토큰은 오직 서드파티 애플리케이션에서 조플린에 접근할 때만 필요합니"
"이 인증 토큰은 오직 서드파티 애플리케이션에서 Joplin에 접근할 때만 필요합니"
"다."
#, javascript-format
@@ -941,10 +955,10 @@ msgstr ""
"될 가능성이 있습니다."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"종단간 암호화(E2EE)에 관한 정보, 사용법 및 조언은 다음 문서에서 확인세요:"
"종단간 암호화(E2EE)에 관한 정보, 사용법 및 조언은 다음 문서에서 확인해주세요:"
msgid "Status"
msgstr "상태"
@@ -1228,9 +1242,8 @@ msgstr ""
"노트 제목을 적으시거나 혹은 건너 뛰세요. 혹은 # 를 적고 태그 이름을 붙이거"
"나, @뒤에 노트북 이름을 적으세요."
#, fuzzy
msgid "Goto Anything..."
msgstr "가고 싶은 곳으로 이동…"
msgstr "가고자 하는 곳으로 이동…"
#, javascript-format
msgid "Usage: %s"
@@ -1347,7 +1360,7 @@ msgstr "동기화가 이미 진행되고 있습니다. 상태: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
"알려지지 않은 타입을 다운로드 했습니다 - 조플린을 최신 버전으로 업데이트 해주"
"알려지지 않은 타입을 다운로드 했습니다 - Joplin을 최신 버전으로 업데이트 해주"
"세요"
msgid "Encrypted"
@@ -1468,10 +1481,10 @@ msgstr "밝음"
msgid "Dark"
msgstr "어두움"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr "Solarized Light"
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr "Solarized Dark"
msgid "Uncompleted to-dos on top"
@@ -1486,7 +1499,6 @@ msgstr "노트를 다음 기준으로 정렬"
msgid "Reverse sort order"
msgstr "정렬 순서 반전"
#, fuzzy
msgid "Sort notebooks by"
msgstr "노트를 다음 기준으로 정렬"
@@ -1541,6 +1553,10 @@ msgstr "++insert++ 확장 허용"
msgid "Enable multimarkdown table extension"
msgstr "멀티마크다운 테이블 확장 허용"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "~sub~ 구문 허용"
msgid "Show tray icon"
msgstr "트레이 아이콘 표시"
@@ -1552,11 +1568,11 @@ msgid ""
"this setting so that your notes are constantly being synchronised, thus "
"reducing the number of conflicts."
msgstr ""
"조플린을 백그라운드에서 구동합니다. 노트가 정기적으로 동기화 되므로, 충돌 횟"
"Joplin을 백그라운드에서 구동합니다. 노트가 정기적으로 동기화 되므로, 충돌 횟"
"수가 줄어들게 되므로 이 옵션을 활성화 하시는 것을 추천드립니다."
msgid "Start application minimised in the tray icon"
msgstr "트레이에 최소화 된 채로 조플린 실행"
msgstr "트레이에 최소화 된 채로 Joplin 실행"
msgid "Global zoom percentage"
msgstr "전체 확대 비율"
@@ -1627,6 +1643,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS 인증서 오류 무시"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "노트 역사 허용"
@@ -1667,13 +1688,13 @@ msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "태그 \"%s\"(이)가 이미 존재합니다. 다른 이름을 선택해 주세요."
msgid "Joplin Export File"
msgstr "조플린 내보내기 파일"
msgstr "Joplin 내보내기 파일"
msgid "Markdown"
msgstr "마크다운"
msgid "Joplin Export Directory"
msgstr "조플린 내보내기 폴더"
msgstr "Joplin 내보내기 폴더"
msgid "Evernote Export File"
msgstr "에버노트 내보내기 파일"
@@ -1740,8 +1761,8 @@ msgid ""
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
"조플린이 여러 항목에 대해서 복호화를 실패했습니다. 아마도 너무 크거나 혹은 손"
"상되었기 때문일 것입니다. 이 파일들은 기기에 남지만, 조플린은 더이상 이 항목"
"Joplin이 여러 항목에 대해서 복호화를 실패했습니다. 아마도 너무 크거나 혹은 손"
"상되었기 때문일 것입니다. 이 파일들은 기기에 남지만, Joplin은 더이상 이 항목"
"들을 복호화 할 수 없습니다."
msgid "Sync status (synced items / total items)"
@@ -1783,6 +1804,14 @@ msgstr "카메라 사용 허가"
msgid "Your permission to use your camera is required."
msgstr "카메라 사용 허가가 필요합니다."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "활성화된 노트북이 없습니다."
#, fuzzy
msgid "Create a notebook"
msgstr "새 노트북을 만듭니다."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "노트가 없습니다. (+) 버튼을 클릭하여 새로 만드세요."
@@ -1946,7 +1975,7 @@ msgid "- Location: to allow attaching geo-location information to a note."
msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해 필요합니다."
msgid "Joplin website"
msgstr "조플린 웹사이트"
msgstr "Joplin 웹사이트"
#, javascript-format
msgid "Database v%s"
@@ -2010,7 +2039,7 @@ msgstr "ID %s에 해당하는 항목이 없습니다"
#, javascript-format
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "조플린 모바일 앱 현재 해당 형식의 링크를 지원하지 않습니다: %s"
msgstr "Joplin 모바일 앱에서는 현재 해당 형식의 링크를 지원하지 않습니다: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
@@ -2118,9 +2147,6 @@ msgstr "검색"
#~ "파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`"
#~ "를 참조하세요."
#~ msgid "Joplin v%s"
#~ msgstr "조플린 v%s"
#~ msgid "State: %s."
#~ msgstr "상태: %s."

View File

@@ -388,6 +388,23 @@ msgstr "Slett notat?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Søker etter angitt <pattern> i alle notatene."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -744,6 +761,10 @@ msgstr "&Hjelp"
msgid "Website and documentation"
msgstr "Nettsted og dokumentasjon"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Gi et bidrag"
@@ -946,8 +967,8 @@ msgstr ""
"vil siden bli lastet ned via synkronisering."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"For mer informasjon om ende-til-ende-kryptering (E2EE) og råd om hvordan du "
"aktiverer det kan du sjekke dokumentasjonen:"
@@ -1471,10 +1492,10 @@ msgstr "Lys"
msgid "Dark"
msgstr "Mørk"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1547,6 +1568,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Vis systemmenyikon"
@@ -1634,6 +1658,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer TLS-sertifikatfeil"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Liste over innhold"
@@ -1789,6 +1818,14 @@ msgstr "Tillatelse til å bruke kamera"
msgid "Your permission to use your camera is required."
msgstr "Tillatelse til å bruke kamera er nødvendig."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ingen aktiv notatbok."
#, fuzzy
msgid "Create a notebook"
msgstr "Oppretter en ny notatbok."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Det finnes enda ingen notater. Lag en ved å klikke på (+)-knappen."
@@ -2135,7 +2172,3 @@ msgstr "Søk"
#~ msgstr ""
#~ "Stien som skal synkroniseres når filsystemsynkronisering er aktivert. Se "
#~ "`sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"

View File

@@ -394,6 +394,23 @@ msgstr "Notitie verwijderen?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Zoektermen voor het opgegeven <pattern> in alle notities."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -762,6 +779,10 @@ msgstr "Help"
msgid "Website and documentation"
msgstr "Website en documentatie"
#, fuzzy
msgid "Joplin Forum"
msgstr "Exporteer Evernote bestanden"
#, fuzzy
msgid "Make a donation"
msgstr "Website en documentatie"
@@ -959,8 +980,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1495,10 +1516,10 @@ msgstr "Licht"
msgid "Dark"
msgstr "Donker"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
#, fuzzy
@@ -1574,6 +1595,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1655,6 +1679,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Schakel encryptie in"
@@ -1816,6 +1845,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Verwijder de geselecteerde notitie of het geselecteerde notitieboek."
#, fuzzy
msgid "Create a notebook"
msgstr "Maakt een nieuw notitieboek aan."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Er zijn momenteel geen notities. Maak een notitie door op (+) te klikken."
@@ -2206,10 +2243,6 @@ msgstr "Zoeken"
#~ msgid "Cancel the current command."
#~ msgstr "Annuleer het huidige commando."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr ""
#~ "Verwijder de geselecteerde notitie of het geselecteerde notitieboek."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Zet een to-do als voltooid / niet voltooid"

View File

@@ -395,6 +395,23 @@ msgstr "Notitie verwijderen?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Doorzoekt alle notities op het opgegeven <pattern>."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -531,7 +548,7 @@ msgstr "Fatale fout:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgstr "Alle potentiële poorten zijn in gebruik - Meld het probleem op %s"
msgid ""
"The application has been authorised - you may now close this browser tab."
@@ -632,10 +649,10 @@ msgid "Web clipper options"
msgstr "Webclipper-opties"
msgid "Create note from template"
msgstr ""
msgstr "Notitie maken van sjabloon"
msgid "Create to-do from template"
msgstr ""
msgstr "To-do maken van sjabloon"
#, fuzzy
msgid "Insert template"
@@ -646,7 +663,7 @@ msgid "Open template directory"
msgstr "Joplin-exportmap"
msgid "Refresh templates"
msgstr ""
msgstr "Sjablonen vernieuwen"
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
@@ -669,7 +686,7 @@ msgid "Check for updates..."
msgstr "Controleren op updates..."
msgid "Templates"
msgstr ""
msgstr "Sjablonen"
msgid "Import"
msgstr "Importeren"
@@ -753,6 +770,10 @@ msgstr "&Help"
msgid "Website and documentation"
msgstr "Website en documentatie"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin-website"
msgid "Make a donation"
msgstr "Doneren"
@@ -956,8 +977,8 @@ msgstr ""
"items. Waarschijnlijk worden ze uiteindelijk gedownload via synchronisatie."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Bekijk, voor meer informatie over End-To-End-versleuteling (E2EE) en hulp "
"bij het inschakelen hiervan, onze documentatie:"
@@ -1003,7 +1024,7 @@ msgid "Set alarm:"
msgstr "Alarm instellen:"
msgid "Template file:"
msgstr ""
msgstr "Sjabloonbestand:"
msgid "Layout"
msgstr "Indeling"
@@ -1044,7 +1065,7 @@ msgid "Note History"
msgstr "Notitiegeschiedenis"
msgid "Markup"
msgstr ""
msgstr "Opmaak"
msgid "Previous versions of this note"
msgstr "Vorige versies van deze notitie"
@@ -1495,11 +1516,11 @@ msgstr "Licht"
msgid "Dark"
msgstr "Donker"
msgid "Solarized Light"
msgstr ""
msgid "Solarised Light"
msgstr "Solarised Light"
msgid "Solarized Dark"
msgstr ""
msgid "Solarised Dark"
msgstr "Solarised Dark"
msgid "Uncompleted to-dos on top"
msgstr "Niet-afgeronde taken bovenaan"
@@ -1567,6 +1588,10 @@ msgstr "Inschakelen ++insert++ syntaxis"
msgid "Enable multimarkdown table extension"
msgstr "Inschakelen multimarkdown tabel extensie"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Inschakelen ~sub~ syntaxis"
msgid "Show tray icon"
msgstr "Systeemvakpictogram tonen"
@@ -1656,6 +1681,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS-certificaatfouten negeren"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Inschakelen geschiedenis van notities"
@@ -1814,6 +1844,14 @@ msgstr "Toestemming om de camera te gebruiken"
msgid "Your permission to use your camera is required."
msgstr "Je toestemming om de camera te gebruiken is vereist."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Geen actief notitieboek."
#, fuzzy
msgid "Create a notebook"
msgstr "Creëert een nieuw notitieboek."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Er zijn momenteel geen notities. Creëer een notitie door te drukken op de "
@@ -1915,12 +1953,14 @@ msgid "Type new tags or select from list"
msgstr "Typ nieuwe labels of kies ze uit de lijst"
msgid "Warning"
msgstr ""
msgstr "Waarschuwing"
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
"Om synchronisatie via het bestandssysteem te gebruiken is je toestemming "
"nodig om naar externe opslag te schrijven."
#, fuzzy
msgid "Information"
@@ -1948,15 +1988,17 @@ msgid "Export Debug Report"
msgstr "Foutopsporingsrapportage exporteren"
msgid "Fixing search index..."
msgstr ""
msgstr "Zoekindex repareren…"
msgid "Fix search index"
msgstr ""
msgstr "Zoekindex repareren"
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time depending on the number of notes."
msgstr ""
"Gebruik dit om de zoekindex opnieuw op te bouwen als er een probleem is met "
"zoeken: Het kan lang duren afhankelijk van het aantal notities."
msgid "More information"
msgstr "Meer informatie"
@@ -2099,7 +2141,7 @@ msgid "Properties"
msgstr "Eigenschappen van notitie"
msgid "Add body"
msgstr ""
msgstr "Inhoud toevoegen"
msgid "Edit"
msgstr "Bewerken"
@@ -2162,10 +2204,6 @@ msgstr "Zoeken"
#~ "Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
#~ "synchronisatie is ingeschakeld. Zie `sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin-website"
#~ msgid "State: %s."
#~ msgstr "Status: %s."

View File

@@ -398,6 +398,23 @@ msgstr "Usunąć notatkę?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Wyszukuje wskazany <pattern> we wszystkich notatkach."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -763,6 +780,10 @@ msgstr "&Pomoc"
msgid "Website and documentation"
msgstr "Strona internetowa i dokumentacja"
#, fuzzy
msgid "Joplin Forum"
msgstr "Plik Joplin Export"
msgid "Make a donation"
msgstr "Przekaż datek"
@@ -965,8 +986,8 @@ msgstr ""
"pobrane przy synchonizacji."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Aby uzyskać informacje o szyfrowaniu po stronie klienta (E2EE) i przykłady "
"ułatwiające jego uruchomienie, proszę sprawdź dokumentację:"
@@ -1503,10 +1524,10 @@ msgstr "Jasny"
msgid "Dark"
msgstr "Ciemny"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1575,6 +1596,10 @@ msgstr "Aktywuj składnię ++instert++"
msgid "Enable multimarkdown table extension"
msgstr "Aktywuj rozszerzenie dla tabeli multimarkdown"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Aktywuj składnię ~sub~"
msgid "Show tray icon"
msgstr "Pokaż ikonę w zasobniku systemowym"
@@ -1666,6 +1691,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoruj błędy certyfikatu TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Aktywuj historię notatek"
@@ -1820,6 +1850,14 @@ msgstr "Uprawenie do użytkowania kamery"
msgid "Your permission to use your camera is required."
msgstr "Wymagane uprawenienie do użytkowania kamery."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Brak aktywnego notatnika."
#, fuzzy
msgid "Create a notebook"
msgstr "Tworzy nowy notatnik."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Brak notatek. Aby utworzyć, naciśnij przycisk (+)."

View File

@@ -8,13 +8,13 @@ msgid ""
msgstr ""
"Project-Id-Version: Joplin-CLI 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Renato Nunes Bastos <rnbastos@gmail.com>\n"
"Last-Translator: Rafael Teixeira <rto.tinfo@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.7\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -60,7 +60,7 @@ msgid "The command \"%s\" is only available in GUI mode"
msgstr "O comando \"%s\" está disponível somente em modo gráfico"
msgid "Cannot change encrypted item"
msgstr "Não pode mudar um item encriptado"
msgstr "Não é possível mudar um item encriptado"
#, javascript-format
msgid "Missing required argument: %s"
@@ -386,6 +386,23 @@ msgstr "Apagar nota?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Procura o padrão <pattern>em todas as notas."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -593,7 +610,7 @@ msgid "Note list"
msgstr "Lista de notas"
msgid "Note title"
msgstr "Título da Nota:"
msgstr "Título da Nota"
msgid "Note body"
msgstr "Corpo da Nota"
@@ -751,11 +768,15 @@ msgstr "&Ajuda"
msgid "Website and documentation"
msgstr "Website e documentação"
#, fuzzy
msgid "Joplin Forum"
msgstr "Site do Joplin"
msgid "Make a donation"
msgstr "Fazer uma doação"
msgid "Toggle development tools"
msgstr ""
msgstr "Habilitar/Desabilitar ferramentas de desenvolvimento"
#, javascript-format
msgid "Open %s"
@@ -953,8 +974,8 @@ msgstr ""
"elas serão baixadas via sincronização."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Para mais informações sobre Encriptação ponto-a-ponto (E2EE) e recomendações "
"sobre como habilitar, favor verificar a documentação:"
@@ -1175,7 +1196,7 @@ msgid "Encryption Options"
msgstr "Opções de Encriptação"
msgid "Clipper Options"
msgstr "Opções do clipper"
msgstr "Opções do Clipper"
#, javascript-format
msgid ""
@@ -1206,7 +1227,7 @@ msgstr ""
"exportado"
msgid "Retry"
msgstr ""
msgstr "Tentar novamente"
msgid "Add or remove tags"
msgstr "Adicionar ou remover tags"
@@ -1452,15 +1473,18 @@ msgid ""
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
"No modo \"Manual\", os anexos são baixados apenas quando você clica neles. "
"Em \"Automático\", eles são baixados quando você abre a nota. Em \"Sempre\", "
"todos os anexos são baixados independentemente de você abrir a nota ou não."
msgid "Always"
msgstr ""
msgstr "Sempre"
msgid "Manual"
msgstr ""
msgstr "Manual"
msgid "Auto"
msgstr ""
msgstr "Automático"
msgid "Max concurrent connections"
msgstr ""
@@ -1483,10 +1507,10 @@ msgstr "Light"
msgid "Dark"
msgstr "Dark"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1526,7 +1550,7 @@ msgid "Enable math expressions"
msgstr "Habilitar expressões matemáticas"
msgid "Enable ==mark== syntax"
msgstr "Habilitar sintaxe ==marcador== "
msgstr "Habilitar sintaxe ==marcador=="
msgid "Enable footnotes"
msgstr "Habilitar notas de rodapé"
@@ -1538,22 +1562,26 @@ msgid "Enable ~sub~ syntax"
msgstr "Habilitar sintaxe ~sub~"
msgid "Enable ^sup^ syntax"
msgstr "Habilitar sintaxe ^sup^ "
msgstr "Habilitar sintaxe ^sup^"
msgid "Enable deflist syntax"
msgstr "Habilitar sintaxe de deflist "
msgstr "Habilitar sintaxe de deflist"
msgid "Enable abbreviation syntax"
msgstr "Habilitar sintaxe de abreviações"
msgid "Enable markdown emoji"
msgstr "Habilitar emojis em markdown "
msgstr "Habilitar emojis em markdown"
msgid "Enable ++insert++ syntax"
msgstr "Habilitar sintaxe ++inserir++ "
msgstr "Habilitar sintaxe ++inserir++"
msgid "Enable multimarkdown table extension"
msgstr "Habilitar extensão de tabela de multimarkdown "
msgstr "Habilitar extensão de tabela de multimarkdown"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Habilitar sintaxe ~sub~"
msgid "Show tray icon"
msgstr "Exibir tray icon"
@@ -1643,6 +1671,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar erros de certificados TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Habilitar histórico de notas"
@@ -1747,17 +1780,19 @@ msgstr "%s (%s) não pôde ser enviado: %s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Item \"%s\" não pôde ser baixado: %s"
msgstr "O item \"%s\" não pôde ser baixado: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Os itens não podem ser sincronizados"
msgstr "Os itens não podem ser decriptados"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
"O Joplin falhou ao tentar decriptar esses múltiplos items, possivelmente "
"porque eles estão corruptos ou são grandes demais. Esses itens permanecerão "
"no dispositivo, porém o Joplin não vai mais tentar decriptá-los."
msgid "Sync status (synced items / total items)"
msgstr "Status de sincronização (sincronizados / totais)"
@@ -1798,6 +1833,14 @@ msgstr "Permissão para utilizar sua câmera"
msgid "Your permission to use your camera is required."
msgstr "É necessária a sua permissão para utilizar sua câmera."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Excluir nota selecionada ou notebook."
#, fuzzy
msgid "Create a notebook"
msgstr "Cria um novo caderno."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Atualmente, não há notas. Crie uma, clicando no botão (+)."
@@ -1826,15 +1869,13 @@ msgstr "Selecionar data"
msgid "Confirm"
msgstr "Confirmar"
#, fuzzy, javascript-format
#, javascript-format
msgid "Notebook: %s"
msgstr "Cadernos"
msgstr "Caderno: %s"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Itens encriptados não podem ser modificados"
msgstr "Cadernos encriptados não podem ser renomeados"
#, fuzzy
msgid "New Notebook"
msgstr "Novo caderno"
@@ -1849,9 +1890,8 @@ msgstr "Decriptando itens: %d/%d"
msgid "Fetching resources: %d/%d"
msgstr "Buscando recursos: %d"
#, fuzzy
msgid "All notes"
msgstr "Excluir notas?"
msgstr "Todas as notas"
msgid "Notebooks"
msgstr "Cadernos"
@@ -1898,27 +1938,24 @@ msgid "Type new tags or select from list"
msgstr "Digite novsa tags, ou selecione da lista"
msgid "Warning"
msgstr ""
msgstr "Atenção"
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configuração"
msgstr "Informação"
msgid "Encryption Config"
msgstr "Configuração de Encriptação"
#, fuzzy
msgid "Tools"
msgstr "&Ferramentas"
msgstr "Ferramentas"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgstr "Status de sincronização"
msgid "Log"
msgstr "Log"
@@ -1941,9 +1978,8 @@ msgid ""
"may take a long time depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configuração"
msgstr "Mais informações"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
@@ -2009,9 +2045,8 @@ msgstr "O caderno não pôde ser salvo: %s"
msgid "Edit notebook"
msgstr "Editar caderno"
#, fuzzy
msgid "Enter notebook title"
msgstr "Título do caderno:"
msgstr "Entre o título do caderno"
msgid "Show all"
msgstr "Exibir tudo"
@@ -2038,15 +2073,15 @@ msgstr "O app mobile do Joplin não suporta, atualmente, esse tipo de link: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
msgstr "Links com o protocolo \"%s\" não são suportados"
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Tipo de imagem não suportada: %s"
#, fuzzy, javascript-format
#, javascript-format
msgid "Updated: %s"
msgstr "Atualizado: %d."
msgstr "Atualizado: %s"
msgid "View on map"
msgstr "Ver no mapa"
@@ -2058,9 +2093,8 @@ msgstr "Ir para a URL de origem"
msgid "Attach..."
msgstr "Pesquisar..."
#, fuzzy
msgid "Choose an option"
msgstr "Mostrar opções avançadas"
msgstr "Escolha uma opção"
msgid "Take photo"
msgstr "Tirar foto"
@@ -2090,9 +2124,8 @@ msgstr ""
msgid "Edit"
msgstr "Editar"
#, fuzzy
msgid "Add title"
msgstr "título"
msgstr "Adicionar título"
msgid "Login with OneDrive"
msgstr "Login com OneDrive"
@@ -2146,10 +2179,6 @@ msgstr "Procurar"
#~ "O caminho para sincronizar, quando a sincronização do sistema de arquivos "
#~ "está habilitada. Veja `sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Site do Joplin"
#~ msgid "State: %s."
#~ msgstr "Estado: \"%s\"."
@@ -2205,9 +2234,6 @@ msgstr "Procurar"
#~ msgid "Exit the application."
#~ msgstr "Sair da aplicação."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Excluir nota selecionada ou notebook."
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Marcar uma tarefa como completada / não completada"

View File

@@ -357,6 +357,23 @@ msgstr "Ștergeți notița?"
msgid "Searches for the given <pattern> in all the notes."
msgstr ""
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -697,6 +714,10 @@ msgstr "Ajutor"
msgid "Website and documentation"
msgstr "Website și documentație"
#, fuzzy
msgid "Joplin Forum"
msgstr "Website Joplin"
msgid "Make a donation"
msgstr "Faceți o donație"
@@ -879,8 +900,8 @@ msgid ""
msgstr ""
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1384,10 +1405,10 @@ msgstr "Deschisă"
msgid "Dark"
msgstr "Închisă"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1458,6 +1479,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Afișați iconița coșul de gunoi"
@@ -1534,6 +1558,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoră erorile de certificat TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activați criptarea"
@@ -1688,6 +1717,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Niciun caiet de notițe activ."
#, fuzzy
msgid "Create a notebook"
msgstr "Creați caiet de notițe."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -2008,10 +2045,6 @@ msgstr "Caută"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Website Joplin"
#~ msgid "State: %s."
#~ msgstr "Statut: %s."

View File

@@ -394,6 +394,23 @@ msgstr "Удалить заметку?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Запросы для заданного <pattern> во всех заметках."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -757,6 +774,10 @@ msgstr "&Помощь"
msgid "Website and documentation"
msgstr "Сайт и документация"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Сделать пожертвование"
@@ -960,8 +981,8 @@ msgstr ""
"загрузятся при синхронизации."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Для получения дополнительной информации о сквозном шифровании (E2EE) и "
"советах о том, как его включить, пожалуйста, обратитесь к документации:"
@@ -1485,10 +1506,10 @@ msgstr "Светлая"
msgid "Dark"
msgstr "Темная"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1558,6 +1579,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Показывать иконку в трее"
@@ -1648,6 +1672,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Игнорировать ошибки сертификата TLS"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Включить шифрование"
@@ -1804,6 +1833,14 @@ msgstr "Разрешение на использование камеры"
msgid "Your permission to use your camera is required."
msgstr "Необходимо ваше разрешение на использование камеры."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Нет активного блокнота."
#, fuzzy
msgid "Create a notebook"
msgstr "Создает новый блокнот."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Сейчас здесь нет заметок. Создайте новую, нажав кнопку (+)."
@@ -2151,6 +2188,3 @@ msgstr "Поиск"
#~ msgstr ""
#~ "Путь для синхронизации, когда включена синхронизация файловой системы. "
#~ "См. `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"

View File

@@ -395,6 +395,23 @@ msgstr "Želite izbrisati zabeležko?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Išči dani <pattern> v vseh zabeležkah."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -761,6 +778,10 @@ msgstr "Pomoč"
msgid "Website and documentation"
msgstr "Spletna stran in dokumentacija"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin spletna stran"
msgid "Make a donation"
msgstr "Doniraj"
@@ -958,8 +979,8 @@ msgstr ""
"da bodo sčasoma preneseni s sinhronizacijo."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
msgid "Status"
@@ -1492,10 +1513,10 @@ msgstr "Svetlo"
msgid "Dark"
msgstr "Temno"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1567,6 +1588,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
@@ -1650,6 +1674,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Omogoči enkripcijo"
@@ -1810,6 +1839,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ni aktivnih beležnic."
#, fuzzy
msgid "Create a notebook"
msgstr "Ustvari novo beležnico."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Trenutno ni zabeležk. Ustvarite jo s klikom na (+) gumb."
@@ -2146,10 +2183,6 @@ msgstr "Išči"
#~ "Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. "
#~ "Poglej `sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin spletna stran"
#~ msgid "State: %s."
#~ msgstr "Stanje: %s."

View File

@@ -391,6 +391,23 @@ msgstr "Обрисати белешку?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Претражује задати <pattern> у свим белешкама."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -757,6 +774,10 @@ msgstr "&Помоћ"
msgid "Website and documentation"
msgstr "Вебсајт и документација"
#, fuzzy
msgid "Joplin Forum"
msgstr "Џоплин фајл за извоз"
msgid "Make a donation"
msgstr "Донација"
@@ -959,8 +980,8 @@ msgstr ""
"преузети путем синхронизације."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"За више информација о End-To-End Шифровању (Е2ЕЕ) и саветима о томе како да "
"га омогућите, молимо вас да проверите документацију:"
@@ -1492,10 +1513,10 @@ msgstr "Светла"
msgid "Dark"
msgstr "Тамна"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1564,6 +1585,10 @@ msgstr "Омогући ++insert++ синтаксу"
msgid "Enable multimarkdown table extension"
msgstr "Омогући проширење мултимаркдаун табеле"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "Омогућу ~sub~ синтаксу"
msgid "Show tray icon"
msgstr "Прикажи иконицу апликације на траци"
@@ -1652,6 +1677,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Занемари грешке са ТЛС сертификатима"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "Омогући историју бележнице"
@@ -1808,6 +1838,14 @@ msgstr "Дозвола за употребу камере"
msgid "Your permission to use your camera is required."
msgstr "Ваша дозвола за употребу камере је неопходна."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Нема активне бележнице."
#, fuzzy
msgid "Create a notebook"
msgstr "Креира нову бележницу."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Тренутно нема белешки. Направите једну тако што ће те кликнути на (+) дугме."

View File

@@ -396,6 +396,23 @@ msgstr "Ta bort anteckning?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Söker efter det givna <pattern> i alla anteckningarna."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -763,6 +780,10 @@ msgstr "Hjälp"
msgid "Website and documentation"
msgstr "Webbplats och dokumentation"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Gör en donation"
@@ -965,8 +986,8 @@ msgstr ""
"småningom kommer att hämtas via synkronisering."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"För mer information om End-to-End Encryption (E2EE) och råd om hur du "
"aktiverar det finns i dokumentationen:"
@@ -1494,10 +1515,10 @@ msgstr "Ljus"
msgid "Dark"
msgstr "Mörk"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1568,6 +1589,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Visa fältikon"
@@ -1657,6 +1681,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorera TLS-certifikatfel"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Aktivera kryptering"
@@ -1813,6 +1842,14 @@ msgstr "Tillåtelse att använda kameran"
msgid "Your permission to use your camera is required."
msgstr "Du måste ge tillåtelse att använda kameran."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Ingen aktiv anteckningsbok."
#, fuzzy
msgid "Create a notebook"
msgstr "Skapar en ny anteckningsbok."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
"Det finns för närvarande inga anteckningar. Skapa en genom att klicka på (+)-"
@@ -2167,9 +2204,6 @@ msgstr "Sök"
#~ "Sökvägen att synkronisera med när synkronisering av filsystem är "
#~ "aktiverat. Se `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "State: %s."
#~ msgstr "Tillstånd: %s."

View File

@@ -376,6 +376,23 @@ msgstr "Notu sil?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "Tüm notlarda girilen <pattern> i arar."
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -730,6 +747,10 @@ msgstr "Yardım"
msgid "Website and documentation"
msgstr "Web sitesi ve dökümanlar"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "Bağış yapın"
@@ -934,8 +955,8 @@ msgstr ""
"senkronizasyon yoluyla indirilmeleri sağlanacaktır."
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr ""
"Uçtan Uca Şifreleme (E2EE) hakkında bilgi ve nasıl aktif edilebileceğine "
"dair ipuçları için lütfen belgeleri inceleyin:"
@@ -1462,10 +1483,10 @@ msgstr "Aydınlık"
msgid "Dark"
msgstr "Karanlık"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1536,6 +1557,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "Tepsi simgesini göster"
@@ -1624,6 +1648,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS sertifikası hatalarını yoksay"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Şifrelemeyi etkinleştir"
@@ -1779,6 +1808,14 @@ msgstr "Kamera kullanımı için izin"
msgid "Your permission to use your camera is required."
msgstr "Kamera kullanımı için izniniz gerekmektedir."
#, fuzzy
msgid "You currently have no notebooks."
msgstr "Aktif not defteri yok."
#, fuzzy
msgid "Create a notebook"
msgstr "Yeni bir not defteri oluşturur."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Şu anda not yok. (+) butonuna tıklayarak bir tane oluşturun."
@@ -2125,6 +2162,3 @@ msgstr "Arama"
#~ msgstr ""
#~ "Dosya sistemi senkronizasyonu etkinleştirildiğinde senkronize edilecek "
#~ "yol. Bakınız `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"

View File

@@ -371,6 +371,23 @@ msgstr "是否删除笔记?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "在所有笔记内搜索给定的 <pattern>。"
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -716,6 +733,10 @@ msgstr "帮助 (&H)"
msgid "Website and documentation"
msgstr "网站与文档"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin v%s"
msgid "Make a donation"
msgstr "捐赠"
@@ -908,8 +929,8 @@ msgstr ""
"能通过同步下载。"
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr "有关端到端加密(E2EE)的更多信息,以及如何启用它的建议,请查看文档:"
msgid "Status"
@@ -1424,10 +1445,10 @@ msgstr "明亮"
msgid "Dark"
msgstr "深邃"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1496,6 +1517,10 @@ msgstr "启用 ++insert++ 句法"
msgid "Enable multimarkdown table extension"
msgstr "启用 multimarkdown 表格扩展"
#, fuzzy
msgid "Enable Fountain syntax support"
msgstr "启用 ~sub~ 句法"
msgid "Show tray icon"
msgstr "显示托盘图标"
@@ -1580,6 +1605,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 证书错误"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
msgid "Enable note history"
msgstr "启用笔记历史"
@@ -1732,6 +1762,14 @@ msgstr "使用摄像头的权限"
msgid "Your permission to use your camera is required."
msgstr "您须要授予相机权限。"
#, fuzzy
msgid "You currently have no notebooks."
msgstr "无活动笔记本。"
#, fuzzy
msgid "Create a notebook"
msgstr "新建笔记本。"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "当前没有任何笔记。点击 (+) 按钮创建。"
@@ -2072,9 +2110,6 @@ msgstr "搜索"
#~ "See `sync.target`."
#~ msgstr "启用文件系统同步时要同步的路径。见 `sync.target`。"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "State: %s."
#~ msgstr "状态:%s。"

View File

@@ -372,6 +372,23 @@ msgstr "刪除記事?"
msgid "Searches for the given <pattern> in all the notes."
msgstr "在所有記事中搜索特定的 <pattern>。"
#, javascript-format
msgid ""
"Start, stop or check the API server. To specify on which port it should run, "
"set the api.port config variable. Commands are (%s)."
msgstr ""
#, javascript-format
msgid "Server is already running on port %d"
msgstr ""
#, javascript-format
msgid "Server is running on port %d"
msgstr ""
msgid "Server is not running."
msgstr ""
#, javascript-format
msgid ""
"Sets the property <name> of the given <note> to the given [value]. Possible "
@@ -728,6 +745,10 @@ msgstr "說明"
msgid "Website and documentation"
msgstr "官方網站及線上說明"
#, fuzzy
msgid "Joplin Forum"
msgstr "Joplin 官方網站"
msgid "Make a donation"
msgstr "捐助"
@@ -921,8 +942,8 @@ msgstr ""
"可能最終會通過同步下載。"
msgid ""
"For more information about End-To-End Encryption (E2EE) and advices on how "
"to enable it please check the documentation:"
"For more information about End-To-End Encryption (E2EE) and advice on how to "
"enable it please check the documentation:"
msgstr "有關端到端加密 (E2EE) 的詳細資訊以及該如何啟用它,請參考線上文檔:"
msgid "Status"
@@ -1433,10 +1454,10 @@ msgstr "光亮"
msgid "Dark"
msgstr "暗黑"
msgid "Solarized Light"
msgid "Solarised Light"
msgstr ""
msgid "Solarized Dark"
msgid "Solarised Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
@@ -1507,6 +1528,9 @@ msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Enable Fountain syntax support"
msgstr ""
msgid "Show tray icon"
msgstr "顯示系統匣圖示"
@@ -1590,6 +1614,11 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 證書錯誤"
msgid ""
"Specify the port that should be used by the API server. If not set, a "
"default will be used."
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "啟用加密"
@@ -1747,6 +1776,14 @@ msgstr ""
msgid "Your permission to use your camera is required."
msgstr ""
#, fuzzy
msgid "You currently have no notebooks."
msgstr "無使用中的記事本。"
#, fuzzy
msgid "Create a notebook"
msgstr "新增記事本。"
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "您當前沒有任何筆記。通過按一下 (+) 鍵去新增一則筆記。"
@@ -2078,10 +2115,6 @@ msgstr "搜尋"
#~ "See `sync.target`."
#~ msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin 官方網站"
#~ msgid "State: %s."
#~ msgstr "狀態: %s。"

View File

@@ -1,9 +1,22 @@
{
"name": "joplin",
"version": "1.0.140",
"version": "1.0.146",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@cronvel/get-pixels": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.3.1.tgz",
"integrity": "sha512-jgDb8vGPkpjRDbiYyHTI2Bna4HJysjPNSiERzBnRJjCR/YqC3u0idTae0tmNECsaZLOpAWmlK9wiIwnLGIT9Bg==",
"requires": {
"jpeg-js": "^0.1.1",
"ndarray": "^1.0.13",
"ndarray-pack": "^1.1.1",
"node-bitmap": "0.0.1",
"omggif": "^1.0.5",
"pngjs": "^2.0.0"
}
},
"abab": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
@@ -127,22 +140,6 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async-kit": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/async-kit/-/async-kit-2.2.3.tgz",
"integrity": "sha1-JkdRonndxfWbQZY4uAWuLEmFj7c=",
"requires": {
"nextgen-events": "^0.9.0",
"tree-kit": "^0.5.26"
},
"dependencies": {
"nextgen-events": {
"version": "0.9.9",
"resolved": "https://registry.npmjs.org/nextgen-events/-/nextgen-events-0.9.9.tgz",
"integrity": "sha1-OaivxKK4RTiMV+LGu5cWcRmGo6A="
}
}
},
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
@@ -169,9 +166,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
"integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"balanced-match": {
"version": "1.0.0",
@@ -230,14 +227,6 @@
}
}
},
"boom": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"requires": {
"hoek": "4.x.x"
}
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
@@ -310,6 +299,11 @@
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
},
"chroma-js": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.0.6.tgz",
"integrity": "sha512-IiiClbBRkRwuXNl6impq5ssEhUGpmWvc5zzImZbDUWLWcFbj6ZbtsdZEx6sIXMKes7azgYaUpnmsY1T8BL6PqQ=="
},
"clean-css": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
@@ -433,24 +427,6 @@
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
},
"cryptiles": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"requires": {
"boom": "5.x.x"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"requires": {
"hoek": "4.x.x"
}
}
}
},
"css": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
@@ -498,11 +474,6 @@
"assert-plus": "^1.0.0"
}
},
"data-uri-to-buffer": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
"integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
},
"data-urls": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
@@ -559,6 +530,11 @@
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
@@ -716,9 +692,9 @@
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
},
"extend": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf": {
"version": "1.3.0",
@@ -748,6 +724,14 @@
"format": "^0.2.2"
}
},
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"requires": {
"pend": "~1.2.0"
}
},
"file-type": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
@@ -891,24 +875,6 @@
}
}
},
"get-pixels": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/get-pixels/-/get-pixels-3.3.0.tgz",
"integrity": "sha1-jZeVvq4YhQuED3SVgbrcBdPjbkE=",
"requires": {
"data-uri-to-buffer": "0.0.3",
"jpeg-js": "^0.1.1",
"mime-types": "^2.0.1",
"ndarray": "^1.0.13",
"ndarray-pack": "^1.1.1",
"node-bitmap": "0.0.1",
"omggif": "^1.0.5",
"parse-data-uri": "^0.2.0",
"pngjs": "^2.0.0",
"request": "^2.44.0",
"through": "^2.3.4"
}
},
"get-prototype-chain": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-prototype-chain/-/get-prototype-chain-1.0.1.tgz",
@@ -956,12 +922,35 @@
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
"ajv": "^5.1.0",
"ajv": "^6.5.5",
"har-schema": "^2.0.0"
},
"dependencies": {
"ajv": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
}
}
},
"has-ansi": {
@@ -989,17 +978,6 @@
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"hawk": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"requires": {
"boom": "4.x.x",
"cryptiles": "3.x.x",
"hoek": "4.x.x",
"sntp": "2.x.x"
}
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
@@ -1010,11 +988,6 @@
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz",
"integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4="
},
"hoek": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
},
"html-encoding-sniffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
@@ -1042,6 +1015,25 @@
"uglify-js": "3.3.x"
}
},
"http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
"integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
},
"dependencies": {
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -1710,6 +1702,11 @@
"graceful-fs": "^4.1.9"
}
},
"lazyness": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/lazyness/-/lazyness-1.1.1.tgz",
"integrity": "sha512-rYHC6l6LeRlJSt5jxpqN8z/49gZ0CqLi89HAGzJjHahCFlqEjFGFN9O15hmzSzUGFl7zN/vOWduv/+0af3r/kQ=="
},
"left-pad": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
@@ -1747,9 +1744,9 @@
}
},
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lodash-es": {
"version": "4.17.4",
@@ -1876,9 +1873,9 @@
}
},
"minizlib": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
"integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
"integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"requires": {
"minipass": "^2.2.1"
}
@@ -1892,15 +1889,33 @@
}
},
"moment": {
"version": "2.19.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz",
"integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc="
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multiparty": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.1.tgz",
"integrity": "sha512-AvESCnNoQlZiOfP9R4mxN8M9csy2L16EIbWIkt3l4FuGti9kXBS8QVzlfyg4HEnarJhrzZilgNFlZtqmoiAIIA==",
"requires": {
"fd-slicer": "1.1.0",
"http-errors": "~1.7.0",
"safe-buffer": "5.1.2",
"uid-safe": "2.1.5"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
"nan": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
@@ -1955,9 +1970,9 @@
}
},
"nextgen-events": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/nextgen-events/-/nextgen-events-0.11.3.tgz",
"integrity": "sha512-dC4v/dOF6m8/M05eU712KXjRJ0e/187rx5CMS/fTnulv2QGPps1U/c/J1D3wtegEhK+EE7LuJc3jly3pyfV46g=="
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.3.0.tgz",
"integrity": "sha512-eBz5mrO4Hw2eenPVm0AVPHuAzg/RZetAWMI547RH8O9+a0UYhCysiZ3KoNWslnWNlHetb9kzowEshsKsmFo2YQ=="
},
"no-case": {
"version": "2.3.2",
@@ -2074,9 +2089,9 @@
"integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-assign": {
"version": "4.1.1",
@@ -2120,9 +2135,9 @@
}
},
"omggif": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.9.tgz",
"integrity": "sha1-3LcCTazVDFK00wPwSALJHAV8dl8="
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
"integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
},
"once": {
"version": "1.4.0",
@@ -2200,14 +2215,6 @@
"no-case": "^2.2.0"
}
},
"parse-data-uri": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
"integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=",
"requires": {
"data-uri-to-buffer": "0.0.3"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -2218,6 +2225,11 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -2349,9 +2361,14 @@
}
},
"querystringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
},
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
"integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs="
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
"integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
},
"rc": {
"version": "1.2.8",
@@ -2416,32 +2433,82 @@
"integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
},
"request": {
"version": "2.85.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
"integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.6.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.5",
"extend": "~3.0.1",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.1",
"har-validator": "~5.0.3",
"hawk": "~6.0.2",
"form-data": "~2.3.2",
"har-validator": "~5.1.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.17",
"oauth-sign": "~0.8.2",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.1",
"safe-buffer": "^5.1.1",
"stringstream": "~0.0.5",
"tough-cookie": "~2.3.3",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.1.0"
"uuid": "^3.3.2"
},
"dependencies": {
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"mime-db": {
"version": "1.40.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"mime-types": {
"version": "2.1.24",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
"mime-db": "1.40.0"
}
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
}
},
"uuid": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
}
}
},
"request-promise-core": {
@@ -2522,6 +2589,24 @@
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"seventh": {
"version": "0.7.28",
"resolved": "https://registry.npmjs.org/seventh/-/seventh-0.7.28.tgz",
"integrity": "sha512-WitJqSwsjLWbCP9cciaozByx4csddLQyNoaPBqOpYFMNE6iD6FK/pM8J2yqtpauSxJUUo7Wfv5KF5w1jbVov7A==",
"requires": {
"setimmediate": "^1.0.5"
}
},
"sharp": {
"version": "0.22.1",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz",
@@ -2623,14 +2708,6 @@
"is-fullwidth-code-point": "^2.0.0"
}
},
"sntp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"requires": {
"hoek": "4.x.x"
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -2812,6 +2889,11 @@
"tweetnacl": "~0.14.0"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
@@ -2823,12 +2905,9 @@
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string-kit": {
"version": "0.6.14",
"resolved": "https://registry.npmjs.org/string-kit/-/string-kit-0.6.14.tgz",
"integrity": "sha512-Sz9Q98Q4JKLaOaXUYLSO8ScWhO9z/itJ53GJOLl+w/wR9XXFt82MzN4Q5pwXN9QZCN1/aCnZhOe67ANK8Vs6Vw==",
"requires": {
"xregexp": "^3.2.0"
}
"version": "0.9.10",
"resolved": "https://registry.npmjs.org/string-kit/-/string-kit-0.9.10.tgz",
"integrity": "sha512-hcJem/u3/ddt3lSY2Xlx953XCHe3C8BX2XEWbPrByjyJ0CSR36X7kzsGFsI5lLaG94dLCQYpt8ffVwRjKpRT6g=="
},
"string-padding": {
"version": "1.0.2",
@@ -2883,11 +2962,6 @@
}
}
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -2937,16 +3011,43 @@
}
},
"tar": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz",
"integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==",
"version": "4.4.10",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz",
"integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==",
"requires": {
"chownr": "^1.0.1",
"fs-minipass": "^1.2.3",
"minipass": "^2.2.1",
"minizlib": "^1.1.0",
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.5",
"minizlib": "^1.2.1",
"mkdirp": "^0.5.0",
"yallist": "^3.0.2"
"safe-buffer": "^5.1.2",
"yallist": "^3.0.3"
},
"dependencies": {
"chownr": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
"integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A=="
},
"minipass": {
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
"integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
"yallist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
"integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
}
}
},
"tar-fs": {
@@ -3008,23 +3109,20 @@
}
},
"terminal-kit": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/terminal-kit/-/terminal-kit-1.15.1.tgz",
"integrity": "sha512-nk0+wDRfcvjnBXW6b2X2SFBzCMbT5ZJX56rRvmq/CFaimMYfWHU1eooy33RmzWByXWkkI71zx17q3vlp71OUNA==",
"version": "1.31.2",
"resolved": "https://registry.npmjs.org/terminal-kit/-/terminal-kit-1.31.2.tgz",
"integrity": "sha512-qbzHgHONdyJ5SQsjMWvoV5Jivw2VGbV8uw6U8WMgEgkbjX5AZ6Irhs183z459+b6u++36+6WIFeYddIDoXKNeQ==",
"requires": {
"async-kit": "^2.2.3",
"get-pixels": "^3.3.0",
"@cronvel/get-pixels": "^3.3.1",
"chroma-js": "^2.0.4",
"lazyness": "^1.1.1",
"ndarray": "^1.0.18",
"nextgen-events": "^0.11.2",
"string-kit": "^0.6.9",
"tree-kit": "^0.5.26"
"nextgen-events": "^1.1.1",
"seventh": "^0.7.28",
"string-kit": "^0.9.10",
"tree-kit": "^0.6.1"
}
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"tkwidgets": {
"version": "0.5.26",
"resolved": "https://registry.npmjs.org/tkwidgets/-/tkwidgets-0.5.26.tgz",
@@ -3053,6 +3151,11 @@
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"tough-cookie": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
@@ -3077,9 +3180,9 @@
}
},
"tree-kit": {
"version": "0.5.26",
"resolved": "https://registry.npmjs.org/tree-kit/-/tree-kit-0.5.26.tgz",
"integrity": "sha1-hXHIb6JNHbdU5bDLOn4J9B50qN8="
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/tree-kit/-/tree-kit-0.6.1.tgz",
"integrity": "sha512-7mV4KbsLMuA6ths3J1wpVUj2PLmLdoNEGnP9fm3kxef4UXYC/A0rL5gKsqtkUaCMuRYUMORyioy8IpBWUBQ1Ig=="
},
"tunnel-agent": {
"version": "0.6.0",
@@ -3129,6 +3232,14 @@
}
}
},
"uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"requires": {
"random-bytes": "~1.0.0"
}
},
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -3175,12 +3286,12 @@
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
"url-parse": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
"integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==",
"version": "1.4.7",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
"integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
"requires": {
"querystringify": "~1.0.0",
"requires-port": "~1.0.0"
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
}
},
"util-deprecate": {
@@ -3319,11 +3430,6 @@
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
"integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8="
},
"xregexp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-3.2.0.tgz",
"integrity": "sha1-yzYBmHv+JpW1hAAMGPHEqMMih44="
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",

View File

@@ -20,7 +20,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.140",
"version": "1.0.146",
"bin": {
"joplin": "./main.js"
},
@@ -47,11 +47,11 @@
"joplin-turndown-plugin-gfm": "^1.0.8",
"jssha": "^2.3.0",
"levenshtein": "^1.0.5",
"lodash": "^4.17.4",
"markdown-it": "^8.4.2",
"md5": "^2.2.1",
"mime": "^2.0.3",
"moment": "^2.18.1",
"moment": "^2.24.0",
"multiparty": "^4.2.1",
"node-emoji": "^1.8.1",
"node-fetch": "^1.7.1",
"node-persist": "^2.1.0",
@@ -60,6 +60,7 @@
"query-string": "4.3.4",
"read-chunk": "^2.1.0",
"redux": "^3.7.2",
"request": "^2.88.0",
"sax": "^1.2.2",
"server-destroy": "^1.0.1",
"sharp": "^0.22.1",
@@ -69,10 +70,11 @@
"string-to-stream": "^1.1.0",
"strip-ansi": "^4.0.0",
"syswide-cas": "^5.2.0",
"tar": "^4.4.0",
"tar": "^4.4.10",
"tcp-port-used": "^0.1.2",
"terminal-kit": "^1.30.0",
"tkwidgets": "^0.5.26",
"url-parse": "^1.2.0",
"url-parse": "^1.4.7",
"uuid": "^3.0.1",
"valid-url": "^1.0.9",
"word-wrap": "^1.2.3",

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
@@ -53,4 +55,4 @@ describe('ArrayUtils', function() {
done();
});
});
});

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const os = require('os');
@@ -27,7 +29,7 @@ describe('EnexToMd', function() {
it('should convert from Enex to Markdown', asyncTest(async () => {
const basePath = __dirname + '/enex_to_md';
const files = await shim.fsDriver().readDirStats(basePath);
for (let i = 0; i < files.length; i++) {
const htmlFilename = files[i].path;
if (htmlFilename.indexOf('.html') < 0) continue;
@@ -41,10 +43,10 @@ describe('EnexToMd', function() {
let expectedMd = await shim.fsDriver().readFile(mdPath);
let actualMd = await enexXmlToMd('<div>' + html + '</div>', []);
if (os.EOL === '\r\n') {
expectedMd = expectedMd.replace(/\r\n/g, '\n')
actualMd = actualMd.replace(/\r\n/g, '\n')
expectedMd = expectedMd.replace(/\r\n/g, '\n');
actualMd = actualMd.replace(/\r\n/g, '\n');
}
if (actualMd !== expectedMd) {
@@ -60,9 +62,9 @@ describe('EnexToMd', function() {
expect(false).toBe(true);
// return;
} else {
expect(true).toBe(true)
expect(true).toBe(true);
}
}
}));
});
});

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const os = require('os');
@@ -29,7 +31,7 @@ describe('HtmlToMd', function() {
const basePath = __dirname + '/html_to_md';
const files = await shim.fsDriver().readDirStats(basePath);
const htmlToMd = new HtmlToMd();
for (let i = 0; i < files.length; i++) {
const htmlFilename = files[i].path;
if (htmlFilename.indexOf('.html') < 0) continue;
@@ -37,16 +39,16 @@ describe('HtmlToMd', function() {
const htmlPath = basePath + '/' + htmlFilename;
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
// if (htmlFilename !== 'mathjax_block.html') continue;
// if (htmlFilename !== 'table_with_pipe.html') continue;
const htmlToMdOptions = {}
const htmlToMdOptions = {};
if (htmlFilename === 'anchor_local.html') {
// Normally the list of anchor names in the document are retrieved from the HTML code
// This is straightforward when the document is still in DOM format, as with the clipper,
// but otherwise it would need to be somehow parsed out from the HTML. Here we just
// hard code the anchors that we know are in the file.
htmlToMdOptions.anchorNames = ['first', 'second']
htmlToMdOptions.anchorNames = ['first', 'second'];
}
const html = await shim.fsDriver().readFile(htmlPath);
@@ -55,8 +57,8 @@ describe('HtmlToMd', function() {
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', htmlToMdOptions);
if (os.EOL === '\r\n') {
expectedMd = expectedMd.replace(/\r\n/g, '\n')
actualMd = actualMd.replace(/\r\n/g, '\n')
expectedMd = expectedMd.replace(/\r\n/g, '\n');
actualMd = actualMd.replace(/\r\n/g, '\n');
}
if (actualMd !== expectedMd) {
@@ -74,9 +76,9 @@ describe('HtmlToMd', function() {
expect(false).toBe(true);
// return;
} else {
expect(true).toBe(true)
expect(true).toBe(true);
}
}
}));
});
});

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
@@ -42,4 +44,4 @@ describe('StringUtils', function() {
done();
});
});
});

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
@@ -54,4 +56,4 @@ describe('TaskQueue', function() {
expect(results[1].error.message).toBe('e');
}));
});
});

View File

@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
@@ -116,7 +118,7 @@ describe('Encryption', function() {
await service.loadMasterKey(masterKey, '123456', true);
let cipherText = await service.encryptString('some secret');
cipherText += "ABCDEFGHIJ";
cipherText += 'ABCDEFGHIJ';
let hasThrown = await checkThrowAsync(async () => await service.decryptString(cipherText));
@@ -147,8 +149,8 @@ describe('Encryption', function() {
// Check that encrypted data is there
expect(!!deserialized.encryption_cipher_text).toBe(true);
encryptedNote = await Note.save(deserialized);
decryptedNote = await Note.decrypt(encryptedNote);
const encryptedNote = await Note.save(deserialized);
const decryptedNote = await Note.decrypt(encryptedNote);
expect(decryptedNote.title).toBe(note.title);
expect(decryptedNote.body).toBe(note.body);
@@ -176,4 +178,4 @@ describe('Encryption', function() {
done();
});
});
});

View File

@@ -0,0 +1,19 @@
<div><strong>singleline strong text.</strong></div><div><br/></div>
<div><b>singleline bold text.</b></div><div><br/></div>
<div><strong>multiline strong
text.</strong></div><div><br/></div>
<div><b>multiline bold
text.</b></div><div><br/></div>
<div><em>singleline emphasized text.</em></div><div><br/></div>
<div><i>singleline italic text.</i></div><div><br/></div>
<div><em>multiline emphasized
text.</em><div><br/></div>
<div><i>multiline italic
text.</i><div><br/></div>
<div><b>singleline bold text</b> next to normal text with leading space.</div><div><br/></div>
<div><b>singleline bold text with trailing space </b>next to normal text.</div><div><br/></div>
<div><b>singleline bold text</b><b> next to more bold text with leading space.</b></div><div><br/></div>
<div><b>singleline bold text with trailing space </b><b>next to more bold text.</b></div><div><br/></div>

View File

@@ -0,0 +1,23 @@
**singleline strong text.**
**singleline bold text.**
**multiline strong text.**
**multiline bold text.**
*singleline emphasized text.*
*singleline italic text.*
*multiline emphasized text.*
*multiline italic text.*
**singleline bold text** next to normal text with leading space.
**singleline bold text with trailing space **next to normal text.
**singleline bold text**** next to more bold text with leading space.**
**singleline bold text with trailing space ****next to more bold text.**

View File

@@ -0,0 +1,11 @@
<div><span style="font-weight: bold;">singleline bold text with span style font-weight: bold;.</span></div><div><br/></div>
<div><span style="font-family: 'TimesNewRoman,Bold';">singleline bold text with span style font-family: 'TimesNewRoman,Bold';.</span></div><div><br/></div>
<div><span style="font-weight: bold;">multiline bold
text with span style font-weight: bold;.</span></div><div><br/></div>
<div><span style="font-family: 'TimesNewRoman,Bold';">multiline bold
text with span style font-family: 'TimesNewRoman,Bold';.</span></div><div><br/></div>
<div><span style="font-weight: bold;">singleline bold text with span style font-weight: bold;</span> next to normal text with leading space.</div><div><br/></div>
<div><span style="font-weight: bold;">singleline bold text with span style font-weight: bold; and with trailing space </span>next to normal text.</div><div><br/></div>
<div><span style="font-weight: bold;">singleline bold text with span style font-weight: bold;</span><span style="font-weight: bold;"> next to more bold text with span style font-weight: bold; and with leading space.</span></div><div><br/></div>
<div><span style="font-weight: bold;">singleline bold text with span style font-weight: bold; and with trailing space </span><span style="font-weight: bold;">next to more bold text with span style font-weight: bold;.</span></div>

Some files were not shown because too many files have changed in this diff Show More