diff --git a/src/__tests__/createGeneralTOC.test.js b/src/__tests__/createGeneralTOC.test.js index 9d1c313..8c8182b 100644 --- a/src/__tests__/createGeneralTOC.test.js +++ b/src/__tests__/createGeneralTOC.test.js @@ -17,5 +17,5 @@ test('createGeneralTOC', async () => { .map((file) => { return statSync(file).size; }); - expect(sizes).toStrictEqual([2211, 404, 899, 483, 250]); + expect(sizes).toStrictEqual([1221, 384, 566, 483, 250]); }); diff --git a/src/__tests__/general/Data3/index.json b/src/__tests__/general/Data3/index.json index 91408ef..55a3006 100644 --- a/src/__tests__/general/Data3/index.json +++ b/src/__tests__/general/Data3/index.json @@ -6,12 +6,7 @@ }, "display": { "name": "1h.jdx" - }, - "molecules": [ - { - "molfile": "\n ChemDraw05122111362D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n -0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 -1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 -1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 4 0 \n 2 3 4 0 \n 3 4 4 0 \n 4 5 4 0 \n 5 6 4 0 \n 6 1 4 0 \n 1 7 1 0 \n 7 8 1 0 \n 5 9 1 0 \nM END\n" - } - ] + } }, { "source": { @@ -19,12 +14,12 @@ }, "display": { "name": "cosy.jdx" - }, - "molecules": [ - { - "molfile": "\n ChemDraw05122111362D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n -0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 -1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 -1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 4 0 \n 2 3 4 0 \n 3 4 4 0 \n 4 5 4 0 \n 5 6 4 0 \n 6 1 4 0 \n 1 7 1 0 \n 7 8 1 0 \n 5 9 1 0 \nM END\n" - } - ] + } + } + ], + "molecules": [ + { + "molfile": "\n ChemDraw05122111362D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n -0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 -0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 0.3572 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 -1.0717 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4125 -1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8250 1.7862 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 4 0 \n 2 3 4 0 \n 3 4 4 0 \n 4 5 4 0 \n 5 6 4 0 \n 6 1 4 0 \n 1 7 1 0 \n 7 8 1 0 \n 5 9 1 0 \nM END\n" } ] } \ No newline at end of file diff --git a/src/__tests__/general/Group1/Data1/index.json b/src/__tests__/general/Group1/Data1/index.json index 86256b6..b6697c3 100644 --- a/src/__tests__/general/Group1/Data1/index.json +++ b/src/__tests__/general/Group1/Data1/index.json @@ -3,12 +3,12 @@ { "source": { "jcampURL": "./1h.jdx" - }, - "molecules": [ - { - "molfile": "\n ChemDraw05122111372D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.3572 -0.2062 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3572 0.2062 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 \nM END\n" - } - ] + } + } + ], + "molecules": [ + { + "molfile": "\n ChemDraw05122111372D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.3572 -0.2062 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3572 0.2062 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 \nM END\n" } ] } \ No newline at end of file diff --git a/src/__tests__/general/Group1/Data2/index.json b/src/__tests__/general/Group1/Data2/index.json index ce2a5eb..ea2148c 100644 --- a/src/__tests__/general/Group1/Data2/index.json +++ b/src/__tests__/general/Group1/Data2/index.json @@ -6,12 +6,7 @@ }, "display": { "name": "13c.jdx" - }, - "molecules": [ - { - "molfile": "\n ChemDraw05122111372D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.3572 -0.2062 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3572 0.2062 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 \nM END\n" - } - ] + } }, { "source": { @@ -19,12 +14,12 @@ }, "display": { "name": "cosy.jdx" - }, - "molecules": [ - { - "molfile": "\n ChemDraw05122111372D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.3572 -0.2062 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3572 0.2062 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 \nM END\n" - } - ] + } + } + ], + "molecules": [ + { + "molfile": "\n ChemDraw05122111372D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.3572 -0.2062 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3572 0.2062 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 \nM END\n" } ] } \ No newline at end of file diff --git a/src/commands/createGeneralTOC.js b/src/commands/createGeneralTOC.js index d39f299..562a5aa 100644 --- a/src/commands/createGeneralTOC.js +++ b/src/commands/createGeneralTOC.js @@ -5,7 +5,7 @@ import { processGeneralFolder } from './toc/processGeneralFolder.js'; * Add the links based on all the available toc files * @param {string} commandDir * @param {object} [options={}] - * @param {boolean} [options.dataDir] + * @param {string} [options.dataDir] */ export async function createGeneralTOC(commandDir, options = {}) { return createToc(commandDir, processGeneralFolder, options); diff --git a/src/commands/toc/processGeneralFolder.js b/src/commands/toc/processGeneralFolder.js index 41421cb..06518e8 100644 --- a/src/commands/toc/processGeneralFolder.js +++ b/src/commands/toc/processGeneralFolder.js @@ -1,9 +1,10 @@ -import { lstatSync, readFileSync, readdirSync, writeFileSync } from 'fs'; +import { lstatSync, readFileSync, readdirSync, writeFileSync, existsSync } from 'fs'; import { join } from 'path'; import debugFct from 'debug'; import { hashElement } from 'folder-hash'; import { createTree } from 'jcampconverter'; +import YAML from 'yaml'; const debug = debugFct('nmrium.general'); @@ -12,10 +13,23 @@ let dataCount = 0; export async function processGeneralFolder(basename, folder, toc) { const currentFolder = join(basename, folder); - const entries = readdirSync(currentFolder); - const molfileName = readdirSync(currentFolder).filter((file) => + + const folderConfigFilename = join(currentFolder, 'index.yml'); + const folderConfig = existsSync(folderConfigFilename) + ? YAML.parse(readFileSync(folderConfigFilename, 'utf8')) + : {}; + + // Loading all the molfiles + const molfileNames = readdirSync(currentFolder).filter((file) => file.toLowerCase().endsWith('.mol'), - )[0]; + ); + const molecules = []; + for (let molfileName of molfileNames) { + const molfile = readFileSync(join(currentFolder, molfileName), 'utf8'); + molecules.push({ molfile }); + } + + const entries = readdirSync(currentFolder); const spectra = []; // we process only the folder if there is an answer (structure.mol) const id = ( @@ -32,7 +46,6 @@ export async function processGeneralFolder(basename, folder, toc) { const jcampText = readFileSync(join(currentFolder, filename)); const tree = createTree(jcampText, {}); const title = tree[0]?.title; - const spectrum = { source: { jcampURL: `./${filename}`, @@ -45,25 +58,20 @@ export async function processGeneralFolder(basename, folder, toc) { }; } - if (molfileName) { - const molfile = readFileSync(join(currentFolder, molfileName), 'utf8'); - spectrum.molecules = [{ molfile }]; - } spectra.push(spectrum); } const targetPath = join(basename, folder, 'index.json'); debug(`Create: ${targetPath}`); - writeFileSync(targetPath, JSON.stringify({ spectra }, undefined, 2), 'utf8'); + writeFileSync(targetPath, JSON.stringify({ spectra, molecules }, undefined, 2), 'utf8'); - let title = folder - .replace(/^[^/]*\//, '') - .replace(/^[0-9]*$/, '') - .replace(/^[0-9]*_/, ''); - if (!title) { - title = `Data ${++dataCount}`; - } + let title = folderConfig.menuLabel || + folder + .replace(/^[^/]*\//, '') + .replace(/^[0-9]*$/, '') + .replace(/^[0-9]*_/, '') || + `Data ${++dataCount}`; const tocEntry = { id, file: `${URL_FOLDER}/${folder}/index.json`,