mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Merge branch 'master' of github.com:laurent22/joplin
This commit is contained in:
commit
7d6959e9e4
@ -378,8 +378,6 @@ class Application extends BaseApplication {
|
||||
return this.stdout(object);
|
||||
});
|
||||
|
||||
await WelcomeUtils.install(this.dispatch.bind(this));
|
||||
|
||||
// If we have some arguments left at this point, it's a command
|
||||
// so execute it.
|
||||
if (argv.length) {
|
||||
|
104
CliClient/package-lock.json
generated
104
CliClient/package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joplin",
|
||||
"version": "1.0.139",
|
||||
"version": "1.0.140",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@ -20,18 +20,18 @@
|
||||
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
|
||||
},
|
||||
"acorn-globals": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
|
||||
"integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
|
||||
"integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.1",
|
||||
"acorn-walk": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.0.6",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
|
||||
"integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA=="
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
|
||||
"integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -454,14 +454,14 @@
|
||||
}
|
||||
},
|
||||
"cssom": {
|
||||
"version": "0.3.4",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
|
||||
"integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog=="
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
|
||||
"integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A=="
|
||||
},
|
||||
"cssstyle": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
|
||||
"integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
|
||||
"integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
|
||||
"requires": {
|
||||
"cssom": "0.3.x"
|
||||
}
|
||||
@ -661,9 +661,9 @@
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"escodegen": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
|
||||
"integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
|
||||
"integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
|
||||
"requires": {
|
||||
"esprima": "^3.1.3",
|
||||
"estraverse": "^4.2.0",
|
||||
@ -1437,10 +1437,11 @@
|
||||
"dev": true
|
||||
},
|
||||
"joplin-turndown": {
|
||||
"version": "4.0.11",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
|
||||
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.12.tgz",
|
||||
"integrity": "sha512-HlxkcIiNFSMLBvYktoXqLLHFGuwQYlcPclo0Peeatw3cPe6iFqSsEgEGY/0bYM/fubA/zpPULrJcjST99BO9wQ==",
|
||||
"requires": {
|
||||
"html-entities": "^1.2.1",
|
||||
"jsdom": "^11.9.0"
|
||||
}
|
||||
},
|
||||
@ -1499,9 +1500,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
|
||||
"integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
|
||||
"version": "6.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
|
||||
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@ -1515,9 +1516,9 @@
|
||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
|
||||
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
|
||||
"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"
|
||||
}
|
||||
@ -1557,16 +1558,16 @@
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.37.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
|
||||
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
|
||||
"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.21",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
|
||||
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
|
||||
"version": "2.1.24",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
|
||||
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
|
||||
"requires": {
|
||||
"mime-db": "~1.37.0"
|
||||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
@ -2030,9 +2031,9 @@
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
||||
},
|
||||
"nwsapi": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
|
||||
"integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
|
||||
"integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.8.2",
|
||||
@ -2411,21 +2412,28 @@
|
||||
}
|
||||
},
|
||||
"request-promise-core": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
|
||||
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
|
||||
"integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
|
||||
"requires": {
|
||||
"lodash": "^4.13.1"
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"request-promise-native": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
|
||||
"integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
|
||||
"integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
|
||||
"requires": {
|
||||
"request-promise-core": "1.1.1",
|
||||
"stealthy-require": "^1.1.0",
|
||||
"tough-cookie": ">=2.3.3"
|
||||
"request-promise-core": "1.1.2",
|
||||
"stealthy-require": "^1.1.1",
|
||||
"tough-cookie": "^2.3.3"
|
||||
}
|
||||
},
|
||||
"requires-port": {
|
||||
@ -2852,9 +2860,9 @@
|
||||
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
|
||||
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||
},
|
||||
"syswide-cas": {
|
||||
"version": "5.2.0",
|
||||
|
@ -20,7 +20,7 @@
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.139",
|
||||
"version": "1.0.140",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@ -43,7 +43,7 @@
|
||||
"html-minifier": "^3.5.15",
|
||||
"image-data-uri": "^2.0.0",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown": "^4.0.12",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||
"jssha": "^2.3.0",
|
||||
"levenshtein": "^1.0.5",
|
||||
|
@ -3,5 +3,4 @@ set -e
|
||||
CLIENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/Temp/TestNotes2 --stack-trace-enabled --log-level debug --env dev "$@"
|
||||
|
||||
# bash $CLIENT_DIR/build.sh && NODE_PATH="$CLIENT_DIR/build/" node build/main.js --profile ~/.config/joplin --stack-trace-enabled --log-level debug "$@"
|
||||
# bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/.config/joplin --stack-trace-enabled --log-level debug --env dev "$@"
|
@ -37,12 +37,22 @@ describe('HtmlToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'picture.html') continue;
|
||||
// if (htmlFilename !== 'anchor_local.html') continue;
|
||||
|
||||
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']
|
||||
}
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
||||
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
|
||||
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', htmlToMdOptions);
|
||||
|
||||
if (os.EOL === '\r\n') {
|
||||
expectedMd = expectedMd.replace(/\r\n/g, '\n')
|
||||
|
6
CliClient/tests/html_to_md/anchor_local.html
Normal file
6
CliClient/tests/html_to_md/anchor_local.html
Normal file
@ -0,0 +1,6 @@
|
||||
<p><a href="#first">First</a></p>
|
||||
<p><a href="#second">Second</a></p>
|
||||
<p>Third</p>
|
||||
<p><a name="first"></a>First</p>
|
||||
<p><a id="second"></a>Second</p>
|
||||
<p><a id="third"></a>Third</p>
|
11
CliClient/tests/html_to_md/anchor_local.md
Normal file
11
CliClient/tests/html_to_md/anchor_local.md
Normal file
@ -0,0 +1,11 @@
|
||||
[First](#first)
|
||||
|
||||
[Second](#second)
|
||||
|
||||
Third
|
||||
|
||||
<a id="first"></a>First
|
||||
|
||||
<a id="second"></a>Second
|
||||
|
||||
Third
|
@ -1 +1 @@
|
||||
[Some text]()
|
||||
Some text
|
@ -30,6 +30,7 @@ describe('urlUtils', function() {
|
||||
expect(urlUtils.prependBaseUrl('mailto:emailme@example.com', 'http://example.com')).toBe('mailto:emailme@example.com');
|
||||
expect(urlUtils.prependBaseUrl('javascript:var%20testing=true', 'http://example.com')).toBe('javascript:var%20testing=true');
|
||||
expect(urlUtils.prependBaseUrl('http://alreadyabsolute.com', 'http://example.com')).toBe('http://alreadyabsolute.com');
|
||||
expect(urlUtils.prependBaseUrl('#local-anchor', 'http://example.com')).toBe('#local-anchor');
|
||||
|
||||
done();
|
||||
});
|
||||
|
@ -23,11 +23,12 @@ window.joplinEnv = function() {
|
||||
return env_;
|
||||
}
|
||||
|
||||
async function browserCaptureVisibleTabs(windowId, options) {
|
||||
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' });
|
||||
async function browserCaptureVisibleTabs(windowId) {
|
||||
const options = { format: 'jpeg' };
|
||||
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, options);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' }, (image) => {
|
||||
browser_.tabs.captureVisibleTab(windowId, options, (image) => {
|
||||
resolve(image);
|
||||
});
|
||||
});
|
||||
@ -56,7 +57,7 @@ browser_.runtime.onMessage.addListener(async (command) => {
|
||||
|
||||
const zoom = await browserGetZoom();
|
||||
|
||||
const imageDataUrl = await browserCaptureVisibleTabs(null, { format: 'jpeg' });
|
||||
const imageDataUrl = await browserCaptureVisibleTabs(null);
|
||||
content = Object.assign({}, command.content);
|
||||
content.image_data_url = imageDataUrl;
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
const protocol = url.toLowerCase().split(':')[0];
|
||||
if (['http', 'https', 'file'].indexOf(protocol) >= 0) return url;
|
||||
|
||||
if (url.indexOf('//')) {
|
||||
if (url.indexOf('//') === 0) {
|
||||
return location.protocol + url;
|
||||
} else if (url[0] === '/') {
|
||||
return location.protocol + '//' + location.host + url;
|
||||
@ -34,8 +34,20 @@
|
||||
return document.title.trim();
|
||||
}
|
||||
|
||||
function pageLocationOrigin() {
|
||||
// location.origin normally returns the protocol + domain + port (eg. https://example.com:8080)
|
||||
// but for file:// protocol this is browser dependant and in particular Firefox returns "null"
|
||||
// in this case.
|
||||
|
||||
if (location.protocol === 'file:') {
|
||||
return 'file://';
|
||||
} else {
|
||||
return location.origin;
|
||||
}
|
||||
}
|
||||
|
||||
function baseUrl() {
|
||||
let output = location.origin + location.pathname;
|
||||
let output = pageLocationOrigin() + location.pathname;
|
||||
if (output[output.length - 1] !== '/') {
|
||||
output = output.split('/');
|
||||
output.pop();
|
||||
@ -60,6 +72,20 @@
|
||||
return output;
|
||||
}
|
||||
|
||||
function getAnchorNames(element) {
|
||||
const anchors = element.getElementsByTagName('a');
|
||||
const output = [];
|
||||
for (let i = 0; i < anchors.length; i++) {
|
||||
const anchor = anchors[i];
|
||||
if (anchor.id) {
|
||||
output.push(anchor.id);
|
||||
} else if (anchor.name) {
|
||||
output.push(anchor.name);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// Cleans up element by removing all its invisible children (which we don't want to render as Markdown)
|
||||
function cleanUpElement(element, imageSizes) {
|
||||
const childNodes = element.childNodes;
|
||||
@ -117,16 +143,17 @@
|
||||
async function prepareCommandResponse(command) {
|
||||
console.info('Got command: ' + command.name);
|
||||
|
||||
const clippedContentResponse = (title, html, imageSizes) => {
|
||||
const clippedContentResponse = (title, html, imageSizes, anchorNames) => {
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
title: title,
|
||||
html: html,
|
||||
base_url: baseUrl(),
|
||||
url: location.origin + location.pathname + location.search,
|
||||
url: pageLocationOrigin() + location.pathname + location.search,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: imageSizes,
|
||||
anchor_names: anchorNames,
|
||||
};
|
||||
}
|
||||
|
||||
@ -143,7 +170,7 @@
|
||||
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
|
||||
return response;
|
||||
}
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(document));
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else if (command.name === "isProbablyReaderable") {
|
||||
|
||||
@ -156,14 +183,14 @@
|
||||
const cleanDocument = document.body.cloneNode(true);
|
||||
const imageSizes = getImageSizes(document, true);
|
||||
cleanUpElement(cleanDocument, imageSizes);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes, getAnchorNames(document));
|
||||
|
||||
} else if (command.name === "selectedHtml") {
|
||||
|
||||
const range = window.getSelection().getRangeAt(0);
|
||||
const container = document.createElement('div');
|
||||
container.appendChild(range.cloneContents());
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else if (command.name === 'screenshot') {
|
||||
|
||||
@ -265,7 +292,7 @@
|
||||
const content = {
|
||||
title: pageTitle(),
|
||||
crop_rect: selectionArea,
|
||||
url: location.origin + location.pathname,
|
||||
url: pageLocationOrigin() + location.pathname,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags,
|
||||
};
|
||||
@ -286,8 +313,8 @@
|
||||
|
||||
} else if (command.name === "pageUrl") {
|
||||
|
||||
let url = location.origin + location.pathname + location.search;
|
||||
return clippedContentResponse(pageTitle(), url, getImageSizes(document));
|
||||
let url = pageLocationOrigin() + location.pathname + location.search;
|
||||
return clippedContentResponse(pageTitle(), url, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else {
|
||||
throw new Error('Unknown command: ' + JSON.stringify(command));
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper [DEV]",
|
||||
"version": "1.0.14",
|
||||
"version": "1.0.15",
|
||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||
"homepage_url": "https://joplinapp.org",
|
||||
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
|
||||
|
@ -34,6 +34,7 @@ class Bridge {
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: command.image_sizes || {},
|
||||
anchor_names: command.anchor_names || [],
|
||||
};
|
||||
|
||||
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });
|
||||
|
@ -704,6 +704,16 @@ class Application extends BaseApplication {
|
||||
name: 'commandStartExternalEditing',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Tags'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+Alt+T',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'setTags',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
|
@ -398,7 +398,7 @@ class NoteTextComponent extends React.Component {
|
||||
return this.webviewRef_.current.wrappedInstance;
|
||||
}
|
||||
|
||||
async saveIfNeeded(saveIfNewNote = false) {
|
||||
async saveIfNeeded(saveIfNewNote = false, options = {}) {
|
||||
const forceSave = saveIfNewNote && (this.state.note && !this.state.note.id);
|
||||
|
||||
if (this.scheduleSaveTimeout_) clearTimeout(this.scheduleSaveTimeout_);
|
||||
@ -406,7 +406,7 @@ class NoteTextComponent extends React.Component {
|
||||
if (!forceSave) {
|
||||
if (!shared.isModified(this)) return;
|
||||
}
|
||||
await shared.saveNoteButton_press(this);
|
||||
await shared.saveNoteButton_press(this, null, options);
|
||||
|
||||
ExternalEditWatcher.instance().updateNoteFile(this.state.note);
|
||||
}
|
||||
@ -1172,6 +1172,9 @@ class NoteTextComponent extends React.Component {
|
||||
|
||||
async commandStartExternalEditing() {
|
||||
try {
|
||||
await this.saveIfNeeded(true, {
|
||||
autoTitle: false,
|
||||
});
|
||||
await ExternalEditWatcher.instance().openAndWatch(this.state.note);
|
||||
} catch (error) {
|
||||
bridge().showErrorMessageBox(_('Error opening note in editor: %s', error.message));
|
||||
|
@ -210,7 +210,7 @@ class PromptDialog extends React.Component {
|
||||
theme={styles.tagListTheme}
|
||||
ref={this.answerInput_}
|
||||
value={this.state.answer}
|
||||
placeholder={this.props.label ? this.props.label.replace(':', '') : ''}
|
||||
placeholder=""
|
||||
components={makeAnimated()}
|
||||
isMulti={true}
|
||||
isClearable={false}
|
||||
|
@ -103,7 +103,7 @@ class SideBarComponent extends React.Component {
|
||||
};
|
||||
}
|
||||
|
||||
style() {
|
||||
style(depth) {
|
||||
const theme = themeStyle(this.props.theme);
|
||||
|
||||
const itemHeight = 25;
|
||||
@ -118,6 +118,8 @@ class SideBarComponent extends React.Component {
|
||||
// paddingLeft: 14,
|
||||
display: "flex",
|
||||
alignItems: "stretch",
|
||||
// Allow 3 levels of color depth
|
||||
backgroundColor: theme.depthColor.replace('OPACITY', Math.min(depth * 0.1, 0.3)),
|
||||
},
|
||||
listItem: {
|
||||
fontFamily: theme.fontFamily,
|
||||
@ -417,7 +419,7 @@ class SideBarComponent extends React.Component {
|
||||
|
||||
const itemTitle = Folder.displayTitle(folder);
|
||||
|
||||
let containerStyle = Object.assign({}, this.style().listItemContainer);
|
||||
let containerStyle = Object.assign({}, this.style(depth).listItemContainer);
|
||||
if (selected) containerStyle = Object.assign(containerStyle, this.style().listItemSelected);
|
||||
|
||||
let expandLinkStyle = Object.assign({}, this.style().listItemExpandIcon);
|
||||
|
76
ElectronClient/app/package-lock.json
generated
76
ElectronClient/app/package-lock.json
generated
@ -159,18 +159,18 @@
|
||||
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
|
||||
},
|
||||
"acorn-globals": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
|
||||
"integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
|
||||
"integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.1",
|
||||
"acorn-walk": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.0.5",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
|
||||
"integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg=="
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
|
||||
"integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1640,14 +1640,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"cssom": {
|
||||
"version": "0.3.4",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
|
||||
"integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog=="
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
|
||||
"integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A=="
|
||||
},
|
||||
"cssstyle": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
|
||||
"integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
|
||||
"integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
|
||||
"requires": {
|
||||
"cssom": "0.3.x"
|
||||
}
|
||||
@ -2223,9 +2223,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"escodegen": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
|
||||
"integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
|
||||
"integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
|
||||
"requires": {
|
||||
"esprima": "^3.1.3",
|
||||
"estraverse": "^4.2.0",
|
||||
@ -3752,10 +3752,11 @@
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||
},
|
||||
"joplin-turndown": {
|
||||
"version": "4.0.11",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
|
||||
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.12.tgz",
|
||||
"integrity": "sha512-HlxkcIiNFSMLBvYktoXqLLHFGuwQYlcPclo0Peeatw3cPe6iFqSsEgEGY/0bYM/fubA/zpPULrJcjST99BO9wQ==",
|
||||
"requires": {
|
||||
"html-entities": "^1.2.1",
|
||||
"jsdom": "^11.9.0"
|
||||
}
|
||||
},
|
||||
@ -4613,9 +4614,9 @@
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
||||
},
|
||||
"nwsapi": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
|
||||
"integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
|
||||
"integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.8.2",
|
||||
@ -5601,21 +5602,28 @@
|
||||
}
|
||||
},
|
||||
"request-promise-core": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
|
||||
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
|
||||
"integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
|
||||
"requires": {
|
||||
"lodash": "^4.13.1"
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"request-promise-native": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
|
||||
"integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
|
||||
"integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
|
||||
"requires": {
|
||||
"request-promise-core": "1.1.1",
|
||||
"stealthy-require": "^1.1.0",
|
||||
"tough-cookie": ">=2.3.3"
|
||||
"request-promise-core": "1.1.2",
|
||||
"stealthy-require": "^1.1.1",
|
||||
"tough-cookie": "^2.3.3"
|
||||
}
|
||||
},
|
||||
"require-directory": {
|
||||
@ -6045,9 +6053,9 @@
|
||||
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
|
||||
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||
},
|
||||
"syswide-cas": {
|
||||
"version": "5.1.0",
|
||||
|
@ -101,7 +101,7 @@
|
||||
"highlight.js": "^9.15.6",
|
||||
"html-entities": "^1.2.1",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown": "^4.0.12",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||
"jssha": "^2.3.1",
|
||||
"katex": "^0.10.0",
|
||||
|
@ -82,6 +82,7 @@ const lightStyle = {
|
||||
urlColor: '#155BDA',
|
||||
|
||||
backgroundColor2: "#162B3D",
|
||||
depthColor: 'rgb(100, 182, 253, OPACITY)',
|
||||
color2: "#f5f5f5",
|
||||
selectedColor2: "#0269C2",
|
||||
colorError2: "#ff6c6c",
|
||||
@ -119,8 +120,9 @@ const darkStyle = {
|
||||
urlColor: '#4E87EE',
|
||||
|
||||
backgroundColor2: "#181A1D",
|
||||
depthColor: 'rgb(200, 200, 200, OPACITY)',
|
||||
color2: "#ffffff",
|
||||
selectedColor2: "#333333",
|
||||
selectedColor2: "#013F74",
|
||||
colorError2: "#ff6c6c",
|
||||
|
||||
raisedBackgroundColor: "#474747",
|
||||
|
@ -20,9 +20,9 @@ Three types of applications are available: for the **desktop** (Windows, macOS a
|
||||
|
||||
Operating System | Download | Alternative
|
||||
-----------------|--------|-------------------
|
||||
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-Setup-1.0.152.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a> | Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/JoplinPortable.exe'>Portable version</a><br><br>The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
|
||||
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a> | You can also use Homebrew: `brew cask install joplin`
|
||||
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a> | An Arch Linux package [is also available](#terminal-application).<br><br>If it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:<br><br> `wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh \| bash`
|
||||
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-Setup-1.0.159.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a> | Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/JoplinPortable.exe'>Portable version</a><br><br>The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
|
||||
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-1.0.159.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a> | You can also use Homebrew: `brew cask install joplin`
|
||||
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-1.0.159-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a> | An Arch Linux package [is also available](#terminal-application).<br><br>If it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:<br><br> `wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh \| bash`
|
||||
|
||||
## Mobile applications
|
||||
|
||||
|
@ -7,6 +7,7 @@ class HtmlToMd {
|
||||
const turndownPluginGfm = require('joplin-turndown-plugin-gfm').gfm
|
||||
const turndown = new TurndownService({
|
||||
headingStyle: 'atx',
|
||||
anchorNames: options.anchorNames ? options.anchorNames.map(n => n.trim().toLowerCase()) : [],
|
||||
})
|
||||
turndown.use(turndownPluginGfm)
|
||||
turndown.remove('script');
|
||||
|
@ -19,7 +19,11 @@ shared.noteExists = async function(noteId) {
|
||||
return !!existingNote;
|
||||
}
|
||||
|
||||
shared.saveNoteButton_press = async function(comp, folderId = null) {
|
||||
shared.saveNoteButton_press = async function(comp, folderId = null, options = null) {
|
||||
options = Object.assign({}, {
|
||||
autoTitle: true,
|
||||
}, options);
|
||||
|
||||
const releaseMutex = await saveNoteMutex_.acquire();
|
||||
|
||||
let note = Object.assign({}, comp.state.note);
|
||||
@ -40,18 +44,18 @@ shared.saveNoteButton_press = async function(comp, folderId = null) {
|
||||
|
||||
let isNew = !note.id;
|
||||
|
||||
let options = { userSideValidation: true };
|
||||
let saveOptions = { userSideValidation: true };
|
||||
if (!isNew) {
|
||||
options.fields = BaseModel.diffObjectsFields(comp.state.lastSavedNote, note);
|
||||
saveOptions.fields = BaseModel.diffObjectsFields(comp.state.lastSavedNote, note);
|
||||
}
|
||||
|
||||
const hasAutoTitle = comp.state.newAndNoTitleChangeNoteId || (isNew && !note.title);
|
||||
if (hasAutoTitle) {
|
||||
if (hasAutoTitle && options.autoTitle) {
|
||||
note.title = Note.defaultTitle(note);
|
||||
if (options.fields && options.fields.indexOf('title') < 0) options.fields.push('title');
|
||||
if (saveOptions.fields && saveOptions.fields.indexOf('title') < 0) saveOptions.fields.push('title');
|
||||
}
|
||||
|
||||
const savedNote = ('fields' in options) && !options.fields.length ? Object.assign({}, note) : await Note.save(note, options);
|
||||
const savedNote = ('fields' in saveOptions) && !saveOptions.fields.length ? Object.assign({}, note) : await Note.save(note, saveOptions);
|
||||
|
||||
const stateNote = comp.state.note;
|
||||
|
||||
@ -80,6 +84,8 @@ shared.saveNoteButton_press = async function(comp, folderId = null) {
|
||||
|
||||
if (isNew && hasAutoTitle) newState.newAndNoTitleChangeNoteId = note.id;
|
||||
|
||||
if (!options.autoTitle) newState.newAndNoTitleChangeNoteId = null;
|
||||
|
||||
comp.setState(newState);
|
||||
|
||||
// await shared.refreshAttachedResources(comp, newState.note.body);
|
||||
|
@ -30,4 +30,11 @@ netUtils.findAvailablePort = async (possiblePorts, extraRandomPortsToTry = 20) =
|
||||
return port;
|
||||
}
|
||||
|
||||
netUtils.mimeTypeFromHeaders = headers => {
|
||||
if (!headers || !headers['content-type']) return null;
|
||||
|
||||
const splitted = headers['content-type'].split(';');
|
||||
return splitted[0].trim().toLowerCase();
|
||||
}
|
||||
|
||||
module.exports = { netUtils };
|
@ -37,9 +37,10 @@ function isHidden(path) {
|
||||
return b[0] === '.';
|
||||
}
|
||||
|
||||
function safeFileExtension(e) {
|
||||
function safeFileExtension(e, maxLength = null) {
|
||||
if (maxLength === null) maxLength = 8;
|
||||
if (!e || !e.replace) return '';
|
||||
return e.replace(/[^a-zA-Z0-9]/g, '')
|
||||
return e.replace(/[^a-zA-Z0-9]/g, '').substr(0, maxLength);
|
||||
}
|
||||
|
||||
function safeFilename(e, maxLength = null, allowSpaces = false) {
|
||||
|
@ -106,16 +106,25 @@ class DecryptionWorker {
|
||||
return;
|
||||
}
|
||||
|
||||
// Note: the logic below is an optimisation to avoid going through the loop if no master key exists
|
||||
// or if none is loaded. It means this logic needs to be duplicate a bit what's in the loop, like the
|
||||
// "throw" and "dispatch" logic.
|
||||
const loadedMasterKeyCount = await this.encryptionService().loadedMasterKeysCount();
|
||||
if (!loadedMasterKeyCount) {
|
||||
this.logger().info('DecryptionWorker: cannot start because no master key is currently loaded.');
|
||||
const ids = await MasterKey.allIds();
|
||||
|
||||
if (ids.length) {
|
||||
this.dispatch({
|
||||
type: 'MASTERKEY_SET_NOT_LOADED',
|
||||
ids: ids,
|
||||
});
|
||||
if (options.masterKeyNotLoadedHandler === 'throw') {
|
||||
// By trying to load the master key here, we throw the "masterKeyNotLoaded" error
|
||||
// which the caller needs.
|
||||
await this.encryptionService().loadedMasterKey(ids[0]);
|
||||
} else {
|
||||
this.dispatch({
|
||||
type: 'MASTERKEY_SET_NOT_LOADED',
|
||||
ids: ids,
|
||||
});
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ const md5 = require('md5');
|
||||
const { shim } = require('lib/shim');
|
||||
const HtmlToMd = require('lib/HtmlToMd');
|
||||
const urlUtils = require('lib/urlUtils.js');
|
||||
const { netUtils } = require('lib/net-utils');
|
||||
const { fileExtension, safeFileExtension, safeFilename, filename } = require('lib/path-utils');
|
||||
const ApiResponse = require('lib/services/rest/ApiResponse');
|
||||
const SearchEngineUtils = require('lib/services/SearchEngineUtils');
|
||||
@ -365,7 +366,7 @@ class Api {
|
||||
|
||||
const imageSizes = requestNote.image_sizes ? requestNote.image_sizes : {};
|
||||
|
||||
let note = await this.requestNoteToNote(requestNote);
|
||||
let note = await this.requestNoteToNote_(requestNote);
|
||||
|
||||
const imageUrls = markdownUtils.extractImageUrls(note.body);
|
||||
|
||||
@ -415,7 +416,7 @@ class Api {
|
||||
return this.htmlToMdParser_;
|
||||
}
|
||||
|
||||
async requestNoteToNote(requestNote) {
|
||||
async requestNoteToNote_(requestNote) {
|
||||
const output = {
|
||||
title: requestNote.title ? requestNote.title : '',
|
||||
body: requestNote.body ? requestNote.body : '',
|
||||
@ -429,6 +430,7 @@ class Api {
|
||||
// rendering but it makes sure everything will be parsed.
|
||||
output.body = await this.htmlToMdParser().parse('<div>' + requestNote.body_html + '</div>', {
|
||||
baseUrl: requestNote.base_url ? requestNote.base_url : '',
|
||||
anchorNames: requestNote.anchor_names ? requestNote.anchor_names : [],
|
||||
});
|
||||
}
|
||||
|
||||
@ -459,6 +461,18 @@ class Api {
|
||||
return await shim.attachFileToNote(note, tempFilePath);
|
||||
}
|
||||
|
||||
async tryToGuessImageExtFromMimeType_(response, imagePath) {
|
||||
const mimeType = netUtils.mimeTypeFromHeaders(response.headers);
|
||||
if (!mimeType) return imagePath;
|
||||
|
||||
const newExt = mimeUtils.toFileExtension(mimeType);
|
||||
if (!newExt) return imagePath;
|
||||
|
||||
const newImagePath = imagePath + '.' + newExt;
|
||||
await shim.fsDriver().move(imagePath, newImagePath);
|
||||
return newImagePath;
|
||||
}
|
||||
|
||||
async downloadImage_(url, allowFileProtocolImages) {
|
||||
const tempDir = Setting.value('tempDir');
|
||||
|
||||
@ -466,6 +480,7 @@ class Api {
|
||||
|
||||
const name = isDataUrl ? md5(Math.random() + '_' + Date.now()) : filename(url);
|
||||
let fileExt = isDataUrl ? mimeUtils.toFileExtension(mimeUtils.fromDataUrl(url)) : safeFileExtension(fileExtension(url).toLowerCase());
|
||||
if (!mimeUtils.fromFileExtension(fileExt)) fileExt = ''; // If the file extension is unknown - clear it.
|
||||
if (fileExt) fileExt = '.' + fileExt;
|
||||
let imagePath = tempDir + '/' + safeFilename(name) + fileExt;
|
||||
if (await shim.fsDriver().exists(imagePath)) imagePath = tempDir + '/' + safeFilename(name) + '_' + md5(Math.random() + '_' + Date.now()).substr(0,10) + fileExt;
|
||||
@ -479,7 +494,11 @@ class Api {
|
||||
const localPath = uri2path(url);
|
||||
await shim.fsDriver().copy(localPath, imagePath);
|
||||
} else {
|
||||
await shim.fetchBlob(url, { path: imagePath });
|
||||
const response = await shim.fetchBlob(url, { path: imagePath, maxRetry: 1 });
|
||||
|
||||
// If we could not find the file extension from the URL, try to get it
|
||||
// now based on the Content-Type header.
|
||||
if (!fileExt) imagePath = this.tryToGuessImageExtFromMimeType_(response, imagePath);
|
||||
}
|
||||
return imagePath;
|
||||
} catch (error) {
|
||||
|
@ -25,6 +25,7 @@ urlUtils.prependBaseUrl = function(url, baseUrl) {
|
||||
|
||||
if (!url) url = '';
|
||||
if (!baseUrl) return url;
|
||||
if (url.indexOf('#') === 0) return url; // Don't prepend if it's a local anchor
|
||||
if (urlUtils.urlProtocol(url)) return url; // Don't prepend the base URL if the URL already has a scheme
|
||||
|
||||
if (url.length >= 2 && url.indexOf('//') === 0) { // If it starts with // it's a protcol-relative URL
|
||||
|
@ -1,7 +1,8 @@
|
||||
const fs = require('fs-extra');
|
||||
const { execCommand } = require('./tool-utils.js');
|
||||
|
||||
const clipperDir = __dirname + '/../Clipper/joplin-webclipper';
|
||||
const clipperDir = __dirname + '/../Clipper/joplin-webclipper';
|
||||
const tmpSourceDir = __dirname + '/../Clipper/joplin-webclipper-source';
|
||||
|
||||
async function copyDir(baseSourceDir, sourcePath, baseDestDir) {
|
||||
await fs.mkdirp(baseDestDir + '/' + sourcePath);
|
||||
@ -76,6 +77,12 @@ async function main() {
|
||||
console.info(await execCommand('mv ' + dist.name + '.zip ..'));
|
||||
}
|
||||
|
||||
console.info('Creating source tarball for code validation...');
|
||||
process.chdir(clipperDir + '/../');
|
||||
console.info(await execCommand("rsync -a --delete --exclude 'node_modules/' --exclude 'build/' --exclude 'dist/' " + clipperDir + '/ ' + tmpSourceDir + '/'));
|
||||
console.info(await execCommand('7z a -tzip joplin-webclipper-source.zip joplin-webclipper-source'));
|
||||
console.info(await execCommand('mv joplin-webclipper-source.zip ' + clipperDir + '/dist/ && rm -rf joplin-webclipper-source'));
|
||||
|
||||
console.info(await execCommand('git pull'));
|
||||
console.info(await execCommand('git add -A'));
|
||||
console.info(await execCommand('git commit -m "Clipper release v' + newVersion + '"'));
|
||||
|
@ -270,6 +270,43 @@
|
||||
</ul>
|
||||
</div>
|
||||
<h1><a name="joplin-changelog" href="#joplin-changelog" class="heading-anchor">🔗</a>Joplin changelog</h1>
|
||||
<h2><a name="v1-0-159-https-github-com-laurent22-joplin-releases-tag-v1-0-159-2019-06-08t00-00-19z" href="#v1-0-159-https-github-com-laurent22-joplin-releases-tag-v1-0-159-2019-06-08t00-00-19z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.159">v1.0.159</a> - 2019-06-08T00:00:19Z</h2>
|
||||
<ul>
|
||||
<li>New: Added option to open development tools, to make it easier to create custom CSS</li>
|
||||
<li>Improved: Improved tag dialog to make it easier to add and remove tags (<a href="https://github.com/laurent22/joplin/issues/1589">#1589</a>)</li>
|
||||
<li>Improved: Speed up synchronisation by allowing multiple connections when downloading items (<a href="https://github.com/laurent22/joplin/issues/1633">#1633</a>)</li>
|
||||
<li>Improved: Better handling of items that cannot be decrypted, including those that cause crashes</li>
|
||||
<li>Improved: Upgrade TOC plugin version to 4.0.0 to fix various issues (<a href="https://github.com/laurent22/joplin/issues/1603">#1603</a>)</li>
|
||||
<li>Improved: Improve how font size is applied (<a href="https://github.com/laurent22/joplin/issues/1601">#1601</a>)</li>
|
||||
<li>Improved: Improved workflow of downloading and decrypting data during sync</li>
|
||||
<li>Fixed: Fix icon path and directory in Linux install script (<a href="https://github.com/laurent22/joplin/issues/1612">#1612</a>)</li>
|
||||
<li>Fixed: Handle multiple lines in attributes when importing Enex files (<a href="https://github.com/laurent22/joplin/issues/1583">#1583</a>)</li>
|
||||
<li>Fixed: Fix issue with revisions being needlessly created when decrypting notes</li>
|
||||
</ul>
|
||||
<h2><a name="v1-0-158-https-github-com-laurent22-joplin-releases-tag-v1-0-158-2019-05-27t19-01-18z" href="#v1-0-158-https-github-com-laurent22-joplin-releases-tag-v1-0-158-2019-05-27t19-01-18z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.158">v1.0.158</a> - 2019-05-27T19:01:18Z</h2>
|
||||
<ul>
|
||||
<li>Improved: Enable more options on multimd-table plugin (<a href="https://github.com/laurent22/joplin/issues/1586">#1586</a>)</li>
|
||||
<li>Improved: Improved config screen with dark theme</li>
|
||||
<li>Improved: Make bold text more visible (<a href="https://github.com/laurent22/joplin/issues/1575">#1575</a>)</li>
|
||||
<li>Fixed: Fix internal note links (<a href="https://github.com/laurent22/joplin/issues/1587">#1587</a>)</li>
|
||||
<li>Fixed: Fixed empty separators in menu</li>
|
||||
</ul>
|
||||
<h2><a name="v1-0-157-https-github-com-laurent22-joplin-releases-tag-v1-0-157-2019-05-26t17-55-53z" href="#v1-0-157-https-github-com-laurent22-joplin-releases-tag-v1-0-157-2019-05-26t17-55-53z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.157">v1.0.157</a> - 2019-05-26T17:55:53Z</h2>
|
||||
<ul>
|
||||
<li>New: Added Persian translation (<a href="https://github.com/laurent22/joplin/issues/1539">#1539</a>)</li>
|
||||
<li>New: Allow downloading attachments on demand or automatically (<a href="https://github.com/laurent22/joplin/issues/1527">#1527</a>) (<a href="https://github.com/laurent22/joplin/issues/1481">#1481</a>)</li>
|
||||
<li>Improved: Make bold text more visible (<a href="https://github.com/laurent22/joplin/issues/1575">#1575</a>)</li>
|
||||
<li>Improved: Add number of characters removed and added in revision list</li>
|
||||
<li>Improved: Remove tags from Welcome item due to issue with cleaning them up afterwards</li>
|
||||
<li>Improved: Handle missing resource blob when setting resource size</li>
|
||||
<li>Improved: Gray out checkboxes that have been ticked inside notes</li>
|
||||
<li>Improved: Put back "Fetched items" message during sync</li>
|
||||
<li>Improved: When opening a note using Goto Anything, open all its parent notebooks too</li>
|
||||
<li>Fixed: Clears search when clicking on a notebook. (<a href="https://github.com/laurent22/joplin/issues/1504">#1504</a>) (<a href="https://github.com/laurent22/joplin/issues/1186">#1186</a>)</li>
|
||||
<li>Fixed: Default sort order for notebooks should be title and ascending (<a href="https://github.com/laurent22/joplin/issues/1541">#1541</a>)</li>
|
||||
<li>Fixed: Added backticks to auto-wrapping quotes. (<a href="https://github.com/laurent22/joplin/issues/1534">#1534</a>) (<a href="https://github.com/laurent22/joplin/issues/1426">#1426</a>)</li>
|
||||
<li>Fixed: Prevent app from trying to upload resource it has not downloaded yet</li>
|
||||
</ul>
|
||||
<h2><a name="v1-0-153-https-github-com-laurent22-joplin-releases-tag-v1-0-153-2019-05-15t06-27-29z" href="#v1-0-153-https-github-com-laurent22-joplin-releases-tag-v1-0-153-2019-05-15t06-27-29z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.153">v1.0.153</a> - 2019-05-15T06:27:29Z</h2>
|
||||
<p>This release only adds additional logging for the note history feature.</p>
|
||||
<h2><a name="v1-0-152-https-github-com-laurent22-joplin-releases-tag-v1-0-152-2019-05-13t09-08-07z" href="#v1-0-152-https-github-com-laurent22-joplin-releases-tag-v1-0-152-2019-05-13t09-08-07z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.152">v1.0.152</a> - 2019-05-13T09:08:07Z</h2>
|
||||
@ -506,7 +543,7 @@
|
||||
<h2><a name="v1-0-119-https-github-com-laurent22-joplin-releases-tag-v1-0-119-2018-12-18t12-40-22z" href="#v1-0-119-https-github-com-laurent22-joplin-releases-tag-v1-0-119-2018-12-18t12-40-22z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.119">v1.0.119</a> - 2018-12-18T12:40:22Z</h2>
|
||||
<p>Important: This release might be slow on startup due to the need to index all the notes, especially if you have many of them with lots of content. The best is simply to wait for it even if it takes several minutes. This is just a one off and afterwards startup time will be the same as before.</p>
|
||||
<ul>
|
||||
<li>New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See <a href="https://joplinapp.org/#searching">https://joplinapp.org/#searching</a> for more info.</li>
|
||||
<li>New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See <a href="https://joplin.cozic.net/#searching">https://joplin.cozic.net/#searching</a> for more info.</li>
|
||||
<li>New: Search within current note (Ctrl+F).</li>
|
||||
<li>New: Add separate editor font size option (<a href="https://github.com/laurent22/joplin/issues/1027">#1027</a>)</li>
|
||||
<li>Changed: Changed global search shortcut to F6.</li>
|
||||
@ -519,7 +556,7 @@
|
||||
<h2><a name="v1-0-118-https-github-com-laurent22-joplin-releases-tag-v1-0-118-2019-01-11t08-34-13z" href="#v1-0-118-https-github-com-laurent22-joplin-releases-tag-v1-0-118-2019-01-11t08-34-13z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.118">v1.0.118</a> - 2019-01-11T08:34:13Z</h2>
|
||||
<p>Important: This release might be slow on startup due to the need to index all the notes, especially if you have many of them with lots of content. The best is simply to wait for it even if it takes several minutes. This is just a one off and afterwards startup time will be the same as before.</p>
|
||||
<ul>
|
||||
<li>New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See <a href="https://joplinapp.org/#searching">https://joplinapp.org/#searching</a> for more info.</li>
|
||||
<li>New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See <a href="https://joplin.cozic.net/#searching">https://joplin.cozic.net/#searching</a> for more info.</li>
|
||||
<li>New: Search within current note (Ctrl+F).</li>
|
||||
<li>New: Add separate editor font size option (<a href="https://github.com/laurent22/joplin/issues/1027">#1027</a>)</li>
|
||||
<li>Changed: Changed global search shortcut to F6.</li>
|
||||
@ -720,7 +757,7 @@
|
||||
</ul>
|
||||
<h2><a name="v1-0-93-https-github-com-laurent22-joplin-releases-tag-v1-0-93-2018-05-14t11-36-01z" href="#v1-0-93-https-github-com-laurent22-joplin-releases-tag-v1-0-93-2018-05-14t11-36-01z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.93">v1.0.93</a> - 2018-05-14T11:36:01Z</h2>
|
||||
<ul>
|
||||
<li>New: A portable version is now available. To install it simply copy the file "JoplinPortable.exe" to your USB device. See the documentation for more information - <a href="https://joplinapp.org/#desktop-applications">https://joplinapp.org/#desktop-applications</a></li>
|
||||
<li>New: A portable version is now available. To install it simply copy the file "JoplinPortable.exe" to your USB device. See the documentation for more information - <a href="https://joplin.cozic.net/#desktop-applications">https://joplin.cozic.net/#desktop-applications</a></li>
|
||||
<li>Improved: Made import of ENEX files more robust and accurate</li>
|
||||
<li>Improved: Auto-update process should be more reliable.</li>
|
||||
<li>Fixed: Made sync-after-save interval longer to made synchronisations less frequent.</li>
|
||||
@ -737,7 +774,7 @@
|
||||
</ul>
|
||||
<h2><a name="v1-0-89-https-github-com-laurent22-joplin-releases-tag-v1-0-89-2018-05-09t13-05-05z" href="#v1-0-89-https-github-com-laurent22-joplin-releases-tag-v1-0-89-2018-05-09t13-05-05z" class="heading-anchor">🔗</a><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.89">v1.0.89</a> - 2018-05-09T13:05:05Z</h2>
|
||||
<ul>
|
||||
<li>New: Resolves <a href="https://github.com/laurent22/joplin/issues/122">#122</a>: Added support for sub-notebooks. Please see doc for more info: <a href="https://joplinapp.org/#sub-notebooks">https://joplinapp.org/#sub-notebooks</a></li>
|
||||
<li>New: Resolves <a href="https://github.com/laurent22/joplin/issues/122">#122</a>: Added support for sub-notebooks. Please see doc for more info: <a href="https://joplin.cozic.net/#sub-notebooks">https://joplin.cozic.net/#sub-notebooks</a></li>
|
||||
<li>Improved: Export/Import links to notes</li>
|
||||
<li>Fixes <a href="https://github.com/laurent22/joplin/issues/480">#480</a>: Ignore invalid flag automatically passed by macOS</li>
|
||||
<li>Fixes <a href="https://github.com/laurent22/joplin/issues/61">#61</a>: Handle path that ends with slash for file system sync</li>
|
||||
|
@ -289,17 +289,17 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Windows (32 and 64-bit)</td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-Setup-1.0.152.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a></td>
|
||||
<td>Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/JoplinPortable.exe'>Portable version</a><br><br>The <a href="https://en.wikipedia.org/wiki/Portable_application">portable application</a> allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.</td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-Setup-1.0.159.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a></td>
|
||||
<td>Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/JoplinPortable.exe'>Portable version</a><br><br>The <a href="https://en.wikipedia.org/wiki/Portable_application">portable application</a> allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>macOS</td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a></td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-1.0.159.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a></td>
|
||||
<td>You can also use Homebrew: <code>brew cask install joplin</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Linux</td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a></td>
|
||||
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.159/Joplin-1.0.159-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a></td>
|
||||
<td>An Arch Linux package <a href="#terminal-application">is also available</a>.<br><br>If it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:<br><br> <code>wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh \| bash</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -280,19 +280,19 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Total Windows downloads</td>
|
||||
<td>256,045</td>
|
||||
<td>273,919</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Total macOs downloads</td>
|
||||
<td>110,964</td>
|
||||
<td>116,805</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Total Linux downloads</td>
|
||||
<td>88,124</td>
|
||||
<td>92,419</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Windows %</td>
|
||||
<td>56%</td>
|
||||
<td>57%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>macOS %</td>
|
||||
@ -317,92 +317,116 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.159">v1.0.159</a></td>
|
||||
<td>2019-06-08T00:00:19Z</td>
|
||||
<td>121</td>
|
||||
<td>26</td>
|
||||
<td>65</td>
|
||||
<td>212</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.158">v1.0.158</a></td>
|
||||
<td>2019-05-27T19:01:18Z</td>
|
||||
<td>9,384</td>
|
||||
<td>3,440</td>
|
||||
<td>1,914</td>
|
||||
<td>14,738</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.157">v1.0.157</a></td>
|
||||
<td>2019-05-26T17:55:53Z</td>
|
||||
<td>2,126</td>
|
||||
<td>807</td>
|
||||
<td>272</td>
|
||||
<td>3,205</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.153">v1.0.153</a></td>
|
||||
<td>2019-05-15T06:27:29Z</td>
|
||||
<td>358</td>
|
||||
<td>54</td>
|
||||
<td>62</td>
|
||||
<td>474</td>
|
||||
<td>806</td>
|
||||
<td>73</td>
|
||||
<td>94</td>
|
||||
<td>973</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.152">v1.0.152</a></td>
|
||||
<td>2019-05-13T09:08:07Z</td>
|
||||
<td>8,246</td>
|
||||
<td>2,954</td>
|
||||
<td>2,241</td>
|
||||
<td>13,441</td>
|
||||
<td>13,703</td>
|
||||
<td>4,369</td>
|
||||
<td>4,040</td>
|
||||
<td>22,112</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.151">v1.0.151</a></td>
|
||||
<td>2019-05-12T15:14:32Z</td>
|
||||
<td>1,926</td>
|
||||
<td>510</td>
|
||||
<td>946</td>
|
||||
<td>3,382</td>
|
||||
<td>1,927</td>
|
||||
<td>511</td>
|
||||
<td>947</td>
|
||||
<td>3,385</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.150">v1.0.150</a></td>
|
||||
<td>2019-05-12T11:27:48Z</td>
|
||||
<td>395</td>
|
||||
<td>108</td>
|
||||
<td>54</td>
|
||||
<td>557</td>
|
||||
<td>109</td>
|
||||
<td>56</td>
|
||||
<td>560</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.148">v1.0.148</a></td>
|
||||
<td>2019-05-08T19:12:24Z</td>
|
||||
<td>109</td>
|
||||
<td>33</td>
|
||||
<td>73</td>
|
||||
<td>215</td>
|
||||
<td>111</td>
|
||||
<td>36</td>
|
||||
<td>77</td>
|
||||
<td>224</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.145">v1.0.145</a></td>
|
||||
<td>2019-05-03T09:16:53Z</td>
|
||||
<td>6,841</td>
|
||||
<td>2,822</td>
|
||||
<td>1,423</td>
|
||||
<td>11,086</td>
|
||||
<td>6,862</td>
|
||||
<td>2,827</td>
|
||||
<td>1,425</td>
|
||||
<td>11,114</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.143">v1.0.143</a></td>
|
||||
<td>2019-04-22T10:51:38Z</td>
|
||||
<td>11,726</td>
|
||||
<td>3,507</td>
|
||||
<td>2,761</td>
|
||||
<td>17,994</td>
|
||||
<td>11,860</td>
|
||||
<td>3,512</td>
|
||||
<td>2,765</td>
|
||||
<td>18,137</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.142">v1.0.142</a></td>
|
||||
<td>2019-04-02T16:44:51Z</td>
|
||||
<td>14,482</td>
|
||||
<td>4,510</td>
|
||||
<td>4,707</td>
|
||||
<td>23,699</td>
|
||||
<td>14,490</td>
|
||||
<td>4,511</td>
|
||||
<td>4,708</td>
|
||||
<td>23,709</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.140">v1.0.140</a></td>
|
||||
<td>2019-03-10T20:59:58Z</td>
|
||||
<td>13,478</td>
|
||||
<td>4,116</td>
|
||||
<td>2,988</td>
|
||||
<td>20,582</td>
|
||||
<td>13,522</td>
|
||||
<td>4,120</td>
|
||||
<td>2,994</td>
|
||||
<td>20,636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.139">v1.0.139</a></td>
|
||||
<td>2019-03-09T10:06:48Z</td>
|
||||
<td>83</td>
|
||||
<td>20</td>
|
||||
<td>24</td>
|
||||
<td>127</td>
|
||||
<td>25</td>
|
||||
<td>128</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.138">v1.0.138</a></td>
|
||||
<td>2019-03-03T17:23:00Z</td>
|
||||
<td>111</td>
|
||||
<td>113</td>
|
||||
<td>42</td>
|
||||
<td>68</td>
|
||||
<td>221</td>
|
||||
<td>223</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.137">v1.0.137</a></td>
|
||||
@ -415,10 +439,10 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.135">v1.0.135</a></td>
|
||||
<td>2019-02-27T23:36:57Z</td>
|
||||
<td>12,160</td>
|
||||
<td>12,182</td>
|
||||
<td>3,915</td>
|
||||
<td>4,044</td>
|
||||
<td>20,119</td>
|
||||
<td>4,045</td>
|
||||
<td>20,142</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.134">v1.0.134</a></td>
|
||||
@ -439,26 +463,26 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.127">v1.0.127</a></td>
|
||||
<td>2019-02-14T23:12:48Z</td>
|
||||
<td>9,399</td>
|
||||
<td>9,420</td>
|
||||
<td>3,127</td>
|
||||
<td>2,904</td>
|
||||
<td>15,430</td>
|
||||
<td>2,905</td>
|
||||
<td>15,452</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.126">v1.0.126</a></td>
|
||||
<td>2019-02-09T19:46:16Z</td>
|
||||
<td>914</td>
|
||||
<td>53</td>
|
||||
<td>108</td>
|
||||
<td>1,075</td>
|
||||
<td>109</td>
|
||||
<td>1,076</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.125">v1.0.125</a></td>
|
||||
<td>2019-01-26T18:14:33Z</td>
|
||||
<td>10,230</td>
|
||||
<td>3,521</td>
|
||||
<td>1,689</td>
|
||||
<td>15,440</td>
|
||||
<td>3,522</td>
|
||||
<td>1,693</td>
|
||||
<td>15,445</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.120">v1.0.120</a></td>
|
||||
@ -473,8 +497,8 @@
|
||||
<td>2018-12-18T12:40:22Z</td>
|
||||
<td>8,855</td>
|
||||
<td>3,203</td>
|
||||
<td>1,993</td>
|
||||
<td>14,051</td>
|
||||
<td>1,994</td>
|
||||
<td>14,052</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.118">v1.0.118</a></td>
|
||||
@ -488,9 +512,9 @@
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.117">v1.0.117</a></td>
|
||||
<td>2018-11-24T12:05:24Z</td>
|
||||
<td>16,208</td>
|
||||
<td>4,848</td>
|
||||
<td>4,849</td>
|
||||
<td>6,359</td>
|
||||
<td>27,415</td>
|
||||
<td>27,416</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.116">v1.0.116</a></td>
|
||||
@ -519,10 +543,10 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.111">v1.0.111</a></td>
|
||||
<td>2018-09-30T20:15:09Z</td>
|
||||
<td>11,879</td>
|
||||
<td>3,134</td>
|
||||
<td>3,650</td>
|
||||
<td>18,663</td>
|
||||
<td>11,887</td>
|
||||
<td>3,135</td>
|
||||
<td>3,653</td>
|
||||
<td>18,675</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.110">v1.0.110</a></td>
|
||||
@ -537,8 +561,8 @@
|
||||
<td>2018-09-27T18:01:41Z</td>
|
||||
<td>2,074</td>
|
||||
<td>681</td>
|
||||
<td>311</td>
|
||||
<td>3,066</td>
|
||||
<td>314</td>
|
||||
<td>3,069</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.108">v1.0.108</a></td>
|
||||
@ -577,16 +601,16 @@
|
||||
<td>2018-06-28T20:25:36Z</td>
|
||||
<td>14,990</td>
|
||||
<td>4,656</td>
|
||||
<td>7,086</td>
|
||||
<td>26,732</td>
|
||||
<td>7,102</td>
|
||||
<td>26,748</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.103">v1.0.103</a></td>
|
||||
<td>2018-06-21T19:38:13Z</td>
|
||||
<td>2,012</td>
|
||||
<td>858</td>
|
||||
<td>2,014</td>
|
||||
<td>859</td>
|
||||
<td>668</td>
|
||||
<td>3,538</td>
|
||||
<td>3,541</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.101">v1.0.101</a></td>
|
||||
@ -623,10 +647,10 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.96">v1.0.96</a></td>
|
||||
<td>2018-05-26T16:36:39Z</td>
|
||||
<td>2,686</td>
|
||||
<td>2,688</td>
|
||||
<td>1,200</td>
|
||||
<td>1,266</td>
|
||||
<td>5,152</td>
|
||||
<td>1,276</td>
|
||||
<td>5,164</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.95">v1.0.95</a></td>
|
||||
@ -648,17 +672,17 @@
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.93">v1.0.93</a></td>
|
||||
<td>2018-05-14T11:36:01Z</td>
|
||||
<td>1,770</td>
|
||||
<td>924</td>
|
||||
<td>928</td>
|
||||
<td>743</td>
|
||||
<td>3,437</td>
|
||||
<td>3,441</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.91">v1.0.91</a></td>
|
||||
<td>2018-05-10T14:48:04Z</td>
|
||||
<td>814</td>
|
||||
<td>535</td>
|
||||
<td>816</td>
|
||||
<td>536</td>
|
||||
<td>290</td>
|
||||
<td>1,639</td>
|
||||
<td>1,642</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.89">v1.0.89</a></td>
|
||||
@ -679,202 +703,202 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.83">v1.0.83</a></td>
|
||||
<td>2018-04-04T19:43:58Z</td>
|
||||
<td>4,565</td>
|
||||
<td>2,437</td>
|
||||
<td>2,634</td>
|
||||
<td>9,636</td>
|
||||
<td>4,571</td>
|
||||
<td>2,443</td>
|
||||
<td>2,639</td>
|
||||
<td>9,653</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.82">v1.0.82</a></td>
|
||||
<td>2018-03-31T19:16:31Z</td>
|
||||
<td>684</td>
|
||||
<td>387</td>
|
||||
<td>100</td>
|
||||
<td>1,171</td>
|
||||
<td>686</td>
|
||||
<td>388</td>
|
||||
<td>106</td>
|
||||
<td>1,180</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.81">v1.0.81</a></td>
|
||||
<td>2018-03-28T08:13:58Z</td>
|
||||
<td>985</td>
|
||||
<td>570</td>
|
||||
<td>750</td>
|
||||
<td>2,305</td>
|
||||
<td>986</td>
|
||||
<td>572</td>
|
||||
<td>754</td>
|
||||
<td>2,312</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.79">v1.0.79</a></td>
|
||||
<td>2018-03-23T18:00:11Z</td>
|
||||
<td>919</td>
|
||||
<td>513</td>
|
||||
<td>358</td>
|
||||
<td>1,790</td>
|
||||
<td>920</td>
|
||||
<td>516</td>
|
||||
<td>361</td>
|
||||
<td>1,797</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.78">v1.0.78</a></td>
|
||||
<td>2018-03-17T15:27:18Z</td>
|
||||
<td>1,302</td>
|
||||
<td>841</td>
|
||||
<td>850</td>
|
||||
<td>2,993</td>
|
||||
<td>1,303</td>
|
||||
<td>845</td>
|
||||
<td>853</td>
|
||||
<td>3,001</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.77">v1.0.77</a></td>
|
||||
<td>2018-03-16T15:12:35Z</td>
|
||||
<td>165</td>
|
||||
<td>87</td>
|
||||
<td>25</td>
|
||||
<td>277</td>
|
||||
<td>166</td>
|
||||
<td>89</td>
|
||||
<td>28</td>
|
||||
<td>283</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.72">v1.0.72</a></td>
|
||||
<td>2018-03-14T09:44:35Z</td>
|
||||
<td>396</td>
|
||||
<td>235</td>
|
||||
<td>39</td>
|
||||
<td>670</td>
|
||||
<td>397</td>
|
||||
<td>238</td>
|
||||
<td>41</td>
|
||||
<td>676</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.70">v1.0.70</a></td>
|
||||
<td>2018-02-28T20:04:30Z</td>
|
||||
<td>1,844</td>
|
||||
<td>1,026</td>
|
||||
<td>1,228</td>
|
||||
<td>4,098</td>
|
||||
<td>1,845</td>
|
||||
<td>1,030</td>
|
||||
<td>1,233</td>
|
||||
<td>4,108</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.67">v1.0.67</a></td>
|
||||
<td>2018-02-19T22:51:08Z</td>
|
||||
<td>1,805</td>
|
||||
<td>583</td>
|
||||
<td>1,806</td>
|
||||
<td>585</td>
|
||||
<td>0</td>
|
||||
<td>2,388</td>
|
||||
<td>2,391</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.66">v1.0.66</a></td>
|
||||
<td>2018-02-18T23:09:09Z</td>
|
||||
<td>314</td>
|
||||
<td>107</td>
|
||||
<td>72</td>
|
||||
<td>493</td>
|
||||
<td>315</td>
|
||||
<td>109</td>
|
||||
<td>73</td>
|
||||
<td>497</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.65">v1.0.65</a></td>
|
||||
<td>2018-02-17T20:02:25Z</td>
|
||||
<td>185</td>
|
||||
<td>109</td>
|
||||
<td>119</td>
|
||||
<td>413</td>
|
||||
<td>186</td>
|
||||
<td>110</td>
|
||||
<td>120</td>
|
||||
<td>416</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.64">v1.0.64</a></td>
|
||||
<td>2018-02-16T00:58:20Z</td>
|
||||
<td>1,074</td>
|
||||
<td>529</td>
|
||||
<td>1,116</td>
|
||||
<td>2,719</td>
|
||||
<td>1,076</td>
|
||||
<td>531</td>
|
||||
<td>1,117</td>
|
||||
<td>2,724</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.63">v1.0.63</a></td>
|
||||
<td>2018-02-14T19:40:36Z</td>
|
||||
<td>291</td>
|
||||
<td>143</td>
|
||||
<td>83</td>
|
||||
<td>517</td>
|
||||
<td>292</td>
|
||||
<td>145</td>
|
||||
<td>84</td>
|
||||
<td>521</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.62">v1.0.62</a></td>
|
||||
<td>2018-02-12T20:19:58Z</td>
|
||||
<td>549</td>
|
||||
<td>277</td>
|
||||
<td>356</td>
|
||||
<td>1,182</td>
|
||||
<td>550</td>
|
||||
<td>281</td>
|
||||
<td>358</td>
|
||||
<td>1,189</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.61">v0.10.61</a></td>
|
||||
<td>2018-02-08T18:27:39Z</td>
|
||||
<td>963</td>
|
||||
<td>606</td>
|
||||
<td>945</td>
|
||||
<td>2,514</td>
|
||||
<td>964</td>
|
||||
<td>609</td>
|
||||
<td>947</td>
|
||||
<td>2,520</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.60">v0.10.60</a></td>
|
||||
<td>2018-02-06T13:09:56Z</td>
|
||||
<td>711</td>
|
||||
<td>498</td>
|
||||
<td>543</td>
|
||||
<td>1,752</td>
|
||||
<td>713</td>
|
||||
<td>503</td>
|
||||
<td>545</td>
|
||||
<td>1,761</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.54">v0.10.54</a></td>
|
||||
<td>2018-01-31T20:21:30Z</td>
|
||||
<td>1,811</td>
|
||||
<td>1,442</td>
|
||||
<td>310</td>
|
||||
<td>3,563</td>
|
||||
<td>1,813</td>
|
||||
<td>1,444</td>
|
||||
<td>311</td>
|
||||
<td>3,568</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.52">v0.10.52</a></td>
|
||||
<td>2018-01-31T19:25:18Z</td>
|
||||
<td>37</td>
|
||||
<td>616</td>
|
||||
<td>6</td>
|
||||
<td>659</td>
|
||||
<td>38</td>
|
||||
<td>618</td>
|
||||
<td>7</td>
|
||||
<td>663</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.51">v0.10.51</a></td>
|
||||
<td>2018-01-28T18:47:02Z</td>
|
||||
<td>1,316</td>
|
||||
<td>1,581</td>
|
||||
<td>318</td>
|
||||
<td>3,215</td>
|
||||
<td>1,317</td>
|
||||
<td>1,584</td>
|
||||
<td>319</td>
|
||||
<td>3,220</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.48">v0.10.48</a></td>
|
||||
<td>2018-01-23T11:19:51Z</td>
|
||||
<td>1,956</td>
|
||||
<td>1,733</td>
|
||||
<td>1,958</td>
|
||||
<td>1,736</td>
|
||||
<td>21</td>
|
||||
<td>3,710</td>
|
||||
<td>3,715</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.47">v0.10.47</a></td>
|
||||
<td>2018-01-16T17:27:17Z</td>
|
||||
<td>1,216</td>
|
||||
<td>1,249</td>
|
||||
<td>59</td>
|
||||
<td>2,524</td>
|
||||
<td>1,218</td>
|
||||
<td>1,251</td>
|
||||
<td>60</td>
|
||||
<td>2,529</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.43">v0.10.43</a></td>
|
||||
<td>2018-01-08T10:12:10Z</td>
|
||||
<td>3,427</td>
|
||||
<td>2,328</td>
|
||||
<td>1,199</td>
|
||||
<td>6,954</td>
|
||||
<td>3,428</td>
|
||||
<td>2,332</td>
|
||||
<td>1,200</td>
|
||||
<td>6,960</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.41">v0.10.41</a></td>
|
||||
<td>2018-01-05T20:38:12Z</td>
|
||||
<td>1,029</td>
|
||||
<td>1,530</td>
|
||||
<td>229</td>
|
||||
<td>2,788</td>
|
||||
<td>1,030</td>
|
||||
<td>1,533</td>
|
||||
<td>231</td>
|
||||
<td>2,794</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.40">v0.10.40</a></td>
|
||||
<td>2018-01-02T23:16:57Z</td>
|
||||
<td>1,586</td>
|
||||
<td>1,753</td>
|
||||
<td>328</td>
|
||||
<td>3,667</td>
|
||||
<td>1,587</td>
|
||||
<td>1,756</td>
|
||||
<td>329</td>
|
||||
<td>3,672</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.39">v0.10.39</a></td>
|
||||
<td>2017-12-11T21:19:44Z</td>
|
||||
<td>5,518</td>
|
||||
<td>4,008</td>
|
||||
<td>2,915</td>
|
||||
<td>12,441</td>
|
||||
<td>5,542</td>
|
||||
<td>4,030</td>
|
||||
<td>2,937</td>
|
||||
<td>12,509</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.38">v0.10.38</a></td>
|
||||
@ -929,8 +953,8 @@
|
||||
<td>2017-12-01T09:56:44Z</td>
|
||||
<td>884</td>
|
||||
<td>1,436</td>
|
||||
<td>400</td>
|
||||
<td>2,720</td>
|
||||
<td>401</td>
|
||||
<td>2,721</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.30">v0.10.30</a></td>
|
||||
@ -943,10 +967,10 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.28">v0.10.28</a></td>
|
||||
<td>2017-11-30T01:07:46Z</td>
|
||||
<td>1,278</td>
|
||||
<td>1,280</td>
|
||||
<td>1,683</td>
|
||||
<td>864</td>
|
||||
<td>3,825</td>
|
||||
<td>3,827</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.26">v0.10.26</a></td>
|
||||
@ -959,50 +983,50 @@
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.25">v0.10.25</a></td>
|
||||
<td>2017-11-24T14:27:49Z</td>
|
||||
<td>136</td>
|
||||
<td>676</td>
|
||||
<td>5,473</td>
|
||||
<td>6,285</td>
|
||||
<td>138</td>
|
||||
<td>679</td>
|
||||
<td>5,547</td>
|
||||
<td>6,364</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.23">v0.10.23</a></td>
|
||||
<td>2017-11-21T19:38:41Z</td>
|
||||
<td>124</td>
|
||||
<td>628</td>
|
||||
<td>20</td>
|
||||
<td>772</td>
|
||||
<td>125</td>
|
||||
<td>630</td>
|
||||
<td>21</td>
|
||||
<td>776</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.22">v0.10.22</a></td>
|
||||
<td>2017-11-20T21:45:57Z</td>
|
||||
<td>76</td>
|
||||
<td>627</td>
|
||||
<td>11</td>
|
||||
<td>714</td>
|
||||
<td>77</td>
|
||||
<td>629</td>
|
||||
<td>13</td>
|
||||
<td>719</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.21">v0.10.21</a></td>
|
||||
<td>2017-11-18T00:53:15Z</td>
|
||||
<td>44</td>
|
||||
<td>619</td>
|
||||
<td>4</td>
|
||||
<td>667</td>
|
||||
<td>45</td>
|
||||
<td>622</td>
|
||||
<td>5</td>
|
||||
<td>672</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.20">v0.10.20</a></td>
|
||||
<td>2017-11-17T17:18:25Z</td>
|
||||
<td>23</td>
|
||||
<td>628</td>
|
||||
<td>14</td>
|
||||
<td>665</td>
|
||||
<td>25</td>
|
||||
<td>630</td>
|
||||
<td>15</td>
|
||||
<td>670</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.19">v0.10.19</a></td>
|
||||
<td>2017-11-20T18:59:48Z</td>
|
||||
<td>5</td>
|
||||
<td>618</td>
|
||||
<td>5</td>
|
||||
<td>628</td>
|
||||
<td>6</td>
|
||||
<td>621</td>
|
||||
<td>6</td>
|
||||
<td>633</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -1,5 +1,42 @@
|
||||
# Joplin changelog
|
||||
|
||||
## [v1.0.159](https://github.com/laurent22/joplin/releases/tag/v1.0.159) - 2019-06-08T00:00:19Z
|
||||
|
||||
- New: Added option to open development tools, to make it easier to create custom CSS
|
||||
- Improved: Improved tag dialog to make it easier to add and remove tags ([#1589](https://github.com/laurent22/joplin/issues/1589))
|
||||
- Improved: Speed up synchronisation by allowing multiple connections when downloading items ([#1633](https://github.com/laurent22/joplin/issues/1633))
|
||||
- Improved: Better handling of items that cannot be decrypted, including those that cause crashes
|
||||
- Improved: Upgrade TOC plugin version to 4.0.0 to fix various issues ([#1603](https://github.com/laurent22/joplin/issues/1603))
|
||||
- Improved: Improve how font size is applied ([#1601](https://github.com/laurent22/joplin/issues/1601))
|
||||
- Improved: Improved workflow of downloading and decrypting data during sync
|
||||
- Fixed: Fix icon path and directory in Linux install script ([#1612](https://github.com/laurent22/joplin/issues/1612))
|
||||
- Fixed: Handle multiple lines in attributes when importing Enex files ([#1583](https://github.com/laurent22/joplin/issues/1583))
|
||||
- Fixed: Fix issue with revisions being needlessly created when decrypting notes
|
||||
|
||||
## [v1.0.158](https://github.com/laurent22/joplin/releases/tag/v1.0.158) - 2019-05-27T19:01:18Z
|
||||
|
||||
- Improved: Enable more options on multimd-table plugin ([#1586](https://github.com/laurent22/joplin/issues/1586))
|
||||
- Improved: Improved config screen with dark theme
|
||||
- Improved: Make bold text more visible ([#1575](https://github.com/laurent22/joplin/issues/1575))
|
||||
- Fixed: Fix internal note links ([#1587](https://github.com/laurent22/joplin/issues/1587))
|
||||
- Fixed: Fixed empty separators in menu
|
||||
|
||||
## [v1.0.157](https://github.com/laurent22/joplin/releases/tag/v1.0.157) - 2019-05-26T17:55:53Z
|
||||
|
||||
- New: Added Persian translation ([#1539](https://github.com/laurent22/joplin/issues/1539))
|
||||
- New: Allow downloading attachments on demand or automatically ([#1527](https://github.com/laurent22/joplin/issues/1527)) ([#1481](https://github.com/laurent22/joplin/issues/1481))
|
||||
- Improved: Make bold text more visible ([#1575](https://github.com/laurent22/joplin/issues/1575))
|
||||
- Improved: Add number of characters removed and added in revision list
|
||||
- Improved: Remove tags from Welcome item due to issue with cleaning them up afterwards
|
||||
- Improved: Handle missing resource blob when setting resource size
|
||||
- Improved: Gray out checkboxes that have been ticked inside notes
|
||||
- Improved: Put back "Fetched items" message during sync
|
||||
- Improved: When opening a note using Goto Anything, open all its parent notebooks too
|
||||
- Fixed: Clears search when clicking on a notebook. ([#1504](https://github.com/laurent22/joplin/issues/1504)) ([#1186](https://github.com/laurent22/joplin/issues/1186))
|
||||
- Fixed: Default sort order for notebooks should be title and ascending ([#1541](https://github.com/laurent22/joplin/issues/1541))
|
||||
- Fixed: Added backticks to auto-wrapping quotes. ([#1534](https://github.com/laurent22/joplin/issues/1534)) ([#1426](https://github.com/laurent22/joplin/issues/1426))
|
||||
- Fixed: Prevent app from trying to upload resource it has not downloaded yet
|
||||
|
||||
## [v1.0.153](https://github.com/laurent22/joplin/releases/tag/v1.0.153) - 2019-05-15T06:27:29Z
|
||||
|
||||
This release only adds additional logging for the note history feature.
|
||||
@ -251,7 +288,7 @@ This big release aims at improving the overall usability of the application and
|
||||
|
||||
Important: This release might be slow on startup due to the need to index all the notes, especially if you have many of them with lots of content. The best is simply to wait for it even if it takes several minutes. This is just a one off and afterwards startup time will be the same as before.
|
||||
|
||||
- New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See https://joplinapp.org/#searching for more info.
|
||||
- New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See https://joplin.cozic.net/#searching for more info.
|
||||
- New: Search within current note (Ctrl+F).
|
||||
- New: Add separate editor font size option ([#1027](https://github.com/laurent22/joplin/issues/1027))
|
||||
- Changed: Changed global search shortcut to F6.
|
||||
@ -265,7 +302,7 @@ Important: This release might be slow on startup due to the need to index all th
|
||||
|
||||
Important: This release might be slow on startup due to the need to index all the notes, especially if you have many of them with lots of content. The best is simply to wait for it even if it takes several minutes. This is just a one off and afterwards startup time will be the same as before.
|
||||
|
||||
- New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See https://joplinapp.org/#searching for more info.
|
||||
- New: Fast full text search engine. Works with multiple terms, support for prefixes, can restrict search to either note title or body. See https://joplin.cozic.net/#searching for more info.
|
||||
- New: Search within current note (Ctrl+F).
|
||||
- New: Add separate editor font size option ([#1027](https://github.com/laurent22/joplin/issues/1027))
|
||||
- Changed: Changed global search shortcut to F6.
|
||||
@ -479,7 +516,7 @@ This release is mainly to fix various issues with the recently released Web Clip
|
||||
|
||||
## [v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) - 2018-05-14T11:36:01Z
|
||||
|
||||
- New: A portable version is now available. To install it simply copy the file "JoplinPortable.exe" to your USB device. See the documentation for more information - https://joplinapp.org/#desktop-applications
|
||||
- New: A portable version is now available. To install it simply copy the file "JoplinPortable.exe" to your USB device. See the documentation for more information - https://joplin.cozic.net/#desktop-applications
|
||||
- Improved: Made import of ENEX files more robust and accurate
|
||||
- Improved: Auto-update process should be more reliable.
|
||||
- Fixed: Made sync-after-save interval longer to made synchronisations less frequent.
|
||||
@ -497,7 +534,7 @@ Same as v1.0.90 but with a fix for [#510](https://github.com/laurent22/joplin/is
|
||||
|
||||
## [v1.0.89](https://github.com/laurent22/joplin/releases/tag/v1.0.89) - 2018-05-09T13:05:05Z
|
||||
|
||||
- New: Resolves [#122](https://github.com/laurent22/joplin/issues/122): Added support for sub-notebooks. Please see doc for more info: https://joplinapp.org/#sub-notebooks
|
||||
- New: Resolves [#122](https://github.com/laurent22/joplin/issues/122): Added support for sub-notebooks. Please see doc for more info: https://joplin.cozic.net/#sub-notebooks
|
||||
- Improved: Export/Import links to notes
|
||||
- Fixes [#480](https://github.com/laurent22/joplin/issues/480): Ignore invalid flag automatically passed by macOS
|
||||
- Fixes [#61](https://github.com/laurent22/joplin/issues/61): Handle path that ends with slash for file system sync
|
||||
|
125
readme/stats.md
125
readme/stats.md
@ -2,98 +2,101 @@
|
||||
|
||||
Name | Value
|
||||
--- | ---
|
||||
Total Windows downloads | 256,045
|
||||
Total macOs downloads | 110,964
|
||||
Total Linux downloads | 88,124
|
||||
Windows % | 56%
|
||||
Total Windows downloads | 273,919
|
||||
Total macOs downloads | 116,805
|
||||
Total Linux downloads | 92,419
|
||||
Windows % | 57%
|
||||
macOS % | 24%
|
||||
Linux % | 19%
|
||||
|
||||
Version | Date | Windows | macOS | Linux | Total
|
||||
--- | --- | --- | --- | --- | ---
|
||||
[v1.0.153](https://github.com/laurent22/joplin/releases/tag/v1.0.153) | 2019-05-15T06:27:29Z | 358 | 54 | 62 | 474
|
||||
[v1.0.152](https://github.com/laurent22/joplin/releases/tag/v1.0.152) | 2019-05-13T09:08:07Z | 8,246 | 2,954 | 2,241 | 13,441
|
||||
[v1.0.151](https://github.com/laurent22/joplin/releases/tag/v1.0.151) | 2019-05-12T15:14:32Z | 1,926 | 510 | 946 | 3,382
|
||||
[v1.0.150](https://github.com/laurent22/joplin/releases/tag/v1.0.150) | 2019-05-12T11:27:48Z | 395 | 108 | 54 | 557
|
||||
[v1.0.148](https://github.com/laurent22/joplin/releases/tag/v1.0.148) | 2019-05-08T19:12:24Z | 109 | 33 | 73 | 215
|
||||
[v1.0.145](https://github.com/laurent22/joplin/releases/tag/v1.0.145) | 2019-05-03T09:16:53Z | 6,841 | 2,822 | 1,423 | 11,086
|
||||
[v1.0.143](https://github.com/laurent22/joplin/releases/tag/v1.0.143) | 2019-04-22T10:51:38Z | 11,726 | 3,507 | 2,761 | 17,994
|
||||
[v1.0.142](https://github.com/laurent22/joplin/releases/tag/v1.0.142) | 2019-04-02T16:44:51Z | 14,482 | 4,510 | 4,707 | 23,699
|
||||
[v1.0.140](https://github.com/laurent22/joplin/releases/tag/v1.0.140) | 2019-03-10T20:59:58Z | 13,478 | 4,116 | 2,988 | 20,582
|
||||
[v1.0.139](https://github.com/laurent22/joplin/releases/tag/v1.0.139) | 2019-03-09T10:06:48Z | 83 | 20 | 24 | 127
|
||||
[v1.0.138](https://github.com/laurent22/joplin/releases/tag/v1.0.138) | 2019-03-03T17:23:00Z | 111 | 42 | 68 | 221
|
||||
[v1.0.159](https://github.com/laurent22/joplin/releases/tag/v1.0.159) | 2019-06-08T00:00:19Z | 121 | 26 | 65 | 212
|
||||
[v1.0.158](https://github.com/laurent22/joplin/releases/tag/v1.0.158) | 2019-05-27T19:01:18Z | 9,384 | 3,440 | 1,914 | 14,738
|
||||
[v1.0.157](https://github.com/laurent22/joplin/releases/tag/v1.0.157) | 2019-05-26T17:55:53Z | 2,126 | 807 | 272 | 3,205
|
||||
[v1.0.153](https://github.com/laurent22/joplin/releases/tag/v1.0.153) | 2019-05-15T06:27:29Z | 806 | 73 | 94 | 973
|
||||
[v1.0.152](https://github.com/laurent22/joplin/releases/tag/v1.0.152) | 2019-05-13T09:08:07Z | 13,703 | 4,369 | 4,040 | 22,112
|
||||
[v1.0.151](https://github.com/laurent22/joplin/releases/tag/v1.0.151) | 2019-05-12T15:14:32Z | 1,927 | 511 | 947 | 3,385
|
||||
[v1.0.150](https://github.com/laurent22/joplin/releases/tag/v1.0.150) | 2019-05-12T11:27:48Z | 395 | 109 | 56 | 560
|
||||
[v1.0.148](https://github.com/laurent22/joplin/releases/tag/v1.0.148) | 2019-05-08T19:12:24Z | 111 | 36 | 77 | 224
|
||||
[v1.0.145](https://github.com/laurent22/joplin/releases/tag/v1.0.145) | 2019-05-03T09:16:53Z | 6,862 | 2,827 | 1,425 | 11,114
|
||||
[v1.0.143](https://github.com/laurent22/joplin/releases/tag/v1.0.143) | 2019-04-22T10:51:38Z | 11,860 | 3,512 | 2,765 | 18,137
|
||||
[v1.0.142](https://github.com/laurent22/joplin/releases/tag/v1.0.142) | 2019-04-02T16:44:51Z | 14,490 | 4,511 | 4,708 | 23,709
|
||||
[v1.0.140](https://github.com/laurent22/joplin/releases/tag/v1.0.140) | 2019-03-10T20:59:58Z | 13,522 | 4,120 | 2,994 | 20,636
|
||||
[v1.0.139](https://github.com/laurent22/joplin/releases/tag/v1.0.139) | 2019-03-09T10:06:48Z | 83 | 20 | 25 | 128
|
||||
[v1.0.138](https://github.com/laurent22/joplin/releases/tag/v1.0.138) | 2019-03-03T17:23:00Z | 113 | 42 | 68 | 223
|
||||
[v1.0.137](https://github.com/laurent22/joplin/releases/tag/v1.0.137) | 2019-03-03T01:12:51Z | 547 | 26 | 68 | 641
|
||||
[v1.0.135](https://github.com/laurent22/joplin/releases/tag/v1.0.135) | 2019-02-27T23:36:57Z | 12,160 | 3,915 | 4,044 | 20,119
|
||||
[v1.0.135](https://github.com/laurent22/joplin/releases/tag/v1.0.135) | 2019-02-27T23:36:57Z | 12,182 | 3,915 | 4,045 | 20,142
|
||||
[v1.0.134](https://github.com/laurent22/joplin/releases/tag/v1.0.134) | 2019-02-27T10:21:44Z | 1,431 | 532 | 201 | 2,164
|
||||
[v1.0.132](https://github.com/laurent22/joplin/releases/tag/v1.0.132) | 2019-02-26T23:02:05Z | 1,046 | 411 | 79 | 1,536
|
||||
[v1.0.127](https://github.com/laurent22/joplin/releases/tag/v1.0.127) | 2019-02-14T23:12:48Z | 9,399 | 3,127 | 2,904 | 15,430
|
||||
[v1.0.126](https://github.com/laurent22/joplin/releases/tag/v1.0.126) | 2019-02-09T19:46:16Z | 914 | 53 | 108 | 1,075
|
||||
[v1.0.125](https://github.com/laurent22/joplin/releases/tag/v1.0.125) | 2019-01-26T18:14:33Z | 10,230 | 3,521 | 1,689 | 15,440
|
||||
[v1.0.127](https://github.com/laurent22/joplin/releases/tag/v1.0.127) | 2019-02-14T23:12:48Z | 9,420 | 3,127 | 2,905 | 15,452
|
||||
[v1.0.126](https://github.com/laurent22/joplin/releases/tag/v1.0.126) | 2019-02-09T19:46:16Z | 914 | 53 | 109 | 1,076
|
||||
[v1.0.125](https://github.com/laurent22/joplin/releases/tag/v1.0.125) | 2019-01-26T18:14:33Z | 10,230 | 3,522 | 1,693 | 15,445
|
||||
[v1.0.120](https://github.com/laurent22/joplin/releases/tag/v1.0.120) | 2019-01-10T21:42:53Z | 15,555 | 5,164 | 6,489 | 27,208
|
||||
[v1.0.119](https://github.com/laurent22/joplin/releases/tag/v1.0.119) | 2018-12-18T12:40:22Z | 8,855 | 3,203 | 1,993 | 14,051
|
||||
[v1.0.119](https://github.com/laurent22/joplin/releases/tag/v1.0.119) | 2018-12-18T12:40:22Z | 8,855 | 3,203 | 1,994 | 14,052
|
||||
[v1.0.118](https://github.com/laurent22/joplin/releases/tag/v1.0.118) | 2019-01-11T08:34:13Z | 676 | 215 | 75 | 966
|
||||
[v1.0.117](https://github.com/laurent22/joplin/releases/tag/v1.0.117) | 2018-11-24T12:05:24Z | 16,208 | 4,848 | 6,359 | 27,415
|
||||
[v1.0.117](https://github.com/laurent22/joplin/releases/tag/v1.0.117) | 2018-11-24T12:05:24Z | 16,208 | 4,849 | 6,359 | 27,416
|
||||
[v1.0.116](https://github.com/laurent22/joplin/releases/tag/v1.0.116) | 2018-11-20T19:09:24Z | 3,458 | 1,087 | 704 | 5,249
|
||||
[v1.0.115](https://github.com/laurent22/joplin/releases/tag/v1.0.115) | 2018-11-16T16:52:02Z | 3,628 | 1,280 | 784 | 5,692
|
||||
[v1.0.114](https://github.com/laurent22/joplin/releases/tag/v1.0.114) | 2018-10-24T20:14:10Z | 11,369 | 3,475 | 3,822 | 18,666
|
||||
[v1.0.111](https://github.com/laurent22/joplin/releases/tag/v1.0.111) | 2018-09-30T20:15:09Z | 11,879 | 3,134 | 3,650 | 18,663
|
||||
[v1.0.111](https://github.com/laurent22/joplin/releases/tag/v1.0.111) | 2018-09-30T20:15:09Z | 11,887 | 3,135 | 3,653 | 18,675
|
||||
[v1.0.110](https://github.com/laurent22/joplin/releases/tag/v1.0.110) | 2018-09-29T12:29:21Z | 926 | 376 | 103 | 1,405
|
||||
[v1.0.109](https://github.com/laurent22/joplin/releases/tag/v1.0.109) | 2018-09-27T18:01:41Z | 2,074 | 681 | 311 | 3,066
|
||||
[v1.0.109](https://github.com/laurent22/joplin/releases/tag/v1.0.109) | 2018-09-27T18:01:41Z | 2,074 | 681 | 314 | 3,069
|
||||
[v1.0.108](https://github.com/laurent22/joplin/releases/tag/v1.0.108) | 2018-09-29T18:49:29Z | 13 | 6 | 6 | 25
|
||||
[v1.0.107](https://github.com/laurent22/joplin/releases/tag/v1.0.107) | 2018-09-16T19:51:07Z | 7,127 | 2,117 | 1,699 | 10,943
|
||||
[v1.0.106](https://github.com/laurent22/joplin/releases/tag/v1.0.106) | 2018-09-08T15:23:40Z | 4,529 | 1,440 | 309 | 6,278
|
||||
[v1.0.105](https://github.com/laurent22/joplin/releases/tag/v1.0.105) | 2018-09-05T11:29:36Z | 4,593 | 1,554 | 1,441 | 7,588
|
||||
[v1.0.104](https://github.com/laurent22/joplin/releases/tag/v1.0.104) | 2018-06-28T20:25:36Z | 14,990 | 4,656 | 7,086 | 26,732
|
||||
[v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) | 2018-06-21T19:38:13Z | 2,012 | 858 | 668 | 3,538
|
||||
[v1.0.104](https://github.com/laurent22/joplin/releases/tag/v1.0.104) | 2018-06-28T20:25:36Z | 14,990 | 4,656 | 7,102 | 26,748
|
||||
[v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) | 2018-06-21T19:38:13Z | 2,014 | 859 | 668 | 3,541
|
||||
[v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) | 2018-06-17T18:35:11Z | 1,290 | 581 | 401 | 2,272
|
||||
[v1.0.100](https://github.com/laurent22/joplin/releases/tag/v1.0.100) | 2018-06-14T17:41:43Z | 857 | 410 | 228 | 1,495
|
||||
[v1.0.99](https://github.com/laurent22/joplin/releases/tag/v1.0.99) | 2018-06-10T13:18:23Z | 1,238 | 581 | 372 | 2,191
|
||||
[v1.0.97](https://github.com/laurent22/joplin/releases/tag/v1.0.97) | 2018-06-09T19:23:34Z | 297 | 138 | 54 | 489
|
||||
[v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2,686 | 1,200 | 1,266 | 5,152
|
||||
[v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2,688 | 1,200 | 1,276 | 5,164
|
||||
[v1.0.95](https://github.com/laurent22/joplin/releases/tag/v1.0.95) | 2018-05-25T13:04:30Z | 387 | 190 | 87 | 664
|
||||
[v1.0.94](https://github.com/laurent22/joplin/releases/tag/v1.0.94) | 2018-05-21T20:52:59Z | 1,099 | 557 | 362 | 2,018
|
||||
[v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1,770 | 924 | 743 | 3,437
|
||||
[v1.0.91](https://github.com/laurent22/joplin/releases/tag/v1.0.91) | 2018-05-10T14:48:04Z | 814 | 535 | 290 | 1,639
|
||||
[v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1,770 | 928 | 743 | 3,441
|
||||
[v1.0.91](https://github.com/laurent22/joplin/releases/tag/v1.0.91) | 2018-05-10T14:48:04Z | 816 | 536 | 290 | 1,642
|
||||
[v1.0.89](https://github.com/laurent22/joplin/releases/tag/v1.0.89) | 2018-05-09T13:05:05Z | 476 | 212 | 97 | 785
|
||||
[v1.0.85](https://github.com/laurent22/joplin/releases/tag/v1.0.85) | 2018-05-01T21:08:24Z | 1,641 | 934 | 617 | 3,192
|
||||
[v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4,565 | 2,437 | 2,634 | 9,636
|
||||
[v1.0.82](https://github.com/laurent22/joplin/releases/tag/v1.0.82) | 2018-03-31T19:16:31Z | 684 | 387 | 100 | 1,171
|
||||
[v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 985 | 570 | 750 | 2,305
|
||||
[v1.0.79](https://github.com/laurent22/joplin/releases/tag/v1.0.79) | 2018-03-23T18:00:11Z | 919 | 513 | 358 | 1,790
|
||||
[v1.0.78](https://github.com/laurent22/joplin/releases/tag/v1.0.78) | 2018-03-17T15:27:18Z | 1,302 | 841 | 850 | 2,993
|
||||
[v1.0.77](https://github.com/laurent22/joplin/releases/tag/v1.0.77) | 2018-03-16T15:12:35Z | 165 | 87 | 25 | 277
|
||||
[v1.0.72](https://github.com/laurent22/joplin/releases/tag/v1.0.72) | 2018-03-14T09:44:35Z | 396 | 235 | 39 | 670
|
||||
[v1.0.70](https://github.com/laurent22/joplin/releases/tag/v1.0.70) | 2018-02-28T20:04:30Z | 1,844 | 1,026 | 1,228 | 4,098
|
||||
[v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1,805 | 583 | 0 | 2,388
|
||||
[v1.0.66](https://github.com/laurent22/joplin/releases/tag/v1.0.66) | 2018-02-18T23:09:09Z | 314 | 107 | 72 | 493
|
||||
[v1.0.65](https://github.com/laurent22/joplin/releases/tag/v1.0.65) | 2018-02-17T20:02:25Z | 185 | 109 | 119 | 413
|
||||
[v1.0.64](https://github.com/laurent22/joplin/releases/tag/v1.0.64) | 2018-02-16T00:58:20Z | 1,074 | 529 | 1,116 | 2,719
|
||||
[v1.0.63](https://github.com/laurent22/joplin/releases/tag/v1.0.63) | 2018-02-14T19:40:36Z | 291 | 143 | 83 | 517
|
||||
[v1.0.62](https://github.com/laurent22/joplin/releases/tag/v1.0.62) | 2018-02-12T20:19:58Z | 549 | 277 | 356 | 1,182
|
||||
[v0.10.61](https://github.com/laurent22/joplin/releases/tag/v0.10.61) | 2018-02-08T18:27:39Z | 963 | 606 | 945 | 2,514
|
||||
[v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 711 | 498 | 543 | 1,752
|
||||
[v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) | 2018-01-31T20:21:30Z | 1,811 | 1,442 | 310 | 3,563
|
||||
[v0.10.52](https://github.com/laurent22/joplin/releases/tag/v0.10.52) | 2018-01-31T19:25:18Z | 37 | 616 | 6 | 659
|
||||
[v0.10.51](https://github.com/laurent22/joplin/releases/tag/v0.10.51) | 2018-01-28T18:47:02Z | 1,316 | 1,581 | 318 | 3,215
|
||||
[v0.10.48](https://github.com/laurent22/joplin/releases/tag/v0.10.48) | 2018-01-23T11:19:51Z | 1,956 | 1,733 | 21 | 3,710
|
||||
[v0.10.47](https://github.com/laurent22/joplin/releases/tag/v0.10.47) | 2018-01-16T17:27:17Z | 1,216 | 1,249 | 59 | 2,524
|
||||
[v0.10.43](https://github.com/laurent22/joplin/releases/tag/v0.10.43) | 2018-01-08T10:12:10Z | 3,427 | 2,328 | 1,199 | 6,954
|
||||
[v0.10.41](https://github.com/laurent22/joplin/releases/tag/v0.10.41) | 2018-01-05T20:38:12Z | 1,029 | 1,530 | 229 | 2,788
|
||||
[v0.10.40](https://github.com/laurent22/joplin/releases/tag/v0.10.40) | 2018-01-02T23:16:57Z | 1,586 | 1,753 | 328 | 3,667
|
||||
[v0.10.39](https://github.com/laurent22/joplin/releases/tag/v0.10.39) | 2017-12-11T21:19:44Z | 5,518 | 4,008 | 2,915 | 12,441
|
||||
[v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4,571 | 2,443 | 2,639 | 9,653
|
||||
[v1.0.82](https://github.com/laurent22/joplin/releases/tag/v1.0.82) | 2018-03-31T19:16:31Z | 686 | 388 | 106 | 1,180
|
||||
[v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 986 | 572 | 754 | 2,312
|
||||
[v1.0.79](https://github.com/laurent22/joplin/releases/tag/v1.0.79) | 2018-03-23T18:00:11Z | 920 | 516 | 361 | 1,797
|
||||
[v1.0.78](https://github.com/laurent22/joplin/releases/tag/v1.0.78) | 2018-03-17T15:27:18Z | 1,303 | 845 | 853 | 3,001
|
||||
[v1.0.77](https://github.com/laurent22/joplin/releases/tag/v1.0.77) | 2018-03-16T15:12:35Z | 166 | 89 | 28 | 283
|
||||
[v1.0.72](https://github.com/laurent22/joplin/releases/tag/v1.0.72) | 2018-03-14T09:44:35Z | 397 | 238 | 41 | 676
|
||||
[v1.0.70](https://github.com/laurent22/joplin/releases/tag/v1.0.70) | 2018-02-28T20:04:30Z | 1,845 | 1,030 | 1,233 | 4,108
|
||||
[v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1,806 | 585 | 0 | 2,391
|
||||
[v1.0.66](https://github.com/laurent22/joplin/releases/tag/v1.0.66) | 2018-02-18T23:09:09Z | 315 | 109 | 73 | 497
|
||||
[v1.0.65](https://github.com/laurent22/joplin/releases/tag/v1.0.65) | 2018-02-17T20:02:25Z | 186 | 110 | 120 | 416
|
||||
[v1.0.64](https://github.com/laurent22/joplin/releases/tag/v1.0.64) | 2018-02-16T00:58:20Z | 1,076 | 531 | 1,117 | 2,724
|
||||
[v1.0.63](https://github.com/laurent22/joplin/releases/tag/v1.0.63) | 2018-02-14T19:40:36Z | 292 | 145 | 84 | 521
|
||||
[v1.0.62](https://github.com/laurent22/joplin/releases/tag/v1.0.62) | 2018-02-12T20:19:58Z | 550 | 281 | 358 | 1,189
|
||||
[v0.10.61](https://github.com/laurent22/joplin/releases/tag/v0.10.61) | 2018-02-08T18:27:39Z | 964 | 609 | 947 | 2,520
|
||||
[v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 713 | 503 | 545 | 1,761
|
||||
[v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) | 2018-01-31T20:21:30Z | 1,813 | 1,444 | 311 | 3,568
|
||||
[v0.10.52](https://github.com/laurent22/joplin/releases/tag/v0.10.52) | 2018-01-31T19:25:18Z | 38 | 618 | 7 | 663
|
||||
[v0.10.51](https://github.com/laurent22/joplin/releases/tag/v0.10.51) | 2018-01-28T18:47:02Z | 1,317 | 1,584 | 319 | 3,220
|
||||
[v0.10.48](https://github.com/laurent22/joplin/releases/tag/v0.10.48) | 2018-01-23T11:19:51Z | 1,958 | 1,736 | 21 | 3,715
|
||||
[v0.10.47](https://github.com/laurent22/joplin/releases/tag/v0.10.47) | 2018-01-16T17:27:17Z | 1,218 | 1,251 | 60 | 2,529
|
||||
[v0.10.43](https://github.com/laurent22/joplin/releases/tag/v0.10.43) | 2018-01-08T10:12:10Z | 3,428 | 2,332 | 1,200 | 6,960
|
||||
[v0.10.41](https://github.com/laurent22/joplin/releases/tag/v0.10.41) | 2018-01-05T20:38:12Z | 1,030 | 1,533 | 231 | 2,794
|
||||
[v0.10.40](https://github.com/laurent22/joplin/releases/tag/v0.10.40) | 2018-01-02T23:16:57Z | 1,587 | 1,756 | 329 | 3,672
|
||||
[v0.10.39](https://github.com/laurent22/joplin/releases/tag/v0.10.39) | 2017-12-11T21:19:44Z | 5,542 | 4,030 | 2,937 | 12,509
|
||||
[v0.10.38](https://github.com/laurent22/joplin/releases/tag/v0.10.38) | 2017-12-08T10:12:06Z | 1,041 | 1,213 | 299 | 2,553
|
||||
[v0.10.37](https://github.com/laurent22/joplin/releases/tag/v0.10.37) | 2017-12-07T19:38:05Z | 256 | 829 | 74 | 1,159
|
||||
[v0.10.36](https://github.com/laurent22/joplin/releases/tag/v0.10.36) | 2017-12-05T09:34:40Z | 1,008 | 1,340 | 431 | 2,779
|
||||
[v0.10.35](https://github.com/laurent22/joplin/releases/tag/v0.10.35) | 2017-12-02T15:56:08Z | 1,570 | 1,532 | 739 | 3,841
|
||||
[v0.10.34](https://github.com/laurent22/joplin/releases/tag/v0.10.34) | 2017-12-02T14:50:28Z | 80 | 652 | 53 | 785
|
||||
[v0.10.33](https://github.com/laurent22/joplin/releases/tag/v0.10.33) | 2017-12-02T13:20:39Z | 52 | 641 | 13 | 706
|
||||
[v0.10.31](https://github.com/laurent22/joplin/releases/tag/v0.10.31) | 2017-12-01T09:56:44Z | 884 | 1,436 | 400 | 2,720
|
||||
[v0.10.31](https://github.com/laurent22/joplin/releases/tag/v0.10.31) | 2017-12-01T09:56:44Z | 884 | 1,436 | 401 | 2,721
|
||||
[v0.10.30](https://github.com/laurent22/joplin/releases/tag/v0.10.30) | 2017-11-30T20:28:16Z | 711 | 1,352 | 410 | 2,473
|
||||
[v0.10.28](https://github.com/laurent22/joplin/releases/tag/v0.10.28) | 2017-11-30T01:07:46Z | 1,278 | 1,683 | 864 | 3,825
|
||||
[v0.10.28](https://github.com/laurent22/joplin/releases/tag/v0.10.28) | 2017-11-30T01:07:46Z | 1,280 | 1,683 | 864 | 3,827
|
||||
[v0.10.26](https://github.com/laurent22/joplin/releases/tag/v0.10.26) | 2017-11-29T16:02:17Z | 180 | 685 | 255 | 1,120
|
||||
[v0.10.25](https://github.com/laurent22/joplin/releases/tag/v0.10.25) | 2017-11-24T14:27:49Z | 136 | 676 | 5,473 | 6,285
|
||||
[v0.10.23](https://github.com/laurent22/joplin/releases/tag/v0.10.23) | 2017-11-21T19:38:41Z | 124 | 628 | 20 | 772
|
||||
[v0.10.22](https://github.com/laurent22/joplin/releases/tag/v0.10.22) | 2017-11-20T21:45:57Z | 76 | 627 | 11 | 714
|
||||
[v0.10.21](https://github.com/laurent22/joplin/releases/tag/v0.10.21) | 2017-11-18T00:53:15Z | 44 | 619 | 4 | 667
|
||||
[v0.10.20](https://github.com/laurent22/joplin/releases/tag/v0.10.20) | 2017-11-17T17:18:25Z | 23 | 628 | 14 | 665
|
||||
[v0.10.19](https://github.com/laurent22/joplin/releases/tag/v0.10.19) | 2017-11-20T18:59:48Z | 5 | 618 | 5 | 628
|
||||
[v0.10.25](https://github.com/laurent22/joplin/releases/tag/v0.10.25) | 2017-11-24T14:27:49Z | 138 | 679 | 5,547 | 6,364
|
||||
[v0.10.23](https://github.com/laurent22/joplin/releases/tag/v0.10.23) | 2017-11-21T19:38:41Z | 125 | 630 | 21 | 776
|
||||
[v0.10.22](https://github.com/laurent22/joplin/releases/tag/v0.10.22) | 2017-11-20T21:45:57Z | 77 | 629 | 13 | 719
|
||||
[v0.10.21](https://github.com/laurent22/joplin/releases/tag/v0.10.21) | 2017-11-18T00:53:15Z | 45 | 622 | 5 | 672
|
||||
[v0.10.20](https://github.com/laurent22/joplin/releases/tag/v0.10.20) | 2017-11-17T17:18:25Z | 25 | 630 | 15 | 670
|
||||
[v0.10.19](https://github.com/laurent22/joplin/releases/tag/v0.10.19) | 2017-11-20T18:59:48Z | 6 | 621 | 6 | 633
|
Loading…
Reference in New Issue
Block a user