mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-15 09:04:04 +02:00
3d8577a689
- For now, supports Markdown-it plugins - Also fixed slow rendering of notes in some cases - Simplified how Markdown-It plugins are created and cleaned MdToHtml code commit89576de289
Merge:c75aa21f
5292fc14
Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:23:00 2020 +0100 Merge branch 'release-1.3' into plugin_content_scripts commitc75aa21ffd
Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:19:52 2020 +0100 Fixed tests commit075187729d
Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:11:53 2020 +0100 Fixed tests commit14696b8c65
Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 23:27:58 2020 +0100 Fixed slow rendering of note commit61c09f5bf8
Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 22:35:21 2020 +0100 Clean up commit9f7ea7d865
Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 20:05:31 2020 +0100 Updated doc commit98bf3bde8d
Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 19:56:34 2020 +0100 Finished converting plugins commitfe90d92e01
Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 17:52:02 2020 +0100 Simplified how Markdown-It plugins are created commit47c7b864cb
Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 16:40:11 2020 +0100 Clean up rules commitd927a238bb
Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:29:40 2020 +0100 Fixed tests commit388a56c5dd
Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:00:47 2020 +0100 Add support for content scripts
128 lines
3.4 KiB
JavaScript
128 lines
3.4 KiB
JavaScript
const React = require('react');
|
|
const { connect } = require('react-redux');
|
|
const Folder = require('lib/models/Folder.js');
|
|
const { themeStyle } = require('lib/theme');
|
|
const { _ } = require('lib/locale');
|
|
const { filename, basename } = require('lib/path-utils');
|
|
const { importEnex } = require('lib/import-enex');
|
|
|
|
class ImportScreenComponent extends React.Component {
|
|
UNSAFE_componentWillMount() {
|
|
this.setState({
|
|
doImport: true,
|
|
filePath: this.props.filePath,
|
|
messages: [],
|
|
});
|
|
}
|
|
|
|
UNSAFE_componentWillReceiveProps(newProps) {
|
|
if (newProps.filePath) {
|
|
this.setState(
|
|
{
|
|
doImport: true,
|
|
filePath: newProps.filePath,
|
|
messages: [],
|
|
},
|
|
() => {
|
|
this.doImport();
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
componentDidMount() {
|
|
if (this.state.filePath && this.state.doImport) {
|
|
this.doImport();
|
|
}
|
|
}
|
|
|
|
addMessage(key, text) {
|
|
const messages = this.state.messages.slice();
|
|
|
|
messages.push({ key: key, text: text });
|
|
|
|
this.setState({ messages: messages });
|
|
}
|
|
|
|
uniqueMessages() {
|
|
const output = [];
|
|
const messages = this.state.messages.slice();
|
|
const foundKeys = [];
|
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
const msg = messages[i];
|
|
if (foundKeys.indexOf(msg.key) >= 0) continue;
|
|
foundKeys.push(msg.key);
|
|
output.unshift(msg);
|
|
}
|
|
return output;
|
|
}
|
|
|
|
async doImport() {
|
|
const filePath = this.props.filePath;
|
|
const folderTitle = await Folder.findUniqueItemTitle(filename(filePath));
|
|
|
|
this.addMessage('start', _('New notebook "%s" will be created and file "%s" will be imported into it', folderTitle, basename(filePath)));
|
|
|
|
let lastProgress = '';
|
|
|
|
const options = {
|
|
onProgress: progressState => {
|
|
const line = [];
|
|
line.push(_('Found: %d.', progressState.loaded));
|
|
line.push(_('Created: %d.', progressState.created));
|
|
if (progressState.updated) line.push(_('Updated: %d.', progressState.updated));
|
|
if (progressState.skipped) line.push(_('Skipped: %d.', progressState.skipped));
|
|
if (progressState.resourcesCreated) line.push(_('Resources: %d.', progressState.resourcesCreated));
|
|
if (progressState.notesTagged) line.push(_('Tagged: %d.', progressState.notesTagged));
|
|
lastProgress = line.join(' ');
|
|
this.addMessage('progress', lastProgress);
|
|
},
|
|
onError: error => {
|
|
// Don't display the error directly because most of the time it doesn't matter
|
|
// (eg. for weird broken HTML, but the note is still imported)
|
|
console.warn('When importing ENEX file', error);
|
|
},
|
|
};
|
|
|
|
const folder = await Folder.save({ title: folderTitle });
|
|
|
|
await importEnex(folder.id, filePath, options);
|
|
|
|
this.addMessage('done', _('The notes have been imported: %s', lastProgress));
|
|
this.setState({ doImport: false });
|
|
}
|
|
|
|
render() {
|
|
const theme = themeStyle(this.props.themeId);
|
|
const messages = this.uniqueMessages();
|
|
|
|
const messagesStyle = {
|
|
padding: 10,
|
|
fontSize: theme.fontSize,
|
|
fontFamily: theme.fontFamily,
|
|
backgroundColor: theme.backgroundColor,
|
|
};
|
|
|
|
const messageComps = [];
|
|
for (let i = 0; i < messages.length; i++) {
|
|
messageComps.push(<div key={messages[i].key}>{messages[i].text}</div>);
|
|
}
|
|
|
|
return (
|
|
<div style={{}}>
|
|
<div style={messagesStyle}>{messageComps}</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
const mapStateToProps = state => {
|
|
return {
|
|
themeId: state.settings.theme,
|
|
};
|
|
};
|
|
|
|
const ImportScreen = connect(mapStateToProps)(ImportScreenComponent);
|
|
|
|
module.exports = { ImportScreen };
|