From 23af013e91e6013a3b2efb013a0c2b01c548ab3e Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 14:23:05 +0200 Subject: [PATCH 01/20] chore: install playwright --- package-lock.json | 64 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 65 insertions(+) diff --git a/package-lock.json b/package-lock.json index 18529a27..30ce5788 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "@crowdin/cli": "^4.15.1", "@docusaurus/module-type-aliases": "^3.10.2", "@docusaurus/types": "^3.10.2", + "@playwright/test": "^1.62.1", "glob": "^13.0.6", "gray-matter": "^4.0.3", "lint": "^1.2.2", @@ -5457,6 +5458,22 @@ "node": ">=20.0.0" } }, + "node_modules/@playwright/test": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz", + "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -15565,6 +15582,53 @@ "node": ">=16.0.0" } }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/postcss": { "version": "8.5.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", diff --git a/package.json b/package.json index 2c183861..5aa0232a 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@crowdin/cli": "^4.15.1", "@docusaurus/module-type-aliases": "^3.10.2", "@docusaurus/types": "^3.10.2", + "@playwright/test": "^1.62.1", "glob": "^13.0.6", "gray-matter": "^4.0.3", "lint": "^1.2.2", From 66bbc28b800f0180cfa8b5339b8335dc65ecb65f Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 14:27:56 +0200 Subject: [PATCH 02/20] chore: add Playwright configuration and initial end-to-end tests --- .gitignore | 3 +++ package.json | 4 ++++ playwright.config.ts | 25 +++++++++++++++++++++++++ tests/e2e/smoke.spec.ts | 8 ++++++++ 4 files changed, 40 insertions(+) create mode 100644 playwright.config.ts create mode 100644 tests/e2e/smoke.spec.ts diff --git a/.gitignore b/.gitignore index ef92fdfd..b6403552 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ yarn-debug.log* yarn-error.log* yarn.lock # package-lock.json +# Playwright artifacts +playwright-report/ +test-results/ # config for staging docusaurus.config.js .Rproj.user diff --git a/package.json b/package.json index 5aa0232a..8971d255 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,10 @@ "docusaurus": "docusaurus", "start": "docusaurus start", "build": "docusaurus build", + "pw:install": "playwright install chromium", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:update": "playwright test --update-snapshots", "lint": "npm run lint:content", "lint:all": "npm run lint:format && npm run lint:content", "lint:format": "prettier --check \"**/*.{js,jsx,ts,tsx,md,mdx,json,css,yml,yaml}\"", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..f71fa57f --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./tests/e2e", + timeout: 60_000, + retries: process.env.CI ? 1 : 0, + fullyParallel: true, + reporter: [["html", { open: "never" }]], + use: { + baseURL: "http://127.0.0.1:3000", + trace: "on-first-retry" + }, + webServer: { + command: "npm run start -- --host 127.0.0.1 --port 3000", + url: "http://127.0.0.1:3000", + reuseExistingServer: !process.env.CI, + timeout: 120_000 + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] } + } + ] +}); diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts new file mode 100644 index 00000000..d251a906 --- /dev/null +++ b/tests/e2e/smoke.spec.ts @@ -0,0 +1,8 @@ +import { expect, test } from "@playwright/test"; + +test("home page renders", async ({ page }) => { + await page.goto("/"); + + await expect(page).toHaveTitle(/Chemistry RDM Knowledge Base|NFDI4Chem/i); + await expect(page.locator("main")).toBeVisible(); +}); From cfa35156b237592912c3a9554612a3b112e475c9 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 17:54:30 +0200 Subject: [PATCH 03/20] test: add visual regression tests for Playwright --- .gitignore | 1 + package.json | 2 + tests/e2e/smoke.spec.ts | 99 +++++++++++++++++++++- tests/e2e/visual-pages.spec.ts | 150 +++++++++++++++++++++++++++++++++ 4 files changed, 248 insertions(+), 4 deletions(-) create mode 100644 tests/e2e/visual-pages.spec.ts diff --git a/.gitignore b/.gitignore index b6403552..84d258ba 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ yarn.lock # Playwright artifacts playwright-report/ test-results/ +tests/e2e/**/*.spec.ts-snapshots/ # config for staging docusaurus.config.js .Rproj.user diff --git a/package.json b/package.json index 8971d255..0822a981 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "test:e2e:update": "playwright test --update-snapshots", + "test:e2e:visual": "playwright test tests/e2e/visual-pages.spec.ts", + "test:e2e:visual:update": "playwright test tests/e2e/visual-pages.spec.ts --update-snapshots", "lint": "npm run lint:content", "lint:all": "npm run lint:format && npm run lint:content", "lint:format": "prettier --check \"**/*.{js,jsx,ts,tsx,md,mdx,json,css,yml,yaml}\"", diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts index d251a906..f47e5ff5 100644 --- a/tests/e2e/smoke.spec.ts +++ b/tests/e2e/smoke.spec.ts @@ -1,8 +1,99 @@ import { expect, test } from "@playwright/test"; -test("home page renders", async ({ page }) => { - await page.goto("/"); +const ASSET_FILE_EXTENSIONS = /\.(?:png|jpe?g|gif|webp|svg|ico|pdf|zip|gz|mp4|webm|css|js|json|xml|txt)$/i; +const EXCLUDED_PATH_PREFIXES = ["/search"]; - await expect(page).toHaveTitle(/Chemistry RDM Knowledge Base|NFDI4Chem/i); - await expect(page.locator("main")).toBeVisible(); +function normalizePath(url: URL): string { + const pathname = url.pathname.replace(/\/$/, "") || "/"; + return pathname; +} + +test("all internal pages render without errors", async ({ page, baseURL }) => { + test.setTimeout(10 * 60_000); + + if (!baseURL) { + throw new Error("Playwright baseURL is not configured."); + } + + const origin = new URL(baseURL).origin; + const queue = ["/"]; + const visited = new Set(); + const failures: string[] = []; + const maxPages = 300; + + while (queue.length > 0 && visited.size < maxPages) { + const currentPath = queue.shift(); + + if (!currentPath || visited.has(currentPath)) { + continue; + } + + visited.add(currentPath); + + const response = await page.goto(currentPath, { + waitUntil: "commit" + }); + await page.waitForLoadState("domcontentloaded"); + + if (!response || !response.ok()) { + failures.push(`${currentPath}: HTTP ${response?.status() ?? "NO_RESPONSE"}`); + continue; + } + + const title = (await page.title()).trim(); + + if (!title) { + failures.push(`${currentPath}: empty document title`); + } + + const notFoundHeading = page.getByRole("heading", { + name: /404|page not found/i + }); + + if ((await notFoundHeading.count()) > 0 && (await notFoundHeading.first().isVisible())) { + failures.push(`${currentPath}: rendered 404 page`); + } + + const hrefs = await page + .locator("a[href]") + .evaluateAll((anchors) => anchors.map((a) => a.getAttribute("href") ?? "")); + + for (const href of hrefs) { + if (!href || href.startsWith("#") || href.startsWith("mailto:") || href.startsWith("tel:")) { + continue; + } + + let resolvedUrl: URL; + + try { + resolvedUrl = new URL(href, origin); + } catch { + continue; + } + + if (resolvedUrl.origin !== origin) { + continue; + } + + if (EXCLUDED_PATH_PREFIXES.some((prefix) => resolvedUrl.pathname.startsWith(prefix))) { + continue; + } + + if (ASSET_FILE_EXTENSIONS.test(resolvedUrl.pathname)) { + continue; + } + + const normalizedPath = normalizePath(resolvedUrl); + + if (!visited.has(normalizedPath)) { + queue.push(normalizedPath); + } + } + } + + expect(visited.size, "No pages were discovered during crawl.").toBeGreaterThan(0); + expect( + failures, + `The following pages failed:\n${failures.map((f) => `- ${f}`).join("\n")}` + ).toEqual([]); }); diff --git a/tests/e2e/visual-pages.spec.ts b/tests/e2e/visual-pages.spec.ts new file mode 100644 index 00000000..016d2d9e --- /dev/null +++ b/tests/e2e/visual-pages.spec.ts @@ -0,0 +1,150 @@ +import { expect, test } from "@playwright/test"; +import { readFile, readdir } from "node:fs/promises"; +import path from "node:path"; + +const PAGE_EXTENSIONS = new Set([".js", ".jsx", ".ts", ".tsx", ".md", ".mdx"]); + +function normalizeRoute(route: string): string { + if (!route || route === "/") { + return "/"; + } + + return route.replace(/\/$/, ""); +} + +function routeToSnapshotName(route: string): string { + const normalized = normalizeRoute(route); + if (normalized === "/") { + return "root.png"; + } + + return `${normalized.replace(/^\//, "").replace(/\//g, "__")}.png`; +} + +function joinRoutePrefix(prefix: string, route: string): string { + const normalizedPrefix = normalizeRoute(prefix); + const normalizedRoute = normalizeRoute(route); + + if (normalizedRoute === "/") { + return normalizedPrefix || "/"; + } + + if (!normalizedPrefix || normalizedPrefix === "/") { + return normalizedRoute; + } + + return normalizeRoute(`${normalizedPrefix}${normalizedRoute}`); +} + +function extractRuntimeRoutes(routesFileContent: string): { routes: string[]; routePrefix: string } { + const rawPaths = [...routesFileContent.matchAll(/path:\s*'([^']+)'/g)].map((match) => match[1]); + + const docsPathSample = rawPaths.find((route) => route.includes("/docs/")) ?? "/docs/"; + const routePrefix = normalizeRoute(docsPathSample.split("/docs/")[0] || ""); + const normalizedRoutes = rawPaths + .map((route) => normalizeRoute(route)) + .filter((route) => route.startsWith("/")) + .filter((route) => !route.includes("*")); + + return { + routes: [...new Set(normalizedRoutes)], + routePrefix + }; +} + +async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise { + const currentDir = path.join(rootDir, relativeDir); + const entries = await readdir(currentDir, { withFileTypes: true }); + const routes: string[] = []; + + for (const entry of entries) { + if (entry.name.startsWith("_")) { + continue; + } + + const entryRelativePath = path.join(relativeDir, entry.name); + + if (entry.isDirectory()) { + routes.push(...(await collectPageFileRoutes(rootDir, entryRelativePath))); + continue; + } + + const extension = path.extname(entry.name); + if (!PAGE_EXTENSIONS.has(extension)) { + continue; + } + + if (entry.name.endsWith(".spec.ts") || entry.name.endsWith(".test.ts")) { + continue; + } + + const withoutExtension = entryRelativePath + .replace(/\\/g, "/") + .replace(new RegExp(`${extension}$`), ""); + let route = `/${withoutExtension}`; + + if (route.endsWith("/index")) { + route = route.slice(0, -"/index".length) || "/"; + } + + routes.push(normalizeRoute(route)); + } + + return routes; +} + +test("visual regression for docs and src/pages routes", async ({ page, baseURL }) => { + test.setTimeout(20 * 60_000); + + if (!baseURL) { + throw new Error("Playwright baseURL is not configured."); + } + + const routesFilePath = path.join(process.cwd(), ".docusaurus", "routes.js"); + const routesFileContent = await readFile(routesFilePath, "utf8"); + const { routes: docusaurusRoutes, routePrefix } = extractRuntimeRoutes(routesFileContent); + const docusaurusRouteSet = new Set(docusaurusRoutes); + + const docsBase = joinRoutePrefix(routePrefix, "/docs"); + const docsRoutes = docusaurusRoutes.filter( + (route) => route === docsBase || route.startsWith(`${docsBase}/`) + ); + const srcPagesCandidates = await collectPageFileRoutes(path.join(process.cwd(), "src", "pages")); + const srcPagesRoutes = srcPagesCandidates + .map((route) => joinRoutePrefix(routePrefix, route)) + .filter((route) => docusaurusRouteSet.has(route)); + const allRoutes = [...new Set([...docsRoutes, ...srcPagesRoutes])].sort((a, b) => a.localeCompare(b)); + + expect(allRoutes.length, "No routes discovered for docs/src pages visual test.").toBeGreaterThan(0); + + for (const route of allRoutes) { + await test.step(`visual ${route}`, async () => { + const response = await page.goto(route, { waitUntil: "domcontentloaded" }); + expect(response, `No response for route ${route}`).toBeTruthy(); + expect(response?.ok(), `Route failed: ${route} (HTTP ${response?.status()})`).toBeTruthy(); + + const notFoundHeading = page.getByRole("heading", { + name: /404|page not found/i + }); + expect( + await notFoundHeading.first().isVisible().catch(() => false), + `Route rendered 404 content: ${route}` + ).toBeFalsy(); + + // Warm up lazy-loaded content before taking full-page screenshots. + await page.evaluate(async () => { + window.scrollTo({ top: document.body.scrollHeight, behavior: "auto" }); + await new Promise((resolve) => setTimeout(resolve, 250)); + window.scrollTo({ top: 0, behavior: "auto" }); + }); + + await page.waitForTimeout(300); + + await expect(page).toHaveScreenshot(routeToSnapshotName(route), { + fullPage: true, + animations: "disabled", + caret: "hide" + }); + }); + } +}); From e18cc235cb304fcde3dbaccf346f952e25c45361 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:16:38 +0200 Subject: [PATCH 04/20] test: update Playwright configuration and add screenshot styles for visual regression tests --- playwright.config.ts | 19 ++++++-- tests/e2e/screenshot.css | 22 +++++++++ tests/e2e/visual-pages.spec.ts | 82 +++++++++++++++------------------- 3 files changed, 74 insertions(+), 49 deletions(-) create mode 100644 tests/e2e/screenshot.css diff --git a/playwright.config.ts b/playwright.config.ts index f71fa57f..56617c12 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -6,15 +6,28 @@ export default defineConfig({ retries: process.env.CI ? 1 : 0, fullyParallel: true, reporter: [["html", { open: "never" }]], + snapshotPathTemplate: "{testDir}/{testFilePath}-snapshots/{arg}-{projectName}{ext}", + expect: { + toHaveScreenshot: { + animations: "disabled", + caret: "hide", + scale: "css" + } + }, use: { baseURL: "http://127.0.0.1:3000", - trace: "on-first-retry" + trace: "on-first-retry", + viewport: { width: 1440, height: 900 }, + colorScheme: "light", + locale: "en-US", + timezoneId: "UTC", + reducedMotion: "reduce" }, webServer: { - command: "npm run start -- --host 127.0.0.1 --port 3000", + command: "npm run build && npm run serve -- --host 127.0.0.1 --port 3000", url: "http://127.0.0.1:3000", reuseExistingServer: !process.env.CI, - timeout: 120_000 + timeout: 300_000 }, projects: [ { diff --git a/tests/e2e/screenshot.css b/tests/e2e/screenshot.css new file mode 100644 index 00000000..974f6d5d --- /dev/null +++ b/tests/e2e/screenshot.css @@ -0,0 +1,22 @@ +/* Hide known flaky elements for deterministic screenshots */ +iframe, +.avatar__photo, +img[src$='.gif'], +.DocSearch-Button-Keys > kbd, +.theme-last-updated, +.docusaurus-mermaid-container, +[class*='playgroundPreview'] { + display: none !important; +} + +/* Video consent placeholders can shift layout */ +[class*='videoInfo'], +button[aria-label*='agree' i], +button[class*='agree' i] { + visibility: hidden !important; +} + +/* Reduce animated caret/cursor artifacts */ +* { + caret-color: transparent !important; +} diff --git a/tests/e2e/visual-pages.spec.ts b/tests/e2e/visual-pages.spec.ts index 016d2d9e..3d6646a4 100644 --- a/tests/e2e/visual-pages.spec.ts +++ b/tests/e2e/visual-pages.spec.ts @@ -4,16 +4,16 @@ import path from "node:path"; const PAGE_EXTENSIONS = new Set([".js", ".jsx", ".ts", ".tsx", ".md", ".mdx"]); -function normalizeRoute(route: string): string { - if (!route || route === "/") { +function normalizePathname(pathname: string): string { + if (!pathname || pathname === "/") { return "/"; } - return route.replace(/\/$/, ""); + return pathname.replace(/\/$/, ""); } function routeToSnapshotName(route: string): string { - const normalized = normalizeRoute(route); + const normalized = normalizePathname(route); if (normalized === "/") { return "root.png"; } @@ -21,9 +21,9 @@ function routeToSnapshotName(route: string): string { return `${normalized.replace(/^\//, "").replace(/\//g, "__")}.png`; } -function joinRoutePrefix(prefix: string, route: string): string { - const normalizedPrefix = normalizeRoute(prefix); - const normalizedRoute = normalizeRoute(route); +function joinPathPrefix(prefix: string, route: string): string { + const normalizedPrefix = normalizePathname(prefix); + const normalizedRoute = normalizePathname(route); if (normalizedRoute === "/") { return normalizedPrefix || "/"; @@ -33,23 +33,7 @@ function joinRoutePrefix(prefix: string, route: string): string { return normalizedRoute; } - return normalizeRoute(`${normalizedPrefix}${normalizedRoute}`); -} - -function extractRuntimeRoutes(routesFileContent: string): { routes: string[]; routePrefix: string } { - const rawPaths = [...routesFileContent.matchAll(/path:\s*'([^']+)'/g)].map((match) => match[1]); - - const docsPathSample = rawPaths.find((route) => route.includes("/docs/")) ?? "/docs/"; - const routePrefix = normalizeRoute(docsPathSample.split("/docs/")[0] || ""); - const normalizedRoutes = rawPaths - .map((route) => normalizeRoute(route)) - .filter((route) => route.startsWith("/")) - .filter((route) => !route.includes("*")); - - return { - routes: [...new Set(normalizedRoutes)], - routePrefix - }; + return normalizePathname(`${normalizedPrefix}${normalizedRoute}`); } async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise { @@ -87,12 +71,22 @@ async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise route = route.slice(0, -"/index".length) || "/"; } - routes.push(normalizeRoute(route)); + routes.push(normalizePathname(route)); } return routes; } +function extractSitemapPathnames(sitemapXml: string): string[] { + const locMatches = [...sitemapXml.matchAll(/(.*?)<\/loc>/g)]; + + return [...new Set(locMatches.map((match) => normalizePathname(new URL(match[1]).pathname)))]; +} + +function waitForDocusaurusHydration(): boolean { + return document.documentElement.dataset.hasHydrated === "true"; +} + test("visual regression for docs and src/pages routes", async ({ page, baseURL }) => { test.setTimeout(20 * 60_000); @@ -100,19 +94,22 @@ test("visual regression for docs and src/pages routes", async ({ page, baseURL } throw new Error("Playwright baseURL is not configured."); } - const routesFilePath = path.join(process.cwd(), ".docusaurus", "routes.js"); - const routesFileContent = await readFile(routesFilePath, "utf8"); - const { routes: docusaurusRoutes, routePrefix } = extractRuntimeRoutes(routesFileContent); - const docusaurusRouteSet = new Set(docusaurusRoutes); - - const docsBase = joinRoutePrefix(routePrefix, "/docs"); - const docsRoutes = docusaurusRoutes.filter( - (route) => route === docsBase || route.startsWith(`${docsBase}/`) + const screenshotStyles = await readFile(path.join(process.cwd(), "tests", "e2e", "screenshot.css"), "utf8"); + const sitemapPath = path.join(process.cwd(), "build", "sitemap.xml"); + const sitemapXml = await readFile(sitemapPath, "utf8"); + const sitemapPathnames = extractSitemapPathnames(sitemapXml); + const sitemapPathnameSet = new Set(sitemapPathnames); + + const docsPathSample = sitemapPathnames.find((pathname) => pathname.includes("/docs/")) ?? "/docs"; + const routePrefix = normalizePathname(docsPathSample.split("/docs/")[0] || ""); + const docsBase = joinPathPrefix(routePrefix, "/docs"); + const docsRoutes = sitemapPathnames.filter( + (pathname) => pathname === docsBase || pathname.startsWith(`${docsBase}/`) ); const srcPagesCandidates = await collectPageFileRoutes(path.join(process.cwd(), "src", "pages")); const srcPagesRoutes = srcPagesCandidates - .map((route) => joinRoutePrefix(routePrefix, route)) - .filter((route) => docusaurusRouteSet.has(route)); + .map((route) => joinPathPrefix(routePrefix, route)) + .filter((route) => sitemapPathnameSet.has(route)); const allRoutes = [...new Set([...docsRoutes, ...srcPagesRoutes])].sort((a, b) => a.localeCompare(b)); expect(allRoutes.length, "No routes discovered for docs/src pages visual test.").toBeGreaterThan(0); @@ -123,6 +120,9 @@ test("visual regression for docs and src/pages routes", async ({ page, baseURL } expect(response, `No response for route ${route}`).toBeTruthy(); expect(response?.ok(), `Route failed: ${route} (HTTP ${response?.status()})`).toBeTruthy(); + await page.waitForFunction(waitForDocusaurusHydration); + await page.addStyleTag({ content: screenshotStyles }); + const notFoundHeading = page.getByRole("heading", { name: /404|page not found/i }); @@ -131,19 +131,9 @@ test("visual regression for docs and src/pages routes", async ({ page, baseURL } `Route rendered 404 content: ${route}` ).toBeFalsy(); - // Warm up lazy-loaded content before taking full-page screenshots. - await page.evaluate(async () => { - window.scrollTo({ top: document.body.scrollHeight, behavior: "auto" }); - await new Promise((resolve) => setTimeout(resolve, 250)); - window.scrollTo({ top: 0, behavior: "auto" }); - }); - - await page.waitForTimeout(300); - await expect(page).toHaveScreenshot(routeToSnapshotName(route), { fullPage: true, - animations: "disabled", - caret: "hide" + timeout: 20_000 }); }); } From 6ff7a47f0e372cbcf644432ed6f60d7a6c1beaee Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:25:42 +0200 Subject: [PATCH 05/20] chore: formatting of /src/pages --- src/pages/index.js | 128 +++++++++++++++++++------------------ src/pages/index.module.css | 78 +++++++++++----------- 2 files changed, 105 insertions(+), 101 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index 84e8b9be..9890d80c 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -10,69 +10,73 @@ import styles from "./index.module.css"; import clsx from "clsx"; const features = [ - { - text: Your Domain, - imgUrl: "/img/nfdi4chem_Domains_white.svg", - alt: "Domains Icon", - url: "/docs/domain_guide", - }, - { - text: Your Role, - imgUrl: "/img/nfdi4chem_Roles_white.svg", - alt: "Roles Icon", - url: "/docs/role_guide", - }, - { - text: How to Handle Your Data, - imgUrl: "/img/nfdi4chem_Handling_Data_white.svg", - alt: "Handling Data Icon", - url: "/docs/data_guide", - }, - { - text: Electronic Lab Notebooks, - imgUrl: "/img/nfdi4chem_SmartLab_white.svg", - alt: "Electronic Lab Notebooks Icon", - url: "/docs/smartlab", - }, - { - text: How to Publish Your Data, - imgUrl: "/img/nfdi4chem_Data_Publication_white.svg", - alt: "Data Publishing Icon", - url: "/docs/data_publishing", - }, + { + text: Your Domain, + imgUrl: "/img/nfdi4chem_Domains_white.svg", + alt: "Domains Icon", + url: "/docs/domain_guide", + }, + { + text: Your Role, + imgUrl: "/img/nfdi4chem_Roles_white.svg", + alt: "Roles Icon", + url: "/docs/role_guide", + }, + { + text: How to Handle Your Data, + imgUrl: "/img/nfdi4chem_Handling_Data_white.svg", + alt: "Handling Data Icon", + url: "/docs/data_guide", + }, + { + text: Electronic Lab Notebooks, + imgUrl: "/img/nfdi4chem_SmartLab_white.svg", + alt: "Electronic Lab Notebooks Icon", + url: "/docs/smartlab", + }, + { + text: How to Publish Your Data, + imgUrl: "/img/nfdi4chem_Data_Publication_white.svg", + alt: "Data Publishing Icon", + url: "/docs/data_publishing", + }, ]; export default function Home() { - const { siteConfig } = useDocusaurusContext(); - return ( - -
-
-

{siteConfig.title}

-
-
-

- - A place for all knowledge regarding Research Data Management - (RDM) in Chemistry - -

-
-
- - Get started - -
-
- -
-
-
- ); + const { siteConfig } = useDocusaurusContext(); + return ( + +
+
+

{siteConfig.title}

+
+
+

+ + A place for all knowledge regarding Research + Data Management (RDM) in Chemistry + +

+
+
+ + Get started + +
+
+ +
+
+
+ ); } diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9e51b277..32384735 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -1,59 +1,59 @@ .hero { - display: flex; - flex-grow: 1; - padding: 2rem 0; - text-align: center; - width: 100%; - overflow: hidden; - background-color: var(--ifm-color-primary); - color: var(--ifm-color-white); - background-image: - url("/img/Background.png"), url("/img/Background_right.png"); - background-repeat: no-repeat; - background-position: - left top, - right top; + display: flex; + flex-grow: 1; + padding: 2rem 0; + text-align: center; + width: 100%; + overflow: hidden; + background-color: var(--ifm-color-primary); + color: var(--ifm-color-white); + background-image: + url("/img/Background.png"), url("/img/Background_right.png"); + background-repeat: no-repeat; + background-position: + left top, + right top; } @media screen and (max-width: 966px) { - .hero { - padding: 2rem; - background-image: url("/img/Background.png"); - background-repeat: no-repeat; - background-position: - left top, - right top; - } + .hero { + padding: 2rem; + background-image: url("/img/Background.png"); + background-repeat: no-repeat; + background-position: + left top, + right top; + } } .heroContainer { - margin: 0 auto; - max-width: var(--ifm-container-width); - padding: 0 var(--ifm-spacing-horizontal); - width: 100%; + margin: 0 auto; + max-width: var(--ifm-container-width); + padding: 0 var(--ifm-spacing-horizontal); + width: 100%; } .heroTitle { - color: var(--ifm-color-white); - text-align: left; - font-size: 2.5rem; + color: var(--ifm-color-white); + text-align: left; + font-size: 2.5rem; } .heroSubtitle { - font-size: 1.2rem; + font-size: 1.2rem; } .heroBanner { - padding: 2rem 0; - text-align: center; - position: center; - overflow: hidden; - --ifm-hero-background-color: var(--ifm-color-primary); - --ifm-hero-text-color: var(--ifm-color-white); + padding: 2rem 0; + text-align: center; + position: center; + overflow: hidden; + --ifm-hero-background-color: var(--ifm-color-primary); + --ifm-hero-text-color: var(--ifm-color-white); } @media screen and (max-width: 966px) { - .heroBanner { - padding: 2rem; - } + .heroBanner { + padding: 2rem; + } } From e3b0b5082f6bf5a9c8736a521181e49f9b007f3e Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:26:54 +0200 Subject: [PATCH 06/20] chore: formatting of /docs/00_intro --- docs/00_intro/00_intro.mdx | 36 ++++++++++++++-------------- docs/00_intro/20_data_life_cycle.mdx | 6 ++--- docs/00_intro/_category_.json | 10 ++++---- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/00_intro/00_intro.mdx b/docs/00_intro/00_intro.mdx index dd7331b4..d04286a1 100644 --- a/docs/00_intro/00_intro.mdx +++ b/docs/00_intro/00_intro.mdx @@ -25,9 +25,9 @@ At least and most importantly a loss of previously acquired data is always an [i ## Navigation through knowledge base The NFDI4Chem knowledge base provides information and recommendations to digitalise all key steps of chemical research to support scientists in their efforts to collect, store, process, analyse, publish, and reuse research data. @@ -43,9 +43,9 @@ The knowledge base offers different points of entry that help you in navigating The domain pages present an exemplary workflow for different chemistry disciplines along the research data life cycle. Multiple domains are illustrated in a user profile. Guidelines are provided for all digitisation steps involved and domain-specific best practices for FAIR data are given. Find out how to apply good RDM and FAIR science in the context of your own specific discipline! ### Role-specific information @@ -53,9 +53,9 @@ The domain pages present an exemplary workflow for different chemistry disciplin The role pages focus on the motivation for role-specific requirements and answer the questions why RDM is important and how it can be implemented. Get a fast impression of all important RDM information related to your role! ### Handling data @@ -63,9 +63,9 @@ The role pages focus on the motivation for role-specific requirements and answer The handling data section explains common problems and challenges regarding RDM. Problematic aspects of data handling are considered, starting with the creation of data management plans, data organisation and data documentation. Moreover, aspects on data storage and archiving are also covered. ### Smartlab @@ -73,9 +73,9 @@ The handling data section explains common problems and challenges regarding RDM. To enable fully digital workflows in chemistry, the development and provision of a modular virtual laboratory environment with concepts, services and software (smartlab) is essential. Electronic lab notebooks are an important part of the smartlab, as well as integration of analytical instrumentation and data transfer to repositories. ### Data Publishing @@ -83,9 +83,9 @@ To enable fully digital workflows in chemistry, the development and provision of In this category on data publishing you will find all the important information on the topic of data publishing. This includes the motivation to publish research data, paths to publish data, recommendations for research data repositories to be used, best practices and aspects of machine actionability. :::info Acknowledgements diff --git a/docs/00_intro/20_data_life_cycle.mdx b/docs/00_intro/20_data_life_cycle.mdx index 0ad28d55..193c3372 100644 --- a/docs/00_intro/20_data_life_cycle.mdx +++ b/docs/00_intro/20_data_life_cycle.mdx @@ -10,9 +10,9 @@ import FloatImage from "@site/src/components/commons/FloatImage.js"; ## Introduction In scientific work, the assurance of [good research practice](https://doi.org/10.5281/zenodo.3923602) is the highest imperative. diff --git a/docs/00_intro/_category_.json b/docs/00_intro/_category_.json index adbbf21d..f2dde9b8 100644 --- a/docs/00_intro/_category_.json +++ b/docs/00_intro/_category_.json @@ -1,7 +1,7 @@ { - "label": "Introduction", - "link": { - "type" : "doc", - "id" : "intro" - } + "label": "Introduction", + "link": { + "type": "doc", + "id": "intro" + } } From 39c94ec30924c57c747032cade5d11d19e206d7d Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:27:38 +0200 Subject: [PATCH 07/20] chore: formatting of /docs/10_domains --- docs/10_domains/_category_.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/10_domains/_category_.json b/docs/10_domains/_category_.json index fd2acf07..2f1b4a6b 100644 --- a/docs/10_domains/_category_.json +++ b/docs/10_domains/_category_.json @@ -1,7 +1,7 @@ { - "label": "Domains", - "link": { - "type" : "doc", - "id" : "domains_guide" - } + "label": "Domains", + "link": { + "type": "doc", + "id": "domains_guide" + } } From a910ae6db3a98a6fdc98416d8d7a99826137e194 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:28:14 +0200 Subject: [PATCH 08/20] chore: formatting of /docs/20_role --- docs/20_role/10_research_group_leader.mdx | 6 +++--- docs/20_role/20_research_group_member.mdx | 6 +++--- docs/20_role/50_core_facility_manager.mdx | 24 +++++++++++------------ docs/20_role/_category_.json | 10 +++++----- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/20_role/10_research_group_leader.mdx b/docs/20_role/10_research_group_leader.mdx index 5f868fd6..d113b154 100644 --- a/docs/20_role/10_research_group_leader.mdx +++ b/docs/20_role/10_research_group_leader.mdx @@ -12,9 +12,9 @@ This article applies to research group leaders, who plan to organise the RDM of ## Motivation As research group leader, you are responsible for the [research data organisation](/docs/data_organisation) of your group. Many research institutions and also most funding institutions require or give internal RDM guidelines (e.g. [DFG checklist](https://www.dfg.de/download/pdf/foerderung/grundlagen_dfg_foerderung/forschungsdaten/forschungsdaten_checkliste_de.pdf), BMBF, EU guidelines) and recommend the set-up of [data management plans](/docs/dmp) in order to ensure that the data are archived in a [FAIR](/docs/fair) (**F**indable, **A**ccessible, **I**nteroperable, **R**e-usable) manner. Many funding institutions encourage or even enforce the [publication](/docs/data_publishing) of FAIR data. diff --git a/docs/20_role/20_research_group_member.mdx b/docs/20_role/20_research_group_member.mdx index 94a78490..928caa66 100644 --- a/docs/20_role/20_research_group_member.mdx +++ b/docs/20_role/20_research_group_member.mdx @@ -16,9 +16,9 @@ As a research group member, you are the one who is doing the actual research. Th ## Data handling In recent years, many new digital tools have been developed to support researchers with their RDM needs. The technical possibilities are briefly explained below. For more details, please refer to the linked related chapters. If you want to learn more about domain-specific data production methods, have a look at the [domain-specific profiles](/docs/role_guide). diff --git a/docs/20_role/50_core_facility_manager.mdx b/docs/20_role/50_core_facility_manager.mdx index ad9cc659..20fefdc7 100644 --- a/docs/20_role/50_core_facility_manager.mdx +++ b/docs/20_role/50_core_facility_manager.mdx @@ -12,9 +12,9 @@ This article applies to core facility managers and heads of analytical service u ## Motivation In the chemistry data lifecycle, core facilities play an important role as major producers of chemical data. For modern analytical techniques such as mass spectrometry or NMR spectroscopy, data are usually recorded digitally and the challenges lie less in digitalisation but management issues. @@ -50,18 +50,18 @@ While most of the scientific work still lies ahead, there are already valuable m - Project - Sample identifier - Molecular structure(s), and derived properties: - - Molecular formula - - Molecular weight - - Elemental composition - - Physicochemical properties + - Molecular formula + - Molecular weight + - Elemental composition + - Physicochemical properties - Solvent or solubility - Purity - Experiment information of interest, such as: - - Retation time - - Polarity - - Ionisation method - - NMR nuclei and experiments - - Chiroptical data + - Retation time + - Polarity + - Ionisation method + - NMR nuclei and experiments + - Chiroptical data - Biological properties The challenge of digesting those metadata according to [FAIR guiding principles](/docs/fair/) can be a challenge for core facilities and essentially come down to two possible strategies: diff --git a/docs/20_role/_category_.json b/docs/20_role/_category_.json index 1d0ca68f..14b2b5f9 100644 --- a/docs/20_role/_category_.json +++ b/docs/20_role/_category_.json @@ -1,7 +1,7 @@ { - "label": "Roles", - "link": { - "type" : "doc", - "id" : "role_guide" - } + "label": "Roles", + "link": { + "type": "doc", + "id": "role_guide" + } } From c49aca8841c1155ea84ce40cb5feb717b70af89a Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:29:24 +0200 Subject: [PATCH 09/20] chore: formatting of /docs/30_data --- docs/30_data/00_data_guide.mdx | 36 +++++++++++++------------- docs/30_data/10_dmp.mdx | 24 ++++++++--------- docs/30_data/30_data_organisation.mdx | 24 ++++++++--------- docs/30_data/40_data_documentation.mdx | 22 ++++++++-------- docs/30_data/50_data_storage.mdx | 12 ++++++--- docs/30_data/_category_.json | 10 +++---- 6 files changed, 66 insertions(+), 62 deletions(-) diff --git a/docs/30_data/00_data_guide.mdx b/docs/30_data/00_data_guide.mdx index d3240121..610ad6d7 100644 --- a/docs/30_data/00_data_guide.mdx +++ b/docs/30_data/00_data_guide.mdx @@ -15,9 +15,9 @@ In this section, you can find information and resources about important topics a A data management plan (DMP) describes the strategies and measures for handling research data during and after a project. Its aim is to address and define the technical, organisational and legal aspects of research data management in a clearly defined document well in advance. Find out more about DMPs, how to write one and what tools are available: ### Data Organisation @@ -25,9 +25,9 @@ A data management plan (DMP) describes the strategies and measures for handling Learn how to organise your data, e.g. via appropriate file naming conventions and folder structures. In this context, data versioning, metadata & file formats are also introduced. ### Documentation @@ -35,9 +35,9 @@ Learn how to organise your data, e.g. via appropriate file naming conventions an Find out more about the tools, resources and software that can support you with data documentation. ### Data Storage and Archiving @@ -45,9 +45,9 @@ Find out more about the tools, resources and software that can support you with Storing and and archiving your data needs to be carefully considered. How many copies? Where? What access do I grant? Find out more: ### Data Publishing @@ -55,9 +55,9 @@ Storing and and archiving your data needs to be carefully considered. How many c Want to make your data available to others? Not quite sure how or where to publish your data? Find out more: ### How to choose the right repository @@ -65,7 +65,7 @@ Want to make your data available to others? Not quite sure how or where to publi Not sure which repository is the right one for your data? Find out more about selected reposoitories and what data types they are appropriate for: diff --git a/docs/30_data/10_dmp.mdx b/docs/30_data/10_dmp.mdx index 0f17bcaa..36cc40c5 100644 --- a/docs/30_data/10_dmp.mdx +++ b/docs/30_data/10_dmp.mdx @@ -80,18 +80,18 @@ NFDI4Chem offers a chemistry-specific Data Management Plan (DMP) template design The catalogue of questions is available as a [downloadable text document](https://doi.org/10.5281/zenodo.10948510) or can be used directly within the [Research Data Management Organizer (RDMO)](https://rdmo.nfdi4chem.de/). ## Sources and further information diff --git a/docs/30_data/30_data_organisation.mdx b/docs/30_data/30_data_organisation.mdx index 4c7eb7a2..e93afd40 100644 --- a/docs/30_data/30_data_organisation.mdx +++ b/docs/30_data/30_data_organisation.mdx @@ -27,11 +27,11 @@ Find a balanced set of elements: Too many make it difficult to grasp quickly, wh :::note General basics for naming files: -- Order the elements from general to specific. -- Use meaningful abbreviations instead of long identifiers. -- Use underscore `_`, hyphen `-` or capitalized letters to separate elements in the name. Don’t use spaces or special characters: `?!&,%#;()@$^~‘{}[]<>`. -- Use date format ISO8601: `YYYYMMDD`, and time if needed `HHMMSS`. -- Include a version number if appropriate: minimum two digits (V02) and extend it, if needed for minor corrections (V02-03). The leading zeros, will ensure the files are sorted correctly. +- Order the elements from general to specific. +- Use meaningful abbreviations instead of long identifiers. +- Use underscore `_`, hyphen `-` or capitalized letters to separate elements in the name. Don’t use spaces or special characters: `?!&,%#;()@$^~‘{}[]<>`. +- Use date format ISO8601: `YYYYMMDD`, and time if needed `HHMMSS`. +- Include a version number if appropriate: minimum two digits (V02) and extend it, if needed for minor corrections (V02-03). The leading zeros, will ensure the files are sorted correctly. (by [RDMKit](https://rdmkit.elixir-europe.org/data_organisation.html#what-is-the-best-way-to-name-a-file)) ::: @@ -57,12 +57,12 @@ A good file name such as `20180211_ELI5_TEMP_BH01_RAW_03.csv` can easily be sort If you need to rename multiple files, take a look at: -- [Thunar Bulk Rename](https://docs.xfce.org/xfce/thunar/bulk-renamer/start) (Linux, GUI) -- [command line: mv, mmv, rename](https://linuxconfig.org/how-to-rename-multiple-files-on-linux) (Linux, CLI) -- [Bulk Rename Utility](https://www.bulkrenameutility.co.uk/) (Windows, free) -- [A.F.5 Rename your files](http://fauland.com/download.htm) (Windows, free) -- [TotalCommander](https://www.ghisler.com/advanced.htm#tutorial_rename) (Windows, Shareware) -- [Renamer4Mac](https://renamer.com/) (Mac). +- [Thunar Bulk Rename](https://docs.xfce.org/xfce/thunar/bulk-renamer/start) (Linux, GUI) +- [command line: mv, mmv, rename](https://linuxconfig.org/how-to-rename-multiple-files-on-linux) (Linux, CLI) +- [Bulk Rename Utility](https://www.bulkrenameutility.co.uk/) (Windows, free) +- [A.F.5 Rename your files](http://fauland.com/download.htm) (Windows, free) +- [TotalCommander](https://www.ghisler.com/advanced.htm#tutorial_rename) (Windows, Shareware) +- [Renamer4Mac](https://renamer.com/) (Mac). For some special file formats there are tools for adapting the file name to the metadata. For example, to create a file name that fits your scheme and takes date and time information from the EXIF data of a jpg file. Some also allow adding an offset - this helps sort photos into timestamps that run on different clocks. @@ -110,7 +110,7 @@ Folders should: The top folder should have a README.txt file describing the folder structure and what files are contained within the folders. This file should also contain explanation of the file naming convention. -If you need help getting started with a structure for your projects, methods such as [Jonny Decimal](https://johnnydecimal.com/) can help. +If you need help getting started with a structure for your projects, methods such as [Jonny Decimal](https://johnnydecimal.com/) can help. #### An example by [RDMKit](https://rdmkit.elixir-europe.org/data_organisation.html#what-is-the-best-way-to-name-a-file): diff --git a/docs/30_data/40_data_documentation.mdx b/docs/30_data/40_data_documentation.mdx index 947e7a36..4f8c3d7c 100644 --- a/docs/30_data/40_data_documentation.mdx +++ b/docs/30_data/40_data_documentation.mdx @@ -18,9 +18,9 @@ _Andreas von der Dunk, Technische Universität Dresden, Service Center Research ## General basics A clean and comprehensible organisation of data and documents are an important part of good research practice and an important step to realise research data management according to the [FAIR data principles](/docs/fair). @@ -56,19 +56,19 @@ Data security affects all technical and organisational issues to protect the dat ## Synopsis Good data documentation does not happen over night - take small steps first. The documentation of research data is primarily an organisational problem that is accompanied and supported by technological measures: - Record of status quo: - - Which organisational processes have been used so far and which technologies support them? - - What are the regulatory boundaries and technical limits? - - Which personal roles are involved? - - Which devices or file formats are or have been used? - - Are there any special features? + - Which organisational processes have been used so far and which technologies support them? + - What are the regulatory boundaries and technical limits? + - Which personal roles are involved? + - Which devices or file formats are or have been used? + - Are there any special features? - Awareness: Who produces (meta)data, and who continues to use data and how? - Define internal rules and processes: What are the targets of RDM, and how can they be achieved? - Apply and evaluate rules iteratively: Learn, set, follow, repeat. Keep it simple and smart (KISS). diff --git a/docs/30_data/50_data_storage.mdx b/docs/30_data/50_data_storage.mdx index d799e8b4..decd0cc5 100644 --- a/docs/30_data/50_data_storage.mdx +++ b/docs/30_data/50_data_storage.mdx @@ -9,11 +9,13 @@ slug: "/data_storage" If you plan to collect data and process it into information, you should consider different types of storage with regard to security, backup, access time and sharing with others. It is also of interest [to estimate the computational resources for data processing and analysis](https://rdmkit.elixir-europe.org/storage.html#how-do-you-estimate-computational-resources-for-data-processing-and-analysis). There are different requirements for the entire [Data Life Cycle](/docs/data_life_cycle/). Regarding the workflows used in a project, care should also be taken when securing these workflows and tools (software version!) to ensure the reproducibility of results. ## Workflow perspective + Let's discuss different storage solutions along a possible workflow. Think of all possible data sources that provide data in your project, such as laboratory equipment (devices), manually collected data or external data from publications or project partners. Some devices may continuously automatically deliver data points, while others regularly provide files for collection. Reduce the amount to the data points necessary for your project, consider possible pre-processing and estimate the data that will arise in terms of frequency and size. It is possible that a part of the data has already been processed, while other data of the same type is still being recorded. At what point in the workflow is the data annotated by further metadata, and does this possibly also work automatically? What descriptive documents are provided by human sources and when? In the [planning phase](/docs/dmp/) of a research activity, think about storage solutions and request short-term and long-term storage in advance. #### Necessary requirements when designing a storage system: + - space requirements for collection or generation of raw data including temporary files ("fast storage") - space requirements for data that can be permanently accessed over the duration of the project - access requirements to the data (in case of collaborative projects): expected access ways and purpose @@ -25,13 +27,15 @@ In the [planning phase](/docs/dmp/) of a research activity, think about storage - requirements on version control to keep track of changes, conflict resolution, data mentoring and back-tracing capabilities Involve the IT team of your home organisation — they can also provide advice on a tiered storage system: + - "hot" storage: fast access speed, high access frequency, high value data -> high cost - "cold" storage: low access speed and frequency, usually off-premises -> low cost - preservation solutions (data archiving services) - #### No backup? No mercy! + The 3-2-1-0 rule: + - there should be **3** copies of data - on **2** different media - with **1** copy being offline @@ -39,14 +43,14 @@ The 3-2-1-0 rule: Why? Sometimes it's not a technical problem, but a "layer-8"-issue: human error. - ### Ok, I'm lost — this is far from my business. Many of the requirements are often solved by dedicated [repositories](/docs/repositories/). It is also worth taking a look at group drives or cloud services such as NextCloud (on-premises). Your local IT team and computing centre will help you with services that they usually support. But nevertheless: Make sure to generate good documentation (i.e., README file) and metadata together with the data. Check if your institute provides a (meta)data management system, such as iRODS, DataVerse, FAIRDOM-SEEK or OSF. - ## Nirvana — your data in the FAIR-paradise + :::info Preservation + > Relevant (meta)data (to guarantee reproducibility) should be preserved for a certain amount of time, that is usually defined by funders or institution policy. However, where to preserve data that are not needed for active processing or analysis anymore is a common question in data management. _see [RDMKit](https://rdmkit.elixir-europe.org/preserving)_ @@ -56,8 +60,8 @@ Data documentation is complete; files are converted into long-term backup format If you publish your data in public repositories, your data will also be preserved. - ## Sources and further information + - https://rdmkit.elixir-europe.org/storage.html - https://www.rdm.kit.edu/index.php - https://www.druva.com/glossary/what-is-data-archiving-definition-and-related-faqs/ diff --git a/docs/30_data/_category_.json b/docs/30_data/_category_.json index e2926000..9fc6bead 100644 --- a/docs/30_data/_category_.json +++ b/docs/30_data/_category_.json @@ -1,7 +1,7 @@ { - "label": "Handling Data", - "link": { - "type" : "doc", - "id" : "data_guide" - } + "label": "Handling Data", + "link": { + "type": "doc", + "id": "data_guide" + } } From 6fb302d15f4afb81485b16a47d96ae989e83820d Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:30:13 +0200 Subject: [PATCH 10/20] chore: formatting of /docs/40_smartlab --- docs/40_smartlab/00_smartlab.mdx | 6 +- docs/40_smartlab/10_eln.mdx | 132 +++++++++++++++---------------- docs/40_smartlab/_category_.json | 10 +-- 3 files changed, 74 insertions(+), 74 deletions(-) diff --git a/docs/40_smartlab/00_smartlab.mdx b/docs/40_smartlab/00_smartlab.mdx index a564d31b..86da7507 100644 --- a/docs/40_smartlab/00_smartlab.mdx +++ b/docs/40_smartlab/00_smartlab.mdx @@ -28,7 +28,7 @@ In this section, key components of the smart lab will be introduced to you. ## Get started: diff --git a/docs/40_smartlab/10_eln.mdx b/docs/40_smartlab/10_eln.mdx index 8368923d..db97aa66 100644 --- a/docs/40_smartlab/10_eln.mdx +++ b/docs/40_smartlab/10_eln.mdx @@ -6,8 +6,8 @@ id: "eln" import FloatImage from "@site/src/components/commons/FloatImage.js"; import { - BulletContainer, - BulletBox, + BulletContainer, + BulletBox, } from "@site/src/components/commons/BulletBox"; # Electronic Lab Notebooks (ELNs) @@ -21,38 +21,38 @@ Bringing advances in information technology to our labs (smartlab) does not nece One of the most important things that distinguishes an ELN from a blank piece of paper is the ability to document [metadata](/docs/metadata) in a structured and ideally human and machine-readable manner. For more information on the differences between simple systems, ELNs, and Laboratory Information Management Systems (LIMS), see the following overview. - -

Simple system

-
    -
  • Enter text
  • -
  • Add notes
  • -
  • Add files as attachments
  • -
  • Sharing
  • -
  • Searching
  • -
- e.g., Evernote GoogleDrive, Dropbox, MS Sharepoint -
- -

Electronic Lab Notebook (ELN)

-
    -
  • Structured metadata in human and machine-readable formats
  • -
  • Discipline-specific functions / editors
  • -
  • Rights management
  • -
  • Audit trail
  • -
  • API
  • -
- e.g., Labfolder, RSpace, eLabFTW, Labguru -
- -

Laboratory Information Management System

-
    -
  • Sample management
  • -
  • Instrument integration
  • -
  • Electronic signatures
  • -
  • Reporting or statistics modules
  • -
- e.g., Benchling, Starlims, Limesophy -
+ +

Simple system

+
    +
  • Enter text
  • +
  • Add notes
  • +
  • Add files as attachments
  • +
  • Sharing
  • +
  • Searching
  • +
+ e.g., Evernote GoogleDrive, Dropbox, MS Sharepoint +
+ +

Electronic Lab Notebook (ELN)

+
    +
  • Structured metadata in human and machine-readable formats
  • +
  • Discipline-specific functions / editors
  • +
  • Rights management
  • +
  • Audit trail
  • +
  • API
  • +
+ e.g., Labfolder, RSpace, eLabFTW, Labguru +
+ +

Laboratory Information Management System

+
    +
  • Sample management
  • +
  • Instrument integration
  • +
  • Electronic signatures
  • +
  • Reporting or statistics modules
  • +
+ e.g., Benchling, Starlims, Limesophy +
## Advantages of an ELN @@ -60,24 +60,24 @@ One of the most important things that distinguishes an ELN from a blank piece of ELNs help link experimental descriptions directly to the collected data so that all information can be found in one place. Furthermore, data loss is avoided by secure data storage and backups. Storing all the data in one central place also assists with knowledge management since the data is findable and accessible, even for new members in a research project. The biggest advantage of an ELN is that [metadata](/docs/metadata) is stored in a structured and [standardised](/docs/data_formats) manner. This also helps with publishing research results and transferring research data to a repository. - -

Avoid Data Loss

-
    -
  • - Linking experimental descriptions to collected data (analogue and - digital) -
  • -
  • Secure data storage, backups
  • -
-
- -

Knowledge Management

-
    -
  • Data is findable
  • -
  • Data is accessible
  • -
  • Data is available, even after change of personnel
  • -
-
+ +

Avoid Data Loss

+
    +
  • + Linking experimental descriptions to collected data (analogue + and digital) +
  • +
  • Secure data storage, backups
  • +
+
+ +

Knowledge Management

+
    +
  • Data is findable
  • +
  • Data is accessible
  • +
  • Data is available, even after change of personnel
  • +
+
@@ -90,20 +90,20 @@ ELNs help link experimental descriptions directly to the collected data so that - -

Standardised Documentation

-
    -
  • Structured and standardised collection of metadata
  • -
  • Generation of interoperable (meta)data
  • -
-
- -

Publication

-
    -
  • Data provision for publication of research results
  • -
  • Simple transfer of data to repositories
  • -
-
+ +

Standardised Documentation

+
    +
  • Structured and standardised collection of metadata
  • +
  • Generation of interoperable (meta)data
  • +
+
+ +

Publication

+
    +
  • Data provision for publication of research results
  • +
  • Simple transfer of data to repositories
  • +
+
FAIR Image Attribution: SangyaPundir, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0). diff --git a/docs/40_smartlab/_category_.json b/docs/40_smartlab/_category_.json index f3236e09..857dc609 100644 --- a/docs/40_smartlab/_category_.json +++ b/docs/40_smartlab/_category_.json @@ -1,7 +1,7 @@ { - "label": "SmartLab", - "link": { - "type" : "doc", - "id" : "smartlab" - } + "label": "SmartLab", + "link": { + "type": "doc", + "id": "smartlab" + } } From 773e2e28daa76f4f9f5a1ad43555ccce9c3255a0 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:30:59 +0200 Subject: [PATCH 11/20] chore: formatting of /docs/40_smartlab/41_chemotion_eln --- .../41_chemotion_eln/10_chemotion.mdx | 90 +++++++++---------- .../20_chemotion_experimentDesign.mdx | 32 +++---- .../50_chemotion_dataCollection.mdx | 32 +++---- .../60_chemotion_analysis.mdx | 50 +++++------ .../70_chemotion_dataPublication.mdx | 20 ++--- 5 files changed, 112 insertions(+), 112 deletions(-) diff --git a/docs/40_smartlab/41_chemotion_eln/10_chemotion.mdx b/docs/40_smartlab/41_chemotion_eln/10_chemotion.mdx index cc3ef40a..08143281 100644 --- a/docs/40_smartlab/41_chemotion_eln/10_chemotion.mdx +++ b/docs/40_smartlab/41_chemotion_eln/10_chemotion.mdx @@ -33,11 +33,11 @@ To get an overview on how and with which tools Chemotion ELN supports you throug --- ### Experiment Design {#experiment_design} @@ -49,11 +49,11 @@ Chemotion assists in experiment design and planning research by offering embedde --- ### Experiment {#experiment} @@ -65,11 +65,11 @@ During experiments, Chemotion supports researchers with _automated calculations_ --- ### Data Collection and Processing {#collection_processing} @@ -81,11 +81,11 @@ For seamless workflows, _analytical devices_ can be connected and directly acces --- ### Analysis {#analysis} @@ -97,11 +97,11 @@ Analyses can be performed directly in the Chemotion ELN by utilizing one of the --- ### Data Publication {#publication} @@ -113,10 +113,10 @@ The Chemotion ELN is connected to several _data repositories_. Incorperated publ --- ### Data Re-Use {#reuse} @@ -134,23 +134,23 @@ In addition to its primary focus on chemistry, the ELN is also utilized in vario A short introduction to the Chemotion ELN as well as the connection to the Chemotion repository is demonstrated in this video: - + ## Documentation, Information, and Contact diff --git a/docs/40_smartlab/41_chemotion_eln/20_chemotion_experimentDesign.mdx b/docs/40_smartlab/41_chemotion_eln/20_chemotion_experimentDesign.mdx index 0e3857c5..c355fe28 100644 --- a/docs/40_smartlab/41_chemotion_eln/20_chemotion_experimentDesign.mdx +++ b/docs/40_smartlab/41_chemotion_eln/20_chemotion_experimentDesign.mdx @@ -9,22 +9,22 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; import ChemotionCarousel from "@site/src/components/chemotion/ChemotionCarousel"; In the Chemotion ELN, various entry types can be generated for planning various experimental setups. Generally, all entry types offer the possibility to draw chemical structures directly within the ELN. This is realized by embedded structure editors: _ketcher-rails_ and _Ketcher 2_ are integrated as default structure editors, while _ChemDraw JS_ and _Marvin JS_ can be integrated when the needed licences are available. diff --git a/docs/40_smartlab/41_chemotion_eln/50_chemotion_dataCollection.mdx b/docs/40_smartlab/41_chemotion_eln/50_chemotion_dataCollection.mdx index ebe8138d..8423a96a 100644 --- a/docs/40_smartlab/41_chemotion_eln/50_chemotion_dataCollection.mdx +++ b/docs/40_smartlab/41_chemotion_eln/50_chemotion_dataCollection.mdx @@ -9,22 +9,22 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; import ChemotionCarousel from "@site/src/components/chemotion/ChemotionCarousel"; Analytical data are typically generated and stored in a fully digital format. However, there is often a disconnect between these data, the associated analytical devices, and the laboratory notebook documenting the experiments. Chemotion ELN addresses this issue by enabling the integration of analytical devices with the ELN through [device integration](https://doi.org/10.1016/j.acax.2019.100007). This feature not only facilitates linking devices to the ELN and experiments but also allows for remote control of the devices. As a result, users can manage device operations, initiate measurements, and monitor progress directly within the ELN from any location. diff --git a/docs/40_smartlab/41_chemotion_eln/60_chemotion_analysis.mdx b/docs/40_smartlab/41_chemotion_eln/60_chemotion_analysis.mdx index d8e182a0..8ebaa2e0 100644 --- a/docs/40_smartlab/41_chemotion_eln/60_chemotion_analysis.mdx +++ b/docs/40_smartlab/41_chemotion_eln/60_chemotion_analysis.mdx @@ -10,34 +10,34 @@ import ChemotionCarousel from "@site/src/components/chemotion/ChemotionCarousel" import FloatImage from "@site/src/components/commons/FloatImage"; After the [transfer and potential conversion of analytical diff --git a/docs/40_smartlab/41_chemotion_eln/70_chemotion_dataPublication.mdx b/docs/40_smartlab/41_chemotion_eln/70_chemotion_dataPublication.mdx index c5a05e7d..07ccdfb7 100644 --- a/docs/40_smartlab/41_chemotion_eln/70_chemotion_dataPublication.mdx +++ b/docs/40_smartlab/41_chemotion_eln/70_chemotion_dataPublication.mdx @@ -31,11 +31,11 @@ import FloatImage from "@site/src/components/commons/FloatImage"; /> {/* prettier-ignore-start */} @@ -55,11 +55,11 @@ work available to their research community. {/* prettier-ignore-end */} Furthermore, Chemotion ELN is connected to other repositories such as From d121b0085d36f86a96c34e9ba6a4e26a73ad18e3 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:31:58 +0200 Subject: [PATCH 12/20] chore: formatting of /docs/50_data_publishing --- docs/50_data_publication/10_repositories.mdx | 14 ++++---- .../10_choose_repository.mdx | 36 +++++++++---------- .../30_chemotion_repo.mdx | 30 ++++++++-------- .../20_choose_repository/40_massbank_eu.mdx | 20 +++++------ .../20_choose_repository/50_nmrxiv.mdx | 20 +++++------ .../20_choose_repository/60_nomad.mdx | 20 +++++------ .../20_choose_repository/60_radar4chem.mdx | 26 +++++++------- .../20_choose_repository/70_strenda_db.mdx | 26 +++++++------- .../20_choose_repository/80_suprabank.mdx | 20 +++++------ .../20_choose_repository/90_csd_icsd.mdx | 36 +++++++++---------- .../20_choose_repository/_category_.json | 10 +++--- .../51_lbe/00_lbe_intro.mdx | 6 ++-- .../51_lbe/_category_.json | 12 +++---- ...30_publishing_standards_infrastructure.mdx | 6 ++-- .../70_publishing_standards/_category_.json | 12 +++---- docs/50_data_publication/_category_.json | 10 +++--- 16 files changed, 152 insertions(+), 152 deletions(-) diff --git a/docs/50_data_publication/10_repositories.mdx b/docs/50_data_publication/10_repositories.mdx index afa46395..2e822dc4 100644 --- a/docs/50_data_publication/10_repositories.mdx +++ b/docs/50_data_publication/10_repositories.mdx @@ -12,8 +12,8 @@ Research data repositories are locations where digital objects are stored and ma Repositories can be classified mainly according to: -- the type of objects to be stored (e.g. scientific articles or research data) and -- the domain of the data contained (discipline-specific or generic repositories), +- the type of objects to be stored (e.g. scientific articles or research data) and +- the domain of the data contained (discipline-specific or generic repositories), Repositories can be hosted at institutional servers or are provided by broader organisations or consortia such as NFDI4Chem. The use of repositories is essential for data deposition according to the [FAIR Data Principles](/docs/fair). @@ -41,11 +41,11 @@ To ease the selection of a suitable research data repository for chemistry resea ## Sources and further information -- [RDA Repository Platforms for Research Data interest group](https://www.rd-alliance.org/groups/repository-platforms-research-data/activity/) -- [FAIRsFAIR Repository Support Series: Using registries to improve the visibility of your repository service](https://www.dcc.ac.uk/events/fairsfair-repository-support-series-using-registries-improve-visibility-your-repository) -- [The Repository Chemotion: infrastructure for sustainable research in chemistry](https://doi.org/10.1002/anie.202007702) -- [Chemotion ELN: an open source electronic lab notebook for chemists in academia](https://doi.org/10.1186/s13321-017-0240-0) -- [Was ist ein Repositorium?](https://www.forschungsdaten.info/themen/veroeffentlichen-und-archivieren/repositorien/) on Forschungsdaten.info (in German) +- [RDA Repository Platforms for Research Data interest group](https://www.rd-alliance.org/groups/repository-platforms-research-data/activity/) +- [FAIRsFAIR Repository Support Series: Using registries to improve the visibility of your repository service](https://www.dcc.ac.uk/events/fairsfair-repository-support-series-using-registries-improve-visibility-your-repository) +- [The Repository Chemotion: infrastructure for sustainable research in chemistry](https://doi.org/10.1002/anie.202007702) +- [Chemotion ELN: an open source electronic lab notebook for chemists in academia](https://doi.org/10.1186/s13321-017-0240-0) +- [Was ist ein Repositorium?](https://www.forschungsdaten.info/themen/veroeffentlichen-und-archivieren/repositorien/) on Forschungsdaten.info (in German) _This page is licensed under a Creative Commons Universal ([CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.en)) Public Domain Dedication International License._ diff --git a/docs/50_data_publication/20_choose_repository/10_choose_repository.mdx b/docs/50_data_publication/20_choose_repository/10_choose_repository.mdx index b24a0aef..77613416 100644 --- a/docs/50_data_publication/20_choose_repository/10_choose_repository.mdx +++ b/docs/50_data_publication/20_choose_repository/10_choose_repository.mdx @@ -9,13 +9,13 @@ import useBaseUrl from "@docusaurus/useBaseUrl"; import DecisionTree from "@site/src/components/repos/DecisionTree"; import { - BulletContainer, - BulletBox, + BulletContainer, + BulletBox, } from "@site/src/components/commons/BulletBox"; import { - repositoryData, - repositoryStyle, - RepoDiv, + repositoryData, + repositoryStyle, + RepoDiv, } from "@site/src/components/repos/repoCardData"; The NFDI4Chem aims to support researchers in collecting, storing, processing, analysing, publishing, and reusing research data. Based on the [NFDI4Chem Community Survey](https://doi.org/10.1002/zaac.202000339), a list of the most [common data types and formats](/docs/pub_data_types_formats) of the community has been compiled to suggests suitable trusted chemistry-friendly repositories. @@ -33,22 +33,22 @@ Based on the [criteria](https://doi.org/10.3897/rio.6.e55852) chosen by Task Are ## Core Repositories - {repositoryData.map((repo, index) => ( - - - - - {repo.description} - - ))} + {repositoryData.map((repo, index) => ( + + + + + {repo.description} + + ))} - - \*Resource which does not accept direct submission of MS data in vendor or - mzML format, but data in MassBank format, see - [RMassBank](https://bioconductor.org/packages/release/bioc/html/RMassBank.html). - + + \*Resource which does not accept direct submission of MS data in vendor + or mzML format, but data in MassBank format, see + [RMassBank](https://bioconductor.org/packages/release/bioc/html/RMassBank.html). + ## Associated repositories diff --git a/docs/50_data_publication/20_choose_repository/30_chemotion_repo.mdx b/docs/50_data_publication/20_choose_repository/30_chemotion_repo.mdx index 5f3a3a84..98722618 100644 --- a/docs/50_data_publication/20_choose_repository/30_chemotion_repo.mdx +++ b/docs/50_data_publication/20_choose_repository/30_chemotion_repo.mdx @@ -8,30 +8,30 @@ import RepoButton from "@site/src/components/repos/RepoButton"; _Repository for Samples, Reactions and Research data_ :::info Quick facts - **Accepted data types:** - - Mass spectrometry: mzML, mzXML, JCAMP-DX, vendor formats such as Thermo RAW are accepted and converted to mzML with Proteowizard's msconvert. - - NMR: Bruker format (as ZIP) and JCAMP-DX. - - IR and Raman: JCAMP-DX - - XRD: JCAMP-DX, - - UV-VIS: JCAMP-DX, - - Cyclic voltammetry: JCAMP-DX, vendor formats such as Gamry DTA, Metrohm CSV and TXT and PalmSens PSSESSION are accepted and converted by ChemConverter. + - Mass spectrometry: mzML, mzXML, JCAMP-DX, vendor formats such as Thermo RAW are accepted and converted to mzML with Proteowizard's msconvert. + - NMR: Bruker format (as ZIP) and JCAMP-DX. + - IR and Raman: JCAMP-DX + - XRD: JCAMP-DX, + - UV-VIS: JCAMP-DX, + - Cyclic voltammetry: JCAMP-DX, vendor formats such as Gamry DTA, Metrohm CSV and TXT and PalmSens PSSESSION are accepted and converted by ChemConverter. - **Used standards/ontologies:** [DataCite Metadata Schema](https://schema.datacite.org/), InChI and InChIKey, SMILES, Biovia Molfile V2000 and V3000, Chemical Methods/[CHMO Ontology](http://www.ontobee.org/ontology/CHMO), Name Reaction Ontology/[RXNO Ontology](http://www.ontobee.org/ontology/RXNO). - **Data deposition condition:** open - **Recommended by Journals/Societies:** Recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. diff --git a/docs/50_data_publication/20_choose_repository/40_massbank_eu.mdx b/docs/50_data_publication/20_choose_repository/40_massbank_eu.mdx index 589fec4b..04c9c725 100644 --- a/docs/50_data_publication/20_choose_repository/40_massbank_eu.mdx +++ b/docs/50_data_publication/20_choose_repository/40_massbank_eu.mdx @@ -9,22 +9,22 @@ _High Quality Mass Spectrometry Reference Database_ :::info Quick facts -- **Accepted data types:** MassBank format, see [RMassBank](https://bioconductor.org/packages/release/bioc/html/RMassBank.html). -- **Used standards/ontologies:** [MassBank Record Format](https://github.com/MassBank/MassBank-web/blob/main/Documentation/MassBankRecordFormat.md) -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** Official database of the [Mass Spectrometry Society of Japan](https://www.mssj.jp/index_en.html) +- **Accepted data types:** MassBank format, see [RMassBank](https://bioconductor.org/packages/release/bioc/html/RMassBank.html). +- **Used standards/ontologies:** [MassBank Record Format](https://github.com/MassBank/MassBank-web/blob/main/Documentation/MassBankRecordFormat.md) +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** Official database of the [Mass Spectrometry Society of Japan](https://www.mssj.jp/index_en.html) ::: diff --git a/docs/50_data_publication/20_choose_repository/50_nmrxiv.mdx b/docs/50_data_publication/20_choose_repository/50_nmrxiv.mdx index f82ab197..c5976a1e 100644 --- a/docs/50_data_publication/20_choose_repository/50_nmrxiv.mdx +++ b/docs/50_data_publication/20_choose_repository/50_nmrxiv.mdx @@ -9,22 +9,22 @@ import RepoButton from "@site/src/components/repos/RepoButton"; :::info Quick facts -- **Accepted data types:** all major NMR data formats – NMReData, Bruker -- **Used standards/ontologies:** [ontologies used](https://docs.nmrxiv.org/introduction/data/ontologies.html) -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** The repository is recommended by [The Journal of Natural Products](https://pubs.acs.org/doi/10.1021/acs.jnatprod.3c00281) and by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors) +- **Accepted data types:** all major NMR data formats – NMReData, Bruker +- **Used standards/ontologies:** [ontologies used](https://docs.nmrxiv.org/introduction/data/ontologies.html) +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** The repository is recommended by [The Journal of Natural Products](https://pubs.acs.org/doi/10.1021/acs.jnatprod.3c00281) and by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors) ::: diff --git a/docs/50_data_publication/20_choose_repository/60_nomad.mdx b/docs/50_data_publication/20_choose_repository/60_nomad.mdx index b252e513..c912f502 100644 --- a/docs/50_data_publication/20_choose_repository/60_nomad.mdx +++ b/docs/50_data_publication/20_choose_repository/60_nomad.mdx @@ -9,22 +9,22 @@ _NOvel MAterials Discovery_ :::info Quick facts -- **Accepted data types:** [50 supported codes](https://nomad-lab.eu/prod/v1/gui/about/information) -- **Used standards/ontologies:** DataCite; no ontology at the moment (planned to create ontologies for specific parts of the data) -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** The repository is recommended by [Scientific Data](https://www.nature.com/sdata/policies/repositories#materials), recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. +- **Accepted data types:** [50 supported codes](https://nomad-lab.eu/prod/v1/gui/about/information) +- **Used standards/ontologies:** DataCite; no ontology at the moment (planned to create ontologies for specific parts of the data) +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** The repository is recommended by [Scientific Data](https://www.nature.com/sdata/policies/repositories#materials), recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. ::: diff --git a/docs/50_data_publication/20_choose_repository/60_radar4chem.mdx b/docs/50_data_publication/20_choose_repository/60_radar4chem.mdx index f524fb0c..79c4a989 100644 --- a/docs/50_data_publication/20_choose_repository/60_radar4chem.mdx +++ b/docs/50_data_publication/20_choose_repository/60_radar4chem.mdx @@ -8,27 +8,27 @@ import RepoButton from "@site/src/components/repos/RepoButton"; _Research Data Repository for Chemistry_ :::info Quick facts -- **Accepted data types:** All data types/formats ([format recommendations](https://radar.products.fiz-karlsruhe.de/en/radarabout/dateiformate) exist) -- **Used standards/ontologies:** [RADAR Metadata Schema](https://radar.products.fiz-karlsruhe.de/en/radarfeatures/radar-metadatenschema) (based on DataCite Metadata Schema 4.0), Dublin Core, schema.org -- **Data deposition condition:** controlled -- **Recommended by Journals/Societies:** Recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. +- **Accepted data types:** All data types/formats ([format recommendations](https://radar.products.fiz-karlsruhe.de/en/radarabout/dateiformate) exist) +- **Used standards/ontologies:** [RADAR Metadata Schema](https://radar.products.fiz-karlsruhe.de/en/radarfeatures/radar-metadatenschema) (based on DataCite Metadata Schema 4.0), Dublin Core, schema.org +- **Data deposition condition:** controlled +- **Recommended by Journals/Societies:** Recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. ::: diff --git a/docs/50_data_publication/20_choose_repository/70_strenda_db.mdx b/docs/50_data_publication/20_choose_repository/70_strenda_db.mdx index c5b3b30c..ca5155ef 100644 --- a/docs/50_data_publication/20_choose_repository/70_strenda_db.mdx +++ b/docs/50_data_publication/20_choose_repository/70_strenda_db.mdx @@ -8,27 +8,27 @@ import RepoButton from "@site/src/components/repos/RepoButton"; _Repository for Reporting Enzymology Data_ :::info Quick facts -- **Accepted data types:** Currently none, EnzymeML (in development) -- **Used standards/ontologies:** DataCite, InChI, [EnzymeML (in development)](https://enzymeml.org/) -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** [Archives in Biochemistry and Biophysics](https://www.sciencedirect.com/journal/archives-of-biochemistry-and-biophysics), [Beilstein Journal of Organic Chemistry](https://www.beilstein-journals.org/bjoc/home), [eLife](https://elifesciences.org/), [Molecular Catalysis](https://www.sciencedirect.com/journal/molecular-catalysis), [Nature](https://www.nature.com/) (including Biotechnology, Chemistry, Microbiology, Pharmacology, Systems Biology), [PLoS](https://plos.org/) (relevant journals, e.g. One, Biology, Computational Biology, Medicine), [Scientific Data](https://www.nature.com/sdata/), [The Journal of Biological Chemistry](https://www.jbc.org/), recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. +- **Accepted data types:** Currently none, EnzymeML (in development) +- **Used standards/ontologies:** DataCite, InChI, [EnzymeML (in development)](https://enzymeml.org/) +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** [Archives in Biochemistry and Biophysics](https://www.sciencedirect.com/journal/archives-of-biochemistry-and-biophysics), [Beilstein Journal of Organic Chemistry](https://www.beilstein-journals.org/bjoc/home), [eLife](https://elifesciences.org/), [Molecular Catalysis](https://www.sciencedirect.com/journal/molecular-catalysis), [Nature](https://www.nature.com/) (including Biotechnology, Chemistry, Microbiology, Pharmacology, Systems Biology), [PLoS](https://plos.org/) (relevant journals, e.g. One, Biology, Computational Biology, Medicine), [Scientific Data](https://www.nature.com/sdata/), [The Journal of Biological Chemistry](https://www.jbc.org/), recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. ::: diff --git a/docs/50_data_publication/20_choose_repository/80_suprabank.mdx b/docs/50_data_publication/20_choose_repository/80_suprabank.mdx index 0fb0bcad..a207fb78 100644 --- a/docs/50_data_publication/20_choose_repository/80_suprabank.mdx +++ b/docs/50_data_publication/20_choose_repository/80_suprabank.mdx @@ -7,22 +7,22 @@ import RepoButton from "@site/src/components/repos/RepoButton"; :::info Quick facts -- **Accepted data types:** JSON (DataCite), CDX (for 2D/3D molecule structure), PNG, proprietary formats -- **Used standards/ontologies:** DataCite 4.0, Dublin Core for metadata tags -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** Recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. +- **Accepted data types:** JSON (DataCite), CDX (for 2D/3D molecule structure), PNG, proprietary formats +- **Used standards/ontologies:** DataCite 4.0, Dublin Core for metadata tags +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** Recommended by [Angewandte Chemie](https://onlinelibrary.wiley.com/page/journal/15213773/homepage/notice-to-authors#sectFDataDeposition) and further Wiley journals. ::: diff --git a/docs/50_data_publication/20_choose_repository/90_csd_icsd.mdx b/docs/50_data_publication/20_choose_repository/90_csd_icsd.mdx index c9d47920..5c0d21f5 100644 --- a/docs/50_data_publication/20_choose_repository/90_csd_icsd.mdx +++ b/docs/50_data_publication/20_choose_repository/90_csd_icsd.mdx @@ -8,15 +8,15 @@ import RepoButton from "@site/src/components/repos/RepoButton"; _Joint CCDC/FIZ access structures service_ :::info Note: @@ -31,24 +31,24 @@ ICSD: Link to [FAIRsharing](https://doi.org/10.25504/FAIRsharing.a95199), Link t ## ICSD quick facts: -- **Accepted data types:** CIF -- **Used standards/ontologies:** none -- **Data deposition condition:** controlled -- **Recommended by Journals/Societies:** List of the [80 most important journals](https://icsd.products.fiz-karlsruhe.de/about/list-80-most-important-journals-covered-icsd) covered by ICSD +- **Accepted data types:** CIF +- **Used standards/ontologies:** none +- **Data deposition condition:** controlled +- **Recommended by Journals/Societies:** List of the [80 most important journals](https://icsd.products.fiz-karlsruhe.de/about/list-80-most-important-journals-covered-icsd) covered by ICSD ## CSD quick facts: -- **Accepted data types:** primarily CIF but other supporting file formats accepted -- **Used standards/ontologies:** CIF, DataCite -- **Data deposition condition:** partially open -- **Recommended by Journals/Societies:** IUCr, Royal Society of Chemistry, American Chemical Society, Wiley, Elsevier, Springer Nature, Taylor & Francis, Hindawi, Chemical Society of Japan +- **Accepted data types:** primarily CIF but other supporting file formats accepted +- **Used standards/ontologies:** CIF, DataCite +- **Data deposition condition:** partially open +- **Recommended by Journals/Societies:** IUCr, Royal Society of Chemistry, American Chemical Society, Wiley, Elsevier, Springer Nature, Taylor & Francis, Hindawi, Chemical Society of Japan ## Joint CCDC/FIZ Access Structures Service quick facts: -- **Accepted data types:** primarily CIF but other supporting file formats accepted. -- **Used standards/ontologies:** CIF, DataCite -- **Data deposition condition:** open -- **Recommended by Journals/Societies:** IUCr, Royal Society of Chemistry, American Chemical Society, Wiley, Elsevier, Springer Nature, Taylor & Francis, Hindawi, Chemical Society of Japan +- **Accepted data types:** primarily CIF but other supporting file formats accepted. +- **Used standards/ontologies:** CIF, DataCite +- **Data deposition condition:** open +- **Recommended by Journals/Societies:** IUCr, Royal Society of Chemistry, American Chemical Society, Wiley, Elsevier, Springer Nature, Taylor & Francis, Hindawi, Chemical Society of Japan ## CSD, ICSD and joint CCDC/FIZ Access Structures Service diff --git a/docs/50_data_publication/20_choose_repository/_category_.json b/docs/50_data_publication/20_choose_repository/_category_.json index 1ee639fd..bf247a81 100644 --- a/docs/50_data_publication/20_choose_repository/_category_.json +++ b/docs/50_data_publication/20_choose_repository/_category_.json @@ -1,7 +1,7 @@ { - "label": "Choose a Repository", - "link": { - "type": "doc", - "id": "choose_repository" - } + "label": "Choose a Repository", + "link": { + "type": "doc", + "id": "choose_repository" + } } diff --git a/docs/50_data_publication/51_lbe/00_lbe_intro.mdx b/docs/50_data_publication/51_lbe/00_lbe_intro.mdx index 2a1dfebf..3c4d1869 100644 --- a/docs/50_data_publication/51_lbe/00_lbe_intro.mdx +++ b/docs/50_data_publication/51_lbe/00_lbe_intro.mdx @@ -17,9 +17,9 @@ Take a look at the list for inspiration as to what is already possible today! Do you want to have your published dataset highlighted here or do you need assistance in the preparation of your dataset for publication? Pledge your dataset to NFDI4Chem! More information can be found [here](https://www.nfdi4chem.de/index.php/2022/12/15/data-pledge/). --- diff --git a/docs/50_data_publication/51_lbe/_category_.json b/docs/50_data_publication/51_lbe/_category_.json index 5499e310..53bd2f99 100644 --- a/docs/50_data_publication/51_lbe/_category_.json +++ b/docs/50_data_publication/51_lbe/_category_.json @@ -1,7 +1,7 @@ { - "label": "Lead by Example", - "link": { - "type" : "doc", - "id" : "lbe_intro" - } -} \ No newline at end of file + "label": "Lead by Example", + "link": { + "type": "doc", + "id": "lbe_intro" + } +} diff --git a/docs/50_data_publication/70_publishing_standards/30_publishing_standards_infrastructure.mdx b/docs/50_data_publication/70_publishing_standards/30_publishing_standards_infrastructure.mdx index 652a3c2e..ae3c6ec9 100644 --- a/docs/50_data_publication/70_publishing_standards/30_publishing_standards_infrastructure.mdx +++ b/docs/50_data_publication/70_publishing_standards/30_publishing_standards_infrastructure.mdx @@ -87,9 +87,9 @@ Research data repositories should contribute to and utilize [Scholix.org](https: ## Resources and Further Reading -- NFDI4Chem - Deliverable D3.3.1: Gap analysis report for selected repositories [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7602102.svg)](https://doi.org/10.5281/zenodo.7602102) -- CoreTrustSeal Requirements 2023-2025 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7051012.svg)](https://doi.org/10.5281/zenodo.7051012) -- COAR Community Framework for Good Practices in Repositories, Version [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7108101.svg)](https://doi.org/10.5281/zenodo.7108101) +- NFDI4Chem - Deliverable D3.3.1: Gap analysis report for selected repositories [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7602102.svg)](https://doi.org/10.5281/zenodo.7602102) +- CoreTrustSeal Requirements 2023-2025 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7051012.svg)](https://doi.org/10.5281/zenodo.7051012) +- COAR Community Framework for Good Practices in Repositories, Version [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7108101.svg)](https://doi.org/10.5281/zenodo.7108101) ## Standards {#standards-infrastructure-list} diff --git a/docs/50_data_publication/70_publishing_standards/_category_.json b/docs/50_data_publication/70_publishing_standards/_category_.json index 7653c3c7..1f0c28c4 100644 --- a/docs/50_data_publication/70_publishing_standards/_category_.json +++ b/docs/50_data_publication/70_publishing_standards/_category_.json @@ -1,7 +1,7 @@ { - "label": "Publishing Standards", - "link": { - "type" : "doc", - "id" : "publishing_standards_intro" - } -} \ No newline at end of file + "label": "Publishing Standards", + "link": { + "type": "doc", + "id": "publishing_standards_intro" + } +} diff --git a/docs/50_data_publication/_category_.json b/docs/50_data_publication/_category_.json index 241c6a2c..fd03ba15 100644 --- a/docs/50_data_publication/_category_.json +++ b/docs/50_data_publication/_category_.json @@ -1,7 +1,7 @@ { - "label": "Data Publishing", - "link": { - "type": "doc", - "id": "data_publishing" - } + "label": "Data Publishing", + "link": { + "type": "doc", + "id": "data_publishing" + } } From f8da935920a20f8b3f0ce2da6ae47b48bc4c8313 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:32:27 +0200 Subject: [PATCH 13/20] chore: formatting of /docs/60_topics --- docs/60_topics/61_identifiers/10_pid.mdx | 52 +++++++++---------- docs/60_topics/61_identifiers/_category_.json | 10 ++-- docs/60_topics/62_data_formats.mdx | 2 +- .../10_metadata.mdx | 21 +++++--- .../20_ontology.mdx | 32 ++++++------ .../_category_.json | 10 ++-- docs/60_topics/_category_.json | 10 ++-- 7 files changed, 71 insertions(+), 66 deletions(-) diff --git a/docs/60_topics/61_identifiers/10_pid.mdx b/docs/60_topics/61_identifiers/10_pid.mdx index 0305e89b..7800bec1 100644 --- a/docs/60_topics/61_identifiers/10_pid.mdx +++ b/docs/60_topics/61_identifiers/10_pid.mdx @@ -20,10 +20,10 @@ The main benefits of PIDs are increased findability, visibility, and ease of acc ### DOIs {#doi} Digital Object Identifiers are PIDs for objects such as publications and datasets, but also physical objects. DOIs are resolved based on the [Handle System](https://www.handle.net/)to lead to the corresponding landing page and are assigned by members of the [International DOI Foundation](https://datascience.codata.org/articles/abstract/353/). Most well-recognised [DOI registration agencies](https://www.doi.org/the-community/existing-registration-agencies/) include [CrossRef](https://www.crossref.org/) for publications and [DataCite](https://datacite.org/) focusing on [datasets](https://doi.org/10.1109/COINFO.2009.66). @@ -55,10 +55,10 @@ Registrants are [liable](https://support.datacite.org/docs/doi-registration-poli ### ORCID iDs {#orcid} [ORCID iDs](https://orchid.org/) are open and non-proprietary PIDs for authors that can be used by any author free of charge. They are provided by the non-profit organization ORCID Inc., providing application program interfaces (API) for their members to integrate ORCID services. @@ -72,10 +72,10 @@ In addition to non-proprietary ORCID iD, there are also proprietary author ident ### Research Organisation Registry {#ror} The Research Organisation Registry ([ROR](https://ror.org/)) provides persistent identifiers for research organisations, while names might not be unique, may change and organisations might be merged, split, shut down or re-emerge. ROR enables to connect research organisations to research outputs and their researchers by identifying their affiliations. @@ -87,11 +87,11 @@ ROR does support parent-child hierarchies as well as lateral relationships betwe ### InChI (International Chemical Identifier) {#inchi} The InChI ([International Chemical Identifier](https://www.inchi-trust.org/)) is a standardised, text-based identification system for chemical compounds. It was developed under the auspices of ([IUPAC](https://iupac.org/)) to represent chemical structures unambiguously and in a machine-readable format. The aim of the system is to facilitate the exchange of chemical information between databases, scientific publications and software applications. @@ -115,11 +115,11 @@ Due to its uniqueness and widespread use, the CAS number is regarded as one of t ### ePICs {#epics} The Persistent Identifier for eResearch ([ePICs](https://www.pidconsortium.net/)) are based on the [Handle.Net Registry (HNR)](https://www.handle.net/) and are intended to be used for unpublished digital research objects. To this end, ePICs can be assigned at early stages of research to locate research data and may be used by various research data management or archiving systems. Upon publication of a dataset, the full research data can be linked via the ePIC, for example, in cases that include proprietary or sensitive information. @@ -129,10 +129,10 @@ This type of PID will commonly lead to a landing page, the content of which is m ## ARK {#ark} The Archival Research Key ([ARK](https://arks.org/about/ark-overview/)) are open identifiers hich are assigned to physical and digital information objects, mostly in the cultural studies. diff --git a/docs/60_topics/61_identifiers/_category_.json b/docs/60_topics/61_identifiers/_category_.json index 80d81a5a..cb42ce10 100644 --- a/docs/60_topics/61_identifiers/_category_.json +++ b/docs/60_topics/61_identifiers/_category_.json @@ -1,7 +1,7 @@ { - "label": "Identifiers", - "link": { - "type" : "doc", - "id" : "identifiers" - } + "label": "Identifiers", + "link": { + "type": "doc", + "id": "identifiers" + } } diff --git a/docs/60_topics/62_data_formats.mdx b/docs/60_topics/62_data_formats.mdx index 6ba9a166..34314f55 100644 --- a/docs/60_topics/62_data_formats.mdx +++ b/docs/60_topics/62_data_formats.mdx @@ -64,7 +64,7 @@ When possible, select formats with broad software support and active community m | mnova | NMR | Mestrelab | (binary) | proprietary | | Bruker OPUS | spectroscopy | Bruker | (binary) | proprietary | | Perkin Elmer | spectroscopy | Perkin Elmer | ASCII, Text | proprietary | -| ThermoFisher Grams | spectroscopy | ThermoFisher | binary | proprietary | +| ThermoFisher Grams | spectroscopy | ThermoFisher | binary | proprietary | ## Sources and further information diff --git a/docs/60_topics/63_data_description_annotation/10_metadata.mdx b/docs/60_topics/63_data_description_annotation/10_metadata.mdx index f9608105..478c40b1 100644 --- a/docs/60_topics/63_data_description_annotation/10_metadata.mdx +++ b/docs/60_topics/63_data_description_annotation/10_metadata.mdx @@ -6,6 +6,7 @@ slug: "/metadata" # Metadata and Minimum Information ## Metadata and their schemas + Metadata can be described as "data about data", i.e. structured information that describes data, like the content of a dataset or file, or the context of its generation. Some exemplary metadata fields are: title, keywords, acquisition method / analytical technique, and the list continues. Metadata should be supported by controlled vocabularies (ideally [ontologies](/docs/ontology)), and/or [data formats](/docs/data_formats). @@ -15,23 +16,26 @@ Metadata gets more specialized as the domain it describes does, where the hierar Metadata can be domain-independent, focusing mostly on citation details, such as the title, the keywords, the people and institutions involved, or references to other data. Domain-independent metadata standards can be complemented by more domain-specific metadata. -* [Dublin Core](https://www.dublincore.org/specifications/dublin-core/dces/) is a more general set of fifteen elements describing networked resources. This set has been adapted and extended by other standards since its first publication in 1995. -* [DataCite](https://datacite.org/) is a DOI provider that provides a [schema](https://schema.datacite.org/) of core metadata for research data. The standard is community driven and tries to integrate with other standards such as Dublin Core and [ORCID Record Schema](https://info.orcid.org/documentation/integration-guide/orcid-record/). -* The [OpenAIRE Guidelines for Data Archive Managers](https://guidelines.openaire.eu/en/latest/) provide an infrastructure which facilitates interoperability between repositories adhering to those guidelines and enhances data exposure and visibility. OpenAIRE has already adopted the DataCite [schema](https://schema.datacite.org/) but with some minor adjustments, such as accepting other persistent identifier schemes rather than the DOI, and some changes in the obligations of properties. -* [PROV](https://www.w3.org/TR/prov-overview/): The W3C standard for provenance information can be used to provide information on the origin of scientific data. -* The [Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH)](http://www.openarchives.org/OAI/openarchivesprotocol.html) is a framework for harvesting metadata and can be applied to a wide variety of metadata formats. These should always include Dublin Core metadata. +- [Dublin Core](https://www.dublincore.org/specifications/dublin-core/dces/) is a more general set of fifteen elements describing networked resources. This set has been adapted and extended by other standards since its first publication in 1995. +- [DataCite](https://datacite.org/) is a DOI provider that provides a [schema](https://schema.datacite.org/) of core metadata for research data. The standard is community driven and tries to integrate with other standards such as Dublin Core and [ORCID Record Schema](https://info.orcid.org/documentation/integration-guide/orcid-record/). +- The [OpenAIRE Guidelines for Data Archive Managers](https://guidelines.openaire.eu/en/latest/) provide an infrastructure which facilitates interoperability between repositories adhering to those guidelines and enhances data exposure and visibility. OpenAIRE has already adopted the DataCite [schema](https://schema.datacite.org/) but with some minor adjustments, such as accepting other persistent identifier schemes rather than the DOI, and some changes in the obligations of properties. +- [PROV](https://www.w3.org/TR/prov-overview/): The W3C standard for provenance information can be used to provide information on the origin of scientific data. +- The [Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH)](http://www.openarchives.org/OAI/openarchivesprotocol.html) is a framework for harvesting metadata and can be applied to a wide variety of metadata formats. These should always include Dublin Core metadata. ### Domain-Specific Metadata: + Metadata can be domain-specific, i.e. related to a specific acquisition method with a certain analytical technique (such as a pH measurement in the context of a certain reaction), which doesn't apply to most other domains other than chemistry. -* The [Core Scientific Metadata Model (CSMD)](http://icatproject-contrib.github.io/CSMD/) is a model for scientific studies, which includes entity classes for facilities, users, investigations, instruments, datafiles, datasets, and samples. Within these classes most of the experimental parameters and results can be captured. There are additionally classes for e.g. publications, data formats, and sample types. Beside a publication of the specification as UML (Unified Modeling language) classes model definition, there is also a representation as an ontology. Future releases will focus on the integration of the [PROV](https://www.w3.org/TR/prov-overview/) model. -* The [Investigation Study Assay (ISA)](https://isa-specs.readthedocs.io/en/latest/index.html) is also a metadata framework focusing on biological investigations, which defines schemas for the data representation in machine-readable formats (ISA-Tab and JSON). It can be applied to many methods and allows the inclusion of ontology references for the entities. -* [IUPAC - FAIRSpec](https://github.com/IUPAC/IUPAC-FAIRSpec) is a framework under development at IUPAC, which aims to cover spectroscopic data including NMR spectroscopy. +- The [Core Scientific Metadata Model (CSMD)](http://icatproject-contrib.github.io/CSMD/) is a model for scientific studies, which includes entity classes for facilities, users, investigations, instruments, datafiles, datasets, and samples. Within these classes most of the experimental parameters and results can be captured. There are additionally classes for e.g. publications, data formats, and sample types. Beside a publication of the specification as UML (Unified Modeling language) classes model definition, there is also a representation as an ontology. Future releases will focus on the integration of the [PROV](https://www.w3.org/TR/prov-overview/) model. +- The [Investigation Study Assay (ISA)](https://isa-specs.readthedocs.io/en/latest/index.html) is also a metadata framework focusing on biological investigations, which defines schemas for the data representation in machine-readable formats (ISA-Tab and JSON). It can be applied to many methods and allows the inclusion of ontology references for the entities. +- [IUPAC - FAIRSpec](https://github.com/IUPAC/IUPAC-FAIRSpec) is a framework under development at IUPAC, which aims to cover spectroscopic data including NMR spectroscopy. ## Minimum information standards (MI) + Minimum information standards (MI) are guidelines regarding which metadata is required when reporting data. Furthermore, these guidelines outline which format should be used for both this information as well as for the data itself. The set of MI depends on the type of data and is established to ensure that data are deposited following the FAIR principles. Therefore, minimum information is a subset of rich metadata which can accompany data. ### Minimum Information for Chemical Investigations (MIChI) + Due to the increasing amount of data produced by biology and related disciplines, such as omics, bioinformatics and biochemistry, a large set of [minimum information guidelines](https://fairsharing.org/search/?q=minimum+information) for different methods has been developed. These were promoted by the [Minimum Information for Biological and Biomedical Investigations (MIBBI)](https://doi.org/10.1038/nbt.1411) project. Although the explored part of the chemical space along with the chemical data produced is increasing rapidly, there are only a few attempts to define guidelines for minimum information in chemistry, e.g. the [Metabolomics Standards Initiative (MSI)](https://dx.doi.org/10.1007%2Fs11306-007-0082-2) or the [Collaboratory for the Multi-scale Chemical Sciences (CMCS)](https://www.researchgate.net/publication/228602526_Metadata_in_the_collaboratory_for_multi-scale_chemical_science). NFDI4Chem will address this issue by preparing recommendations on **Minimum Information for Chemical Investigations (MIChI)**, which include standards for methods such as mass spectrometry, nuclear magnetic resonance and optical spectroscopic methods. International workshops are already being carried out in order to start the needed discussion about the MIChI. @@ -50,4 +54,5 @@ Metadata, as well as the data itself, should be assigned unique [persistent iden Machine-readable metadata should be provided in a standardized format, while the metadata entities should be well-documented regarding semantics and the relations between the entities and the actual data. This can be achieved by defining the metadata as an ontology, or a schema in a machine-readable serialization, such as XML or JSON. Schemas help in indexing metadata for search engines, repositories, or other data registries, and also help improve interoperability (the I in FAIR). Most of the other FAIR guidelines also apply to metadata. ## Sources and further information + A short introductory video to Metadata (in German) can be found [here](https://www.youtube.com/embed/TnpDnflK66I). diff --git a/docs/60_topics/63_data_description_annotation/20_ontology.mdx b/docs/60_topics/63_data_description_annotation/20_ontology.mdx index 49f34ccd..64d2b2fb 100644 --- a/docs/60_topics/63_data_description_annotation/20_ontology.mdx +++ b/docs/60_topics/63_data_description_annotation/20_ontology.mdx @@ -14,23 +14,23 @@ The term ontology, as used in our context, refers to a formally specified concep ## Introduction - + ![Ontology-based RDM](/img/topics/Graphical_Abstract_Ontologies4Chem_2021.jpg) diff --git a/docs/60_topics/63_data_description_annotation/_category_.json b/docs/60_topics/63_data_description_annotation/_category_.json index fc979aac..c861ded6 100644 --- a/docs/60_topics/63_data_description_annotation/_category_.json +++ b/docs/60_topics/63_data_description_annotation/_category_.json @@ -1,7 +1,7 @@ { - "label": "Data Description & Annotation", - "link": { - "type" : "doc", - "id" : "data_description_annotation" - } + "label": "Data Description & Annotation", + "link": { + "type": "doc", + "id": "data_description_annotation" + } } diff --git a/docs/60_topics/_category_.json b/docs/60_topics/_category_.json index 1af6d9f9..636cb6c2 100644 --- a/docs/60_topics/_category_.json +++ b/docs/60_topics/_category_.json @@ -1,7 +1,7 @@ { - "label": "Topics & Concepts", - "link": { - "type" : "doc", - "id" : "topics_guide" - } + "label": "Topics & Concepts", + "link": { + "type": "doc", + "id": "topics_guide" + } } From c1373a06c697090435359b0b784611a1010089f7 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:36:28 +0200 Subject: [PATCH 14/20] chore: format root level files --- README.md | 10 +-- VALIDATION_PROPOSAL.md | 162 +++++++++++++++++++++-------------------- announcementBar.json | 6 +- copyright.js | 2 +- footer.json | 110 ++++++++++++++-------------- navbar.json | 58 +++++++-------- playwright.config.ts | 20 ++--- sidebars.js | 8 +- 8 files changed, 190 insertions(+), 186 deletions(-) diff --git a/README.md b/README.md index 75536352..95aef60c 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ This repo is the core of the [NFDI4Chem knowledge base](https://knowledgebase.nf ## Documentation -* [Getting started](./readme/getting_started.md) -* [Localisation](./readme/localisation.md) -* [Advanced stuff](./readme/advanced.md) -* [Custom components](./readme/custom.md) -* [Local testing](./readme/testing.md) +- [Getting started](./readme/getting_started.md) +- [Localisation](./readme/localisation.md) +- [Advanced stuff](./readme/advanced.md) +- [Custom components](./readme/custom.md) +- [Local testing](./readme/testing.md) ## Acknowledgments diff --git a/VALIDATION_PROPOSAL.md b/VALIDATION_PROPOSAL.md index c627adb2..c8d388ef 100644 --- a/VALIDATION_PROPOSAL.md +++ b/VALIDATION_PROPOSAL.md @@ -10,12 +10,12 @@ Dieser Proposal implementiert ein automatisches Validierungssystem für Pull Req **Datei:** `scripts/validate-content.js` -* ✅ Prüft alle `md` und `mdx`-Dateien im `docs/`-Verzeichnis -* ✅ Validiert Frontmatter auf gültiges YAML und erforderlichen Slug -* ✅ Prüft Seitentitel (h1 oder title im Frontmatter) -* ✅ Warnt bei identischen h1 und title Werten -* ✅ Benutzerfreundliche Fehlerausgabe mit Zusammenfassung -* ✅ Exit-Code-basierte Fehlerbehandlung für CI/CD +- ✅ Prüft alle `md` und `mdx`-Dateien im `docs/`-Verzeichnis +- ✅ Validiert Frontmatter auf gültiges YAML und erforderlichen Slug +- ✅ Prüft Seitentitel (h1 oder title im Frontmatter) +- ✅ Warnt bei identischen h1 und title Werten +- ✅ Benutzerfreundliche Fehlerausgabe mit Zusammenfassung +- ✅ Exit-Code-basierte Fehlerbehandlung für CI/CD **Verwendung:** @@ -27,31 +27,31 @@ npm run validate-content **Datei:** `.github/workflows/pr-validation.yml` -* ✅ Triggert automatisch bei Pull Requests -* ✅ Installiert Dependencies -* ✅ Führt Content-Validierung durch -* ✅ Führt Docusaurus Build durch -* ✅ Meldet Ergebnisse im PR +- ✅ Triggert automatisch bei Pull Requests +- ✅ Installiert Dependencies +- ✅ Führt Content-Validierung durch +- ✅ Führt Docusaurus Build durch +- ✅ Meldet Ergebnisse im PR **Features:** -* Lädt Dependencies aus Cache (schneller) -* Node.js 18 (aktuell und stabil) -* Automatische Status-Updates im PR +- Lädt Dependencies aus Cache (schneller) +- Node.js 18 (aktuell und stabil) +- Automatische Status-Updates im PR ### 3. Package.json Updates -* ✅ Neue devDependencies: `glob` und `gray-matter` -* ✅ Neue npm Scripts: - * `npm run validate-content` - Nur Validierung - * `npm run test:ci` - Validierung + Build +- ✅ Neue devDependencies: `glob` und `gray-matter` +- ✅ Neue npm Scripts: + - `npm run validate-content` - Nur Validierung + - `npm run test:ci` - Validierung + Build ### 4. Dokumentation -* ✅ `scripts/VALIDATION_SETUP.md` - Detaillierte Setup-Anleitung -* ✅ `scripts/EXAMPLES.md` - Praktische Beispiele für gültige/ungültige Dateien -* ✅ `scripts/README.md` - Schnelle Übersicht -* ✅ `scripts/validation.config.js` - Vorschläge für Erweiterungen +- ✅ `scripts/VALIDATION_SETUP.md` - Detaillierte Setup-Anleitung +- ✅ `scripts/EXAMPLES.md` - Praktische Beispiele für gültige/ungültige Dateien +- ✅ `scripts/README.md` - Schnelle Übersicht +- ✅ `scripts/validation.config.js` - Vorschläge für Erweiterungen ## 📋 Validierungsregeln @@ -59,31 +59,31 @@ npm run validate-content ```yaml --- -slug: /my-page/ # ✅ ERFORDERLICH - eindeutig -title: Page Title # ⚠️ Optional, aber empfohlen -description: ... # ⚠️ Optional, gut für SEO +slug: /my-page/ # ✅ ERFORDERLICH - eindeutig +title: Page Title # ⚠️ Optional, aber empfohlen +description: ... # ⚠️ Optional, gut für SEO --- ``` **Validierungen:** -* Slug muss vorhanden sein -* Slug muss ein String sein -* Slug darf nicht leer sein +- Slug muss vorhanden sein +- Slug muss ein String sein +- Slug darf nicht leer sein ### Seitentitel -* Mindestens eine der folgenden Optionen erforderlich: - * `h1` Überschrift (`# Title`) - * `title` im Frontmatter -* Wenn beide vorhanden: - * Sie dürfen nicht identisch sein - * Empfehlung: h1 detaillierter, title kürzer für SEO +- Mindestens eine der folgenden Optionen erforderlich: + - `h1` Überschrift (`# Title`) + - `title` im Frontmatter +- Wenn beide vorhanden: + - Sie dürfen nicht identisch sein + - Empfehlung: h1 detaillierter, title kürzer für SEO ### Build -* Docusaurus Build muss fehlerfrei laufen -* Keine Broken Links/Images (basierend auf docusaurus.config.js) +- Docusaurus Build muss fehlerfrei laufen +- Keine Broken Links/Images (basierend auf docusaurus.config.js) ## 🚀 Erste Schritte @@ -117,31 +117,33 @@ Siehe `scripts/EXAMPLES.md` für Lösungsbeispiele. ### Für Contributors: 1. **Vor dem Commit:** - ```bash - npm run validate-content - ``` + + ```bash + npm run validate-content + ``` 2. **Vor dem Push:** - ```bash - npm run test:ci - ``` + + ```bash + npm run test:ci + ``` 3. **Push und PR öffnen:** - * GitHub Actions läuft automatisch - * Status wird im PR angezeigt + - GitHub Actions läuft automatisch + - Status wird im PR angezeigt ### Für Maintainer: -* PR kann nur gemerged werden wenn alle Checks bestanden sind ✅ -* Automatische Validierung spart Zeit bei Code Reviews -* Konsistente Dokumentation garantiert +- PR kann nur gemerged werden wenn alle Checks bestanden sind ✅ +- Automatische Validierung spart Zeit bei Code Reviews +- Konsistente Dokumentation garantiert ## 📦 Dependencies Neue NPM-Packages: -* **glob** (^10.3.10) - Datei-Pattern-Matching -* **gray-matter** (^4.0.3) - Frontmatter-Parsing +- **glob** (^10.3.10) - Datei-Pattern-Matching +- **gray-matter** (^4.0.3) - Frontmatter-Parsing Beides sind kleine, etablierte Packages ohne weitere Dependencies. @@ -171,57 +173,57 @@ Beides sind kleine, etablierte Packages ohne weitere Dependencies. Das System ist modular und kann leicht erweitert werden: 1. **SEO-Validierung** - * Meta description Länge - * Keywords prüfen - * Title length für Suchresultate + - Meta description Länge + - Keywords prüfen + - Title length für Suchresultate 2. **Link-Validierung** - * Interne Links auf Existenz - * Externe Links erreichbar + - Interne Links auf Existenz + - Externe Links erreichbar 3. **Image-Validierung** - * Dateien existieren - * Alt-Text vorhanden - * Bildgröße optimiert + - Dateien existieren + - Alt-Text vorhanden + - Bildgröße optimiert 4. **Code-Qualität** - * Spellcheck (deutsche Rechtschreibung) - * MDX-Lint - * Remark-Plugins + - Spellcheck (deutsche Rechtschreibung) + - MDX-Lint + - Remark-Plugins Siehe `scripts/validation.config.js` für Implementierungs-Ideen. ## 📊 Statistik -| Komponente | Dateien | Zeilen | -|-----------|---------|--------| -| Validierungsskript | 1 | ~150 | -| GitHub Actions | 1 | ~25 | -| Dokumentation | 4 | ~600+ | -| Config-Beispiel | 1 | ~150 | -| **Total** | **7** | **~925** | +| Komponente | Dateien | Zeilen | +| ------------------ | ------- | -------- | +| Validierungsskript | 1 | ~150 | +| GitHub Actions | 1 | ~25 | +| Dokumentation | 4 | ~600+ | +| Config-Beispiel | 1 | ~150 | +| **Total** | **7** | **~925** | ## ✨ Vorteile 1. **Qualitätssicherung** - * Konsistente Dokumentenstruktur - * Keine fehlenden Slugs/Titel - * Build garantiert fehlerfrei + - Konsistente Dokumentenstruktur + - Keine fehlenden Slugs/Titel + - Build garantiert fehlerfrei 2. **Automatisierung** - * Keine manuellen Checks nötig - * Sofortiges Feedback in PRs - * Spart Zeit im Review-Prozess + - Keine manuellen Checks nötig + - Sofortiges Feedback in PRs + - Spart Zeit im Review-Prozess 3. **Developer Experience** - * Klare Fehler-Meldungen - * Einfache lokale Tests - * Gute Dokumentation + - Klare Fehler-Meldungen + - Einfache lokale Tests + - Gute Dokumentation 4. **Wartbarkeit** - * Modular und erweiterbar - * Gute Code-Struktur - * Keine Abhängigkeiten auf externe Services + - Modular und erweiterbar + - Gute Code-Struktur + - Keine Abhängigkeiten auf externe Services ## 🎓 Nächste Schritte (Optional) @@ -231,7 +233,7 @@ Siehe `scripts/validation.config.js` für Implementierungs-Ideen. 4. Image-Optimizer - Bildgrößen optimieren 5. SEO-Tools - Meta-Tags prüfen -*** +--- **Status:** ✅ Produktionsbereit - Sofort einsatzbar diff --git a/announcementBar.json b/announcementBar.json index 594f0a88..d730eb89 100644 --- a/announcementBar.json +++ b/announcementBar.json @@ -1,5 +1,5 @@ { - "id": "fair4chem_2026", - "content": "NFDI4Chem is looking for the FAIRest data in chemistry! Submit your application now!", - "isCloseable": true + "id": "fair4chem_2026", + "content": "NFDI4Chem is looking for the FAIRest data in chemistry! Submit your application now!", + "isCloseable": true } diff --git a/copyright.js b/copyright.js index 9c49d645..3f723e10 100644 --- a/copyright.js +++ b/copyright.js @@ -10,4 +10,4 @@ const html = ` `; -module.exports = html; \ No newline at end of file +module.exports = html; diff --git a/footer.json b/footer.json index b0f2400a..874cd545 100644 --- a/footer.json +++ b/footer.json @@ -1,57 +1,57 @@ [ - { - "title": "Contribute", - "items": [ - { - "label": "Getting Started", - "href": "/docs/contributing" - }, - { - "label": "Content (GitHub)", - "href": "https://github.com/NFDI4Chem/knowledge_base" - }, - { - "label": "Localisation (Crowdin)", - "href": "https://crowdin.com/project/nfdi4chem-knowledge-base" - } - ] - }, - { - "title": "Resources", - "items": [ - { - "label": "NFDI4Chem Website", - "href": "https://nfdi4chem.de" - }, - { - "label": "NFDI4Chem Helpdesk", - "href": "https://nfdi4chem.de/index.php/helpdesk/" - }, - { - "label": "NFDI4Chem Terminology Service", - "href": "https://terminology.nfdi4chem.de/" - }, - { - "label": "NFDI4Chem Search Service", - "href": "https://search.nfdi4chem.de/" - } - ] - }, - { - "title": "Legal information", - "items": [ - { - "label": "About", - "to": "/about" - }, - { - "label": "Legal Notice", - "href": "/imprint" - }, - { - "label": "Privacy", - "href": "https://www.uni-mainz.de/en/privacy/" - } - ] - } + { + "title": "Contribute", + "items": [ + { + "label": "Getting Started", + "href": "/docs/contributing" + }, + { + "label": "Content (GitHub)", + "href": "https://github.com/NFDI4Chem/knowledge_base" + }, + { + "label": "Localisation (Crowdin)", + "href": "https://crowdin.com/project/nfdi4chem-knowledge-base" + } + ] + }, + { + "title": "Resources", + "items": [ + { + "label": "NFDI4Chem Website", + "href": "https://nfdi4chem.de" + }, + { + "label": "NFDI4Chem Helpdesk", + "href": "https://nfdi4chem.de/index.php/helpdesk/" + }, + { + "label": "NFDI4Chem Terminology Service", + "href": "https://terminology.nfdi4chem.de/" + }, + { + "label": "NFDI4Chem Search Service", + "href": "https://search.nfdi4chem.de/" + } + ] + }, + { + "title": "Legal information", + "items": [ + { + "label": "About", + "to": "/about" + }, + { + "label": "Legal Notice", + "href": "/imprint" + }, + { + "label": "Privacy", + "href": "https://www.uni-mainz.de/en/privacy/" + } + ] + } ] diff --git a/navbar.json b/navbar.json index 22e47758..15215ef9 100644 --- a/navbar.json +++ b/navbar.json @@ -1,31 +1,31 @@ { - "logo": { - "alt": "NFDI4Chem Logo", - "src": "img/N4C_logo_navbar_large.svg" - }, - "items": [ - { - "type": "doc", - "docId": "intro/intro", - "position": "left", - "label": "Knowledge Base" - }, - { - "label": "NFDI4Chem", - "href": "https://www.nfdi4chem.de" - }, - { - "label": "Terminology Service", - "href": "https://terminology.nfdi4chem.de/" - }, - { - "label": "Search Service", - "href": "https://search.nfdi4chem.de/" - }, - { - "type": "localeDropdown", - "position": "right", - "queryString": "?userLocale=true" - } - ] + "logo": { + "alt": "NFDI4Chem Logo", + "src": "img/N4C_logo_navbar_large.svg" + }, + "items": [ + { + "type": "doc", + "docId": "intro/intro", + "position": "left", + "label": "Knowledge Base" + }, + { + "label": "NFDI4Chem", + "href": "https://www.nfdi4chem.de" + }, + { + "label": "Terminology Service", + "href": "https://terminology.nfdi4chem.de/" + }, + { + "label": "Search Service", + "href": "https://search.nfdi4chem.de/" + }, + { + "type": "localeDropdown", + "position": "right", + "queryString": "?userLocale=true" + } + ] } diff --git a/playwright.config.ts b/playwright.config.ts index 56617c12..9f3f11bb 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -6,13 +6,14 @@ export default defineConfig({ retries: process.env.CI ? 1 : 0, fullyParallel: true, reporter: [["html", { open: "never" }]], - snapshotPathTemplate: "{testDir}/{testFilePath}-snapshots/{arg}-{projectName}{ext}", + snapshotPathTemplate: + "{testDir}/{testFilePath}-snapshots/{arg}-{projectName}{ext}", expect: { toHaveScreenshot: { animations: "disabled", caret: "hide", - scale: "css" - } + scale: "css", + }, }, use: { baseURL: "http://127.0.0.1:3000", @@ -21,18 +22,19 @@ export default defineConfig({ colorScheme: "light", locale: "en-US", timezoneId: "UTC", - reducedMotion: "reduce" + reducedMotion: "reduce", }, webServer: { - command: "npm run build && npm run serve -- --host 127.0.0.1 --port 3000", + command: + "npm run build && npm run serve -- --host 127.0.0.1 --port 3000", url: "http://127.0.0.1:3000", reuseExistingServer: !process.env.CI, - timeout: 300_000 + timeout: 300_000, }, projects: [ { name: "chromium", - use: { ...devices["Desktop Chrome"] } - } - ] + use: { ...devices["Desktop Chrome"] }, + }, + ], }); diff --git a/sidebars.js b/sidebars.js index 981a73cd..053e0fa5 100644 --- a/sidebars.js +++ b/sidebars.js @@ -10,11 +10,11 @@ */ module.exports = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{ type: "autogenerated", dirName: "." }], - // But you can create a sidebar manually - /* + // But you can create a sidebar manually + /* tutorialSidebar: [ { type: 'category', From 1615bb76af041369cfbeb07a7da41a5f016076ce Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:37:36 +0200 Subject: [PATCH 15/20] chore: format static files --- static/assets/lbe.json | 2164 +++++++++++++++--------------- static/assets/lbe.json.readme.md | 2 +- static/assets/methods.json | 1172 ++++++++-------- static/assets/profiles.json | 152 ++- static/assets/synonyms.json | 68 +- static/fonts/metadata.json | 42 +- 6 files changed, 1849 insertions(+), 1751 deletions(-) diff --git a/static/assets/lbe.json b/static/assets/lbe.json index caa02db2..f8a562e4 100644 --- a/static/assets/lbe.json +++ b/static/assets/lbe.json @@ -1,1080 +1,1088 @@ [ - { - "title": "Adsorption of light gases in covalent organic frameworks: comparison of classical density functional theory and grand canonical Monte Carlo simulations", - "authors": "Christopher Keßler, Johannes Eller, Joachim Gross, Niels Hansen", - "journal": "Microporous and Mesoporous Materials", - "pubyear": 2021, - "linkpub": "https://doi.org/10.1016/j.micromeso.2021.111263", - "linkdata": [ - { - "name": "DaRUS", - "url": "https://doi.org/10.18419/darus-1775" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "This dataset was the winner of the FAIR4Chem Award 2022. Curated by the publishing authors, it contains PC-SAFT-based classical DFT calculations and grand canonical Monte Carlo simulations for adsorption of methane, ethane, n-butane, nitrogen, and their binary mixtures in the COFs TpPa-1 and 2,3-DhaTph up to 50 bar, showing excellent agreement and selective enrichment of longer hydrocarbons.", - "subdiscipline": [ - "physical chemistry", - "materials science", - "chemical engineering" - ], - "tags": [ - "covalent organic frameworks", - "adsorption", - "classical DFT", - "GCMC", - "PC-SAFT" - ] - }, - { - "title": "Electronic Structure of a Diiron Complex", - "authors": "Mario Winkler, Marc Schnierle, Felix Ehrlich, Kim-Isabelle Mehnert, David Hunger, Alena M. Sheveleva, Lukas Burkhardt, Matthias Bauer, Floriana Tuna, Mark R. Ringenberg, Joris van Slageren", - "journal": "Inorganic Chemistry", - "pubyear": 2021, - "linkpub": "https://doi.org/10.1021/acs.inorgchem.0c03259", - "linkdata": [ - { - "name": "DaRUS", - "url": "https://doi.org/10.18419/darus-1410" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, accompanies a multitechnique study of the diiron complex [(dppf)Fe(CO)3]0/+ using magnetic circular dichroism, X-ray absorption/emission, high-frequency EPR, and Mössbauer spectroscopy to pinpoint oxidation at the carbonyl iron center and characterize low-spin iron(I) with slow spin dynamics.", - "subdiscipline": [ - "inorganic chemistry", - "physical chemistry", - "spectroscopy" - ], - "tags": [ - "diiron complex", - "EPR", - "Mössbauer", - "X-ray spectroscopy", - "spin dynamics" - ] - }, - { - "title": "Dynamic Modelling of Phosphorolytic Cleavage Catalyzed by Pyrimidine-Nucleoside Phosphorylase", - "authors": "Robert T. Giessmann, Niels Krausch, Felix Kaspar, Mariano Nicolas Cruz Bournazou, Anke Wagner, Peter Neubauer, Matthias Gimpel", - "journal": "Processes", - "pubyear": 2019, - "linkpub": "https://doi.org/10.3390/pr7060380", - "linkdata": [ - { - "name": "Zenodo", - "url": "https://doi.org/10.5281/zenodo.3243352" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "This dataset was the winner of the FAIR4Chem Award 2022. Curated by the publishing authors, it contains UV/Vis time-course measurements used to build an ODE-based dynamic model for phosphorolytic cleavage of deoxythymidine by pyrimidine-nucleoside phosphorylase. It captures full reaction trajectories to equilibrium for substrate/product pairs and underpins kinetic parameterization and validation of the reversible enzymatic model.", - "subdiscipline": [ - "biochemical engineering", - "enzymology", - "process modeling" - ], - "tags": [ - "pyrimidine-nucleoside phosphorylase", - "dynamic modeling", - "UV/Vis", - "enzyme kinetics", - "ODE model" - ] - }, - { - "title": "FAIR and scalable management of small-angle X-ray scattering data", - "authors": "Torsten Giess, Selina Itzigehl, Jan Range, Richard Schömig, Johanna R. Bruckner, Jürgen Pleiss", - "journal": "Journal of Applied Crystallography", - "pubyear": 2023, - "linkpub": "https://doi.org/10.1107/S1600576723001577", - "linkdata": [ - { - "name": "DaRUS", - "url": "https://doi.org/10.18419/darus-2842" - }, - { - "name": "GitHub", - "url": "https://github.com/FAIRChemistry/SAS_toolbox/releases/tag/v1.0.0" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, packages the SAS-tools Python workflow (pyAnIML, easyDataverse, Jupyter) for FAIR management of small-angle X-ray scattering data, including raw SAXS measurements, AnIML metadata, OMEX archives, and analysis scripts applied to alkyltrimethylammonium surfactant phase diagrams varying chain length and counterions.", - "subdiscipline": [ - "physical chemistry", - "analytical chemistry", - "research data management" - ], - "tags": [ - "SAXS", - "FAIR data", - "AnIML", - "Dataverse", - "surfactant phase diagrams" - ] - }, - { - "title": "Axial Diffusion in Liquid-Saturated Cylindrical Silica Pore Models", - "authors": "Hamzeh Kraus, Marc Högler, Niels Hansen", - "journal": "The Journal of Physical Chemistry C", - "pubyear": 2023, - "linkpub": "https://doi.org/10.1021/acs.jpcc.3c01974", - "linkdata": [ - { - "name": "DaRUS", - "url": "https://doi.org/10.18419/darus-3067" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contains molecular dynamics simulations of 5 nm cylindrical silica mesopores saturated with 14 solvents. It provides trajectories and analyses for self-diffusion via Einstein MSD fits and discretized Smoluchowski diffusion, quantifying bulk-to-pore diffusion ratios of ~2–3 and assessing confinement effects for crystalline vs. amorphous silica pores.", - "subdiscipline": [ - "physical chemistry", - "materials science", - "computational chemistry" - ], - "tags": [ - "mesoporous silica", - "molecular dynamics", - "self-diffusion", - "confinement", - "Smoluchowski diffusion" - ] - }, - { - "title": "Database of Raman and ATR-FTIR spectra of weathered and biofouled polymers", - "authors": "Robin Lenz, Franziska Fischer, Melinda Arnold, Verónica Fernández-González, Carmen María Moscoso Pérez, José Manuel Andrade-Garda, Soledad Muniategui-Lorenzo, Dieter Fischer", - "journal": "Zenodo", - "pubyear": 2023, - "linkpub": "https://doi.org/10.5281/zenodo.8314801", - "linkdata": [ - { - "name": "GitHub", - "url": "https://github.com/robna/MPX_specDB" - }, - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/1820" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "This dataset was the winner of the FAIR4Chem Award 2024. Curated by the publishing authors, it is a spectroscopic library containing Raman and ATR-FTIR spectra of weathered and biofouled polymers collected from the marine environment. Spectroscopic data derived from in situ experiments with 10 different polymers deployed across five geographical locations and immersed for varying intervals over four seasons. Metadata and individual spectra are accessible via an interactive web application and as downloadable files.", - "subdiscipline": [ - "analytical chemistry", - "polymer science", - "environmental chemistry" - ], - "tags": [ - "Raman spectroscopy", - "ATR-FTIR", - "microplastics", - "weathering", - "biofouling", - "polymers" - ] - }, - { - "title": "Diiminium Nucleophile Adducts Are Stable and Convenient Strong Lewis Acids", - "authors": "Niklas Bormann, Jas S. Ward, Ann Kathrin Bergmann, Paula Wenz, Kari Rissanen, Yiwei Gong, Wolf-Benedikt Hatz, Alexander Burbaum, Florian F. Mulks", - "journal": "Chemistry – A European Journal", - "pubyear": 2023, - "linkpub": "https://doi.org/10.1002/chem.202302089", - "linkdata": [ - { - "name": "iO-Chem BD", - "url": "https://doi.org/10.19061/iochem-bd-6-233" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contains synthesis and characterization data of diiminium nucleophile adducts as stable and convenient strong Lewis acids. The study includes X-ray crystallographic data, spectroscopic analysis, and reactivity studies demonstrating applications in fluoride, hydride, and oxide abstraction reactions.", - "subdiscipline": ["organic chemistry", "catalysis"], - "tags": ["Lewis acids", "fluoride abstraction", "synthetic chemistry"] - }, - { - "title": "Making Photocatalysis Comparable Using a Modular and Characterized Open-Source Photoreactor", - "authors": "Daniel Kowalczyk, Pengcheng Li, Amir Abbas, Jonas Eichhorn, Philipp Buday, Magdalena Heiland, Andrea Pannwitz, Felix H. Schacher, Wolfgang Weigand, Carsten Streb, Dirk Ziegenbalg", - "journal": "ChemPhotoChem", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1002/cptc.202200044", - "linkdata": [ - { - "name": "GitHub", - "url": "https://github.com/photonZfeed/modularPhotoreactor" - }, - { - "name": "Zenodo", - "url": "https://doi.org/10.5281/zenodo.5614942" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "This dataset was the winner of the FAIR4Chem Award 2025. Curated by the publishing authors, it includes detailed documentation and characterization data of a modular, open-source photoreactor platform for reproducible photocatalytic experiments. The dataset provides comprehensive technical specifications, assembly instructions, and standardized procedures enabling comparable photocatalysis research across different laboratories.", - "subdiscipline": ["organic chemistry", "catalysis"], - "tags": ["photocatalysis", "open-source", "photoreactor"] - }, - { - "title": "Why alloying with noble metals does not decrease the oxidation of platinum: a DFT-based ab initio thermodynamics study", - "authors": "Alexander Kafka, Franziska Hess", - "journal": "Physical Chemistry Chemical Physics", - "pubyear": 2024, - "linkpub": "https://doi.org/10.1039/D4CP01807A", - "linkdata": [ - { - "name": "NOMAD", - "url": "https://dx.doi.org/10.17172/NOMAD/2024.08.21-1" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contains computational data from density functional theory (DFT) calculations and ab initio thermodynamics investigating the bulk stability of platinum alloys (Pt–Au, Pt–Ir, Pt–Re, Pt–W, Pt–Ag, Pt–Rh, Pt–Cu, Pt–Ni, and Pt–Co) and their oxides. The study explores strategies to reduce platinum oxidation and corrosion through alloying, demonstrating that platinum and oxygen affinity of the alloying metal are correlated. Copper was identified as a promising candidate for stabilizing platinum catalysts in the Ostwald process.", - "subdiscipline": ["physical chemistry", "materials science", "catalysis"], - "tags": [ - "platinum alloys", - "DFT calculations", - "thermodynamics", - "catalysis", - "corrosion" - ] - }, - { - "title": "Autonomous Battery Optimization by Deploying Distributed Experiments and Simulations", - "authors": "Monika Vogler, Simon Krarup Steensen, Francisco Fernando Ramírez, Leon Merker, Jonas Busk, Johan Martin Carlsson, Laura Hannemose Rieger, Bojing Zhang, François Liot, Giovanni Pizzi, Felix Hanke, Eibar Flores, Hamidreza Hajiyani, Stefan Fuchs, Alexey Sanin, Miran Gaberšček, Ivano Eligio Castelli, Simon Clark, Tejs Vegge, Arghya Bhowmik, Helge Sören Stein", - "journal": "Advanced Energy Materials", - "pubyear": 2024, - "linkpub": "https://doi.org/10.1002/aenm.202403263", - "linkdata": [ - { - "name": "Materials Cloud", - "url": "https://doi.org/10.24435/materialscloud:qt-1s" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contains data from the FINALES framework for autonomous battery optimization using distributed experiments and simulations. The dataset includes electrolyte formulation data, computational simulation results, and end-of-life prediction models demonstrating automated approaches combining experimental and computational battery research methods.", - "subdiscipline": ["physical chemistry", "materials science"], - "tags": ["battery materials", "autonomous optimization", "machine learning"] - }, - { - "title": "Allantofuranone Biosynthesis and Precursor-Directed Mutasynthesis of Hydroxylated Analogues", - "authors": "Carsten Wieder, Claudia Simon-Sánchez, Johannes C. Liermann, Rainer Wiechert, Karsten Andresen, Eckhard Thines, Till Opatz, Anja Schüffler", - "journal": "Journal of Natural Products", - "pubyear": 2025, - "linkpub": "https://doi.org/10.1021/acs.jnatprod.5c00197", - "linkdata": [ - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/collection/JCL_2025-02-05" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The publication deals with genome mining and heterologous biosynthesis experiments in Aspergillus oryzae, elucidating the biosynthetic pathway of allantofuranone and related compounds. The dataset, curated by the authors, published in Chemotion Repository includes analytical data of natural products and pathway intermediates obtained through biosynthetic reconstitution and precursor-directed mutasynthesis, demonstrating the production of hydroxylated analogues including the new natural products deoxyascocorynin, hydroxyterferol, and hydroxyallantofuranone.", - "subdiscipline": ["organic chemistry", "natural products chemistry"], - "tags": ["biosynthesis", "natural products", "genome mining"] - }, - { - "title": "Hydrogen bond redistribution effects in mixtures of protic ionic liquids sharing the same cation: non-ideal mixing with large negative mixing enthalpies", - "authors": "Benjamin Golub, Daniel Ondo, Viviane Overbeck, Ralf Ludwig, Dietmar Paschek", - "journal": "Physical Chemistry Chemical Physics", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1039/D2CP01209J", - "linkdata": [ - { - "name": "RosDok", - "url": "https://doi.org/10.18453/rosdok_id00003537" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, includes data from molecular dynamics simulations and was published in RosDok. The dataset also includes documentation on PDF format. The RosDok DOI is listed in the references of the corresponding publication.", - "subdiscipline": ["physical chemistry"], - "tags": ["physical chemistry"] - }, - { - "title": "Linderazulen aus einer invasiven Pflanze - Delphi und sein violettes Wunder", - "authors": "Nils Keltsch, Viola Munzert, Klaus-Peter Zeller, Hans-Ullrich Siehl, Stefan Berger, Dieter Sicker", - "journal": "Chemie in unserer Zeit", - "pubyear": 2019, - "linkpub": "https://doi.org/10.1002/ciuz.201900868", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/786" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/LMVGRKPOXLBIFQ-UHFFFAOYSA-N.1" - }, - { - "name": "nmrXiv", - "url": "https://doi.org/10.57992/nmrxiv.p2" - } - ], - "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", - "description": "The dataset, prepared for publication under the NFDI4Chem stewardship and published in RADAR4Chem contains NMR, MS, UV-VIS and IR data. NMR data are provided in vendor format, as JCAMP-DX (MNova) and NMRium format including NMReDATA (SDfile). MS data are available in vendor formats and open format mzML. IR and UV-VIS data are accessible in tabular files and in JCAMP-DX format. The structure information on Linderazulene and Charmazulene and further supplementary information are provided as tables and SDfiles. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", - "subdiscipline": ["organic chemistry", "analytical chemistry"], - "tags": ["natural products", "NMR spectroscopy"] - }, - { - "title": "Die Polei-Minze im Wandel der Zeiten", - "authors": "Agneta Prasse, Viola Munzert, Elena José, Klaus-Peter Zeller, Hans-Ullrich Siehl, Stefan Berger, Dieter Sicker", - "journal": "Chemie in unserer Zeit", - "pubyear": 2019, - "linkpub": "https://doi.org/10.1002/ciuz.201800860", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/785" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/NZGWDASTMWDZIW-MRVPVSSYSA-N.1" - }, - { - "name": "nmrXiv", - "url": "https://doi.org/10.57992/nmrxiv.p16" - } - ], - "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", - "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR4Chem, contains NMR, MS and UV-VIS data in the instrument manufacturers formats as well as in open formats such as JCAMP-DX for NMR and UV-VIS data and mzML for MS data. Analytical data of CD spectroscopy and MS spectrometry were exported as tabular files and are also provided as CSV files. The structure information on (R)-+-Pulegon and supplementary information are provided as tabular files and as as SDfiles. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", - "subdiscipline": ["organic chemistry", "analytical chemistry"], - "tags": ["natural products", "NMR spectroscopy"] - }, - { - "title": "Karminsäure - Das Rot aus Cochenilleläusen", - "authors": "Franziska Schulze, Juliane Titus, Peter Mettke, Stefan Berger, Hans-Ullrich Siehl, Klaus-Peter Zeller, Dieter Sicker", - "journal": "Chemie in unserer Zeit", - "pubyear": 2013, - "linkpub": "https://doi.org/10.1002/ciuz.201300634", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/795" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/DGQLVPJVXFOQEV-JNVSTXMASA-N.1" - }, - { - "name": "nmrXiv", - "url": "https://doi.org/10.57992/nmrxiv.p17" - } - ], - "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", - "description": "The dataset, prepared for publication under the NFDI4Chem stewardship and published in RADAR4Chem contains NMR, MS, UV-VIS and CD data. NMR data was previously published in NMRShiftDB2 and are provided in vendor format together with NMReDATA (SDfile). MS data were converted in several different formats including mzML. UV-VIS data are available as tabular files and in JCAMP-DX format. The structure information on carminic acid and further supplementary information are provided in tabular files and as SDfile. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", - "subdiscipline": ["organic chemistry", "analytical chemistry"], - "tags": ["natural products", "NMR spectroscopy"] - }, - { - "title": "Resolving the different bulk moduli within individual soft nanogels using small-angle neutron scattering", - "authors": "Judith Elizabeth Houston, Lisa Fruhner, Alexis de la Cotte, Javier Rojo González, Alexander Valerievich Petrunin, Urs Gasser, Ralf Schweins, Jürgen Allgaier, Walter Richtering, Alberto Fernandez-Nieves, Andrea Scotti", - "journal": "Science Advances", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1126/sciadv.abn6129", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/604" - }, - { - "name": "ILL Data Portal", - "url": "http://doi.org/10.5291/ILL-DATA.9-11-2067" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset in RADAR4Chem, curated by the publishing authors, includes SANS data as tab separated text files. The corresponding article references the dataset in RADAR4Chem in the data and materials availability statement via its URL. Moreover, the article references a dataset in Institut Laue-Langevin (ILL) data portal repository via its DOI.", - "subdiscipline": ["physical chemistry"], - "tags": ["nanogels"] - }, - { - "title": "Manipulating electron transfer – the influence of substituents on novel copper guanidine quinolinyl complexes", - "authors": "Joshua Heck, Fabian Metz, Sören Buchenau, Melissa Teubner, Benjamin Grimm-Lebsanft, Thomas P. Spaniol, Alexander Hoffmann, Michael A. Rübhausen, Sonja Herres-Pawlis", - "journal": "Chemical Science", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1039/D2SC02910C", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/613" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JHIAOWGCGN-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XNDIRRNFWB-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YLBKXSDEWV-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-MTPUXEIATO-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DYIBODSCVM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YSUUDYJLPD-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-BRNGTXITIQ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-ACOFZHHYLN-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-QLLLYNCAUW-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YKNRUBPOGQ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-ZJSFNHZUYT-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-HXVOLPKNEJ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-FYZDDQVKLM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-AOATVJLAFL-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XTTRESRELV-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-MCYXBNUZMI-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-NNDILYOKJA-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DMWOEMCLSH-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JZHZQROLCJ-UHFFFADPSC-NUHFF-MUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-FNFSJYCLRP-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UMMQIWZYOP-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-GCLZBRQZKM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XYXSWFSTLI-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JBXRXORXEO-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-GQFHEVHUGU-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UMXPYYQOWK-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JQDGMCVIMF-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DRQHCTISPL-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, includes reactions and sample data with its ATR-FTIP, HR-ESI-TOF-MS and 1H/13C NMR data published in Chemotion Repository. Data of DFT calculations is available in RADAR4Chem and referenced in the data availability statement of the corresponding publication. The supplementary information PDF, which reference datasets in Chemotion Repository via their DOI, and crystal structure data are available from the web page of the publisher. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", - "subdiscipline": ["inorganic chemistry"], - "tags": ["copper complexes"] - }, - { - "title": "In-situ study of the impact of temperature and architecture on the interfacial structure of microgels", - "authors": "Steffen Bochenek, Fabrizio Camerin, Emanuela Zaccarelli, Armando Maestro, Maximilian M. Schmidt, Walter Richtering, Andrea Scotti", - "journal": "Nature Communications", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1038/s41467-022-31209-3", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/603" - }, - { - "name": "ILL Data Portal", - "url": "https://doi.org/10.5291/ILL-DATA.EASY-462" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, includes raw, associated, and derived data of NR, DLS, AFM and SANS supporting the reported results. RADAR DOI as well as ePIC for archived dataset, identical to published dataset, are given in the data availability statement. The RADAR DOI is also listed listed in the references of the corresponding publication. The NR raw data used in the study are available in the ILL Data Portal repository.", - "subdiscipline": ["physical chemistry"], - "tags": ["macromolecules"] - }, - { - "title": "A risk based assessment approach for chemical mixtures from wastewater treatment plant effluents", - "authors": "Saskia Finckh, Liza-Marie Beckers, Wibke Busch, Eric Carmona, Valeria Dulio, Lena Kramer, Martin Krauss, Leo Posthuma, Tobias Schulze, Jaap Slootweg, Peter C. von der Ohe, Werner Brack", - "journal": "Environment International", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1016/j.envint.2022.107234", - "linkdata": [ - { - "name": "Pangaea", - "url": "https://doi.pangaea.de/10.1594/PANGAEA.940755" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, includes results data, raw MS files, and processing data (MZmine, MZquant, Tracefinder) in Pangaea – a repository for geospatial data and environmental chemistry. Supplementary material of the corresponding publication includes a word document and a excel document.", - "subdiscipline": [ - "organic chemistry", - "analytical chemistry", - "environmental chemistry" - ], - "tags": ["mass spectrometry"] - }, - { - "title": "Improving the screening analysis of pesticide metabolites in human biomonitoring by combining high-throughput in vitro incubation and automated LC−HRMS data processing", - "authors": "Carolin Huber, Erik Müller, Tobias Schulze, Werner Brack, and Martin Krauss", - "journal": "Analytical Chemistry", - "pubyear": 2021, - "linkpub": "https://doi.org/10.1021/acs.analchem.1c00972", - "linkdata": [ - { - "name": "MetaboLights", - "url": "https://www.ebi.ac.uk/metabolights/MTBLS2402/descriptors" - }, - { - "name": "MassBank EU", - "url": "https://github.com/MassBank/MassBank-data/commit/691fe2429e33c883e56d5234277a6586a128cc5c" - }, - { - "name": "GitHub", - "url": "https://github.com/chufz/incubatoR" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contain MS data and were published in MetaboLight, Massbank and MassBank-data/GitHub. All raw mass spectra were converted to the open format mzML format. The used code is available at GitHub and were referenced in the corresponding article.", - "subdiscipline": [ - "organic chemistry", - "analytical chemistry", - "metabolomics", - "epidemiology" - ], - "tags": ["mass spectrometry"] - }, - { - "title": "Desymmetrization strategy to achieve triptycene-based 3,6-dimethoxytriphenylenes via oxidative cyclodehydrogenation", - "authors": "Dennis Reinhard, Frank Rominger, Michael Mastalerz", - "journal": "European Journal of Organic Chemistry", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1002/ejoc.202001073", - "linkdata": [ - { - "name": "heiDATA", - "url": "https://doi.org/10.11588/data/OH6757" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc25v89m" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, published in heiData, contains data of NMR, MS, IR in the instrument manufacturers formats.The IR data is also available in TSV format. Elemental analysis data is provided as JPG. Crystallographic data as CIF are available from CSD. References to a dataset in CSD is given in the supporting information PDF of the corresponding scientific publication.", - "subdiscipline": ["organic chemistry"], - "tags": ["Triptycene"] - }, - { - "title": "A dataset of 255,000 randomly selected and manually classified extracted ion chromatograms for evaluation of peak detection methods ", - "authors": "Erik Müller, Carolin Huber, Liza-Marie Beckers, Werner Brack, Martin Krauss, Tobias Schulze", - "journal": "Metabolites", - "pubyear": 2020, - "linkpub": "https://doi.org/10.3390/metabo10040162", - "linkdata": [ - { - "name": "Zenodo", - "url": "https://doi.org/10.5281/zenodo.3756211" - }, - { - "name": "MetaboLights", - "url": "https://www.ebi.ac.uk/metabolights/editor/MTBLS1455" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, contains 255.000 extracted ion chromatograms (EICs or XICs) of 5000 peaks randomly sampled from across 51 environmental water samples for the evaluation on peak detection and gap filling algorithms. The scientific publication references the dataset in Zenodo in its data availability statement.", - "subdiscipline": [ - "organic chemistry", - "analytical chemistry", - "cheminformatics" - ], - "tags": ["mass spectrometry"] - }, - { - "title": "Systematic evaluation of the biological variance within the Raman based colorectal tissue diagnostics", - "authors": "Nadine Vogler, Thomas Bocklitz, Firas Subhi Salah, Carsten Schmidt, Rolf Brauer, Tiantian Cui, Masoud Mireskandari, Florian R. Greten, Michael Schmitt, Andreas Stallmach, Iver Petersen, Jürgen Popp", - "journal": "Journal of Biophotonics", - "pubyear": 2015, - "linkpub": "https://doi.org/10.1002/jbio.201500237", - "linkdata": [ - { - "name": "Zenodo", - "url": "https://zenodo.org/record/3905058" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, prepared for publication by the publishing authors, contains MS data and RAMAN spectral data in CSV format. Moreover, CSVs with information on samples, gene activity, tissue type and more ara available. The corresponding scientific publication does not reference the dataset in Zenodo via its DOI.", - "subdiscipline": [ - "medicinal chemistry", - "chemometric", - "physical chemistry" - ], - "tags": ["raman spectroscopy", "biomedical diagnostics"] - }, - { - "title": "Comparability of Raman spectroscopic configurations: A large scale cross-laboratory study", - "authors": "Shuxia Guo, Claudia Beleites, Ute Neugebauer, Sara Abalde-Cela, Nils Kristian Afseth, Fatima Alsamad, Suresh Anand, Cuauhtemoc Araujo-Andrade, Sonja Aškrabić, Ertug Avci, Monica Baia, Malgorzata Baranska, Enrico Baria, Luis A. E. Batista de Carvalho, Philippe de Bettignies, Alois Bonifacio, Franck Bonnier, Eva Maria Brauchle, Hugh J. Byrne, Igor Chourpa, Riccardo Cicchi, Frederic Cuisinier, Mustafa Culha, Marcel Dahms, Catalina David, Ludovic Duponchel, Shiyamala Duraipandian, Samir F. El-Mashtoly, David I. Ellis, Gauthier Eppe, Guillaume Falgayrac, Ozren Gamulin, Benjamin Gardner, Peter Gardner, Klaus Gerwert, Evangelos J. Giamarellos-Bourboulis, Sveinbjorn Gizurarson, Marcin Gnyba, Royston Goodacre, Patrick Grysan, Orlando Guntinas-Lichius, Helga Helgadottir, Vlasta Mohaček Grošev, Catherine Kendall, Roman Kiselev, Micha Kölbach, Christoph Krafft, Sivashankar Krishnamoorthy, Patrick Kubryck, Bernhard Lendl, Pablo Loza-Alvarez, Fiona M. Lyng, Susanne Machill, Cedric Malherbe, Monica Marro, Maria Paula M. Marques, Ewelina Matuszyk, Carlo Francesco Morasso, Myriam Moreau, Howbeer Muhamadali, Valentina Mussi, Ioan Notingher, Marta Z. Pacia, Francesco S. Pavone, Guillaume Penel, Dennis Petersen, Olivier Piot, Julietta V. Rau, Marc Richter, Maria Krystyna Rybarczyk, Hamideh Salehi, Katja Schenke-Layland, Sebastian Schlücker, Markus Schosserer, Karin Schütze, Valter Sergo, Faris Sinjab, Janusz Smulko, Ganesh D. Sockalingum, Clara Stiebing, Nick Stone, Valérie Untereiner, Renzo Vanna, Karin Wieland, Jürgen Popp, and Thomas Bocklitz*", - "journal": "Analytical Chemistry", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1021/acs.analchem.0c02696", - "linkdata": [ - { - "name": "Zenodo", - "url": "https://zenodo.org/record/4152953" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, prepared for publication by the publishing authors, contains slightly processed raw data split in wavenumber axis files (wy_XYZ), spectral intensity files (spec_XYZ) and metadata files (meta_XYZ) – all in CSV format. The corresponding scientific publication references the dataset in Zenodo via its DOI.", - "subdiscipline": ["analytical chemistry"], - "tags": ["raman spectroscopy"] - }, - { - "title": "A triptycene-based enantiopure bis(diazadibenzoanthracene) by a chirality-assisted synthesis approach", - "authors": "Xubin Wang, Bernd Kohl, Frank Rominger, Sven M. Elbert, Prof. Michael Mastalerz", - "journal": "Chemistry – A European Journal", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1002/chem.202002781", - "linkdata": [ - { - "name": "heiDATA", - "url": "https://doi.org/10.11588/data/46LINE" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc25b961" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc25b972" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, contain NMR, MS and IR data in the instrument manufacturers formats. The IR data is also availabe as data point table (DPT) files. Data of elemental analysis was added to the dataset as scans of analysis reports. Crystallographic data as CIF files are available from CSD. References to datasets in CSD are given in the supporting information PDF of the corresponding article, while the dataset in heiDATA is not referenced in the scientific publication or supporting information.", - "subdiscipline": ["organic chemistry"], - "tags": ["N-heteropolycyclenes"] - }, - { - "title": "Bicyclo[1.1.1]pentyl sulfoximines: synthesis and functionalizations", - "authors": "Robin M. Bär, Lukas Langer, Martin Nieger, Stefan Bräse", - "journal": "Advanced Synthesis & Catalysis", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1002/adsc.201901453", - "linkdata": [ - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hkz5" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl07" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl18" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl29" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl3b" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl4c" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl5d" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23hl6f" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, contains NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as CIF are available from CSD. References to datasets in CSD are given in the supporting information PDF of the corresponding article via CSD numbers.", - "subdiscipline": ["organic chemistry", "analytical chemistry"], - "tags": ["organic synthesis", "heterocycles"] - }, - { - "title": "Exploring the role of solvent on carbohydrate−aryl interactions by diffusion NMR-based studies", - "authors": "Linda Jütten, Karla Ramírez-Gualito, Andreas Weilhard, Benjamin albrecht, Gabriel Cuevas, María del Carmen Fernández-Alonso, Jesús Jiménez-Barbero, Nils E. Schlörer, Dolores Diaz", - "journal": "ACS Omega", - "pubyear": 2018, - "linkpub": "https://doi.org/10.1021/acsomega.7b01630", - "linkdata": [ - { - "name": "NMRShiftDB2", - "url": "http://www.nmrshiftdb.org/molecule/60004029" - }, - { - "name": "NMRShiftDB2", - "url": "http://www.nmrshiftdb.org/molecule/60004074" - }, - { - "name": "NMRShiftDB2", - "url": "http://www.nmrshiftdb.org/molecule/60004071" - }, - { - "name": "NMRShiftDB2", - "url": "http://www.nmrshiftdb.org/molecule/60004072" - }, - { - "name": "NMRShiftDB2", - "url": "http://www.nmrshiftdb.org/molecule/60004073" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The NMR datasets, curated by the publishing authors, was published in NMRShiftDB2. References to the dataset is given via DOI in the supporting information PDF.", - "subdiscipline": ["analytical chemistry"], - "tags": ["Carbohydrates", "NMR spectroscopy"] - }, - { - "title": "A new generation of terminal copper nitrenes and their application in aromatic C–H amination reactions", - "authors": "Fabian Thomas, Matthias Oster, Florian Schön, Kai C. Göbgen, Benedikt Amarouch, Dominik Steden, Alexander Hoffmann, Sonja Herres-Pawlis", - "journal": "Dalton Transactions", - "pubyear": 2021, - "linkpub": "https://doi.org/10.1039/D1DT00832C", - "linkdata": [ - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/UFNYJPFRGDSKSE-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/LSGGPBYVWWQPOY-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/AXGNYRCNCNZKKZ-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/ZXFVPDKZHCLOHM-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/MHRJPVSEKXPPCE-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/FONYBVKTMVEXPM-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/BJUATVHTJTTWSW-UHFFFAOYSA-H.1" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23w7mw" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23w7nx" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23w7py" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23w7qz" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23w7r0" - }, - { - "name": "ioChemDB", - "url": "https://doi.org/10.19061/iochem-bd-6-84" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, contain NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as CIF files are available from CSD and computational data was deposited in ioChem-DB. References to the crystallographic data is given in the section on supporting information in the corresponding publication. References on NMR data can be retrieved from the supplementary information PDF. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", - "subdiscipline": ["inorganic chemistry"], - "tags": ["inorganic synthesis"] - }, - { - "title": "Exceptional substrate diversity in oxygenation reactions catalyzed by a bis(µ-oxo) copper complex", - "authors": "Melanie Paul, Melissa Teubner, Benjamin Grimm-Lebsanft, Christiane Golchert, Yannick Meiners, Laura Senft, Kristina Keisers, Patricia Liebhäuser, Thomas Rösener, Florian Biebl, Sören Buchenau, Maria Naumova, Vadim Murzin, Roxanne Krug, Alexander Hoffmann, Jörg Pietruszka, Ivana Ivanovic-Burmazovic, Michael Rübhausen, Sonja Herres-Pawlis ", - "journal": "Chemistry – A European Journal", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1002/chem.202000664", - "linkdata": [ - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/FCAMUPIRWKNASD-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/XQWHZHODENELCJ-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/WYPRQDLUGJFJCG-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/SXYROFUQPFOADI-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/NLACLAPNGFWSTA-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/WOMQOOHUINDJRV-UHFFFAOYSA-M.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/WOMQOOHUINDJRV-UHFFFAOYSA-M.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/SQELSYLGCLCOLU-UHFFFAOYSA-M.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/SEXRCKWGFSXUOO-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/JJGCDLVZJZGHBZ-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/ODJOHIWKLOPSFF-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/AEFJLSGXOWZNJZ-UHFFFAOYSA-N.1" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/BMNLXKVRGRRHKW-UHFFFAOYSA-N.1" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23gtbr" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23gtcs" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23gtdt" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23gtfv" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc23wtb5" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, contain NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as .cif files are available from CSD. References to datasets in Chemotion Repository are given in the supporting information PDF of the corresponding article via DOIs, while datasets in CSD were referenced with their CCDC accession number. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", - "subdiscipline": ["inorganic chemistry"], - "tags": ["copper complexes"] - }, - { - "title": "Synthesis and biological evaluation of highly potent fungicidal deoxy-hygrophorones", - "authors": "Toni Ditfe, Eileen Bette, Haider N. Sultani, Alexander Otto, Ludger A. Wessjohann, Norbert Arnold, Bernhard Westermann", - "journal": "European Journal of Organic Chemistry", - "pubyear": 2021, - "linkpub": "https://doi.org/10.1002/ejoc.202100729", - "linkdata": [ - { - "name": "RADAR", - "url": "https://doi.org/10.22000/451" - }, - { - "name": "nmrXiv", - "url": "https://doi.org/10.57992/nmrxiv.p57" - } - ], - "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", - "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR, contains NMR and MS data in the instrument manufacturers formats as well as in open formats such as JCAMP-DX, NMReDATA (Mnova 14.1.1) for NMR data and mzML for MS data. Results from the bioassay are available as tabular files and as CSV. Additionally, all structures are provided as CTfiles and are listed, corresponding to their numbering in the publication, in a CSV also including IPB 3LC lab journal entries, SMILES structure codes and InChI and InChIKey identifiers. The corresponding scientific article references the dataset in the section on supporting information.", - "subdiscipline": ["organic chemistry", "natural products chemistry"], - "tags": ["natural products"] - }, - { - "title": "5α-Cyprinol sulfate: complete NMR assignment and revision of earlier published data, including the submission of a computer-readable assignment in NMReDATA format", - "authors": "Meike Hahn, Eric von Elert, Laurent Bigler, M. Dolores Díaz Hernández, Nils E. Schloerer", - "journal": "Magnetic Resonance in Chemistry", - "pubyear": 2018, - "linkpub": "https://doi.org/10.1002/mrc.4782", - "linkdata": [ - { - "name": "NMRShiftDB2", - "url": "https://doi.org/10.18716/nmrshiftdb2/60004113/nmredata_mrc_cd3od" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, is published in NMRShiftDB2 and also available from the publisher as supporting material. References to the dataset is given via DOI in the supporting information MS word document.", - "subdiscipline": ["organic chemistry", "natural products chemistry"], - "tags": ["natural products", "NMR spectroscopy"] - }, - { - "title": "Modular Synthesis of New Pyrroloquinoline Quinone Derivatives", - "authors": "Rachel Janßen, Violeta A. Vetsova, Dominik Putz, Peter Mayer, Lena J. Daumann", - "journal": "Synthesis", - "pubyear": 2023, - "linkpub": "https://doi.org/10.1055/s-0041-1738426", - "linkdata": [ - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/collection/RAJ_2022-08-25" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, was awarded with the FAIR4Chem Award 2023.", - "subdiscipline": ["organic chemistry"], - "tags": ["organic synthesis"] - }, - { - "title": "Predictive design of ordered mesoporous silica with well-defined, ultra-large mesopores", - "authors": "Charlotte Vogler, Stefan Naumann, Johanna R. Bruckner", - "journal": "Molecular Systems Design & Engineering", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1039/D2ME00107A", - "linkdata": [ - { - "name": "DaRus", - "url": "https://doi.org/10.18419/darus-2374" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The dataset, curated by the publishing authors, was awarded with the FAIR4Chem Award 2023.", - "subdiscipline": [ - "physical chemistry", - "polymer chemistry", - "material science" - ], - "tags": ["mesoporous silica"] - }, - { - "title": "Modular Synthesis of trans-A2B2-Porphyrins with Terminal Esters: Systematically Extending the Scope of Linear Linkers for Porphyrin-Based MOFs", - "authors": "Stefan M. Marschner, Ritesh Haldar, Olaf Fuhr, Christof Wöll, Stefan Bräse", - "journal": "Chemistry – A European Journal", - "pubyear": 2020, - "linkpub": "https://doi.org/10.1002/chem.202003885", - "linkdata": [ - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-PBTPREHATA-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ.4" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-BHYVHYPBRY-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-QKHPYPUCYC-UHFFFADPSC-NUHFF-NHYOA-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DJGWMTKKMO-UHFFFADPSC-NUHFF-NNYHH-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-CQICNQVIXS-UHFFFADPSC-NUHFF-NKDHF-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UYKMRQXETK-UHFFFADPSC-NUHFF-NWLSV-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DVNRJSFZLK-UHFFFADPSC-NUHFF-NWLSV-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LVGOHACWPD-UHFFFADPSC-NUHFF-NUVBP-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JQQMHNZHWI-UHFFFADPSC-NUHFF-NNSBK-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DJCDFXZBRU-UHFFFADPSC-NUHFF-NOCLW-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LLIFZWKYAN-UHFFFADPSC-NUHFF-NHDGP-NUHFF-ZZZ" - }, - { - "name": "Chemotion Repository", - "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LHQKMJBXIU-UHFFFADPSC-NUHFF-NLTSL-NUHFF-ZZZ" - }, - { - "name": "CSD/CCDC", - "url": "https://doi.org/10.5517/ccdc.csd.cc216k3y" - } - ], - "linkcomment": "curated by the publishing authors", - "description": "The datasets, curated by the publishing authors, were published in CSD and Chemotion Repository. Please note, that Collection DOIs did not exist at the time of publication. Hence, many dataset DOIs are reported.", - "subdiscipline": ["organic chemistry"], - "tags": ["porphyrins"] - }, - { - "title": "Antimicrobial Prenylated Isoflavones from the Leaves of the Amazonian Medicinal Plant Vatairea guianensis Aubl.", - "authors": "Serhat S. Çiçek, Mayra Galarza Pérez, Arlette Wenzel-Storjohann, Roberto M. Bezerra, Jorge F. O. Segovia, Ulrich Girreser, Isamu Kanzaki, and Deniz Tasdemir", - "journal": "Journal of Natural Products", - "pubyear": 2022, - "linkpub": "https://doi.org/10.1021/acs.jnatprod.1c01035", - "linkdata": [ - { - "name": "RADAR4Chem", - "url": "https://doi.org/10.22000/1865" - }, - { - "name": "nmrXiv", - "url": "https://doi.org/10.57992/nmrxiv.p55" - } - ], - "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", - "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR4Chem as well as nmrXiv, includes NMR, IR and MS data in the instrument manufacturers' formats as well as in open formats such as JCAMP-DX (TopSpin 4.3) for NMR data and mzML for MS data. UV-VIS spectra are only available as PDF format, due to challenges with data export, and all chemical structures are provided as Molfiles and listed in a CSV according to their numbering in the publication, including local sample identifiers, SMILES structure codes, and InChI and InChIKey identifiers. A markdown README and a rendered HTML version provide an entry point for human readers. The corresponding scientific article does not reference the dataset as it was published one year before the dataset was published.", - "subdiscipline": ["organic chemistry"] - } + { + "title": "Adsorption of light gases in covalent organic frameworks: comparison of classical density functional theory and grand canonical Monte Carlo simulations", + "authors": "Christopher Keßler, Johannes Eller, Joachim Gross, Niels Hansen", + "journal": "Microporous and Mesoporous Materials", + "pubyear": 2021, + "linkpub": "https://doi.org/10.1016/j.micromeso.2021.111263", + "linkdata": [ + { + "name": "DaRUS", + "url": "https://doi.org/10.18419/darus-1775" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "This dataset was the winner of the FAIR4Chem Award 2022. Curated by the publishing authors, it contains PC-SAFT-based classical DFT calculations and grand canonical Monte Carlo simulations for adsorption of methane, ethane, n-butane, nitrogen, and their binary mixtures in the COFs TpPa-1 and 2,3-DhaTph up to 50 bar, showing excellent agreement and selective enrichment of longer hydrocarbons.", + "subdiscipline": [ + "physical chemistry", + "materials science", + "chemical engineering" + ], + "tags": [ + "covalent organic frameworks", + "adsorption", + "classical DFT", + "GCMC", + "PC-SAFT" + ] + }, + { + "title": "Electronic Structure of a Diiron Complex", + "authors": "Mario Winkler, Marc Schnierle, Felix Ehrlich, Kim-Isabelle Mehnert, David Hunger, Alena M. Sheveleva, Lukas Burkhardt, Matthias Bauer, Floriana Tuna, Mark R. Ringenberg, Joris van Slageren", + "journal": "Inorganic Chemistry", + "pubyear": 2021, + "linkpub": "https://doi.org/10.1021/acs.inorgchem.0c03259", + "linkdata": [ + { + "name": "DaRUS", + "url": "https://doi.org/10.18419/darus-1410" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, accompanies a multitechnique study of the diiron complex [(dppf)Fe(CO)3]0/+ using magnetic circular dichroism, X-ray absorption/emission, high-frequency EPR, and Mössbauer spectroscopy to pinpoint oxidation at the carbonyl iron center and characterize low-spin iron(I) with slow spin dynamics.", + "subdiscipline": [ + "inorganic chemistry", + "physical chemistry", + "spectroscopy" + ], + "tags": [ + "diiron complex", + "EPR", + "Mössbauer", + "X-ray spectroscopy", + "spin dynamics" + ] + }, + { + "title": "Dynamic Modelling of Phosphorolytic Cleavage Catalyzed by Pyrimidine-Nucleoside Phosphorylase", + "authors": "Robert T. Giessmann, Niels Krausch, Felix Kaspar, Mariano Nicolas Cruz Bournazou, Anke Wagner, Peter Neubauer, Matthias Gimpel", + "journal": "Processes", + "pubyear": 2019, + "linkpub": "https://doi.org/10.3390/pr7060380", + "linkdata": [ + { + "name": "Zenodo", + "url": "https://doi.org/10.5281/zenodo.3243352" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "This dataset was the winner of the FAIR4Chem Award 2022. Curated by the publishing authors, it contains UV/Vis time-course measurements used to build an ODE-based dynamic model for phosphorolytic cleavage of deoxythymidine by pyrimidine-nucleoside phosphorylase. It captures full reaction trajectories to equilibrium for substrate/product pairs and underpins kinetic parameterization and validation of the reversible enzymatic model.", + "subdiscipline": [ + "biochemical engineering", + "enzymology", + "process modeling" + ], + "tags": [ + "pyrimidine-nucleoside phosphorylase", + "dynamic modeling", + "UV/Vis", + "enzyme kinetics", + "ODE model" + ] + }, + { + "title": "FAIR and scalable management of small-angle X-ray scattering data", + "authors": "Torsten Giess, Selina Itzigehl, Jan Range, Richard Schömig, Johanna R. Bruckner, Jürgen Pleiss", + "journal": "Journal of Applied Crystallography", + "pubyear": 2023, + "linkpub": "https://doi.org/10.1107/S1600576723001577", + "linkdata": [ + { + "name": "DaRUS", + "url": "https://doi.org/10.18419/darus-2842" + }, + { + "name": "GitHub", + "url": "https://github.com/FAIRChemistry/SAS_toolbox/releases/tag/v1.0.0" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, packages the SAS-tools Python workflow (pyAnIML, easyDataverse, Jupyter) for FAIR management of small-angle X-ray scattering data, including raw SAXS measurements, AnIML metadata, OMEX archives, and analysis scripts applied to alkyltrimethylammonium surfactant phase diagrams varying chain length and counterions.", + "subdiscipline": [ + "physical chemistry", + "analytical chemistry", + "research data management" + ], + "tags": [ + "SAXS", + "FAIR data", + "AnIML", + "Dataverse", + "surfactant phase diagrams" + ] + }, + { + "title": "Axial Diffusion in Liquid-Saturated Cylindrical Silica Pore Models", + "authors": "Hamzeh Kraus, Marc Högler, Niels Hansen", + "journal": "The Journal of Physical Chemistry C", + "pubyear": 2023, + "linkpub": "https://doi.org/10.1021/acs.jpcc.3c01974", + "linkdata": [ + { + "name": "DaRUS", + "url": "https://doi.org/10.18419/darus-3067" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contains molecular dynamics simulations of 5 nm cylindrical silica mesopores saturated with 14 solvents. It provides trajectories and analyses for self-diffusion via Einstein MSD fits and discretized Smoluchowski diffusion, quantifying bulk-to-pore diffusion ratios of ~2–3 and assessing confinement effects for crystalline vs. amorphous silica pores.", + "subdiscipline": [ + "physical chemistry", + "materials science", + "computational chemistry" + ], + "tags": [ + "mesoporous silica", + "molecular dynamics", + "self-diffusion", + "confinement", + "Smoluchowski diffusion" + ] + }, + { + "title": "Database of Raman and ATR-FTIR spectra of weathered and biofouled polymers", + "authors": "Robin Lenz, Franziska Fischer, Melinda Arnold, Verónica Fernández-González, Carmen María Moscoso Pérez, José Manuel Andrade-Garda, Soledad Muniategui-Lorenzo, Dieter Fischer", + "journal": "Zenodo", + "pubyear": 2023, + "linkpub": "https://doi.org/10.5281/zenodo.8314801", + "linkdata": [ + { + "name": "GitHub", + "url": "https://github.com/robna/MPX_specDB" + }, + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/1820" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "This dataset was the winner of the FAIR4Chem Award 2024. Curated by the publishing authors, it is a spectroscopic library containing Raman and ATR-FTIR spectra of weathered and biofouled polymers collected from the marine environment. Spectroscopic data derived from in situ experiments with 10 different polymers deployed across five geographical locations and immersed for varying intervals over four seasons. Metadata and individual spectra are accessible via an interactive web application and as downloadable files.", + "subdiscipline": [ + "analytical chemistry", + "polymer science", + "environmental chemistry" + ], + "tags": [ + "Raman spectroscopy", + "ATR-FTIR", + "microplastics", + "weathering", + "biofouling", + "polymers" + ] + }, + { + "title": "Diiminium Nucleophile Adducts Are Stable and Convenient Strong Lewis Acids", + "authors": "Niklas Bormann, Jas S. Ward, Ann Kathrin Bergmann, Paula Wenz, Kari Rissanen, Yiwei Gong, Wolf-Benedikt Hatz, Alexander Burbaum, Florian F. Mulks", + "journal": "Chemistry – A European Journal", + "pubyear": 2023, + "linkpub": "https://doi.org/10.1002/chem.202302089", + "linkdata": [ + { + "name": "iO-Chem BD", + "url": "https://doi.org/10.19061/iochem-bd-6-233" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contains synthesis and characterization data of diiminium nucleophile adducts as stable and convenient strong Lewis acids. The study includes X-ray crystallographic data, spectroscopic analysis, and reactivity studies demonstrating applications in fluoride, hydride, and oxide abstraction reactions.", + "subdiscipline": ["organic chemistry", "catalysis"], + "tags": ["Lewis acids", "fluoride abstraction", "synthetic chemistry"] + }, + { + "title": "Making Photocatalysis Comparable Using a Modular and Characterized Open-Source Photoreactor", + "authors": "Daniel Kowalczyk, Pengcheng Li, Amir Abbas, Jonas Eichhorn, Philipp Buday, Magdalena Heiland, Andrea Pannwitz, Felix H. Schacher, Wolfgang Weigand, Carsten Streb, Dirk Ziegenbalg", + "journal": "ChemPhotoChem", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1002/cptc.202200044", + "linkdata": [ + { + "name": "GitHub", + "url": "https://github.com/photonZfeed/modularPhotoreactor" + }, + { + "name": "Zenodo", + "url": "https://doi.org/10.5281/zenodo.5614942" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "This dataset was the winner of the FAIR4Chem Award 2025. Curated by the publishing authors, it includes detailed documentation and characterization data of a modular, open-source photoreactor platform for reproducible photocatalytic experiments. The dataset provides comprehensive technical specifications, assembly instructions, and standardized procedures enabling comparable photocatalysis research across different laboratories.", + "subdiscipline": ["organic chemistry", "catalysis"], + "tags": ["photocatalysis", "open-source", "photoreactor"] + }, + { + "title": "Why alloying with noble metals does not decrease the oxidation of platinum: a DFT-based ab initio thermodynamics study", + "authors": "Alexander Kafka, Franziska Hess", + "journal": "Physical Chemistry Chemical Physics", + "pubyear": 2024, + "linkpub": "https://doi.org/10.1039/D4CP01807A", + "linkdata": [ + { + "name": "NOMAD", + "url": "https://dx.doi.org/10.17172/NOMAD/2024.08.21-1" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contains computational data from density functional theory (DFT) calculations and ab initio thermodynamics investigating the bulk stability of platinum alloys (Pt–Au, Pt–Ir, Pt–Re, Pt–W, Pt–Ag, Pt–Rh, Pt–Cu, Pt–Ni, and Pt–Co) and their oxides. The study explores strategies to reduce platinum oxidation and corrosion through alloying, demonstrating that platinum and oxygen affinity of the alloying metal are correlated. Copper was identified as a promising candidate for stabilizing platinum catalysts in the Ostwald process.", + "subdiscipline": [ + "physical chemistry", + "materials science", + "catalysis" + ], + "tags": [ + "platinum alloys", + "DFT calculations", + "thermodynamics", + "catalysis", + "corrosion" + ] + }, + { + "title": "Autonomous Battery Optimization by Deploying Distributed Experiments and Simulations", + "authors": "Monika Vogler, Simon Krarup Steensen, Francisco Fernando Ramírez, Leon Merker, Jonas Busk, Johan Martin Carlsson, Laura Hannemose Rieger, Bojing Zhang, François Liot, Giovanni Pizzi, Felix Hanke, Eibar Flores, Hamidreza Hajiyani, Stefan Fuchs, Alexey Sanin, Miran Gaberšček, Ivano Eligio Castelli, Simon Clark, Tejs Vegge, Arghya Bhowmik, Helge Sören Stein", + "journal": "Advanced Energy Materials", + "pubyear": 2024, + "linkpub": "https://doi.org/10.1002/aenm.202403263", + "linkdata": [ + { + "name": "Materials Cloud", + "url": "https://doi.org/10.24435/materialscloud:qt-1s" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contains data from the FINALES framework for autonomous battery optimization using distributed experiments and simulations. The dataset includes electrolyte formulation data, computational simulation results, and end-of-life prediction models demonstrating automated approaches combining experimental and computational battery research methods.", + "subdiscipline": ["physical chemistry", "materials science"], + "tags": [ + "battery materials", + "autonomous optimization", + "machine learning" + ] + }, + { + "title": "Allantofuranone Biosynthesis and Precursor-Directed Mutasynthesis of Hydroxylated Analogues", + "authors": "Carsten Wieder, Claudia Simon-Sánchez, Johannes C. Liermann, Rainer Wiechert, Karsten Andresen, Eckhard Thines, Till Opatz, Anja Schüffler", + "journal": "Journal of Natural Products", + "pubyear": 2025, + "linkpub": "https://doi.org/10.1021/acs.jnatprod.5c00197", + "linkdata": [ + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/collection/JCL_2025-02-05" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The publication deals with genome mining and heterologous biosynthesis experiments in Aspergillus oryzae, elucidating the biosynthetic pathway of allantofuranone and related compounds. The dataset, curated by the authors, published in Chemotion Repository includes analytical data of natural products and pathway intermediates obtained through biosynthetic reconstitution and precursor-directed mutasynthesis, demonstrating the production of hydroxylated analogues including the new natural products deoxyascocorynin, hydroxyterferol, and hydroxyallantofuranone.", + "subdiscipline": ["organic chemistry", "natural products chemistry"], + "tags": ["biosynthesis", "natural products", "genome mining"] + }, + { + "title": "Hydrogen bond redistribution effects in mixtures of protic ionic liquids sharing the same cation: non-ideal mixing with large negative mixing enthalpies", + "authors": "Benjamin Golub, Daniel Ondo, Viviane Overbeck, Ralf Ludwig, Dietmar Paschek", + "journal": "Physical Chemistry Chemical Physics", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1039/D2CP01209J", + "linkdata": [ + { + "name": "RosDok", + "url": "https://doi.org/10.18453/rosdok_id00003537" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, includes data from molecular dynamics simulations and was published in RosDok. The dataset also includes documentation on PDF format. The RosDok DOI is listed in the references of the corresponding publication.", + "subdiscipline": ["physical chemistry"], + "tags": ["physical chemistry"] + }, + { + "title": "Linderazulen aus einer invasiven Pflanze - Delphi und sein violettes Wunder", + "authors": "Nils Keltsch, Viola Munzert, Klaus-Peter Zeller, Hans-Ullrich Siehl, Stefan Berger, Dieter Sicker", + "journal": "Chemie in unserer Zeit", + "pubyear": 2019, + "linkpub": "https://doi.org/10.1002/ciuz.201900868", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/786" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/LMVGRKPOXLBIFQ-UHFFFAOYSA-N.1" + }, + { + "name": "nmrXiv", + "url": "https://doi.org/10.57992/nmrxiv.p2" + } + ], + "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", + "description": "The dataset, prepared for publication under the NFDI4Chem stewardship and published in RADAR4Chem contains NMR, MS, UV-VIS and IR data. NMR data are provided in vendor format, as JCAMP-DX (MNova) and NMRium format including NMReDATA (SDfile). MS data are available in vendor formats and open format mzML. IR and UV-VIS data are accessible in tabular files and in JCAMP-DX format. The structure information on Linderazulene and Charmazulene and further supplementary information are provided as tables and SDfiles. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", + "subdiscipline": ["organic chemistry", "analytical chemistry"], + "tags": ["natural products", "NMR spectroscopy"] + }, + { + "title": "Die Polei-Minze im Wandel der Zeiten", + "authors": "Agneta Prasse, Viola Munzert, Elena José, Klaus-Peter Zeller, Hans-Ullrich Siehl, Stefan Berger, Dieter Sicker", + "journal": "Chemie in unserer Zeit", + "pubyear": 2019, + "linkpub": "https://doi.org/10.1002/ciuz.201800860", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/785" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/NZGWDASTMWDZIW-MRVPVSSYSA-N.1" + }, + { + "name": "nmrXiv", + "url": "https://doi.org/10.57992/nmrxiv.p16" + } + ], + "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", + "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR4Chem, contains NMR, MS and UV-VIS data in the instrument manufacturers formats as well as in open formats such as JCAMP-DX for NMR and UV-VIS data and mzML for MS data. Analytical data of CD spectroscopy and MS spectrometry were exported as tabular files and are also provided as CSV files. The structure information on (R)-+-Pulegon and supplementary information are provided as tabular files and as as SDfiles. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", + "subdiscipline": ["organic chemistry", "analytical chemistry"], + "tags": ["natural products", "NMR spectroscopy"] + }, + { + "title": "Karminsäure - Das Rot aus Cochenilleläusen", + "authors": "Franziska Schulze, Juliane Titus, Peter Mettke, Stefan Berger, Hans-Ullrich Siehl, Klaus-Peter Zeller, Dieter Sicker", + "journal": "Chemie in unserer Zeit", + "pubyear": 2013, + "linkpub": "https://doi.org/10.1002/ciuz.201300634", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/795" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/DGQLVPJVXFOQEV-JNVSTXMASA-N.1" + }, + { + "name": "nmrXiv", + "url": "https://doi.org/10.57992/nmrxiv.p17" + } + ], + "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", + "description": "The dataset, prepared for publication under the NFDI4Chem stewardship and published in RADAR4Chem contains NMR, MS, UV-VIS and CD data. NMR data was previously published in NMRShiftDB2 and are provided in vendor format together with NMReDATA (SDfile). MS data were converted in several different formats including mzML. UV-VIS data are available as tabular files and in JCAMP-DX format. The structure information on carminic acid and further supplementary information are provided in tabular files and as SDfile. The corresponding article does not contain a reference to the dataset, as published some years before the dataset was published.", + "subdiscipline": ["organic chemistry", "analytical chemistry"], + "tags": ["natural products", "NMR spectroscopy"] + }, + { + "title": "Resolving the different bulk moduli within individual soft nanogels using small-angle neutron scattering", + "authors": "Judith Elizabeth Houston, Lisa Fruhner, Alexis de la Cotte, Javier Rojo González, Alexander Valerievich Petrunin, Urs Gasser, Ralf Schweins, Jürgen Allgaier, Walter Richtering, Alberto Fernandez-Nieves, Andrea Scotti", + "journal": "Science Advances", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1126/sciadv.abn6129", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/604" + }, + { + "name": "ILL Data Portal", + "url": "http://doi.org/10.5291/ILL-DATA.9-11-2067" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset in RADAR4Chem, curated by the publishing authors, includes SANS data as tab separated text files. The corresponding article references the dataset in RADAR4Chem in the data and materials availability statement via its URL. Moreover, the article references a dataset in Institut Laue-Langevin (ILL) data portal repository via its DOI.", + "subdiscipline": ["physical chemistry"], + "tags": ["nanogels"] + }, + { + "title": "Manipulating electron transfer – the influence of substituents on novel copper guanidine quinolinyl complexes", + "authors": "Joshua Heck, Fabian Metz, Sören Buchenau, Melissa Teubner, Benjamin Grimm-Lebsanft, Thomas P. Spaniol, Alexander Hoffmann, Michael A. Rübhausen, Sonja Herres-Pawlis", + "journal": "Chemical Science", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1039/D2SC02910C", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/613" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JHIAOWGCGN-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XNDIRRNFWB-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YLBKXSDEWV-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-MTPUXEIATO-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DYIBODSCVM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YSUUDYJLPD-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-BRNGTXITIQ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-ACOFZHHYLN-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-QLLLYNCAUW-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-YKNRUBPOGQ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-ZJSFNHZUYT-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-HXVOLPKNEJ-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-FYZDDQVKLM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-AOATVJLAFL-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XTTRESRELV-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-MCYXBNUZMI-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-NNDILYOKJA-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DMWOEMCLSH-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JZHZQROLCJ-UHFFFADPSC-NUHFF-MUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-FNFSJYCLRP-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UMMQIWZYOP-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-GCLZBRQZKM-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-XYXSWFSTLI-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JBXRXORXEO-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-GQFHEVHUGU-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UMXPYYQOWK-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JQDGMCVIMF-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DRQHCTISPL-UHFFFADPSC-NUHFF-LUHFF-NUHFF-ZZZ" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, includes reactions and sample data with its ATR-FTIP, HR-ESI-TOF-MS and 1H/13C NMR data published in Chemotion Repository. Data of DFT calculations is available in RADAR4Chem and referenced in the data availability statement of the corresponding publication. The supplementary information PDF, which reference datasets in Chemotion Repository via their DOI, and crystal structure data are available from the web page of the publisher. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", + "subdiscipline": ["inorganic chemistry"], + "tags": ["copper complexes"] + }, + { + "title": "In-situ study of the impact of temperature and architecture on the interfacial structure of microgels", + "authors": "Steffen Bochenek, Fabrizio Camerin, Emanuela Zaccarelli, Armando Maestro, Maximilian M. Schmidt, Walter Richtering, Andrea Scotti", + "journal": "Nature Communications", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1038/s41467-022-31209-3", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/603" + }, + { + "name": "ILL Data Portal", + "url": "https://doi.org/10.5291/ILL-DATA.EASY-462" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, includes raw, associated, and derived data of NR, DLS, AFM and SANS supporting the reported results. RADAR DOI as well as ePIC for archived dataset, identical to published dataset, are given in the data availability statement. The RADAR DOI is also listed listed in the references of the corresponding publication. The NR raw data used in the study are available in the ILL Data Portal repository.", + "subdiscipline": ["physical chemistry"], + "tags": ["macromolecules"] + }, + { + "title": "A risk based assessment approach for chemical mixtures from wastewater treatment plant effluents", + "authors": "Saskia Finckh, Liza-Marie Beckers, Wibke Busch, Eric Carmona, Valeria Dulio, Lena Kramer, Martin Krauss, Leo Posthuma, Tobias Schulze, Jaap Slootweg, Peter C. von der Ohe, Werner Brack", + "journal": "Environment International", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1016/j.envint.2022.107234", + "linkdata": [ + { + "name": "Pangaea", + "url": "https://doi.pangaea.de/10.1594/PANGAEA.940755" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, includes results data, raw MS files, and processing data (MZmine, MZquant, Tracefinder) in Pangaea – a repository for geospatial data and environmental chemistry. Supplementary material of the corresponding publication includes a word document and a excel document.", + "subdiscipline": [ + "organic chemistry", + "analytical chemistry", + "environmental chemistry" + ], + "tags": ["mass spectrometry"] + }, + { + "title": "Improving the screening analysis of pesticide metabolites in human biomonitoring by combining high-throughput in vitro incubation and automated LC−HRMS data processing", + "authors": "Carolin Huber, Erik Müller, Tobias Schulze, Werner Brack, and Martin Krauss", + "journal": "Analytical Chemistry", + "pubyear": 2021, + "linkpub": "https://doi.org/10.1021/acs.analchem.1c00972", + "linkdata": [ + { + "name": "MetaboLights", + "url": "https://www.ebi.ac.uk/metabolights/MTBLS2402/descriptors" + }, + { + "name": "MassBank EU", + "url": "https://github.com/MassBank/MassBank-data/commit/691fe2429e33c883e56d5234277a6586a128cc5c" + }, + { + "name": "GitHub", + "url": "https://github.com/chufz/incubatoR" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contain MS data and were published in MetaboLight, Massbank and MassBank-data/GitHub. All raw mass spectra were converted to the open format mzML format. The used code is available at GitHub and were referenced in the corresponding article.", + "subdiscipline": [ + "organic chemistry", + "analytical chemistry", + "metabolomics", + "epidemiology" + ], + "tags": ["mass spectrometry"] + }, + { + "title": "Desymmetrization strategy to achieve triptycene-based 3,6-dimethoxytriphenylenes via oxidative cyclodehydrogenation", + "authors": "Dennis Reinhard, Frank Rominger, Michael Mastalerz", + "journal": "European Journal of Organic Chemistry", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1002/ejoc.202001073", + "linkdata": [ + { + "name": "heiDATA", + "url": "https://doi.org/10.11588/data/OH6757" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc25v89m" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, published in heiData, contains data of NMR, MS, IR in the instrument manufacturers formats.The IR data is also available in TSV format. Elemental analysis data is provided as JPG. Crystallographic data as CIF are available from CSD. References to a dataset in CSD is given in the supporting information PDF of the corresponding scientific publication.", + "subdiscipline": ["organic chemistry"], + "tags": ["Triptycene"] + }, + { + "title": "A dataset of 255,000 randomly selected and manually classified extracted ion chromatograms for evaluation of peak detection methods ", + "authors": "Erik Müller, Carolin Huber, Liza-Marie Beckers, Werner Brack, Martin Krauss, Tobias Schulze", + "journal": "Metabolites", + "pubyear": 2020, + "linkpub": "https://doi.org/10.3390/metabo10040162", + "linkdata": [ + { + "name": "Zenodo", + "url": "https://doi.org/10.5281/zenodo.3756211" + }, + { + "name": "MetaboLights", + "url": "https://www.ebi.ac.uk/metabolights/editor/MTBLS1455" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, contains 255.000 extracted ion chromatograms (EICs or XICs) of 5000 peaks randomly sampled from across 51 environmental water samples for the evaluation on peak detection and gap filling algorithms. The scientific publication references the dataset in Zenodo in its data availability statement.", + "subdiscipline": [ + "organic chemistry", + "analytical chemistry", + "cheminformatics" + ], + "tags": ["mass spectrometry"] + }, + { + "title": "Systematic evaluation of the biological variance within the Raman based colorectal tissue diagnostics", + "authors": "Nadine Vogler, Thomas Bocklitz, Firas Subhi Salah, Carsten Schmidt, Rolf Brauer, Tiantian Cui, Masoud Mireskandari, Florian R. Greten, Michael Schmitt, Andreas Stallmach, Iver Petersen, Jürgen Popp", + "journal": "Journal of Biophotonics", + "pubyear": 2015, + "linkpub": "https://doi.org/10.1002/jbio.201500237", + "linkdata": [ + { + "name": "Zenodo", + "url": "https://zenodo.org/record/3905058" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, prepared for publication by the publishing authors, contains MS data and RAMAN spectral data in CSV format. Moreover, CSVs with information on samples, gene activity, tissue type and more ara available. The corresponding scientific publication does not reference the dataset in Zenodo via its DOI.", + "subdiscipline": [ + "medicinal chemistry", + "chemometric", + "physical chemistry" + ], + "tags": ["raman spectroscopy", "biomedical diagnostics"] + }, + { + "title": "Comparability of Raman spectroscopic configurations: A large scale cross-laboratory study", + "authors": "Shuxia Guo, Claudia Beleites, Ute Neugebauer, Sara Abalde-Cela, Nils Kristian Afseth, Fatima Alsamad, Suresh Anand, Cuauhtemoc Araujo-Andrade, Sonja Aškrabić, Ertug Avci, Monica Baia, Malgorzata Baranska, Enrico Baria, Luis A. E. Batista de Carvalho, Philippe de Bettignies, Alois Bonifacio, Franck Bonnier, Eva Maria Brauchle, Hugh J. Byrne, Igor Chourpa, Riccardo Cicchi, Frederic Cuisinier, Mustafa Culha, Marcel Dahms, Catalina David, Ludovic Duponchel, Shiyamala Duraipandian, Samir F. El-Mashtoly, David I. Ellis, Gauthier Eppe, Guillaume Falgayrac, Ozren Gamulin, Benjamin Gardner, Peter Gardner, Klaus Gerwert, Evangelos J. Giamarellos-Bourboulis, Sveinbjorn Gizurarson, Marcin Gnyba, Royston Goodacre, Patrick Grysan, Orlando Guntinas-Lichius, Helga Helgadottir, Vlasta Mohaček Grošev, Catherine Kendall, Roman Kiselev, Micha Kölbach, Christoph Krafft, Sivashankar Krishnamoorthy, Patrick Kubryck, Bernhard Lendl, Pablo Loza-Alvarez, Fiona M. Lyng, Susanne Machill, Cedric Malherbe, Monica Marro, Maria Paula M. Marques, Ewelina Matuszyk, Carlo Francesco Morasso, Myriam Moreau, Howbeer Muhamadali, Valentina Mussi, Ioan Notingher, Marta Z. Pacia, Francesco S. Pavone, Guillaume Penel, Dennis Petersen, Olivier Piot, Julietta V. Rau, Marc Richter, Maria Krystyna Rybarczyk, Hamideh Salehi, Katja Schenke-Layland, Sebastian Schlücker, Markus Schosserer, Karin Schütze, Valter Sergo, Faris Sinjab, Janusz Smulko, Ganesh D. Sockalingum, Clara Stiebing, Nick Stone, Valérie Untereiner, Renzo Vanna, Karin Wieland, Jürgen Popp, and Thomas Bocklitz*", + "journal": "Analytical Chemistry", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1021/acs.analchem.0c02696", + "linkdata": [ + { + "name": "Zenodo", + "url": "https://zenodo.org/record/4152953" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, prepared for publication by the publishing authors, contains slightly processed raw data split in wavenumber axis files (wy_XYZ), spectral intensity files (spec_XYZ) and metadata files (meta_XYZ) – all in CSV format. The corresponding scientific publication references the dataset in Zenodo via its DOI.", + "subdiscipline": ["analytical chemistry"], + "tags": ["raman spectroscopy"] + }, + { + "title": "A triptycene-based enantiopure bis(diazadibenzoanthracene) by a chirality-assisted synthesis approach", + "authors": "Xubin Wang, Bernd Kohl, Frank Rominger, Sven M. Elbert, Prof. Michael Mastalerz", + "journal": "Chemistry – A European Journal", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1002/chem.202002781", + "linkdata": [ + { + "name": "heiDATA", + "url": "https://doi.org/10.11588/data/46LINE" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc25b961" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc25b972" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, contain NMR, MS and IR data in the instrument manufacturers formats. The IR data is also availabe as data point table (DPT) files. Data of elemental analysis was added to the dataset as scans of analysis reports. Crystallographic data as CIF files are available from CSD. References to datasets in CSD are given in the supporting information PDF of the corresponding article, while the dataset in heiDATA is not referenced in the scientific publication or supporting information.", + "subdiscipline": ["organic chemistry"], + "tags": ["N-heteropolycyclenes"] + }, + { + "title": "Bicyclo[1.1.1]pentyl sulfoximines: synthesis and functionalizations", + "authors": "Robin M. Bär, Lukas Langer, Martin Nieger, Stefan Bräse", + "journal": "Advanced Synthesis & Catalysis", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1002/adsc.201901453", + "linkdata": [ + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hkz5" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl07" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl18" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl29" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl3b" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl4c" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl5d" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23hl6f" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, contains NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as CIF are available from CSD. References to datasets in CSD are given in the supporting information PDF of the corresponding article via CSD numbers.", + "subdiscipline": ["organic chemistry", "analytical chemistry"], + "tags": ["organic synthesis", "heterocycles"] + }, + { + "title": "Exploring the role of solvent on carbohydrate−aryl interactions by diffusion NMR-based studies", + "authors": "Linda Jütten, Karla Ramírez-Gualito, Andreas Weilhard, Benjamin albrecht, Gabriel Cuevas, María del Carmen Fernández-Alonso, Jesús Jiménez-Barbero, Nils E. Schlörer, Dolores Diaz", + "journal": "ACS Omega", + "pubyear": 2018, + "linkpub": "https://doi.org/10.1021/acsomega.7b01630", + "linkdata": [ + { + "name": "NMRShiftDB2", + "url": "http://www.nmrshiftdb.org/molecule/60004029" + }, + { + "name": "NMRShiftDB2", + "url": "http://www.nmrshiftdb.org/molecule/60004074" + }, + { + "name": "NMRShiftDB2", + "url": "http://www.nmrshiftdb.org/molecule/60004071" + }, + { + "name": "NMRShiftDB2", + "url": "http://www.nmrshiftdb.org/molecule/60004072" + }, + { + "name": "NMRShiftDB2", + "url": "http://www.nmrshiftdb.org/molecule/60004073" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The NMR datasets, curated by the publishing authors, was published in NMRShiftDB2. References to the dataset is given via DOI in the supporting information PDF.", + "subdiscipline": ["analytical chemistry"], + "tags": ["Carbohydrates", "NMR spectroscopy"] + }, + { + "title": "A new generation of terminal copper nitrenes and their application in aromatic C–H amination reactions", + "authors": "Fabian Thomas, Matthias Oster, Florian Schön, Kai C. Göbgen, Benedikt Amarouch, Dominik Steden, Alexander Hoffmann, Sonja Herres-Pawlis", + "journal": "Dalton Transactions", + "pubyear": 2021, + "linkpub": "https://doi.org/10.1039/D1DT00832C", + "linkdata": [ + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/UFNYJPFRGDSKSE-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/LSGGPBYVWWQPOY-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/AXGNYRCNCNZKKZ-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/ZXFVPDKZHCLOHM-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/MHRJPVSEKXPPCE-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/FONYBVKTMVEXPM-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/BJUATVHTJTTWSW-UHFFFAOYSA-H.1" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23w7mw" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23w7nx" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23w7py" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23w7qz" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23w7r0" + }, + { + "name": "ioChemDB", + "url": "https://doi.org/10.19061/iochem-bd-6-84" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, contain NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as CIF files are available from CSD and computational data was deposited in ioChem-DB. References to the crystallographic data is given in the section on supporting information in the corresponding publication. References on NMR data can be retrieved from the supplementary information PDF. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", + "subdiscipline": ["inorganic chemistry"], + "tags": ["inorganic synthesis"] + }, + { + "title": "Exceptional substrate diversity in oxygenation reactions catalyzed by a bis(µ-oxo) copper complex", + "authors": "Melanie Paul, Melissa Teubner, Benjamin Grimm-Lebsanft, Christiane Golchert, Yannick Meiners, Laura Senft, Kristina Keisers, Patricia Liebhäuser, Thomas Rösener, Florian Biebl, Sören Buchenau, Maria Naumova, Vadim Murzin, Roxanne Krug, Alexander Hoffmann, Jörg Pietruszka, Ivana Ivanovic-Burmazovic, Michael Rübhausen, Sonja Herres-Pawlis ", + "journal": "Chemistry – A European Journal", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1002/chem.202000664", + "linkdata": [ + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/FCAMUPIRWKNASD-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/XQWHZHODENELCJ-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/WYPRQDLUGJFJCG-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/SXYROFUQPFOADI-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/NLACLAPNGFWSTA-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/WOMQOOHUINDJRV-UHFFFAOYSA-M.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/WOMQOOHUINDJRV-UHFFFAOYSA-M.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/SQELSYLGCLCOLU-UHFFFAOYSA-M.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/SEXRCKWGFSXUOO-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/JJGCDLVZJZGHBZ-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/ODJOHIWKLOPSFF-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/AEFJLSGXOWZNJZ-UHFFFAOYSA-N.1" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/BMNLXKVRGRRHKW-UHFFFAOYSA-N.1" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23gtbr" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23gtcs" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23gtdt" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23gtfv" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc23wtb5" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, contain NMR data in the instrument manufacturers formats and is also provided by Chemotion Repository in the open format JCAMP-DX. Crystallographic data as .cif files are available from CSD. References to datasets in Chemotion Repository are given in the supporting information PDF of the corresponding article via DOIs, while datasets in CSD were referenced with their CCDC accession number. Please note that there were no Collection DOIs at the time of publication. Therefore, many dataset DOIs are reported.", + "subdiscipline": ["inorganic chemistry"], + "tags": ["copper complexes"] + }, + { + "title": "Synthesis and biological evaluation of highly potent fungicidal deoxy-hygrophorones", + "authors": "Toni Ditfe, Eileen Bette, Haider N. Sultani, Alexander Otto, Ludger A. Wessjohann, Norbert Arnold, Bernhard Westermann", + "journal": "European Journal of Organic Chemistry", + "pubyear": 2021, + "linkpub": "https://doi.org/10.1002/ejoc.202100729", + "linkdata": [ + { + "name": "RADAR", + "url": "https://doi.org/10.22000/451" + }, + { + "name": "nmrXiv", + "url": "https://doi.org/10.57992/nmrxiv.p57" + } + ], + "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", + "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR, contains NMR and MS data in the instrument manufacturers formats as well as in open formats such as JCAMP-DX, NMReDATA (Mnova 14.1.1) for NMR data and mzML for MS data. Results from the bioassay are available as tabular files and as CSV. Additionally, all structures are provided as CTfiles and are listed, corresponding to their numbering in the publication, in a CSV also including IPB 3LC lab journal entries, SMILES structure codes and InChI and InChIKey identifiers. The corresponding scientific article references the dataset in the section on supporting information.", + "subdiscipline": ["organic chemistry", "natural products chemistry"], + "tags": ["natural products"] + }, + { + "title": "5α-Cyprinol sulfate: complete NMR assignment and revision of earlier published data, including the submission of a computer-readable assignment in NMReDATA format", + "authors": "Meike Hahn, Eric von Elert, Laurent Bigler, M. Dolores Díaz Hernández, Nils E. Schloerer", + "journal": "Magnetic Resonance in Chemistry", + "pubyear": 2018, + "linkpub": "https://doi.org/10.1002/mrc.4782", + "linkdata": [ + { + "name": "NMRShiftDB2", + "url": "https://doi.org/10.18716/nmrshiftdb2/60004113/nmredata_mrc_cd3od" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, is published in NMRShiftDB2 and also available from the publisher as supporting material. References to the dataset is given via DOI in the supporting information MS word document.", + "subdiscipline": ["organic chemistry", "natural products chemistry"], + "tags": ["natural products", "NMR spectroscopy"] + }, + { + "title": "Modular Synthesis of New Pyrroloquinoline Quinone Derivatives", + "authors": "Rachel Janßen, Violeta A. Vetsova, Dominik Putz, Peter Mayer, Lena J. Daumann", + "journal": "Synthesis", + "pubyear": 2023, + "linkpub": "https://doi.org/10.1055/s-0041-1738426", + "linkdata": [ + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/collection/RAJ_2022-08-25" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, was awarded with the FAIR4Chem Award 2023.", + "subdiscipline": ["organic chemistry"], + "tags": ["organic synthesis"] + }, + { + "title": "Predictive design of ordered mesoporous silica with well-defined, ultra-large mesopores", + "authors": "Charlotte Vogler, Stefan Naumann, Johanna R. Bruckner", + "journal": "Molecular Systems Design & Engineering", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1039/D2ME00107A", + "linkdata": [ + { + "name": "DaRus", + "url": "https://doi.org/10.18419/darus-2374" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The dataset, curated by the publishing authors, was awarded with the FAIR4Chem Award 2023.", + "subdiscipline": [ + "physical chemistry", + "polymer chemistry", + "material science" + ], + "tags": ["mesoporous silica"] + }, + { + "title": "Modular Synthesis of trans-A2B2-Porphyrins with Terminal Esters: Systematically Extending the Scope of Linear Linkers for Porphyrin-Based MOFs", + "authors": "Stefan M. Marschner, Ritesh Haldar, Olaf Fuhr, Christof Wöll, Stefan Bräse", + "journal": "Chemistry – A European Journal", + "pubyear": 2020, + "linkpub": "https://doi.org/10.1002/chem.202003885", + "linkdata": [ + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-PBTPREHATA-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ.4" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-BHYVHYPBRY-UHFFFADPSC-NUHFF-NUHFF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-QKHPYPUCYC-UHFFFADPSC-NUHFF-NHYOA-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DJGWMTKKMO-UHFFFADPSC-NUHFF-NNYHH-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-CQICNQVIXS-UHFFFADPSC-NUHFF-NKDHF-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-UYKMRQXETK-UHFFFADPSC-NUHFF-NWLSV-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DVNRJSFZLK-UHFFFADPSC-NUHFF-NWLSV-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LVGOHACWPD-UHFFFADPSC-NUHFF-NUVBP-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-JQQMHNZHWI-UHFFFADPSC-NUHFF-NNSBK-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-DJCDFXZBRU-UHFFFADPSC-NUHFF-NOCLW-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LLIFZWKYAN-UHFFFADPSC-NUHFF-NHDGP-NUHFF-ZZZ" + }, + { + "name": "Chemotion Repository", + "url": "https://doi.org/10.14272/reaction/SA-FUHFF-UHFFFADPSC-LHQKMJBXIU-UHFFFADPSC-NUHFF-NLTSL-NUHFF-ZZZ" + }, + { + "name": "CSD/CCDC", + "url": "https://doi.org/10.5517/ccdc.csd.cc216k3y" + } + ], + "linkcomment": "curated by the publishing authors", + "description": "The datasets, curated by the publishing authors, were published in CSD and Chemotion Repository. Please note, that Collection DOIs did not exist at the time of publication. Hence, many dataset DOIs are reported.", + "subdiscipline": ["organic chemistry"], + "tags": ["porphyrins"] + }, + { + "title": "Antimicrobial Prenylated Isoflavones from the Leaves of the Amazonian Medicinal Plant Vatairea guianensis Aubl.", + "authors": "Serhat S. Çiçek, Mayra Galarza Pérez, Arlette Wenzel-Storjohann, Roberto M. Bezerra, Jorge F. O. Segovia, Ulrich Girreser, Isamu Kanzaki, and Deniz Tasdemir", + "journal": "Journal of Natural Products", + "pubyear": 2022, + "linkpub": "https://doi.org/10.1021/acs.jnatprod.1c01035", + "linkdata": [ + { + "name": "RADAR4Chem", + "url": "https://doi.org/10.22000/1865" + }, + { + "name": "nmrXiv", + "url": "https://doi.org/10.57992/nmrxiv.p55" + } + ], + "linkcomment": "curated by Tillmann G. Fischer (IPB/NFDI4Chem)", + "description": "The dataset, prepared for publication under NFDI4Chem stewardship and published in RADAR4Chem as well as nmrXiv, includes NMR, IR and MS data in the instrument manufacturers' formats as well as in open formats such as JCAMP-DX (TopSpin 4.3) for NMR data and mzML for MS data. UV-VIS spectra are only available as PDF format, due to challenges with data export, and all chemical structures are provided as Molfiles and listed in a CSV according to their numbering in the publication, including local sample identifiers, SMILES structure codes, and InChI and InChIKey identifiers. A markdown README and a rendered HTML version provide an entry point for human readers. The corresponding scientific article does not reference the dataset as it was published one year before the dataset was published.", + "subdiscipline": ["organic chemistry"] + } ] diff --git a/static/assets/lbe.json.readme.md b/static/assets/lbe.json.readme.md index 234868a6..bfd2b32c 100644 --- a/static/assets/lbe.json.readme.md +++ b/static/assets/lbe.json.readme.md @@ -1,3 +1,3 @@ # Please read before updating jbe.json directly -NFDI4Chem provides an entry point to add data to lbe.json via a sheet. This should allow users who are not familiar with GitHub to add data. If you make updates directly to lbe.json, please also provide the updated information in the corresponding sheet https://t1p.de/0lbfk. If you need access, please get in contact via our helpdesk helpdesk@nfdi4chem.de. \ No newline at end of file +NFDI4Chem provides an entry point to add data to lbe.json via a sheet. This should allow users who are not familiar with GitHub to add data. If you make updates directly to lbe.json, please also provide the updated information in the corresponding sheet https://t1p.de/0lbfk. If you need access, please get in contact via our helpdesk helpdesk@nfdi4chem.de. diff --git a/static/assets/methods.json b/static/assets/methods.json index 34c90bdc..e05d92a0 100644 --- a/static/assets/methods.json +++ b/static/assets/methods.json @@ -1,588 +1,588 @@ [ - { - "analytical_method": "Analytical method", - "exemplary_proprietary_file_extensions": "Exemplary proprietary file extensions", - "typical_size_of_proprietary_file": "Typical size of proprietary file", - "converter_to_open_file_format": "Converterf to open file format", - "recommendation_for_open_file_extension": "Recommendation for open file extension*", - "file_format": "File format", - "file_size_of_open_format": "File size of open format", - "monomer_characterization": "Monomer characterization", - "polymer_characterization": "Polymer characterization", - "shortname": "headers" - }, - { - "analytical_method": "NMR spectroscopy", - "exemplary_proprietary_file_extensions": "set of files, no typical extension", - "typical_size_of_proprietary_file": "<1-50 MB", - "converter_to_open_file_format": "nmrium.org", - "recommendation_for_open_file_extension": ".jdx
.zip
", - "file_format": "JCAMP-DX (raw)
NMReDATA (assignments)", - "file_size_of_open_format": "<1-50 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "nmr" - }, - { - "analytical_method": "Mass spectrometry", - "exemplary_proprietary_file_extensions": ".raw
.d
.baf", - "typical_size_of_proprietary_file": "~250 MB", - "converter_to_open_file_format": "Proteowizard", - "recommendation_for_open_file_extension": ".mzML", - "file_format": "mzML", - "file_size_of_open_format": "~250 MB", - "shortname": "ms" - }, - { - "analytical_method": "IR spectroscopy", - "exemplary_proprietary_file_extensions": ".ispd
.icIR", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": ".dx", - "file_format": "JCAMP-DX", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "ir" - }, - { - "analytical_method": "Raman spectroscopy", - "exemplary_proprietary_file_extensions": ".dpt
.spc
.icRaman
.sps
.acs", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".dx", - "file_format": "JCAMP-DX", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "raman" - }, - { - "analytical_method": "UV/vis spectroscopy", - "exemplary_proprietary_file_extensions": ".dsw
.str
.bsk
.bkn
.ksd
.jws
.jwb
.str8
.spc
.sre", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv", - "file_format": "comma-separated values", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "uv" - }, - { - "analytical_method": "Fluorescence spectroscopy", - "exemplary_proprietary_file_extensions": ".fds
.fs2f
.jws
.opj", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".dx", - "file_format": "JCAMP-DX", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "fluoresc" - }, - { - "analytical_method": "Single crystal XRD", - "exemplary_proprietary_file_extensions": ".raw", - "typical_size_of_proprietary_file": "~1 GB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".cif", - "file_format": "crystallographic information file", - "file_size_of_open_format": "<1 MB", - "shortname": "xray" - }, - { - "analytical_method": "Powder XRD", - "exemplary_proprietary_file_extensions": ".raw", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".xyd", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "shortname": "xrd" - }, - { - "analytical_method": "Gas chromatography", - "exemplary_proprietary_file_extensions": ".gcd
.d", - "typical_size_of_proprietary_file": "~2 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": "", - "progress_of_eln_integration": "", - "shortname": "gc" - }, - { - "analytical_method": "HPLC", - "exemplary_proprietary_file_extensions": ".xls", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv", - "file_format": "comma-separated values", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": "", - "progress_of_eln_integration": "", - "shortname": "hplc" - }, - { - "analytical_method": "Cyclic voltammetry", - "exemplary_proprietary_file_extensions": ".nox
.pssession", - "typical_size_of_proprietary_file": "~8 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "cv" - }, - { - "analytical_method": "EPR spectroscopy", - "exemplary_proprietary_file_extensions": ".spe", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "epr" - }, - { - "analytical_method": "Differential scanning calorimetry", - "exemplary_proprietary_file_extensions": ".ngb-dsu
.ngb-taa", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv", - "file_format": "comma-separated values", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "dsc" - }, - { - "analytical_method": "Elemental analysis", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "ea" - }, - { - "analytical_method": "Physisorption", - "exemplary_proprietary_file_extensions": ".smp", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv", - "file_format": "comma-separated values", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "physisorpt" - }, - { - "analytical_method": "Capillary electrophoresis", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "electrophoresis" - }, - { - "analytical_method": "Polarimetry", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "polarimetry" - }, - { - "analytical_method": "Melting point or refractory index", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "mp" - }, - { - "analytical_method": "TLC: Rf values, TLC-UV, TLC-MS", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "tlc" - }, - { - "analytical_method": "Binding assays (radioligand, fluorescence-based, surface plasmon resonance (SPR), microscale thermophoresis (MST), isothermal calorimetry (ICT), etc.)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "binding" - }, - { - "analytical_method": "Activity assays (e.g. colorimetric, fluorescence-based, radioactive-based etc.)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "activity" - }, - { - "analytical_method": "Docking calculations", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "docking" - }, - { - "analytical_method": "Cytotoxicity assays", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "cytotox" - }, - { - "analytical_method": "Determination of water solubility (pH 7.4; maybe at further pH values)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "watersol" - }, - { - "analytical_method": "Determination of logD value (lipophilicity)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "logd" - }, - { - "analytical_method": "Peroral bioavailability (e.g. Caco-2 cell permeation assay)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "peror_bioavail" - }, - { - "analytical_method": "Brain permeation (in vitro prediction, in vivo)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "brain_perme" - }, - { - "analytical_method": "Metabolic stability (rat/mouse/human liver microsomes)", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "metab_stab" - }, - { - "analytical_method": "Inhibition of the most important CYP P450 enzymes involved in drug metabolism to assess potential interactions", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "inihib_p450" - }, - { - "analytical_method": "hERG channel interaction", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "herg_int" - }, - { - "analytical_method": "Genotoxicity assays", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "genotox" - }, - { - "analytical_method": "Isothermal titration calorimetry (ITC)", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "itc" - }, - { - "analytical_method": "Dynamic light scattering (DLS)", - "exemplary_proprietary_file_extensions": ".apkw .xlsx", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv", - "file_format": "comma-separated values", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "dls" - }, - { - "analytical_method": "Atomic force microscopy (AFM)", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "afm" - }, - { - "analytical_method": "Transmission electron microscopy (TEM)", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "shortname": "tem" - }, - { - "analytical_method": "Electron spray ionisation mass spectrometry", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "esi_ms" - }, - { - "analytical_method": "Matrix assisted laser desorption/ionisation mass spectrometry", - "exemplary_proprietary_file_extensions": ".raw
.d
.baf", - "typical_size_of_proprietary_file": "~250 MB", - "converter_to_open_file_format": "Proteowizard", - "recommendation_for_open_file_extension": ".mzML", - "file_format": "mzML", - "file_size_of_open_format": "~250 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "maldi_ms" - }, - { - "analytical_method": "Electrochemical impedance spectroscopy", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "eis" - }, - { - "analytical_method": "Thermogravimetric Analysis", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "tga" - }, - { - "analytical_method": "Size Exclusion Chromatography/liquid chromatography under critical conditions", - "exemplary_proprietary_file_extensions": ".fsx
.inx.ldx
.mdx
.sax
.spx", - "typical_size_of_proprietary_file": "~300 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt
.pdf", - "file_format": "text file
report file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "sec_lccc" - }, - { - "analytical_method": "Rheology", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "rheo" - }, - { - "analytical_method": "X-Ray photoelectron spectroscopy", - "exemplary_proprietary_file_extensions": ".vms", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".txt", - "file_format": "text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "xps" - }, - { - "analytical_method": "Time of flight secondary ion mass spectrometry", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "tof_sims" - }, - { - "analytical_method": "Static Light Scattering", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "sls" - }, - { - "analytical_method": "Zeta Potential", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "<1 MB", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".csv
.txt", - "file_format": "Comma-separated value
text file", - "file_size_of_open_format": "<1 MB", - "monomer_characterization": true, - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "zeta" - }, - { - "analytical_method": "EDX", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": "", - "progress_of_eln_integration": "", - "shortname": "edx" - }, - { - "analytical_method": "Transmission electron microscopy (TEM)", - "exemplary_proprietary_file_extensions": "", - "typical_size_of_proprietary_file": "", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".jpg
.tif", - "file_format": "Image", - "file_size_of_open_format": "<10 MB", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "tem" - }, - { - "analytical_method": "Contact angle", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "proprietary software", - "recommendation_for_open_file_extension": ".jpg", - "file_format": "Image", - "file_size_of_open_format": "<10 MB", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "contact" - }, - { - "analytical_method": "Ellipsometry", - "exemplary_proprietary_file_extensions": "", - "Typical size of proprietary file": "", - "converter_to_open_file_format": "", - "recommendation_for_open_file_extension": "", - "file_format": "", - "file_size_of_open_format": "", - "monomer_characterization": "", - "polymer_characterization": true, - "progress_of_eln_integration": "", - "shortname": "ellips" - } + { + "analytical_method": "Analytical method", + "exemplary_proprietary_file_extensions": "Exemplary proprietary file extensions", + "typical_size_of_proprietary_file": "Typical size of proprietary file", + "converter_to_open_file_format": "Converterf to open file format", + "recommendation_for_open_file_extension": "Recommendation for open file extension*", + "file_format": "File format", + "file_size_of_open_format": "File size of open format", + "monomer_characterization": "Monomer characterization", + "polymer_characterization": "Polymer characterization", + "shortname": "headers" + }, + { + "analytical_method": "NMR spectroscopy", + "exemplary_proprietary_file_extensions": "set of files, no typical extension", + "typical_size_of_proprietary_file": "<1-50 MB", + "converter_to_open_file_format": "nmrium.org", + "recommendation_for_open_file_extension": ".jdx
.zip
", + "file_format": "JCAMP-DX (raw)
NMReDATA (assignments)", + "file_size_of_open_format": "<1-50 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "nmr" + }, + { + "analytical_method": "Mass spectrometry", + "exemplary_proprietary_file_extensions": ".raw
.d
.baf", + "typical_size_of_proprietary_file": "~250 MB", + "converter_to_open_file_format": "Proteowizard", + "recommendation_for_open_file_extension": ".mzML", + "file_format": "mzML", + "file_size_of_open_format": "~250 MB", + "shortname": "ms" + }, + { + "analytical_method": "IR spectroscopy", + "exemplary_proprietary_file_extensions": ".ispd
.icIR", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": ".dx", + "file_format": "JCAMP-DX", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "ir" + }, + { + "analytical_method": "Raman spectroscopy", + "exemplary_proprietary_file_extensions": ".dpt
.spc
.icRaman
.sps
.acs", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".dx", + "file_format": "JCAMP-DX", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "raman" + }, + { + "analytical_method": "UV/vis spectroscopy", + "exemplary_proprietary_file_extensions": ".dsw
.str
.bsk
.bkn
.ksd
.jws
.jwb
.str8
.spc
.sre", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv", + "file_format": "comma-separated values", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "uv" + }, + { + "analytical_method": "Fluorescence spectroscopy", + "exemplary_proprietary_file_extensions": ".fds
.fs2f
.jws
.opj", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".dx", + "file_format": "JCAMP-DX", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "fluoresc" + }, + { + "analytical_method": "Single crystal XRD", + "exemplary_proprietary_file_extensions": ".raw", + "typical_size_of_proprietary_file": "~1 GB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".cif", + "file_format": "crystallographic information file", + "file_size_of_open_format": "<1 MB", + "shortname": "xray" + }, + { + "analytical_method": "Powder XRD", + "exemplary_proprietary_file_extensions": ".raw", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".xyd", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "shortname": "xrd" + }, + { + "analytical_method": "Gas chromatography", + "exemplary_proprietary_file_extensions": ".gcd
.d", + "typical_size_of_proprietary_file": "~2 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": "", + "progress_of_eln_integration": "", + "shortname": "gc" + }, + { + "analytical_method": "HPLC", + "exemplary_proprietary_file_extensions": ".xls", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv", + "file_format": "comma-separated values", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": "", + "progress_of_eln_integration": "", + "shortname": "hplc" + }, + { + "analytical_method": "Cyclic voltammetry", + "exemplary_proprietary_file_extensions": ".nox
.pssession", + "typical_size_of_proprietary_file": "~8 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "cv" + }, + { + "analytical_method": "EPR spectroscopy", + "exemplary_proprietary_file_extensions": ".spe", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "epr" + }, + { + "analytical_method": "Differential scanning calorimetry", + "exemplary_proprietary_file_extensions": ".ngb-dsu
.ngb-taa", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv", + "file_format": "comma-separated values", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "dsc" + }, + { + "analytical_method": "Elemental analysis", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "ea" + }, + { + "analytical_method": "Physisorption", + "exemplary_proprietary_file_extensions": ".smp", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv", + "file_format": "comma-separated values", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "physisorpt" + }, + { + "analytical_method": "Capillary electrophoresis", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "electrophoresis" + }, + { + "analytical_method": "Polarimetry", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "polarimetry" + }, + { + "analytical_method": "Melting point or refractory index", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "mp" + }, + { + "analytical_method": "TLC: Rf values, TLC-UV, TLC-MS", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "tlc" + }, + { + "analytical_method": "Binding assays (radioligand, fluorescence-based, surface plasmon resonance (SPR), microscale thermophoresis (MST), isothermal calorimetry (ICT), etc.)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "binding" + }, + { + "analytical_method": "Activity assays (e.g. colorimetric, fluorescence-based, radioactive-based etc.)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "activity" + }, + { + "analytical_method": "Docking calculations", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "docking" + }, + { + "analytical_method": "Cytotoxicity assays", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "cytotox" + }, + { + "analytical_method": "Determination of water solubility (pH 7.4; maybe at further pH values)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "watersol" + }, + { + "analytical_method": "Determination of logD value (lipophilicity)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "logd" + }, + { + "analytical_method": "Peroral bioavailability (e.g. Caco-2 cell permeation assay)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "peror_bioavail" + }, + { + "analytical_method": "Brain permeation (in vitro prediction, in vivo)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "brain_perme" + }, + { + "analytical_method": "Metabolic stability (rat/mouse/human liver microsomes)", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "metab_stab" + }, + { + "analytical_method": "Inhibition of the most important CYP P450 enzymes involved in drug metabolism to assess potential interactions", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "inihib_p450" + }, + { + "analytical_method": "hERG channel interaction", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "herg_int" + }, + { + "analytical_method": "Genotoxicity assays", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "genotox" + }, + { + "analytical_method": "Isothermal titration calorimetry (ITC)", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "itc" + }, + { + "analytical_method": "Dynamic light scattering (DLS)", + "exemplary_proprietary_file_extensions": ".apkw .xlsx", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv", + "file_format": "comma-separated values", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "dls" + }, + { + "analytical_method": "Atomic force microscopy (AFM)", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "afm" + }, + { + "analytical_method": "Transmission electron microscopy (TEM)", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "shortname": "tem" + }, + { + "analytical_method": "Electron spray ionisation mass spectrometry", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "esi_ms" + }, + { + "analytical_method": "Matrix assisted laser desorption/ionisation mass spectrometry", + "exemplary_proprietary_file_extensions": ".raw
.d
.baf", + "typical_size_of_proprietary_file": "~250 MB", + "converter_to_open_file_format": "Proteowizard", + "recommendation_for_open_file_extension": ".mzML", + "file_format": "mzML", + "file_size_of_open_format": "~250 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "maldi_ms" + }, + { + "analytical_method": "Electrochemical impedance spectroscopy", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "eis" + }, + { + "analytical_method": "Thermogravimetric Analysis", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "tga" + }, + { + "analytical_method": "Size Exclusion Chromatography/liquid chromatography under critical conditions", + "exemplary_proprietary_file_extensions": ".fsx
.inx.ldx
.mdx
.sax
.spx", + "typical_size_of_proprietary_file": "~300 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt
.pdf", + "file_format": "text file
report file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "sec_lccc" + }, + { + "analytical_method": "Rheology", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "rheo" + }, + { + "analytical_method": "X-Ray photoelectron spectroscopy", + "exemplary_proprietary_file_extensions": ".vms", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".txt", + "file_format": "text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "xps" + }, + { + "analytical_method": "Time of flight secondary ion mass spectrometry", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "tof_sims" + }, + { + "analytical_method": "Static Light Scattering", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "sls" + }, + { + "analytical_method": "Zeta Potential", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "<1 MB", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".csv
.txt", + "file_format": "Comma-separated value
text file", + "file_size_of_open_format": "<1 MB", + "monomer_characterization": true, + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "zeta" + }, + { + "analytical_method": "EDX", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": "", + "progress_of_eln_integration": "", + "shortname": "edx" + }, + { + "analytical_method": "Transmission electron microscopy (TEM)", + "exemplary_proprietary_file_extensions": "", + "typical_size_of_proprietary_file": "", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".jpg
.tif", + "file_format": "Image", + "file_size_of_open_format": "<10 MB", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "tem" + }, + { + "analytical_method": "Contact angle", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "proprietary software", + "recommendation_for_open_file_extension": ".jpg", + "file_format": "Image", + "file_size_of_open_format": "<10 MB", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "contact" + }, + { + "analytical_method": "Ellipsometry", + "exemplary_proprietary_file_extensions": "", + "Typical size of proprietary file": "", + "converter_to_open_file_format": "", + "recommendation_for_open_file_extension": "", + "file_format": "", + "file_size_of_open_format": "", + "monomer_characterization": "", + "polymer_characterization": true, + "progress_of_eln_integration": "", + "shortname": "ellips" + } ] diff --git a/static/assets/profiles.json b/static/assets/profiles.json index 0da7dabe..2b5ac61e 100644 --- a/static/assets/profiles.json +++ b/static/assets/profiles.json @@ -1,32 +1,122 @@ [ - { - "name": "synthetic", - "longname": "Synthetic / Analytical Chemistry", - "methods": [ "nmr", "ms", "ir", "raman", "uv", "fluoresc", "xray", "xrd", "gc", "hplc", "cv", "epr", "dsc", "ea", "physisorpt" ] - }, - { - "name": "magres", - "longname": "Magnetic Resonance", - "methods": [ "nmr","epr" ] - }, - { - "name": "physical", - "longname": "Physical Chemistry", - "methods": [ "nmr", "epr", "ir", "raman", "uv", "fluoresc", "ms", "xray", "xrd", "gc", "hplc", "cv", "dsc", "itc", "physisorpt", "dls", "afm", "tem" ] - }, - { - "name": "pharma", - "longname": "Pharmaceutical Chemistry", - "methods": [ "nmr", "uv", "ir", "raman", "fluoresc", "ms", "gc", "hplc", "electrophoresis", "polarimetry", "mp", "tlc", "binding", "activity", "docking", "cytotox", "watersol", "logd", "peror_bioavail", "brain_perme", "metab_stab", "inihib_p450", "herg_int", "genotox" ] - }, - { - "name": "polymer", - "longname": "Polymer Chemistry", - "methods": [ "nmr", "esi_ms", "maldi_ms", "ir", "raman", "uv", "fluoresc", "gc", "hplc", "cv", "eis", "epr", "dsc", "ea", "physisorpt", "tga", "sec_lccc", "rheo", "xps", "tof_sims", "dls", "sls", "zeta", "sem", "edx", "tem", "contact", "afm", "ellips" ] - }, - { - "name": "all", - "longname": "All Entries", - "methods": ["all"] - } -] \ No newline at end of file + { + "name": "synthetic", + "longname": "Synthetic / Analytical Chemistry", + "methods": [ + "nmr", + "ms", + "ir", + "raman", + "uv", + "fluoresc", + "xray", + "xrd", + "gc", + "hplc", + "cv", + "epr", + "dsc", + "ea", + "physisorpt" + ] + }, + { + "name": "magres", + "longname": "Magnetic Resonance", + "methods": ["nmr", "epr"] + }, + { + "name": "physical", + "longname": "Physical Chemistry", + "methods": [ + "nmr", + "epr", + "ir", + "raman", + "uv", + "fluoresc", + "ms", + "xray", + "xrd", + "gc", + "hplc", + "cv", + "dsc", + "itc", + "physisorpt", + "dls", + "afm", + "tem" + ] + }, + { + "name": "pharma", + "longname": "Pharmaceutical Chemistry", + "methods": [ + "nmr", + "uv", + "ir", + "raman", + "fluoresc", + "ms", + "gc", + "hplc", + "electrophoresis", + "polarimetry", + "mp", + "tlc", + "binding", + "activity", + "docking", + "cytotox", + "watersol", + "logd", + "peror_bioavail", + "brain_perme", + "metab_stab", + "inihib_p450", + "herg_int", + "genotox" + ] + }, + { + "name": "polymer", + "longname": "Polymer Chemistry", + "methods": [ + "nmr", + "esi_ms", + "maldi_ms", + "ir", + "raman", + "uv", + "fluoresc", + "gc", + "hplc", + "cv", + "eis", + "epr", + "dsc", + "ea", + "physisorpt", + "tga", + "sec_lccc", + "rheo", + "xps", + "tof_sims", + "dls", + "sls", + "zeta", + "sem", + "edx", + "tem", + "contact", + "afm", + "ellips" + ] + }, + { + "name": "all", + "longname": "All Entries", + "methods": ["all"] + } +] diff --git a/static/assets/synonyms.json b/static/assets/synonyms.json index c673bd4b..7361ff22 100644 --- a/static/assets/synonyms.json +++ b/static/assets/synonyms.json @@ -1,36 +1,36 @@ [ - { - "type": "synonym", - "synonyms": [ - "rdm", - "fdm", - "research data management", - "forschungsdatenmanagement" - ], - "objectID": "0" - }, - { - "type": "synonym", - "synonyms": [ - "eln", - "electronic lab notebook", - "elektronisches laborjournal" - ], - "objectID": "1" - }, - { - "type": "synonym", - "synonyms": ["ms", "mass spectrometry", "massenspektrometrie"], - "objectID": "2" - }, - { - "type": "synonym", - "synonyms": ["ir", "infrared", "infrarot"], - "objectID": "3" - }, - { - "type": "synonym", - "synonyms": ["dmp", "data management plan", "datenmanagementplan"], - "objectID": "4" - } + { + "type": "synonym", + "synonyms": [ + "rdm", + "fdm", + "research data management", + "forschungsdatenmanagement" + ], + "objectID": "0" + }, + { + "type": "synonym", + "synonyms": [ + "eln", + "electronic lab notebook", + "elektronisches laborjournal" + ], + "objectID": "1" + }, + { + "type": "synonym", + "synonyms": ["ms", "mass spectrometry", "massenspektrometrie"], + "objectID": "2" + }, + { + "type": "synonym", + "synonyms": ["ir", "infrared", "infrarot"], + "objectID": "3" + }, + { + "type": "synonym", + "synonyms": ["dmp", "data management plan", "datenmanagementplan"], + "objectID": "4" + } ] diff --git a/static/fonts/metadata.json b/static/fonts/metadata.json index bf556cd7..7e9a95ac 100644 --- a/static/fonts/metadata.json +++ b/static/fonts/metadata.json @@ -1,23 +1,23 @@ { - "id": "ibm-plex-sans", - "family": "IBM Plex Sans", - "subsets": ["latin"], - "weights": [300, 600], - "styles": ["italic", "normal"], - "defSubset": "latin", - "variable": { - "ital": { "default": "0", "min": "0", "max": "1", "step": "1" }, - "wdth": { "default": "100", "min": "75", "max": "100", "step": "0.1" }, - "wght": { "default": "400", "min": "100", "max": "700", "step": "1" } - }, - "lastModified": "2025-09-08", - "version": "v23", - "category": "sans-serif", - "license": { - "type": "OFL-1.1", - "url": "https://openfontlicense.org", - "attribution": "Copyright 2019 IBM Corp. All rights reserved. IBMPlexSans-Italic[wdth,wght].ttf: Copyright 2019 IBM Corp. All rights reserved." - }, - "source": "https://github.com/google/fonts", - "type": "google" + "id": "ibm-plex-sans", + "family": "IBM Plex Sans", + "subsets": ["latin"], + "weights": [300, 600], + "styles": ["italic", "normal"], + "defSubset": "latin", + "variable": { + "ital": { "default": "0", "min": "0", "max": "1", "step": "1" }, + "wdth": { "default": "100", "min": "75", "max": "100", "step": "0.1" }, + "wght": { "default": "400", "min": "100", "max": "700", "step": "1" } + }, + "lastModified": "2025-09-08", + "version": "v23", + "category": "sans-serif", + "license": { + "type": "OFL-1.1", + "url": "https://openfontlicense.org", + "attribution": "Copyright 2019 IBM Corp. All rights reserved. IBMPlexSans-Italic[wdth,wght].ttf: Copyright 2019 IBM Corp. All rights reserved." + }, + "source": "https://github.com/google/fonts", + "type": "google" } From 210543e8454c68d753e97a5bae889bdca7f2fffc Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:39:15 +0200 Subject: [PATCH 16/20] chore: format JS files in /src --- src/components/chemotion/ChemotionCarousel.js | 96 +- .../chemotion/ChemotionLifecycle.js | 323 ++++--- src/components/commons/BulletBox.js | 37 +- src/components/commons/FloatImage.js | 72 +- src/components/commons/LbeChip.js | 14 +- src/components/commons/ShortenDesc.js | 60 +- src/components/deprecated/KbTagCloud.js | 36 +- src/components/deprecated/Methods.js | 282 +++--- src/components/eln/ElnCard.js | 68 +- src/components/eln/ElnFinder.js | 294 ++++--- src/components/eln/ElnFinderPharm.js | 260 +++--- src/components/eln/ElnStack.js | 14 +- src/components/eln/ElnStatus.js | 27 +- src/components/eln/ElnStyles.js | 4 +- src/components/eln/elnFilter/ElnFilter.js | 146 ++-- src/components/eln/elnFilter/FilterButton.js | 42 +- src/components/eln/elnFilter/TextSearch.js | 62 +- src/components/features/ButtonContainer.js | 2 +- src/components/features/FeatureButton.js | 38 +- src/components/features/Features.js | 30 +- src/components/lbe/Authors.js | 58 +- src/components/lbe/Data.js | 12 +- src/components/lbe/FilterSection.js | 122 +-- src/components/lbe/Lbe.js | 264 +++--- src/components/lbe/LbeBody.js | 184 ++-- src/components/lbe/LbeElements.js | 203 ++--- src/components/lbe/ShortenButtons.js | 88 +- src/components/repos/DecisionTree.js | 821 +++++++++--------- src/components/repos/RepoButton.js | 20 +- src/components/repos/repoCardData.js | 155 ++-- src/data/domains.js | 72 +- src/data/roles.js | 60 +- src/data/stakeholders.js | 36 +- 33 files changed, 2088 insertions(+), 1914 deletions(-) diff --git a/src/components/chemotion/ChemotionCarousel.js b/src/components/chemotion/ChemotionCarousel.js index be8acf77..bd245441 100644 --- a/src/components/chemotion/ChemotionCarousel.js +++ b/src/components/chemotion/ChemotionCarousel.js @@ -3,59 +3,59 @@ import styles from "@site/src/css/ChemotionCarousel.module.css"; import { useCarousel } from "nuka-carousel"; function CustomDots() { - const { totalPages, currentPage, goToPage } = useCarousel(); + const { totalPages, currentPage, goToPage } = useCarousel(); - const className = (index) => { - let value = styles.chemotionCarouselDot; - if (currentPage === index) { - value += " " + styles.chemotionCarouselDotActive; - } - return value; - }; + const className = (index) => { + let value = styles.chemotionCarouselDot; + if (currentPage === index) { + value += " " + styles.chemotionCarouselDotActive; + } + return value; + }; - return ( -
- {[...Array(totalPages)].map((_, index) => ( - goToPage(index)} - className={className(index)} - > - • - - ))} -
- ); + return ( +
+ {[...Array(totalPages)].map((_, index) => ( + goToPage(index)} + className={className(index)} + > + • + + ))} +
+ ); } function ChemotionCarousel({ icon, images }) { - return ( -
- {icon.alt} -
- } - > - {images.map((image, index) => ( - {image.alt} - ))} - -
-
- ); + return ( +
+ {icon.alt} +
+ } + > + {images.map((image, index) => ( + {image.alt} + ))} + +
+
+ ); } export default ChemotionCarousel; diff --git a/src/components/chemotion/ChemotionLifecycle.js b/src/components/chemotion/ChemotionLifecycle.js index 6107d916..e3d52944 100644 --- a/src/components/chemotion/ChemotionLifecycle.js +++ b/src/components/chemotion/ChemotionLifecycle.js @@ -4,155 +4,194 @@ import Translate from "@docusaurus/Translate"; import styles from "@site/src/css/ChemotionLifecycle.module.css"; const ChemotionLifecycle = () => { - return ( -
- - - - - - Experiment - - - Design - - - - - - + return ( +
+ + + + + + Experiment + + + Design + + + + + + - - - - Experiment - - - - + + + + Experiment + + + + - - - - Analysis - - - - + + + + Analysis + + + + - - - - Data Collection & - - - Processing - - - - + + + + Data Collection & + + + Processing + + + + - - - - Data - - - Publication - - - - + + + + Data + + + Publication + + + + - - - - Re-use - - - - - + + + + Re-use + + + + + - + - - -
- ); + + +
+ ); }; export default ChemotionLifecycle; diff --git a/src/components/commons/BulletBox.js b/src/components/commons/BulletBox.js index 247ccb11..f635281b 100644 --- a/src/components/commons/BulletBox.js +++ b/src/components/commons/BulletBox.js @@ -2,27 +2,32 @@ import clsx from "clsx"; import styles from "@site/src/css/BulletBox.module.css"; function BulletContainer({ children }) { - return
{children}
; + return
{children}
; } function BulletBox({ children, secondary, ...props }) { - let boxClass = secondary ? "button--secondary" : "button--primary"; - let customStyle = {}; + let boxClass = secondary ? "button--secondary" : "button--primary"; + let customStyle = {}; - Object.keys(props).forEach((key) => { - if (key !== "children" && key !== "secondary" && key !== "boxClass") { - customStyle[key] = props[key]; - } - }); + Object.keys(props).forEach((key) => { + if (key !== "children" && key !== "secondary" && key !== "boxClass") { + customStyle[key] = props[key]; + } + }); - return ( -
- {children} -
- ); + return ( +
+ {children} +
+ ); } export { BulletContainer, BulletBox }; diff --git a/src/components/commons/FloatImage.js b/src/components/commons/FloatImage.js index 7d57f5e7..2cf57c57 100644 --- a/src/components/commons/FloatImage.js +++ b/src/components/commons/FloatImage.js @@ -4,41 +4,41 @@ import Link from "@docusaurus/Link"; import styles from "@site/src/css/FloatImage.module.css"; function FloatImage({ url, alt, ...props }) { - // Object for custom styles - - let style = {}; - - // Populate style object with all props except 'link' - - Object.keys(props).forEach((key) => { - if (key !== "link") { - style[key] = props[key]; - } - }); - - // Component for image - - const ThisImg = () => { - return ( - {alt} - ); - }; - - // If link prop is given, wrap image in link - - if (props.link && props.link.length > 0) { - return ( - - - - ); - } - - return ; + // Object for custom styles + + let style = {}; + + // Populate style object with all props except 'link' + + Object.keys(props).forEach((key) => { + if (key !== "link") { + style[key] = props[key]; + } + }); + + // Component for image + + const ThisImg = () => { + return ( + {alt} + ); + }; + + // If link prop is given, wrap image in link + + if (props.link && props.link.length > 0) { + return ( + + + + ); + } + + return ; } export default FloatImage; diff --git a/src/components/commons/LbeChip.js b/src/components/commons/LbeChip.js index 910dc9fe..7fa13797 100644 --- a/src/components/commons/LbeChip.js +++ b/src/components/commons/LbeChip.js @@ -5,13 +5,13 @@ import styles from "@site/src/css/lbe.module.css"; import clsx from "clsx"; function LbeChip({ title }) { - return ( - - - - ); + return ( + + + + ); } export default LbeChip; diff --git a/src/components/commons/ShortenDesc.js b/src/components/commons/ShortenDesc.js index 0b0bf49c..cbd7a143 100644 --- a/src/components/commons/ShortenDesc.js +++ b/src/components/commons/ShortenDesc.js @@ -5,37 +5,41 @@ import styles from "@site/src/css/ShortenDesc.module.css"; // shorten the description of the experiment up to the next blank, comma or period after 100 characters function ShortenDesc({ desc, length }) { - const [collapsed, setCollapsed] = useState(true); + const [collapsed, setCollapsed] = useState(true); - if (desc.length <= length) { - return {desc}; - } + if (desc.length <= length) { + return {desc}; + } - return ( - - {collapsed ? ( - setCollapsed(!collapsed)} - style={{ cursor: "pointer" }} - > - {desc.slice(0, length) + - desc.slice(length).split(/[\s,\.]/)[0] + - " ..."} + return ( + + {collapsed ? ( + setCollapsed(!collapsed)} + style={{ cursor: "pointer" }} + > + {desc.slice(0, length) + + desc.slice(length).split(/[\s,\.]/)[0] + + " ..."} - - - ) : ( - setCollapsed(!collapsed)} - style={{ cursor: "pointer" }} - > - {desc} - - - )} - - ); + + + ) : ( + setCollapsed(!collapsed)} + style={{ cursor: "pointer" }} + > + {desc} + + + )} + + ); } export default ShortenDesc; diff --git a/src/components/deprecated/KbTagCloud.js b/src/components/deprecated/KbTagCloud.js index bca798ef..f5b195be 100644 --- a/src/components/deprecated/KbTagCloud.js +++ b/src/components/deprecated/KbTagCloud.js @@ -1,23 +1,25 @@ -import React from 'react'; -import { TagCloud } from 'react-tagcloud'; +import React from "react"; +import { TagCloud } from "react-tagcloud"; -function RandCount( min,max ) { - return Math.floor(Math.random() * (max - min) + min); +function RandCount(min, max) { + return Math.floor(Math.random() * (max - min) + min); } -function KbTagCloud( {cloudTags, min, max, shuffle} ) { +function KbTagCloud({ cloudTags, min, max, shuffle }) { + const tags = cloudTags.map((item) => ({ + value: item, + count: RandCount(min, max), + })); - const tags = cloudTags.map(item => ({value: item, count: RandCount(min,max)})) - - return( - - ) + return ( + + ); } -export default KbTagCloud; \ No newline at end of file +export default KbTagCloud; diff --git a/src/components/deprecated/Methods.js b/src/components/deprecated/Methods.js index a8d44f16..f1cb50eb 100644 --- a/src/components/deprecated/Methods.js +++ b/src/components/deprecated/Methods.js @@ -1,124 +1,186 @@ -import React,{ useState } from 'react'; - -const table = require('@site/static/assets/methods.json'); // extract table data -const profiles = require('@site/static/assets/profiles.json'); // extract subdomain profiles -const headers = table.filter(entry => entry.shortname === "headers")[0]; // extract header names - -export default function Methods( {defaultProfile} ) { - - const [filterProfile, setFilterProfile] = useState(defaultProfile); // define React state for filtering through subdomain profile, default profile is given by function prop - const [searchFilter, setSearchFilter] = useState(""); // define React state for text filtering - const handleChange = e => {setSearchFilter(e.target.value); setFilterProfile("")}; // handle text input changes in state - - function FilterButton( { name, longname } ) { - - var buttonClass = "lbe__filterbutton"; // Default style - - if (name == filterProfile) { - buttonClass = "lbe__filterbutton lbe__filterbutton--active"; // Style if active - } - - return ( - - ) - } - - var result = []; - var resultSet = []; - - if (searchFilter == "") { // decide which state to use for filtering - result = profiles.filter(m => m.name.includes(filterProfile)); - resultSet = result.map(n => n.methods)[0]; // create list of methods from profile for table rendering - } - else { - result = table.filter(obj => JSON.stringify(obj).toLowerCase().includes(searchFilter.toLowerCase())); // JSON.stringify squashes table entry object for string search - resultSet = result.map(m => m.shortname); - } - - return ( - -
-
-
Click to filter: {profiles.map((props,idx) => )}
-
-
-
-
-
- ) +import React, { useState } from "react"; + +const table = require("@site/static/assets/methods.json"); // extract table data +const profiles = require("@site/static/assets/profiles.json"); // extract subdomain profiles +const headers = table.filter((entry) => entry.shortname === "headers")[0]; // extract header names + +export default function Methods({ defaultProfile }) { + const [filterProfile, setFilterProfile] = useState(defaultProfile); // define React state for filtering through subdomain profile, default profile is given by function prop + const [searchFilter, setSearchFilter] = useState(""); // define React state for text filtering + const handleChange = (e) => { + setSearchFilter(e.target.value); + setFilterProfile(""); + }; // handle text input changes in state + + function FilterButton({ name, longname }) { + var buttonClass = "lbe__filterbutton"; // Default style + + if (name == filterProfile) { + buttonClass = "lbe__filterbutton lbe__filterbutton--active"; // Style if active + } + + return ( + + ); + } + + var result = []; + var resultSet = []; + + if (searchFilter == "") { + // decide which state to use for filtering + result = profiles.filter((m) => m.name.includes(filterProfile)); + resultSet = result.map((n) => n.methods)[0]; // create list of methods from profile for table rendering + } else { + result = table.filter((obj) => + JSON.stringify(obj) + .toLowerCase() + .includes(searchFilter.toLowerCase()), + ); // JSON.stringify squashes table entry object for string search + resultSet = result.map((m) => m.shortname); + } + + return ( + +
+
+
+ Click to filter:{" "} + {profiles.map((props, idx) => ( + + ))} +
+
+ +
+
+
+
+ +
+
+ ); } /* TableHead renders the table header */ -function TableHead( {alignment, activeHeaders} ) { - - ( alignment === "" ) ? "left" : alignment; // default value - - return( - - - {activeHeaders.filter(header => header !== "shortname").map(header => {headers[header]})} - - - ) +function TableHead({ alignment, activeHeaders }) { + alignment === "" ? "left" : alignment; // default value + + return ( + + + {activeHeaders + .filter((header) => header !== "shortname") + .map((header) => ( + + {headers[header]} + + ))} + + + ); } /* Entry renders table entries. dangerouslySetInnerHTML required to process links in table. If field contains boolean true, a check mark is returned */ function Entry({ entry, activeHeaders }) { - - return( - - {activeHeaders.filter(header => header !== "shortname").map(header => { - if ( entry[header] && entry[header].toString() === "true" ) { - return ✔ - } else { - return - } - })} - - ) + return ( + + {activeHeaders + .filter((header) => header !== "shortname") + .map((header) => { + if (entry[header] && entry[header].toString() === "true") { + return ( + + ✔ + + ); + } else { + return ( + + ); + } + })} + + ); } /* MethodsTable renders table from array of method shortnames (prop methods_to_show) using function Entry */ -function MethodsTable({resultSet}) { - - var found = table.filter(m => resultSet.includes(m.shortname)); // generates methods set - is current method contained in methods_to_show array? - var activeHeaders = (resultSet[0] === "all") ? Object.keys(headers) : Array.from(new Set(found.map(entry => Object.keys(entry).filter(key => key !== "shortname")).flat())); // Get list of headers required for found set or all headers for all - - if(found.length === 0) { - return ( -

No methods match your search query. Is your method missing? Contact us via helpdesk@nfdi4chem.de!

- ); - } - - if(resultSet[0] === "all"){ - return ( - - - - {table.filter(entry => entry.shortname !== "headers").map((entry, idx) => ( - - ))} - -
- ); - } - - return ( - - - - {found.map((entry, idx) => ( - - ))} - -
- ); +function MethodsTable({ resultSet }) { + var found = table.filter((m) => resultSet.includes(m.shortname)); // generates methods set - is current method contained in methods_to_show array? + var activeHeaders = + resultSet[0] === "all" + ? Object.keys(headers) + : Array.from( + new Set( + found + .map((entry) => + Object.keys(entry).filter( + (key) => key !== "shortname", + ), + ) + .flat(), + ), + ); // Get list of headers required for found set or all headers for all + + if (found.length === 0) { + return ( +

+ No methods match your search query. Is your method missing? + Contact us via{" "} + helpdesk@nfdi4chem.de + ! +

+ ); + } + + if (resultSet[0] === "all") { + return ( + + + + {table + .filter((entry) => entry.shortname !== "headers") + .map((entry, idx) => ( + + ))} + +
+ ); + } + + return ( + + + + {found.map((entry, idx) => ( + + ))} + +
+ ); } diff --git a/src/components/eln/ElnCard.js b/src/components/eln/ElnCard.js index 8c50852f..1cb05239 100644 --- a/src/components/eln/ElnCard.js +++ b/src/components/eln/ElnCard.js @@ -6,40 +6,40 @@ import ShortenDesc from "../commons/ShortenDesc.js"; import styles from "@site/src/components/eln/ElnStyles"; function ElnCard({ eln, filter, setFilter }) { - return ( -
-
-

{eln.name}

- -
- -
- -
- {eln.subDisc && eln.subDisc.length > 0 && ( -
- {eln.subDisc.map((subdisc, idx) => { - let isActive = filter.subDisc === subdisc; - return ( - - ); - })} -
- )} -
- ); + return ( +
+
+

{eln.name}

+ +
+ +
+ +
+ {eln.subDisc && eln.subDisc.length > 0 && ( +
+ {eln.subDisc.map((subdisc, idx) => { + let isActive = filter.subDisc === subdisc; + return ( + + ); + })} +
+ )} +
+ ); } export default ElnCard; diff --git a/src/components/eln/ElnFinder.js b/src/components/eln/ElnFinder.js index 25e077d9..018875f1 100644 --- a/src/components/eln/ElnFinder.js +++ b/src/components/eln/ElnFinder.js @@ -10,150 +10,156 @@ import styles from "@site/src/components/eln/ElnStyles"; // const elnData = require("@site/static/assets/eln_test.json"); function ElnFinder(props) { - // State for ELN data - - const [elnData, setElnData] = useState(null); - - // State for filtering - - const [filter, setFilter] = useImmer( - props.subDisc ? { subDisc: props.subDisc } : {}, - ); - - // Fetch ELN data - - useEffect(() => { - fetch("../../assets/elnData.json") - .then((response) => response.json()) - .then((data) => { - setElnData(data); - console.log(data); - }) - .catch((error) => { - console.error(error); - }); - }, []); - - // Catch if fetch is still loading - - if (!elnData) { - return Loading...; - } - - // Define working variables - - let elnTable = []; - let allSubDisc = []; - let allLicenses = []; - - // Parse timestamp of ELN data - - const dateDownloaded = moment(elnData.date); - const relativeDate = moment(dateDownloaded).fromNow(); - - // Assemble essential ELN data - - try { - const chemElns = elnData["_embedded"].searchResult["_embedded"].objects; - - chemElns.map((eln) => { - let subDisc = []; - eln["_embedded"].indexableObject.metadata["dc.subject"].map( - (discipline) => - discipline.value.startsWith("Chemistry:") - ? subDisc.push(discipline.value.split(":")[1]) - : null, - ); - - elnTable.push({ - name: eln["_embedded"].indexableObject.name, - url: eln["_embedded"].indexableObject.metadata["dc.identifier.uri"][0] - .value, - license: - eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0].value, - desc: eln["_embedded"].indexableObject.metadata[ - "dc.description.abstract" - ][0].value, - subDisc: subDisc, - }); - allSubDisc.push(subDisc); - allLicenses.push( - eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0].value, - ); - }); - - allSubDisc = [...new Set(allSubDisc.flat())]; - allLicenses = [...new Set(allLicenses)]; - } catch (error) { - console.error(error); - return Failed to process ELN data.; - } - - // Filter ELN data based on filter state - - const filteredTable = elnTable.filter((eln) => { - if (Object.keys(filter).length === 0) { - return true; - } - - if (filter.subDisc && !eln.subDisc.includes(filter.subDisc)) { - return false; - } - - if (filter.license && eln.license !== filter.license) { - return false; - } - - if ( - filter.text && - !JSON.stringify(eln).toLowerCase().includes(filter.text.toLowerCase()) - ) { - return false; - } - - return true; - }); - - // Determine number of results and generate output - - const numberOfResults = filteredTable.length; - - let resultOutput = null; - - switch (numberOfResults) { - case elnTable.length: - resultOutput = null; - break; - case 0: - resultOutput = "No results found."; - break; - case 1: - resultOutput = "1 result found."; - break; - default: - resultOutput = numberOfResults + " results found."; - break; - } - - // Render ELN Finder component - - return ( - - -
- - -
-
- ); + // State for ELN data + + const [elnData, setElnData] = useState(null); + + // State for filtering + + const [filter, setFilter] = useImmer( + props.subDisc ? { subDisc: props.subDisc } : {}, + ); + + // Fetch ELN data + + useEffect(() => { + fetch("../../assets/elnData.json") + .then((response) => response.json()) + .then((data) => { + setElnData(data); + console.log(data); + }) + .catch((error) => { + console.error(error); + }); + }, []); + + // Catch if fetch is still loading + + if (!elnData) { + return Loading...; + } + + // Define working variables + + let elnTable = []; + let allSubDisc = []; + let allLicenses = []; + + // Parse timestamp of ELN data + + const dateDownloaded = moment(elnData.date); + const relativeDate = moment(dateDownloaded).fromNow(); + + // Assemble essential ELN data + + try { + const chemElns = elnData["_embedded"].searchResult["_embedded"].objects; + + chemElns.map((eln) => { + let subDisc = []; + eln["_embedded"].indexableObject.metadata["dc.subject"].map( + (discipline) => + discipline.value.startsWith("Chemistry:") + ? subDisc.push(discipline.value.split(":")[1]) + : null, + ); + + elnTable.push({ + name: eln["_embedded"].indexableObject.name, + url: eln["_embedded"].indexableObject.metadata[ + "dc.identifier.uri" + ][0].value, + license: + eln["_embedded"].indexableObject.metadata[ + "K.lizenzmodell" + ][0].value, + desc: eln["_embedded"].indexableObject.metadata[ + "dc.description.abstract" + ][0].value, + subDisc: subDisc, + }); + allSubDisc.push(subDisc); + allLicenses.push( + eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0] + .value, + ); + }); + + allSubDisc = [...new Set(allSubDisc.flat())]; + allLicenses = [...new Set(allLicenses)]; + } catch (error) { + console.error(error); + return Failed to process ELN data.; + } + + // Filter ELN data based on filter state + + const filteredTable = elnTable.filter((eln) => { + if (Object.keys(filter).length === 0) { + return true; + } + + if (filter.subDisc && !eln.subDisc.includes(filter.subDisc)) { + return false; + } + + if (filter.license && eln.license !== filter.license) { + return false; + } + + if ( + filter.text && + !JSON.stringify(eln) + .toLowerCase() + .includes(filter.text.toLowerCase()) + ) { + return false; + } + + return true; + }); + + // Determine number of results and generate output + + const numberOfResults = filteredTable.length; + + let resultOutput = null; + + switch (numberOfResults) { + case elnTable.length: + resultOutput = null; + break; + case 0: + resultOutput = "No results found."; + break; + case 1: + resultOutput = "1 result found."; + break; + default: + resultOutput = numberOfResults + " results found."; + break; + } + + // Render ELN Finder component + + return ( + + +
+ + +
+
+ ); } export default ElnFinder; diff --git a/src/components/eln/ElnFinderPharm.js b/src/components/eln/ElnFinderPharm.js index 89821c10..5808edb9 100644 --- a/src/components/eln/ElnFinderPharm.js +++ b/src/components/eln/ElnFinderPharm.js @@ -11,133 +11,139 @@ import styles from "@site/src/components/eln/ElnStyles"; // const elnData = require("@site/static/assets/eln_test.json"); function ElnFinderPharm(props) { - // State for ELN data - - const [elnData, setElnData] = useState(null); - - // State for filtering - - const [filter, setFilter] = useImmer( - props.subDisc ? { subDisc: props.subDisc } : {}, - ); - - // Fetch ELN data - - useEffect(() => { - fetch("../../assets/elnDataPharm.json") - .then((response) => response.json()) - .then((data) => { - setElnData(data); - console.log(data); - }) - .catch((error) => { - console.error(error); - }); - }, []); - - // Catch if fetch is still loading - - if (!elnData) { - return Loading...; - } - - // Define working variables - - let elnTable = []; - let allLicenses = []; - - // Parse timestamp of ELN data - - const dateDownloaded = moment(elnData.date); - const relativeDate = moment(dateDownloaded).fromNow(); - - // Assemble essential ELN data - - try { - const chemElns = elnData["_embedded"].searchResult["_embedded"].objects; - - chemElns.map((eln) => { - elnTable.push({ - name: eln["_embedded"].indexableObject.name, - url: eln["_embedded"].indexableObject.metadata["dc.identifier.uri"][0] - .value, - license: - eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0].value, - desc: eln["_embedded"].indexableObject.metadata[ - "dc.description.abstract" - ][0].value, - }); - allLicenses.push( - eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0].value, - ); - }); - - allLicenses = [...new Set(allLicenses)]; - } catch (error) { - console.error(error); - return Failed to process ELN data.; - } - - // Filter ELN data based on filter state - - const filteredTable = elnTable.filter((eln) => { - if (Object.keys(filter).length === 0) { - return true; - } - - if (filter.license && eln.license !== filter.license) { - return false; - } - - if ( - filter.text && - !JSON.stringify(eln).toLowerCase().includes(filter.text.toLowerCase()) - ) { - return false; - } - - return true; - }); - - // Determine number of results and generate output - - const numberOfResults = filteredTable.length; - - let resultOutput = null; - - switch (numberOfResults) { - case elnTable.length: - resultOutput = null; - break; - case 0: - resultOutput = "No results found."; - break; - case 1: - resultOutput = "1 result found."; - break; - default: - resultOutput = numberOfResults + " results found."; - break; - } - - // Render ELN Finder component - - return ( - - -
- - -
-
- ); + // State for ELN data + + const [elnData, setElnData] = useState(null); + + // State for filtering + + const [filter, setFilter] = useImmer( + props.subDisc ? { subDisc: props.subDisc } : {}, + ); + + // Fetch ELN data + + useEffect(() => { + fetch("../../assets/elnDataPharm.json") + .then((response) => response.json()) + .then((data) => { + setElnData(data); + console.log(data); + }) + .catch((error) => { + console.error(error); + }); + }, []); + + // Catch if fetch is still loading + + if (!elnData) { + return Loading...; + } + + // Define working variables + + let elnTable = []; + let allLicenses = []; + + // Parse timestamp of ELN data + + const dateDownloaded = moment(elnData.date); + const relativeDate = moment(dateDownloaded).fromNow(); + + // Assemble essential ELN data + + try { + const chemElns = elnData["_embedded"].searchResult["_embedded"].objects; + + chemElns.map((eln) => { + elnTable.push({ + name: eln["_embedded"].indexableObject.name, + url: eln["_embedded"].indexableObject.metadata[ + "dc.identifier.uri" + ][0].value, + license: + eln["_embedded"].indexableObject.metadata[ + "K.lizenzmodell" + ][0].value, + desc: eln["_embedded"].indexableObject.metadata[ + "dc.description.abstract" + ][0].value, + }); + allLicenses.push( + eln["_embedded"].indexableObject.metadata["K.lizenzmodell"][0] + .value, + ); + }); + + allLicenses = [...new Set(allLicenses)]; + } catch (error) { + console.error(error); + return Failed to process ELN data.; + } + + // Filter ELN data based on filter state + + const filteredTable = elnTable.filter((eln) => { + if (Object.keys(filter).length === 0) { + return true; + } + + if (filter.license && eln.license !== filter.license) { + return false; + } + + if ( + filter.text && + !JSON.stringify(eln) + .toLowerCase() + .includes(filter.text.toLowerCase()) + ) { + return false; + } + + return true; + }); + + // Determine number of results and generate output + + const numberOfResults = filteredTable.length; + + let resultOutput = null; + + switch (numberOfResults) { + case elnTable.length: + resultOutput = null; + break; + case 0: + resultOutput = "No results found."; + break; + case 1: + resultOutput = "1 result found."; + break; + default: + resultOutput = numberOfResults + " results found."; + break; + } + + // Render ELN Finder component + + return ( + + +
+ + +
+
+ ); } export default ElnFinderPharm; diff --git a/src/components/eln/ElnStack.js b/src/components/eln/ElnStack.js index 4042873a..49951106 100644 --- a/src/components/eln/ElnStack.js +++ b/src/components/eln/ElnStack.js @@ -3,13 +3,13 @@ import React from "react"; import ElnCard from "./ElnCard"; function ElnStack({ filteredTable, filter, setFilter }) { - return ( - - {filteredTable.map((eln, idx) => ( - - ))} - - ); + return ( + + {filteredTable.map((eln, idx) => ( + + ))} + + ); } export default ElnStack; diff --git a/src/components/eln/ElnStatus.js b/src/components/eln/ElnStatus.js index a94fb8b2..673bb686 100644 --- a/src/components/eln/ElnStatus.js +++ b/src/components/eln/ElnStatus.js @@ -1,18 +1,21 @@ import Link from "@docusaurus/Link"; function ElnStatus({ relativeDate }) { - return ( -

- - Data kindly provided by{" "} - ELN Finder ( - {relativeDate !== "Invalid date" - ? "last updated " + relativeDate - : "last update unknown"} - ). - -

- ); + return ( +

+ + Data kindly provided by{" "} + + ELN Finder + {" "} + ( + {relativeDate !== "Invalid date" + ? "last updated " + relativeDate + : "last update unknown"} + ). + +

+ ); } export default ElnStatus; diff --git a/src/components/eln/ElnStyles.js b/src/components/eln/ElnStyles.js index 5a4a0d33..a88a5190 100644 --- a/src/components/eln/ElnStyles.js +++ b/src/components/eln/ElnStyles.js @@ -2,8 +2,8 @@ import elnStyles from "@site/src/css/Eln.module.css"; import lbeStyles from "@site/src/css/lbe.module.css"; const styles = { - ...elnStyles, - ...lbeStyles, + ...elnStyles, + ...lbeStyles, }; export default styles; diff --git a/src/components/eln/elnFilter/ElnFilter.js b/src/components/eln/elnFilter/ElnFilter.js index 789f8f7b..18389a98 100644 --- a/src/components/eln/elnFilter/ElnFilter.js +++ b/src/components/eln/elnFilter/ElnFilter.js @@ -8,89 +8,91 @@ import styles from "@site/src/components/eln/ElnStyles"; // Assemble buttons for filtering section function ButtonFilters({ allSubDisc, allLicenses, filter, setFilter }) { - let subDiscButtons = []; + let subDiscButtons = []; - if (allSubDisc) { - subDiscButtons = ["All", ...allSubDisc]; - } - let licenseButtons = ["All", ...allLicenses]; + if (allSubDisc) { + subDiscButtons = ["All", ...allSubDisc]; + } + let licenseButtons = ["All", ...allLicenses]; - // Check if active prop should be handed to FilterButton + // Check if active prop should be handed to FilterButton - function isActive(type, label) { - // check if filter value is equal to label + function isActive(type, label) { + // check if filter value is equal to label - if (filter[type] === label) { - return true; - } + if (filter[type] === label) { + return true; + } - // check if object is empty and label is "All" + // check if object is empty and label is "All" - if ( - (label === "All" && Object.keys(filter).length === 0) || - (label === "All" && !filter[type]) - ) { - return true; - } else { - return false; - } - } + if ( + (label === "All" && Object.keys(filter).length === 0) || + (label === "All" && !filter[type]) + ) { + return true; + } else { + return false; + } + } - return ( - - {subDiscButtons.length > 0 && ( -
-
Filter by subdisciplines
-

- {subDiscButtons.map((subDisc, idx) => ( - - ))} -

-
- )} -
-
Filter by license
-

- {licenseButtons.map((license, idx) => ( - - ))} -

-
-
- ); + return ( + + {subDiscButtons.length > 0 && ( +
+
Filter by subdisciplines
+

+ {subDiscButtons.map((subDisc, idx) => ( + + ))} +

+
+ )} +
+
Filter by license
+

+ {licenseButtons.map((license, idx) => ( + + ))} +

+
+
+ ); } function ElnFilter({ - allSubDisc, - allLicenses, - filter, - setFilter, - resultOutput, + allSubDisc, + allLicenses, + filter, + setFilter, + resultOutput, }) { - return ( -
-
- -
-
- -
-
- ); + return ( +
+
+ +
+
+ +
+
+ ); } export default ElnFilter; diff --git a/src/components/eln/elnFilter/FilterButton.js b/src/components/eln/elnFilter/FilterButton.js index 92b0ee7b..c887087d 100644 --- a/src/components/eln/elnFilter/FilterButton.js +++ b/src/components/eln/elnFilter/FilterButton.js @@ -2,30 +2,30 @@ import styles from "@site/src/components/eln/ElnStyles"; import clsx from "clsx"; function FilterButton(props) { - const handleClick = () => { - if (props.label === "All") { - props.setFilter((draft) => { - delete draft[props.type]; - }); - } else { - props.setFilter((draft) => { - draft[props.type] = props.label; - }); - } - }; + const handleClick = () => { + if (props.label === "All") { + props.setFilter((draft) => { + delete draft[props.type]; + }); + } else { + props.setFilter((draft) => { + draft[props.type] = props.label; + }); + } + }; - // Conditional styling for button + // Conditional styling for button - let buttonClass = clsx(styles.lbeFilterbutton, { - [styles.elnFilterbuttonSecondary]: props.secondary, - [styles.lbeFilterbuttonActive]: props.active, - }); + let buttonClass = clsx(styles.lbeFilterbutton, { + [styles.elnFilterbuttonSecondary]: props.secondary, + [styles.lbeFilterbuttonActive]: props.active, + }); - return ( - - ); + return ( + + ); } export default FilterButton; diff --git a/src/components/eln/elnFilter/TextSearch.js b/src/components/eln/elnFilter/TextSearch.js index 442504be..67c73ddf 100644 --- a/src/components/eln/elnFilter/TextSearch.js +++ b/src/components/eln/elnFilter/TextSearch.js @@ -1,38 +1,38 @@ import styles from "@site/src/components/eln/ElnStyles"; function TextSearch({ resultOutput, filter, setFilter }) { - const handleChange = (e) => - setFilter((draft) => { - draft.text = e.target.value; - }); + const handleChange = (e) => + setFilter((draft) => { + draft.text = e.target.value; + }); - return ( -
- - - {filter.text && ( - - )} -   - - {resultOutput} -
- ); + return ( +
+ + + {filter.text && ( + + )} +   + + {resultOutput} +
+ ); } export default TextSearch; diff --git a/src/components/features/ButtonContainer.js b/src/components/features/ButtonContainer.js index 3dffbcf8..6307917c 100644 --- a/src/components/features/ButtonContainer.js +++ b/src/components/features/ButtonContainer.js @@ -1,7 +1,7 @@ import styles from "@site/src/css/Features.module.css"; function ButtonContainer({ children }) { - return
{children}
; + return
{children}
; } export default ButtonContainer; diff --git a/src/components/features/FeatureButton.js b/src/components/features/FeatureButton.js index ae6fcb1a..8ddbad6a 100644 --- a/src/components/features/FeatureButton.js +++ b/src/components/features/FeatureButton.js @@ -6,25 +6,29 @@ import styles from "@site/src/css/Features.module.css"; import clsx from "clsx"; function FeatureButton({ url, imgUrl, text, ...props }) { - let classes = clsx( - "button", - { "button--primary": props.index }, - { "button--secondary": !props.index }, - props.classes, - styles.featureButton, - { [styles.featureButtonIndex]: props.index }, - ); + let classes = clsx( + "button", + { "button--primary": props.index }, + { "button--secondary": !props.index }, + props.classes, + styles.featureButton, + { [styles.featureButtonIndex]: props.index }, + ); - const width = props?.width ?? "120px"; + const width = props?.width ?? "120px"; - return ( - -
- {props.alt -
-
{text}
- - ); + return ( + +
+ {props.alt +
+
{text}
+ + ); } export default FeatureButton; diff --git a/src/components/features/Features.js b/src/components/features/Features.js index 8f8bbcda..9a9de30a 100644 --- a/src/components/features/Features.js +++ b/src/components/features/Features.js @@ -2,21 +2,21 @@ import ButtonContainer from "./ButtonContainer"; import FeatureButton from "./FeatureButton"; function Features({ featureList, index, ...props }) { - return ( - - {featureList.map((feature, idx) => ( - - ))} - - ); + return ( + + {featureList.map((feature, idx) => ( + + ))} + + ); } export default Features; diff --git a/src/components/lbe/Authors.js b/src/components/lbe/Authors.js index 73f07799..e296309d 100644 --- a/src/components/lbe/Authors.js +++ b/src/components/lbe/Authors.js @@ -7,37 +7,37 @@ import styles from "@site/src/css/lbe.module.css"; // Function for expandible author list function Authors({ authors, length }) { - const [listOpen, ToggleListOpen] = useState(false); // Define state for author list, default "false" - var shortlist = authors.split(", ", length).join(", "); // List of authors with elements given by length + const [listOpen, ToggleListOpen] = useState(false); // Define state for author list, default "false" + var shortlist = authors.split(", ", length).join(", "); // List of authors with elements given by length - // If there are less than {length} authors, do not display button + // If there are less than {length} authors, do not display button - if (shortlist == authors) { - return {authors}; - } else if (listOpen) { - return ( - - {authors}{" "} - - - ); - } else - return ( - - {shortlist}, ...{" "} - - - ); + if (shortlist == authors) { + return {authors}; + } else if (listOpen) { + return ( + + {authors}{" "} + + + ); + } else + return ( + + {shortlist}, ...{" "} + + + ); } export default Authors; diff --git a/src/components/lbe/Data.js b/src/components/lbe/Data.js index 7a0ab757..2e971f46 100644 --- a/src/components/lbe/Data.js +++ b/src/components/lbe/Data.js @@ -1,14 +1,14 @@ // LBE data -const lbeTable = require('@site/static/assets/lbe.json'); +const lbeTable = require("@site/static/assets/lbe.json"); // Lookup for JSON attributes corresponding to type const filterAttr = { - "subd": "subdiscipline", - "journal": "journal", - "repo": "linkdata", - "doi": "linkpub" + subd: "subdiscipline", + journal: "journal", + repo: "linkdata", + doi: "linkpub", }; -export { lbeTable, filterAttr }; \ No newline at end of file +export { lbeTable, filterAttr }; diff --git a/src/components/lbe/FilterSection.js b/src/components/lbe/FilterSection.js index b24a4710..ec488a5e 100644 --- a/src/components/lbe/FilterSection.js +++ b/src/components/lbe/FilterSection.js @@ -11,70 +11,72 @@ import styles from "@site/src/css/lbe.module.css"; // Assemble buttons for filtering section function LbeButtons({ repos, subdiscs, journals, lbeState, setLbeState }) { - return ( - -
-

Filter by repositories

-

- {repos.map((props, idx) => ( - - ))} -

-
-
-

Filter by subdisciplines

-

- {subdiscs.map((props, idx) => ( - - ))} -

-
-
-

Filter by journals

-

- {journals.map((props, idx) => ( - - ))} -

-
-
- ); + return ( + +
+

Filter by repositories

+

+ {repos.map((props, idx) => ( + + ))} +

+
+
+

Filter by subdisciplines

+

+ {subdiscs.map((props, idx) => ( + + ))} +

+
+
+

Filter by journals

+

+ {journals.map((props, idx) => ( + + ))} +

+
+
+ ); } function FilterSection({ - repos, - subdiscs, - journals, - lbeState, - setLbeState, - resultOutput, + repos, + subdiscs, + journals, + lbeState, + setLbeState, + resultOutput, }) { - return ( -
-
- - -
-
- ); + return ( +
+
+ + +
+
+ ); } export default FilterSection; diff --git a/src/components/lbe/Lbe.js b/src/components/lbe/Lbe.js index 30e3f7e4..c6f406a0 100644 --- a/src/components/lbe/Lbe.js +++ b/src/components/lbe/Lbe.js @@ -17,136 +17,140 @@ import { lbeTable } from "./Data.js"; // Main function function Lbe() { - // Get URL params - const location = useLocation(); - const queryParameters = new URLSearchParams(location.search); - const queryText = queryParameters.get("text"); - const querySubd = queryParameters.get("subd"); - const queryDoi = queryParameters.get("doi"); - - // Define React state object - const [lbeState, setLbeState] = useState({}); - - // Conditions for initial states - - if (queryText !== null) { - useEffect(() => { - setLbeState({ - search: queryText, - switch: "text", - }); - }, []); - } else if (querySubd !== null) { - useEffect(() => { - setLbeState({ - subd: querySubd, - switch: "subd", - }); - }, []); - } else if (queryDoi !== null) { - useEffect(() => { - setLbeState({ - switch: "doi", - }); - }, []); - } else { - useEffect(() => { - setLbeState({ - repo: "All", - subd: "All", - journal: "All", - switch: "subd", - }); - }, []); - } - - // Get list of subdisciplines - var subdiscs = Array.from( - new Set(lbeTable.map((obj) => obj.subdiscipline).flat()), - ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); - subdiscs.unshift("All"); // Add "All" option at the beginning - - // Get list of tags - var categories = Array.from( - new Set(lbeTable.map((obj) => obj.tags).flat()), - ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); - categories.unshift("All"); // Add "All" option at the beginning - - // Get list of journals - var journals = Array.from(new Set(lbeTable.map((obj) => obj.journal))).sort( - (a, b) => a.localeCompare(b, undefined, { sensitivity: "base" }), - ); - journals.unshift("All"); // Add "All" option at the beginning - - // Get list of repos - var repos = Array.from( - new Set(lbeTable.map((obj) => obj.linkdata.map((obj) => obj.name)).flat()), - ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); - repos.unshift("All"); // Add "All" option at the beginning - - var result = []; - - // Render all datasets if "All" is selected - - if (lbeState.repo == "All" || lbeState.subd == "All") { - result = lbeTable; - } else { - // Determine result set based on lbeState.switch states - switch (lbeState.switch) { - case "tag": - result = lbeTable.filter((n) => n.tags.includes(tagFilter)); - break; - case "repo": - result = lbeTable.filter((n) => - n.linkdata.map((n) => n.name).includes(lbeState.repo), - ); - break; - case "subd": - result = lbeTable.filter((n) => - n.subdiscipline.includes(lbeState.subd), - ); - break; - case "journal": - result = lbeTable.filter((n) => n.journal.includes(lbeState.journal)); - break; - case "search": - result = lbeTable.filter((obj) => - JSON.stringify(obj) - .toLowerCase() - .includes(lbeState.search.toLowerCase()), - ); // Squash object with JSON.stringify() for better searchability - if (lbeState.search == "") { - var resultOutput = ""; - } else if (result.length == 1) { - var resultOutput = result.length + " entry found..."; - } else { - var resultOutput = result.length + " entries found..."; - } - break; - case "doi": - result = lbeTable.filter((n) => n.linkpub.includes(queryDoi)); - } - } - - if (lbeState.switch !== "search") { - result.sort((a, b) => b.pubyear - a.pubyear); - } - - return ( -
- - -
- ); + // Get URL params + const location = useLocation(); + const queryParameters = new URLSearchParams(location.search); + const queryText = queryParameters.get("text"); + const querySubd = queryParameters.get("subd"); + const queryDoi = queryParameters.get("doi"); + + // Define React state object + const [lbeState, setLbeState] = useState({}); + + // Conditions for initial states + + if (queryText !== null) { + useEffect(() => { + setLbeState({ + search: queryText, + switch: "text", + }); + }, []); + } else if (querySubd !== null) { + useEffect(() => { + setLbeState({ + subd: querySubd, + switch: "subd", + }); + }, []); + } else if (queryDoi !== null) { + useEffect(() => { + setLbeState({ + switch: "doi", + }); + }, []); + } else { + useEffect(() => { + setLbeState({ + repo: "All", + subd: "All", + journal: "All", + switch: "subd", + }); + }, []); + } + + // Get list of subdisciplines + var subdiscs = Array.from( + new Set(lbeTable.map((obj) => obj.subdiscipline).flat()), + ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); + subdiscs.unshift("All"); // Add "All" option at the beginning + + // Get list of tags + var categories = Array.from( + new Set(lbeTable.map((obj) => obj.tags).flat()), + ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); + categories.unshift("All"); // Add "All" option at the beginning + + // Get list of journals + var journals = Array.from(new Set(lbeTable.map((obj) => obj.journal))).sort( + (a, b) => a.localeCompare(b, undefined, { sensitivity: "base" }), + ); + journals.unshift("All"); // Add "All" option at the beginning + + // Get list of repos + var repos = Array.from( + new Set( + lbeTable.map((obj) => obj.linkdata.map((obj) => obj.name)).flat(), + ), + ).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); + repos.unshift("All"); // Add "All" option at the beginning + + var result = []; + + // Render all datasets if "All" is selected + + if (lbeState.repo == "All" || lbeState.subd == "All") { + result = lbeTable; + } else { + // Determine result set based on lbeState.switch states + switch (lbeState.switch) { + case "tag": + result = lbeTable.filter((n) => n.tags.includes(tagFilter)); + break; + case "repo": + result = lbeTable.filter((n) => + n.linkdata.map((n) => n.name).includes(lbeState.repo), + ); + break; + case "subd": + result = lbeTable.filter((n) => + n.subdiscipline.includes(lbeState.subd), + ); + break; + case "journal": + result = lbeTable.filter((n) => + n.journal.includes(lbeState.journal), + ); + break; + case "search": + result = lbeTable.filter((obj) => + JSON.stringify(obj) + .toLowerCase() + .includes(lbeState.search.toLowerCase()), + ); // Squash object with JSON.stringify() for better searchability + if (lbeState.search == "") { + var resultOutput = ""; + } else if (result.length == 1) { + var resultOutput = result.length + " entry found..."; + } else { + var resultOutput = result.length + " entries found..."; + } + break; + case "doi": + result = lbeTable.filter((n) => n.linkpub.includes(queryDoi)); + } + } + + if (lbeState.switch !== "search") { + result.sort((a, b) => b.pubyear - a.pubyear); + } + + return ( +
+ + +
+ ); } export default Lbe; diff --git a/src/components/lbe/LbeBody.js b/src/components/lbe/LbeBody.js index 1a34f9d9..28fda925 100644 --- a/src/components/lbe/LbeBody.js +++ b/src/components/lbe/LbeBody.js @@ -12,104 +12,104 @@ import styles from "@site/src/css/lbe.module.css"; // Function for single lbe dataset block function LbeBlock({ - title, - authors, - journal, - pubyear, - linkpub, - linkdata, - linkcomment, - description, - lbeState, - setLbeState, + title, + authors, + journal, + pubyear, + linkpub, + linkdata, + linkcomment, + description, + lbeState, + setLbeState, }) { - // Extract DOI from link by cutting right of "doi.org" - var doi = linkpub.slice(linkpub.indexOf("doi.org") + 8); - - // Define set of repos in this dataset - var myRepos = Array.from(new Set(linkdata.map((obj) => obj.name))) - .flat() - .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); - - return ( -
-
-
-

{title}

-
-
- -
-
- -

- - - -

- -

- {journal} {pubyear}, DOI:{" "} - - {doi} - - . -

- -

- {myRepos.map((m, idx) => ( - - ))} -

- -
- -
-

{description}

-
- -
- -
-

- {linkdata.map((props, idx) => ( - - ))} -

-

- {linkcomment} -

-
-
- ); + // Extract DOI from link by cutting right of "doi.org" + var doi = linkpub.slice(linkpub.indexOf("doi.org") + 8); + + // Define set of repos in this dataset + var myRepos = Array.from(new Set(linkdata.map((obj) => obj.name))) + .flat() + .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })); + + return ( +
+
+
+

{title}

+
+
+ +
+
+ +

+ + + +

+ +

+ {journal} {pubyear}, DOI:{" "} + + {doi} + + . +

+ +

+ {myRepos.map((m, idx) => ( + + ))} +

+ +
+ +
+

{description}

+
+ +
+ +
+

+ {linkdata.map((props, idx) => ( + + ))} +

+

+ {linkcomment} +

+
+
+ ); } // Render LBE entry list function LbeBody({ list, lbeState, setLbeState }) { - return ( -
- {list.map((props, idx) => ( - - ))} -
- ); + return ( +
+ {list.map((props, idx) => ( + + ))} +
+ ); } export default LbeBody; diff --git a/src/components/lbe/LbeElements.js b/src/components/lbe/LbeElements.js index 5dac4253..36758412 100644 --- a/src/components/lbe/LbeElements.js +++ b/src/components/lbe/LbeElements.js @@ -15,122 +15,125 @@ import { lbeTable, filterAttr } from "./Data.js"; // Button for Repo Links function RepoButton({ name, url }) { - return ( - - {name} - - ); + return ( + + {name} + + ); } // Handles text input function TextSearch({ lbeState, setLbeState, resultOutput }) { - const handleChange = (e) => - setLbeState( - e.target.value === "" - ? { - repo: "All", - subd: "All", - journal: "All", - switch: "subd", - } - : { - search: e.target.value, - switch: "search", - }, - [e.target.value], - ); - - return ( -
- {" "} -   {resultOutput} -
- ); + const handleChange = (e) => + setLbeState( + e.target.value === "" + ? { + repo: "All", + subd: "All", + journal: "All", + switch: "subd", + } + : { + search: e.target.value, + switch: "search", + }, + [e.target.value], + ); + + return ( +
+ {" "} +   {resultOutput} +
+ ); } // Function for handling button clicks function HandleClick({ name, newState, setLbeState }) { - if (name == "All") { - setLbeState({ - journal: "All", - subd: "All", - repo: "All", - switch: "subd", - }); - } else { - setLbeState(newState); - } + if (name == "All") { + setLbeState({ + journal: "All", + subd: "All", + repo: "All", + switch: "subd", + }); + } else { + setLbeState(newState); + } } // Function for filtering buttons function FilterButton({ - type, - name, - numbered, - funnel, - title, - lbeState, - setLbeState, + type, + name, + numbered, + funnel, + title, + lbeState, + setLbeState, }) { - // type and name are strings, numbered is boolean - - // Initialize variables - - var buttonClass = styles.lbeFilterbutton; - var number = 0; - var label = ""; - - // Define how the state object should be set when clicked - - var newState = { [type]: name, switch: type }; - - // Styling of active button - - if (name === lbeState[type]) { - buttonClass = clsx(styles.lbeFilterbutton, styles.lbeFilterbuttonActive); - } - - // Determine number (when needed) - - if (numbered) { - if (name === "All") { - number = lbeTable.length; - } else { - number = lbeTable - .map((m) => JSON.stringify(m[filterAttr[type]])) - .filter((m) => m.includes(name)).length; - } - label = name + " (" + number + ")"; - } else { - label = name; - } - - return ( - - ); + // type and name are strings, numbered is boolean + + // Initialize variables + + var buttonClass = styles.lbeFilterbutton; + var number = 0; + var label = ""; + + // Define how the state object should be set when clicked + + var newState = { [type]: name, switch: type }; + + // Styling of active button + + if (name === lbeState[type]) { + buttonClass = clsx( + styles.lbeFilterbutton, + styles.lbeFilterbuttonActive, + ); + } + + // Determine number (when needed) + + if (numbered) { + if (name === "All") { + number = lbeTable.length; + } else { + number = lbeTable + .map((m) => JSON.stringify(m[filterAttr[type]])) + .filter((m) => m.includes(name)).length; + } + label = name + " (" + number + ")"; + } else { + label = name; + } + + return ( + + ); } export { RepoButton, TextSearch, FilterButton }; diff --git a/src/components/lbe/ShortenButtons.js b/src/components/lbe/ShortenButtons.js index 41ce0db9..866ab9f4 100644 --- a/src/components/lbe/ShortenButtons.js +++ b/src/components/lbe/ShortenButtons.js @@ -5,52 +5,54 @@ import { RepoButton } from "./LbeElements"; import styles from "@site/src/css/lbe.module.css"; function ShortenButtons(props) { - const [less, setLess] = useState(true); + const [less, setLess] = useState(true); - let number = props.number || 3; - let items = props.items || []; + let number = props.number || 3; + let items = props.items || []; - if (items.length <= number) { - return ( - - {items.map((item, idx) => ( - - ))} - - ); - } + if (items.length <= number) { + return ( + + {items.map((item, idx) => ( + + ))} + + ); + } - return ( - - {less ? ( - - {items.map((item, idx) => - idx < number ? : null, - )} - setLess(!less)} - style={{ cursor: "pointer" }} - > - show all ⏵ - - - ) : ( - - {items.map((item, idx) => ( - - ))} - setLess(!less)} - style={{ cursor: "pointer" }} - > - ⏴ collapse - - - )} - - ); + return ( + + {less ? ( + + {items.map((item, idx) => + idx < number ? ( + + ) : null, + )} + setLess(!less)} + style={{ cursor: "pointer" }} + > + show all ⏵ + + + ) : ( + + {items.map((item, idx) => ( + + ))} + setLess(!less)} + style={{ cursor: "pointer" }} + > + ⏴ collapse + + + )} + + ); } export default ShortenButtons; diff --git a/src/components/repos/DecisionTree.js b/src/components/repos/DecisionTree.js index 937e06d2..041e5158 100644 --- a/src/components/repos/DecisionTree.js +++ b/src/components/repos/DecisionTree.js @@ -4,433 +4,442 @@ import Link from "@docusaurus/Link"; import styles from "@site/src/css/DecisionTree.module.css"; const DecisionTree = () => { - return ( - - - - - - - What type of data do you have? - - - + return ( + + + + + + + What type of data do you have? + + + - - - - - - intermolecular and - - - supramolecular - - - interactions of - - - molecular systems - - - - - - - SupraBank - - - - + + + + + + intermolecular and + + + supramolecular + + + interactions of + + + molecular systems + + + + + + + SupraBank + + + + - - - + + + - - - enzyme kinetics data - - - - - - - STRENDA - - - DB - - - - + + + enzyme kinetics data + + + + + + + STRENDA + + + DB + + + + - - - - - - multidisciplinary - - - - - - - RADAR4Chem - - - - + + + + + + multidisciplinary + + + + + + + RADAR4Chem + + + + - - + + - + - - - simulations - - + + + simulations + + - - - - - NOMAD - - - - + + + + + NOMAD + + + + - - + + - + - - - crystal structures of - - - molecular organic and - - - molecular inorganic - - - compounds - - + + + crystal structures of + + + molecular organic and + + + molecular inorganic + + + compounds + + - - - - - CSD - - - - + + + + + CSD + + + + - - + + - - - - inorganic crystal - - - structures - - - - - - - ICSD - - - - + + + + inorganic crystal + + + structures + + + + + + + ICSD + + + + - - - - - - molecules and their - - - properties, - - - identification, reactions - - - and experimental - - - investigations - - + + + + + + molecules and their + + + properties, + + + identification, reactions + + + and experimental + + + investigations + + - - + + - - - - nuclear magnetic - - - resonance (NMR) - - + + + + nuclear magnetic + + + resonance (NMR) + + - - - - - Chemotion - - - Repository - - - - - - - - nmrXiv - - - - + + + + + Chemotion + + + Repository + + + + + + + + nmrXiv + + + + - - + + - - - - mass spectrometry - - - reference spectra - - + + + + mass spectrometry + + + reference spectra + + - - - - - MassBank EU - - - - - - - ); + + + + + MassBank EU + + + + + + + ); }; export default DecisionTree; diff --git a/src/components/repos/RepoButton.js b/src/components/repos/RepoButton.js index 91f12f46..d526985a 100644 --- a/src/components/repos/RepoButton.js +++ b/src/components/repos/RepoButton.js @@ -7,16 +7,16 @@ import styles from "@site/src/css/lbe.module.css"; import clsx from "clsx"; function RepoButton(props) { - return ( - - {props.intro ? props.intro + " " : null} - {props.name} - - ); + return ( + + {props.intro ? props.intro + " " : null} + {props.name} + + ); } export default RepoButton; diff --git a/src/components/repos/repoCardData.js b/src/components/repos/repoCardData.js index 53a8be1a..de951daf 100644 --- a/src/components/repos/repoCardData.js +++ b/src/components/repos/repoCardData.js @@ -1,80 +1,101 @@ import Translate from "@docusaurus/Translate"; export const repositoryData = [ - { - name: "Chemotion Repository", - url: "/img/data_pub/repos/ChemotionRepo_Logo.svg", - alt: "Chemotion Repository Logo", - description: - - Field-specific sample and reaction-centric repository including analysis data such as NMR, UV-VIS, IR, and MS data. - - }, - { - name: "MassBank", - url: "/img/data_pub/repos/Massbank_logo.svg", - alt: "Massbank Logo", - description: - - Field-specific ecosystem of databases and tools for mass spectrometry reference spectra.* - - }, - { - name: "nmrXiv", - url: "/img/data_pub/repos/nmrXiv.svg", - alt: "nmrXiv Logo", - description: - - Field-specific repository for NMR data. - - }, - { - name: "RADAR4Chem", - url: "/img/data_pub/repos/radar4chem_Logo.svg", - alt: "RADAR4Chem Logo", - description: - - Generic, multidisciplinary repository that offers a free and reliable home for all chemical research data that do not fulfil the specifications of field-specific repositories. - - }, - { - name: "STRENDA", - url: "/img/data_pub/repos/Logo_Beilstein_STRENDA_sRGB.png", - alt: "Strenda DB Logo", - description: - - Field-specific repository for enzymology data, which incorporates the STRENDA Guidelines for reporting enzymology data. - - }, - { - name: "Suprabank", - url: "/img/data_pub/repos/Suprabank_logo.svg", - alt: "Suprabank Logo", - description: - - Field-specific repository for intermolecular interactions data. - - }, + { + name: "Chemotion Repository", + url: "/img/data_pub/repos/ChemotionRepo_Logo.svg", + alt: "Chemotion Repository Logo", + description: ( + + Field-specific sample and reaction-centric repository including + analysis data such as NMR, UV-VIS, IR, and MS data. + + ), + }, + { + name: "MassBank", + url: "/img/data_pub/repos/Massbank_logo.svg", + alt: "Massbank Logo", + description: ( + + Field-specific ecosystem of databases and tools for mass + spectrometry reference spectra.* + + ), + }, + { + name: "nmrXiv", + url: "/img/data_pub/repos/nmrXiv.svg", + alt: "nmrXiv Logo", + description: ( + Field-specific repository for NMR data. + ), + }, + { + name: "RADAR4Chem", + url: "/img/data_pub/repos/radar4chem_Logo.svg", + alt: "RADAR4Chem Logo", + description: ( + + Generic, multidisciplinary repository that offers a free and + reliable home for all chemical research data that do not fulfil + the specifications of field-specific repositories. + + ), + }, + { + name: "STRENDA", + url: "/img/data_pub/repos/Logo_Beilstein_STRENDA_sRGB.png", + alt: "Strenda DB Logo", + description: ( + + Field-specific repository for enzymology data, which + incorporates the STRENDA Guidelines for reporting enzymology + data. + + ), + }, + { + name: "Suprabank", + url: "/img/data_pub/repos/Suprabank_logo.svg", + alt: "Suprabank Logo", + description: ( + + Field-specific repository for intermolecular interactions data. + + ), + }, ]; export const repositoryStyle = { - "--ifm-button-size-multiplier": "1", - flex: "250px", - fontWeight: "unset", - display: "flex", - flexDirection: "column", - alignItems: "center", - justifyContent: "space-evenly", + "--ifm-button-size-multiplier": "1", + flex: "250px", + fontWeight: "unset", + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "space-evenly", }; -const imgStyle = { display: "flex", flex: "50%", width: "100%", padding: "0.5rem 0", alignItems: "end", justifyContent: "center" } +const imgStyle = { + display: "flex", + flex: "50%", + width: "100%", + padding: "0.5rem 0", + alignItems: "end", + justifyContent: "center", +}; const descStyle = { - display: "flex", flexGrow: 1, flex: "50%", width: "100%", padding: "0.5rem", alignItems: "start", justifyContent: "center" -} + display: "flex", + flexGrow: 1, + flex: "50%", + width: "100%", + padding: "0.5rem", + alignItems: "start", + justifyContent: "center", +}; export function RepoDiv(props) { - return ( -
{props.children}
- ) + return
{props.children}
; } diff --git a/src/data/domains.js b/src/data/domains.js index 5db2b4d9..a1e8b433 100644 --- a/src/data/domains.js +++ b/src/data/domains.js @@ -1,42 +1,42 @@ import Translate from "@docusaurus/Translate"; const domains = [ - { - text: Analytical Chemistry, - imgUrl: "/img/nfdi4chem_Analytical_Chemistry.svg", - alt: "Analytical Chemistry Icon", - url: "/docs/analytical_chemistry", - }, - { - text: Electrochemistry, - imgUrl: "/img/nfdi4chem_Electrochemistry.svg", - alt: "Electrochemistry Icon", - url: "/docs/electrochemistry", - }, - { - text: Pharmaceutical Chemistry, - imgUrl: "/img/nfdi4chem_Medicinal-Pharmaceutical_Chemistry.svg", - alt: "Pharmaceutical Chemistry Icon", - url: "/docs/pharmaceutical_chemistry", - }, - { - text: Physical Chemistry, - imgUrl: "/img/nfdi4chem_Physical_Chemistry.svg", - alt: "Physical Chemistry Icon", - url: "/docs/physical_chemistry", - }, - { - text: Polymer Chemistry, - imgUrl: "/img/nfdi4chem_Polymer_Chemistry.svg", - alt: "Polymer Chemistry Icon", - url: "/docs/polymer_chemistry", - }, - { - text: Synthetic Chemistry, - imgUrl: "/img/nfdi4chem_Synthetic_Chemistry.svg", - alt: "Synthetic Chemistry Icon", - url: "/docs/synthetic_chemistry", - }, + { + text: Analytical Chemistry, + imgUrl: "/img/nfdi4chem_Analytical_Chemistry.svg", + alt: "Analytical Chemistry Icon", + url: "/docs/analytical_chemistry", + }, + { + text: Electrochemistry, + imgUrl: "/img/nfdi4chem_Electrochemistry.svg", + alt: "Electrochemistry Icon", + url: "/docs/electrochemistry", + }, + { + text: Pharmaceutical Chemistry, + imgUrl: "/img/nfdi4chem_Medicinal-Pharmaceutical_Chemistry.svg", + alt: "Pharmaceutical Chemistry Icon", + url: "/docs/pharmaceutical_chemistry", + }, + { + text: Physical Chemistry, + imgUrl: "/img/nfdi4chem_Physical_Chemistry.svg", + alt: "Physical Chemistry Icon", + url: "/docs/physical_chemistry", + }, + { + text: Polymer Chemistry, + imgUrl: "/img/nfdi4chem_Polymer_Chemistry.svg", + alt: "Polymer Chemistry Icon", + url: "/docs/polymer_chemistry", + }, + { + text: Synthetic Chemistry, + imgUrl: "/img/nfdi4chem_Synthetic_Chemistry.svg", + alt: "Synthetic Chemistry Icon", + url: "/docs/synthetic_chemistry", + }, ]; export default domains; diff --git a/src/data/roles.js b/src/data/roles.js index be97bb88..1d97690a 100644 --- a/src/data/roles.js +++ b/src/data/roles.js @@ -1,36 +1,36 @@ import Translate from "@docusaurus/Translate"; const roles = [ - { - text: Research Group Leader, - imgUrl: "/img/nfdi4chem_Research_Group_Leader.svg", - alt: "Research Group Leader Icon", - url: "/docs/research_group_leader", - }, - { - text: Research Group Member, - imgUrl: "/img/nfdi4chem_Research_Group_Member.svg", - alt: "Research Group Member Icon", - url: "/docs/research_group_member", - }, - { - text: Student, - imgUrl: "/img/nfdi4chem_Student.svg", - alt: "Student Icon", - url: "/docs/student", - }, - { - text: Data Steward, - imgUrl: "/img/nfdi4chem_Data_Steward.svg", - alt: "Data Steward Icon", - url: "/docs/data_steward", - }, - { - text: Core Facility Manager, - imgUrl: "/img/nfdi4chem_Core_Facility_Manager.svg", - alt: "Core Facility Manager Icon", - url: "/docs/core_facility_manager", - }, + { + text: Research Group Leader, + imgUrl: "/img/nfdi4chem_Research_Group_Leader.svg", + alt: "Research Group Leader Icon", + url: "/docs/research_group_leader", + }, + { + text: Research Group Member, + imgUrl: "/img/nfdi4chem_Research_Group_Member.svg", + alt: "Research Group Member Icon", + url: "/docs/research_group_member", + }, + { + text: Student, + imgUrl: "/img/nfdi4chem_Student.svg", + alt: "Student Icon", + url: "/docs/student", + }, + { + text: Data Steward, + imgUrl: "/img/nfdi4chem_Data_Steward.svg", + alt: "Data Steward Icon", + url: "/docs/data_steward", + }, + { + text: Core Facility Manager, + imgUrl: "/img/nfdi4chem_Core_Facility_Manager.svg", + alt: "Core Facility Manager Icon", + url: "/docs/core_facility_manager", + }, ]; export default roles; diff --git a/src/data/stakeholders.js b/src/data/stakeholders.js index 14b69214..3caada4f 100644 --- a/src/data/stakeholders.js +++ b/src/data/stakeholders.js @@ -1,24 +1,24 @@ import Translate from "@docusaurus/Translate"; const stakeholders = [ - { - text: Authors, - imgUrl: "/img/nfdi4chem_Research_Group_Member.svg", - alt: "Authors Icon", - url: "/docs/publishing_standards_authors", - }, - { - text: Academic Publishers, - imgUrl: "/img/nfdi4chem_Student.svg", - alt: "Academic Publishers Icon", - url: "/docs/publishing_standards_publishers", - }, - { - text: Infrastructure Providers, - imgUrl: "/img/nfdi4chem_Core_Facility_Manager.svg", - alt: "Infrastructure Providers Icon", - url: "/docs/publishing_standards_infrastructure", - }, + { + text: Authors, + imgUrl: "/img/nfdi4chem_Research_Group_Member.svg", + alt: "Authors Icon", + url: "/docs/publishing_standards_authors", + }, + { + text: Academic Publishers, + imgUrl: "/img/nfdi4chem_Student.svg", + alt: "Academic Publishers Icon", + url: "/docs/publishing_standards_publishers", + }, + { + text: Infrastructure Providers, + imgUrl: "/img/nfdi4chem_Core_Facility_Manager.svg", + alt: "Infrastructure Providers Icon", + url: "/docs/publishing_standards_infrastructure", + }, ]; export default stakeholders; From 49e4c49e3cc000d060ecd0a29aa5e8ed42e6ac2b Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:39:36 +0200 Subject: [PATCH 17/20] chore: format CSS files in /src --- src/css/BulletBox.module.css | 10 +- src/css/DecisionTree.module.css | 48 +-- src/css/Eln.module.css | 156 +++---- src/css/Features.module.css | 42 +- src/css/FloatImage.module.css | 10 +- src/css/N4CFeatures.module.css | 62 +-- src/css/ShortenDesc.module.css | 12 +- src/css/custom.css | 464 ++++++++++----------- src/css/fonts.css | 8 +- src/css/lbe.module.css | 238 +++++------ src/css/video.module.css | 24 +- src/theme/common/Details/styles.module.css | 50 +-- 12 files changed, 562 insertions(+), 562 deletions(-) diff --git a/src/css/BulletBox.module.css b/src/css/BulletBox.module.css index 32a2045a..bd2936d2 100644 --- a/src/css/BulletBox.module.css +++ b/src/css/BulletBox.module.css @@ -1,7 +1,7 @@ .bulletContainer { - display: flex; - flex-direction: row; - flex-wrap: wrap; - gap: 0.5rem; - justify-content: center; + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 0.5rem; + justify-content: center; } diff --git a/src/css/DecisionTree.module.css b/src/css/DecisionTree.module.css index 672720ff..3255d709 100644 --- a/src/css/DecisionTree.module.css +++ b/src/css/DecisionTree.module.css @@ -1,68 +1,68 @@ /********** Repo decision tree ************/ svg > * { - transition-duration: 0.4s; - font-family: "IBM Plex Sans", sans-serif; - font-weight: 300; - font-size: 21px; + transition-duration: 0.4s; + font-family: "IBM Plex Sans", sans-serif; + font-weight: 300; + font-size: 21px; } .svgBlueBox { - fill: var(--ifm-color-primary); + fill: var(--ifm-color-primary); } .svgBlueBoxText, .svgHeadBoxText { - fill: white; + fill: white; } .svgHeadBoxText { - font-size: 30px; + font-size: 30px; } .svgLine { - stroke: var(--repo-line); - stroke-width: 1px; + stroke: var(--repo-line); + stroke-width: 1px; } .svgDescBox { - fill: var(--repo-data-box); + fill: var(--repo-data-box); } .svgDescText { - fill: black; - font-size: 18px; + fill: black; + font-size: 18px; } .svgDescBox { - fill: var(--repo-data-box); + fill: var(--repo-data-box); } .svglink:hover > * { - fill: var(--ifm-color-danger); - transition-duration: 0.4s; + fill: var(--ifm-color-danger); + transition-duration: 0.4s; } .svglink:hover > text { - fill: white; + fill: white; } svg > a:hover { - text-decoration: none; + text-decoration: none; } g.hoverGroup:hover > * { - fill: var(--ifm-color-secondary); - transition-duration: 0.4s; - text-decoration: none; + fill: var(--ifm-color-secondary); + transition-duration: 0.4s; + text-decoration: none; } g.hoverGroup:hover > line { - stroke: var(--ifm-color-secondary); - stroke-width: 3px; + stroke: var(--ifm-color-secondary); + stroke-width: 3px; } g.hoverGroup:hover > .svgDescText { - fill: white; - transition-duration: 0.4s; + fill: white; + transition-duration: 0.4s; } diff --git a/src/css/Eln.module.css b/src/css/Eln.module.css index a4545f1f..efef403f 100644 --- a/src/css/Eln.module.css +++ b/src/css/Eln.module.css @@ -3,126 +3,126 @@ /********** ELN-Finder ************/ .eln { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; } /* Search / Filter section */ .elnSearchfilter { - display: flex; - flex-direction: row; - width: 100%; - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.5rem; + display: flex; + flex-direction: row; + width: 100%; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.5rem; } .elnSearchfilterText { - translate: 0 20%; - min-width: 240px; + translate: 0 20%; + min-width: 240px; } .elnSearchfilterButtons { - flex-grow: 1; + flex-grow: 1; } .elnSearchfilterSearch { - display: flex; - flex-direction: column; - padding: 0.5rem 0; + display: flex; + flex-direction: column; + padding: 0.5rem 0; } .elnSearchfilterSearch > span { - text-align: center; - display: flex; + text-align: center; + display: flex; } .elnSearchfilterSearch > em { - color: var(--ifm-color-primary); - text-align: center; + color: var(--ifm-color-primary); + text-align: center; } .elnSearchfilterSearchButton { - position: relative; - right: 1.5rem; - align-self: center; - padding: 0; - background: none; - border: none; - line-height: 1rem; + position: relative; + right: 1.5rem; + align-self: center; + padding: 0; + background: none; + border: none; + line-height: 1rem; } .elnCard { - width: 49.5%; - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.5rem; - transition: all var(--n4c-transform-time) ease-in-out; + width: 49.5%; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.5rem; + transition: all var(--n4c-transform-time) ease-in-out; } .elnCardHeader { - display: flex; - justify-content: space-between; - align-items: center; + display: flex; + justify-content: space-between; + align-items: center; } .elnCardDesc { - padding: 0.5rem; + padding: 0.5rem; } @media screen and (max-width: 1400px) { - .eln { - display: flex; - flex-direction: column; - } - - .elnSearchfilter { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.75rem; - } - - .elnSearchfilterText, - .elnSearchfilterButtons { - width: 100%; - translate: 0; - } - - .elnSearchfilterSearch { - display: flex; - flex-direction: row; - align-items: center; - } - - .elnCard { - width: 100%; - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.75rem; - transition: all var(--n4c-transform-time) ease-in-out; - } + .eln { + display: flex; + flex-direction: column; + } + + .elnSearchfilter { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.75rem; + } + + .elnSearchfilterText, + .elnSearchfilterButtons { + width: 100%; + translate: 0; + } + + .elnSearchfilterSearch { + display: flex; + flex-direction: row; + align-items: center; + } + + .elnCard { + width: 100%; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.75rem; + transition: all var(--n4c-transform-time) ease-in-out; + } } .elnCardLink { - display: flex; - padding: 0.5rem; + display: flex; + padding: 0.5rem; } .elnLicenseChipOpensource { - background-color: var(--ifm-color-primary); - color: white; - font-weight: bold; + background-color: var(--ifm-color-primary); + color: white; + font-weight: bold; } .elnFilterbuttonSecondary { - background-color: var(--ifm-breadcrumb-item-background-active); - color: var(--ifm-color-primary); - font-weight: unset; + background-color: var(--ifm-breadcrumb-item-background-active); + color: var(--ifm-color-primary); + font-weight: unset; } diff --git a/src/css/Features.module.css b/src/css/Features.module.css index 74709836..20ca83da 100644 --- a/src/css/Features.module.css +++ b/src/css/Features.module.css @@ -1,37 +1,37 @@ /* N4C Feature styles */ .features { - display: flex; - flex-wrap: wrap; - justify-content: center; - margin: 1em; - width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 1em; + width: 100%; } .featureButton { - display: flex; - flex-direction: column; - align-items: center; - background-color: unset; - width: var(--n4c-button-width); - margin: var(--n4c-button-vpad); - font-size: 1.1rem; + display: flex; + flex-direction: column; + align-items: center; + background-color: unset; + width: var(--n4c-button-width); + margin: var(--n4c-button-vpad); + font-size: 1.1rem; } .featureButtonIndex { - border: none; + border: none; } .featureSvg { - display: flex; - justify-content: center; - padding: 2px; - width: 110px; - height: 110px; - margin-top: 5px; + display: flex; + justify-content: center; + padding: 2px; + width: 110px; + height: 110px; + margin-top: 5px; } .featureButton * { - text-align: center; - white-space: normal; + text-align: center; + white-space: normal; } diff --git a/src/css/FloatImage.module.css b/src/css/FloatImage.module.css index ad4090e5..082c3b57 100644 --- a/src/css/FloatImage.module.css +++ b/src/css/FloatImage.module.css @@ -1,10 +1,10 @@ .FloatImage { - width: min(120px, 50%); - float: right; - margin: 0px 20px 0px 20px; + width: min(120px, 50%); + float: right; + margin: 0px 20px 0px 20px; } a > .FloatImage:hover { - transform: scale(var(--n4c-hover-scale)); - transition: transform var(--n4c-transform-time) ease-in-out; + transform: scale(var(--n4c-hover-scale)); + transition: transform var(--n4c-transform-time) ease-in-out; } diff --git a/src/css/N4CFeatures.module.css b/src/css/N4CFeatures.module.css index b7cdb26e..a563effd 100644 --- a/src/css/N4CFeatures.module.css +++ b/src/css/N4CFeatures.module.css @@ -1,53 +1,53 @@ /* N4C Feature styles */ .features { - align-items: center; - padding: 2px; - width: 100%; + align-items: center; + padding: 2px; + width: 100%; } .featureSvg { - padding: 2px; - width: 110px; - height: 110px; - margin-top: 5px; + padding: 2px; + width: 110px; + height: 110px; + margin-top: 5px; } .featureCol { - display: flex; - width: var(--n4c-col-width); - /* height: var(--n4c-button-height); */ - padding: var(--n4c-button-vpad) var(--n4c-button-hpad); - align-items: center; - justify-content: center; + display: flex; + width: var(--n4c-col-width); + /* height: var(--n4c-button-height); */ + padding: var(--n4c-button-vpad) var(--n4c-button-hpad); + align-items: center; + justify-content: center; } .introCol { - display: flex; - width: var(--n4c-col-width); - /* height: var(--n4c-button-height); */ - padding: var(--n4c-button-vpad) var(--n4c-button-hpad); - align-items: center; - justify-content: left; + display: flex; + width: var(--n4c-col-width); + /* height: var(--n4c-button-height); */ + padding: var(--n4c-button-vpad) var(--n4c-button-hpad); + align-items: center; + justify-content: left; } .featureButton { - background-color: unset; - border: none; - width: var(--n4c-button-width); - padding: var(--n4c-button-vpad) var(--n4c-button-hpad); - font-size: 1.1rem; + background-color: unset; + border: none; + width: var(--n4c-button-width); + padding: var(--n4c-button-vpad) var(--n4c-button-hpad); + font-size: 1.1rem; } .featureButtonSecondary { - display: flex; - flex-direction: column; - align-items: center; - width: var(--n4c-button-secondary-width); - font-size: 13pt; + display: flex; + flex-direction: column; + align-items: center; + width: var(--n4c-button-secondary-width); + font-size: 13pt; } .featureButtonSecondary > * { - text-align: center; - word-wrap: break-word; + text-align: center; + word-wrap: break-word; } diff --git a/src/css/ShortenDesc.module.css b/src/css/ShortenDesc.module.css index 6ba8d61a..095a27c4 100644 --- a/src/css/ShortenDesc.module.css +++ b/src/css/ShortenDesc.module.css @@ -1,8 +1,8 @@ .authorTrigger { - border: none; - background: none; - scale: 90%; - color: var(--ifm-color-primary); - padding: 0 0.5em; - margin: 0; + border: none; + background: none; + scale: 90%; + color: var(--ifm-color-primary); + padding: 0 0.5em; + margin: 0; } diff --git a/src/css/custom.css b/src/css/custom.css index 23ac5ac5..504ea273 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -17,225 +17,225 @@ /********** Global variables ************/ :root { - --ifm-color-primary: #00617c; - --ifm-color-primary-dark: var(--ifm-color-primary); - --ifm-color-primary-darker: var(--ifm-color-primary); - --ifm-color-primary-darkest: var(--ifm-color-primary); - --ifm-color-primary-light: #009cbc; - --ifm-color-primary-lighter: var(--ifm-color-primary); - --ifm-color-primary-lightest: var(--ifm-color-primary); - --ifm-code-font-size: 95%; - --ifm-font-family-base: "IBM Plex Sans", sans-serif; - --ifm-heading-color: var(--ifm-color-primary); - --ifm-color-secondary: #873593; - --ifm-color-secondary-dark: var(--ifm-color-secondary); - --ifm-color-secondary-darker: var(--ifm-color-secondary); - --ifm-color-secondary-darkest: var(--ifm-color-secondary); - --ifm-color-secondary-light: var(--ifm-color-secondary); - --ifm-color-secondary-lighter: var(--ifm-color-secondary); - --ifm-color-secondary-lightest: var(--ifm-color-secondary); - --ifm-color-danger: #e30613; - --ifm-color-danger-dark: var(--ifm-color-danger); - --ifm-color-danger-darker: var(--ifm-color-danger); - --ifm-color-danger-darkest: var(--ifm-color-danger); - --ifm-color-danger-light: var(--ifm-color-danger); - --ifm-color-danger-lighter: var(--ifm-color-danger); - --ifm-color-danger-lightest: var(--ifm-color-danger); - --ifm-color-success: var(--ifm-color-secondary); - --ifm-color-success-dark: var(--ifm-color-success); - --ifm-color-success-darker: var(--ifm-color-success); - --ifm-color-success-darkest: var(--ifm-color-success); - --ifm-color-success-light: var(--ifm-color-success); - --ifm-color-success-lighter: var(--ifm-color-success); - --ifm-color-success-lightest: var(--ifm-color-success); - --ifm-color-info: #009cbc; - --ifm-color-info-dark: var(--ifm-color-info); - --ifm-color-info-darker: var(--ifm-color-info); - --ifm-color-info-darkest: var(--ifm-color-info); - --ifm-color-info-light: var(--ifm-color-info); - --ifm-color-info-lighter: var(--ifm-color-info); - --ifm-color-info-lightest: var(--ifm-color-info); - --ifm-color-caution: #f1de1e; - --ifm-color-caution-dark: var(--ifm-color-caution); - --ifm-color-caution-darker: var(--ifm-color-caution); - --ifm-color-caution-darkest: var(--ifm-color-caution); - --ifm-color-caution-light: var(--ifm-color-caution); - --ifm-color-caution-lighter: var(--ifm-color-caution); - --ifm-color-caution-lightest: var(--ifm-color-caution); - --ifm-global-shadow-lw: 0 3px 4px 0 rgba(0, 0, 0, 0.3); - --ifm-link-color: var(--ifm-color-primary); - --ifm-link-decoration: bold; - --ifm-link-hover-color: var(--ifm-link-color); - --ifm-link-hover-decoration: underline; - --ifm-footer-link-hover-color: var(--ifm-color-danger); - - --ifm-table-border-width: 0; - --ifm-table-head-background: var(--ifm-color-primary); - --ifm-table-head-color: white; - - --ifm-navbar-search-input-placeholder-color: var(--ifm-color-emphasis-800); - - --ifm-font-size-base: 13pt; - - --ifm-button-border-radius: 0; - - --ifm-navbar-height: 5rem; - --ifm-navbar-shadow: transparent; - --n4c-navbar-border: #e0e0e0; - - --ifm-alert-border-left-width: 1pt; - --ifm-alert-border-width: 1pt; - --ifm-alert-border-radius: 0; - --ifm-alert-shadow: transparent; - - --n4c-col-width: 250px; - - --n4c-button-width: 280px; - --n4c-button-height: 240px; - - --n4c-button-secondary-width: 300px; - - --n4c-button-vpad: 10px; - --n4c-button-hpad: 5px; - - --n4c-hover-scale: 105%; - --n4c-transform-time: 175ms; - - /* Repos */ - --repo-data-box: #f0f0f0; - --repo-line: #7f7f7f; + --ifm-color-primary: #00617c; + --ifm-color-primary-dark: var(--ifm-color-primary); + --ifm-color-primary-darker: var(--ifm-color-primary); + --ifm-color-primary-darkest: var(--ifm-color-primary); + --ifm-color-primary-light: #009cbc; + --ifm-color-primary-lighter: var(--ifm-color-primary); + --ifm-color-primary-lightest: var(--ifm-color-primary); + --ifm-code-font-size: 95%; + --ifm-font-family-base: "IBM Plex Sans", sans-serif; + --ifm-heading-color: var(--ifm-color-primary); + --ifm-color-secondary: #873593; + --ifm-color-secondary-dark: var(--ifm-color-secondary); + --ifm-color-secondary-darker: var(--ifm-color-secondary); + --ifm-color-secondary-darkest: var(--ifm-color-secondary); + --ifm-color-secondary-light: var(--ifm-color-secondary); + --ifm-color-secondary-lighter: var(--ifm-color-secondary); + --ifm-color-secondary-lightest: var(--ifm-color-secondary); + --ifm-color-danger: #e30613; + --ifm-color-danger-dark: var(--ifm-color-danger); + --ifm-color-danger-darker: var(--ifm-color-danger); + --ifm-color-danger-darkest: var(--ifm-color-danger); + --ifm-color-danger-light: var(--ifm-color-danger); + --ifm-color-danger-lighter: var(--ifm-color-danger); + --ifm-color-danger-lightest: var(--ifm-color-danger); + --ifm-color-success: var(--ifm-color-secondary); + --ifm-color-success-dark: var(--ifm-color-success); + --ifm-color-success-darker: var(--ifm-color-success); + --ifm-color-success-darkest: var(--ifm-color-success); + --ifm-color-success-light: var(--ifm-color-success); + --ifm-color-success-lighter: var(--ifm-color-success); + --ifm-color-success-lightest: var(--ifm-color-success); + --ifm-color-info: #009cbc; + --ifm-color-info-dark: var(--ifm-color-info); + --ifm-color-info-darker: var(--ifm-color-info); + --ifm-color-info-darkest: var(--ifm-color-info); + --ifm-color-info-light: var(--ifm-color-info); + --ifm-color-info-lighter: var(--ifm-color-info); + --ifm-color-info-lightest: var(--ifm-color-info); + --ifm-color-caution: #f1de1e; + --ifm-color-caution-dark: var(--ifm-color-caution); + --ifm-color-caution-darker: var(--ifm-color-caution); + --ifm-color-caution-darkest: var(--ifm-color-caution); + --ifm-color-caution-light: var(--ifm-color-caution); + --ifm-color-caution-lighter: var(--ifm-color-caution); + --ifm-color-caution-lightest: var(--ifm-color-caution); + --ifm-global-shadow-lw: 0 3px 4px 0 rgba(0, 0, 0, 0.3); + --ifm-link-color: var(--ifm-color-primary); + --ifm-link-decoration: bold; + --ifm-link-hover-color: var(--ifm-link-color); + --ifm-link-hover-decoration: underline; + --ifm-footer-link-hover-color: var(--ifm-color-danger); + + --ifm-table-border-width: 0; + --ifm-table-head-background: var(--ifm-color-primary); + --ifm-table-head-color: white; + + --ifm-navbar-search-input-placeholder-color: var(--ifm-color-emphasis-800); + + --ifm-font-size-base: 13pt; + + --ifm-button-border-radius: 0; + + --ifm-navbar-height: 5rem; + --ifm-navbar-shadow: transparent; + --n4c-navbar-border: #e0e0e0; + + --ifm-alert-border-left-width: 1pt; + --ifm-alert-border-width: 1pt; + --ifm-alert-border-radius: 0; + --ifm-alert-shadow: transparent; + + --n4c-col-width: 250px; + + --n4c-button-width: 280px; + --n4c-button-height: 240px; + + --n4c-button-secondary-width: 300px; + + --n4c-button-vpad: 10px; + --n4c-button-hpad: 5px; + + --n4c-hover-scale: 105%; + --n4c-transform-time: 175ms; + + /* Repos */ + --repo-data-box: #f0f0f0; + --repo-line: #7f7f7f; } /********** Algolia Search ************/ [data-theme="light"] .DocSearch { - /* --docsearch-primary-color: var(--ifm-color-primary); */ - /* --docsearch-text-color: var(--ifm-font-color-base); */ - --docsearch-muted-color: var(--ifm-color-primary); - --docsearch-container-background: rgba(94, 100, 112, 0.7); - --docsearch-focus-color: var(--ifm-color-primary); - --docsearch-highlight-color: var(--ifm-color-primary); - --docsearch-secondary-text-color: var(--ifm-color-primary); - /* Modal */ - --docsearch-modal-background: var(--ifm-color-white); - /* Search box */ - --docsearch-searchbox-background: var(--ifm-color-white); - --docsearch-searchbox-focus-background: var(--ifm-color-white); - --docsearch-icon-color: var(--ifm-color-primary); - /* Hit */ - --docsearch-hit-color: var(--ifm-color-primary); - --docsearch-hit-active-color: var(--ifm-color-white); - --docsearch-hit-background: var(--ifm-color-white); - --docsearch-hit-highlight-color: var(--ifm-menu-color-background-hover); - /* Footer */ - --docsearch-footer-background: var(--ifm-color-white); + /* --docsearch-primary-color: var(--ifm-color-primary); */ + /* --docsearch-text-color: var(--ifm-font-color-base); */ + --docsearch-muted-color: var(--ifm-color-primary); + --docsearch-container-background: rgba(94, 100, 112, 0.7); + --docsearch-focus-color: var(--ifm-color-primary); + --docsearch-highlight-color: var(--ifm-color-primary); + --docsearch-secondary-text-color: var(--ifm-color-primary); + /* Modal */ + --docsearch-modal-background: var(--ifm-color-white); + /* Search box */ + --docsearch-searchbox-background: var(--ifm-color-white); + --docsearch-searchbox-focus-background: var(--ifm-color-white); + --docsearch-icon-color: var(--ifm-color-primary); + /* Hit */ + --docsearch-hit-color: var(--ifm-color-primary); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--ifm-color-white); + --docsearch-hit-highlight-color: var(--ifm-menu-color-background-hover); + /* Footer */ + --docsearch-footer-background: var(--ifm-color-white); } /********** General and Landing page ************/ .theme-announcement-bar { - font-size: 20px; - --site-announcement-bar-stripe-color1: rgba(227, 6, 19, 0.15); - --site-announcement-bar-stripe-color2: white; - background: repeating-linear-gradient( - -35deg, - var(--site-announcement-bar-stripe-color1), - var(--site-announcement-bar-stripe-color1) 20px, - var(--site-announcement-bar-stripe-color2) 10px, - var(--site-announcement-bar-stripe-color2) 40px - ); + font-size: 20px; + --site-announcement-bar-stripe-color1: rgba(227, 6, 19, 0.15); + --site-announcement-bar-stripe-color2: white; + background: repeating-linear-gradient( + -35deg, + var(--site-announcement-bar-stripe-color1), + var(--site-announcement-bar-stripe-color1) 20px, + var(--site-announcement-bar-stripe-color2) 10px, + var(--site-announcement-bar-stripe-color2) 40px + ); } .navbar__logo img { - margin-bottom: 0%; - height: 110%; - margin-top: -6px; + margin-bottom: 0%; + height: 110%; + margin-top: -6px; } .navbar { - border-bottom: 1px solid var(--n4c-navbar-border); + border-bottom: 1px solid var(--n4c-navbar-border); } .main-wrapper { - display: flex; + display: flex; } .footer__link-item { - color: var(--ifm-footer-link-color); - line-height: 2; - font-weight: unset; + color: var(--ifm-footer-link-color); + line-height: 2; + font-weight: unset; } .footer--dark { - --ifm-footer-background-color: var(--ifm-color-primary); - --ifm-footer-color: var(--ifm-footer-link-color); - --ifm-footer-link-color: var(--ifm-color-white); - --ifm-footer-title-color: var(--ifm-color-white); - font-weight: unset; - border-top: 1px solid white; + --ifm-footer-background-color: var(--ifm-color-primary); + --ifm-footer-color: var(--ifm-footer-link-color); + --ifm-footer-link-color: var(--ifm-color-white); + --ifm-footer-title-color: var(--ifm-color-white); + font-weight: unset; + border-top: 1px solid white; } .footer__title { - color: var(--ifm-footer-title-color); - font: bold var(--ifm-h3-font-size) / var(--ifm-heading-line-height) - var(--ifm-font-family-base); - margin-bottom: var(--ifm-heading-margin-bottom); + color: var(--ifm-footer-title-color); + font: bold var(--ifm-h3-font-size) / var(--ifm-heading-line-height) + var(--ifm-font-family-base); + margin-bottom: var(--ifm-heading-margin-bottom); } .footer__copyright { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; } .footer__copyright--image { - margin: 1rem; + margin: 1rem; } .footer__copyright--text { - margin: 0.1rem; - text-align: left; - max-width: min(720px, 100%); + margin: 0.1rem; + text-align: left; + max-width: min(720px, 100%); } .footer__copyright--text p { - text-align: left; - text-wrap: balance; - margin: 0; - line-height: 1.5; + text-align: left; + text-wrap: balance; + margin: 0; + line-height: 1.5; } .footer__copyright--text a { - color: var(--ifm-footer-link-color); - font-weight: unset; + color: var(--ifm-footer-link-color); + font-weight: unset; } @media screen and (max-width: 1400px) { - .footer__copyright { - flex-direction: column; - align-items: stretch; - } + .footer__copyright { + flex-direction: column; + align-items: stretch; + } - .footer__copyright--image { - margin: 0.5rem; - } + .footer__copyright--image { + margin: 0.5rem; + } - .footer__copyright--text { - margin: 0.1rem; - max-width: 100%; - justify-content: center; - } + .footer__copyright--text { + margin: 0.1rem; + max-width: 100%; + justify-content: center; + } - .footer__copyright--text p { - text-align: center; - } + .footer__copyright--text p { + text-align: center; + } } /********** Buttons ************/ .button { - white-space: normal; + white-space: normal; } /* .button--primary { @@ -243,51 +243,51 @@ } */ .button--primary:hover { - /* --ifm-button-background-color: var(--ifm-color-danger); */ - /* --ifm-button-border-color: white; */ - transform: scale(var(--n4c-hover-scale)); - transition: transform var(--n4c-transform-time) ease-in-out; + /* --ifm-button-background-color: var(--ifm-color-danger); */ + /* --ifm-button-border-color: white; */ + transform: scale(var(--n4c-hover-scale)); + transition: transform var(--n4c-transform-time) ease-in-out; } .button.button--secondary { - color: var(--ifm-color-primary); - --ifm-button-background-color: white; - --ifm-button-border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + --ifm-button-background-color: white; + --ifm-button-border-color: var(--ifm-color-primary); } .button--secondary:hover { - /* --ifm-button-background-color: var(--ifm-color-danger); */ - transform: scale(var(--n4c-hover-scale)); - transition: transform var(--n4c-transform-time) ease-in-out; + /* --ifm-button-background-color: var(--ifm-color-danger); */ + transform: scale(var(--n4c-hover-scale)); + transition: transform var(--n4c-transform-time) ease-in-out; } .button * { - text-align: left; + text-align: left; } .button.button--primary * { - color: var(--ifm-color-white); + color: var(--ifm-color-white); } .button.button--secondary * { - color: var(--ifm-color-primary); + color: var(--ifm-color-primary); } .button.button--primary { - color: var(--ifm-color-white); + color: var(--ifm-color-white); } .button--negative { - background-color: var(--ifm-color-white); - border-radius: 10px; - color: var(--ifm-color-primary); - font-weight: unset; + background-color: var(--ifm-color-white); + border-radius: 10px; + color: var(--ifm-color-primary); + font-weight: unset; } .button--negative:hover { - /* --ifm-button-background-color: var(--ifm-color-danger); */ - transform: scale(var(--n4c-hover-scale)); - transition: transform var(--n4c-transform-time) ease-in-out; + /* --ifm-button-background-color: var(--ifm-color-danger); */ + transform: scale(var(--n4c-hover-scale)); + transition: transform var(--n4c-transform-time) ease-in-out; } .button.button--negative h1, @@ -297,131 +297,131 @@ .button.button--negative h5, .button.button--negative h6, .button.button--negative a { - color: var(--ifm-color-primary); - text-align: left; - white-space: normal; - word-wrap: break-word; + color: var(--ifm-color-primary); + text-align: left; + white-space: normal; + word-wrap: break-word; } /********** Links ************/ a { - font-weight: bold; + font-weight: bold; } a.button.button--primary:not(.button--outline):hover { - color: white; - text-decoration: unset; + color: white; + text-decoration: unset; } a.button.button--secondary:not(.button--outline):hover, a.button.button--negative:not(.button--outline):hover { - color: var(--ifm-color-primary); - text-decoration: unset; + color: var(--ifm-color-primary); + text-decoration: unset; } a:not([href]) { - text-decoration: none; + text-decoration: none; } p, .markdown > p, .markdown > pre, .markdown > ul { - margin-bottom: var(--ifm-leading); - text-align: justify; + margin-bottom: var(--ifm-leading); + text-align: justify; } .menu__link { - font-weight: unset; + font-weight: unset; } .pagination-nav__link { - border: none; - border-radius: var(--ifm-pagination-nav-border-radius); - padding: var(--ifm-global-spacing); - transition: background-color var(--ifm-button-transition-duration) - var(--ifm-transition-timing-default); + border: none; + border-radius: var(--ifm-pagination-nav-border-radius); + padding: var(--ifm-global-spacing); + transition: background-color var(--ifm-button-transition-duration) + var(--ifm-transition-timing-default); } .pagination-nav__link:hover { - background-color: var(--ifm-menu-color-background-hover); + background-color: var(--ifm-menu-color-background-hover); } .table-of-contents__link { - color: black; - font-weight: unset; + color: black; + font-weight: unset; } .table-of-contents__link--active, .table-of-contents__link--active code, .table-of-contents__link:hover, .table-of-contents__link:hover code { - color: var(--ifm-color-primary); - text-decoration: none; + color: var(--ifm-color-primary); + text-decoration: none; } /********** Search tool ************/ .searchResultItem_18XW a, .searchResultItem_18XW h2 { - /* color: unset;*/ - color: var(--ifm-color-primary); - font-size: unset; + /* color: unset;*/ + color: var(--ifm-color-primary); + font-size: unset; } mark { - color: white; - background: var(--ifm-color-danger); - /* background: var(--ifm-color-primary);*/ + color: white; + background: var(--ifm-color-danger); + /* background: var(--ifm-color-primary);*/ } /********** Bullets ************/ ul { - list-style-type: "\2B22\ "; + list-style-type: "\2B22\ "; } ul li::marker { - position: absolute; - font-size: 0.9em; - color: var(--ifm-color-primary); + position: absolute; + font-size: 0.9em; + color: var(--ifm-color-primary); } .button li::marker { - color: unset; + color: unset; } ul ul { - list-style-type: "\2B21\ "; + list-style-type: "\2B21\ "; } /********** Alerts ************/ .alert { - color: black; - --ifm-alert-foreground-color: black; - --ifm-alert-background-color: white; - border-style: dashed; - text-align: justify; + color: black; + --ifm-alert-foreground-color: black; + --ifm-alert-background-color: white; + border-style: dashed; + text-align: justify; } .alert a { - color: var(--ifm-color-primary); - text-decoration: none; + color: var(--ifm-color-primary); + text-decoration: none; } .alert a:hover { - color: var(--ifm-color-primary); - text-decoration: var(--ifm-link-decoration); + color: var(--ifm-color-primary); + text-decoration: var(--ifm-link-decoration); } /********** Tables ************/ table { - border: 0.5px solid var(--ifm-color-primary); + border: 0.5px solid var(--ifm-color-primary); } table thead tr { - border-bottom: 1px solid var(--ifm-color-primary); + border-bottom: 1px solid var(--ifm-color-primary); } diff --git a/src/css/fonts.css b/src/css/fonts.css index 0e755636..449a544c 100644 --- a/src/css/fonts.css +++ b/src/css/fonts.css @@ -2,7 +2,7 @@ @font-face { font-family: "IBM Plex Sans"; - src: url('/fonts/ibm-plex-sans-latin-400-normal.woff2') format('woff2'); + src: url("/fonts/ibm-plex-sans-latin-400-normal.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; @@ -10,7 +10,7 @@ @font-face { font-family: "IBM Plex Sans"; - src: url('/fonts/ibm-plex-sans-latin-400-italic.woff2') format('woff2'); + src: url("/fonts/ibm-plex-sans-latin-400-italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; @@ -18,7 +18,7 @@ @font-face { font-family: "IBM Plex Sans"; - src: url('/fonts/ibm-plex-sans-latin-600-normal.woff2') format('woff2'); + src: url("/fonts/ibm-plex-sans-latin-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; @@ -26,7 +26,7 @@ @font-face { font-family: "IBM Plex Sans"; - src: url('/fonts/ibm-plex-sans-latin-600-italic.woff2') format('woff2'); + src: url("/fonts/ibm-plex-sans-latin-600-italic.woff2") format("woff2"); font-weight: 600; font-style: italic; font-display: swap; diff --git a/src/css/lbe.module.css b/src/css/lbe.module.css index 63afacfb..a98e9561 100644 --- a/src/css/lbe.module.css +++ b/src/css/lbe.module.css @@ -1,229 +1,229 @@ /********** Lead by Example ************/ .lbe { - display: flex; - flex-direction: row-reverse; + display: flex; + flex-direction: row-reverse; } /* Search / Filter section */ .lbeSearchfilter { - padding-left: 0.5rem; - width: 35%; + padding-left: 0.5rem; + width: 35%; } .lbeSearchfilterContainer { - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.75rem; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.75rem; } .lbeSearchfilterSection p { - margin: unset; + margin: unset; } .lbeSearchfilterSection h4, h5 { - margin: 0.5rem 0; + margin: 0.5rem 0; } .lbeBody { - padding-right: 0.5rem; - width: 65%; + padding-right: 0.5rem; + width: 65%; } @media screen and (max-width: 1200px) { - .lbe { - display: flex; - flex-direction: column; - } + .lbe { + display: flex; + flex-direction: column; + } - .lbeSearchfilter { - padding: 0; - width: 100%; - } + .lbeSearchfilter { + padding: 0; + width: 100%; + } - .lbeBody { - padding: 0; - width: 100%; - } + .lbeBody { + padding: 0; + width: 100%; + } } .lbeSearchfilter input:focus { - width: calc(5 / 12 * 100%); + width: calc(5 / 12 * 100%); } .lbeSearchfilterSearch { - padding: 0.5rem 0; + padding: 0.5rem 0; } .lbeSearchfilterSearch > em { - color: var(--ifm-color-primary); + color: var(--ifm-color-primary); } /* Filter buttons */ .lbeFilterbutton { - display: grid; - align-items: center; - border-radius: var(--ifm-breadcrumb-border-radius); - color: white; - display: inline-block; - font-size: calc(0.6rem * var(--ifm-breadcrumb-size-multiplier)); - font-weight: 600; - padding: calc( - var(--ifm-breadcrumb-padding-vertical) * - var(--ifm-breadcrumb-size-multiplier) - ) - calc( - var(--ifm-breadcrumb-padding-horizontal) * - var(--ifm-breadcrumb-size-multiplier) - ); - border: none; - margin: 0.2em; - background: var(--ifm-color-primary); + display: grid; + align-items: center; + border-radius: var(--ifm-breadcrumb-border-radius); + color: white; + display: inline-block; + font-size: calc(0.6rem * var(--ifm-breadcrumb-size-multiplier)); + font-weight: 600; + padding: calc( + var(--ifm-breadcrumb-padding-vertical) * + var(--ifm-breadcrumb-size-multiplier) + ) + calc( + var(--ifm-breadcrumb-padding-horizontal) * + var(--ifm-breadcrumb-size-multiplier) + ); + border: none; + margin: 0.2em; + background: var(--ifm-color-primary); } .lbeChip { - background: var(--ifm-breadcrumb-item-background-active); - color: var(--ifm-color-primary); - font-size: calc(0.8rem * var(--ifm-breadcrumb-size-multiplier)); - font-weight: 300; - justify-self: left; - margin-bottom: 1rem; + background: var(--ifm-breadcrumb-item-background-active); + color: var(--ifm-color-primary); + font-size: calc(0.8rem * var(--ifm-breadcrumb-size-multiplier)); + font-weight: 300; + justify-self: left; + margin-bottom: 1rem; } .lbeFilterbuttonActive { - background: var(--ifm-color-danger); - color: white; + background: var(--ifm-color-danger); + color: white; } .lbeFilterbutton:hover, .lbeFilterbuttonActive:hover { - cursor: pointer; - transform: scale(var(--lbe-hover-scale)); - transition: transform var(--lbe-transform-time) ease-in-out; + cursor: pointer; + transform: scale(var(--lbe-hover-scale)); + transition: transform var(--lbe-transform-time) ease-in-out; } .lbeFilterbuttonContent { - display: flex; - align-items: center; + display: flex; + align-items: center; } .lbeFilterbuttonFunnel { - height: calc(var(--ifm-font-size-base) * 0.6); - fill: white; + height: calc(var(--ifm-font-size-base) * 0.6); + fill: white; } /* LBE blocks */ .lbeBlock { - padding: 0.75rem; - border: 1px dashed var(--ifm-color-primary); - margin-bottom: 0.75rem; - transition: all var(--n4c-transform-time) ease-in-out; + padding: 0.75rem; + border: 1px dashed var(--ifm-color-primary); + margin-bottom: 0.75rem; + transition: all var(--n4c-transform-time) ease-in-out; } .lbeBlockHeader { - display: flex; - align-items: center; + display: flex; + align-items: center; } .lbeBlockHeaderTitle { - width: 85%; - padding: 0.3rem; - display: flex; - align-items: center; + width: 85%; + padding: 0.3rem; + display: flex; + align-items: center; } .lbeBlockAuthorTrigger { - border: none; - background: none; - scale: 90%; - color: var(--ifm-color-primary); - padding: 0 0.5em; - margin: 0; + border: none; + background: none; + scale: 90%; + color: var(--ifm-color-primary); + padding: 0 0.5em; + margin: 0; } .lbeBlockHeaderLink { - width: 15%; - display: flex; - justify-content: right; + width: 15%; + display: flex; + justify-content: right; } .lbeBlock > h4, .lbeBlock > p { - margin: 0.5rem; - margin-top: 0.8rem; + margin: 0.5rem; + margin-top: 0.8rem; } .lbeBlock p:nth-of-type(-n + 2), .lbeBlockHeaderTitle h3 { - margin-bottom: calc(0.5 * var(--ifm-leading)); - text-align: left; + margin-bottom: calc(0.5 * var(--ifm-leading)); + text-align: left; } @media screen and (max-width: 966px) { - .lbeBlockHeader { - display: flex; - flex-wrap: wrap-reverse; - } + .lbeBlockHeader { + display: flex; + flex-wrap: wrap-reverse; + } - .lbeBlockHeaderTitle, - .lbeBlockHeaderLink { - width: 100%; - justify-content: left; - } + .lbeBlockHeaderTitle, + .lbeBlockHeaderLink { + width: 100%; + justify-content: left; + } } .lbeBlockHr { - border-top: 1px solid var(--ifm-color-primary); - background-color: unset; - margin: 0.8rem 0.4rem; + border-top: 1px solid var(--ifm-color-primary); + background-color: unset; + margin: 0.8rem 0.4rem; } .lbeDetails { - --docusaurus-details-transition: transform 200ms ease; - --docusaurus-details-decoration-color: var(--ifm-color-primary); - display: flex; - flex-direction: column; - padding: 0 1rem; - margin: unset; - border: none; + --docusaurus-details-transition: transform 200ms ease; + --docusaurus-details-decoration-color: var(--ifm-color-primary); + display: flex; + flex-direction: column; + padding: 0 1rem; + margin: unset; + border: none; } .lbeDetailsCollapsible { - margin-top: unset; - border-top: none; + margin-top: unset; + border-top: none; } .lbeDetails summary { - font-size: var(--ifm-h4-font-size); - color: var(--ifm-heading-color); - font-family: var(--ifm-heading-font-family); - font-weight: var(--ifm-heading-font-weight); - line-height: var(--ifm-heading-line-height); - cursor: pointer; + font-size: var(--ifm-h4-font-size); + color: var(--ifm-heading-color); + font-family: var(--ifm-heading-font-family); + font-weight: var(--ifm-heading-font-weight); + line-height: var(--ifm-heading-line-height); + cursor: pointer; } .lbeDetails[open] summary { - padding-bottom: 15px; + padding-bottom: 15px; } .lbeBlockLink { - border: 0.5px solid var(--ifm-color-primary); - padding: 0.5em; - border-radius: 5px; - margin: 0.2em; - font-size: 11pt; - background: none; + border: 0.5px solid var(--ifm-color-primary); + padding: 0.5em; + border-radius: 5px; + margin: 0.2em; + font-size: 11pt; + background: none; } .lbeBlockLink:hover { - transform: scale(var(--lbe-hover-scale)); - transition: all var(--lbe-transform-time) ease-in-out; + transform: scale(var(--lbe-hover-scale)); + transition: all var(--lbe-transform-time) ease-in-out; } .lbeBlockLink a:hover { - text-decoration: none; + text-decoration: none; } diff --git a/src/css/video.module.css b/src/css/video.module.css index e4a5afb7..be57694f 100644 --- a/src/css/video.module.css +++ b/src/css/video.module.css @@ -1,18 +1,18 @@ .videoInfo { - color: white; - font: bold var(--ifm-h3-font-size) / var(--ifm-heading-line-height) - var(--ifm-font-family-base); - margin-bottom: var(--ifm-heading-margin-bottom); - text-align: center; + color: white; + font: bold var(--ifm-h3-font-size) / var(--ifm-heading-line-height) + var(--ifm-font-family-base); + margin-bottom: var(--ifm-heading-margin-bottom); + text-align: center; } @media screen and (max-width: 1350px) { - .videoInfo { - color: white; + .videoInfo { + color: white; - font: bold var(--ifm-h5-font-size) / var(--ifm-heading-line-height) - var(--ifm-font-family-base); - margin-bottom: var(--ifm-heading-margin-bottom); - text-align: center; - } + font: bold var(--ifm-h5-font-size) / var(--ifm-heading-line-height) + var(--ifm-font-family-base); + margin-bottom: var(--ifm-heading-margin-bottom); + text-align: center; + } } diff --git a/src/theme/common/Details/styles.module.css b/src/theme/common/Details/styles.module.css index f384e48d..f3775085 100644 --- a/src/theme/common/Details/styles.module.css +++ b/src/theme/common/Details/styles.module.css @@ -9,56 +9,56 @@ CSS variables, meant to be overridden by final theme */ .details { - --docusaurus-details-summary-arrow-size: 0.38rem; + --docusaurus-details-summary-arrow-size: 0.38rem; } .details > summary { - position: relative; - cursor: pointer; - list-style: none; - padding-left: 1rem; + position: relative; + cursor: pointer; + list-style: none; + padding-left: 1rem; } /* TODO: deprecation, need to remove this after Safari will support `::marker` */ .details > summary::-webkit-details-marker { - display: none; + display: none; } .details > summary::before { - position: absolute; - top: 0.3rem; - left: 0; + position: absolute; + top: 0.3rem; + left: 0; - /* CSS-only Arrow */ - content: ""; - border-width: var(--docusaurus-details-summary-arrow-size); - border-style: solid; - border-color: transparent transparent transparent - var(--docusaurus-details-decoration-color); + /* CSS-only Arrow */ + content: ""; + border-width: var(--docusaurus-details-summary-arrow-size); + border-style: solid; + border-color: transparent transparent transparent + var(--docusaurus-details-decoration-color); - /* Arrow rotation anim */ - transform: rotate(0deg); - transition: var(--docusaurus-details-transition); - transform-origin: calc(var(--docusaurus-details-summary-arrow-size) / 2) 50%; + /* Arrow rotation anim */ + transform: rotate(0deg); + transition: var(--docusaurus-details-transition); + transform-origin: calc(var(--docusaurus-details-summary-arrow-size) / 2) 50%; } /* When JS disabled/failed to load: we use the open property for arrow animation: */ .details[open]:not(.isBrowser) > summary::before, /* When JS works: we use the data-attribute for arrow animation */ .details[data-collapsed='false'].isBrowser > summary::before { - transform: rotate(90deg); + transform: rotate(90deg); } .collapsibleContent { - margin-top: 1rem; - border-top: 1px solid var(--docusaurus-details-decoration-color); - padding-top: 1rem; + margin-top: 1rem; + border-top: 1px solid var(--docusaurus-details-decoration-color); + padding-top: 1rem; } .collapsibleContent p:last-child { - margin-bottom: 0; + margin-bottom: 0; } .details > summary > p:last-child { - margin-bottom: 0; + margin-bottom: 0; } From b83f76d8023e55711df3f94233dfb90f31a98b03 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:40:10 +0200 Subject: [PATCH 18/20] chore: format TSX files in /src --- src/theme/common/Details/index.tsx | 183 +++++++++++++++-------------- 1 file changed, 94 insertions(+), 89 deletions(-) diff --git a/src/theme/common/Details/index.tsx b/src/theme/common/Details/index.tsx index 33a749bc..052e746c 100644 --- a/src/theme/common/Details/index.tsx +++ b/src/theme/common/Details/index.tsx @@ -6,11 +6,11 @@ */ import React, { - useRef, - useState, - type ComponentProps, - type ReactElement, - type ReactNode, + useRef, + useState, + type ComponentProps, + type ReactElement, + type ReactNode, } from "react"; import clsx from "clsx"; import useBrokenLinks from "@docusaurus/useBrokenLinks"; @@ -19,26 +19,26 @@ import { useCollapsible, Collapsible } from "@docusaurus/theme-common"; import styles from "./styles.module.css"; function isInSummary(node: HTMLElement | null): boolean { - if (!node) { - return false; - } - return node.tagName === "SUMMARY" || isInSummary(node.parentElement); + if (!node) { + return false; + } + return node.tagName === "SUMMARY" || isInSummary(node.parentElement); } function hasParent(node: HTMLElement | null, parent: HTMLElement): boolean { - if (!node) { - return false; - } - return node === parent || hasParent(node.parentElement, parent); + if (!node) { + return false; + } + return node === parent || hasParent(node.parentElement, parent); } export type DetailsProps = { - /** - * Summary is provided as props, optionally including the wrapping - * `` tag - */ - summary?: ReactElement | string; - contentClassName?: string; + /** + * Summary is provided as props, optionally including the wrapping + * `` tag + */ + summary?: ReactElement | string; + contentClassName?: string; } & ComponentProps<"details">; /** @@ -46,80 +46,85 @@ export type DetailsProps = { * very lightweight styles, but you should bring your UI. */ export function Details({ - summary, - children, - ...props + summary, + children, + ...props }: DetailsProps): ReactNode { - useBrokenLinks().collectAnchor(props.id); + useBrokenLinks().collectAnchor(props.id); - const isBrowser = useIsBrowser(); - const detailsRef = useRef(null); + const isBrowser = useIsBrowser(); + const detailsRef = useRef(null); - const { collapsed, setCollapsed } = useCollapsible({ - initialState: !props.open, - }); - // Use a separate state for the actual details prop, because it must be set - // only after animation completes, otherwise close animations won't work - const [open, setOpen] = useState(props.open); + const { collapsed, setCollapsed } = useCollapsible({ + initialState: !props.open, + }); + // Use a separate state for the actual details prop, because it must be set + // only after animation completes, otherwise close animations won't work + const [open, setOpen] = useState(props.open); - const summaryElement = React.isValidElement(summary) ? ( - summary - ) : ( - {summary ?? "Details"} - ); + const summaryElement = React.isValidElement(summary) ? ( + summary + ) : ( + {summary ?? "Details"} + ); - return ( - // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -
{ - const target = e.target as HTMLElement; - // Prevent a double-click to highlight summary text - if (isInSummary(target) && e.detail > 1) { - e.preventDefault(); - } - }} - onClick={(e) => { - e.stopPropagation(); // For isolation of multiple nested details/summary - const target = e.target as HTMLElement; - const shouldToggle = - isInSummary(target) && hasParent(target, detailsRef.current!); - if (!shouldToggle) { - return; - } - e.preventDefault(); - if (collapsed) { - setCollapsed(false); - setOpen(true); - } else { - setCollapsed(true); - // Don't do this, it breaks close animation! - // setOpen(false); - } - }} - > - {summaryElement} + return ( + // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions +
{ + const target = e.target as HTMLElement; + // Prevent a double-click to highlight summary text + if (isInSummary(target) && e.detail > 1) { + e.preventDefault(); + } + }} + onClick={(e) => { + e.stopPropagation(); // For isolation of multiple nested details/summary + const target = e.target as HTMLElement; + const shouldToggle = + isInSummary(target) && + hasParent(target, detailsRef.current!); + if (!shouldToggle) { + return; + } + e.preventDefault(); + if (collapsed) { + setCollapsed(false); + setOpen(true); + } else { + setCollapsed(true); + // Don't do this, it breaks close animation! + // setOpen(false); + } + }} + > + {summaryElement} - { - setCollapsed(newCollapsed); - setOpen(!newCollapsed); - }} - > -
- {children} -
-
-
- ); + { + setCollapsed(newCollapsed); + setOpen(!newCollapsed); + }} + > +
+ {children} +
+
+
+ ); } From af397f8795ed0a0849680c62e3eb4450a7b08e12 Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:41:21 +0200 Subject: [PATCH 19/20] chore: format documentation --- readme/advanced.md | 16 ++---- readme/custom.md | 112 ++++++++++++++++++------------------ readme/getting_started.md | 12 ++-- scripts/README.md | 10 ++-- scripts/VALIDATION_SETUP.md | 86 ++++++++++++++------------- 5 files changed, 115 insertions(+), 121 deletions(-) diff --git a/readme/advanced.md b/readme/advanced.md index d3f51469..6e3f7a5f 100644 --- a/readme/advanced.md +++ b/readme/advanced.md @@ -32,21 +32,17 @@ import FloatImage from "@site/src/components/commons/FloatImage"; # Page content starts here - + ``` You can also make the image clickable by adding a `link` prop: ```mdx - ``` diff --git a/readme/custom.md b/readme/custom.md index a5f652a8..534e7068 100644 --- a/readme/custom.md +++ b/readme/custom.md @@ -13,42 +13,42 @@ import FloatImage from "@site/src/components/commons/FloatImage"; **Usage:** ```jsx - ``` **Props:** -* `url` (string, required) - Path to the image file (relative to static folder) -* `alt` (string, required) - Alternative text for the image -* `link` (string, optional) - URL to wrap the image in a clickable link -* `...props` (any CSS properties) - Any additional props are applied as inline styles (e.g., `width`, `float`, `margin`) +- `url` (string, required) - Path to the image file (relative to static folder) +- `alt` (string, required) - Alternative text for the image +- `link` (string, optional) - URL to wrap the image in a clickable link +- `...props` (any CSS properties) - Any additional props are applied as inline styles (e.g., `width`, `float`, `margin`) **Default Styling:** The component has the following default styling: -* `width: min(120px, 50%)` - Responsive width with 120px maximum -* `float: right` - Floats to the right by default -* `margin: 0px 20px 0px 20px` - 20px left and right margin +- `width: min(120px, 50%)` - Responsive width with 120px maximum +- `float: right` - Floats to the right by default +- `margin: 0px 20px 0px 20px` - 20px left and right margin Any of these can be overriden by passing props: ```jsx - ``` -*** +--- ## LbeChip @@ -68,9 +68,9 @@ import LbeChip from "@site/src/components/commons/LbeChip"; **Props:** -* `title` (string, required) - The subdiscipline name used for filtering datasets +- `title` (string, required) - The subdiscipline name used for filtering datasets -*** +--- ## FeatureButton @@ -85,26 +85,26 @@ import FeatureButton from "@site/src/components/features/FeatureButton"; **Usage:** ```jsx - ``` **Props:** -* `url` (string, required) - The link destination URL -* `imgUrl` (string, required) - Path to the image/icon (relative to static folder) -* `text` (string, required) - Button text displayed below the image -* `width` (string, optional) - Width of the image (default: "120px") -* `alt` (string, optional) - Alternative text for the image (defaults to `text` if not provided) -* `index` (boolean, optional) - If true, applies primary button styling; otherwise uses secondary styling -* `classes` (string, optional) - Additional CSS classes to apply to the button +- `url` (string, required) - The link destination URL +- `imgUrl` (string, required) - Path to the image/icon (relative to static folder) +- `text` (string, required) - Button text displayed below the image +- `width` (string, optional) - Width of the image (default: "120px") +- `alt` (string, optional) - Alternative text for the image (defaults to `text` if not provided) +- `index` (boolean, optional) - If true, applies primary button styling; otherwise uses secondary styling +- `classes` (string, optional) - Additional CSS classes to apply to the button -*** +--- ## Features @@ -120,20 +120,20 @@ import Features from "@site/src/components/features/Features"; ```jsx const features = [ - { url: "/docs/overview", imgUrl: "/img/overview.svg", text: "Overview" }, - { url: "/docs/start", imgUrl: "/img/start.svg", text: "Get Started" }, + { url: "/docs/overview", imgUrl: "/img/overview.svg", text: "Overview" }, + { url: "/docs/start", imgUrl: "/img/start.svg", text: "Get Started" }, ]; - +; ``` **Props:** -* `featureList` (array, required) - List of feature objects with `url`, `imgUrl`, `text`, and optional `alt` -* `index` (boolean, optional) - If true, all buttons use primary styling; otherwise secondary styling -* `...props` (any, optional) - Passed to each `FeatureButton` (e.g., `width`, `classes`) +- `featureList` (array, required) - List of feature objects with `url`, `imgUrl`, `text`, and optional `alt` +- `index` (boolean, optional) - If true, all buttons use primary styling; otherwise secondary styling +- `...props` (any, optional) - Passed to each `FeatureButton` (e.g., `width`, `classes`) -*** +--- ## BulletBox @@ -149,17 +149,17 @@ import { BulletBox } from "@site/src/components/commons/BulletBox"; ```jsx -

Feature Title

-

Feature description goes here.

+

Feature Title

+

Feature description goes here.

``` **Props:** -* `children` (ReactNode, required) - Content to display inside the box -* `secondary` (boolean, optional) - If true, applies secondary button styling; otherwise uses primary styling +- `children` (ReactNode, required) - Content to display inside the box +- `secondary` (boolean, optional) - If true, applies secondary button styling; otherwise uses primary styling -*** +--- ## BulletContainer @@ -175,17 +175,17 @@ import { BulletContainer } from "@site/src/components/commons/BulletBox"; ```jsx - -

Feature 1

-

Description 1

-
- -

Feature 2

-

Description 2

-
+ +

Feature 1

+

Description 1

+
+ +

Feature 2

+

Description 2

+
``` **Props:** -* `children` (ReactNode, required) - Typically contains multiple BulletBox components +- `children` (ReactNode, required) - Typically contains multiple BulletBox components diff --git a/readme/getting_started.md b/readme/getting_started.md index a1c21c7f..96bc7ebb 100644 --- a/readme/getting_started.md +++ b/readme/getting_started.md @@ -15,15 +15,15 @@ After approval, the changed sources will be forwarded for [localisation](./local ## Conventions -- Use british english -- headings with: # (primary), ## (secondary), ### (tertiary etc) +- Use british english +- headings with: # (primary), ## (secondary), ### (tertiary etc) ## Source information -- Citations (e.g. for journal articles): only cite the name of the article and doi (if available) and add link to doi - as opposed to a citation standard such as Angewandte, RSC etc. To cite to a footnote which contains a citation, use a superscripted number. -- For references, sources and/or further information/reading, please always use the heading "Sources and further information". -- Use bullet points -- Indicate if a source is written in German (e.g. - German: Article about ...) +- Citations (e.g. for journal articles): only cite the name of the article and doi (if available) and add link to doi - as opposed to a citation standard such as Angewandte, RSC etc. To cite to a footnote which contains a citation, use a superscripted number. +- For references, sources and/or further information/reading, please always use the heading "Sources and further information". +- Use bullet points +- Indicate if a source is written in German (e.g. - German: Article about ...) ## Adding images diff --git a/scripts/README.md b/scripts/README.md index 94890e09..bc64de2c 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -8,9 +8,9 @@ Dieses Verzeichnis enthält automatisierte Validierungs-Tools für die Knowledge Validiert alle Markdown-Dateien auf: -* Gültiges Frontmatter mit Slug -* Gültige Seitentitel -* Keine doppelten Titel +- Gültiges Frontmatter mit Slug +- Gültige Seitentitel +- Keine doppelten Titel **Verwendung:** @@ -20,8 +20,8 @@ npm run validate-content ## Dokumentation -* **[VALIDATION\_SETUP.md](VALIDATION_SETUP.md)** - Detaillierte Setup-Anleitung -* **[EXAMPLES.md](EXAMPLES.md)** - Beispiele für gültige und ungültige Dateien +- **[VALIDATION\_SETUP.md](VALIDATION_SETUP.md)** - Detaillierte Setup-Anleitung +- **[EXAMPLES.md](EXAMPLES.md)** - Beispiele für gültige und ungültige Dateien ## GitHub Actions Integration diff --git a/scripts/VALIDATION_SETUP.md b/scripts/VALIDATION_SETUP.md index 62965661..cd02f21f 100644 --- a/scripts/VALIDATION_SETUP.md +++ b/scripts/VALIDATION_SETUP.md @@ -7,16 +7,16 @@ Dieses Dokument erklärt den automatischen Test-Setup für Pull Requests. Das System validiert bei jedem PR automatisch: 1. **Frontmatter-Validierung** (`scripts/validate-content.js`) - * Alle md/mdx-Dateien müssen gültiges YAML-Frontmatter haben - * Mindestens ein `slug` muss im Frontmatter vorhanden sein + - Alle md/mdx-Dateien müssen gültiges YAML-Frontmatter haben + - Mindestens ein `slug` muss im Frontmatter vorhanden sein 2. **Titel-Validierung** (`scripts/validate-content.js`) - * Jede Seite muss einen gültigen Titel haben (mindestens eine der folgenden Optionen): - * Eine `h1`-Überschrift (`# Titel`) - * Ein `title` im Frontmatter - * Falls beide vorhanden sind, dürfen sie nicht identisch sein + - Jede Seite muss einen gültigen Titel haben (mindestens eine der folgenden Optionen): + - Eine `h1`-Überschrift (`# Titel`) + - Ein `title` im Frontmatter + - Falls beide vorhanden sind, dürfen sie nicht identisch sein 3. **Build-Validierung** (`GitHub Actions Workflow`) - * Der Docusaurus-Build muss fehlerfrei laufen - * Keine Warnings oder Errors beim Build + - Der Docusaurus-Build muss fehlerfrei laufen + - Keine Warnings oder Errors beim Build ## Komponenten @@ -61,11 +61,11 @@ node scripts/validate-content.js Der Workflow läuft automatisch bei Pull Requests: -* Triggert bei PRs mit Änderungen in `docs/`, `package.json`, oder dem Workflow selbst -* Installiert Dependencies -* Führt Frontmatter/Titel-Validierung durch -* Führt Docusaurus-Build durch -* Meldet Ergebnisse im PR +- Triggert bei PRs mit Änderungen in `docs/`, `package.json`, oder dem Workflow selbst +- Installiert Dependencies +- Führt Frontmatter/Titel-Validierung durch +- Führt Docusaurus-Build durch +- Meldet Ergebnisse im PR ## Anforderungen für Dokumente @@ -111,7 +111,6 @@ slug: /page/ slug: /page/ title: Page Title --- - Inhalt ohne h1... ``` @@ -141,7 +140,6 @@ title: Same Title --- slug: /page/ --- - Nur Inhalt, kein Titel... ``` @@ -151,10 +149,10 @@ Für das Validierungsskript werden zwei neue devDependencies hinzugefügt: ```json { - "devDependencies": { - "glob": "^10.3.10", - "gray-matter": "^4.0.3" - } + "devDependencies": { + "glob": "^10.3.10", + "gray-matter": "^4.0.3" + } } ``` @@ -167,20 +165,22 @@ npm install ## Installation & Setup 1. **Dependencies installieren:** - ```bash - npm install - ``` + + ```bash + npm install + ``` 2. **Lokal testen:** - ```bash - npm run validate-content - npm run build - ``` + + ```bash + npm run validate-content + npm run build + ``` 3. **Beide Tests zusammen:** - ```bash - npm run test:ci - ``` + ```bash + npm run test:ci + ``` ## CI/CD Integration @@ -200,8 +200,8 @@ Der Workflow `pr-validation.yml` läuft automatisch bei jedem PR. Die Prüfungen **Status in GitHub:** -* 🟢 Grün = Alle Checks bestanden -* 🔴 Rot = Ein oder mehrere Checks fehlgeschlagen +- 🟢 Grün = Alle Checks bestanden +- 🔴 Rot = Ein oder mehrere Checks fehlgeschlagen ## Fehlerbehebung @@ -234,11 +234,9 @@ Lösung: Nutze mindestens eine der beiden Optionen: ```yaml --- slug: /page/ -title: Page Title # Option 1 +title: Page Title # Option 1 --- - # oder Option 2 - --- slug: /page/ --- @@ -247,21 +245,21 @@ slug: /page/ ### Build-Fehler -* Prüfe auf broken links -* Prüfe auf broken images -* Prüfe MDX-Syntax -* Schau in die Build-Logs +- Prüfe auf broken links +- Prüfe auf broken images +- Prüfe MDX-Syntax +- Schau in die Build-Logs ## Erwiterungsmöglichkeiten Das System lässt sich leicht erweitern um: -* Maximal erlaubte Dateigröße -* Link-Validierung -* Image-Validierung -* SEO-Checks (Meta-Description, etc.) -* Linting (Remark, MDLint) -* Spellchecking +- Maximal erlaubte Dateigröße +- Link-Validierung +- Image-Validierung +- SEO-Checks (Meta-Description, etc.) +- Linting (Remark, MDLint) +- Spellchecking ## Support From eb8aab57c09c6141b4d0fa07fe8f426159c6a5dd Mon Sep 17 00:00:00 2001 From: Johannes Liermann Date: Wed, 26 Aug 2026 18:42:31 +0200 Subject: [PATCH 20/20] chore: format tests and CI --- .github/workflows/localisation.yml | 80 +++---- .github/workflows/pr-validation.yml | 192 +++++++-------- scripts/validate-content.js | 356 +++++++++++++++------------- scripts/validation.config.js | 270 +++++++++++---------- tests/e2e/screenshot.css | 10 +- tests/e2e/smoke.spec.ts | 40 +++- tests/e2e/visual-pages.spec.ts | 76 ++++-- 7 files changed, 548 insertions(+), 476 deletions(-) diff --git a/.github/workflows/localisation.yml b/.github/workflows/localisation.yml index ceae3247..cd5adc35 100644 --- a/.github/workflows/localisation.yml +++ b/.github/workflows/localisation.yml @@ -1,45 +1,45 @@ name: Localisation Workflow on: - push: - branches: - - localisation - pull_request: - branches: - - localisation - workflow_dispatch: + push: + branches: + - localisation + pull_request: + branches: + - localisation + workflow_dispatch: jobs: - build: - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/localisation' || github.event_name == 'workflow_dispatch' - steps: - - name: Checkout repository - uses: actions/checkout@v5 - - - name: Set up Node.js - uses: actions/setup-node@v6 - with: - node-version: "lts/*" - - - name: Set up Java 17 (Temurin) - uses: actions/setup-java@v5 - with: - distribution: temurin - java-version: "17" - - - name: Install dependencies - run: npm ci - - - name: Write translations - run: npm run write-translations - - - name: Clear jdeploy cache - run: | - rm -rf ~/.jdeploy || true - mkdir -p ~/.jdeploy - - - name: Upload translations - run: npm run crowdin upload - env: - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + build: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/localisation' || github.event_name == 'workflow_dispatch' + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: "lts/*" + + - name: Set up Java 17 (Temurin) + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: "17" + + - name: Install dependencies + run: npm ci + + - name: Write translations + run: npm run write-translations + + - name: Clear jdeploy cache + run: | + rm -rf ~/.jdeploy || true + mkdir -p ~/.jdeploy + + - name: Upload translations + run: npm run crowdin upload + env: + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml index f612de7e..68386bbb 100644 --- a/.github/workflows/pr-validation.yml +++ b/.github/workflows/pr-validation.yml @@ -1,101 +1,101 @@ name: "PR Validation" on: - pull_request: - paths: - - "docs/**" - - "package.json" - - "package-lock.json" - - ".github/workflows/pr-validation.yml" - workflow_dispatch: + pull_request: + paths: + - "docs/**" + - "package.json" + - "package-lock.json" + - ".github/workflows/pr-validation.yml" + workflow_dispatch: jobs: - validate: - name: "Content & Build Validation" - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: ["lts/*"] - - steps: - - name: "Checkout code" - uses: actions/checkout@v5 - with: - fetch-depth: 0 - - - name: "Setup Node.js" - uses: actions/setup-node@v6 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - - name: "Install dependencies" - run: npm ci - - - name: "� Write translations" - run: npm run write-translations - continue-on-error: false - - - name: "📥 Download translations from Crowdin" - run: npm run crowdin download - env: - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} - continue-on-error: true - - - name: "�📋 Validate Frontmatter & Titles" - run: node scripts/validate-content.js - continue-on-error: false - - - name: "🏗️ Build Website" - shell: bash - run: | - set -o pipefail - npm run build 2>&1 | tee build.log - - WARNINGS=$(grep -Ei "^\[WARNING\]|^Warning:" build.log || true) - - if [ -n "$WARNINGS" ]; then - WARNING_DETAILS=$(awk ' - BEGIN {capture=0; printed=0} - /^\[WARNING\]|^Warning:/ { - capture=1 - if (printed++) print "" - print - next - } - capture && /^\[[^]]+\]/ { - capture=0 - next - } - capture {print} - ' build.log) - - echo "## Build warnings" >> "$GITHUB_STEP_SUMMARY" - echo "Detected build warnings and related output:" >> "$GITHUB_STEP_SUMMARY" - echo '```text' >> "$GITHUB_STEP_SUMMARY" - echo "$WARNING_DETAILS" >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - - while IFS= read -r line; do - echo "::warning title=Build warning::$line" - done <<< "$WARNINGS" - fi - - BROKEN_REFERENCES=$(grep -Ei "Docusaurus found broken (links|anchors)" build.log || true) - - if [ -n "$BROKEN_REFERENCES" ]; then - echo "::error title=Broken references detected::Docusaurus reported broken links or anchors during build." - echo "## Broken references policy" >> "$GITHUB_STEP_SUMMARY" - echo "Build failed because broken links or broken anchors were detected." >> "$GITHUB_STEP_SUMMARY" - exit 1 - fi - continue-on-error: false - - - name: "✅ All checks passed" - if: success() - run: | - echo "✨ Alle Validierungen erfolgreich!" - echo "- ✅ Frontmatter validiert" - echo "- ✅ Titel validiert" - echo "- ✅ Build erfolgreich" + validate: + name: "Content & Build Validation" + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: ["lts/*"] + + steps: + - name: "Checkout code" + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: "Setup Node.js" + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + + - name: "Install dependencies" + run: npm ci + + - name: "� Write translations" + run: npm run write-translations + continue-on-error: false + + - name: "📥 Download translations from Crowdin" + run: npm run crowdin download + env: + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + continue-on-error: true + + - name: "�📋 Validate Frontmatter & Titles" + run: node scripts/validate-content.js + continue-on-error: false + + - name: "🏗️ Build Website" + shell: bash + run: | + set -o pipefail + npm run build 2>&1 | tee build.log + + WARNINGS=$(grep -Ei "^\[WARNING\]|^Warning:" build.log || true) + + if [ -n "$WARNINGS" ]; then + WARNING_DETAILS=$(awk ' + BEGIN {capture=0; printed=0} + /^\[WARNING\]|^Warning:/ { + capture=1 + if (printed++) print "" + print + next + } + capture && /^\[[^]]+\]/ { + capture=0 + next + } + capture {print} + ' build.log) + + echo "## Build warnings" >> "$GITHUB_STEP_SUMMARY" + echo "Detected build warnings and related output:" >> "$GITHUB_STEP_SUMMARY" + echo '```text' >> "$GITHUB_STEP_SUMMARY" + echo "$WARNING_DETAILS" >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" + + while IFS= read -r line; do + echo "::warning title=Build warning::$line" + done <<< "$WARNINGS" + fi + + BROKEN_REFERENCES=$(grep -Ei "Docusaurus found broken (links|anchors)" build.log || true) + + if [ -n "$BROKEN_REFERENCES" ]; then + echo "::error title=Broken references detected::Docusaurus reported broken links or anchors during build." + echo "## Broken references policy" >> "$GITHUB_STEP_SUMMARY" + echo "Build failed because broken links or broken anchors were detected." >> "$GITHUB_STEP_SUMMARY" + exit 1 + fi + continue-on-error: false + + - name: "✅ All checks passed" + if: success() + run: | + echo "✨ Alle Validierungen erfolgreich!" + echo "- ✅ Frontmatter validiert" + echo "- ✅ Titel validiert" + echo "- ✅ Build erfolgreich" diff --git a/scripts/validate-content.js b/scripts/validate-content.js index 78289deb..4155382c 100644 --- a/scripts/validate-content.js +++ b/scripts/validate-content.js @@ -2,230 +2,246 @@ /** * Content Validation Script - * + * * Validates: * 1. Frontmatter present and valid YAML with at least one slug * 2. Valid page titles (h1 or title in frontmatter) * 3. No identical h1 and title values */ -const fs = require('fs'); -const path = require('path'); +const fs = require("fs"); +const path = require("path"); // Try to load glob, otherwise exit let glob; try { - glob = require('glob'); + glob = require("glob"); } catch (e) { - console.error('❌ Error: glob package not installed!'); - console.error('Please run: npm install'); - process.exit(1); + console.error("❌ Error: glob package not installed!"); + console.error("Please run: npm install"); + process.exit(1); } // Try to load gray-matter, otherwise exit let matter; try { - matter = require('gray-matter'); + matter = require("gray-matter"); } catch (e) { - console.error('❌ Error: gray-matter package not installed!'); - console.error('Please run: npm install'); - process.exit(1); + console.error("❌ Error: gray-matter package not installed!"); + console.error("Please run: npm install"); + process.exit(1); } -const DOCS_DIR = path.join(__dirname, '../docs'); +const DOCS_DIR = path.join(__dirname, "../docs"); const ERRORS = []; const WARNINGS = []; // Check if docs directory exists if (!fs.existsSync(DOCS_DIR)) { - console.error(`❌ Error: Directory not found: ${DOCS_DIR}`); - process.exit(1); + console.error(`❌ Error: Directory not found: ${DOCS_DIR}`); + process.exit(1); } /** * Finds all md/mdx files recursively */ function findContentFiles() { - try { - return glob.sync('**/*.{md,mdx}', { cwd: DOCS_DIR }); - } catch (error) { - console.error(`❌ Error searching for files: ${error.message}`); - process.exit(1); - } + try { + return glob.sync("**/*.{md,mdx}", { cwd: DOCS_DIR }); + } catch (error) { + console.error(`❌ Error searching for files: ${error.message}`); + process.exit(1); + } } /** * Validates frontmatter of a file */ function validateFrontmatter(filePath, content) { - const errors = []; - const warnings = []; - - try { - const { data, matter: frontmatterContent } = matter(content); - - // Check if frontmatter is empty - if (Object.keys(data).length === 0) { - errors.push(`No frontmatter present`); - return { hasErrors: true, errors, warnings }; - } - - // Check for slug - if (!data.slug) { - errors.push(`Slug missing in frontmatter`); - } else if (typeof data.slug !== 'string' || data.slug.trim() === '') { - errors.push(`Slug must be a non-empty string (received: ${JSON.stringify(data.slug)})`); - } else { - // Validate slug format (URL best practices) - const slug = data.slug; - - // Check for uppercase letters (warning, but allowed) - if (slug !== slug.toLowerCase()) { - warnings.push(`Slug contains uppercase letters. The use of case-sensitive slugs is allowed but not recommended: "${slug}"`); - } - - // Check for spaces - if (/\s/.test(slug)) { - errors.push(`Slug contains spaces. Use hyphens (-) or underscores (_): "${slug}"`); - } - - // Check for invalid characters (allowed: a-z, A-Z, 0-9, /, -, _) - const validSlugPattern = /^[a-zA-Z0-9/_-]+$/; - if (!validSlugPattern.test(slug)) { - errors.push(`Slug contains invalid characters. Only allowed: a-z, A-Z, 0-9, /, -, _: "${slug}"`); - } - } - - return { - hasErrors: errors.length > 0, - errors, - warnings, - frontmatter: data, - content: content.split('---').slice(2).join('---').trim() - }; - } catch (error) { - return { - hasErrors: true, - errors: [`Error parsing frontmatter: ${error.message}`], - warnings: [] - }; - } + const errors = []; + const warnings = []; + + try { + const { data, matter: frontmatterContent } = matter(content); + + // Check if frontmatter is empty + if (Object.keys(data).length === 0) { + errors.push(`No frontmatter present`); + return { hasErrors: true, errors, warnings }; + } + + // Check for slug + if (!data.slug) { + errors.push(`Slug missing in frontmatter`); + } else if (typeof data.slug !== "string" || data.slug.trim() === "") { + errors.push( + `Slug must be a non-empty string (received: ${JSON.stringify(data.slug)})`, + ); + } else { + // Validate slug format (URL best practices) + const slug = data.slug; + + // Check for uppercase letters (warning, but allowed) + if (slug !== slug.toLowerCase()) { + warnings.push( + `Slug contains uppercase letters. The use of case-sensitive slugs is allowed but not recommended: "${slug}"`, + ); + } + + // Check for spaces + if (/\s/.test(slug)) { + errors.push( + `Slug contains spaces. Use hyphens (-) or underscores (_): "${slug}"`, + ); + } + + // Check for invalid characters (allowed: a-z, A-Z, 0-9, /, -, _) + const validSlugPattern = /^[a-zA-Z0-9/_-]+$/; + if (!validSlugPattern.test(slug)) { + errors.push( + `Slug contains invalid characters. Only allowed: a-z, A-Z, 0-9, /, -, _: "${slug}"`, + ); + } + } + + return { + hasErrors: errors.length > 0, + errors, + warnings, + frontmatter: data, + content: content.split("---").slice(2).join("---").trim(), + }; + } catch (error) { + return { + hasErrors: true, + errors: [`Error parsing frontmatter: ${error.message}`], + warnings: [], + }; + } } /** * Validates page title */ function validateTitle(filePath, frontmatter, content) { - const errors = []; - const warnings = []; - - const h1Match = content.match(/^# (.+)$/m); - const h1Title = h1Match ? h1Match[1].trim() : null; - const fmTitle = frontmatter.title || null; - - // Check for at least one title - if (!h1Title && !fmTitle) { - errors.push(`No valid title found (neither h1 nor title in frontmatter)`); - } - - // If both present, they must not be identical - if (h1Title && fmTitle) { - if (h1Title === fmTitle) { - warnings.push(`h1 and frontmatter title are identical ("${h1Title}") and thus redundant. Both fields should only be used if different strings are required for page and navigation titles.`); - } - } - - return { hasErrors: errors.length > 0, errors, warnings }; + const errors = []; + const warnings = []; + + const h1Match = content.match(/^# (.+)$/m); + const h1Title = h1Match ? h1Match[1].trim() : null; + const fmTitle = frontmatter.title || null; + + // Check for at least one title + if (!h1Title && !fmTitle) { + errors.push( + `No valid title found (neither h1 nor title in frontmatter)`, + ); + } + + // If both present, they must not be identical + if (h1Title && fmTitle) { + if (h1Title === fmTitle) { + warnings.push( + `h1 and frontmatter title are identical ("${h1Title}") and thus redundant. Both fields should only be used if different strings are required for page and navigation titles.`, + ); + } + } + + return { hasErrors: errors.length > 0, errors, warnings }; } /** * Validates a single file */ function validateFile(relPath) { - const filePath = path.join(DOCS_DIR, relPath); - - let content; - try { - content = fs.readFileSync(filePath, 'utf-8'); - } catch (error) { - return { - file: relPath, - errors: [`Error reading file: ${error.message}`], - warnings: [] - }; - } - - const fileErrors = { file: relPath, errors: [], warnings: [] }; - - // Step 1: Validate frontmatter - const fmValidation = validateFrontmatter(relPath, content); - fileErrors.errors.push(...fmValidation.errors); - fileErrors.warnings.push(...fmValidation.warnings); - - if (!fmValidation.hasErrors && fmValidation.frontmatter) { - // Step 2: Validate title - const titleValidation = validateTitle(relPath, fmValidation.frontmatter, fmValidation.content); - fileErrors.errors.push(...titleValidation.errors); - fileErrors.warnings.push(...titleValidation.warnings); - } - - return fileErrors; + const filePath = path.join(DOCS_DIR, relPath); + + let content; + try { + content = fs.readFileSync(filePath, "utf-8"); + } catch (error) { + return { + file: relPath, + errors: [`Error reading file: ${error.message}`], + warnings: [], + }; + } + + const fileErrors = { file: relPath, errors: [], warnings: [] }; + + // Step 1: Validate frontmatter + const fmValidation = validateFrontmatter(relPath, content); + fileErrors.errors.push(...fmValidation.errors); + fileErrors.warnings.push(...fmValidation.warnings); + + if (!fmValidation.hasErrors && fmValidation.frontmatter) { + // Step 2: Validate title + const titleValidation = validateTitle( + relPath, + fmValidation.frontmatter, + fmValidation.content, + ); + fileErrors.errors.push(...titleValidation.errors); + fileErrors.warnings.push(...titleValidation.warnings); + } + + return fileErrors; } /** * Main function */ function main() { - console.log('🔍 Validating documents...\n'); - - const files = findContentFiles(); - console.log(`📁 Files found: ${files.length}\n`); - - let fileCount = 0; - let errorCount = 0; - let warningCount = 0; - - files.forEach(file => { - const validation = validateFile(file); - - if (validation.errors.length > 0 || validation.warnings.length > 0) { - console.log(`📄 ${validation.file}`); - - if (validation.errors.length > 0) { - console.log(' ❌ Errors:'); - validation.errors.forEach(err => { - console.log(` - ${err}`); - errorCount++; - }); - } - - if (validation.warnings.length > 0) { - console.log(' ⚠️ Warnings:'); - validation.warnings.forEach(warn => { - console.log(` - ${warn}`); - warningCount++; - }); - } - - console.log(''); - } - - fileCount++; - }); - - // Summary - console.log('\n📊 Summary:'); - console.log(` Files checked: ${fileCount}`); - console.log(` Errors: ${errorCount}`); - console.log(` Warnings: ${warningCount}`); - - if (errorCount > 0) { - console.log('\n❌ Validation failed!'); - process.exit(1); - } else { - console.log('\n✅ Validation successful!'); - process.exit(0); - } + console.log("🔍 Validating documents...\n"); + + const files = findContentFiles(); + console.log(`📁 Files found: ${files.length}\n`); + + let fileCount = 0; + let errorCount = 0; + let warningCount = 0; + + files.forEach((file) => { + const validation = validateFile(file); + + if (validation.errors.length > 0 || validation.warnings.length > 0) { + console.log(`📄 ${validation.file}`); + + if (validation.errors.length > 0) { + console.log(" ❌ Errors:"); + validation.errors.forEach((err) => { + console.log(` - ${err}`); + errorCount++; + }); + } + + if (validation.warnings.length > 0) { + console.log(" ⚠️ Warnings:"); + validation.warnings.forEach((warn) => { + console.log(` - ${warn}`); + warningCount++; + }); + } + + console.log(""); + } + + fileCount++; + }); + + // Summary + console.log("\n📊 Summary:"); + console.log(` Files checked: ${fileCount}`); + console.log(` Errors: ${errorCount}`); + console.log(` Warnings: ${warningCount}`); + + if (errorCount > 0) { + console.log("\n❌ Validation failed!"); + process.exit(1); + } else { + console.log("\n✅ Validation successful!"); + process.exit(0); + } } main(); diff --git a/scripts/validation.config.js b/scripts/validation.config.js index 927e23f5..50a382d4 100644 --- a/scripts/validation.config.js +++ b/scripts/validation.config.js @@ -1,168 +1,164 @@ /** * Advanced Configuration für Content Validation - * + * * Diese Datei zeigt erweiterte Validierungs-Optionen, * die in validate-content.js implementiert werden können. */ module.exports = { - // Pfade zu validierenden Dateien - validation: { - // Verzeichnis mit Dokumenten - docsDir: 'docs', - - // Datei-Pattern - filePatterns: ['**/*.md', '**/*.mdx'], - - // Verzeichnisse zu ignorieren - ignore: ['node_modules', 'build', 'dist'], - }, - - // Frontmatter-Regeln - frontmatter: { - // Erforderliche Felder - required: { - slug: { - type: 'string', - pattern: /^\/[\w\-\/]*\/$/, // Muss mit / beginnen und enden - message: 'Slug muss Format /my-slug/ haben', - }, - }, - - // Optionale Felder - optional: { - title: { - type: 'string', - minLength: 5, - maxLength: 100, - message: 'Title sollte 5-100 Zeichen sein', - }, - description: { - type: 'string', - maxLength: 160, - message: 'Description sollte max. 160 Zeichen sein (für SEO)', - }, - sidebar_position: { - type: 'number', - }, - keywords: { - type: 'array', - items: { type: 'string' }, - }, - }, - }, - - // Titel-Regeln - title: { - // h1 erforderlich oder title erforderlich (mindestens eines) - requireEitherH1OrTitle: true, - - // Wenn beide vorhanden, dürfen sie nicht identisch sein - mustDifferIfBothPresent: true, - - // Empfohlene h1-Länge für SEO - h1MaxLength: 70, - }, - - // Content-Regeln - content: { - // Minimale Wort-Anzahl - minWords: 10, - - // Maximum Länge für SEO - maxWordsPerParagraph: 200, - }, - - // Link-Validierung (zukünftig) - links: { - // Validiere interne Links - validateInternal: false, - - // Validiere externe Links (langsam!) - validateExternal: false, - }, - - // Image-Validierung (zukünftig) - images: { - // Prüfe ob Dateien existieren - validateExists: false, - - // Prüfe auf Alt-Text - requireAlt: false, - }, - - // Spellcheck (zukünftig) - spellcheck: { - enabled: false, - language: 'de', - ignoreWords: ['Docusaurus', 'JavaScript'], - }, - - // Output-Optionen - output: { - // Verbose logging - verbose: false, - - // Nur Errors zeigen (nicht Warnings) - errorOnly: false, - - // JSON-Output für CI/CD - json: false, - }, - - // Schweregrad einstellen - severity: { - // Welche Probleme als Error zählen (Exit Code 1) - errors: [ - 'MISSING_SLUG', - 'MISSING_TITLE', - 'DUPLICATE_TITLE', - 'INVALID_FRONTMATTER', - ], - - // Welche Probleme nur Warnings sind - warnings: [ - 'MISSING_DESCRIPTION', - 'SHORT_TITLE', - 'LONG_DESCRIPTION', - ], - }, - - // Exclude-Regeln (wie .gitignore) - exclude: { - paths: [ - 'docs/_*', // Verzeichnisse mit underscore - 'docs/[0-9]{2}_draft', // Draft-Verzeichnisse - 'docs/**/README.md', // README.md Dateien - ], - }, + // Pfade zu validierenden Dateien + validation: { + // Verzeichnis mit Dokumenten + docsDir: "docs", + + // Datei-Pattern + filePatterns: ["**/*.md", "**/*.mdx"], + + // Verzeichnisse zu ignorieren + ignore: ["node_modules", "build", "dist"], + }, + + // Frontmatter-Regeln + frontmatter: { + // Erforderliche Felder + required: { + slug: { + type: "string", + pattern: /^\/[\w\-\/]*\/$/, // Muss mit / beginnen und enden + message: "Slug muss Format /my-slug/ haben", + }, + }, + + // Optionale Felder + optional: { + title: { + type: "string", + minLength: 5, + maxLength: 100, + message: "Title sollte 5-100 Zeichen sein", + }, + description: { + type: "string", + maxLength: 160, + message: "Description sollte max. 160 Zeichen sein (für SEO)", + }, + sidebar_position: { + type: "number", + }, + keywords: { + type: "array", + items: { type: "string" }, + }, + }, + }, + + // Titel-Regeln + title: { + // h1 erforderlich oder title erforderlich (mindestens eines) + requireEitherH1OrTitle: true, + + // Wenn beide vorhanden, dürfen sie nicht identisch sein + mustDifferIfBothPresent: true, + + // Empfohlene h1-Länge für SEO + h1MaxLength: 70, + }, + + // Content-Regeln + content: { + // Minimale Wort-Anzahl + minWords: 10, + + // Maximum Länge für SEO + maxWordsPerParagraph: 200, + }, + + // Link-Validierung (zukünftig) + links: { + // Validiere interne Links + validateInternal: false, + + // Validiere externe Links (langsam!) + validateExternal: false, + }, + + // Image-Validierung (zukünftig) + images: { + // Prüfe ob Dateien existieren + validateExists: false, + + // Prüfe auf Alt-Text + requireAlt: false, + }, + + // Spellcheck (zukünftig) + spellcheck: { + enabled: false, + language: "de", + ignoreWords: ["Docusaurus", "JavaScript"], + }, + + // Output-Optionen + output: { + // Verbose logging + verbose: false, + + // Nur Errors zeigen (nicht Warnings) + errorOnly: false, + + // JSON-Output für CI/CD + json: false, + }, + + // Schweregrad einstellen + severity: { + // Welche Probleme als Error zählen (Exit Code 1) + errors: [ + "MISSING_SLUG", + "MISSING_TITLE", + "DUPLICATE_TITLE", + "INVALID_FRONTMATTER", + ], + + // Welche Probleme nur Warnings sind + warnings: ["MISSING_DESCRIPTION", "SHORT_TITLE", "LONG_DESCRIPTION"], + }, + + // Exclude-Regeln (wie .gitignore) + exclude: { + paths: [ + "docs/_*", // Verzeichnisse mit underscore + "docs/[0-9]{2}_draft", // Draft-Verzeichnisse + "docs/**/README.md", // README.md Dateien + ], + }, }; /** * BEISPIEL ERWEITERUNGEN: - * + * * 1. SEO-Validierung: * - Meta description prüfen * - Keywords prüfen * - Title length prüfen - * + * * 2. Link-Validierung: * - Interne Links auf Existenz prüfen * - External links auf Erreichbarkeit prüfen - * + * * 3. Image-Validierung: * - Bilder auf Existenz prüfen * - Alt-Text prüfen * - Bildgröße prüfen - * + * * 4. Spellcheck: * - Deutsche Rechtschreibung prüfen * - Technische Begriffe in ignore-list - * + * * 5. Performance-Checks: * - Dokumentenlänge prüfen * - Abhängigkeiten prüfen - * + * * 6. Compliance: * - Gültige Lizenz-Header * - Required sections diff --git a/tests/e2e/screenshot.css b/tests/e2e/screenshot.css index 974f6d5d..93659136 100644 --- a/tests/e2e/screenshot.css +++ b/tests/e2e/screenshot.css @@ -1,18 +1,18 @@ /* Hide known flaky elements for deterministic screenshots */ iframe, .avatar__photo, -img[src$='.gif'], +img[src$=".gif"], .DocSearch-Button-Keys > kbd, .theme-last-updated, .docusaurus-mermaid-container, -[class*='playgroundPreview'] { +[class*="playgroundPreview"] { display: none !important; } /* Video consent placeholders can shift layout */ -[class*='videoInfo'], -button[aria-label*='agree' i], -button[class*='agree' i] { +[class*="videoInfo"], +button[aria-label*="agree" i], +button[class*="agree" i] { visibility: hidden !important; } diff --git a/tests/e2e/smoke.spec.ts b/tests/e2e/smoke.spec.ts index f47e5ff5..ecff7dcb 100644 --- a/tests/e2e/smoke.spec.ts +++ b/tests/e2e/smoke.spec.ts @@ -1,6 +1,7 @@ import { expect, test } from "@playwright/test"; -const ASSET_FILE_EXTENSIONS = /\.(?:png|jpe?g|gif|webp|svg|ico|pdf|zip|gz|mp4|webm|css|js|json|xml|txt)$/i; +const ASSET_FILE_EXTENSIONS = + /\.(?:png|jpe?g|gif|webp|svg|ico|pdf|zip|gz|mp4|webm|css|js|json|xml|txt)$/i; const EXCLUDED_PATH_PREFIXES = ["/search"]; function normalizePath(url: URL): string { @@ -31,12 +32,14 @@ test("all internal pages render without errors", async ({ page, baseURL }) => { visited.add(currentPath); const response = await page.goto(currentPath, { - waitUntil: "commit" + waitUntil: "commit", }); await page.waitForLoadState("domcontentloaded"); if (!response || !response.ok()) { - failures.push(`${currentPath}: HTTP ${response?.status() ?? "NO_RESPONSE"}`); + failures.push( + `${currentPath}: HTTP ${response?.status() ?? "NO_RESPONSE"}`, + ); continue; } @@ -47,19 +50,29 @@ test("all internal pages render without errors", async ({ page, baseURL }) => { } const notFoundHeading = page.getByRole("heading", { - name: /404|page not found/i + name: /404|page not found/i, }); - if ((await notFoundHeading.count()) > 0 && (await notFoundHeading.first().isVisible())) { + if ( + (await notFoundHeading.count()) > 0 && + (await notFoundHeading.first().isVisible()) + ) { failures.push(`${currentPath}: rendered 404 page`); } const hrefs = await page .locator("a[href]") - .evaluateAll((anchors) => anchors.map((a) => a.getAttribute("href") ?? "")); + .evaluateAll((anchors) => + anchors.map((a) => a.getAttribute("href") ?? ""), + ); for (const href of hrefs) { - if (!href || href.startsWith("#") || href.startsWith("mailto:") || href.startsWith("tel:")) { + if ( + !href || + href.startsWith("#") || + href.startsWith("mailto:") || + href.startsWith("tel:") + ) { continue; } @@ -75,7 +88,11 @@ test("all internal pages render without errors", async ({ page, baseURL }) => { continue; } - if (EXCLUDED_PATH_PREFIXES.some((prefix) => resolvedUrl.pathname.startsWith(prefix))) { + if ( + EXCLUDED_PATH_PREFIXES.some((prefix) => + resolvedUrl.pathname.startsWith(prefix), + ) + ) { continue; } @@ -91,9 +108,12 @@ test("all internal pages render without errors", async ({ page, baseURL }) => { } } - expect(visited.size, "No pages were discovered during crawl.").toBeGreaterThan(0); + expect( + visited.size, + "No pages were discovered during crawl.", + ).toBeGreaterThan(0); expect( failures, - `The following pages failed:\n${failures.map((f) => `- ${f}`).join("\n")}` + `The following pages failed:\n${failures.map((f) => `- ${f}`).join("\n")}`, ).toEqual([]); }); diff --git a/tests/e2e/visual-pages.spec.ts b/tests/e2e/visual-pages.spec.ts index 3d6646a4..e8d5ebaf 100644 --- a/tests/e2e/visual-pages.spec.ts +++ b/tests/e2e/visual-pages.spec.ts @@ -36,7 +36,10 @@ function joinPathPrefix(prefix: string, route: string): string { return normalizePathname(`${normalizedPrefix}${normalizedRoute}`); } -async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise { +async function collectPageFileRoutes( + rootDir: string, + relativeDir = "", +): Promise { const currentDir = path.join(rootDir, relativeDir); const entries = await readdir(currentDir, { withFileTypes: true }); const routes: string[] = []; @@ -49,7 +52,9 @@ async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise const entryRelativePath = path.join(relativeDir, entry.name); if (entry.isDirectory()) { - routes.push(...(await collectPageFileRoutes(rootDir, entryRelativePath))); + routes.push( + ...(await collectPageFileRoutes(rootDir, entryRelativePath)), + ); continue; } @@ -58,7 +63,10 @@ async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise continue; } - if (entry.name.endsWith(".spec.ts") || entry.name.endsWith(".test.ts")) { + if ( + entry.name.endsWith(".spec.ts") || + entry.name.endsWith(".test.ts") + ) { continue; } @@ -80,60 +88,92 @@ async function collectPageFileRoutes(rootDir: string, relativeDir = ""): Promise function extractSitemapPathnames(sitemapXml: string): string[] { const locMatches = [...sitemapXml.matchAll(/(.*?)<\/loc>/g)]; - return [...new Set(locMatches.map((match) => normalizePathname(new URL(match[1]).pathname)))]; + return [ + ...new Set( + locMatches.map((match) => + normalizePathname(new URL(match[1]).pathname), + ), + ), + ]; } function waitForDocusaurusHydration(): boolean { return document.documentElement.dataset.hasHydrated === "true"; } -test("visual regression for docs and src/pages routes", async ({ page, baseURL }) => { +test("visual regression for docs and src/pages routes", async ({ + page, + baseURL, +}) => { test.setTimeout(20 * 60_000); if (!baseURL) { throw new Error("Playwright baseURL is not configured."); } - const screenshotStyles = await readFile(path.join(process.cwd(), "tests", "e2e", "screenshot.css"), "utf8"); + const screenshotStyles = await readFile( + path.join(process.cwd(), "tests", "e2e", "screenshot.css"), + "utf8", + ); const sitemapPath = path.join(process.cwd(), "build", "sitemap.xml"); const sitemapXml = await readFile(sitemapPath, "utf8"); const sitemapPathnames = extractSitemapPathnames(sitemapXml); const sitemapPathnameSet = new Set(sitemapPathnames); - const docsPathSample = sitemapPathnames.find((pathname) => pathname.includes("/docs/")) ?? "/docs"; - const routePrefix = normalizePathname(docsPathSample.split("/docs/")[0] || ""); + const docsPathSample = + sitemapPathnames.find((pathname) => pathname.includes("/docs/")) ?? + "/docs"; + const routePrefix = normalizePathname( + docsPathSample.split("/docs/")[0] || "", + ); const docsBase = joinPathPrefix(routePrefix, "/docs"); const docsRoutes = sitemapPathnames.filter( - (pathname) => pathname === docsBase || pathname.startsWith(`${docsBase}/`) + (pathname) => + pathname === docsBase || pathname.startsWith(`${docsBase}/`), + ); + const srcPagesCandidates = await collectPageFileRoutes( + path.join(process.cwd(), "src", "pages"), ); - const srcPagesCandidates = await collectPageFileRoutes(path.join(process.cwd(), "src", "pages")); const srcPagesRoutes = srcPagesCandidates .map((route) => joinPathPrefix(routePrefix, route)) .filter((route) => sitemapPathnameSet.has(route)); - const allRoutes = [...new Set([...docsRoutes, ...srcPagesRoutes])].sort((a, b) => a.localeCompare(b)); + const allRoutes = [...new Set([...docsRoutes, ...srcPagesRoutes])].sort( + (a, b) => a.localeCompare(b), + ); - expect(allRoutes.length, "No routes discovered for docs/src pages visual test.").toBeGreaterThan(0); + expect( + allRoutes.length, + "No routes discovered for docs/src pages visual test.", + ).toBeGreaterThan(0); for (const route of allRoutes) { await test.step(`visual ${route}`, async () => { - const response = await page.goto(route, { waitUntil: "domcontentloaded" }); + const response = await page.goto(route, { + waitUntil: "domcontentloaded", + }); expect(response, `No response for route ${route}`).toBeTruthy(); - expect(response?.ok(), `Route failed: ${route} (HTTP ${response?.status()})`).toBeTruthy(); + expect( + response?.ok(), + `Route failed: ${route} (HTTP ${response?.status()})`, + ).toBeTruthy(); await page.waitForFunction(waitForDocusaurusHydration); await page.addStyleTag({ content: screenshotStyles }); const notFoundHeading = page.getByRole("heading", { - name: /404|page not found/i + name: /404|page not found/i, }); expect( - await notFoundHeading.first().isVisible().catch(() => false), - `Route rendered 404 content: ${route}` + await notFoundHeading + .first() + .isVisible() + .catch(() => false), + `Route rendered 404 content: ${route}`, ).toBeFalsy(); await expect(page).toHaveScreenshot(routeToSnapshotName(route), { fullPage: true, - timeout: 20_000 + timeout: 20_000, }); }); }