1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Tools: Linter: Enforce object-curly-spacing - always

This commit is contained in:
Laurent Cozic 2020-02-04 22:09:34 +00:00
parent 49701fbc55
commit 737c3f62db
36 changed files with 88 additions and 87 deletions

View File

@ -68,6 +68,7 @@ module.exports = {
"linebreak-style": ["error", "unix"], "linebreak-style": ["error", "unix"],
"prefer-template": ["error"], "prefer-template": ["error"],
"template-curly-spacing": ["error", "never"], "template-curly-spacing": ["error", "never"],
"object-curly-spacing": ["error", "always"],
"key-spacing": ["error", { "key-spacing": ["error", {
"beforeColon": false, "beforeColon": false,
"afterColon": true, "afterColon": true,

View File

@ -25,7 +25,7 @@ class Command extends BaseCommand {
info: stdoutFn, info: stdoutFn,
warn: stdoutFn, warn: stdoutFn,
error: stdoutFn, error: stdoutFn,
}}); } });
ClipperServer.instance().setDispatch(() => {}); ClipperServer.instance().setDispatch(() => {});
ClipperServer.instance().setLogger(clipperLogger); ClipperServer.instance().setLogger(clipperLogger);

View File

@ -90,13 +90,13 @@ describe('models_Note', function() {
})); }));
it('should serialize and unserialize without modifying data', asyncTest(async () => { it('should serialize and unserialize without modifying data', asyncTest(async () => {
let folder1 = await Folder.save({ title: 'folder1'}); let folder1 = await Folder.save({ title: 'folder1' });
const testCases = [ const testCases = [
[ {title: '', body: 'Body and no title\nSecond line\nThird Line', parent_id: folder1.id}, [ { title: '', body: 'Body and no title\nSecond line\nThird Line', parent_id: folder1.id },
'', 'Body and no title\nSecond line\nThird Line'], '', 'Body and no title\nSecond line\nThird Line'],
[ {title: 'Note title', body: 'Body and title', parent_id: folder1.id}, [ { title: 'Note title', body: 'Body and title', parent_id: folder1.id },
'Note title', 'Body and title'], 'Note title', 'Body and title'],
[ {title: 'Title and no body', body: '', parent_id: folder1.id}, [ { title: 'Title and no body', body: '', parent_id: folder1.id },
'Title and no body', ''], 'Title and no body', ''],
]; ];

View File

@ -86,7 +86,7 @@ describe('models_Tag', function() {
let folder1 = await Folder.save({ title: 'folder1' }); let folder1 = await Folder.save({ title: 'folder1' });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id }); let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
let note2 = await Note.save({ title: 'ma 2nd note', parent_id: folder1.id }); let note2 = await Note.save({ title: 'ma 2nd note', parent_id: folder1.id });
let tag = await Tag.save({ title: 'mytag'}); let tag = await Tag.save({ title: 'mytag' });
await Tag.addNote(tag.id, note1.id); await Tag.addNote(tag.id, note1.id);
let tagWithCount = await Tag.loadWithCount(tag.id); let tagWithCount = await Tag.loadWithCount(tag.id);

View File

@ -1,11 +1,11 @@
/* eslint-disable no-unused-vars */ /* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname); require('app-module-path').addPath(__dirname);
const {setupDatabaseAndSynchronizer, switchClient, asyncTest } = require('test-utils.js'); const { setupDatabaseAndSynchronizer, switchClient, asyncTest } = require('test-utils.js');
const Folder = require('lib/models/Folder.js'); const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js'); const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js'); const Tag = require('lib/models/Tag.js');
const { reducer, defaultState, stateUtils} = require('lib/reducer.js'); const { reducer, defaultState, stateUtils } = require('lib/reducer.js');
async function createNTestFolders(n) { async function createNTestFolders(n) {
let folders = []; let folders = [];
@ -64,7 +64,7 @@ function initTestState(folders, selectedFolderIndex, notes, selectedIndexes, tag
} }
function createExpectedState(items, keepIndexes, selectedIndexes) { function createExpectedState(items, keepIndexes, selectedIndexes) {
let expected = { items: [], selectedIds: []}; let expected = { items: [], selectedIds: [] };
for (let i = 0; i < selectedIndexes.length; i++) { for (let i = 0; i < selectedIndexes.length; i++) {
expected.selectedIds.push(items[selectedIndexes[i]].id); expected.selectedIds.push(items[selectedIndexes[i]].id);
@ -111,7 +111,7 @@ describe('Reducer', function() {
// test action // test action
// delete the third note // delete the third note
state = reducer(state, {type: 'NOTE_DELETE', id: notes[2].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[2].id });
// expect that the third note is missing, and the 4th note is now selected // expect that the third note is missing, and the 4th note is now selected
let expected = createExpectedState(notes, [0,1,3,4], [3]); let expected = createExpectedState(notes, [0,1,3,4], [3]);
@ -128,7 +128,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [1]); let state = initTestState(folders, 0, notes, [1]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[0].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[0].id });
let expected = createExpectedState(notes, [1,2,3,4], [1]); let expected = createExpectedState(notes, [1,2,3,4], [1]);
@ -142,7 +142,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [0]); let state = initTestState(folders, 0, notes, [0]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[0].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[0].id });
let expected = createExpectedState(notes, [], []); let expected = createExpectedState(notes, [], []);
@ -156,7 +156,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [4]); let state = initTestState(folders, 0, notes, [4]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[4].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[4].id });
let expected = createExpectedState(notes, [0,1,2,3], [3]); let expected = createExpectedState(notes, [0,1,2,3], [3]);
@ -170,7 +170,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [3]); let state = initTestState(folders, 0, notes, [3]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[1].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[1].id });
let expected = createExpectedState(notes, [0,2,3,4], [3]); let expected = createExpectedState(notes, [0,2,3,4], [3]);
@ -184,7 +184,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [1]); let state = initTestState(folders, 0, notes, [1]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[3].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[3].id });
let expected = createExpectedState(notes, [0,1,2,4], [1]); let expected = createExpectedState(notes, [0,1,2,4], [1]);
@ -198,8 +198,8 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [1,2]); let state = initTestState(folders, 0, notes, [1,2]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[1].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[1].id });
state = reducer(state, {type: 'NOTE_DELETE', id: notes[2].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[2].id });
let expected = createExpectedState(notes, [0,3,4], [3]); let expected = createExpectedState(notes, [0,3,4], [3]);
@ -213,7 +213,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [3,4]); let state = initTestState(folders, 0, notes, [3,4]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[1].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[1].id });
let expected = createExpectedState(notes, [0,2,3,4], [3,4]); let expected = createExpectedState(notes, [0,2,3,4], [3,4]);
@ -227,7 +227,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [1,2]); let state = initTestState(folders, 0, notes, [1,2]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[3].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[3].id });
let expected = createExpectedState(notes, [0,1,2,4], [1,2]); let expected = createExpectedState(notes, [0,1,2,4], [1,2]);
@ -241,8 +241,8 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [3,4]); let state = initTestState(folders, 0, notes, [3,4]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[3].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[3].id });
state = reducer(state, {type: 'NOTE_DELETE', id: notes[4].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[4].id });
let expected = createExpectedState(notes, [0,1,2], [2]); let expected = createExpectedState(notes, [0,1,2], [2]);
@ -256,9 +256,9 @@ describe('Reducer', function() {
let state = initTestState(folders, 0, notes, [0,2,4]); let state = initTestState(folders, 0, notes, [0,2,4]);
// test action // test action
state = reducer(state, {type: 'NOTE_DELETE', id: notes[0].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[0].id });
state = reducer(state, {type: 'NOTE_DELETE', id: notes[2].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[2].id });
state = reducer(state, {type: 'NOTE_DELETE', id: notes[4].id}); state = reducer(state, { type: 'NOTE_DELETE', id: notes[4].id });
let expected = createExpectedState(notes, [1,3], [1]); let expected = createExpectedState(notes, [1,3], [1]);
@ -273,7 +273,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 2, notes, [2]); let state = initTestState(folders, 2, notes, [2]);
// test action // test action
state = reducer(state, {type: 'FOLDER_DELETE', id: folders[2].id}); state = reducer(state, { type: 'FOLDER_DELETE', id: folders[2].id });
let expected = createExpectedState(folders, [0,1,3,4], [3]); let expected = createExpectedState(folders, [0,1,3,4], [3]);
@ -287,7 +287,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 1, notes, [2]); let state = initTestState(folders, 1, notes, [2]);
// test action // test action
state = reducer(state, {type: 'FOLDER_DELETE', id: folders[2].id}); state = reducer(state, { type: 'FOLDER_DELETE', id: folders[2].id });
let expected = createExpectedState(folders, [0,1,3,4], [1]); let expected = createExpectedState(folders, [0,1,3,4], [1]);
@ -301,7 +301,7 @@ describe('Reducer', function() {
let state = initTestState(folders, 4, notes, [2]); let state = initTestState(folders, 4, notes, [2]);
// test action // test action
state = reducer(state, {type: 'FOLDER_DELETE', id: folders[2].id}); state = reducer(state, { type: 'FOLDER_DELETE', id: folders[2].id });
let expected = createExpectedState(folders, [0,1,3,4], [4]); let expected = createExpectedState(folders, [0,1,3,4], [4]);
@ -315,7 +315,7 @@ describe('Reducer', function() {
let state = initTestState(null, null, null, null, tags, [2]); let state = initTestState(null, null, null, null, tags, [2]);
// test action // test action
state = reducer(state, {type: 'TAG_DELETE', id: tags[2].id}); state = reducer(state, { type: 'TAG_DELETE', id: tags[2].id });
let expected = createExpectedState(tags, [0,1,3,4], [3]); let expected = createExpectedState(tags, [0,1,3,4], [3]);
@ -328,7 +328,7 @@ describe('Reducer', function() {
let state = initTestState(null, null, null, null, tags, [2]); let state = initTestState(null, null, null, null, tags, [2]);
// test action // test action
state = reducer(state, {type: 'TAG_DELETE', id: tags[4].id}); state = reducer(state, { type: 'TAG_DELETE', id: tags[4].id });
let expected = createExpectedState(tags, [0,1,2,3], [2]); let expected = createExpectedState(tags, [0,1,2,3], [2]);
@ -341,7 +341,7 @@ describe('Reducer', function() {
let state = initTestState(null, null, null, null, tags, [2]); let state = initTestState(null, null, null, null, tags, [2]);
// test action // test action
state = reducer(state, {type: 'TAG_DELETE', id: tags[0].id}); state = reducer(state, { type: 'TAG_DELETE', id: tags[0].id });
let expected = createExpectedState(tags, [1,2,3,4], [2]); let expected = createExpectedState(tags, [1,2,3,4], [2]);
@ -365,7 +365,7 @@ describe('Reducer', function() {
expect(state.selectedNoteIds).toEqual(expected.selectedIds); expect(state.selectedNoteIds).toEqual(expected.selectedIds);
// test action // test action
state = reducer(state, {type: 'NOTE_SELECT_ALL'}); state = reducer(state, { type: 'NOTE_SELECT_ALL' });
expected = createExpectedState(notes.slice(0,3), [0,1,2], [0,1,2]); expected = createExpectedState(notes.slice(0,3), [0,1,2], [0,1,2]);
expect(getIds(state.notes)).toEqual(getIds(expected.items)); expect(getIds(state.notes)).toEqual(getIds(expected.items));

View File

@ -279,7 +279,7 @@ describe('services_rest_Api', function() {
const response = await api.route('GET', 'notes', { token: 'mytoken' }); const response = await api.route('GET', 'notes', { token: 'mytoken' });
expect(response.length).toBe(0); expect(response.length).toBe(0);
hasThrown = await checkThrowAsync(async () => await api.route('POST', 'notes', null, JSON.stringify({title: 'testing'}))); hasThrown = await checkThrowAsync(async () => await api.route('POST', 'notes', null, JSON.stringify({ title: 'testing' })));
expect(hasThrown).toBe(true); expect(hasThrown).toBe(true);
})); }));

View File

@ -189,10 +189,10 @@ class AppComponent extends Component {
} }
async loadContentScripts() { async loadContentScripts() {
await bridge().tabsExecuteScript({file: '/content_scripts/JSDOMParser.js'}); await bridge().tabsExecuteScript({ file: '/content_scripts/JSDOMParser.js' });
await bridge().tabsExecuteScript({file: '/content_scripts/Readability.js'}); await bridge().tabsExecuteScript({ file: '/content_scripts/Readability.js' });
await bridge().tabsExecuteScript({file: '/content_scripts/Readability-readerable.js'}); await bridge().tabsExecuteScript({ file: '/content_scripts/Readability-readerable.js' });
await bridge().tabsExecuteScript({file: '/content_scripts/index.js'}); await bridge().tabsExecuteScript({ file: '/content_scripts/index.js' });
} }
async componentDidMount() { async componentDidMount() {
@ -248,7 +248,7 @@ class AppComponent extends Component {
if (!this.state.contentScriptLoaded) { if (!this.state.contentScriptLoaded) {
let msg = 'Loading...'; let msg = 'Loading...';
if (this.state.contentScriptError) msg = `The Joplin extension is not available on this tab due to: ${this.state.contentScriptError}`; if (this.state.contentScriptError) msg = `The Joplin extension is not available on this tab due to: ${this.state.contentScriptError}`;
return <div style={{padding: 10, fontSize: 12, maxWidth: 200}}>{msg}</div>; return <div style={{ padding: 10, fontSize: 12, maxWidth: 200 }}>{msg}</div>;
} }
const warningComponent = !this.props.warning ? null : <div className="Warning">{ this.props.warning }</div>; const warningComponent = !this.props.warning ? null : <div className="Warning">{ this.props.warning }</div>;

View File

@ -99,7 +99,7 @@ class InteropServiceHelper {
if (module.target === 'file') { if (module.target === 'file') {
path = bridge().showSaveDialog({ path = bridge().showSaveDialog({
filters: [{ name: module.description, extensions: module.fileExtensions}], filters: [{ name: module.description, extensions: module.fileExtensions }],
}); });
} else { } else {
path = bridge().showOpenDialog({ path = bridge().showOpenDialog({

View File

@ -408,7 +408,7 @@ class Application extends BaseApplication {
if (moduleSource === 'file') { if (moduleSource === 'file') {
path = bridge().showOpenDialog({ path = bridge().showOpenDialog({
filters: [{ name: module.description, extensions: module.fileExtensions}], filters: [{ name: module.description, extensions: module.fileExtensions }],
}); });
} else { } else {
path = bridge().showOpenDialog({ path = bridge().showOpenDialog({

View File

@ -56,7 +56,7 @@ class Bridge {
} }
showSaveDialog(options) { showSaveDialog(options) {
const {dialog} = require('electron'); const { dialog } = require('electron');
if (!options) options = {}; if (!options) options = {};
if (!('defaultPath' in options) && this.lastSelectedPath_) options.defaultPath = this.lastSelectedPath_; if (!('defaultPath' in options) && this.lastSelectedPath_) options.defaultPath = this.lastSelectedPath_;
const filePath = dialog.showSaveDialogSync(this.window(), options); const filePath = dialog.showSaveDialogSync(this.window(), options);
@ -67,7 +67,7 @@ class Bridge {
} }
showOpenDialog(options) { showOpenDialog(options) {
const {dialog} = require('electron'); const { dialog } = require('electron');
if (!options) options = {}; if (!options) options = {};
if (!('defaultPath' in options) && this.lastSelectedPath_) options.defaultPath = this.lastSelectedPath_; if (!('defaultPath' in options) && this.lastSelectedPath_) options.defaultPath = this.lastSelectedPath_;
if (!('createDirectory' in options)) options.createDirectory = true; if (!('createDirectory' in options)) options.createDirectory = true;
@ -80,7 +80,7 @@ class Bridge {
// Don't use this directly - call one of the showXxxxxxxMessageBox() instead // Don't use this directly - call one of the showXxxxxxxMessageBox() instead
showMessageBox_(window, options) { showMessageBox_(window, options) {
const {dialog} = require('electron'); const { dialog } = require('electron');
if (!window) window = this.window(); if (!window) window = this.window();
return dialog.showMessageBoxSync(window, options); return dialog.showMessageBoxSync(window, options);
} }

View File

@ -21,8 +21,8 @@ let branch;
let hash; let hash;
try { try {
// Use stdio: 'pipe' so that execSync doesn't print error directly to stdout // Use stdio: 'pipe' so that execSync doesn't print error directly to stdout
branch = execSync('git rev-parse --abbrev-ref HEAD', {stdio: 'pipe' }).toString().trim(); branch = execSync('git rev-parse --abbrev-ref HEAD', { stdio: 'pipe' }).toString().trim();
hash = execSync('git log --pretty="%h" -1', {stdio: 'pipe' }).toString().trim(); hash = execSync('git log --pretty="%h" -1', { stdio: 'pipe' }).toString().trim();
} catch (err) { } catch (err) {
// Don't display error object as it's a "fatal" error, but // Don't display error object as it's a "fatal" error, but
// not for us, since is it not critical information // not for us, since is it not critical information

View File

@ -121,9 +121,9 @@ class ClipperConfigScreenComponent extends React.Component {
<div style={stepBoxStyle}> <div style={stepBoxStyle}>
<p style={theme.h1Style}>{_('Step 2: Install the extension')}</p> <p style={theme.h1Style}>{_('Step 2: Install the extension')}</p>
<p style={theme.textStyle}>{_('Download and install the relevant extension for your browser:')}</p> <p style={theme.textStyle}>{_('Download and install the relevant extension for your browser:')}</p>
<div style={{display: 'flex', flexDirection: 'row'}}> <div style={{ display: 'flex', flexDirection: 'row' }}>
<ExtensionBadge theme={this.props.theme} type="firefox" url="https://addons.mozilla.org/en-US/firefox/addon/joplin-web-clipper/"/> <ExtensionBadge theme={this.props.theme} type="firefox" url="https://addons.mozilla.org/en-US/firefox/addon/joplin-web-clipper/"/>
<ExtensionBadge style={{marginLeft: 10}} theme={this.props.theme} type="chrome" url="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek"/> <ExtensionBadge style={{ marginLeft: 10 }} theme={this.props.theme} type="chrome" url="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek"/>
</div> </div>
</div> </div>

View File

@ -212,7 +212,7 @@ class ConfigScreenComponent extends React.Component {
if (advancedSettingComps.length) { if (advancedSettingComps.length) {
const iconName = this.state.showAdvancedSettings ? 'fa fa-toggle-up' : 'fa fa-toggle-down'; const iconName = this.state.showAdvancedSettings ? 'fa fa-toggle-up' : 'fa fa-toggle-down';
const advancedSettingsButtonStyle = Object.assign({}, theme.buttonStyle, { marginBottom: 10 }); const advancedSettingsButtonStyle = Object.assign({}, theme.buttonStyle, { marginBottom: 10 });
advancedSettingsButton = <button onClick={() => shared.advancedSettingsButton_click(this)} style={advancedSettingsButtonStyle}><i style={{fontSize: 14}} className={iconName}></i> {_('Show Advanced Settings')}</button>; advancedSettingsButton = <button onClick={() => shared.advancedSettingsButton_click(this)} style={advancedSettingsButtonStyle}><i style={{ fontSize: 14 }} className={iconName}></i> {_('Show Advanced Settings')}</button>;
advancedSettingsSectionStyle.display = this.state.showAdvancedSettings ? 'block' : 'none'; advancedSettingsSectionStyle.display = this.state.showAdvancedSettings ? 'block' : 'none';
} }
@ -575,7 +575,7 @@ class ConfigScreenComponent extends React.Component {
borderTopColor: theme.dividerColor, borderTopColor: theme.dividerColor,
}; };
const screenComp = this.state.screenName ? <div style={{overflow: 'scroll', flex: 1}}>{this.screenFromName(this.state.screenName)}</div> : null; const screenComp = this.state.screenName ? <div style={{ overflow: 'scroll', flex: 1 }}>{this.screenFromName(this.state.screenName)}</div> : null;
if (screenComp) containerStyle.display = 'none'; if (screenComp) containerStyle.display = 'none';

View File

@ -152,7 +152,7 @@ class MainScreenComponent extends React.Component {
.sort((a, b) => { .sort((a, b) => {
// sensitivity accent will treat accented characters as differemt // sensitivity accent will treat accented characters as differemt
// but treats caps as equal // but treats caps as equal
return a.label.localeCompare(b.label, undefined, {sensitivity: 'accent'}); return a.label.localeCompare(b.label, undefined, { sensitivity: 'accent' });
}); });
const allTags = await Tag.allWithNotes(); const allTags = await Tag.allWithNotes();
const tagSuggestions = allTags.map(a => { const tagSuggestions = allTags.map(a => {

View File

@ -1117,7 +1117,7 @@ class NoteTextComponent extends React.Component {
if (command.name === 'exportPdf') { if (command.name === 'exportPdf') {
fn = this.commandSavePdf; fn = this.commandSavePdf;
args = {noteId: command.noteId}; args = { noteId: command.noteId };
} else if (command.name === 'print') { } else if (command.name === 'print') {
fn = this.commandPrint; fn = this.commandPrint;
} }

View File

@ -70,7 +70,7 @@ class OneDriveLoginScreenComponent extends React.Component {
return ( return (
<div> <div>
<Header style={headerStyle}/> <Header style={headerStyle}/>
<div style={{padding: 10}}> <div style={{ padding: 10 }}>
{logComps} {logComps}
</div> </div>
</div> </div>

View File

@ -62,9 +62,9 @@ class Dialog extends React.PureComponent {
this.styles_[this.props.theme] = { this.styles_[this.props.theme] = {
dialogBox: Object.assign({}, theme.dialogBox, { minWidth: '50%', maxWidth: '50%' }), dialogBox: Object.assign({}, theme.dialogBox, { minWidth: '50%', maxWidth: '50%' }),
input: Object.assign({}, theme.inputStyle, { flex: 1 }), input: Object.assign({}, theme.inputStyle, { flex: 1 }),
row: {overflow: 'hidden', height: itemHeight, display: 'flex', justifyContent: 'center', flexDirection: 'column', paddingLeft: 10, paddingRight: 10}, row: { overflow: 'hidden', height: itemHeight, display: 'flex', justifyContent: 'center', flexDirection: 'column', paddingLeft: 10, paddingRight: 10 },
help: Object.assign({}, theme.textStyle, { marginBottom: 10 }), help: Object.assign({}, theme.textStyle, { marginBottom: 10 }),
inputHelpWrapper: {display: 'flex', flexDirection: 'row', alignItems: 'center'}, inputHelpWrapper: { display: 'flex', flexDirection: 'row', alignItems: 'center' },
}; };
const rowTextStyle = { const rowTextStyle = {
@ -254,7 +254,7 @@ class Dialog extends React.PureComponent {
return ( return (
<div key={item.id} style={rowStyle} onClick={this.listItem_onClick} data-id={item.id} data-parent-id={item.parent_id}> <div key={item.id} style={rowStyle} onClick={this.listItem_onClick} data-id={item.id} data-parent-id={item.parent_id}>
<div style={style.rowTitle} dangerouslySetInnerHTML={{__html: titleHtml}}></div> <div style={style.rowTitle} dangerouslySetInnerHTML={{ __html: titleHtml }}></div>
{pathComp} {pathComp}
</div> </div>
); );

View File

@ -24,4 +24,4 @@ const injectCustomStyles = async cssFilePath => {
document.head.appendChild(styleTag); document.head.appendChild(styleTag);
}; };
module.exports = {loadCustomCss, injectCustomStyles}; module.exports = { loadCustomCss, injectCustomStyles };

View File

@ -3,7 +3,7 @@ const { shim } = require('lib/shim.js');
const JoplinError = require('lib/JoplinError'); const JoplinError = require('lib/JoplinError');
const { rtrimSlashes } = require('lib/path-utils.js'); const { rtrimSlashes } = require('lib/path-utils.js');
const base64 = require('base-64'); const base64 = require('base-64');
const {_ } = require('lib/locale'); const { _ } = require('lib/locale');
interface JoplinServerApiOptions { interface JoplinServerApiOptions {
username: Function, username: Function,

View File

@ -45,7 +45,7 @@ TemplateUtils.loadTemplates = async function(filePath) {
// Make sure templates are always in the same order // Make sure templates are always in the same order
// sensitivity ensures that the sort will ignore case // sensitivity ensures that the sort will ignore case
files.sort((a, b) => { return a.path.localeCompare(b.path, undefined, {sensitivity: 'accent'}); }); files.sort((a, b) => { return a.path.localeCompare(b.path, undefined, { sensitivity: 'accent' }); });
files.forEach(async file => { files.forEach(async file => {
if (file.path.endsWith('.md')) { if (file.path.endsWith('.md')) {

View File

@ -99,7 +99,7 @@ class CameraView extends Component {
return ( return (
<TouchableOpacity onPress={onPress} style={Object.assign({}, style)}> <TouchableOpacity onPress={onPress} style={Object.assign({}, style)}>
<View style={{borderRadius: 32, width: 60, height: 60, borderColor: '#00000040', borderWidth: 1, borderStyle: 'solid', backgroundColor: '#ffffff77', justifyContent: 'center', alignItems: 'center', alignSelf: 'baseline' }}> <View style={{ borderRadius: 32, width: 60, height: 60, borderColor: '#00000040', borderWidth: 1, borderStyle: 'solid', backgroundColor: '#ffffff77', justifyContent: 'center', alignItems: 'center', alignSelf: 'baseline' }}>
{ icon } { icon }
</View> </View>
</TouchableOpacity> </TouchableOpacity>
@ -152,7 +152,7 @@ class CameraView extends Component {
const displayRatios = shim.mobilePlatform() === 'android' && this.state.ratios.length > 1; const displayRatios = shim.mobilePlatform() === 'android' && this.state.ratios.length > 1;
const reverseCameraButton = this.renderButton(this.reverse_onPress, 'md-reverse-camera', { flex: 1, flexDirection: 'row', justifyContent: 'flex-start', marginLeft: 20 }); const reverseCameraButton = this.renderButton(this.reverse_onPress, 'md-reverse-camera', { flex: 1, flexDirection: 'row', justifyContent: 'flex-start', marginLeft: 20 });
const ratioButton = !displayRatios ? <View style={{ flex: 1 }}/> : this.renderButton(this.ratio_onPress, <Text style={{fontWeight: 'bold', fontSize: 20}}>{Setting.value('camera.ratio')}</Text>, { flex: 1, flexDirection: 'row', justifyContent: 'flex-end', marginRight: 20 }); const ratioButton = !displayRatios ? <View style={{ flex: 1 }}/> : this.renderButton(this.ratio_onPress, <Text style={{ fontWeight: 'bold', fontSize: 20 }}>{Setting.value('camera.ratio')}</Text>, { flex: 1, flexDirection: 'row', justifyContent: 'flex-end', marginRight: 20 });
let cameraRatio = '4:3'; let cameraRatio = '4:3';
const cameraProps = {}; const cameraProps = {};

View File

@ -170,7 +170,7 @@ class ScreenHeaderComponent extends React.PureComponent {
// Duplicate all selected notes. ensureUniqueTitle is set to true to use the // Duplicate all selected notes. ensureUniqueTitle is set to true to use the
// original note's name as a root for the new unique identifier. // original note's name as a root for the new unique identifier.
await Note.duplicateMultipleNotes(noteIds, {ensureUniqueTitle: true}); await Note.duplicateMultipleNotes(noteIds, { ensureUniqueTitle: true });
this.props.dispatch({ type: 'NOTE_SELECTION_END' }); this.props.dispatch({ type: 'NOTE_SELECTION_END' });
} }

View File

@ -443,7 +443,7 @@ class ConfigScreenComponent extends BaseScreenComponent {
const profileExportPrompt = ( const profileExportPrompt = (
<View style={this.styles().settingContainer}> <View style={this.styles().settingContainer}>
<Text style={this.styles().settingText}>Path:</Text> <Text style={this.styles().settingText}>Path:</Text>
<TextInput style={{marginRight: 20}} onChange={(event) => this.setState({profileExportPath: event.nativeEvent.text })} value={this.state.profileExportPath} placeholder="/path/to/sdcard"></TextInput> <TextInput style={{ marginRight: 20 }} onChange={(event) => this.setState({ profileExportPath: event.nativeEvent.text })} value={this.state.profileExportPath} placeholder="/path/to/sdcard"></TextInput>
<Button title="OK" onPress={this.exportProfileButtonPress2_}></Button> <Button title="OK" onPress={this.exportProfileButtonPress2_}></Button>
</View> </View>
); );

View File

@ -81,7 +81,7 @@ class SelectDateTimeDialog extends React.PureComponent {
width={0.9} width={0.9}
height={350} height={350}
> >
<View style={{flex: 1, margin: 20, alignItems: 'center'}}> <View style={{ flex: 1, margin: 20, alignItems: 'center' }}>
<DatePicker <DatePicker
date={this.state.date} date={this.state.date}
mode="datetime" mode="datetime"
@ -90,7 +90,7 @@ class SelectDateTimeDialog extends React.PureComponent {
confirmBtnText={_('Confirm')} confirmBtnText={_('Confirm')}
cancelBtnText={_('Cancel')} cancelBtnText={_('Cancel')}
onDateChange={(date) => { this.setState({ date: this.stringToDate(date) }); }} onDateChange={(date) => { this.setState({ date: this.stringToDate(date) }); }}
style={{width: 300}} style={{ width: 300 }}
customStyles={{ customStyles={{
btnConfirm: { btnConfirm: {
paddingVertical: 0, paddingVertical: 0,

View File

@ -11,7 +11,7 @@ function addResourceTag(lines, resource, attributes) {
const src = `:/${resource.id}`; const src = `:/${resource.id}`;
if (resourceUtils.isImageMimeType(resource.mime)) { if (resourceUtils.isImageMimeType(resource.mime)) {
lines.push(resourceUtils.imgElement({src, attributes})); lines.push(resourceUtils.imgElement({ src, attributes }));
} else if (resource.mime === 'audio/x-m4a') { } else if (resource.mime === 'audio/x-m4a') {
/** /**
* TODO: once https://github.com/laurent22/joplin/issues/1794 is resolved, * TODO: once https://github.com/laurent22/joplin/issues/1794 is resolved,
@ -162,9 +162,9 @@ async function enexXmlToHtml(xmlString, resources, options = {}) {
const beautifyHtml = (html) => { const beautifyHtml = (html) => {
return new Promise((resolve) => { return new Promise((resolve) => {
const options = {wrap: 0}; const options = { wrap: 0 };
cleanHtml.clean(html, options, (...cleanedHtml) => resolve(cleanedHtml)); cleanHtml.clean(html, options, (...cleanedHtml) => resolve(cleanedHtml));
}); });
}; };
module.exports = {enexXmlToHtml}; module.exports = { enexXmlToHtml };

View File

@ -1,5 +1,5 @@
const fs = require('fs-extra'); const fs = require('fs-extra');
const {dirname } = require('../pathUtils'); const { dirname } = require('../pathUtils');
const rootDir = dirname(__dirname); const rootDir = dirname(__dirname);
const assetsDir = `${rootDir}/assets`; const assetsDir = `${rootDir}/assets`;

View File

@ -345,8 +345,8 @@ class Setting extends BaseModel {
}, },
// Deprecated - use markdown.plugin.* // Deprecated - use markdown.plugin.*
'markdown.softbreaks': { value: false, type: Setting.TYPE_BOOL, public: false, appTypes: ['mobile', 'desktop']}, 'markdown.softbreaks': { value: false, type: Setting.TYPE_BOOL, public: false, appTypes: ['mobile', 'desktop'] },
'markdown.typographer': { value: false, type: Setting.TYPE_BOOL, public: false, appTypes: ['mobile', 'desktop']}, 'markdown.typographer': { value: false, type: Setting.TYPE_BOOL, public: false, appTypes: ['mobile', 'desktop'] },
// Deprecated // Deprecated
'markdown.plugin.softbreaks': { value: false, type: Setting.TYPE_BOOL, section: 'plugins', public: true, appTypes: ['mobile', 'desktop'], label: () => _('Enable soft breaks') }, 'markdown.plugin.softbreaks': { value: false, type: Setting.TYPE_BOOL, section: 'plugins', public: true, appTypes: ['mobile', 'desktop'], label: () => _('Enable soft breaks') },
@ -502,13 +502,13 @@ class Setting extends BaseModel {
'Tabloid': _('Tabloid'), 'Tabloid': _('Tabloid'),
'Legal': _('Legal'), 'Legal': _('Legal'),
}; };
}}, } },
'export.pdfPageOrientation': { value: 'portrait', type: Setting.TYPE_STRING, isEnum: true, public: true, appTypes: ['desktop'], label: () => _('Page orientation for PDF export'), options: () => { 'export.pdfPageOrientation': { value: 'portrait', type: Setting.TYPE_STRING, isEnum: true, public: true, appTypes: ['desktop'], label: () => _('Page orientation for PDF export'), options: () => {
return { return {
'portrait': _('Portrait'), 'portrait': _('Portrait'),
'landscape': _('Landscape'), 'landscape': _('Landscape'),
}; };
}}, } },
'net.customCertificates': { 'net.customCertificates': {

View File

@ -45,17 +45,17 @@ const attributesToStr = (attributes) =>
.map(([key, value]) => ` ${key}="${escapeQuotes(value)}"`) .map(([key, value]) => ` ${key}="${escapeQuotes(value)}"`)
.join(''); .join('');
const attachmentElement = ({src, attributes, id}) => const attachmentElement = ({ src, attributes, id }) =>
[ [
`<a href='joplin://${id}' ${attributesToStr(attributes)}>`, `<a href='joplin://${id}' ${attributesToStr(attributes)}>`,
` ${attributes.alt || src}`, ` ${attributes.alt || src}`,
'</a>', '</a>',
].join(''); ].join('');
const imgElement = ({src, attributes}) => const imgElement = ({ src, attributes }) =>
`<img src="${src}" ${attributesToStr(attributes)} />`; `<img src="${src}" ${attributesToStr(attributes)} />`;
const audioElement = ({src, alt, id}) => const audioElement = ({ src, alt, id }) =>
[ [
'<audio controls preload="none" style="width:480px;">', '<audio controls preload="none" style="width:480px;">',
` <source src="${src}" type="audio/mp4" />`, ` <source src="${src}" type="audio/mp4" />`,

View File

@ -196,7 +196,7 @@ class InteropService {
const ModuleClass = require(modulePath); const ModuleClass = require(modulePath);
const output = new ModuleClass(); const output = new ModuleClass();
const moduleMetadata = this.findModuleByFormat_(type, options.format, options.target); const moduleMetadata = this.findModuleByFormat_(type, options.format, options.target);
output.setMetadata({options, ...moduleMetadata}); // TODO: Check that this metadata is equivalent to module above output.setMetadata({ options, ...moduleMetadata }); // TODO: Check that this metadata is equivalent to module above
return output; return output;
} }

View File

@ -13,7 +13,7 @@ class InteropService_Importer_EnexToHtml extends InteropService_Importer_Base {
folder = await Folder.save({ title: folderTitle }); folder = await Folder.save({ title: folderTitle });
} }
await importEnex(folder.id, this.sourcePath_, {...this.options_, outputFormat: 'html'}); await importEnex(folder.id, this.sourcePath_, { ...this.options_, outputFormat: 'html' });
return result; return result;
} }

View File

@ -4,8 +4,8 @@ const Note = require('lib/models/Note.js');
const { basename, filename, rtrimSlashes, fileExtension, dirname } = require('lib/path-utils.js'); const { basename, filename, rtrimSlashes, fileExtension, dirname } = require('lib/path-utils.js');
const { shim } = require('lib/shim'); const { shim } = require('lib/shim');
const { _ } = require('lib/locale'); const { _ } = require('lib/locale');
const {extractImageUrls} = require('lib/markdownUtils'); const { extractImageUrls } = require('lib/markdownUtils');
const {unique} = require('lib/ArrayUtils'); const { unique } = require('lib/ArrayUtils');
const { pregQuote } = require('lib/string-utils-common'); const { pregQuote } = require('lib/string-utils-common');
class InteropService_Importer_Md extends InteropService_Importer_Base { class InteropService_Importer_Md extends InteropService_Importer_Base {

View File

@ -8,7 +8,7 @@
// console.disableYellowBox = true // console.disableYellowBox = true
import {YellowBox} from 'react-native'; import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings([ YellowBox.ignoreWarnings([
'Require cycle: node_modules/react-native-', 'Require cycle: node_modules/react-native-',
'Require cycle: node_modules/rn-fetch-blob', 'Require cycle: node_modules/rn-fetch-blob',

View File

@ -717,10 +717,10 @@ class AppComponent extends React.Component {
let menuPosition = 'left'; let menuPosition = 'left';
if (this.props.routeName === 'Note') { if (this.props.routeName === 'Note') {
sideMenuContent = <SafeAreaView style={{flex: 1, backgroundColor: theme.backgroundColor}}><SideMenuContentNote options={this.props.noteSideMenuOptions}/></SafeAreaView>; sideMenuContent = <SafeAreaView style={{ flex: 1, backgroundColor: theme.backgroundColor }}><SideMenuContentNote options={this.props.noteSideMenuOptions}/></SafeAreaView>;
menuPosition = 'right'; menuPosition = 'right';
} else { } else {
sideMenuContent = <SafeAreaView style={{flex: 1, backgroundColor: theme.backgroundColor}}><SideMenuContent/></SafeAreaView>; sideMenuContent = <SafeAreaView style={{ flex: 1, backgroundColor: theme.backgroundColor }}><SideMenuContent/></SafeAreaView>;
} }
const appNavInit = { const appNavInit = {
@ -750,12 +750,12 @@ class AppComponent extends React.Component {
}} }}
> >
<MenuContext style={{ flex: 1 }}> <MenuContext style={{ flex: 1 }}>
<SafeAreaView style={{flex: 0, backgroundColor: theme.raisedBackgroundColor}} /> <SafeAreaView style={{ flex: 0, backgroundColor: theme.raisedBackgroundColor }} />
<SafeAreaView style={{flex: 1, backgroundColor: theme.backgroundColor}}> <SafeAreaView style={{ flex: 1, backgroundColor: theme.backgroundColor }}>
<AppNav screens={appNavInit} /> <AppNav screens={appNavInit} />
</SafeAreaView> </SafeAreaView>
<DropdownAlert ref={ref => this.dropdownAlert_ = ref} tapToCloseEnabled={true} /> <DropdownAlert ref={ref => this.dropdownAlert_ = ref} tapToCloseEnabled={true} />
<Animated.View pointerEvents='none' style={{position: 'absolute', backgroundColor: 'black', opacity: this.state.sideMenuContentOpacity, width: '100%', height: '100%'}}/> <Animated.View pointerEvents='none' style={{ position: 'absolute', backgroundColor: 'black', opacity: this.state.sideMenuContentOpacity, width: '100%', height: '100%' }}/>
</MenuContext> </MenuContext>
</SideMenu> </SideMenu>
); );

View File

@ -25,7 +25,7 @@ toolUtils.execCommandWithPipes = function(executable, args) {
var spawn = require('child_process').spawn; var spawn = require('child_process').spawn;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const child = spawn(executable, args, { stdio: 'inherit'}); const child = spawn(executable, args, { stdio: 'inherit' });
child.on('error', (error) => { child.on('error', (error) => {
reject(error); reject(error);

View File

@ -12,7 +12,7 @@ async function gitHubContributors(page) {
request.get({ request.get({
url: `https://api.github.com/repos/laurent22/joplin/contributors${page ? `?page=${page}` : ''}`, url: `https://api.github.com/repos/laurent22/joplin/contributors${page ? `?page=${page}` : ''}`,
json: true, json: true,
headers: {'User-Agent': 'Joplin Readme Updater'}, headers: { 'User-Agent': 'Joplin Readme Updater' },
}, (error, response, data) => { }, (error, response, data) => {
if (error) { if (error) {
reject(error); reject(error);

View File

@ -22,7 +22,7 @@ async function gitHubLatestRelease() {
request.get({ request.get({
url: url, url: url,
json: true, json: true,
headers: {'User-Agent': 'Joplin Readme Updater'}, headers: { 'User-Agent': 'Joplin Readme Updater' },
}, (error, response, data) => { }, (error, response, data) => {
if (error) { if (error) {
reject(error); reject(error);