implemented synthax highlightingo
This commit is contained in:
3915
Frontend/package-lock.json
generated
3915
Frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -12,8 +12,13 @@
|
|||||||
"format": "prettier --write src/"
|
"format": "prettier --write src/"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"hljs": "^6.2.3",
|
"@codemirror/lang-html": "^6.4.5",
|
||||||
|
"@codemirror/lang-json": "^6.0.1",
|
||||||
|
"@codemirror/lang-xml": "^6.0.2",
|
||||||
|
"@codemirror/theme-one-dark": "^6.1.2",
|
||||||
|
"codemirror": "^6.0.1",
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
|
"vue-codemirror": "^6.1.1",
|
||||||
"vue-router": "^4.2.2"
|
"vue-router": "^4.2.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
58
Frontend/src/components/CodeEditorComponent.vue
Normal file
58
Frontend/src/components/CodeEditorComponent.vue
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { computed, ref } from 'vue'
|
||||||
|
import { Codemirror } from 'vue-codemirror'
|
||||||
|
import { oneDark } from '@codemirror/theme-one-dark'
|
||||||
|
import {xml} from '@codemirror/lang-xml'
|
||||||
|
import {json} from '@codemirror/lang-json'
|
||||||
|
import {html} from '@codemirror/lang-html'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const props= defineProps({
|
||||||
|
code : {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
config: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const extensions = computed( ()=> {
|
||||||
|
return [
|
||||||
|
oneDark,
|
||||||
|
parseLanguage(props.config.language),
|
||||||
|
]
|
||||||
|
|
||||||
|
} )
|
||||||
|
|
||||||
|
function parseLanguage(name: String){
|
||||||
|
switch(name.toUpperCase()){
|
||||||
|
case "JSON": {
|
||||||
|
return json();
|
||||||
|
}
|
||||||
|
case "HTML": {
|
||||||
|
return html();
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
return xml();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="editor h-full overflow-scroll">
|
||||||
|
|
||||||
|
<codemirror
|
||||||
|
style="height: 100%; padding:0.5rem ; border-radius: 0.5rem"
|
||||||
|
:model-value="code"
|
||||||
|
:extensions="extensions"
|
||||||
|
:disabled="config.disabled"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -1,15 +1,18 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import CodeEditorComponent from '../CodeEditorComponent.vue';
|
||||||
|
|
||||||
|
|
||||||
const props = defineProps(
|
const props = defineProps(
|
||||||
{
|
{
|
||||||
data: {required: true, type: String}
|
data: {required: true, type: String},
|
||||||
|
contentType: {required:true,type:String},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span class="text-white text-center h-screen overflow-x-scroll ">
|
<CodeEditorComponent :code="props.data" :config='{disabled:true, language:props.contentType.replace("application/","")}' />
|
||||||
{{ props.data.replace(/\\n/g,"") }}
|
|
||||||
</span>
|
|
||||||
</template>
|
</template>
|
||||||
@@ -7,8 +7,9 @@ import HeadersDetailComponent from './HeadersDetailComponent.vue';
|
|||||||
const shownDetail = ref('none');
|
const shownDetail = ref('none');
|
||||||
const currentShownData = ref('');
|
const currentShownData = ref('');
|
||||||
const currentIndex = ref(-1);
|
const currentIndex = ref(-1);
|
||||||
|
const currentContentType = ref('application/json');
|
||||||
|
|
||||||
function showBody(body : string, index: number){
|
function showBody(body : string, index: number, contentType : string){
|
||||||
if( currentIndex.value == index && shownDetail.value == "body" ){
|
if( currentIndex.value == index && shownDetail.value == "body" ){
|
||||||
shownDetail.value = "none";
|
shownDetail.value = "none";
|
||||||
} else {
|
} else {
|
||||||
@@ -16,6 +17,7 @@ function showBody(body : string, index: number){
|
|||||||
shownDetail.value = "body";
|
shownDetail.value = "body";
|
||||||
currentShownData.value = body;
|
currentShownData.value = body;
|
||||||
}
|
}
|
||||||
|
currentContentType.value = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showHeaders(headers: object, index: number){
|
function showHeaders(headers: object, index: number){
|
||||||
@@ -34,7 +36,7 @@ function showHeaders(headers: object, index: number){
|
|||||||
<template>
|
<template>
|
||||||
<div class="w-full xl:w-5/12 flex flex-col gap-y-4">
|
<div class="w-full xl:w-5/12 flex flex-col gap-y-4">
|
||||||
<HistoryRecords class="h-1/3 overflow-y-scroll" @click:show-headers="showHeaders" @click:show-body="showBody"></HistoryRecords>
|
<HistoryRecords class="h-1/3 overflow-y-scroll" @click:show-headers="showHeaders" @click:show-body="showBody"></HistoryRecords>
|
||||||
<BodyDetailComponent :data="currentShownData" v-if="shownDetail == 'body' "></BodyDetailComponent>
|
<BodyDetailComponent :content-type="currentContentType" :data="currentShownData" v-if="shownDetail == 'body' "></BodyDetailComponent>
|
||||||
<HeadersDetailComponent :data="currentShownData" v-if="shownDetail == 'headers' "></HeadersDetailComponent>
|
<HeadersDetailComponent :data="currentShownData" v-if="shownDetail == 'headers' "></HeadersDetailComponent>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -4,11 +4,16 @@ import {ref, type Ref } from 'vue';
|
|||||||
interface historyRecord {
|
interface historyRecord {
|
||||||
clientUUID : String,
|
clientUUID : String,
|
||||||
dateTimeStamp: String,
|
dateTimeStamp: String,
|
||||||
headers : Object,
|
headers : Headers ,
|
||||||
httpMethod: String,
|
httpMethod: String,
|
||||||
requestBody: String
|
requestBody: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Headers {
|
||||||
|
'content-type': String,
|
||||||
|
[propName: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
'click:showHeaders',
|
'click:showHeaders',
|
||||||
'click:showBody',
|
'click:showBody',
|
||||||
@@ -28,9 +33,9 @@ function showHeaders(headers: Object, index : number){
|
|||||||
emit('click:showHeaders',headers, index)
|
emit('click:showHeaders',headers, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
function showBody(body: String , index : number){
|
function showBody(body: String , index : number, contentType: String){
|
||||||
console.log(body)
|
|
||||||
emit('click:showBody',body, index)
|
emit('click:showBody',body, index, contentType )
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshHistory(){
|
function refreshHistory(){
|
||||||
@@ -54,7 +59,7 @@ function refreshHistory(){
|
|||||||
<td> {{ item.httpMethod }} </td>
|
<td> {{ item.httpMethod }} </td>
|
||||||
<td> <button @click="showHeaders(item.headers, index)">Show Headers</button> </td>
|
<td> <button @click="showHeaders(item.headers, index)">Show Headers</button> </td>
|
||||||
<td>
|
<td>
|
||||||
<button v-if="item.requestBody.length != 0" @click="showBody(item.requestBody, index)">Show Body</button>
|
<button v-if="item.requestBody.length != 0" @click="showBody(item.requestBody, index, item.headers['content-type'])">Show Body</button>
|
||||||
<span v-else>Empty Body</span>
|
<span v-else>Empty Body</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import {ref, type Ref} from 'vue';
|
import {ref, type Ref} from 'vue';
|
||||||
import HeadersComponent from './HeadersComponent.vue';
|
import HeadersComponent from './HeadersComponent.vue';
|
||||||
import SaveComponent from './SaveComponent.vue';
|
import SaveComponent from './SaveComponent.vue';
|
||||||
|
import CodeEditorComponent from '../CodeEditorComponent.vue';
|
||||||
|
|
||||||
const clientUUID = ref('');
|
const clientUUID = ref('');
|
||||||
const host = window.location.protocol + "//" + window.location.hostname + "/mock";
|
const host = window.location.protocol + "//" + window.location.hostname + "/mock";
|
||||||
@@ -39,7 +40,7 @@ function putDataInFields(data: mockedMessageData){
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col w-full xl:w-3/5 text-center dark:text-white gap-6">
|
<div class="flex overflow-y-scroll flex-col w-full xl:w-3/5 text-center dark:text-white gap-6">
|
||||||
<div>
|
<div>
|
||||||
<label for="link">Link</label><br/>
|
<label for="link">Link</label><br/>
|
||||||
<div class="flex gap-4">
|
<div class="flex gap-4">
|
||||||
@@ -61,9 +62,9 @@ function putDataInFields(data: mockedMessageData){
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col">
|
<div class="flex text-left flex-col overflow-scroll h-3/4">
|
||||||
<label for="messageBody">Body</label>
|
<label for="messageBody text-center">Body</label>
|
||||||
<textarea class="text-field h-64" id="messageBody" v-model="messageData.messageBody"></textarea>
|
<CodeEditorComponent :config="{disabled:false,language:messageData.contentType}" :code="messageData.messageBody" id="messageBody"></CodeEditorComponent>
|
||||||
</div>
|
</div>
|
||||||
<HeadersComponent @update:httpHeaders="(newHeaders: object) => {messageData.httpHeaders = newHeaders }" :key="JSON.stringify(messageData.httpHeaders)" :headers-object="messageData.httpHeaders"></HeadersComponent>
|
<HeadersComponent @update:httpHeaders="(newHeaders: object) => {messageData.httpHeaders = newHeaders }" :key="JSON.stringify(messageData.httpHeaders)" :headers-object="messageData.httpHeaders"></HeadersComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
||||||
import XMLButtonFormatterComponent from '@components/formatter/XMLButtonFormatterComponent.vue'
|
import XMLButtonFormatterComponent from '@components/formatter/XMLButtonFormatterComponent.vue'
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
import CodeEditor from '../CodeEditorComponent.vue';
|
||||||
|
|
||||||
const data = ref('')
|
const data = ref('')
|
||||||
|
|
||||||
@@ -14,6 +15,7 @@ const props = defineProps(
|
|||||||
const emit = defineEmits(['update'])
|
const emit = defineEmits(['update'])
|
||||||
|
|
||||||
function sendValue() {
|
function sendValue() {
|
||||||
|
console.log("input works")
|
||||||
emit('update', data.value)
|
emit('update', data.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,6 +46,7 @@ function canBeFormatted() {
|
|||||||
<button class="tool-button" @click="clear">Clear</button>
|
<button class="tool-button" @click="clear">Clear</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="xmlField" v-model="data" @input="sendValue()" class="text-field h-full"></textarea>
|
<!-- <textarea id="xmlField" v-model="data" @input="sendValue()" class="text-field h-full"></textarea> -->
|
||||||
|
<CodeEditor @input="sendValue()" v-model="data" :code="data" :config="{disabled:false, language:stylizedName}"></CodeEditor>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
|
import CodeEditor from '../CodeEditorComponent.vue';
|
||||||
|
|
||||||
|
|
||||||
const props = defineProps(
|
const props = defineProps(
|
||||||
@@ -136,7 +137,8 @@ function clear() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-field overflow-scroll h-full w-full">
|
<div class="text-field overflow-scroll h-full w-full">
|
||||||
<pre class="whitespace-pre-wrap"><code>{{ result }}</code></pre>
|
<!-- <pre class="whitespace-pre-wrap"><code>{{ result }}</code></pre> -->
|
||||||
|
<CodeEditor :code="result" :config="{disabled:true,language:tool}"></CodeEditor>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import CodeEditorComponent from '@/components/CodeEditorComponent.vue';
|
||||||
import JsonButtonFormatterComponent from '@/components/formatter/JsonButtonFormatterComponent.vue';
|
import JsonButtonFormatterComponent from '@/components/formatter/JsonButtonFormatterComponent.vue';
|
||||||
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
@@ -31,6 +32,6 @@ function clear() {
|
|||||||
<JsonButtonFormatterComponent :json="json" @update:result="(data: any) => format(data)"></JsonButtonFormatterComponent>
|
<JsonButtonFormatterComponent :json="json" @update:result="(data: any) => format(data)"></JsonButtonFormatterComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea name="data" id="data" :value="json" class="text-field h-full"></textarea>
|
<CodeEditorComponent :code="json" :config="{disabled:false,language:'json'}" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import XMLButtonFormatterComponent from '@/components/formatter/XMLButtonFormatterComponent.vue';
|
import XMLButtonFormatterComponent from '@/components/formatter/XMLButtonFormatterComponent.vue';
|
||||||
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
import InsertTemplateComponent from '@components/common/InsertTemplateComponent.vue';
|
||||||
|
import CodeEditorComponent from '@/components/CodeEditorComponent.vue';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
@@ -31,6 +32,6 @@ function clear() {
|
|||||||
<XMLButtonFormatterComponent :xml="xml" @update:result="(data: any) => format(data)"></XMLButtonFormatterComponent>
|
<XMLButtonFormatterComponent :xml="xml" @update:result="(data: any) => format(data)"></XMLButtonFormatterComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea name="data" id="data" :value="xml" class="text-field h-full"></textarea>
|
<CodeEditorComponent :code="xml" :config="{disabled:false,language:'xml'}" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
Reference in New Issue
Block a user