Created XSLT Tooltips (#243)

Co-authored-by: widlam <mikolaj.widla@gmail.com>
Reviewed-on: #243
This commit is contained in:
2023-08-28 14:55:04 +02:00
parent a78f3bd52b
commit 33508b7383
9 changed files with 3063 additions and 29 deletions

View File

@@ -7,6 +7,8 @@ import xpath1 from '@/assets/tooltips/xpath/xpath1.json';
import xpath2 from '@/assets/tooltips/xpath/xpath2.json';
import xpath3 from '@/assets/tooltips/xpath/xpath3.json';
import xpath31 from '@/assets/tooltips/xpath/xpath31.json';
import xslt1 from '@/assets/tooltips/xslt/xslt1.json';
import xslt3 from '@/assets/tooltips/xslt/xslt3.json'
import TooltipDiffsComponent from './TooltipDiffsComponent.vue';
@@ -14,13 +16,18 @@ const props = defineProps({
version: {
type: String,
required: true
},
toolType: {
type: String,
required: true
}
})
const areTooltipsHidden = ref(true)
function selectXPathVersion() {
switch(props.version) {
function selectTooltip() {
if(props.toolType == "xpath"){
switch(props.version) {
case "1.0":
return xpath1;
case "2.0":
@@ -31,6 +38,17 @@ function selectXPathVersion() {
default:
return xpath31;
}
} else {
switch(props.version){
case "1.0":{
return xslt1;
}
case "3.0":{
return xslt3;
}
}
}
}
function toggleTooltips() {
@@ -45,10 +63,10 @@ function toggleTooltips() {
T<br/>o<br/>o<br/>l<br/>t<br/>i<br/>p<br/>s
</button>
<div id="content" :class="{'hidden' : areTooltipsHidden}" class="w-full flex flex-col gap-4 p-2 overflow-scroll rounded-xl dark:text-white bg-indigo-50 dark:bg-slate-800" >
<TooltipDiffsComponent tool-name="XPath" :tool-version="props.version"></TooltipDiffsComponent>
<TooltipDiffsComponent :tool-name="toolType" :tool-version="props.version"></TooltipDiffsComponent>
<div class="w-full h-2"> </div>
<tooltipCategoryComponent v-for="category in selectXPathVersion()" :name="category.name">
<tooltipEntryComponent v-for="entry in category.entries" :entry-data="entry"></tooltipEntryComponent>
<tooltipCategoryComponent v-for="category in selectTooltip()" :key="category.name" :name="category.name">
<tooltipEntryComponent :tool="toolType" v-for="entry in category.entries" :key="entry.name" :entry-data="entry"></tooltipEntryComponent>
</tooltipCategoryComponent>
</div>
</div>

View File

@@ -1,12 +1,17 @@
<script setup lang="ts">
import xpathDiffs from '@/assets/tooltips/xpath/xpathdiffs.json';
import { ref } from 'vue';
import xsltDiffs from '@/assets/tooltips/xslt/xsltdiffs.json';
import TooltipCategoryComponent from './TooltipCategoryComponent.vue';
const isEntryHidden = ref(true)
const props = defineProps({
toolName: {type: String, required: true},
toolVersion: {type: String, required: true}
})
function getDiffEntry(toolVersion : String) : string[] {
switch(toolVersion){
if ( props.toolName == "xpath" ){
switch(toolVersion){
case "2.0" : {
return xpathDiffs.VersionDiffs[0].diffs
}
@@ -17,32 +22,49 @@ function getDiffEntry(toolVersion : String) : string[] {
return xpathDiffs.VersionDiffs[2].diffs
}
default: {
return xpathDiffs.VersionDiffs[0].diffs
return xpathDiffs.VersionDiffs[2].diffs
}
}
} else if (props.toolName == "xslt") {
return ["XSLT 2.0"].concat(xsltDiffs.VersionDiffs[0].diffs).concat(["XSLT 3.0"]).concat(xsltDiffs.VersionDiffs[1].diffs) ;
} else{
return ["foo"]
}
}
function getInfo(num : number ){
if(props.toolName == "xslt"){
return xsltDiffs.universalInfo[num]
} else{
return xpathDiffs.universalInfo[num]
}
}
const props = defineProps({
toolName: {type: String, required: true},
toolVersion: {type: String, required: true}
})
</script>
<template>
<TooltipCategoryComponent :name="xpathDiffs.universalInfo[0].category">
<TooltipCategoryComponent :name="getInfo(0).category">
<span class="text-center">
{{ xpathDiffs.universalInfo[0].description }}
{{ getInfo(0).description }}
</span>
</TooltipCategoryComponent>
<TooltipCategoryComponent v-if="toolVersion !== '1.0'" :name="'What\'s new in ' + toolName + ' ' + toolVersion ">
<TooltipCategoryComponent v-if="toolVersion !== '1.0'" :name="getInfo(1).category">
<span v-for=" diff in getDiffEntry(toolVersion)" v-bind:key="diff" class=" text-justify" >
* {{ diff }}
<div class="w-full h-4 text-center" v-if="diff.includes('XSLT')">
------------ {{ diff }} ------------
</div>
<span v-else>
* {{ diff }}
</span>
</span>
</TooltipCategoryComponent>

View File

@@ -3,7 +3,8 @@ import { ref } from 'vue';
const isEntryHidden = ref(true)
const props = defineProps({
entryData: {type: Object, required: true}
entryData: {type: Object, required: true},
tool:{type: String, required:true}
})
function toggleTooltips() {
@@ -11,7 +12,11 @@ function toggleTooltips() {
}
function entryHasArguments() {
return props.entryData.arguments.length > 0;
if("attributes" in props.entryData){
return props.entryData.attributes.length > 0;
} else if("arguments" in props.entryData){
return props.entryData.arguments.length > 0;
}
}
function entryHasExamples() {
@@ -50,18 +55,36 @@ function interpretXPathIndicators( elementType:string ):string {
{{ props.entryData.description }}
</p>
</span>
<h4 class="text-xl mt-4 mb-2 font-bold">Args and Output</h4>
<div id="xpathArgTooltip" v-if="tool == 'xpath'">
<h4 class="text-xl mt-4 mb-2 font-bold">Args and Output</h4>
<table v-if="entryHasArguments()" class="w-full">
<tr>
<th>Type</th>
<th>Description</th>
</tr>
<tr v-for="arg in props.entryData.arguments">
<tr v-for="arg in props.entryData.arguments" :key="arg">
<td class="text-center">{{ interpretXPathIndicators( arg.type ) }}</td>
<td class="text-center">{{ arg.description }}</td>
</tr>
</table>
</div>
<div id="xsltAttrTooltip" v-if="tool == 'xslt'">
<h4 class="text-xl mt-4 mb-2 font-bold"> Attributes</h4>
<table v-if="entryHasArguments()" class="w-full">
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr v-for="attr in props.entryData.attributes" :key="attr">
<td class="text-center p-2">{{ attr.name }}</td>
<td class="text-center p-2">{{ interpretXPathIndicators( attr.type ) }}</td>
<td class="text-center p-2">{{ attr.description }}</td>
</tr>
</table>
</div>
<div class="mt-2">
<strong>Output: </strong>{{ interpretXPathIndicators(props.entryData.output) }}
</div>
@@ -73,13 +96,13 @@ function interpretXPathIndicators( elementType:string ):string {
<th>Command</th>
<th>Output</th>
</tr>
<tr v-for="ex in props.entryData.examples">
<tr v-for="ex in props.entryData.examples" :key="ex">
<td class="text-center"><code>{{ ex.command }}</code></td>
<td class="text-center">{{ ex.output }}</td>
</tr>
</table>
<div class="mt-2">
<a :href="props.entryData.documentationReferenceURL" class="underline" target="_blank" rel="noreferrer noopener">W3C Documentation Reference</a>
<a :href="props.entryData.documentationReferenceURL" class="underline" target="_blank" rel="noreferrer noopener">Documentation Reference</a>
</div>
</div>