Implemented functionality
This commit is contained in:
		@@ -1,12 +1,18 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import XMLButtonFormatterComponent from '@/components/formatter/XMLButtonFormatterComponent.vue';
 | 
			
		||||
import InsertDefaultComponent from '../xml/InsertDefaultComponent.vue';
 | 
			
		||||
 | 
			
		||||
defineProps({
 | 
			
		||||
  inputValue: {type: String, required: true}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="flex h-full"></div>
 | 
			
		||||
 | 
			
		||||
    <textarea name="data" id="data" class="text-field"></textarea>
 | 
			
		||||
  <div class="flex flex-col w-full h-full">
 | 
			
		||||
    
 | 
			
		||||
    <textarea name="data" id="data" :value="$props.inputValue" class="text-field"></textarea>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="flex h-full"></div>
 | 
			
		||||
 | 
			
		||||
    <textarea name="data" id="data" class="text-field"></textarea>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
@@ -0,0 +1,54 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
 | 
			
		||||
const props = defineProps({
 | 
			
		||||
    xml: {type: String, required: true}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits(["update:result"])
 | 
			
		||||
 | 
			
		||||
function process() {
 | 
			
		||||
    var request:Request = prepareRequest();
 | 
			
		||||
    fetchRequest(request).then((data) => {
 | 
			
		||||
        sendProcessedData(data);
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prepareRequest():Request {
 | 
			
		||||
    var request = new Request(prepareURL(), {
 | 
			
		||||
        body: prepareRequestBody(),
 | 
			
		||||
        method: "POST"
 | 
			
		||||
    });
 | 
			
		||||
    return request
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prepareURL(): string {
 | 
			
		||||
   return document.location.protocol + "//" + document.location.hostname + "/libxml/prettify";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prepareRequestBody():string {
 | 
			
		||||
    var requestBody = JSON.stringify({
 | 
			
		||||
        "data": props.xml,
 | 
			
		||||
        "process": "N/A",
 | 
			
		||||
        "processor": "libxml",
 | 
			
		||||
        "version": "1.0"
 | 
			
		||||
    });
 | 
			
		||||
    return requestBody;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function fetchRequest(request: Request):Promise<JSON> {
 | 
			
		||||
    var responseBody = await fetch(request)
 | 
			
		||||
    .then(response => response.json())
 | 
			
		||||
    .then((body) => body);
 | 
			
		||||
    return responseBody;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sendProcessedData(data: JSON) {
 | 
			
		||||
    emit("update:result", data);
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
    <button class="tool-button" @click="process()">Format XML</button>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
							
								
								
									
										44
									
								
								Frontend/src/components/xml/InsertDefaultComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								Frontend/src/components/xml/InsertDefaultComponent.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
 | 
			
		||||
import sampleXML from "@/assets/sampleXml.xml?raw"
 | 
			
		||||
import sampleXSLT from "@/assets/sampleXslt.xml?raw"
 | 
			
		||||
import sampleXSD from "@/assets/sampleXsd.xml?raw"
 | 
			
		||||
import sampleXQuery from "@/assets/sampleXQuery.xquery?raw"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const props = defineProps(
 | 
			
		||||
    {
 | 
			
		||||
        prettyName: {type: String, required: true}
 | 
			
		||||
    }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits(['update:defaultData'])
 | 
			
		||||
 | 
			
		||||
function setDefault() {
 | 
			
		||||
    const emitName = "update:defaultData";
 | 
			
		||||
    switch (props.prettyName.toLowerCase()) {
 | 
			
		||||
        case "xpath":
 | 
			
		||||
            emit(emitName, "string(/l:library/l:libraryName)")
 | 
			
		||||
            break;
 | 
			
		||||
        case "xsd":
 | 
			
		||||
            emit(emitName, sampleXSD)
 | 
			
		||||
            break;
 | 
			
		||||
        case "xslt":
 | 
			
		||||
            emit(emitName, sampleXSLT)
 | 
			
		||||
            break;
 | 
			
		||||
        case "xquery":
 | 
			
		||||
            emit(emitName, sampleXQuery)
 | 
			
		||||
            break;
 | 
			
		||||
        
 | 
			
		||||
        default:
 | 
			
		||||
            emit(emitName, sampleXML)
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
    <button class="tool-button" @click="setDefault()">Insert default {{ prettyName }}</button>
 | 
			
		||||
</template>
 | 
			
		||||
@@ -1,10 +1,6 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
 | 
			
		||||
import sampleXML from "@/assets/sampleXml.xml?raw"
 | 
			
		||||
import sampleXSLT from "@/assets/sampleXslt.xml?raw"
 | 
			
		||||
import sampleXSD from "@/assets/sampleXsd.xml?raw"
 | 
			
		||||
import sampleXQuery from "@/assets/sampleXQuery.xquery?raw"
 | 
			
		||||
 | 
			
		||||
import InsertDefaultComponent from "./InsertDefaultComponent.vue"
 | 
			
		||||
 | 
			
		||||
const props = defineProps(
 | 
			
		||||
    {
 | 
			
		||||
@@ -14,27 +10,9 @@ const props = defineProps(
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits(['update:defaultData'])
 | 
			
		||||
 | 
			
		||||
function setDefault() {
 | 
			
		||||
function setDefault(data: string) {
 | 
			
		||||
    const emitName = "update:defaultData";
 | 
			
		||||
    switch (props.prettyName.toLowerCase()) {
 | 
			
		||||
        case "xpath":
 | 
			
		||||
            emit(emitName, "string(/l:library/l:libraryName)")
 | 
			
		||||
            break;
 | 
			
		||||
        case "xsd":
 | 
			
		||||
            emit(emitName, sampleXSD)
 | 
			
		||||
            break;
 | 
			
		||||
        case "xslt":
 | 
			
		||||
            emit(emitName, sampleXSLT)
 | 
			
		||||
            break;
 | 
			
		||||
        case "xquery":
 | 
			
		||||
            emit(emitName, sampleXQuery)
 | 
			
		||||
            break;
 | 
			
		||||
        
 | 
			
		||||
        default:
 | 
			
		||||
            emit(emitName, sampleXML)
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    emit(emitName, data)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
@@ -43,7 +21,7 @@ function setDefault() {
 | 
			
		||||
    <div class="flex place-content-between w-full pr-2 items-center m-2">
 | 
			
		||||
        <span class="dark:text-white">{{ prettyName }}</span>
 | 
			
		||||
        <div class="flex space-x-2">
 | 
			
		||||
            <button class="tool-button" @click="setDefault()">Insert default {{ prettyName }}</button>
 | 
			
		||||
            <InsertDefaultComponent :pretty-name="props.prettyName" @update:default-data="(data) => setDefault(data)"></InsertDefaultComponent>
 | 
			
		||||
        </div>
 | 
			
		||||
        
 | 
			
		||||
    </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,31 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import InputFormatterComponent from '@/components/formatter/InputFormatterComponent.vue';
 | 
			
		||||
import xmlOutputFieldComponent from '@/components/xml/XmlOutputFieldComponent.vue';
 | 
			
		||||
import XMLButtonFormatterComponent from '@/components/formatter/XMLButtonFormatterComponent.vue';
 | 
			
		||||
import InsertDefaultComponent from '@components/xml/InsertDefaultComponent.vue';
 | 
			
		||||
import { ref } from 'vue';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const xml = ref('');
 | 
			
		||||
const query = ref('');
 | 
			
		||||
 | 
			
		||||
function setTextFieldValue(data: any) {
 | 
			
		||||
    xml.value = data
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function format(formattedXml: any) {
 | 
			
		||||
    xml.value = formattedXml.result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
    <div id="layout" class="flex flex-col lg:flex-row w-full h-full gap-4">
 | 
			
		||||
        <InputFormatterComponent></InputFormatterComponent>
 | 
			
		||||
    <div id="layout" class="flex flex-col w-full h-full gap-4">
 | 
			
		||||
        <div id="toolbar" class= "flex flex-col gap-4 items-center md:flex-row place-content-between">
 | 
			
		||||
            <span class="dark:text-slate-100">XML Formatter</span>
 | 
			
		||||
            <div class="space-x-2">
 | 
			
		||||
                <InsertDefaultComponent pretty-name="XML" @update:defaultData="(data: any) => setTextFieldValue(data)"></InsertDefaultComponent>
 | 
			
		||||
                <XMLButtonFormatterComponent :xml="xml" @update:result="(data: any) => format(data)"></XMLButtonFormatterComponent>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <InputFormatterComponent :inputValue="xml"></InputFormatterComponent>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
		Reference in New Issue
	
	Block a user