From 83328e637c8fc38e227881d6dad2d2a4a7b19325 Mon Sep 17 00:00:00 2001 From: Benedikt Seeger <benedikt.seeger@ptb.de> Date: Fri, 21 Feb 2025 17:50:19 +0100 Subject: [PATCH] added expanded project minimal files --- dcc-viewer/.idea/.gitignore | 8 ++++++++ dcc-viewer/.idea/dcc-viewer.iml | 12 +++++++++++ .../inspectionProfiles/Project_Default.xml | 15 ++++++++++++++ dcc-viewer/.idea/modules.xml | 8 ++++++++ dcc-viewer/.idea/vcs.xml | 6 ++++++ dcc-viewer/package.json | 6 ++++++ dcc-viewer/public/index.html | 18 +++++++++++++++++ dcc-viewer/public/styles.css | 2 ++ dcc-viewer/src/components/BaseViewer.ts | 7 +++++++ dcc-viewer/src/components/JSONTreeViewer.ts | 9 +++++++++ dcc-viewer/src/globalData.ts | 1 + dcc-viewer/src/globalOptions.ts | 1 + dcc-viewer/src/idRegistry.ts | 1 + dcc-viewer/src/main.ts | 20 +++++++++++++++++++ dcc-viewer/src/ui/languageSelector.ts | 6 ++++++ dcc-viewer/src/ui/themeSwitcher.ts | 4 ++++ dcc-viewer/src/utils.ts | 4 ++++ dcc-viewer/src/viewerRegistry.ts | 5 +++++ dcc-viewer/src/xmlToJson.ts | 5 +++++ dcc-viewer/tsconfig.json | 1 + project_structure.json | 2 +- 21 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 dcc-viewer/.idea/.gitignore create mode 100644 dcc-viewer/.idea/dcc-viewer.iml create mode 100644 dcc-viewer/.idea/inspectionProfiles/Project_Default.xml create mode 100644 dcc-viewer/.idea/modules.xml create mode 100644 dcc-viewer/.idea/vcs.xml create mode 100644 dcc-viewer/package.json create mode 100644 dcc-viewer/public/index.html create mode 100644 dcc-viewer/public/styles.css create mode 100644 dcc-viewer/src/components/BaseViewer.ts create mode 100644 dcc-viewer/src/components/JSONTreeViewer.ts create mode 100644 dcc-viewer/src/globalData.ts create mode 100644 dcc-viewer/src/globalOptions.ts create mode 100644 dcc-viewer/src/idRegistry.ts create mode 100644 dcc-viewer/src/main.ts create mode 100644 dcc-viewer/src/ui/languageSelector.ts create mode 100644 dcc-viewer/src/ui/themeSwitcher.ts create mode 100644 dcc-viewer/src/utils.ts create mode 100644 dcc-viewer/src/viewerRegistry.ts create mode 100644 dcc-viewer/src/xmlToJson.ts create mode 100644 dcc-viewer/tsconfig.json diff --git a/dcc-viewer/.idea/.gitignore b/dcc-viewer/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/dcc-viewer/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/dcc-viewer/.idea/dcc-viewer.iml b/dcc-viewer/.idea/dcc-viewer.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/dcc-viewer/.idea/dcc-viewer.iml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="WEB_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.tmp" /> + <excludeFolder url="file://$MODULE_DIR$/temp" /> + <excludeFolder url="file://$MODULE_DIR$/tmp" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml b/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..798a81f --- /dev/null +++ b/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,15 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true"> + <option name="ignoredPackages"> + <value> + <list size="1"> + <item index="0" class="java.lang.String" itemvalue="bokeh" /> + </list> + </value> + </option> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/dcc-viewer/.idea/modules.xml b/dcc-viewer/.idea/modules.xml new file mode 100644 index 0000000..7342473 --- /dev/null +++ b/dcc-viewer/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/dcc-viewer.iml" filepath="$PROJECT_DIR$/.idea/dcc-viewer.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/dcc-viewer/.idea/vcs.xml b/dcc-viewer/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/dcc-viewer/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/dcc-viewer/package.json b/dcc-viewer/package.json new file mode 100644 index 0000000..019e6c9 --- /dev/null +++ b/dcc-viewer/package.json @@ -0,0 +1,6 @@ +{ + "name": "dcc-viewer", + "version": "1.0.0", + "scripts": { "dev": "vite" }, + "dependencies": { "xml2js": "^0.4.23" } +} \ No newline at end of file diff --git a/dcc-viewer/public/index.html b/dcc-viewer/public/index.html new file mode 100644 index 0000000..e363a2d --- /dev/null +++ b/dcc-viewer/public/index.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html lang='en'> +<head> + <meta charset='UTF-8'> + <title>DCC Viewer</title> + <script type='module' src='dist/main.js'></script> + <link rel='stylesheet' href='styles.css'> +</head> +<body> + <input type='file' id='file-input' accept='.xml'> + <button id='theme-toggle'>Toggle Theme</button> + <select id='language-select'> + <option value='en'>English</option> + <option value='de'>German</option> + </select> + <div id='json-container'></div> +</body> +</html> \ No newline at end of file diff --git a/dcc-viewer/public/styles.css b/dcc-viewer/public/styles.css new file mode 100644 index 0000000..732e263 --- /dev/null +++ b/dcc-viewer/public/styles.css @@ -0,0 +1,2 @@ +body { font-family: Arial, sans-serif; } +.dark-mode { background-color: black; color: white; } \ No newline at end of file diff --git a/dcc-viewer/src/components/BaseViewer.ts b/dcc-viewer/src/components/BaseViewer.ts new file mode 100644 index 0000000..9837734 --- /dev/null +++ b/dcc-viewer/src/components/BaseViewer.ts @@ -0,0 +1,7 @@ +export abstract class BaseViewer { + protected sectionData: any; + constructor(sectionData: any) { + this.sectionData = sectionData; + } + abstract render(): HTMLElement; +} \ No newline at end of file diff --git a/dcc-viewer/src/components/JSONTreeViewer.ts b/dcc-viewer/src/components/JSONTreeViewer.ts new file mode 100644 index 0000000..ef06785 --- /dev/null +++ b/dcc-viewer/src/components/JSONTreeViewer.ts @@ -0,0 +1,9 @@ +import { BaseViewer } from './BaseViewer'; + +export class JSONTreeViewer extends BaseViewer { + render(): HTMLElement { + const container = document.createElement('pre'); + container.textContent = JSON.stringify(this.sectionData, null, 2); + return container; + } +} \ No newline at end of file diff --git a/dcc-viewer/src/globalData.ts b/dcc-viewer/src/globalData.ts new file mode 100644 index 0000000..8bc8fad --- /dev/null +++ b/dcc-viewer/src/globalData.ts @@ -0,0 +1 @@ +export const globalData: { [key: string]: any } = {}; \ No newline at end of file diff --git a/dcc-viewer/src/globalOptions.ts b/dcc-viewer/src/globalOptions.ts new file mode 100644 index 0000000..09c0db1 --- /dev/null +++ b/dcc-viewer/src/globalOptions.ts @@ -0,0 +1 @@ +export const globalOptions = { preferredLanguage: 'en' }; \ No newline at end of file diff --git a/dcc-viewer/src/idRegistry.ts b/dcc-viewer/src/idRegistry.ts new file mode 100644 index 0000000..e98ebab --- /dev/null +++ b/dcc-viewer/src/idRegistry.ts @@ -0,0 +1 @@ +export const idRegistry: { [id: string]: any } = {}; \ No newline at end of file diff --git a/dcc-viewer/src/main.ts b/dcc-viewer/src/main.ts new file mode 100644 index 0000000..76059c7 --- /dev/null +++ b/dcc-viewer/src/main.ts @@ -0,0 +1,20 @@ +import { convertXMLToJSON } from './xmlToJson'; +import { JSONTreeViewer } from './components/JSONTreeViewer'; + +const fileInput = document.getElementById('file-input') as HTMLInputElement; +const container = document.getElementById('json-container') as HTMLElement; + +fileInput.addEventListener('change', async (event) => { + const file = (event.target as HTMLInputElement).files?.[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = async () => { + const xmlString = reader.result as string; + const jsonData = await convertXMLToJSON(xmlString); + const viewer = new JSONTreeViewer(jsonData); + container.innerHTML = ''; + container.appendChild(viewer.render()); + }; + reader.readAsText(file); +}); \ No newline at end of file diff --git a/dcc-viewer/src/ui/languageSelector.ts b/dcc-viewer/src/ui/languageSelector.ts new file mode 100644 index 0000000..0854c83 --- /dev/null +++ b/dcc-viewer/src/ui/languageSelector.ts @@ -0,0 +1,6 @@ +import { globalOptions } from '../globalOptions'; + +const languageSelect = document.getElementById('language-select') as HTMLSelectElement; +languageSelect.addEventListener('change', (event) => { + globalOptions.preferredLanguage = (event.target as HTMLSelectElement).value; +}); \ No newline at end of file diff --git a/dcc-viewer/src/ui/themeSwitcher.ts b/dcc-viewer/src/ui/themeSwitcher.ts new file mode 100644 index 0000000..931533f --- /dev/null +++ b/dcc-viewer/src/ui/themeSwitcher.ts @@ -0,0 +1,4 @@ +const themeToggle = document.getElementById('theme-toggle') as HTMLButtonElement; +themeToggle.addEventListener('click', () => { + document.body.classList.toggle('dark-mode'); +}); \ No newline at end of file diff --git a/dcc-viewer/src/utils.ts b/dcc-viewer/src/utils.ts new file mode 100644 index 0000000..fb95467 --- /dev/null +++ b/dcc-viewer/src/utils.ts @@ -0,0 +1,4 @@ +export function getLocalizedText(elements: any[]): string { + if (!Array.isArray(elements)) return elements; + return elements[0]._ || ''; +} \ No newline at end of file diff --git a/dcc-viewer/src/viewerRegistry.ts b/dcc-viewer/src/viewerRegistry.ts new file mode 100644 index 0000000..6e6b15a --- /dev/null +++ b/dcc-viewer/src/viewerRegistry.ts @@ -0,0 +1,5 @@ +import { JSONTreeViewer } from './components/JSONTreeViewer'; + +export function getViewerForElement(): any { + return JSONTreeViewer; +} \ No newline at end of file diff --git a/dcc-viewer/src/xmlToJson.ts b/dcc-viewer/src/xmlToJson.ts new file mode 100644 index 0000000..03506aa --- /dev/null +++ b/dcc-viewer/src/xmlToJson.ts @@ -0,0 +1,5 @@ +import { parseStringPromise } from 'xml2js'; + +export async function convertXMLToJSON(xmlString: string): Promise<any> { + return parseStringPromise(xmlString, { explicitArray: false, mergeAttrs: true }); +} \ No newline at end of file diff --git a/dcc-viewer/tsconfig.json b/dcc-viewer/tsconfig.json new file mode 100644 index 0000000..ff383c8 --- /dev/null +++ b/dcc-viewer/tsconfig.json @@ -0,0 +1 @@ +{ "compilerOptions": { "target": "ES6", "module": "ES6", "outDir": "dist" } } \ No newline at end of file diff --git a/project_structure.json b/project_structure.json index 854fa90..ec74642 100644 --- a/project_structure.json +++ b/project_structure.json @@ -22,6 +22,6 @@ "styles.css": "body { font-family: Arial, sans-serif; }\n.dark-mode { background-color: black; color: white; }" }, "package.json": "{\n \"name\": \"dcc-viewer\",\n \"version\": \"1.0.0\",\n \"scripts\": { \"dev\": \"vite\" },\n \"dependencies\": { \"xml2js\": \"^0.4.23\" }\n}", - "tsconfig.json": "{ \"compilerOptions\": { \"target\": \"ES6\", \"module\": \"ES6\", \"outDir\": \"dist\" } }", + "tsconfig.json": "{ \"compilerOptions\": { \"target\": \"ES6\", \"module\": \"ES6\", \"outDir\": \"dist\" } }" } } -- GitLab