You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-30 20:39:46 +02:00
Compare commits
19 Commits
ios-v12.13
...
server-v2.
Author | SHA1 | Date | |
---|---|---|---|
|
214f9916d9 | ||
|
87aeffa160 | ||
|
14a2d2d795 | ||
|
3560bc62a2 | ||
|
0729d1db27 | ||
|
5f27d425bf | ||
|
e2956c391d | ||
|
bdc8f30705 | ||
|
2c9bf9f03a | ||
|
60c2964acd | ||
|
97248035b1 | ||
|
35c79a2cfb | ||
|
9b9762f940 | ||
|
e186fe8936 | ||
|
213cd419f0 | ||
|
b89b5fef65 | ||
|
92dccbe98d | ||
|
6cd0938ee4 | ||
|
c3dc30ee5d |
@@ -249,6 +249,8 @@ packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/joplinCommandToTinyMceCommands.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/openEditDialog.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupToolbarButtons.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.test.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -231,6 +231,8 @@ packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/joplinCommandToTinyMceCommands.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/openEditDialog.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupToolbarButtons.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.test.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||
|
@@ -26,7 +26,7 @@ For more information about the applications, see the [full Joplin documentation]
|
||||
|
||||
Donations to Joplin support the development of the project. Developing quality applications mostly takes time, but there are also some expenses, such as digital certificates to sign the applications, app store fees, hosting, etc. Most of all, your donation will make it possible to keep up the current development standard.
|
||||
|
||||
Please see the [donation page](https://github.com/laurent22/joplin/blob/dev/readme/about/donate.md) for information on how to support the development of Joplin.
|
||||
Please see the [donation page](https://github.com/laurent22/joplin/blob/dev/readme/donate.md) for information on how to support the development of Joplin.
|
||||
|
||||
# Sponsors
|
||||
|
||||
|
@@ -96,7 +96,7 @@
|
||||
"@types/fs-extra": "11.0.3",
|
||||
"eslint-plugin-github": "4.10.0",
|
||||
"http-server": "14.1.1",
|
||||
"node-gyp": "9.4.0",
|
||||
"node-gyp": "9.4.1",
|
||||
"nodemon": "3.0.1"
|
||||
},
|
||||
"packageManager": "yarn@3.6.4",
|
||||
|
@@ -27,6 +27,7 @@ import bridge from '../../../../services/bridge';
|
||||
import { TinyMceEditorEvents } from './utils/types';
|
||||
import type { Editor } from 'tinymce';
|
||||
import { joplinCommandToTinyMceCommands, TinyMceCommand } from './utils/joplinCommandToTinyMceCommands';
|
||||
import shouldPasteResources from './utils/shouldPasteResources';
|
||||
const { clipboard } = require('electron');
|
||||
const supportedLocales = require('./supportedLocales');
|
||||
|
||||
@@ -1085,15 +1086,9 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
||||
// formatted text.
|
||||
const pastedHtml = event.clipboardData.getData('text/html') ? clipboard.readHTML() : '';
|
||||
|
||||
// We should only process the images if there is no plain text or
|
||||
// HTML text in the clipboard. This is because certain applications,
|
||||
// such as Word, are going to add multiple versions of the copied
|
||||
// data to the clipboard - one with the text formatted as HTML, and
|
||||
// one with the text as an image. In that case, we need to ignore
|
||||
// the image and only process the HTML.
|
||||
const resourceMds = await getResourcesFromPasteEvent(event);
|
||||
|
||||
if (!pastedText && !pastedHtml) {
|
||||
const resourceMds = await getResourcesFromPasteEvent(event);
|
||||
if (shouldPasteResources(pastedText, pastedHtml, resourceMds)) {
|
||||
if (resourceMds.length) {
|
||||
const result = await markupToHtml.current(MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN, resourceMds.join('\n'), markupRenderOptions({ bodyOnly: true }));
|
||||
editor.insertContent(result.html);
|
||||
|
@@ -0,0 +1,47 @@
|
||||
import shouldPasteResources from './shouldPasteResources';
|
||||
|
||||
describe('shouldPasteResources', () => {
|
||||
|
||||
test.each([
|
||||
[
|
||||
'',
|
||||
'',
|
||||
[],
|
||||
true,
|
||||
],
|
||||
[
|
||||
'some text',
|
||||
'',
|
||||
[],
|
||||
false,
|
||||
],
|
||||
[
|
||||
'',
|
||||
'<b>some html<b>',
|
||||
[],
|
||||
false,
|
||||
],
|
||||
[
|
||||
'',
|
||||
'<img src="https://example.com/img.png"/>',
|
||||
[],
|
||||
false,
|
||||
],
|
||||
[
|
||||
'some text',
|
||||
'<img src="https://example.com/img.png"/>',
|
||||
[],
|
||||
false,
|
||||
],
|
||||
[
|
||||
'',
|
||||
'<img src="https://example.com/img.png"/><p>Some text</p>',
|
||||
[],
|
||||
false,
|
||||
],
|
||||
])('should tell if clipboard content should be processed as resources', (pastedText, pastedHtml, resourceMds, expected) => {
|
||||
const actual = shouldPasteResources(pastedText, pastedHtml, resourceMds);
|
||||
expect(actual).toBe(expected);
|
||||
});
|
||||
|
||||
});
|
@@ -0,0 +1,49 @@
|
||||
import { htmlDocIsImageOnly } from '@joplin/renderer/htmlUtils';
|
||||
import Logger from '@joplin/utils/Logger';
|
||||
|
||||
const logger = Logger.create('shouldPasteResources');
|
||||
|
||||
// We should only process the images if there is no plain text or HTML text in
|
||||
// the clipboard. This is because certain applications, such as Word, are going
|
||||
// to add multiple versions of the copied data to the clipboard - one with the
|
||||
// text formatted as HTML, and one with the text as an image. In that case, we
|
||||
// need to ignore the image and only process the HTML.
|
||||
//
|
||||
// Additional source of troubles is that when copying an image from Chrome, the
|
||||
// clipboard will contain two elements: The actual image (type=image), and an
|
||||
// HTML fragment with a link to the image. Most of the time getting the image
|
||||
// from the HTML will work... except if some authentication is required to
|
||||
// access the image. In that case we'll end up with dead link in the RTE. For
|
||||
// that reason, when there's only an image in the HTML document, we process
|
||||
// instead the clipboard resources, which will contain the actual image.
|
||||
//
|
||||
// We have a lot of log statements so that if someone reports a bug we can ask
|
||||
// them to check the console and give us the messages they have.
|
||||
export default (pastedText: string, pastedHtml: string, resourceMds: string[]) => {
|
||||
logger.info('Pasted text:', pastedText);
|
||||
logger.info('Pasted HTML:', pastedHtml);
|
||||
logger.info('Resources:', resourceMds);
|
||||
|
||||
if (pastedText) {
|
||||
logger.info('Not pasting resources because the clipboard contains plain text');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pastedHtml) {
|
||||
if (!htmlDocIsImageOnly(pastedHtml)) {
|
||||
logger.info('Not pasting resources because the clipboard contains HTML, which contains more than just one image');
|
||||
return false;
|
||||
} else {
|
||||
logger.info('Not pasting HTML because it only contains one image.');
|
||||
}
|
||||
|
||||
if (!resourceMds.length) {
|
||||
logger.info('Not pasting resources because there isn\'t any');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
logger.info('Pasting resources');
|
||||
|
||||
return true;
|
||||
};
|
@@ -159,7 +159,7 @@
|
||||
"electron-window-state": "5.0.3",
|
||||
"formatcoords": "1.1.3",
|
||||
"fs-extra": "11.1.1",
|
||||
"highlight.js": "11.8.0",
|
||||
"highlight.js": "11.9.0",
|
||||
"immer": "7.0.15",
|
||||
"keytar": "7.9.0",
|
||||
"mark.js": "8.11.1",
|
||||
|
@@ -45,9 +45,6 @@ LogBox.ignoreLogs([
|
||||
// Apparently it can be safely ignored:
|
||||
// https://github.com/react-native-webview/react-native-webview/issues/124
|
||||
'Did not receive response to shouldStartLoad in time, defaulting to YES',
|
||||
|
||||
// Emitted by react-native-popup-menu
|
||||
'MenuContext is deprecated and it might be removed in future releases, use MenuProvider instead.',
|
||||
]);
|
||||
|
||||
AppRegistry.registerComponent('Joplin', () => Root);
|
||||
|
@@ -359,9 +359,9 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-rsa-native (2.0.5):
|
||||
- React
|
||||
- react-native-saf-x (2.13.3):
|
||||
- react-native-saf-x (2.13.2):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (4.7.4):
|
||||
- react-native-safe-area-context (4.7.3):
|
||||
- React-Core
|
||||
- react-native-slider (4.4.3):
|
||||
- React-Core
|
||||
@@ -479,8 +479,7 @@ PODS:
|
||||
- React
|
||||
- RNShare (9.4.1):
|
||||
- React-Core
|
||||
- RNVectorIcons (10.0.1):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RNVectorIcons (10.0.0):
|
||||
- React-Core
|
||||
- RNZipArchive (6.1.0):
|
||||
- React-Core
|
||||
@@ -787,8 +786,8 @@ SPEC CHECKSUMS:
|
||||
react-native-image-resizer: 681f7607418b97c084ba2d0999b153b103040d8a
|
||||
react-native-netinfo: fefd4e98d75cbdd6e85fc530f7111a8afdf2b0c5
|
||||
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
|
||||
react-native-saf-x: 0f7531c9f8bdbb62bbd55ceb7433de7bb756cd73
|
||||
react-native-safe-area-context: 2cd91d532de12acdb0a9cbc8d43ac72a8e4c897c
|
||||
react-native-saf-x: a93121b21f9d5ec84d5e7fc99fdeebfbf232920a
|
||||
react-native-safe-area-context: 238cd8b619e05cb904ccad97ef42e84d1b5ae6ec
|
||||
react-native-slider: 1cdd6ba29675df21f30544253bf7351d3c2d68c4
|
||||
react-native-sqlite-storage: f6d515e1c446d1e6d026aa5352908a25d4de3261
|
||||
react-native-version-info: a106f23009ac0db4ee00de39574eb546682579b9
|
||||
@@ -818,7 +817,7 @@ SPEC CHECKSUMS:
|
||||
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
|
||||
RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef
|
||||
RNShare: 32e97adc8d8c97d4a26bcdd3c45516882184f8b6
|
||||
RNVectorIcons: ace237de89f1574ef3c963ae9d5da3bd6fbeb02a
|
||||
RNVectorIcons: 8b5bb0fa61d54cd2020af4f24a51841ce365c7e9
|
||||
RNZipArchive: ef9451b849c45a29509bf44e65b788829ab07801
|
||||
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
|
||||
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
|
||||
|
@@ -15,7 +15,7 @@
|
||||
"test": "jest",
|
||||
"test-ci": "yarn test",
|
||||
"watchInjectedJs": "gulp watchInjectedJs",
|
||||
"postinstall": "jetify && yarn run build"
|
||||
"postinstall": "jetify"
|
||||
},
|
||||
"dependencies": {
|
||||
"@bam.tech/react-native-image-resizer": "3.0.7",
|
||||
@@ -113,7 +113,7 @@
|
||||
"react-test-renderer": "18.2.0",
|
||||
"sqlite3": "5.1.6",
|
||||
"ts-jest": "29.1.1",
|
||||
"ts-loader": "9.4.4",
|
||||
"ts-loader": "9.5.0",
|
||||
"ts-node": "10.9.1",
|
||||
"typescript": "5.2.2",
|
||||
"uglify-js": "3.17.4",
|
||||
|
@@ -66,7 +66,7 @@ const { SearchScreen } = require('./components/screens/search.js');
|
||||
const { OneDriveLoginScreen } = require('./components/screens/onedrive-login.js');
|
||||
import EncryptionConfigScreen from './components/screens/encryption-config';
|
||||
const { DropboxLoginScreen } = require('./components/screens/dropbox-login.js');
|
||||
const { MenuContext } = require('react-native-popup-menu');
|
||||
import { MenuProvider } from 'react-native-popup-menu';
|
||||
import SideMenu from './components/SideMenu';
|
||||
import SideMenuContent from './components/side-menu-content';
|
||||
const { SideMenuContentNote } = require('./components/side-menu-content-note.js');
|
||||
@@ -1088,7 +1088,7 @@ class AppComponent extends React.Component {
|
||||
}}
|
||||
>
|
||||
<StatusBar barStyle={statusBarStyle} />
|
||||
<MenuContext style={{ flex: 1 }}>
|
||||
<MenuProvider style={{ flex: 1 }}>
|
||||
<SafeAreaView style={{ flex: 0, backgroundColor: theme.backgroundColor2 }}/>
|
||||
<SafeAreaView style={{ flex: 1 }}>
|
||||
<View style={{ flex: 1, backgroundColor: theme.backgroundColor }}>
|
||||
@@ -1101,7 +1101,7 @@ class AppComponent extends React.Component {
|
||||
sensorInfo={this.state.sensorInfo}
|
||||
/> }
|
||||
</SafeAreaView>
|
||||
</MenuContext>
|
||||
</MenuProvider>
|
||||
</SideMenu>
|
||||
</View>
|
||||
);
|
||||
|
@@ -7,8 +7,6 @@
|
||||
"exclude": [
|
||||
//Files that don't need transpilation
|
||||
"**/node_modules",
|
||||
"**/*.test.ts",
|
||||
"**/*.test.tsx",
|
||||
"gulpfile.ts",
|
||||
"tools/*.ts",
|
||||
],
|
||||
|
@@ -30,7 +30,7 @@
|
||||
"jest-environment-jsdom": "29.7.0",
|
||||
"style-loader": "3.3.3",
|
||||
"ts-jest": "29.1.1",
|
||||
"ts-loader": "9.4.4",
|
||||
"ts-loader": "9.5.0",
|
||||
"typescript": "5.2.2",
|
||||
"webpack": "5.74.0",
|
||||
"webpack-cli": "4.10.0"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import htmlUtils, { extractHtmlBody } from './htmlUtils';
|
||||
import htmlUtils, { extractHtmlBody, htmlDocIsImageOnly } from './htmlUtils';
|
||||
|
||||
describe('htmlUtils', () => {
|
||||
|
||||
@@ -51,4 +51,39 @@ describe('htmlUtils', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test('should tell if an HTML document is an image only', () => {
|
||||
const testCases: [string, boolean][] = [
|
||||
[
|
||||
// This is the kind of HTML that's pasted when copying an image from Chrome
|
||||
'<meta charset=\'utf-8\'>\n<img src="https://example.com/img.png"/>',
|
||||
true,
|
||||
],
|
||||
[
|
||||
'',
|
||||
false,
|
||||
],
|
||||
[
|
||||
'<img src="https://example.com/img.png"/>',
|
||||
true,
|
||||
],
|
||||
[
|
||||
'<img src="https://example.com/img.png"/><img src="https://example.com/img.png"/>',
|
||||
false,
|
||||
],
|
||||
[
|
||||
'<img src="https://example.com/img.png"/><p>Some text</p>',
|
||||
false,
|
||||
],
|
||||
[
|
||||
'<img src="https://example.com/img.png"/> Some text',
|
||||
false,
|
||||
],
|
||||
];
|
||||
|
||||
for (const [input, expected] of testCases) {
|
||||
const actual = htmlDocIsImageOnly(input);
|
||||
expect(actual).toBe(expected);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -404,4 +404,33 @@ export const extractHtmlBody = (html: string) => {
|
||||
return bodyFound ? output.join('') : html;
|
||||
};
|
||||
|
||||
export const htmlDocIsImageOnly = (html: string) => {
|
||||
let imageCount = 0;
|
||||
let nonImageFound = false;
|
||||
let textFound = false;
|
||||
|
||||
const parser = new htmlparser2.Parser({
|
||||
|
||||
onopentag: (name: string) => {
|
||||
if (name === 'img') {
|
||||
imageCount++;
|
||||
} else if (['meta'].includes(name)) {
|
||||
// We allow these tags since they don't print anything
|
||||
} else {
|
||||
nonImageFound = true;
|
||||
}
|
||||
},
|
||||
|
||||
ontext: (text: string) => {
|
||||
if (text.trim()) textFound = true;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
parser.write(html);
|
||||
parser.end();
|
||||
|
||||
return imageCount === 1 && !nonImageFound && !textFound;
|
||||
};
|
||||
|
||||
export default new HtmlUtils();
|
||||
|
@@ -33,7 +33,7 @@
|
||||
"@joplin/utils": "^2.13.3",
|
||||
"font-awesome-filetypes": "2.1.0",
|
||||
"fs-extra": "11.1.1",
|
||||
"highlight.js": "11.8.0",
|
||||
"highlight.js": "11.9.0",
|
||||
"html-entities": "1.4.0",
|
||||
"json-stringify-safe": "5.0.1",
|
||||
"katex": "0.16.9",
|
||||
|
@@ -5,7 +5,6 @@
|
||||
"**/*.tsx",
|
||||
],
|
||||
"exclude": [
|
||||
"**/node_modules",
|
||||
"**/*.test.ts",
|
||||
"**/node_modules"
|
||||
],
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@joplin/server",
|
||||
"version": "2.13.4",
|
||||
"version": "2.13.5",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start-dev": "yarn run build && JOPLIN_IS_TESTING=1 nodemon --config nodemon.json --ext ts,js,mustache,css,tsx dist/app.js --env dev",
|
||||
@@ -40,7 +40,7 @@
|
||||
"jquery": "3.7.1",
|
||||
"knex": "2.5.1",
|
||||
"koa": "2.14.2",
|
||||
"ldapts": "7.0.5",
|
||||
"ldapts": "7.0.6",
|
||||
"markdown-it": "13.0.2",
|
||||
"mustache": "4.2.0",
|
||||
"nanoid": "2.1.11",
|
||||
|
@@ -178,6 +178,14 @@ describe('ChangeModel', () => {
|
||||
expect(changeCount).toBe(SqliteMaxVariableNum);
|
||||
});
|
||||
|
||||
test('should tell if there are more changes', async () => {
|
||||
const { user } = await createUserAndSession(1, true);
|
||||
await models().item().makeTestItems(user.id, 500);
|
||||
|
||||
const result = await models().change().delta(user.id, { limit: 100 });
|
||||
expect(result.has_more).toBe(true);
|
||||
});
|
||||
|
||||
test('should delete old changes', async () => {
|
||||
// Create the following events:
|
||||
//
|
||||
|
@@ -139,8 +139,6 @@ export default class ChangeModel extends BaseModel<Change> {
|
||||
// as the `changes` table grew. So it is now split into two queries
|
||||
// merged by a UNION ALL.
|
||||
|
||||
const subQueryLimit = Math.ceil(limit / 2);
|
||||
|
||||
const fields = [
|
||||
'id',
|
||||
'item_id',
|
||||
@@ -169,7 +167,7 @@ export default class ChangeModel extends BaseModel<Change> {
|
||||
userId,
|
||||
];
|
||||
|
||||
if (!doCountQuery) subParams1.push(subQueryLimit);
|
||||
if (!doCountQuery) subParams1.push(limit);
|
||||
|
||||
const subQuery2 = `
|
||||
SELECT ${fieldsSql}
|
||||
@@ -187,7 +185,7 @@ export default class ChangeModel extends BaseModel<Change> {
|
||||
userId,
|
||||
];
|
||||
|
||||
if (!doCountQuery) subParams2.push(subQueryLimit);
|
||||
if (!doCountQuery) subParams2.push(limit);
|
||||
|
||||
let query: Knex.Raw<any> = null;
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
{"processedReleases":{"v2.13.1":true,"v2.13.2":true,"v2.13.3":true,"v2.13.4":true,"v2.13.5":true}}
|
||||
{"processedReleases":{"v2.13.1":true,"v2.13.2":true,"v2.13.3":true,"v2.13.4":true,"v2.13.5":true,"v2.13.6":true}}
|
@@ -1,5 +1,16 @@
|
||||
# Joplin Desktop Changelog
|
||||
|
||||
## [v2.13.6](https://github.com/laurent22/joplin/releases/tag/v2.13.6) (Pre-release) - 2023-11-17T19:24:03Z
|
||||
|
||||
- Improved: Improve toolbar button wrapping on RTE ([ccf1c8e](https://github.com/laurent22/joplin/commit/ccf1c8e))
|
||||
- Improved: Install script: Work around unprivileged user namespace restrictions by adding the --no-sandbox flag to the launcher ([#9137](https://github.com/laurent22/joplin/issues/9137)) ([#9136](https://github.com/laurent22/joplin/issues/9136) by Henry Heino)
|
||||
- Improved: Make settings tabs focusable by keyboard ([#9253](https://github.com/laurent22/joplin/issues/9253)) ([#9250](https://github.com/laurent22/joplin/issues/9250) by Henry Heino)
|
||||
- Improved: Preserve nested tables in RTE ([#9293](https://github.com/laurent22/joplin/issues/9293))
|
||||
- Improved: Updated packages mermaid (v10.5.1), sass (v1.69.5)
|
||||
- Fixed: Fixed import error report ([6211606](https://github.com/laurent22/joplin/commit/6211606))
|
||||
- Fixed: Import of inter-linked md files has incorrect notebook structure ([#9269](https://github.com/laurent22/joplin/issues/9269)) ([#9151](https://github.com/laurent22/joplin/issues/9151) by [@pedr](https://github.com/pedr))
|
||||
- Fixed: Work around WebDAV sync issues over ipv6 ([#9286](https://github.com/laurent22/joplin/issues/9286)) ([#8788](https://github.com/laurent22/joplin/issues/8788) by Henry Heino)
|
||||
|
||||
## [v2.13.5](https://github.com/laurent22/joplin/releases/tag/v2.13.5) (Pre-release) - 2023-11-09T20:24:09Z
|
||||
|
||||
- New: Plugins: Add support for getting plugin settings from a Markdown renderer ([8be22ed](https://github.com/laurent22/joplin/commit/8be22ed))
|
||||
|
@@ -1,5 +1,12 @@
|
||||
# Joplin Server Changelog
|
||||
|
||||
## [server-v2.13.5](https://github.com/laurent22/joplin/releases/tag/server-v2.13.5) - 2023-11-19T09:33:53Z
|
||||
|
||||
- Improved: Increase number of items that are returned during sync (767bf9f)
|
||||
- Improved: Updated packages highlight.js (v11.9.0), ldapts (v7.0.6), sass (v1.69.5)
|
||||
- Fixed: Fix severe performance issue for certain delta calls (f698068)
|
||||
- Fixed: Fixed issue with sync not immediately returning all items in certain cases (87aeffa)
|
||||
|
||||
## [server-v2.13.4](https://github.com/laurent22/joplin/releases/tag/server-v2.13.4) - 2023-11-15T15:30:19Z
|
||||
|
||||
- New: Added LDAP authentication (#9150 by Marco Rombach)
|
||||
|
221
yarn.lock
221
yarn.lock
@@ -5696,6 +5696,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@gar/promisify@npm:^1.1.3":
|
||||
version: 1.1.3
|
||||
resolution: "@gar/promisify@npm:1.1.3"
|
||||
checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@github/browserslist-config@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "@github/browserslist-config@npm:1.0.0"
|
||||
@@ -6234,7 +6241,7 @@ __metadata:
|
||||
fs-extra: 11.1.1
|
||||
glob: 10.3.10
|
||||
gulp: 4.0.2
|
||||
highlight.js: 11.8.0
|
||||
highlight.js: 11.9.0
|
||||
immer: 7.0.15
|
||||
jest: 29.7.0
|
||||
jest-environment-jsdom: 29.7.0
|
||||
@@ -6374,7 +6381,7 @@ __metadata:
|
||||
tar-stream: 3.1.6
|
||||
timers: 0.1.1
|
||||
ts-jest: 29.1.1
|
||||
ts-loader: 9.4.4
|
||||
ts-loader: 9.5.0
|
||||
ts-node: 10.9.1
|
||||
typescript: 5.2.2
|
||||
uglify-js: 3.17.4
|
||||
@@ -6596,7 +6603,7 @@ __metadata:
|
||||
style-loader: 3.3.3
|
||||
styled-components: 5.3.11
|
||||
ts-jest: 29.1.1
|
||||
ts-loader: 9.4.4
|
||||
ts-loader: 9.5.0
|
||||
typescript: 5.2.2
|
||||
webpack: 5.74.0
|
||||
webpack-cli: 4.10.0
|
||||
@@ -6670,7 +6677,7 @@ __metadata:
|
||||
"@types/node": 18.18.7
|
||||
font-awesome-filetypes: 2.1.0
|
||||
fs-extra: 11.1.1
|
||||
highlight.js: 11.8.0
|
||||
highlight.js: 11.9.0
|
||||
html-entities: 1.4.0
|
||||
jest: 29.7.0
|
||||
jest-environment-jsdom: 29.7.0
|
||||
@@ -6736,7 +6743,7 @@ __metadata:
|
||||
jsdom: 22.1.0
|
||||
knex: 2.5.1
|
||||
koa: 2.14.2
|
||||
ldapts: 7.0.5
|
||||
ldapts: 7.0.6
|
||||
markdown-it: 13.0.2
|
||||
mustache: 4.2.0
|
||||
nanoid: 2.1.11
|
||||
@@ -8095,6 +8102,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/fs@npm:^2.1.0":
|
||||
version: 2.1.2
|
||||
resolution: "@npmcli/fs@npm:2.1.2"
|
||||
dependencies:
|
||||
"@gar/promisify": ^1.1.3
|
||||
semver: ^7.3.5
|
||||
checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/fs@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "@npmcli/fs@npm:3.1.0"
|
||||
@@ -8142,6 +8159,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/move-file@npm:^2.0.0":
|
||||
version: 2.0.1
|
||||
resolution: "@npmcli/move-file@npm:2.0.1"
|
||||
dependencies:
|
||||
mkdirp: ^1.0.4
|
||||
rimraf: ^3.0.2
|
||||
checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/node-gyp@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "@npmcli/node-gyp@npm:3.0.0"
|
||||
@@ -9770,12 +9797,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/asn1@npm:>=0.2.1":
|
||||
version: 0.2.2
|
||||
resolution: "@types/asn1@npm:0.2.2"
|
||||
"@types/asn1@npm:>=0.2.2":
|
||||
version: 0.2.3
|
||||
resolution: "@types/asn1@npm:0.2.3"
|
||||
dependencies:
|
||||
"@types/node": "*"
|
||||
checksum: cd64dab0a214a88360995adf86f307565bf13f14d27552590cbb8cefea30585d65385be831b644fee790654bf7d29eae6ed07ba1db0bed59075aac4fb0b8b63d
|
||||
checksum: c5debd9088d664e71d87816d15a3dcd1d200ffd36b22fc82d0a0f53fba4b7a35f83e1ad1142abfb8052e47a9e516e14d4256341a11415f8b67cfb032f01a08a1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -10448,15 +10475,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:>=18":
|
||||
version: 20.8.9
|
||||
resolution: "@types/node@npm:20.8.9"
|
||||
dependencies:
|
||||
undici-types: ~5.26.4
|
||||
checksum: 0c05f3502a9507ff27e91dd6fd574fa6f391b3fafedcfe8e0c8d33351fb22d02c0121f854e5b6b3ecb9a8a468407ddf6e7ac0029fb236d4c7e1361ffc758a01f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^17.0.5":
|
||||
version: 17.0.45
|
||||
resolution: "@types/node@npm:17.0.45"
|
||||
@@ -14370,6 +14388,32 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacache@npm:^16.1.0":
|
||||
version: 16.1.3
|
||||
resolution: "cacache@npm:16.1.3"
|
||||
dependencies:
|
||||
"@npmcli/fs": ^2.1.0
|
||||
"@npmcli/move-file": ^2.0.0
|
||||
chownr: ^2.0.0
|
||||
fs-minipass: ^2.1.0
|
||||
glob: ^8.0.1
|
||||
infer-owner: ^1.0.4
|
||||
lru-cache: ^7.7.1
|
||||
minipass: ^3.1.6
|
||||
minipass-collect: ^1.0.2
|
||||
minipass-flush: ^1.0.5
|
||||
minipass-pipeline: ^1.2.4
|
||||
mkdirp: ^1.0.4
|
||||
p-map: ^4.0.0
|
||||
promise-inflight: ^1.0.1
|
||||
rimraf: ^3.0.2
|
||||
ssri: ^9.0.0
|
||||
tar: ^6.1.11
|
||||
unique-filename: ^2.0.0
|
||||
checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacache@npm:^17.0.0":
|
||||
version: 17.1.3
|
||||
resolution: "cacache@npm:17.1.3"
|
||||
@@ -21533,7 +21577,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fs-minipass@npm:^2.0.0":
|
||||
"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "fs-minipass@npm:2.1.0"
|
||||
dependencies:
|
||||
@@ -22287,6 +22331,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob@npm:^8.0.1":
|
||||
version: 8.1.0
|
||||
resolution: "glob@npm:8.1.0"
|
||||
dependencies:
|
||||
fs.realpath: ^1.0.0
|
||||
inflight: ^1.0.4
|
||||
inherits: 2
|
||||
minimatch: ^5.0.1
|
||||
once: ^1.3.0
|
||||
checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob@npm:^8.0.3":
|
||||
version: 8.0.3
|
||||
resolution: "glob@npm:8.0.3"
|
||||
@@ -23072,10 +23129,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"highlight.js@npm:11.8.0":
|
||||
version: 11.8.0
|
||||
resolution: "highlight.js@npm:11.8.0"
|
||||
checksum: d2578a57aee7315946ff19379053fd0a28b127baabf7617ab1d28d62cdc4eaf3d75053569cb8479a5afdc7a68f1ba9a6c1d612d8ae399b4b9aa43093b4fb6831
|
||||
"highlight.js@npm:11.9.0":
|
||||
version: 11.9.0
|
||||
resolution: "highlight.js@npm:11.9.0"
|
||||
checksum: 4043d31c5de9d27d13387d9a9e5e1939557254b7b85f0fab85d9cae0e420e131a3456ebf6148552020a1d8a216d671d583f2433d6c4de6179b8a66487a8325cb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -27161,18 +27218,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ldapts@npm:7.0.5":
|
||||
version: 7.0.5
|
||||
resolution: "ldapts@npm:7.0.5"
|
||||
"ldapts@npm:7.0.6":
|
||||
version: 7.0.6
|
||||
resolution: "ldapts@npm:7.0.6"
|
||||
dependencies:
|
||||
"@types/asn1": ">=0.2.1"
|
||||
"@types/node": ">=18"
|
||||
"@types/asn1": ">=0.2.2"
|
||||
"@types/uuid": ">=9"
|
||||
asn1: ~0.2.6
|
||||
debug: ~4.3.4
|
||||
strict-event-emitter-types: ~2.0.0
|
||||
uuid: ~9.0.1
|
||||
checksum: 063a84b6ed2ce55f1eeff374da0a5b7f12431e2c54e03bcb35fe1a5eecb6bdf6e95130b80ab28ea6b36db09a442e3e07c4e04e9bb827276e1cc1f5269597a828
|
||||
checksum: 43ca9b4924459154b3692147dbe140274e164c1dc34a31692c23b742541a97ba0fe42a52193854ee0aa6f5fd9dcdaa70bc39fc16a617768ea1a260fa2ff49cb3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -27957,6 +28013,30 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-fetch-happen@npm:^10.0.3":
|
||||
version: 10.2.1
|
||||
resolution: "make-fetch-happen@npm:10.2.1"
|
||||
dependencies:
|
||||
agentkeepalive: ^4.2.1
|
||||
cacache: ^16.1.0
|
||||
http-cache-semantics: ^4.1.0
|
||||
http-proxy-agent: ^5.0.0
|
||||
https-proxy-agent: ^5.0.0
|
||||
is-lambda: ^1.0.1
|
||||
lru-cache: ^7.7.1
|
||||
minipass: ^3.1.6
|
||||
minipass-collect: ^1.0.2
|
||||
minipass-fetch: ^2.0.3
|
||||
minipass-flush: ^1.0.5
|
||||
minipass-pipeline: ^1.2.4
|
||||
negotiator: ^0.6.3
|
||||
promise-retry: ^2.0.1
|
||||
socks-proxy-agent: ^7.0.0
|
||||
ssri: ^9.0.0
|
||||
checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.0.3, make-fetch-happen@npm:^11.1.1":
|
||||
version: 11.1.1
|
||||
resolution: "make-fetch-happen@npm:11.1.1"
|
||||
@@ -29737,6 +29817,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minipass-fetch@npm:^2.0.3":
|
||||
version: 2.1.2
|
||||
resolution: "minipass-fetch@npm:2.1.2"
|
||||
dependencies:
|
||||
encoding: ^0.1.13
|
||||
minipass: ^3.1.6
|
||||
minipass-sized: ^1.0.3
|
||||
minizlib: ^2.1.2
|
||||
dependenciesMeta:
|
||||
encoding:
|
||||
optional: true
|
||||
checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minipass-fetch@npm:^3.0.0":
|
||||
version: 3.0.3
|
||||
resolution: "minipass-fetch@npm:3.0.3"
|
||||
@@ -30548,7 +30643,28 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-gyp@npm:9.4.0, node-gyp@npm:^9.0.0, node-gyp@npm:latest":
|
||||
"node-gyp@npm:9.4.1":
|
||||
version: 9.4.1
|
||||
resolution: "node-gyp@npm:9.4.1"
|
||||
dependencies:
|
||||
env-paths: ^2.2.0
|
||||
exponential-backoff: ^3.1.1
|
||||
glob: ^7.1.4
|
||||
graceful-fs: ^4.2.6
|
||||
make-fetch-happen: ^10.0.3
|
||||
nopt: ^6.0.0
|
||||
npmlog: ^6.0.0
|
||||
rimraf: ^3.0.2
|
||||
semver: ^7.3.5
|
||||
tar: ^6.1.2
|
||||
which: ^2.0.2
|
||||
bin:
|
||||
node-gyp: bin/node-gyp.js
|
||||
checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-gyp@npm:^9.0.0, node-gyp@npm:latest":
|
||||
version: 9.4.0
|
||||
resolution: "node-gyp@npm:9.4.0"
|
||||
dependencies:
|
||||
@@ -36581,7 +36697,7 @@ __metadata:
|
||||
lerna: 3.22.1
|
||||
lint-staged: 14.0.1
|
||||
madge: 6.1.0
|
||||
node-gyp: 9.4.0
|
||||
node-gyp: 9.4.1
|
||||
nodemon: 3.0.1
|
||||
npm-package-json-lint: 7.0.0
|
||||
typescript: 5.2.2
|
||||
@@ -37967,6 +38083,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"source-map@npm:^0.7.4":
|
||||
version: 0.7.4
|
||||
resolution: "source-map@npm:0.7.4"
|
||||
checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"space-separated-tokens@npm:^1.0.0":
|
||||
version: 1.1.5
|
||||
resolution: "space-separated-tokens@npm:1.1.5"
|
||||
@@ -38209,6 +38332,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ssri@npm:^9.0.0":
|
||||
version: 9.0.1
|
||||
resolution: "ssri@npm:9.0.1"
|
||||
dependencies:
|
||||
minipass: ^3.1.1
|
||||
checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"stable@npm:^0.1.8":
|
||||
version: 0.1.8
|
||||
resolution: "stable@npm:0.1.8"
|
||||
@@ -40238,18 +40370,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ts-loader@npm:9.4.4":
|
||||
version: 9.4.4
|
||||
resolution: "ts-loader@npm:9.4.4"
|
||||
"ts-loader@npm:9.5.0":
|
||||
version: 9.5.0
|
||||
resolution: "ts-loader@npm:9.5.0"
|
||||
dependencies:
|
||||
chalk: ^4.1.0
|
||||
enhanced-resolve: ^5.0.0
|
||||
micromatch: ^4.0.0
|
||||
semver: ^7.3.4
|
||||
source-map: ^0.7.4
|
||||
peerDependencies:
|
||||
typescript: "*"
|
||||
webpack: ^5.0.0
|
||||
checksum: 8e5e6b839b0edfa40d2156c880d88ccab58226894ea5978221bc48c7db3215e2e856bfd0093f148e925a2befc42d6c94cafa9a994a7da274541efaa916012b63
|
||||
checksum: a319575faa07145917a7050ac6be7e7f8d97745c6b6ecf8097ac51cebd2d459e8f8b2519d0c39066a065f4d73ae331d2aba9de3d62ea38bc59fd84395794d428
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -41082,6 +41215,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unique-filename@npm:^2.0.0":
|
||||
version: 2.0.1
|
||||
resolution: "unique-filename@npm:2.0.1"
|
||||
dependencies:
|
||||
unique-slug: ^3.0.0
|
||||
checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unique-filename@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "unique-filename@npm:3.0.0"
|
||||
@@ -41100,6 +41242,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unique-slug@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "unique-slug@npm:3.0.0"
|
||||
dependencies:
|
||||
imurmurhash: ^0.1.4
|
||||
checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unique-slug@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "unique-slug@npm:4.0.0"
|
||||
|
Reference in New Issue
Block a user