Implemented HTML Tools (#240)
Co-authored-by: widlam <mikolaj.widla@gmail.com> Reviewed-on: #240 Reviewed-by: Adam Bem <bema@noreply.example.com> Co-authored-by: Mikolaj Widla <widlam@noreply.example.com> Co-committed-by: Mikolaj Widla <widlam@noreply.example.com>
This commit is contained in:
		
							
								
								
									
										14
									
								
								Frontend/src/assets/sampleHtml.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Frontend/src/assets/sampleHtml.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
			
		||||
    <title>Example Page</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
    <h1>Hello World!</h1>
 | 
			
		||||
    <p>That's paragraph</p>
 | 
			
		||||
    <br>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -4,7 +4,7 @@ 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 sampleHTML from "@assets/sampleHtml.html?raw"
 | 
			
		||||
 | 
			
		||||
const props = defineProps(
 | 
			
		||||
    {
 | 
			
		||||
@@ -32,7 +32,9 @@ function setDefault() {
 | 
			
		||||
        case "xquery":
 | 
			
		||||
            emit(emitName, sampleXQuery)
 | 
			
		||||
            break;
 | 
			
		||||
        
 | 
			
		||||
        case "html":
 | 
			
		||||
            emit(emitName,sampleHTML);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            emit(emitName, sampleXML)
 | 
			
		||||
            break;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,54 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
const props = defineProps(
 | 
			
		||||
    {
 | 
			
		||||
        formatType: {type:String,required:true},
 | 
			
		||||
        code: {type:String,required:true},
 | 
			
		||||
    }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
function chooseType(formatType: String){
 | 
			
		||||
    if (formatType == "XML Converter"){
 | 
			
		||||
        return "convert";
 | 
			
		||||
    }
 | 
			
		||||
    return formatType.toLowerCase();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getTypeInfo(){
 | 
			
		||||
    if( props.code.startsWith("<!DOCTYPE") ){
 | 
			
		||||
        return "html"
 | 
			
		||||
    }else{
 | 
			
		||||
        return "xml"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function createBody(){
 | 
			
		||||
    return JSON.stringify({
 | 
			
		||||
        "data": props.code,
 | 
			
		||||
        "process": getTypeInfo(),
 | 
			
		||||
        "processor": "libxml",
 | 
			
		||||
        "version": "1.0"
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const fetchLink = document.location.protocol + "//" + document.location.hostname + "/libxml/html/" + chooseType(props.formatType);
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits([
 | 
			
		||||
    'update:result'
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
function processResponse(formattedCode : any){
 | 
			
		||||
    var result = formattedCode.result;
 | 
			
		||||
    return result
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function process(){
 | 
			
		||||
    fetch(fetchLink, {body:createBody(), method: "POST"})
 | 
			
		||||
        .then( response => response.json() )
 | 
			
		||||
        .then( formattedCode => emit('update:result', processResponse(formattedCode) ) )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
<button class="tool-button" @click="process()">{{ formatType }}</button>
 | 
			
		||||
</template>
 | 
			
		||||
@@ -5,6 +5,7 @@ const restMock = import("@views/RestMockView.vue")
 | 
			
		||||
 | 
			
		||||
const jsonFormatter = import("@views/JsonFormatterView.vue")
 | 
			
		||||
const xmlFormatter = import("@views/XmlFormatterView.vue")
 | 
			
		||||
const HtmlFormatterView = import("@views/HtmlFormatterView.vue")
 | 
			
		||||
 | 
			
		||||
const xsltTool = import("@views/XSLTView.vue")
 | 
			
		||||
const xsdTool = import("@views/XSDView.vue")
 | 
			
		||||
@@ -27,6 +28,11 @@ const routes = [
 | 
			
		||||
    name: 'jsonFormatter',
 | 
			
		||||
    component: () => jsonFormatter
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: '/format/html',
 | 
			
		||||
    name: 'htmlFormatter',
 | 
			
		||||
    component: () => HtmlFormatterView
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: '/xml/xpath',
 | 
			
		||||
    name: 'xpath',
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								Frontend/src/views/HtmlFormatterView.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Frontend/src/views/HtmlFormatterView.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
 | 
			
		||||
import CodeEditorComponent from '@/components/CodeEditorComponent.vue';
 | 
			
		||||
import { ref } from 'vue';
 | 
			
		||||
import HtmlButtonFormatterComponent from '@/components/formatter/HtmlButtonFormatterComponent.vue';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const html = ref('');
 | 
			
		||||
 | 
			
		||||
function clear() {
 | 
			
		||||
    html.value = '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setTextFieldValue(data: string) {
 | 
			
		||||
    html.value = data.toString()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
    <div id="layout" class="flex flex-col w-full h-full gap-4">
 | 
			
		||||
        <div id="toolbar" class="flex flex-col gap-4 items-center lg:flex-row place-content-between">
 | 
			
		||||
            <span class="dark:text-slate-100">HTML Formatter</span>
 | 
			
		||||
            <div class="flex flex-wrap gap-2 justify-center">
 | 
			
		||||
                <InsertTemplateComponent stylized-name="HTML" @update:defaultData="setTextFieldValue"></InsertTemplateComponent>
 | 
			
		||||
                <button class="tool-button" @click="clear()">Clear</button>
 | 
			
		||||
                <HtmlButtonFormatterComponent @update:result="setTextFieldValue" :code="html" format-type="Minimize" />
 | 
			
		||||
                <HtmlButtonFormatterComponent @update:result="setTextFieldValue" :code="html" format-type="Prettify" />
 | 
			
		||||
                <HtmlButtonFormatterComponent @update:result="setTextFieldValue" :code="html" format-type="XML Converter" />
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <CodeEditorComponent @update:updated-code="setTextFieldValue" :code="html" :config="{disabled:false,language:'html'}" />
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
		Reference in New Issue
	
	Block a user