diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json index e01d0f7..839da8b 100644 --- a/Frontend/package-lock.json +++ b/Frontend/package-lock.json @@ -13,6 +13,7 @@ "@codemirror/lang-xml": "^6.0.2", "@codemirror/theme-one-dark": "^6.1.2", "codemirror": "^6.0.1", + "thememirror": "^2.0.1", "vue": "^3.3.4", "vue-codemirror": "^6.1.1", "vue-router": "^4.2.2" @@ -4305,6 +4306,16 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thememirror": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/thememirror/-/thememirror-2.0.1.tgz", + "integrity": "sha512-d5i6FVvWWPkwrm4cHLI3t9AT1OrkAt7Ig8dtdYSofgF7C/eiyNuq6zQzSTusWTde3jpW9WLvA9J/fzNKMUsd0w==", + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -7756,6 +7767,12 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thememirror": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/thememirror/-/thememirror-2.0.1.tgz", + "integrity": "sha512-d5i6FVvWWPkwrm4cHLI3t9AT1OrkAt7Ig8dtdYSofgF7C/eiyNuq6zQzSTusWTde3jpW9WLvA9J/fzNKMUsd0w==", + "requires": {} + }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", diff --git a/Frontend/package.json b/Frontend/package.json index a6ecef8..7663195 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -17,6 +17,7 @@ "@codemirror/lang-xml": "^6.0.2", "@codemirror/theme-one-dark": "^6.1.2", "codemirror": "^6.0.1", + "thememirror": "^2.0.1", "vue": "^3.3.4", "vue-codemirror": "^6.1.1", "vue-router": "^4.2.2" diff --git a/Frontend/src/components/CodeEditorComponent.vue b/Frontend/src/components/CodeEditorComponent.vue index c505405..4112d50 100644 --- a/Frontend/src/components/CodeEditorComponent.vue +++ b/Frontend/src/components/CodeEditorComponent.vue @@ -2,60 +2,72 @@ import { computed, ref } from 'vue' import { Codemirror } from 'vue-codemirror' import { oneDark } from '@codemirror/theme-one-dark' +import { espresso } from 'thememirror'; import {xml} from '@codemirror/lang-xml' import {json} from '@codemirror/lang-json' import {html} from '@codemirror/lang-html' +function isDarkModeSet(){ + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; +} - - const props= defineProps({ - code : { - type: String, - required: true +const props= defineProps({ + code : { + type: String, + required: true + }, + config: { + type: Object, + required: true }, - config: { - type: Object, - required: true - }, - }) +}) - const emit = defineEmits( - [ - 'update:updatedCode' - ] - ) +const emit = defineEmits( + [ + 'update:updatedCode' + ] +) - function dataUpdated(newData:String, viewUpdate : any){ - emit('update:updatedCode',newData) +function dataUpdated(newData:String, viewUpdate : any){ + emit('update:updatedCode',newData) +} + +function selectTheme() { + if (isDarkModeSet()) { + return oneDark; } + else { + return espresso; + } +} - const extensions = computed( ()=> { - return [ - oneDark, - parseLanguage(props.config.language), - ] +const extensions = computed( ()=> { + return [ + selectTheme(), + parseLanguage(props.config.language), + ] - } ) +} ) - function parseLanguage(name: String){ - switch(name.toUpperCase()){ - case "JSON": { - return json(); - } - case "HTML": { - return html(); - } - default: { - return xml(); - } +function parseLanguage(name: String){ + switch(name.toUpperCase()){ + case "JSON": { + return json(); + } + case "HTML": { + return html(); + } + default: { + return xml(); } } +}