From 0a9ad7d7c02f4c6b88e4f88869e8c5b8e43d206e Mon Sep 17 00:00:00 2001
From: Johannes Klein <17345891+jtklein@users.noreply.github.com>
Date: Mon, 14 Sep 2026 23:44:02 +0200
Subject: [PATCH 1/4] Update package.json
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 08733c2..4c2cc55 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
"electron-webpack": "^2.8.2",
"nodemon": "^3.1.10",
"npm-run-all": "^4.1.5",
- "prettier": "^3.6.2",
+ "prettier": "^3.9.6",
"shx": "^0.4.0",
"typescript": "^5.8.3",
"wait-on": "^9.1.0"
From 0a3a2f87561c3610c9517d9fb9796491da8106c6 Mon Sep 17 00:00:00 2001
From: Johannes Klein <17345891+jtklein@users.noreply.github.com>
Date: Mon, 14 Sep 2026 23:44:06 +0200
Subject: [PATCH 2/4] Update yarn.lock
---
yarn.lock | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 78ebbe8..09a1973 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12253,10 +12253,10 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
-prettier@^3.6.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
- integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
+prettier@^3.9.6:
+ version "3.9.6"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.9.6.tgz#b3ea5146515d40fc53f18aa63f74dfab1e10dbf6"
+ integrity sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==
pretty-bytes@^4.0.2:
version "4.0.2"
From c7ebc41bd336265d16ba68d25ded157aa9c3bf89 Mon Sep 17 00:00:00 2001
From: Johannes Klein <17345891+jtklein@users.noreply.github.com>
Date: Mon, 14 Sep 2026 23:44:12 +0200
Subject: [PATCH 3/4] Update .prettierrc
---
.prettierrc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.prettierrc b/.prettierrc
index 7f21cfa..bfb431b 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -2,7 +2,7 @@
"overrides": [
{
"files": [".prettierrc", ".babelrc", ".eslintrc", ".stylelintrc"],
- "options": {
+ "options": {
"parser": "json"
}
}
From 38715313c6a5a9f6c2e0eb11fdc184e14927ef26 Mon Sep 17 00:00:00 2001
From: Johannes Klein <17345891+jtklein@users.noreply.github.com>
Date: Mon, 14 Sep 2026 23:59:35 +0200
Subject: [PATCH 4/4] Run Prettier
---
e2e/helpers/cleanupOutput.js | 4 +-
e2e/helpers/waitForOutput.js | 4 +-
e2e/modeltest-then-raxml-ng.spec.js | 79 +++++++--
e2e/raxmlHPC.spec.js | 9 +-
src/app/AlignmentCard.js | 26 ++-
src/app/App.js | 7 +-
src/app/AstralTreeCard.js | 9 +-
src/app/CitationModal.js | 13 +-
src/app/Console.js | 8 +-
src/app/Input.js | 16 +-
src/app/Model.js | 5 +-
src/app/Output.js | 65 +++----
src/app/PartitionEditor.js | 106 +++++++-----
src/app/PartitionFileCard.js | 5 +-
src/app/Raxml.js | 112 ++++++------
src/app/TreeCard.js | 38 ++--
src/app/bootstrap.js | 17 +-
src/app/components/CodeHighlight.js | 8 +-
src/app/components/ErrorBoundary.js | 4 +-
src/app/components/ErrorDialog.js | 26 +--
src/app/components/ModifiedDialog.js | 6 +-
src/app/components/OptionCheck.js | 1 -
src/app/components/OptionSelect.js | 11 +-
src/app/components/OptionTextField.js | 3 +-
src/app/index.js | 11 +-
src/app/store/Alignment.js | 104 ++++++-----
src/app/store/AstralTree.js | 3 +-
src/app/store/Citation.js | 1 -
src/app/store/Config.js | 13 +-
src/app/store/InputFile.js | 2 +-
src/app/store/Option.js | 29 +++-
src/app/store/Partition.js | 239 +++++++++++++++++---------
src/app/store/Run.js | 91 +++++-----
src/app/store/RunList.js | 2 +-
src/app/theme/index.js | 8 +-
src/common/errors.js | 3 +-
src/common/fastaParser.js | 25 +--
src/common/io.js | 25 +--
src/common/phylipParser.js | 84 ++++++---
src/common/typecheckAlignment.js | 19 +-
src/common/utils.js | 21 +--
src/constants/ipc.js | 21 ++-
src/main/api.js | 98 ++++++-----
src/main/index.js | 5 +-
src/main/menu/index.js | 12 +-
src/main/menu/subMenuAnalysis.js | 16 +-
src/main/menu/subMenuDeveloper.js | 6 +-
src/main/menu/subMenuFile.js | 14 +-
src/main/utils/saveScreenshot.js | 31 ++--
src/registerServiceWorker.js | 24 +--
src/settings/raxml.js | 91 +++++-----
src/settings/raxmlng.js | 58 +++----
52 files changed, 934 insertions(+), 704 deletions(-)
diff --git a/e2e/helpers/cleanupOutput.js b/e2e/helpers/cleanupOutput.js
index 6642133..217ef8d 100644
--- a/e2e/helpers/cleanupOutput.js
+++ b/e2e/helpers/cleanupOutput.js
@@ -22,9 +22,9 @@ async function cleanupOutputFiles(outputDir, outputId) {
.filter(
(entry) =>
entry.includes(outputId) ||
- entry.startsWith('RAxML_GUI_ModelTest_nucleotide')
+ entry.startsWith('RAxML_GUI_ModelTest_nucleotide'),
)
- .map((entry) => fs.rm(path.join(outputDir, entry), { force: true }))
+ .map((entry) => fs.rm(path.join(outputDir, entry), { force: true })),
);
}
diff --git a/e2e/helpers/waitForOutput.js b/e2e/helpers/waitForOutput.js
index 6344e80..ab016ac 100644
--- a/e2e/helpers/waitForOutput.js
+++ b/e2e/helpers/waitForOutput.js
@@ -24,7 +24,9 @@ async function waitForOutputFile(filePaths, { timeout = 10 * 60 * 1000 } = {}) {
await new Promise((resolve) => setTimeout(resolve, 1000));
}
- throw new Error(`Timed out waiting for output file: ${candidates.join(' or ')}`);
+ throw new Error(
+ `Timed out waiting for output file: ${candidates.join(' or ')}`,
+ );
}
module.exports = {
diff --git a/e2e/modeltest-then-raxml-ng.spec.js b/e2e/modeltest-then-raxml-ng.spec.js
index b0ca795..9dc945d 100644
--- a/e2e/modeltest-then-raxml-ng.spec.js
+++ b/e2e/modeltest-then-raxml-ng.spec.js
@@ -61,7 +61,7 @@ test.describe('ModelTest then raxml-ng', () => {
expect(commandText).not.toMatch(/--model GTR(\s|$)/);
const modeltestFiles = (await fs.readdir(outputDir)).filter((filename) =>
- filename.startsWith('RAxML_GUI_ModelTest_nucleotide')
+ filename.startsWith('RAxML_GUI_ModelTest_nucleotide'),
);
expect(modeltestFiles.length).toBeGreaterThan(0);
@@ -74,33 +74,84 @@ test.describe('ModelTest then raxml-ng', () => {
});
await expect(page.locator('#error-dialog-title')).toHaveCount(0);
- await expect(page.getByText(`Result for output id '${outputId}'`)).toBeVisible();
- await expect(page.getByText(`${outputId}.raxml.bestTree.tre`)).toBeVisible();
+ await expect(
+ page.getByText(`Result for output id '${outputId}'`),
+ ).toBeVisible();
+ await expect(
+ page.getByText(`${outputId}.raxml.bestTree.tre`),
+ ).toBeVisible();
await expect(page.getByText(`${outputId}.raxml.support.tre`)).toBeVisible();
- await expect(page.getByText(`${outputId}.raxml.bootstraps.tre`)).toBeVisible();
+ await expect(
+ page.getByText(`${outputId}.raxml.bootstraps.tre`),
+ ).toBeVisible();
const bestTreePath = path.join(outputDir, `${outputId}.raxml.bestTree.tre`);
const supportTreePath = path.join(
outputDir,
- `${outputId}.raxml.support.tre`
+ `${outputId}.raxml.support.tre`,
);
const bootstrapsTreePath = path.join(
outputDir,
- `${outputId}.raxml.bootstraps.tre`
+ `${outputId}.raxml.bootstraps.tre`,
);
const logPath = path.join(outputDir, `${outputId}.raxml.log.txt`);
- const bestModelPath = path.join(outputDir, `${outputId}.raxml.bestModel.txt`);
+ const bestModelPath = path.join(
+ outputDir,
+ `${outputId}.raxml.bestModel.txt`,
+ );
const settingsPath = path.join(
outputDir,
- `RAxML_GUI_Settings_${outputId}.txt`
+ `RAxML_GUI_Settings_${outputId}.txt`,
);
- await expect.poll(async () => fs.stat(bestTreePath).then(() => true).catch(() => false)).toBe(true);
- await expect.poll(async () => fs.stat(supportTreePath).then(() => true).catch(() => false)).toBe(true);
- await expect.poll(async () => fs.stat(bootstrapsTreePath).then(() => true).catch(() => false)).toBe(true);
- await expect.poll(async () => fs.stat(logPath).then(() => true).catch(() => false)).toBe(true);
- await expect.poll(async () => fs.stat(bestModelPath).then(() => true).catch(() => false)).toBe(true);
- await expect.poll(async () => fs.stat(settingsPath).then(() => true).catch(() => false)).toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(bestTreePath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(supportTreePath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(bootstrapsTreePath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(logPath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(bestModelPath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
+ await expect
+ .poll(async () =>
+ fs
+ .stat(settingsPath)
+ .then(() => true)
+ .catch(() => false),
+ )
+ .toBe(true);
const bestTree = await fs.readFile(bestTreePath, 'utf8');
expect(bestTree).toContain('TAXON_');
diff --git a/e2e/raxmlHPC.spec.js b/e2e/raxmlHPC.spec.js
index cd72686..1020595 100644
--- a/e2e/raxmlHPC.spec.js
+++ b/e2e/raxmlHPC.spec.js
@@ -60,13 +60,13 @@ test.describe('raxmlHPC', () => {
const outputFilename = `${outputId}.tre`;
const bestTreePath = path.join(
outputDir,
- `RAxML_bestTree.${outputFilename}`
+ `RAxML_bestTree.${outputFilename}`,
);
const infoPathTxt = path.join(outputDir, `RAxML_info.${outputId}.txt`);
const infoPathTre = path.join(outputDir, `RAxML_info.${outputFilename}`);
const settingsPath = path.join(
outputDir,
- `RAxML_GUI_Settings_${outputId}.txt`
+ `RAxML_GUI_Settings_${outputId}.txt`,
);
const runButton = page.getByTestId('run-analysis');
@@ -82,7 +82,10 @@ test.describe('raxmlHPC', () => {
expect(bestTree).toContain('TAXON_');
expect(bestTree).toMatch(/[()]/);
- const infoPath = (await fs.stat(infoPathTxt).then(() => infoPathTxt).catch(() => infoPathTre));
+ const infoPath = await fs
+ .stat(infoPathTxt)
+ .then(() => infoPathTxt)
+ .catch(() => infoPathTre);
const infoText = await fs.readFile(infoPath, 'utf8');
expect(infoText.length).toBeGreaterThan(0);
});
diff --git a/src/app/AlignmentCard.js b/src/app/AlignmentCard.js
index 123ac1e..0a7d437 100644
--- a/src/app/AlignmentCard.js
+++ b/src/app/AlignmentCard.js
@@ -172,12 +172,10 @@ function AlignmentCard({ alignment }) {
...alignment.modelExtra,
setValue: alignment.modelExtra.onChange,
title: alignment.modelExtra.label,
- options: alignment.modelExtra.options.map((model) => (
- {
- value: model,
- title: model,
- }
- )),
+ options: alignment.modelExtra.options.map((model) => ({
+ value: model,
+ title: model,
+ })),
}}
/>
) : null}
@@ -207,10 +205,7 @@ function AlignmentCard({ alignment }) {
avatar={Type}
action={
-
+
@@ -220,7 +215,8 @@ function AlignmentCard({ alignment }) {
aria-owns={anchorEl ? 'alignment-menu' : undefined}
aria-haspopup="true"
onClick={handleMenuClick}
- size="large">
+ size="large"
+ >
@@ -342,7 +338,8 @@ function FinalAlignmentCard({ sx, alignment }) {
aria-owns={anchorEl ? 'alignment-menu' : undefined}
aria-haspopup="true"
onClick={handleMenuClick}
- size="large">
+ size="large"
+ >
@@ -376,7 +373,7 @@ function FinalAlignmentCard({ sx, alignment }) {
checked={alignment.fillTaxonGapsWithEmptySeqeunces}
onChange={(event) => {
alignment.setFillTaxonGapsWithEmptySeqeunces(
- event.target.checked
+ event.target.checked,
);
}}
value="fillTaxonGapsWithEmptySeqeunces"
@@ -406,7 +403,8 @@ function FinalAlignmentCard({ sx, alignment }) {
component="code"
sx={{
color: (theme) => theme.palette.primary.contrastText,
- fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ fontFamily:
+ 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
fontSize: '10px',
height: '100%',
overflowWrap: 'break-word',
diff --git a/src/app/App.js b/src/app/App.js
index 7333ce4..f8290b1 100644
--- a/src/app/App.js
+++ b/src/app/App.js
@@ -44,7 +44,6 @@ const VerticalHeading = styled(Typography)(({ theme }) => ({
}));
const App = () => {
-
const TabItems = store.runs.map((run) => (
{
height: '100%',
overflowY: 'auto',
paddingBottom: '20px',
- borderLeft: '1px solid #ccc'
+ borderLeft: '1px solid #ccc',
}}
>
{
{/* In dev mode the app version shown is from electron, in production it is ours */}
-
- raxmlGUI {store.version}
-
+ raxmlGUI {store.version}
{binary.value} {binary.version}
diff --git a/src/app/AstralTreeCard.js b/src/app/AstralTreeCard.js
index e5948af..90afba6 100644
--- a/src/app/AstralTreeCard.js
+++ b/src/app/AstralTreeCard.js
@@ -16,7 +16,7 @@ import CardActions from '@mui/material/CardActions';
import Box from '@mui/material/Box';
function AstralTreeCard({ astralTree }) {
- const { } = astralTree;
+ const {} = astralTree;
const [anchorEl, setAnchorEl] = React.useState(null);
@@ -44,9 +44,7 @@ function AstralTreeCard({ astralTree }) {
}}
>
-
-
-
+
);
@@ -91,7 +89,8 @@ function AstralTreeCard({ astralTree }) {
aria-owns={anchorEl ? 'astralTree-menu' : undefined}
aria-haspopup="true"
onClick={handleMenuClick}
- size="large">
+ size="large"
+ >
diff --git a/src/app/CitationModal.js b/src/app/CitationModal.js
index 26dba36..ae880c7 100644
--- a/src/app/CitationModal.js
+++ b/src/app/CitationModal.js
@@ -13,7 +13,6 @@ import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
import CodeHighlight from './components/CodeHighlight';
function CitationModal({ citation }) {
-
return (
How to cite?
@@ -43,7 +42,7 @@ function CitationModal({ citation }) {
aria-label="text format"
size="small"
>
- {citation.formats.map(format => (
+ {citation.formats.map((format) => (
- {citation.content.map(article => (
+ {citation.content.map((article) => (
{article.name}
theme.palette.output.background,
borderRadius: '4px',
- padding: '4px'
+ padding: '4px',
}}
/>
@@ -90,7 +89,7 @@ function CitationModal({ citation }) {
}
CitationModal.propTypes = {
- citation: PropTypes.object.isRequired
+ citation: PropTypes.object.isRequired,
};
export default observer(CitationModal);
diff --git a/src/app/Console.js b/src/app/Console.js
index 85c7ba2..74c340a 100644
--- a/src/app/Console.js
+++ b/src/app/Console.js
@@ -38,7 +38,8 @@ const Console = ({ run }) => {
component="code"
sx={{
color: (theme) => theme.palette.console.contrastText,
- fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ fontFamily:
+ 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
fontSize: '12px',
height: '100%',
position: 'absolute',
@@ -55,7 +56,8 @@ const Console = ({ run }) => {
component="code"
sx={{
color: (theme) => theme.palette.console.contrastText,
- fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ fontFamily:
+ 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
fontSize: '12px',
height: '100%',
position: 'absolute',
@@ -73,7 +75,7 @@ const Console = ({ run }) => {
};
Console.propTypes = {
- run: PropTypes.object.isRequired
+ run: PropTypes.object.isRequired,
};
export default observer(Console);
diff --git a/src/app/Input.js b/src/app/Input.js
index 3be0fef..edc7e86 100644
--- a/src/app/Input.js
+++ b/src/app/Input.js
@@ -20,11 +20,7 @@ const Input = ({ run }) => {
}
// const SelectNumRuns = run.
return (
-
+
{
>
{({ getRootProps, getInputProps }) => (
-
+
{run.inputIsAlignment
? run.alignments.map((alignment) => (
{
))
: null}
{run.inputIsTree && run.hasAstralTree ? (
-
+
) : null}
diff --git a/src/app/Model.js b/src/app/Model.js
index eb45d1f..ed51cb9 100644
--- a/src/app/Model.js
+++ b/src/app/Model.js
@@ -8,7 +8,6 @@ import TextField from '@mui/material/TextField';
import Typography from '@mui/material/Typography';
const Model = ({ run }) => {
-
// TODO: Check marginTop: 2 hack, doesn't seem exactly aligned to top
if (run.usesModeltestNg) {
return (
@@ -90,7 +89,8 @@ const Model = ({ run }) => {
title="Random seed"
sx={{ width: 60 }}
value={run.randomSeed}
- onChange={(e) => run.setRandomSeed(e.target.value)} />
+ onChange={(e) => run.setRandomSeed(e.target.value)}
+ />
) : null}
{
);
};
-
Model.propTypes = {
run: PropTypes.object.isRequired,
};
diff --git a/src/app/Output.js b/src/app/Output.js
index f872ff6..2274125 100644
--- a/src/app/Output.js
+++ b/src/app/Output.js
@@ -13,7 +13,7 @@ const Output = ({ run }) => {
const haveResult = resultFilenames.length > 0;
return (
- ( {
slotProps={{
input: {
readOnly: true,
- }
- }} />
+ },
+ }}
+ />
run.setOutputName(e.target.value)}
- error={!run.outputNameOk} />
+ onChange={(e) => run.setOutputName(e.target.value)}
+ error={!run.outputNameOk}
+ />
- { haveResult ? Result for output id '{run.outputName}' : null }
- { resultFilenames.map(filename =>
- theme.palette.primary.contrastText,
- display: 'flex',
- alignItems: 'flex-end',
- cursor: 'pointer',
- }}
- onClick={() => run.openFile(join(run.outputDir, filename))}
- underline="hover">
-
- Result for output id '{run.outputName}'
+ ) : null}
+ {resultFilenames.map((filename) => (
+ theme.palette.primary.contrastText,
+ display: 'flex',
+ alignItems: 'flex-end',
+ cursor: 'pointer',
}}
+ onClick={() => run.openFile(join(run.outputDir, filename))}
+ underline="hover"
>
- {filename}
-
-
- )}
+
+ theme.palette.primary.contrastText,
+ }}
+ >
+ {filename}
+
+
+ ))}
- { run.haveAlignments || haveResult ? (
+ {run.haveAlignments || haveResult ? (
-
+
- ) : null }
- )
+ ) : null}
+
);
};
diff --git a/src/app/PartitionEditor.js b/src/app/PartitionEditor.js
index 52b7cbc..bba871b 100644
--- a/src/app/PartitionEditor.js
+++ b/src/app/PartitionEditor.js
@@ -26,68 +26,72 @@ function PartitionEditor({ alignment }) {
const { partToAdd } = partition;
return (
- ( theme.palette.input.background,
display: 'flex',
flexDirection: 'column',
- alignItems: 'flex-start'
+ alignItems: 'flex-start',
}}
>
Partition editor
-
-
- {alignment.filename}: {alignment.numSequences} sequences of length {alignment.length}
- Partition coverage: {partition.currentEndValue} / {partition.maxEndValue}
+
+
+
+ {alignment.filename}: {alignment.numSequences} sequences of length{' '}
+ {alignment.length}
+
+
+ Partition coverage: {partition.currentEndValue} /{' '}
+ {partition.maxEndValue}
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- {partition.errorMessage || ' '}
+
+ {partition.errorMessage || ' '}
+
@@ -95,7 +99,8 @@ function PartitionEditor({ alignment }) {
sx={{
width: '100%',
'& .MuiInputBase-input': {
- fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ fontFamily:
+ 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
},
}}
id="partition"
@@ -110,23 +115,36 @@ function PartitionEditor({ alignment }) {
variant="outlined"
/>
-
- { partition.isDefault ? null : (
+
+ {partition.isDefault ? null : (
-
+
)}
-
+
- )
+
);
}
PartitionEditor.propTypes = {
alignment: PropTypes.object.isRequired,
- className: PropTypes.string
+ className: PropTypes.string,
};
const PartitionEditorObserver = observer(PartitionEditor);
@@ -134,7 +152,7 @@ const PartitionEditorObserver = observer(PartitionEditor);
function PartitionOnCard({ alignment }) {
// const [partitionText, setPartitionText] = React.useState(alignment.partitionText);
const [partitionText, setPartitionText] = React.useState(
- alignment.partitionFileContent
+ alignment.partitionFileContent,
);
function handleChange(event) {
@@ -159,7 +177,7 @@ function PartitionOnCard({ alignment }) {
marginTop: -30,
backgroundColor: 'rgba(0,0,0,0)', // transparent background
display: 'flex',
- alignItems: 'flex-start'
+ alignItems: 'flex-start',
}}
elevation={0}
>
@@ -176,7 +194,7 @@ function PartitionOnCard({ alignment }) {
padding: 0,
marginTop: '10px',
marginLeft: 1,
- marginRight: 1
+ marginRight: 1,
}}
margin="normal"
helperText={alignment.partitionHelperText || ''}
@@ -203,12 +221,12 @@ function PartitionOnCard({ alignment }) {
PartitionOnCard.propTypes = {
alignment: PropTypes.object.isRequired,
- className: PropTypes.string
+ className: PropTypes.string,
};
const PartitionOnCardObserver = observer(PartitionOnCard);
export {
PartitionEditorObserver as default,
- PartitionOnCardObserver as PartitionOnCard
+ PartitionOnCardObserver as PartitionOnCard,
};
diff --git a/src/app/PartitionFileCard.js b/src/app/PartitionFileCard.js
index 32b83d3..de4690e 100644
--- a/src/app/PartitionFileCard.js
+++ b/src/app/PartitionFileCard.js
@@ -67,14 +67,15 @@ function PartitionFileCard({ run }) {
component="code"
sx={{
color: (theme) => theme.palette.primary.contrastText,
- fontFamily: 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ fontFamily:
+ 'Consolas, "Liberation Mono", Menlo, Courier, monospace',
fontSize: '12px',
height: '100%',
overflowWrap: 'break-word',
whiteSpace: 'pre-wrap',
}}
>
- { run.partitionFileContent }
+ {run.partitionFileContent}
diff --git a/src/app/Raxml.js b/src/app/Raxml.js
index 36da889..938c091 100644
--- a/src/app/Raxml.js
+++ b/src/app/Raxml.js
@@ -17,72 +17,72 @@ const Raxml = ({ run, store }) => {
store.setAppSnack();
}, [run.command, store]);
- return (
+ return (
+
-
-
-
- {run.modelTestIsRunningOnAlignment ? (
-
- ) : null}
- {run.running ? (
-
- ) : null}
+
+
+ {run.modelTestIsRunningOnAlignment ? (
-
+ ) : null}
+ {run.running ? (
+
+ ) : null}
+
+
-
-
-
-
-
-
-
- {run.command}
-
- Command
+
+
+
+
+
+
+
+ {run.command}
+ Command
- );
+
+ );
};
Raxml.propTypes = {
diff --git a/src/app/TreeCard.js b/src/app/TreeCard.js
index b1d3c7c..e11b529 100644
--- a/src/app/TreeCard.js
+++ b/src/app/TreeCard.js
@@ -3,8 +3,8 @@ import { observer } from 'mobx-react-lite';
import PropTypes from 'prop-types';
import IconButton from '@mui/material/IconButton';
import MoreVertIcon from '@mui/icons-material/MoreVert';
-import CircularProgress from "@mui/material/CircularProgress";
-import Chip from "@mui/material/Chip";
+import CircularProgress from '@mui/material/CircularProgress';
+import Chip from '@mui/material/Chip';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
import Card from '@mui/material/Card';
@@ -27,7 +27,7 @@ function TreeCard({ sx, tree }) {
return () => {
callback();
setAnchorEl(null);
- }
+ };
}
return (
@@ -58,35 +58,43 @@ function TreeCard({ sx, tree }) {
aria-owns={anchorEl ? 'tree-menu' : undefined}
aria-haspopup="true"
onClick={handleMenuClick}
- size="large">
+ size="large"
+ >
-
}
- title={ tree.name }
- subheader={ '' }
+ title={tree.name}
+ subheader={''}
/>
- { tree.loading ? (
+ {tree.loading ? (
- ) : null }
+ ) : null}
-
-
+
);
-};
+}
//
{tree.name}
-
TreeCard.propTypes = {
tree: PropTypes.object.isRequired,
sx: PropTypes.object,
diff --git a/src/app/bootstrap.js b/src/app/bootstrap.js
index e983d97..8989ea4 100644
--- a/src/app/bootstrap.js
+++ b/src/app/bootstrap.js
@@ -8,9 +8,12 @@ if (process.env.NODE_ENV === 'development') {
ipcRenderer.send(ipc.ALIGNMENT_EXAMPLE_FILES_GET_REQUEST);
}
-ipcRenderer.on(ipc.ALIGNMENT_EXAMPLE_FILES_GET_SUCCESS, (event, exampleFiles) => {
- initDev(exampleFiles);
-});
+ipcRenderer.on(
+ ipc.ALIGNMENT_EXAMPLE_FILES_GET_SUCCESS,
+ (event, exampleFiles) => {
+ initDev(exampleFiles);
+ },
+);
function initDev(exampleFiles) {
// if (exampleFiles.length === 0) {
@@ -28,7 +31,9 @@ function initDev(exampleFiles) {
// 'mixed_data.txt',
// 'multistate.txt',
'nucleotide.txt',
- ].map(filename => ({ path: path.join(exampleFilesDir, 'fasta', filename) }));
+ ].map((filename) => ({
+ path: path.join(exampleFilesDir, 'fasta', filename),
+ }));
const usePhylipFiles = [
// 'AA.txt',
// 'align_allvariant.txt',
@@ -46,7 +51,9 @@ function initDev(exampleFiles) {
// 'fail_bad_name.txt',
// 'test_invariant_sites.txt',
// 'test_lower_case_bases.txt',
- ].map(filename => ({ path: path.join(exampleFilesDir, 'phylip', filename) }));
+ ].map((filename) => ({
+ path: path.join(exampleFilesDir, 'phylip', filename),
+ }));
const useFiles = [].concat(useFastaFiles, usePhylipFiles);
store.activeRun.addAlignments(useFiles);
store.activeRun.setOutputDir(exampleFiles.outdir);
diff --git a/src/app/components/CodeHighlight.js b/src/app/components/CodeHighlight.js
index 7edd331..e156ba6 100644
--- a/src/app/components/CodeHighlight.js
+++ b/src/app/components/CodeHighlight.js
@@ -11,7 +11,11 @@ function CodeHighlight({ code, language, sx }) {
useEffect(() => {
if (Prism.languages.hasOwnProperty(language)) {
- const highlightHTML = Prism.highlight(code, Prism.languages[language], language);
+ const highlightHTML = Prism.highlight(
+ code,
+ Prism.languages[language],
+ language,
+ );
codeNode.current.innerHTML = highlightHTML;
}
}, [code, language]);
@@ -27,7 +31,7 @@ function CodeHighlight({ code, language, sx }) {
whiteSpace: 'pre-wrap',
}}
>
- { code }
+ {code}
);
diff --git a/src/app/components/ErrorBoundary.js b/src/app/components/ErrorBoundary.js
index 23c125f..f7f40d2 100644
--- a/src/app/components/ErrorBoundary.js
+++ b/src/app/components/ErrorBoundary.js
@@ -22,7 +22,7 @@ class ErrorBoundary extends React.Component {
handleClose = () => {
this.setState({ error: null });
- }
+ };
render() {
const { error } = this.state;
@@ -36,7 +36,7 @@ class ErrorBoundary extends React.Component {
Oops! Something went wrong.
-
+
);
}
diff --git a/src/app/components/ErrorDialog.js b/src/app/components/ErrorDialog.js
index f8eca1d..dc64bf7 100644
--- a/src/app/components/ErrorDialog.js
+++ b/src/app/components/ErrorDialog.js
@@ -14,12 +14,15 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import Button from '@mui/material/Button';
import Alert from '@mui/material/Alert';
import { ipcRenderer } from 'electron';
-import { reportIssueToGitHub, getMailtoLinkToReportError } from '../../common/utils';
+import {
+ reportIssueToGitHub,
+ getMailtoLinkToReportError,
+} from '../../common/utils';
import * as ipc from '../../constants/ipc';
const handleReload = () => {
ipcRenderer.send(ipc.RELOAD);
-}
+};
export default function ErrorDialog({ error, onClose, needReload, title }) {
const [reported, setReported] = React.useState(false);
@@ -31,17 +34,19 @@ export default function ErrorDialog({ error, onClose, needReload, title }) {
const handleReportToGithub = () => {
reportIssueToGitHub(error);
setReported(true);
- }
+ };
const handleReportToMail = () => {
setReported(true);
- }
+ };
const mailtoContent = getMailtoLinkToReportError(error);
- const closeMessage = needReload ? (
- reported ? 'Reload' : 'Ignore and reload'
- ) : 'Close';
+ const closeMessage = needReload
+ ? reported
+ ? 'Reload'
+ : 'Ignore and reload'
+ : 'Close';
const resetAndClose = () => {
setReported(false);
@@ -90,10 +95,7 @@ export default function ErrorDialog({ error, onClose, needReload, title }) {
Please help us solve the issue by reporting it.
) : (
-
+
Thanks for reporting the issue!
);
@@ -168,4 +170,4 @@ ErrorDialog.propTypes = {
onClose: PropTypes.func.isRequired,
needReload: PropTypes.bool,
title: PropTypes.string,
-}
+};
diff --git a/src/app/components/ModifiedDialog.js b/src/app/components/ModifiedDialog.js
index 18c1114..0681586 100644
--- a/src/app/components/ModifiedDialog.js
+++ b/src/app/components/ModifiedDialog.js
@@ -22,7 +22,9 @@ export default function ModifiedDialog({ show, onClose, messages }) {