You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-09-05 20:56:22 +02:00
Compare commits
35 Commits
cli-v1.0.1
...
android-v1
Author | SHA1 | Date | |
---|---|---|---|
|
075e55c077 | ||
|
dc818e8a0c | ||
|
caa58dd913 | ||
|
c84c3cd026 | ||
|
bda5ac9fb5 | ||
|
f928f645e5 | ||
|
53d7e906d4 | ||
|
e670b5d03f | ||
|
2a7d555859 | ||
|
e6675f500c | ||
|
c3f20d3ebc | ||
|
ff257060d1 | ||
|
68cde202a4 | ||
|
1a7a87e170 | ||
|
2990642923 | ||
|
0818de036e | ||
|
122bc29035 | ||
|
861cf8a1b2 | ||
|
7d6959e9e4 | ||
|
85091052e7 | ||
|
f46ad5bfda | ||
|
29f7937fc2 | ||
|
7fae9fda10 | ||
|
a37961dccc | ||
|
55155646aa | ||
|
7bffe86439 | ||
|
86136e0c6c | ||
|
21ae447d9c | ||
|
ad211b4b4e | ||
|
d6218f35fe | ||
|
7af0dcd19a | ||
|
e1a52c5606 | ||
|
468c345527 | ||
|
041bdc08a2 | ||
|
7535f1a8c6 |
@@ -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) {
|
||||
|
102
CliClient/package-lock.json
generated
102
CliClient/package-lock.json
generated
@@ -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",
|
||||
|
@@ -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",
|
||||
|
@@ -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);
|
||||
|
78
ElectronClient/app/package-lock.json
generated
78
ElectronClient/app/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"version": "1.0.159",
|
||||
"version": "1.0.160",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -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",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"version": "1.0.159",
|
||||
"version": "1.0.160",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -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,15 +20,15 @@ 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
|
||||
|
||||
Operating System | Download | Alt. Download
|
||||
-----------------|----------|----------------
|
||||
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplinapp.org/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.261/joplin-v1.0.261.apk)
|
||||
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplinapp.org/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.269/joplin-v1.0.269.apk)
|
||||
iOS | <a href='https://itunes.apple.com/us/app/joplin/id1315599797'><img alt='Get it on the App Store' height="40px" src='https://joplinapp.org/images/BadgeIOS.png'/></a> | -
|
||||
|
||||
## Terminal application
|
||||
|
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"presets": ["module:metro-react-native-babel-preset"]
|
||||
}
|
@@ -19,7 +19,6 @@
|
||||
[libs]
|
||||
node_modules/react-native/Libraries/react-native/react-native-interface.js
|
||||
node_modules/react-native/flow
|
||||
flow/
|
||||
|
||||
[options]
|
||||
emoji=true
|
||||
@@ -44,4 +43,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
|
||||
unsafe.enable_getters_and_setters=true
|
||||
|
||||
[version]
|
||||
^0.42.0
|
||||
^0.92.0
|
||||
|
@@ -8,23 +8,13 @@
|
||||
# - `buck install -r android/app` - compile, install and run application
|
||||
#
|
||||
|
||||
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
|
||||
|
||||
lib_deps = []
|
||||
|
||||
for jarfile in glob(['libs/*.jar']):
|
||||
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
|
||||
lib_deps.append(':' + name)
|
||||
prebuilt_jar(
|
||||
name = name,
|
||||
binary_jar = jarfile,
|
||||
)
|
||||
create_aar_targets(glob(["libs/*.aar"]))
|
||||
|
||||
for aarfile in glob(['libs/*.aar']):
|
||||
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
|
||||
lib_deps.append(':' + name)
|
||||
android_prebuilt_aar(
|
||||
name = name,
|
||||
aar = aarfile,
|
||||
)
|
||||
create_jar_targets(glob(["libs/*.jar"]))
|
||||
|
||||
android_library(
|
||||
name = "all-libs",
|
||||
|
@@ -84,24 +84,29 @@ def enableProguardInReleaseBuilds = false
|
||||
|
||||
android {
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "net.cozic.joplin"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 2097497
|
||||
versionName "1.0.261"
|
||||
versionCode 2097505
|
||||
versionName "1.0.269"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
}
|
||||
missingDimensionStrategy 'react-native-camera', 'general'
|
||||
}
|
||||
splits {
|
||||
abi {
|
||||
reset()
|
||||
enable enableSeparateBuildPerCPUArchitecture
|
||||
universalApk false // If true, also generate a universal APK
|
||||
include "armeabi-v7a", "x86"
|
||||
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||
}
|
||||
}
|
||||
signingConfigs {
|
||||
@@ -126,7 +131,7 @@ android {
|
||||
variant.outputs.each { output ->
|
||||
// For each separate APK per architecture, set a unique version code as described here:
|
||||
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
|
||||
def versionCodes = ["armeabi-v7a":1, "x86":2]
|
||||
def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4]
|
||||
def abi = output.getFilter(OutputFile.ABI)
|
||||
if (abi != null) { // null for the universal-debug, universal-release variants
|
||||
output.versionCodeOverride =
|
||||
@@ -134,21 +139,28 @@ android {
|
||||
}
|
||||
}
|
||||
}
|
||||
packagingOptions {
|
||||
pickFirst '**/libjsc.so'
|
||||
pickFirst '**/libc++_shared.so'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':@react-native-community_slider')
|
||||
implementation "org.webkit:android-jsc:r241213"
|
||||
implementation project(':react-native-webview')
|
||||
compile project(':react-native-push-notification')
|
||||
implementation (project(':react-native-camera')) {
|
||||
// This is required because com.google.firebase requires v16.0.x of com.google.android.gms
|
||||
// while react-native-camera requires v15.x, which results in broken dependencies with
|
||||
// this error message:
|
||||
//
|
||||
// The library com.google.android.gms:play-services-base is being requested by various other libraries at [[15.0.1,15.0.1]], but resolves to 16.0.1
|
||||
//
|
||||
// For the record: found solution by removing all Firebase stuff here and running "gradlew.bat :app:dependencies"
|
||||
// That shows that react-native-camera was the one requiring v15.0.1.
|
||||
exclude group: "com.google.android.gms"
|
||||
}
|
||||
// implementation (project(':react-native-camera')) {
|
||||
// // This is required because com.google.firebase requires v16.0.x of com.google.android.gms
|
||||
// // while react-native-camera requires v15.x, which results in broken dependencies with
|
||||
// // this error message:
|
||||
// //
|
||||
// // The library com.google.android.gms:play-services-base is being requested by various other libraries at [[15.0.1,15.0.1]], but resolves to 16.0.1
|
||||
// //
|
||||
// // For the record: found solution by removing all Firebase stuff here and running "gradlew.bat :app:dependencies"
|
||||
// // That shows that react-native-camera was the one requiring v15.0.1.
|
||||
// exclude group: "com.google.android.gms"
|
||||
// }
|
||||
implementation project(':react-native-file-viewer')
|
||||
implementation project(':react-native-securerandom')
|
||||
implementation project(':react-native-fs')
|
||||
@@ -164,6 +176,7 @@ dependencies {
|
||||
implementation project(':react-native-image-resizer')
|
||||
implementation project(':react-native-share-extension')
|
||||
implementation project(':react-native-version-info')
|
||||
implementation project(':react-native-camera')
|
||||
implementation "com.facebook.react:react-native:+"
|
||||
|
||||
// implementation "com.google.android.gms:play-services-base:16.0.1" // For Firebase
|
||||
|
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
|
||||
</manifest>
|
@@ -3,8 +3,9 @@ package net.cozic.joplin;
|
||||
import android.app.Application;
|
||||
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.reactnativecommunity.slider.ReactSliderPackage;
|
||||
import com.reactnativecommunity.webview.RNCWebViewPackage;
|
||||
import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage;
|
||||
import org.reactnative.camera.RNCameraPackage;
|
||||
import com.vinzscam.reactnativefileviewer.RNFileViewerPackage;
|
||||
import net.rhogan.rnsecurerandom.RNSecureRandomPackage;
|
||||
import com.imagepicker.ImagePickerPackage;
|
||||
@@ -19,6 +20,7 @@ import com.RNFetchBlob.RNFetchBlobPackage;
|
||||
import com.rnfs.RNFSPackage;
|
||||
import fr.bamlab.rnimageresizer.ImageResizerPackage;
|
||||
import org.pgsqlite.SQLitePluginPackage;
|
||||
import org.reactnative.camera.RNCameraPackage;
|
||||
|
||||
import com.alinz.parkerdan.shareextension.SharePackage;
|
||||
|
||||
@@ -39,9 +41,10 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
protected List<ReactPackage> getPackages() {
|
||||
return Arrays.<ReactPackage>asList(
|
||||
new MainReactPackage(),
|
||||
new ReactSliderPackage(),
|
||||
new RNCWebViewPackage(),
|
||||
new ReactNativePushNotificationPackage(),
|
||||
new ImageResizerPackage(),
|
||||
new RNCameraPackage(),
|
||||
new RNFileViewerPackage(),
|
||||
new RNSecureRandomPackage(),
|
||||
new ImagePickerPackage(),
|
||||
@@ -51,6 +54,7 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
new SQLitePluginPackage(),
|
||||
new VectorIconsPackage(),
|
||||
new SharePackage(),
|
||||
new RNCameraPackage(),
|
||||
new RNVersionInfoPackage()
|
||||
);
|
||||
}
|
||||
|
@@ -2,18 +2,18 @@
|
||||
|
||||
buildscript {
|
||||
ext {
|
||||
buildToolsVersion = "27.0.3"
|
||||
buildToolsVersion = "28.0.3"
|
||||
minSdkVersion = 16
|
||||
compileSdkVersion = 27
|
||||
targetSdkVersion = 26
|
||||
supportLibVersion = "27.1.1"
|
||||
compileSdkVersion = 28
|
||||
targetSdkVersion = 28
|
||||
supportLibVersion = "28.0.0"
|
||||
}
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.2.0' // Upgraded from 3.1.4 to 3.2.0 for Firebase
|
||||
classpath("com.android.tools.build:gradle:3.4.0")
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
@@ -25,6 +25,7 @@ allprojects {
|
||||
mavenLocal()
|
||||
google()
|
||||
jcenter() // Was added by me - still needed?
|
||||
maven { url "https://jitpack.io" }
|
||||
maven {
|
||||
url "https://maven.google.com"
|
||||
}
|
||||
@@ -32,23 +33,22 @@ allprojects {
|
||||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
||||
url "$rootDir/../node_modules/react-native/android"
|
||||
}
|
||||
maven {
|
||||
url "$rootDir/../node_modules/jsc-android/dist"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Maybe remove this (forgot why it was needed - probably to make some module work)
|
||||
|
||||
subprojects {
|
||||
afterEvaluate {project ->
|
||||
if (project.hasProperty("android")) {
|
||||
android {
|
||||
compileSdkVersion 26
|
||||
buildToolsVersion "27.0.3"
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task wrapper(type: Wrapper) {
|
||||
gradleVersion = '4.4'
|
||||
distributionUrl = distributionUrl.replace("bin", "all")
|
||||
}
|
||||
|
@@ -16,3 +16,8 @@
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
|
||||
# Required for react-native-webview
|
||||
# https://github.com/react-native-community/react-native-webview/blob/master/docs/Getting-Started.md
|
||||
# android.useAndroidX=true
|
||||
# android.enableJetifier=true
|
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||
|
18
ReactNativeClient/android/gradlew
vendored
18
ReactNativeClient/android/gradlew
vendored
@@ -1,5 +1,21 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
18
ReactNativeClient/android/gradlew.bat
vendored
18
ReactNativeClient/android/gradlew.bat
vendored
@@ -1,3 +1,19 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem http://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
@@ -1,6 +1,8 @@
|
||||
rootProject.name = 'Joplin'
|
||||
include ':react-native-camera'
|
||||
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
|
||||
include ':@react-native-community_slider'
|
||||
project(':@react-native-community_slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android')
|
||||
include ':react-native-webview'
|
||||
project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android')
|
||||
include ':react-native-file-viewer'
|
||||
project(':react-native-file-viewer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-file-viewer/android')
|
||||
include ':react-native-securerandom'
|
||||
@@ -33,4 +35,7 @@ include ':react-native-version-info'
|
||||
project(':react-native-version-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-version-info/android')
|
||||
|
||||
include ':react-native-push-notification'
|
||||
project(':react-native-push-notification').projectDir = file('../node_modules/react-native-push-notification/android')
|
||||
project(':react-native-push-notification').projectDir = file('../node_modules/react-native-push-notification/android')
|
||||
|
||||
include ':react-native-camera'
|
||||
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
|
@@ -14,7 +14,6 @@
|
||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||
065B3D792187B61200002863 /* libRNVersionInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 065B3D772187B5E300002863 /* libRNVersionInfo.a */; };
|
||||
0DAD2E67F6A14BDC8250B927 /* libRNDocumentPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82214D3345D846709A314868 /* libRNDocumentPicker.a */; };
|
||||
12AE298E1C0E445682922DAB /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E132B594F4FB4C96A2E2B0FF /* libRNCamera.a */; };
|
||||
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
||||
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
|
||||
@@ -25,9 +24,12 @@
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
1E71C4672AEC47CE94DFF507 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FD370E24D76E461D960DD85D /* Feather.ttf */; };
|
||||
350318CF7C9E4BD68821EBE9 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FF411B45E68B4A8CBCC35777 /* Ionicons.ttf */; };
|
||||
45E8D3F9FBA0410E82E28A0D /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7A5EE79128470A920D4971 /* libRNCWebView.a */; };
|
||||
4D05897622B446600072ECCC /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D05896A22B4464B0072ECCC /* libRNCamera.a */; };
|
||||
4DDA31241FC88F2400B5A80D /* libRCTPushNotification.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DDA310F1FC88EEB00B5A80D /* libRCTPushNotification.a */; };
|
||||
5AFCE00CC1414FE6BD618F0D /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 15FD7D2C8F0A445BBA807A9D /* MaterialIcons.ttf */; };
|
||||
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
|
||||
65B672EE2B5A43E0919683EA /* libRNCSlider.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 090D1FCD537D494CBC153ED6 /* libRNCSlider.a */; };
|
||||
725A77EC604947A0AFF12C2B /* libRNFetchBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F5E37D05726A4A08B2EE323A /* libRNFetchBlob.a */; };
|
||||
73F8D08845494D1396B6CD0B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F79F2CD7CED446B986A6252 /* Entypo.ttf */; };
|
||||
82C61D3DAE0A4666883001E9 /* libRNFileViewer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */; };
|
||||
@@ -45,6 +47,8 @@
|
||||
E8DD8252C0DD4CF1B53590E9 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 69B8EE98BFBC4AABA4885BB0 /* SimpleLineIcons.ttf */; };
|
||||
EA501DCDCF4745E9B63ECE98 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D46CBDF8846409890AD7A84 /* Octicons.ttf */; };
|
||||
EC11356C90E9419799A2626F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51BCEC3BC28046C8BB19531F /* EvilIcons.ttf */; };
|
||||
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; };
|
||||
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; };
|
||||
F3D0BB525E6C490294D73075 /* libRNSecureRandom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22647ACF9A4C45918C44C599 /* libRNSecureRandom.a */; };
|
||||
FBF57CE2F0F448FA9A8985E2 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EB8BCAEA9AA41CAAE460443 /* libsqlite3.0.tbd */; };
|
||||
/* End PBXBuildFile section */
|
||||
@@ -127,12 +131,47 @@
|
||||
remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
|
||||
remoteInfo = cxxreact;
|
||||
};
|
||||
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||
4D0588F522B444490072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
|
||||
remoteInfo = jschelpers;
|
||||
remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8;
|
||||
remoteInfo = jsi;
|
||||
};
|
||||
4D0588F722B444490072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = EDEBC73B214B45A300DD5AC8;
|
||||
remoteInfo = jsiexecutor;
|
||||
};
|
||||
4D0588F922B444490072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = ED296FB6214C9A0900B7C4FE;
|
||||
remoteInfo = "jsi-tvOS";
|
||||
};
|
||||
4D0588FB22B444490072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = ED296FEE214C9CF800B7C4FE;
|
||||
remoteInfo = "jsiexecutor-tvOS";
|
||||
};
|
||||
4D05890B22B444490072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNCWebView;
|
||||
};
|
||||
4D05896922B4464B0072ECCC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 4107012F1ACB723B00C6AA39;
|
||||
remoteInfo = RNCamera;
|
||||
};
|
||||
4D2A44E7200015A2001CA388 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
@@ -281,13 +320,6 @@
|
||||
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
|
||||
remoteInfo = "cxxreact-tvOS";
|
||||
};
|
||||
4D2AFF8E1FDA002000599716 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
|
||||
remoteInfo = "jschelpers-tvOS";
|
||||
};
|
||||
4D2AFF901FDA002000599716 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
@@ -330,20 +362,6 @@
|
||||
remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5;
|
||||
remoteInfo = "jsinspector-tvOS";
|
||||
};
|
||||
4D7F8DA420A32BA0008B757D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
|
||||
remoteInfo = privatedata;
|
||||
};
|
||||
4D7F8DA620A32BA0008B757D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
|
||||
remoteInfo = "privatedata-tvOS";
|
||||
};
|
||||
4D8B719B2163E8C500136BBC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */;
|
||||
@@ -351,13 +369,6 @@
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNFileViewer;
|
||||
};
|
||||
4D8C5643217161BF00E93280 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FC908F114F494130A324B402 /* RNCamera.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 4107012F1ACB723B00C6AA39;
|
||||
remoteInfo = RNCamera;
|
||||
};
|
||||
4DA7F80C1FC1DA9C00353191 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */;
|
||||
@@ -365,6 +376,13 @@
|
||||
remoteGlobalIDString = 014A3B5C1C6CF33500B6D375;
|
||||
remoteInfo = RNImagePicker;
|
||||
};
|
||||
4DC3B74E22B44EC300447A39 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 28C79A09220DC4CC0061DE82;
|
||||
remoteInfo = RNCSlider;
|
||||
};
|
||||
4DDA310E1FC88EEB00B5A80D /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */;
|
||||
@@ -418,6 +436,7 @@
|
||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
||||
02C42EA98156482DB00BF86D /* RNDocumentPicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNDocumentPicker.xcodeproj; path = "../node_modules/react-native-document-picker/ios/RNDocumentPicker.xcodeproj"; sourceTree = "<group>"; };
|
||||
065B3D412187B5E300002863 /* RNVersionInfo.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVersionInfo.xcodeproj; path = "../node_modules/react-native-version-info/ios/RNVersionInfo.xcodeproj"; sourceTree = "<group>"; };
|
||||
090D1FCD537D494CBC153ED6 /* libRNCSlider.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCSlider.a; sourceTree = "<group>"; };
|
||||
0EB8BCAEA9AA41CAAE460443 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
|
||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
||||
@@ -436,6 +455,8 @@
|
||||
381C047F2739439CB3E6452A /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
|
||||
3FFC0F5EFDC54862B1F998DD /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
|
||||
44A39642217548C8ADA91CBA /* libRNImagePicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNImagePicker.a; sourceTree = "<group>"; };
|
||||
4C7A5EE79128470A920D4971 /* libRNCWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCWebView.a; sourceTree = "<group>"; };
|
||||
4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = "<group>"; };
|
||||
4DA7F7A61FC1196F00353191 /* Joplin.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Joplin.entitlements; path = Joplin/Joplin.entitlements; sourceTree = "<group>"; };
|
||||
4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTPushNotification.xcodeproj; path = "../node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj"; sourceTree = "<group>"; };
|
||||
508DD20D1EA341CA8F730F22 /* libRCTImageResizer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTImageResizer.a; sourceTree = "<group>"; };
|
||||
@@ -457,12 +478,14 @@
|
||||
CC3CF4044A914711B8D30D1A /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
|
||||
CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFileViewer.a; sourceTree = "<group>"; };
|
||||
CCDE9E9AF09B45F391B1C2AF /* SQLite.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = SQLite.xcodeproj; path = "../node_modules/react-native-sqlite-storage/src/ios/SQLite.xcodeproj"; sourceTree = "<group>"; };
|
||||
DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCWebView.xcodeproj; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = "<group>"; };
|
||||
DF1C50EBC11E46A3AF87F80A /* RCTImageResizer.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTImageResizer.xcodeproj; path = "../node_modules/react-native-image-resizer/ios/RCTImageResizer.xcodeproj"; sourceTree = "<group>"; };
|
||||
E132B594F4FB4C96A2E2B0FF /* libRNCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCamera.a; sourceTree = "<group>"; };
|
||||
E2638D52624B477FABB52B8F /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
|
||||
E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCSlider.xcodeproj; path = "../node_modules/@react-native-community/slider/ios/RNCSlider.xcodeproj"; sourceTree = "<group>"; };
|
||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
|
||||
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
|
||||
F098E1ACCB594C828C851A57 /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = "<group>"; };
|
||||
F5E37D05726A4A08B2EE323A /* libRNFetchBlob.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFetchBlob.a; sourceTree = "<group>"; };
|
||||
FC908F114F494130A324B402 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = "<group>"; };
|
||||
FD370E24D76E461D960DD85D /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; };
|
||||
FF411B45E68B4A8CBCC35777 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
@@ -472,10 +495,12 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */,
|
||||
065B3D792187B61200002863 /* libRNVersionInfo.a in Frameworks */,
|
||||
4DDA31241FC88F2400B5A80D /* libRCTPushNotification.a in Frameworks */,
|
||||
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */,
|
||||
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
|
||||
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */,
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */,
|
||||
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
|
||||
@@ -497,7 +522,9 @@
|
||||
AF99EEC6C55042F7BFC87583 /* libRNImagePicker.a in Frameworks */,
|
||||
F3D0BB525E6C490294D73075 /* libRNSecureRandom.a in Frameworks */,
|
||||
82C61D3DAE0A4666883001E9 /* libRNFileViewer.a in Frameworks */,
|
||||
12AE298E1C0E445682922DAB /* libRNCamera.a in Frameworks */,
|
||||
45E8D3F9FBA0410E82E28A0D /* libRNCWebView.a in Frameworks */,
|
||||
4D05897622B446600072ECCC /* libRNCamera.a in Frameworks */,
|
||||
65B672EE2B5A43E0919683EA /* libRNCSlider.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -549,6 +576,8 @@
|
||||
04FA5E9085024E3A9DAF0E03 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
|
||||
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
|
||||
0EB8BCAEA9AA41CAAE460443 /* libsqlite3.0.tbd */,
|
||||
);
|
||||
name = Frameworks;
|
||||
@@ -606,16 +635,32 @@
|
||||
4D2AFF8B1FDA002000599716 /* libyoga.a */,
|
||||
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
|
||||
4D2AFF8D1FDA002000599716 /* libcxxreact.a */,
|
||||
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
|
||||
4D2AFF8F1FDA002000599716 /* libjschelpers.a */,
|
||||
4D7F8DA120A32BA0008B757D /* libjsinspector.a */,
|
||||
4D7F8DA320A32BA0008B757D /* libjsinspector-tvOS.a */,
|
||||
4D3A19271FBDDA9400457703 /* libthird-party.a */,
|
||||
4D2AFF911FDA002000599716 /* libthird-party.a */,
|
||||
4D3A192B1FBDDA9400457703 /* libdouble-conversion.a */,
|
||||
4D2AFF931FDA002000599716 /* libdouble-conversion.a */,
|
||||
4D7F8DA520A32BA0008B757D /* libprivatedata.a */,
|
||||
4D7F8DA720A32BA0008B757D /* libprivatedata-tvOS.a */,
|
||||
4D0588F622B444490072ECCC /* libjsi.a */,
|
||||
4D0588F822B444490072ECCC /* libjsiexecutor.a */,
|
||||
4D0588FA22B444490072ECCC /* libjsi-tvOS.a */,
|
||||
4D0588FC22B444490072ECCC /* libjsiexecutor-tvOS.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4D05890822B444490072ECCC /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4D05890C22B444490072ECCC /* libRNCWebView.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4D05893E22B4464B0072ECCC /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4D05896A22B4464B0072ECCC /* libRNCamera.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -640,7 +685,8 @@
|
||||
44A39642217548C8ADA91CBA /* libRNImagePicker.a */,
|
||||
22647ACF9A4C45918C44C599 /* libRNSecureRandom.a */,
|
||||
CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */,
|
||||
E132B594F4FB4C96A2E2B0FF /* libRNCamera.a */,
|
||||
4C7A5EE79128470A920D4971 /* libRNCWebView.a */,
|
||||
090D1FCD537D494CBC153ED6 /* libRNCSlider.a */,
|
||||
);
|
||||
name = "Recovered References";
|
||||
sourceTree = "<group>";
|
||||
@@ -702,14 +748,6 @@
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4D8C5640217161BF00E93280 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4D8C5644217161BF00E93280 /* libRNCamera.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4DA7F8091FC1DA9C00353191 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -718,6 +756,14 @@
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4DC3B74B22B44EC300447A39 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4DC3B74F22B44EC300447A39 /* libRNCSlider.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4DDA31021FC88EEA00B5A80D /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -766,6 +812,7 @@
|
||||
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */,
|
||||
065B3D412187B5E300002863 /* RNVersionInfo.xcodeproj */,
|
||||
4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */,
|
||||
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
|
||||
@@ -789,7 +836,8 @@
|
||||
A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */,
|
||||
252BD7B86BF7435B960DA901 /* RNSecureRandom.xcodeproj */,
|
||||
59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */,
|
||||
FC908F114F494130A324B402 /* RNCamera.xcodeproj */,
|
||||
DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */,
|
||||
E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */,
|
||||
);
|
||||
name = Libraries;
|
||||
sourceTree = "<group>";
|
||||
@@ -949,8 +997,16 @@
|
||||
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 4D8C5640217161BF00E93280 /* Products */;
|
||||
ProjectRef = FC908F114F494130A324B402 /* RNCamera.xcodeproj */;
|
||||
ProductGroup = 4D05893E22B4464B0072ECCC /* Products */;
|
||||
ProjectRef = 4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 4DC3B74B22B44EC300447A39 /* Products */;
|
||||
ProjectRef = E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 4D05890822B444490072ECCC /* Products */;
|
||||
ProjectRef = DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 4D2A85AD1FBCE3AC0028537D /* Products */;
|
||||
@@ -1074,11 +1130,46 @@
|
||||
remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
|
||||
4D0588F622B444490072ECCC /* libjsi.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjschelpers.a;
|
||||
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||
path = libjsi.a;
|
||||
remoteRef = 4D0588F522B444490072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D0588F822B444490072ECCC /* libjsiexecutor.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjsiexecutor.a;
|
||||
remoteRef = 4D0588F722B444490072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D0588FA22B444490072ECCC /* libjsi-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libjsi-tvOS.a";
|
||||
remoteRef = 4D0588F922B444490072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D0588FC22B444490072ECCC /* libjsiexecutor-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libjsiexecutor-tvOS.a";
|
||||
remoteRef = 4D0588FB22B444490072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D05890C22B444490072ECCC /* libRNCWebView.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNCWebView.a;
|
||||
remoteRef = 4D05890B22B444490072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D05896A22B4464B0072ECCC /* libRNCamera.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNCamera.a;
|
||||
remoteRef = 4D05896922B4464B0072ECCC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D2A44E8200015A2001CA388 /* libRNSecureRandom.a */ = {
|
||||
@@ -1228,13 +1319,6 @@
|
||||
remoteRef = 4D2AFF8C1FDA002000599716 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D2AFF8F1FDA002000599716 /* libjschelpers.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjschelpers.a;
|
||||
remoteRef = 4D2AFF8E1FDA002000599716 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D2AFF911FDA002000599716 /* libthird-party.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
@@ -1277,20 +1361,6 @@
|
||||
remoteRef = 4D7F8DA220A32BA0008B757D /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D7F8DA520A32BA0008B757D /* libprivatedata.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libprivatedata.a;
|
||||
remoteRef = 4D7F8DA420A32BA0008B757D /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D7F8DA720A32BA0008B757D /* libprivatedata-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libprivatedata-tvOS.a";
|
||||
remoteRef = 4D7F8DA620A32BA0008B757D /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D8B719C2163E8C500136BBC /* libRNFileViewer.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
@@ -1298,13 +1368,6 @@
|
||||
remoteRef = 4D8B719B2163E8C500136BBC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4D8C5644217161BF00E93280 /* libRNCamera.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNCamera.a;
|
||||
remoteRef = 4D8C5643217161BF00E93280 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4DA7F80D1FC1DA9C00353191 /* libRNImagePicker.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
@@ -1312,6 +1375,13 @@
|
||||
remoteRef = 4DA7F80C1FC1DA9C00353191 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4DC3B74F22B44EC300447A39 /* libRNCSlider.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNCSlider.a;
|
||||
remoteRef = 4DC3B74E22B44EC300447A39 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
4DDA310F1FC88EEB00B5A80D /* libRCTPushNotification.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
@@ -1439,18 +1509,23 @@
|
||||
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
|
||||
"$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios",
|
||||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)..\node_modules\neact-native-image-pickerios",
|
||||
"$(SRCROOT)..\node_modules\neact-native-securerandomios",
|
||||
"$(SRCROOT)..\node_modules\neact-native-file-viewerios",
|
||||
"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
|
||||
"$(SRCROOT)..",
|
||||
ode_modules,
|
||||
"eact-native-image-pickerios",
|
||||
"$(SRCROOT)..",
|
||||
ode_modules,
|
||||
"eact-native-securerandomios",
|
||||
"$(SRCROOT)..",
|
||||
ode_modules,
|
||||
"eact-native-file-viewerios",
|
||||
"$(SRCROOT)/../node_modules/react-native-webview/ios",
|
||||
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
|
||||
);
|
||||
INFOPLIST_FILE = Joplin/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
@@ -1486,15 +1561,14 @@
|
||||
"$(SRCROOT)..\node_modules\neact-native-image-pickerios",
|
||||
"$(SRCROOT)..\node_modules\neact-native-securerandomios",
|
||||
"$(SRCROOT)..\node_modules\neact-native-file-viewerios",
|
||||
"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
|
||||
"$(SRCROOT)/../node_modules/react-native-webview/ios",
|
||||
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
|
||||
);
|
||||
INFOPLIST_FILE = Joplin/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
"\"$(SRCROOT)/Joplin\"",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
@@ -7,9 +7,10 @@
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <React/RCTBridgeDelegate.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
|
||||
|
||||
@property (nonatomic, strong) UIWindow *window;
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#import "AppDelegate.h"
|
||||
|
||||
#import <React/RCTBridge.h>
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTRootView.h>
|
||||
#import <React/RCTPushNotificationManager.h>
|
||||
@@ -17,14 +18,11 @@
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
NSURL *jsCodeLocation;
|
||||
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
|
||||
moduleName:@"Joplin"
|
||||
initialProperties:nil];
|
||||
|
||||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
|
||||
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
||||
moduleName:@"Joplin"
|
||||
initialProperties:nil
|
||||
launchOptions:launchOptions];
|
||||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
|
||||
|
||||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
@@ -42,4 +40,13 @@
|
||||
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { [RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error]; } // Required for the localNotification event.
|
||||
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [RCTPushNotificationManager didReceiveLocalNotification:notification]; }
|
||||
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
#if DEBUG
|
||||
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
|
||||
#else
|
||||
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
||||
#endif
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
|
@@ -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');
|
||||
|
@@ -48,8 +48,13 @@ class CameraView extends Component {
|
||||
style={{flex:1}}
|
||||
ref={ref => { this.camera = ref; }}
|
||||
type={RNCamera.Constants.Type.back}
|
||||
permissionDialogTitle={_('Permission to use camera')}
|
||||
permissionDialogMessage={_('Your permission to use your camera is required.')}
|
||||
captureAudio={false}
|
||||
androidCameraPermissionOptions={{
|
||||
title: _('Permission to use camera'),
|
||||
message: _('Your permission to use your camera is required.'),
|
||||
buttonPositive: _('OK'),
|
||||
buttonNegative: _('Cancel'),
|
||||
}}
|
||||
>
|
||||
<View style={{flex:1, justifyContent:'space-between', flexDirection:'column'}}>
|
||||
<View style={{flex:1, justifyContent:'flex-start'}}>
|
||||
|
@@ -1,5 +1,6 @@
|
||||
const React = require('react'); const Component = React.Component;
|
||||
const { Platform, WebView, View } = require('react-native');
|
||||
const { Platform, View } = require('react-native');
|
||||
const { WebView } = require('react-native-webview');
|
||||
const { themeStyle } = require('lib/components/global-style.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
@@ -99,6 +100,7 @@ class NoteBodyViewer extends Component {
|
||||
highlightedKeywords: this.props.highlightedKeywords,
|
||||
resources: this.props.noteResources,//await shared.attachedResources(bodyToRender),
|
||||
codeTheme: theme.codeThemeCss,
|
||||
postMessageSyntax: 'window.ReactNativeWebView.postMessage',
|
||||
};
|
||||
|
||||
let result = this.mdToHtml_.render(bodyToRender, this.props.webViewStyle, mdOptions);
|
||||
@@ -108,7 +110,7 @@ class NoteBodyViewer extends Component {
|
||||
|
||||
const injectedJs = [this.mdToHtml_.injectedJavaScript()];
|
||||
injectedJs.push(shim.injectedJs('webviewLib'));
|
||||
injectedJs.push('webviewLib.initialize({ postMessage: msg => { return postMessage(msg); } });');
|
||||
injectedJs.push('webviewLib.initialize({ postMessage: msg => { return window.ReactNativeWebView.postMessage(msg); } });');
|
||||
injectedJs.push(`
|
||||
const readyStateCheckInterval = setInterval(function() {
|
||||
if (document.readyState === "complete") {
|
||||
@@ -122,7 +124,7 @@ class NoteBodyViewer extends Component {
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
<body>
|
||||
` + html + `
|
||||
@@ -162,10 +164,15 @@ class NoteBodyViewer extends Component {
|
||||
baseUrl: 'file://' + Setting.value('resourceDir') + '/',
|
||||
};
|
||||
|
||||
// Note: useWebKit={false} is needed to go around this bug:
|
||||
// https://github.com/react-native-community/react-native-webview/issues/376
|
||||
// However, if we add the <meta> tag as described there, it is no longer necessary and WebKit can be used!
|
||||
// https://github.com/react-native-community/react-native-webview/issues/312#issuecomment-501991406
|
||||
|
||||
return (
|
||||
<View style={style}>
|
||||
<WebView
|
||||
scalesPageToFit={Platform.OS !== 'ios'}
|
||||
useWebKit={true}
|
||||
style={webViewStyle}
|
||||
source={source}
|
||||
injectedJavaScript={injectedJs.join('\n')}
|
||||
@@ -175,7 +182,8 @@ class NoteBodyViewer extends Component {
|
||||
onLoadEnd={() => this.onLoadEnd()}
|
||||
onError={() => reg.logger().error('WebView error') }
|
||||
onMessage={(event) => {
|
||||
let msg = event.nativeEvent.data;
|
||||
// Since RN 58 (or 59) messages are now escaped twice???
|
||||
let msg = unescape(unescape(event.nativeEvent.data));
|
||||
|
||||
console.info('Got IPC message: ', msg);
|
||||
|
||||
|
@@ -364,6 +364,7 @@ class ScreenHeaderComponent extends Component {
|
||||
|
||||
const addFolderChildren = (folders, pickerItems, indent) => {
|
||||
folders.sort((a, b) => {
|
||||
if (!a || !b) return -1; // No idea why "a" was undefined at one point
|
||||
return a.title.toLowerCase() < b.title.toLowerCase() ? -1 : +1;
|
||||
});
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
const React = require('react'); const Component = React.Component;
|
||||
const { Platform, TouchableOpacity, Linking, View, Switch, Slider, StyleSheet, Text, Button, ScrollView, TextInput } = require('react-native');
|
||||
const { Platform, TouchableOpacity, Linking, View, Switch, StyleSheet, Text, Button, ScrollView, TextInput } = require('react-native');
|
||||
const { connect } = require('react-redux');
|
||||
const { ScreenHeader } = require('lib/components/screen-header.js');
|
||||
const { _, setLocale } = require('lib/locale.js');
|
||||
@@ -12,6 +12,8 @@ const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const VersionInfo = require('react-native-version-info').default;
|
||||
|
||||
import Slider from '@react-native-community/slider';
|
||||
|
||||
class ConfigScreenComponent extends BaseScreenComponent {
|
||||
|
||||
static navigationOptions(options) {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
const React = require('react'); const Component = React.Component;
|
||||
const { TextInput, TouchableOpacity, Linking, View, Switch, Slider, StyleSheet, Text, Button, ScrollView, Platform } = require('react-native');
|
||||
const { TextInput, TouchableOpacity, Linking, View, Switch, StyleSheet, Text, Button, ScrollView, Platform } = require('react-native');
|
||||
const EncryptionService = require('lib/services/EncryptionService');
|
||||
const { connect } = require('react-redux');
|
||||
const { ScreenHeader } = require('lib/components/screen-header.js');
|
||||
|
@@ -1,5 +1,5 @@
|
||||
const React = require('react'); const Component = React.Component;
|
||||
const { Platform, Clipboard, Keyboard, BackHandler, View, Button, TextInput, WebView, Text, StyleSheet, Linking, Image, Share } = require('react-native');
|
||||
const { Platform, Clipboard, Keyboard, BackHandler, View, Button, TextInput, Text, StyleSheet, Linking, Image, Share } = require('react-native');
|
||||
const { connect } = require('react-redux');
|
||||
const { uuid } = require('lib/uuid.js');
|
||||
const RNFS = require('react-native-fs');
|
||||
@@ -157,7 +157,11 @@ class NoteScreenComponent extends BaseScreenComponent {
|
||||
throw new Error(_('The Joplin mobile app does not currently support this type of link: %s', BaseModel.modelTypeToName(item.type_)));
|
||||
}
|
||||
} else {
|
||||
Linking.openURL(msg);
|
||||
if (msg.indexOf('file://') === 0) {
|
||||
throw new Error(_('Links with protocol "%s" are not supported', 'file://'));
|
||||
} else {
|
||||
Linking.openURL(msg);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
dialogs.error(this, error.message);
|
||||
|
@@ -1,6 +1,7 @@
|
||||
const React = require('react'); const Component = React.Component;
|
||||
const { View } = require('react-native');
|
||||
const { WebView, Button, Text } = require('react-native');
|
||||
const { Button, Text } = require('react-native');
|
||||
const { WebView } = require('react-native-webview');
|
||||
const { connect } = require('react-redux');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { ScreenHeader } = require('lib/components/screen-header.js');
|
||||
|
@@ -85,6 +85,14 @@ class SelectDateTimeDialog extends Component {
|
||||
cancelBtnText={_('Cancel')}
|
||||
onDateChange={(date) => { this.setState({ date: this.stringToDate(date) }); }}
|
||||
style={{width:300}}
|
||||
customStyles={{
|
||||
btnConfirm: {
|
||||
paddingVertical: 0,
|
||||
},
|
||||
btnCancel: {
|
||||
paddingVertical: 0,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
</PopupDialog>
|
||||
|
@@ -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);
|
||||
|
@@ -1,5 +1,4 @@
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
|
||||
class ResourceLocalState extends BaseModel {
|
||||
|
@@ -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) {
|
||||
|
@@ -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) {
|
||||
|
@@ -155,7 +155,7 @@ class Synchronizer {
|
||||
|
||||
// Stop queue but don't set it to null as it may be used to
|
||||
// retrieve the last few downloads.
|
||||
this.downloadQueue_.stop();
|
||||
if (this.downloadQueue_) this.downloadQueue_.stop();
|
||||
|
||||
this.logSyncOperation('cancelling', null, null, '');
|
||||
this.cancelling_ = true;
|
||||
|
@@ -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
|
||||
|
16
ReactNativeClient/metro.config.js
Normal file
16
ReactNativeClient/metro.config.js
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Metro configuration for React Native
|
||||
* https://github.com/facebook/react-native
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
module.exports = {
|
||||
transformer: {
|
||||
getTransformOptions: async () => ({
|
||||
transform: {
|
||||
experimentalImportSupport: false,
|
||||
inlineRequires: false,
|
||||
},
|
||||
}),
|
||||
},
|
||||
};
|
3358
ReactNativeClient/package-lock.json
generated
3358
ReactNativeClient/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"description": "Joplin for Android",
|
||||
"description": "Joplin for Mobile",
|
||||
"license": "MIT",
|
||||
"version": "0.8.0",
|
||||
"private": true,
|
||||
@@ -9,6 +9,7 @@
|
||||
"postinstall": "node ../Tools/copycss.js && node ../Tools/buildReactNativeInjectedJs.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@react-native-community/slider": "^1.1.3",
|
||||
"async-mutex": "^0.1.3",
|
||||
"base-64": "^0.1.0",
|
||||
"buffer": "^5.0.8",
|
||||
@@ -18,6 +19,7 @@
|
||||
"form-data": "^2.1.4",
|
||||
"highlight.js": "^9.15.6",
|
||||
"html-entities": "^1.2.1",
|
||||
"jsc-android": "241213.1.0",
|
||||
"katex": "^0.10.0",
|
||||
"markdown-it": "^8.4.0",
|
||||
"markdown-it-abbr": "^1.0.4",
|
||||
@@ -37,15 +39,15 @@
|
||||
"prop-types": "^15.6.0",
|
||||
"punycode": "^2.1.1",
|
||||
"query-string": "4.3.4",
|
||||
"react": "^16.6.3",
|
||||
"react-native": "^0.57.8",
|
||||
"react": "^16.8.3",
|
||||
"react-native": "^0.59.9",
|
||||
"react-native-action-button": "^2.6.9",
|
||||
"react-native-camera": "^1.3.0",
|
||||
"react-native-camera": "^2.10.2",
|
||||
"react-native-datepicker": "^1.6.0",
|
||||
"react-native-dialogbox": "^0.6.6",
|
||||
"react-native-document-picker": "^2.1.0",
|
||||
"react-native-dialogbox": "^0.6.10",
|
||||
"react-native-document-picker": "^2.3.0",
|
||||
"react-native-dropdownalert": "^3.1.2",
|
||||
"react-native-file-viewer": "^1.0.5",
|
||||
"react-native-file-viewer": "^1.0.15",
|
||||
"react-native-fs": "^2.11.17",
|
||||
"react-native-image-picker": "^0.26.7",
|
||||
"react-native-image-resizer": "^1.0.0",
|
||||
@@ -56,9 +58,10 @@
|
||||
"react-native-securerandom": "^0.1.1",
|
||||
"react-native-share-extension": "^1.2.1",
|
||||
"react-native-side-menu": "^1.1.3",
|
||||
"react-native-sqlite-storage": "3.3.*",
|
||||
"react-native-sqlite-storage": "^3.3.10",
|
||||
"react-native-vector-icons": "^4.4.2",
|
||||
"react-native-version-info": "^0.5.1",
|
||||
"react-native-webview": "^5.12.0",
|
||||
"react-navigation": "^1.0.0-beta.21",
|
||||
"react-redux": "5.0.7",
|
||||
"redux": "4.0.0",
|
||||
@@ -75,7 +78,9 @@
|
||||
"xml2js": "^0.4.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-preset-react-native": "1.9.1",
|
||||
"react-test-renderer": "^16.6.3"
|
||||
"@babel/core": "^7.4.5",
|
||||
"@babel/runtime": "^7.4.5",
|
||||
"metro-react-native-babel-preset": "^0.54.1",
|
||||
"react-test-renderer": "^16.8.3"
|
||||
}
|
||||
}
|
||||
|
1
ReactNativeClient/run_ios.sh
Executable file
1
ReactNativeClient/run_ios.sh
Executable file
@@ -0,0 +1 @@
|
||||
react-native run-ios --simulator 'iPhone 6'
|
@@ -64,19 +64,19 @@ async function main() {
|
||||
console.info('Building APK file v' + version + '...');
|
||||
|
||||
let restoreDir = null;
|
||||
let apkBuildCmd = 'assembleRelease -PbuildDir=build'; // --console plain
|
||||
if (await fileExists('/mnt/c/Windows/System32/cmd.exe')) {
|
||||
apkBuildCmd = '/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat ' + apkBuildCmd + '"';
|
||||
} else {
|
||||
process.chdir(rnDir + '/android');
|
||||
apkBuildCmd = './gradlew ' + apkBuildCmd;
|
||||
restoreDir = rootDir;
|
||||
}
|
||||
// let apkBuildCmd = 'assembleRelease -PbuildDir=build'; // --console plain
|
||||
// if (await fileExists('/mnt/c/Windows/System32/cmd.exe')) {
|
||||
// apkBuildCmd = '/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat ' + apkBuildCmd + '"';
|
||||
// } else {
|
||||
// process.chdir(rnDir + '/android');
|
||||
// apkBuildCmd = './gradlew ' + apkBuildCmd;
|
||||
// restoreDir = rootDir;
|
||||
// }
|
||||
|
||||
// const output = await execCommand('/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat assembleRelease -PbuildDir=build --console plain"');
|
||||
console.info(apkBuildCmd);
|
||||
const output = await execCommand(apkBuildCmd);
|
||||
console.info(output);
|
||||
// // const output = await execCommand('/mnt/c/Windows/System32/cmd.exe /c "cd ReactNativeClient\\android && gradlew.bat assembleRelease -PbuildDir=build --console plain"');
|
||||
// console.info(apkBuildCmd);
|
||||
// const output = await execCommand(apkBuildCmd);
|
||||
// console.info(output);
|
||||
|
||||
if (restoreDir) process.chdir(restoreDir);
|
||||
|
||||
|
@@ -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>
|
||||
@@ -317,7 +317,7 @@
|
||||
<tr>
|
||||
<td>Android</td>
|
||||
<td><a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplinapp.org/images/BadgeAndroid.png'/></a></td>
|
||||
<td>or <a href="https://github.com/laurent22/joplin-android/releases/download/android-v1.0.261/joplin-v1.0.261.apk">Download APK File</a></td>
|
||||
<td>or <a href="https://github.com/laurent22/joplin-android/releases/download/android-v1.0.269/joplin-v1.0.269.apk">Download APK File</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>iOS</td>
|
||||
|
@@ -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
|
Reference in New Issue
Block a user