vuetify 1.3.9
This commit is contained in:
parent
d30eacc8fe
commit
18114ae8e4
65 changed files with 1488 additions and 2238 deletions
|
|
@ -283,6 +283,7 @@
|
||||||
console.log("AFTER: ",this.$auth);
|
console.log("AFTER: ",this.$auth);
|
||||||
//this.$forceUpdate()
|
//this.$forceUpdate()
|
||||||
})
|
})
|
||||||
|
EditTabs.restore();
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy(){
|
beforeDestroy(){
|
||||||
|
|
|
||||||
84
src/vue-poc/components/EditTabs.js
Normal file
84
src/vue-poc/components/EditTabs.js
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
//Manage array of text sources used for:edit tabs
|
||||||
|
// item{
|
||||||
|
// name:
|
||||||
|
// contentType:
|
||||||
|
// text:
|
||||||
|
// id:
|
||||||
|
// url:
|
||||||
|
//
|
||||||
|
const EditTabs=new Vue({
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
items:[],
|
||||||
|
nextId: 1,
|
||||||
|
currentId: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
addItem(tab){
|
||||||
|
console.log("new: ",tab);
|
||||||
|
var def={name: "AA"+this.nextId,
|
||||||
|
contentType: "text/xml",
|
||||||
|
mode: "xml",
|
||||||
|
text: "<foo>" +this.nextId +"</foo>",
|
||||||
|
url: null
|
||||||
|
};
|
||||||
|
var etab = Object.assign(def,tab);
|
||||||
|
etab.id= ""+this.nextId
|
||||||
|
this.items.push (etab);
|
||||||
|
this.nextId++;
|
||||||
|
return etab;
|
||||||
|
},
|
||||||
|
|
||||||
|
closeItem(item){
|
||||||
|
var index=this.items.indexOf(item);
|
||||||
|
if (index > -1) {
|
||||||
|
alert("index: "+index)
|
||||||
|
this.items.splice(index, 1);
|
||||||
|
index=(index==0)?0:index-1;
|
||||||
|
this.currentId=(this.items.length)?"T"+this.items[index].id : null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// fetch content from server and create tab
|
||||||
|
loadItem(url){
|
||||||
|
HTTP.get("get",{params: {url:url}})
|
||||||
|
.then(r=>{
|
||||||
|
console.log(r)
|
||||||
|
var tab={
|
||||||
|
text: ""+ r.data.data,
|
||||||
|
url: url,
|
||||||
|
name: url.split(/.*[\/|\\]/)[1]
|
||||||
|
};
|
||||||
|
this.addItem(tab);
|
||||||
|
})
|
||||||
|
.catch(error=> {
|
||||||
|
console.log(error);
|
||||||
|
alert("Get query error:\n"+url)
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
save(){
|
||||||
|
Settings.setItem('edit/items',this.items);
|
||||||
|
},
|
||||||
|
|
||||||
|
restore(){
|
||||||
|
that=this
|
||||||
|
Settings.getItem('edit/items')
|
||||||
|
.then(function (v){
|
||||||
|
console.log("items ",v)
|
||||||
|
v.forEach(v =>that.addItem(v))
|
||||||
|
})
|
||||||
|
.catch(error=> {
|
||||||
|
console.log(error);
|
||||||
|
alert("load error")
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
sorted(){
|
||||||
|
return this.items.slice(0).sort((a,b) => a.name.localeCompare(b.name))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
@ -3,12 +3,15 @@ const Notification={
|
||||||
messages:[],
|
messages:[],
|
||||||
nextId: 0,
|
nextId: 0,
|
||||||
unseen:0,
|
unseen:0,
|
||||||
add(msg){
|
add(opts){
|
||||||
var data={
|
var data=Object.assign({
|
||||||
text: msg,
|
html: 'no html',
|
||||||
index: ++this.nextId,
|
index: ++this.nextId,
|
||||||
created: new Date()
|
created: new Date(),
|
||||||
};
|
elapsed: null
|
||||||
|
},
|
||||||
|
opts);
|
||||||
|
console.log("opt",opts);
|
||||||
this.messages.unshift(data);
|
this.messages.unshift(data);
|
||||||
this.messages.length = Math.min(this.messages.length, 30);
|
this.messages.length = Math.min(this.messages.length, 30);
|
||||||
++this.unseen;
|
++this.unseen;
|
||||||
|
|
|
||||||
34
src/vue-poc/components/qd-breadcrumbs.vue
Normal file
34
src/vue-poc/components/qd-breadcrumbs.vue
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
bread crumb wrapper. crumbs = json array "[{},{}]"
|
||||||
|
supports: text,
|
||||||
|
to,
|
||||||
|
icon,
|
||||||
|
menu
|
||||||
|
-->
|
||||||
|
<template id="qd-breadcrumbs">
|
||||||
|
<v-breadcrumbs :items="crumbs" >
|
||||||
|
<template slot="item" slot-scope="props">
|
||||||
|
<v-breadcrumbs-item :to="props.item.to" :disabled="props.item.disabled" :exact="true">
|
||||||
|
|
||||||
|
<v-icon v-if="props.item.icon">props.item.icon</v-icon>
|
||||||
|
{{ props.item.text }}
|
||||||
|
<v-btn icon v-if="props.item.menu" @click="$emit(props.item.menu)"
|
||||||
|
:class="props.item.menu">
|
||||||
|
<v-avatar>
|
||||||
|
<v-icon>arrow_drop_down</v-icon>
|
||||||
|
</v-avatar>
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
|
</v-breadcrumbs>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>{
|
||||||
|
props: ['crumbs'],
|
||||||
|
created:function(){
|
||||||
|
console.log("qd-crumbs");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -18,16 +18,15 @@
|
||||||
<v-list-tile-avatar>
|
<v-list-tile-avatar>
|
||||||
<v-icon color="red">swap_horiz</v-icon>
|
<v-icon color="red">swap_horiz</v-icon>
|
||||||
</v-list-tile-avatar>
|
</v-list-tile-avatar>
|
||||||
|
|
||||||
<v-list-tile-content>
|
<v-list-tile-content>
|
||||||
<v-tooltip>
|
<v-list-tile-title>{{ msg.created | fromNow("from") }}</v-list-tile-title>
|
||||||
<v-list-tile-title slot="activator">{{ msg.created | fromNow("from") }}</v-list-tile-title>
|
<v-list-tile-sub-title v-html="msg.html">msg</v-list-tile-sub-title>
|
||||||
<span v-text="msg.created"></span>
|
|
||||||
</v-tooltip>
|
|
||||||
<v-list-tile-sub-title v-html="msg.text"></v-list-tile-sub-title>
|
|
||||||
</v-list-tile-content>
|
</v-list-tile-content>
|
||||||
<v-list-tile-action>
|
|
||||||
|
<v-list-tile-action-text v-if="msg.elapsed">{{ msg.elapsed }} ms </v-list-tile-action-text>
|
||||||
<v-list-tile-action-text>#{{ msg.index }}</v-list-tile-action-text>
|
<v-list-tile-action-text>#{{ msg.index }}</v-list-tile-action-text>
|
||||||
</v-list-tile-action>
|
|
||||||
</v-list-tile>
|
</v-list-tile>
|
||||||
</template>
|
</template>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<!--
|
<!--
|
||||||
manage parameters for query
|
manage parameters for query
|
||||||
including funtion to submit form
|
including submit form function
|
||||||
-->
|
-->
|
||||||
<template id="vp-paramform">
|
<template id="vp-paramform">
|
||||||
<v-form ref="form" lazy-validation>
|
<v-form ref="form" lazy-validation>
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ HTTP.interceptors.request.use((config) => {
|
||||||
config.qdStartTime=performance.now();
|
config.qdStartTime=performance.now();
|
||||||
return config;
|
return config;
|
||||||
});
|
});
|
||||||
|
|
||||||
HTTP.interceptors.response.use((response) => {
|
HTTP.interceptors.response.use((response) => {
|
||||||
// Do something with response data
|
// Do something with response data
|
||||||
if(response.config && response.config.qdStartTime){
|
if(response.config && response.config.qdStartTime){
|
||||||
|
|
@ -35,12 +36,13 @@ HTTP.interceptors.response.use((response) => {
|
||||||
var c=response.config;
|
var c=response.config;
|
||||||
var url=response.config.url + "?" + c.paramsSerializer(c.params);
|
var url=response.config.url + "?" + c.paramsSerializer(c.params);
|
||||||
//console.log("interceptors time:",s, response.config);
|
//console.log("interceptors time:",s, response.config);
|
||||||
var b=`<a href="${url}" target="vp-notification" >${url}</a> Time: ${s}`
|
var b=`<a href="${url}" target="vp-notification" >${url}</a>`
|
||||||
Notification.add(b);
|
Notification.add({html: b, elapsed: s});
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// errors hidden
|
// errors hidden
|
||||||
const HTTPNE = axios.create(AXIOS_CONFIG);
|
const HTTPNE = axios.create(AXIOS_CONFIG);
|
||||||
const axios_json={ headers: {accept: 'application/json'}};
|
const axios_json={ headers: {accept: 'application/json'}};
|
||||||
|
|
@ -51,7 +53,7 @@ localforage.config({
|
||||||
name: 'vuepoc'
|
name: 'vuepoc'
|
||||||
});
|
});
|
||||||
// https://vuejs.org/v2/guide/state-management.html
|
// https://vuejs.org/v2/guide/state-management.html
|
||||||
var settings = {
|
var Settings = {
|
||||||
debug: false,
|
debug: false,
|
||||||
defaults:{
|
defaults:{
|
||||||
|
|
||||||
|
|
@ -122,6 +124,17 @@ return $a `},
|
||||||
console.log('set failed');
|
console.log('set failed');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeItem (key) {
|
||||||
|
if (this.debug) console.log('deleteItem',key);
|
||||||
|
return localforage.removeItem(key)
|
||||||
|
.then(value => {
|
||||||
|
console.log('deleted ',key);
|
||||||
|
|
||||||
|
}).catch(err => {
|
||||||
|
console.log('delete failed');
|
||||||
|
});
|
||||||
|
},
|
||||||
keys(){
|
keys(){
|
||||||
return localforage.keys() // returns array of keys
|
return localforage.keys() // returns array of keys
|
||||||
|
|
||||||
|
|
|
||||||
BIN
src/vue-poc/data/basex.9.1.zip
Normal file
BIN
src/vue-poc/data/basex.9.1.zip
Normal file
Binary file not shown.
|
|
@ -122,5 +122,8 @@
|
||||||
<description>EXpath packaging
|
<description>EXpath packaging
|
||||||
</description>
|
</description>
|
||||||
</namespace>
|
</namespace>
|
||||||
|
<namespace uri="http://basex.org/modules/perm" prefix="perm">
|
||||||
|
<description>Web permissions
|
||||||
|
</description>
|
||||||
|
</namespace>
|
||||||
</namespaces>
|
</namespaces>
|
||||||
|
|
@ -6,24 +6,7 @@
|
||||||
<v-container fill-height>
|
<v-container fill-height>
|
||||||
<v-layout align-center>
|
<v-layout align-center>
|
||||||
<v-flex>
|
<v-flex>
|
||||||
<h3 class="display-3">Vue-poc<v-spacer></v-spacer>
|
<h3 class="display-3">Vue-poc</h3>
|
||||||
<v-speed-dial v-model="fab" hover right direction="bottom"
|
|
||||||
transition="slide-y-reverse-transition">
|
|
||||||
<v-btn slot="activator" class="blue darken-2" dark fab hover v-model="fab">
|
|
||||||
<v-icon>account_circle</v-icon>
|
|
||||||
<v-icon>close</v-icon>
|
|
||||||
</v-btn>
|
|
||||||
<v-btn fab dark small class="green" >
|
|
||||||
<v-icon>edit</v-icon>
|
|
||||||
</v-btn>
|
|
||||||
<v-btn fab dark small class="indigo" >
|
|
||||||
<v-icon>add</v-icon>
|
|
||||||
</v-btn>
|
|
||||||
<v-btn fab dark small class="red" >
|
|
||||||
<v-icon>delete</v-icon>
|
|
||||||
</v-btn>
|
|
||||||
</v-speed-dial>
|
|
||||||
</h3>
|
|
||||||
<span class="subheading">A development environment for managing XML sources and processes.</span>
|
<span class="subheading">A development environment for managing XML sources and processes.</span>
|
||||||
|
|
||||||
<v-divider class="my-3"></v-divider>
|
<v-divider class="my-3"></v-divider>
|
||||||
|
|
@ -44,6 +27,9 @@
|
||||||
|
|
||||||
<li><a href="https://developers.google.com/web/tools/workbox/"
|
<li><a href="https://developers.google.com/web/tools/workbox/"
|
||||||
target="new">workbox</a></li>
|
target="new">workbox</a></li>
|
||||||
|
|
||||||
|
<li><a href="https://material.io/tools/icons/?style=baseline"
|
||||||
|
target="new">icons (material)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</v-flex>
|
</v-flex>
|
||||||
<v-flex xs6>
|
<v-flex xs6>
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,15 @@
|
||||||
<v-toolbar dense >
|
<v-toolbar dense >
|
||||||
|
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<v-breadcrumbs :items="crumbs">
|
||||||
<span slot="divider" style="padding:0;"></span>
|
<span slot="divider" style="padding:0;"></span>
|
||||||
<v-breadcrumbs-item v-for="item in crumbs" :key="item.path"
|
<template slot="item" slot-scope="props">
|
||||||
:to="{ query: { url: item.path }}" :exact="true">
|
<v-breadcrumbs-item
|
||||||
<v-icon v-if="item.icon">{{ icon }}</v-icon>
|
:to="{ query: { url: props.item.path }}" :exact="true">
|
||||||
{{ item.name }}
|
<v-icon v-if="props.item.icon">{{ props.item.icon }}</v-icon>
|
||||||
|
{{ props.item.name }}
|
||||||
</v-breadcrumbs-item>
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
</v-breadcrumbs>
|
</v-breadcrumbs>
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
<v-btn icon @click="load()">
|
<v-btn icon @click="load()">
|
||||||
|
|
|
||||||
|
|
@ -290,7 +290,7 @@ v-on:annotation="annotation"></vue-ace>
|
||||||
if(url) this.fetch(url)
|
if(url) this.fetch(url)
|
||||||
},
|
},
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
settings.getItem('settings/ace')
|
Settings.getItem('settings/ace')
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
next(vm => {vm.aceSettings = v;})
|
next(vm => {vm.aceSettings = v;})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
</v-list-tile>
|
</v-list-tile>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-menu>
|
</v-menu>
|
||||||
<v-btn>*{{ nextId }}</v-btn>
|
<v-btn @click="EditTabs.addItem({txt:'hello'})">*{{ EditTabs.nextId }}</v-btn>
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
|
|
@ -110,13 +110,13 @@
|
||||||
|
|
||||||
<v-menu left bottom :close-on-content-click="false" >
|
<v-menu left bottom :close-on-content-click="false" >
|
||||||
<a class="tabs__item" slot="activator">
|
<a class="tabs__item" slot="activator">
|
||||||
{{ items.length }}
|
{{ EditTabs.items.length }}
|
||||||
<v-icon>arrow_drop_down</v-icon>
|
<v-icon>arrow_drop_down</v-icon>
|
||||||
</a>
|
</a>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>Select Tab</v-card-title>
|
<v-card-title>Select Tab</v-card-title>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-autocomplete :items="sorted" v-model="a1"
|
<v-autocomplete :items="EditTabs.sorted()" v-model="a1"
|
||||||
label="File" class="input-group--focused"
|
label="File" class="input-group--focused"
|
||||||
item-text="name" item-value="id"
|
item-text="name" item-value="id"
|
||||||
@change="setItem"
|
@change="setItem"
|
||||||
|
|
@ -128,7 +128,7 @@
|
||||||
|
|
||||||
<v-tabs v-model="currentId" slot="extension">
|
<v-tabs v-model="currentId" slot="extension">
|
||||||
<v-tab
|
<v-tab
|
||||||
v-for="item in items"
|
v-for="item in EditTabs.items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:href="'#T' + item.id" ripple
|
:href="'#T' + item.id" ripple
|
||||||
style="text-transform: none;text-align:left"
|
style="text-transform: none;text-align:left"
|
||||||
|
|
@ -149,7 +149,7 @@
|
||||||
|
|
||||||
<v-tabs-items slot="body" v-model="currentId">
|
<v-tabs-items slot="body" v-model="currentId">
|
||||||
<v-tab-item
|
<v-tab-item
|
||||||
v-for="item in items"
|
v-for="item in EditTabs.items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:id="'T' + item.id"
|
:id="'T' + item.id"
|
||||||
>
|
>
|
||||||
|
|
@ -196,7 +196,6 @@
|
||||||
return {
|
return {
|
||||||
showadd: false, // showing add form
|
showadd: false, // showing add form
|
||||||
showInfo: false, // showing info
|
showInfo: false, // showing info
|
||||||
nextId:4,
|
|
||||||
a1:"",
|
a1:"",
|
||||||
currentId: null, //href of current
|
currentId: null, //href of current
|
||||||
active: null,
|
active: null,
|
||||||
|
|
@ -205,21 +204,17 @@
|
||||||
aceSettings: {},
|
aceSettings: {},
|
||||||
events: new Vue({}),
|
events: new Vue({}),
|
||||||
annotations: null,
|
annotations: null,
|
||||||
folded:false
|
folded:false,
|
||||||
|
EditTabs: EditTabs
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods:{
|
methods:{
|
||||||
tabClose(item){
|
tabClose(item){
|
||||||
if(item.dirty){
|
if(item.dirty){
|
||||||
alert("save first")
|
if (!confirm("Not saved continue? "))return;
|
||||||
}else{
|
}else{
|
||||||
var index=this.items.indexOf(item);
|
this.EditTabs.closeItem(item)
|
||||||
if (index > -1) {
|
|
||||||
this.items.splice(index, 1);
|
|
||||||
index=(index==0)?0:index-1;
|
|
||||||
this.currentId=(this.items.length)?"T"+this.items[index].id : null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -268,35 +263,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
addItem(tab){
|
addItem(tab){
|
||||||
console.log("new: ",tab);
|
var tab=EditTabs.addItem({text:"aaa hello"})
|
||||||
var def={name: "AA"+this.nextId,
|
this.currentId="T" + tab.id
|
||||||
id: ""+this.nextId,
|
|
||||||
contentType: "text/xml",
|
|
||||||
mode: "xml",
|
|
||||||
text: "New text" +this.nextId
|
|
||||||
};
|
|
||||||
var etab = Object.assign(def,tab);
|
|
||||||
this.items.push (etab);
|
|
||||||
this.currentId="T" + this.nextId
|
|
||||||
this.nextId++;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
loadItem(url){
|
|
||||||
HTTP.get("get",{params: {url:url}})
|
|
||||||
.then(r=>{
|
|
||||||
console.log(r)
|
|
||||||
var tab={
|
|
||||||
text: ""+ r.data.data,
|
|
||||||
location: url,
|
|
||||||
name: url.split(/.*[\/|\\]/)[1]
|
|
||||||
};
|
|
||||||
this.addItem(tab);
|
|
||||||
})
|
|
||||||
.catch(error=> {
|
|
||||||
console.log(error);
|
|
||||||
alert("Get query error:\n"+url)
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
changeContent(val){
|
changeContent(val){
|
||||||
var item=this.active;
|
var item=this.active;
|
||||||
|
|
@ -321,31 +291,25 @@
|
||||||
|
|
||||||
watch:{
|
watch:{
|
||||||
currentId (val) {
|
currentId (val) {
|
||||||
this.active = this.items.find(e=> val=="T"+e.id);
|
this.active = EditTabs.items.find(e=> val=="T"+e.id);
|
||||||
this.$router.push({ query: { id: val }});
|
this.$router.push({ query: { id: val }});
|
||||||
console.log("current",val)
|
console.log("current",val)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed:{
|
computed:{
|
||||||
sorted(){
|
|
||||||
return this.items.slice(0).sort((a,b) => a.name.localeCompare(b.name)) ;
|
|
||||||
},
|
|
||||||
dirty(){
|
dirty(){
|
||||||
return this.active && this.active.dirty
|
return this.active && this.active.dirty
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
Promise.all([settings.getItem('settings/ace'),
|
Promise.all([Settings.getItem('settings/ace')
|
||||||
settings.getItem('edit/items')
|
|
||||||
])
|
])
|
||||||
.then(function(values) {
|
.then(function(values) {
|
||||||
next(vm => {
|
next(vm => {
|
||||||
vm.aceSettings = values[0];
|
vm.aceSettings = values[0];
|
||||||
vm.items = values[1];
|
|
||||||
vm.currentId = vm.items.length+1;
|
|
||||||
console.log("nextid: ",vm.currentId);
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
@ -354,14 +318,14 @@
|
||||||
// called when the route that renders this component is about to
|
// called when the route that renders this component is about to
|
||||||
// be navigated away from.
|
// be navigated away from.
|
||||||
// has access to `this` component instance.
|
// has access to `this` component instance.
|
||||||
settings.setItem('edit/items',this.items);
|
Settings.setItem('edit/items',EditTabs.items);
|
||||||
next(true);
|
next(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
created:function(){
|
created:function(){
|
||||||
var url=this.$route.query.url;
|
var url=this.$route.query.url;
|
||||||
if(url){
|
if(url){
|
||||||
this.loadItem(url);
|
EditTabs.loadItem(url);
|
||||||
}else{
|
}else{
|
||||||
var id=this.$route.query.id;
|
var id=this.$route.query.id;
|
||||||
this.currentId=id?id:null;
|
this.currentId=id?id:null;
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@
|
||||||
computed: {
|
computed: {
|
||||||
},
|
},
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
settings.getItem('settings/ace')
|
Settings.getItem('settings/ace')
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
|
|
||||||
next(vm => {
|
next(vm => {
|
||||||
|
|
|
||||||
|
|
@ -249,7 +249,7 @@
|
||||||
var t1 = performance.now();
|
var t1 = performance.now();
|
||||||
var elapsed= 0.001 *(t1 - t0);
|
var elapsed= 0.001 *(t1 - t0);
|
||||||
var round = Vue.filter('round');
|
var round = Vue.filter('round');
|
||||||
this.$notification.add("Found " + this.total + " in : "+ round(elapsed,1) +" secs");
|
this.$notification.add({html:"Found " + this.total, elapsed: round(elapsed,1)});
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
slideShow(){
|
slideShow(){
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,10 @@
|
||||||
<v-flex xs12 sm6 offset-sm3>
|
<v-flex xs12 sm6 offset-sm3>
|
||||||
<v-card >
|
<v-card >
|
||||||
|
|
||||||
<v-card-title class="amber ">
|
<v-card-title class="red">
|
||||||
<span class="white--text">The current credentials do the give access this page, please login again</span>
|
<span class="white--text">The current credentials do the give access this page, please login again</span>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-alert color="error" v-bind:value="showMessage">
|
|
||||||
{{message}}
|
|
||||||
</v-alert>
|
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
name="input-name"
|
name="input-name"
|
||||||
|
|
@ -33,6 +31,10 @@
|
||||||
></v-text-field>
|
></v-text-field>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
||||||
|
<v-alert color="error" v-bind:value="showMessage">
|
||||||
|
{{message}}
|
||||||
|
</v-alert>
|
||||||
|
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-switch
|
<v-switch
|
||||||
label="Remember me" v-model="remember">
|
label="Remember me" v-model="remember">
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,26 @@ declare variable $vue-login:SESSION-KEY := "id";
|
||||||
(:~ Current session. :)
|
(:~ Current session. :)
|
||||||
declare variable $vue-login:SESSION-VALUE := session:get($vue-login:SESSION-KEY);
|
declare variable $vue-login:SESSION-VALUE := session:get($vue-login:SESSION-KEY);
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: Permission check: Area for logged-in users.
|
||||||
|
: Checks if a session id exists for the current user; if not, redirects to the login page.
|
||||||
|
:)
|
||||||
|
declare
|
||||||
|
(: %perm:check('/vue-poc') :)
|
||||||
|
function vue-login:check-app() {
|
||||||
|
let $user := session:get('id')
|
||||||
|
where empty($user)
|
||||||
|
return web:redirect('/vue-poc/login')
|
||||||
|
};
|
||||||
(:~
|
(:~
|
||||||
: get status
|
: get status
|
||||||
:)
|
:)
|
||||||
declare
|
declare
|
||||||
%rest:GET %rest:path("/vue-poc/api/status")
|
%rest:GET %rest:path("/vue-poc/api/status")
|
||||||
|
%rest:cookie-param("remember", "{ $remember }")
|
||||||
%rest:produces("application/json")
|
%rest:produces("application/json")
|
||||||
%output:method("json")
|
%output:method("json")
|
||||||
function vue-login:status( )
|
function vue-login:status($remember as xs:string? )
|
||||||
{
|
{
|
||||||
let $user:=session:get("id","")
|
let $user:=session:get("id","")
|
||||||
let $role:=if($user and user:exists($user)) then user:list-details($user)/@permission/string() else ""
|
let $role:=if($user and user:exists($user)) then user:list-details($user)/@permission/string() else ""
|
||||||
|
|
@ -27,6 +39,7 @@ return <json type="object" >
|
||||||
<permission>{$role}</permission>
|
<permission>{$role}</permission>
|
||||||
<session>{session:id()}</session>
|
<session>{session:id()}</session>
|
||||||
<created>{session:created()}</created>
|
<created>{session:created()}</created>
|
||||||
|
<login>{ $remember }</login>
|
||||||
</json>
|
</json>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -85,9 +98,8 @@ declare %private function vue-login:accept(
|
||||||
$pass as xs:string,
|
$pass as xs:string,
|
||||||
$path as xs:string?
|
$path as xs:string?
|
||||||
) {
|
) {
|
||||||
let $expires:=current-dateTime() + xs:dayTimeDuration('P7D')
|
|
||||||
let $pic:="[FNn,3-3],[D01] [MNn,3-3] [Y4] [H01]:[m01]:[s01] [z]"
|
let $val:=vue-login:cookie("remember", random:uuid(),map{'expires': xs:dayTimeDuration('P7D')})
|
||||||
let $val:=``[remember=`{ random:uuid() }`; path=/; expires=`{ format-dateTime($expires,$pic) }`;]``
|
|
||||||
return (
|
return (
|
||||||
session:set($vue-login:SESSION-KEY, $name),
|
session:set($vue-login:SESSION-KEY, $name),
|
||||||
admin:write-log('VUEPOC user was logged in: ' || $name),
|
admin:write-log('VUEPOC user was logged in: ' || $name),
|
||||||
|
|
@ -115,10 +127,28 @@ declare %private function vue-login:reject(
|
||||||
$name as xs:string,
|
$name as xs:string,
|
||||||
$message as xs:string,
|
$message as xs:string,
|
||||||
$path as xs:string?)
|
$path as xs:string?)
|
||||||
as element(json) {
|
{
|
||||||
admin:write-log('VUE login was denied: ' || $name),
|
let $cookie:=vue-login:cookie("remember", "", map{})
|
||||||
|
return ( admin:write-log('VUE login was denied: ' || $name),
|
||||||
|
<rest:response>
|
||||||
|
<http:response>
|
||||||
|
<http:header name="Set-Cookie" value="{ $cookie }"/>
|
||||||
|
</http:response>
|
||||||
|
</rest:response>,
|
||||||
<json type="object">
|
<json type="object">
|
||||||
<status type="boolean">false</status>
|
<status type="boolean">false</status>
|
||||||
<message>{$message}</message>
|
<message>{$message}</message>
|
||||||
</json>
|
</json>
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
(:~ return cookie string
|
||||||
|
:)
|
||||||
|
declare function vue-login:cookie($name as xs:string,$val,$opts as map(*)?)
|
||||||
|
as xs:string
|
||||||
|
{
|
||||||
|
let $pic:="[FNn,3-3],[D01] [MNn,3-3] [Y4] [H01]:[m01]:[s01] [z]"
|
||||||
|
let $expires:=if(map:contains($opts,"expires")) then current-dateTime() + $opts?expires else ()
|
||||||
|
return``[`{ $name }`=`{ $val }`; path=/; expires=`{ format-dateTime($expires,$pic) }`;]``
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,23 @@
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar >
|
<v-toolbar >
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<v-breadcrumbs :items="[{text:'Entities',to:'/entity'}]" >
|
||||||
<v-breadcrumbs-item to="/entity" :exact="true">
|
<template slot="item" slot-scope="props">
|
||||||
Entities
|
<v-breadcrumbs-item :to="props.item.to" :disabled="props.item.disabled" :exact="true">
|
||||||
|
{{ props.item.text }}
|
||||||
</v-breadcrumbs-item>
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
|
</v-breadcrumbs>
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-text-field prepend-icon="filter_list" label="Filter..." v-model="q" type="search"
|
<v-text-field prepend-icon="filter_list" label="Filter..." v-model="q" type="search"
|
||||||
hide-details single-line @keyup.enter="setfilter"
|
hide-details single-line @keyup.enter="setfilter"
|
||||||
:append-icon="this.q?'clear':''" @click:append="e=>this.q=''"></v-text-field>
|
:append-icon="this.q?'clear':''" @click:append="e=>this.q=''"></v-text-field>
|
||||||
<v-btn @click="getItems"
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn @click="getItems" icon
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
:disabled="loading"
|
:disabled="loading"
|
||||||
>Refresh</v-btn>
|
><v-icon>refresh</v-icon></v-btn>
|
||||||
<vp-entitylink entity="entity"></vp-entitylink>
|
<vp-entitylink entity="entity"></vp-entitylink>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
|
|
@ -41,14 +45,14 @@
|
||||||
md4
|
md4
|
||||||
lg3
|
lg3
|
||||||
>
|
>
|
||||||
<v-card :hover="true" active-class="default-class qd-active" >
|
<v-card :hover="true" active-class="default-class qd-active" max-height="200px">
|
||||||
|
|
||||||
<v-toolbar color="amber">
|
<v-toolbar color="blue lighten-3" dense>
|
||||||
<v-card-title >
|
<v-card-title >
|
||||||
<router-link :to="{path:'entity/'+ props.item.name}">
|
<router-link :to="{path:'entity/'+ props.item.name}">
|
||||||
<h3>
|
|
||||||
<v-icon>{{ props.item.iconclass }}</v-icon> {{ props.item.name }}
|
<v-icon>{{ props.item.iconclass }}</v-icon> {{ props.item.name }}
|
||||||
</h3>
|
|
||||||
</router-link>
|
</router-link>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
|
||||||
|
|
@ -3,47 +3,42 @@
|
||||||
<v-card >
|
<v-card >
|
||||||
<v-toolbar>
|
<v-toolbar>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<qd-breadcrumbs @todo="showmenu= ! showmenu"
|
||||||
<v-breadcrumbs-item to="/entity" :exact="true">
|
:crumbs="[{to: '/entity', text:'Entities'}, {text: entity, disabled: false, menu: 'todo'}]"
|
||||||
Entities
|
>crumbs</qd-breadcrumbs>
|
||||||
</v-breadcrumbs-item>
|
|
||||||
|
|
||||||
<v-breadcrumbs-item >
|
|
||||||
<v-chip>
|
|
||||||
<v-avatar>
|
|
||||||
<v-icon>{{ item.iconclass }}</v-icon>
|
|
||||||
</v-avatar>
|
|
||||||
{{ entity }}
|
|
||||||
</v-chip>
|
|
||||||
</v-breadcrumbs-item>
|
|
||||||
</v-breadcrumbs>
|
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
|
<v-menu offset-y v-model="showmenu" activator=".todo">
|
||||||
|
<v-list dense>
|
||||||
|
<v-subheader >Actions</v-subheader>
|
||||||
|
<v-list-tile @click="getxml" >
|
||||||
|
<v-list-tile-title >View XML</v-list-tile-title>
|
||||||
|
</v-list-tile>
|
||||||
|
<v-list-tile >
|
||||||
|
<v-list-tile-title ><a :href="dataurl" target="data">Json</a></v-list-tile-title>
|
||||||
|
</v-list-tile>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-btn icon @click="getItem"
|
<v-btn icon @click="getItem"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
:disabled="loading"
|
:disabled="loading"
|
||||||
><v-icon>refresh</v-icon></v-btn>
|
><v-icon>refresh</v-icon></v-btn>
|
||||||
|
|
||||||
<v-btn @click="getxml"
|
|
||||||
:loading="loading"
|
|
||||||
:disabled="loading"
|
|
||||||
>XML</v-btn>
|
|
||||||
|
|
||||||
<a :href="dataurl" target="data">Data</a>
|
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<v-container fluid grid-list-md>
|
<v-container fluid grid-list-md>
|
||||||
<div v-if="item">
|
|
||||||
<div>{{item.description}}</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<v-expansion-panel v-model="panel" expand >
|
<v-expansion-panel v-model="panel" expand >
|
||||||
|
<v-expansion-panel-content>
|
||||||
|
<div slot="header" class="title">Description: </div>
|
||||||
|
{{item.description}}
|
||||||
|
<pre v-if="xml"><code>{{ xml }}</code></pre>
|
||||||
|
</v-expansion-panel-content>
|
||||||
<v-expansion-panel-content>
|
<v-expansion-panel-content>
|
||||||
<div slot="header" class="title">Type: <code>{{ item.type }}</code></div>
|
<div slot="header" class="title">Type: <code>{{ item.type }}</code></div>
|
||||||
<prism language="xquery">{{ item.modules }}</prism>
|
<prism language="xquery">{{ code(item) }}</prism>
|
||||||
<prism language="xquery">{{ item.namespaces }}</prism>
|
|
||||||
<prism language="xquery">{{ item.code }}</prism>
|
|
||||||
</v-expansion-panel-content>
|
</v-expansion-panel-content>
|
||||||
|
|
||||||
<v-expansion-panel-content>
|
<v-expansion-panel-content>
|
||||||
|
|
@ -72,7 +67,7 @@
|
||||||
item: {description:null,
|
item: {description:null,
|
||||||
code: null
|
code: null
|
||||||
},
|
},
|
||||||
|
showmenu: false,
|
||||||
loading: false,
|
loading: false,
|
||||||
xml: null,
|
xml: null,
|
||||||
selected: [],
|
selected: [],
|
||||||
|
|
@ -83,7 +78,7 @@
|
||||||
{text: "description", value: "description"},
|
{text: "description", value: "description"},
|
||||||
{text: "xpath", value: "xpath"}
|
{text: "xpath", value: "xpath"}
|
||||||
],
|
],
|
||||||
panel: [false, true]
|
panel: [true, false, true]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
|
|
@ -95,17 +90,25 @@
|
||||||
this.item=Object.assign({}, this.item, r.data)
|
this.item=Object.assign({}, this.item, r.data)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
code(item){
|
||||||
|
return item.modules + " " + item.namespaces + " " +item.code
|
||||||
|
},
|
||||||
getxml(){
|
getxml(){
|
||||||
HTTP.get("data/entity/"+this.entity,{ headers: {Accept: "text/xml"}})
|
HTTP.get("data/entity/"+this.entity,{ headers: {Accept: "text/xml"}})
|
||||||
.then(r=>{
|
.then(r=>{
|
||||||
console.log(r.data)
|
|
||||||
this.xml=r.data;
|
this.xml=r.data;
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
todo(){
|
||||||
|
alert("TODO");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
dataurl(){
|
dataurl(){
|
||||||
return '/vue-poc/api/data/' + this.entity;
|
return '/vue-poc/api/data/' + this.entity;
|
||||||
|
},
|
||||||
|
xquery(){
|
||||||
|
return '/vue-poc/api/data/' + this.entity;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created:function(){
|
created:function(){
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,12 @@
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar >
|
<v-toolbar >
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<v-breadcrumbs :items="crumbs" >
|
||||||
<v-breadcrumbs-item to="/namespace" :exact="true">
|
<template slot="item" slot-scope="props">
|
||||||
Namespaces
|
<v-breadcrumbs-item :to="props.item.to" :disabled="props.item.disabled" :exact="true">
|
||||||
|
{{ props.item.text }}
|
||||||
</v-breadcrumbs-item>
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
</v-breadcrumbs>
|
</v-breadcrumbs>
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
|
|
||||||
|
|
@ -72,7 +74,8 @@
|
||||||
|
|
||||||
{ text: 'Description', value: 'description' },
|
{ text: 'Description', value: 'description' },
|
||||||
{ text: 'Prefix', value: 'prefix' }
|
{ text: 'Prefix', value: 'prefix' }
|
||||||
]
|
],
|
||||||
|
crumbs:[{to:"/namespace", text:"namespaces"}]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
||||||
|
|
@ -1,40 +1,22 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<template id="repo">
|
<template id="repo">
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
<v-card >
|
<qd-table :headers="headers" data-uri="data/repo" entity="repo" no-data-msg="Nothing found">
|
||||||
<v-toolbar >
|
|
||||||
<v-text-field
|
|
||||||
append-icon="search"
|
|
||||||
label="Filter repo"
|
|
||||||
single-line
|
|
||||||
hide-details
|
|
||||||
v-model="search"
|
|
||||||
></v-text-field>
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
</v-toolbar>
|
|
||||||
<v-data-table
|
|
||||||
:headers="headers"
|
|
||||||
:items="items"
|
|
||||||
:search="search"
|
|
||||||
v-model="selected"
|
|
||||||
select-all
|
|
||||||
class="elevation-1"
|
|
||||||
no-data-text="No repo found @todo"
|
|
||||||
>
|
|
||||||
<template slot="items" slot-scope="props">
|
<template slot="items" slot-scope="props">
|
||||||
<td class="vtop">
|
<td >
|
||||||
<v-checkbox
|
<v-checkbox
|
||||||
primary
|
primary
|
||||||
hide-details
|
hide-details
|
||||||
v-model="props.selected"
|
v-model="props.selected"
|
||||||
></v-checkbox>
|
></v-checkbox>
|
||||||
</td>
|
</td>
|
||||||
<td class="vtop">{{ props.item.name }}</td>
|
<td >{{ props.item.name}}</td>
|
||||||
<td class="vtop "><div>{{ props.item.permission }}</div>
|
<td >{{ props.item.type }}</td>
|
||||||
|
<td >{{ props.item.version }}</td>
|
||||||
</template>
|
</template>
|
||||||
</v-data-table>
|
</qd-table>
|
||||||
</v-card>
|
|
||||||
</v-container>
|
</v-container>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>{
|
<script>{
|
||||||
|
|
@ -45,28 +27,15 @@
|
||||||
search: null,
|
search: null,
|
||||||
selected: [],
|
selected: [],
|
||||||
headers: [
|
headers: [
|
||||||
{
|
{ text: 'Name', value: 'name'},
|
||||||
text: 'Name',
|
{ text: 'Type', value: 'type' },
|
||||||
left: true,
|
{ text: 'Version', value: 'version' }
|
||||||
value: 'id'
|
|
||||||
},
|
|
||||||
{ text: 'Permission', value: 'state' }
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods:{
|
|
||||||
getUsers(){
|
|
||||||
this.loading=true;
|
|
||||||
HTTP.get("repo")
|
|
||||||
.then(r=>{
|
|
||||||
this.loading=false
|
|
||||||
this.items=r.data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created:function(){
|
created:function(){
|
||||||
console.log("notfound",this.$route.query.q)
|
console.log("repo")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,36 @@
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar class="green darken-1">
|
<v-toolbar class="green darken-1">
|
||||||
<v-card-title >
|
<v-card-title >
|
||||||
<span class="white--text">Selection</span>
|
<span class="white--text">Selection2</span>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-btn flat icon @click="showInfo = !showInfo"><v-icon>info</v-icon></v-btn>
|
<v-btn flat icon @click="showInfo = !showInfo"><v-icon>info</v-icon></v-btn>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<qd-panel :show="showInfo">
|
<qd-panel :show="showInfo">
|
||||||
|
|
||||||
|
|
||||||
<v-layout slot="body">
|
<v-layout slot="body" row wrap>
|
||||||
|
|
||||||
|
<v-flex xs12 >
|
||||||
|
<v-treeview
|
||||||
|
v-model="tree"
|
||||||
|
:open="open"
|
||||||
|
:items="items"
|
||||||
|
activatable
|
||||||
|
item-key="name"
|
||||||
|
open-on-click
|
||||||
|
>
|
||||||
|
<template slot="prepend" slot-scope="{ item, open, leaf }">
|
||||||
|
<v-icon v-if="!item.file">
|
||||||
|
{{ open ? 'mdi-folder-open' : 'mdi-folder' }}
|
||||||
|
</v-icon>
|
||||||
|
<v-icon v-else>
|
||||||
|
{{ files[item.file] }}
|
||||||
|
</v-icon>
|
||||||
|
</template>
|
||||||
|
</v-treeview>
|
||||||
|
</v-flex>
|
||||||
|
|
||||||
<v-flex xs6>
|
<v-flex xs6>
|
||||||
<p>some text</p>
|
<p>some text</p>
|
||||||
|
|
@ -51,15 +72,18 @@
|
||||||
>v-select</v-select>
|
>v-select</v-select>
|
||||||
<pre>{{$data.value2 }}</pre>
|
<pre>{{$data.value2 }}</pre>
|
||||||
</v-flex>
|
</v-flex>
|
||||||
|
|
||||||
</v-layout>
|
</v-layout>
|
||||||
|
|
||||||
<v-card slot="aside" flat>
|
<v-card slot="aside" flat>
|
||||||
<v-card-actions >
|
<v-card-actions >
|
||||||
<v-toolbar-title >test</v-toolbar-title>
|
<v-toolbar-title >test aside</v-toolbar-title>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-btn flat icon @click="showInfo = false"><v-icon>highlight_off</v-icon></v-btn>
|
<v-btn flat icon @click="showInfo = false"><v-icon>highlight_off</v-icon></v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
<v-card-text> blah blah protocol: </v-card-text>
|
<v-card-text>
|
||||||
|
todo
|
||||||
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
</qd-panel>
|
</qd-panel>
|
||||||
|
|
||||||
|
|
@ -75,8 +99,73 @@
|
||||||
value2: null,
|
value2: null,
|
||||||
options: [],
|
options: [],
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
showInfo:true
|
showInfo:true,
|
||||||
|
open: ['public'],
|
||||||
|
files: {
|
||||||
|
html: 'mdi-language-html5',
|
||||||
|
js: 'mdi-nodejs',
|
||||||
|
json: 'mdi-json',
|
||||||
|
md: 'mdi-markdown',
|
||||||
|
pdf: 'mdi-file-pdf',
|
||||||
|
png: 'mdi-file-image',
|
||||||
|
txt: 'mdi-file-document-outline',
|
||||||
|
xls: 'mdi-file-excel'
|
||||||
|
},
|
||||||
|
tree: [],
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
name: '.git'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'node_modules'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'public',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: 'static',
|
||||||
|
children: [{
|
||||||
|
name: 'logo.png',
|
||||||
|
file: 'png'
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'favicon.ico',
|
||||||
|
file: 'png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'index.html',
|
||||||
|
file: 'html'
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '.gitignore',
|
||||||
|
file: 'txt'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'babel.config.js',
|
||||||
|
file: 'js'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'package.json',
|
||||||
|
file: 'json'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'README.md',
|
||||||
|
file: 'md'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'vue.config.js',
|
||||||
|
file: 'js'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'yarn.lock',
|
||||||
|
file: 'txt'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
created:function(){
|
created:function(){
|
||||||
this.asyncFind("")
|
this.asyncFind("")
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@
|
||||||
getValues: new perfStat(),
|
getValues: new perfStat(),
|
||||||
postValues: new perfStat(),
|
postValues: new perfStat(),
|
||||||
repeat: {get:false,post:false},
|
repeat: {get:false,post:false},
|
||||||
counter:null
|
counter: "(unread)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@
|
||||||
<v-flex xs12 sm8 offset-sm2>
|
<v-flex xs12 sm8 offset-sm2>
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar class="orange">
|
<v-toolbar class="orange">
|
||||||
<v-card-title >Common Ace editor settings</v-card-title>
|
<v-card-title > <qd-breadcrumbs
|
||||||
|
:crumbs="[{to: '/settings', text:'Settings'}, {text: 'Common Ace editor settings', disabled: true }]"
|
||||||
|
>crumbs</qd-breadcrumbs></v-card-title>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
|
|
@ -117,7 +119,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeRouteLeave (to, from, next) {
|
beforeRouteLeave (to, from, next) {
|
||||||
settings.setItem('settings/ace',this.ace)
|
Settings.setItem('settings/ace',this.ace)
|
||||||
.then(v=>{
|
.then(v=>{
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
@ -125,7 +127,7 @@
|
||||||
mounted: function () {
|
mounted: function () {
|
||||||
|
|
||||||
// console.log("$$$",this.ace)
|
// console.log("$$$",this.ace)
|
||||||
settings.getItem('settings/ace')
|
Settings.getItem('settings/ace')
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
//alert("db\n"+JSON.stringify(v))
|
//alert("db\n"+JSON.stringify(v))
|
||||||
this.ace = Object.assign({}, this.ace, v)
|
this.ace = Object.assign({}, this.ace, v)
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,22 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<template id="keys">
|
<template id="keys">
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
<p>Settings are currently only stored locally in the browser, using <code>localstorage</code></p>
|
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar dense>
|
<v-toolbar dense>
|
||||||
<v-toolbar-title >keys</v-toolbar-title>
|
<v-toolbar-title>
|
||||||
|
<qd-breadcrumbs
|
||||||
|
:crumbs="[{to: '/settings', text:'Settings'}, {text: 'Keys', disabled: true }]"
|
||||||
|
>crumbs</qd-breadcrumbs>
|
||||||
|
</v-toolbar-title>
|
||||||
|
<v-btn @click="showKey" :disabled="openIndex === null">Show: {{ keys[openIndex] }} </v-btn>
|
||||||
|
<v-btn @click="deleteKey" :disabled="openIndex === null">Delete</v-btn>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-btn @click="wipe" color="error">Delete ALL</v-btn>
|
<v-btn @click="wipe" color="error">Delete ALL</v-btn>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-expansion-panel>
|
<v-expansion-panel v-model="openIndex">
|
||||||
<v-expansion-panel-content popout
|
<v-expansion-panel-content popout
|
||||||
v-for="key in keys"
|
v-for="key in keys"
|
||||||
:key="key"
|
:key="key"
|
||||||
|
|
@ -25,27 +31,39 @@
|
||||||
</v-expansion-panel>
|
</v-expansion-panel>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
<v-snackbar v-model="true" >Settings are currently only stored locally in the browser, using <code>localstorage</code></v-snackbar>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>{
|
<script>{
|
||||||
data(){return {
|
data(){return {
|
||||||
keys: ["?"],
|
keys: ["?"],
|
||||||
showDev: false,
|
openIndex: null
|
||||||
dark:false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
wipe(){
|
wipe(){
|
||||||
if(confirm("wipe localstorage? "+this.keys.length)) settings.clear();
|
if(confirm("wipe localstorage? ")) Settings.clear();
|
||||||
},
|
},
|
||||||
theme(){
|
|
||||||
this.$root.$emit("theme",this.dark)
|
showKey(){
|
||||||
|
var key=this.keys[this.openIndex]
|
||||||
|
console.log("index: ",key)
|
||||||
|
Settings.getItem(key).then(v=>{console.log("ffff",v)})
|
||||||
|
alert("show")
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteKey(){
|
||||||
|
var key=this.keys[this.openIndex]
|
||||||
|
console.log("index: ",key)
|
||||||
|
Settings.removeItem(key).then(v=>{console.log("ffff",v)})
|
||||||
|
alert("show")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
created(){
|
created(){
|
||||||
console.log("settings")
|
console.log("settings")
|
||||||
settings.keys()
|
Settings.keys()
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
this.keys=v
|
this.keys=v
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<template id="settings">
|
<template id="showsettings">
|
||||||
<v-container fluid>
|
<v-container fluid>
|
||||||
<p>Settings are currently only stored locally in the browser, using <code>localstorage</code></p>
|
<p>Settings are currently only stored locally in the browser, using <code>localstorage</code></p>
|
||||||
<v-switch label="Dark theme" v-model="dark" @change="theme"></v-switch>
|
<v-switch label="Dark theme" v-model="dark" @change="theme"></v-switch>
|
||||||
|
|
@ -32,14 +32,14 @@
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
theme(){
|
theme(){
|
||||||
settings.setItem('settings/dark',this.dark)
|
Settings.setItem('settings/dark',this.dark)
|
||||||
.then(v=>{
|
.then(v=>{
|
||||||
this.$root.$emit("theme",this.dark)
|
this.$root.$emit("theme",this.dark)
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
worker(){
|
worker(){
|
||||||
settings.setItem('features/serviceworker',this.serviceworker)
|
Settings.setItem('features/serviceworker',this.serviceworker)
|
||||||
.then(v=>{
|
.then(v=>{
|
||||||
console.log("worker",this.serviceworker)
|
console.log("worker",this.serviceworker)
|
||||||
})
|
})
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
created(){
|
created(){
|
||||||
console.log("settings")
|
console.log("settings")
|
||||||
settings.keys()
|
Settings.keys()
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
this.keys=v
|
this.keys=v
|
||||||
})
|
})
|
||||||
|
|
@ -56,8 +56,8 @@
|
||||||
|
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
Promise.all([
|
Promise.all([
|
||||||
settings.getItem('features/serviceworker'),
|
Settings.getItem('features/serviceworker'),
|
||||||
settings.getItem('settings/dark')
|
Settings.getItem('settings/dark')
|
||||||
])
|
])
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
next(vm => {
|
next(vm => {
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,14 @@
|
||||||
<v-card >
|
<v-card >
|
||||||
<v-toolbar>
|
<v-toolbar>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<v-breadcrumbs :items="crumbs">
|
||||||
<v-breadcrumbs-item to="/tasks" :exact="true">
|
<template slot="item" slot-scope="props">
|
||||||
Tasks
|
<v-breadcrumbs-item :to="props.item.to" :disabled="props.item.disabled" :exact="true">
|
||||||
</v-breadcrumbs-item>
|
{{ props.item.text }}
|
||||||
|
|
||||||
<v-breadcrumbs-item >
|
|
||||||
{{ task }}
|
|
||||||
</v-breadcrumbs-item>
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
</v-breadcrumbs>
|
</v-breadcrumbs>
|
||||||
|
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<router-link :to="{name:'taskhistory', query:{task: task}}"><v-icon>history</v-icon></router-link>
|
<router-link :to="{name:'taskhistory', query:{task: task}}"><v-icon>history</v-icon></router-link>
|
||||||
|
|
@ -55,7 +54,8 @@
|
||||||
loading: false,
|
loading: false,
|
||||||
snackbar: {show:false,msg:"",context:"success"},
|
snackbar: {show:false,msg:"",context:"success"},
|
||||||
valid: false,
|
valid: false,
|
||||||
id: null
|
id: null,
|
||||||
|
crumbs: [{to:"/tasks", text:"Tasks"},{text: this.task, disabled: true}]
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,11 @@
|
||||||
<description>XQdoc...</description>
|
<description>XQdoc...</description>
|
||||||
</task>
|
</task>
|
||||||
|
|
||||||
|
<task name="xqdoc-rest2" url="xqdoc/tx-xqrest2.xq">
|
||||||
|
<title>XQdoc rest2</title>
|
||||||
|
<description>XQdoc.2..</description>
|
||||||
|
</task>
|
||||||
|
|
||||||
<task name="vuecompile">
|
<task name="vuecompile">
|
||||||
<title>vue compile</title>
|
<title>vue compile</title>
|
||||||
<description>compile</description>
|
<description>compile</description>
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,12 @@
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-toolbar>
|
<v-toolbar>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
<v-breadcrumbs >
|
<v-breadcrumbs :items="crumbs">
|
||||||
|
<template slot="item" slot-scope="props">
|
||||||
<v-breadcrumbs-item to="/tasks" :exact="true">
|
<v-breadcrumbs-item to="/tasks" :exact="true">
|
||||||
Tasks
|
Tasks
|
||||||
</v-breadcrumbs-item>
|
</v-breadcrumbs-item>
|
||||||
|
</template>
|
||||||
</v-breadcrumbs>
|
</v-breadcrumbs>
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
@ -49,6 +51,8 @@
|
||||||
<script>{
|
<script>{
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
|
crumbs: [{to: "/tasks", text: "Tasks"}],
|
||||||
|
|
||||||
items: [],
|
items: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
q: null,
|
q: null,
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
this.waiting=false
|
this.waiting=false
|
||||||
this.snackbar={show:true,msg:r.data.msg,context:"success"}
|
this.snackbar={show:true,msg:r.data.msg,context:"success"}
|
||||||
console.log(r.data)
|
console.log(r.data)
|
||||||
settings.setItem('tasks/vuecompile',this.params)
|
Settings.setItem('tasks/vuecompile',this.params)
|
||||||
})
|
})
|
||||||
.catch(error=>{
|
.catch(error=>{
|
||||||
this.waiting=false
|
this.waiting=false
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created: function () {
|
created: function () {
|
||||||
settings.getItem('tasks/vuecompile')
|
Settings.getItem('tasks/vuecompile')
|
||||||
.then((v)=>{
|
.then((v)=>{
|
||||||
if(v)this.params=v
|
if(v)this.params=v
|
||||||
})
|
})
|
||||||
|
|
|
||||||
7
src/vue-poc/features/tasks/xqdoc/getxparse.xq
Normal file
7
src/vue-poc/features/tasks/xqdoc/getxparse.xq
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
import module namespace xqd = 'quodatum:build.xqdoc' at "../../../lib/xqdoc/xqdoc-proj.xqm";
|
||||||
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
|
for $f in //c:file
|
||||||
|
let $ip:= $f/@name/resolve-uri(.,base-uri(.))
|
||||||
|
let $xq:= fetch:text($ip)
|
||||||
|
return xqd:parse($xq)
|
||||||
6
src/vue-poc/features/tasks/xqdoc/getxqdoc.xq
Normal file
6
src/vue-poc/features/tasks/xqdoc/getxqdoc.xq
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
import module namespace xqd = 'quodatum:build.xqdoc' at "../../../lib/xqdoc/xqdoc-proj.xqm";
|
||||||
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
|
for $f in //c:file
|
||||||
|
let $ip:= $f/@name/resolve-uri(.,base-uri(.))
|
||||||
|
return xqd:xqdoc($ip,map{})
|
||||||
|
|
@ -9,12 +9,14 @@ declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
(:~ URL of the root folder to document
|
(:~ URL of the root folder to document
|
||||||
: @default C:/Users/andy/git/vue-poc/src/vue-poc
|
: @default C:/Users/andy/git/vue-poc/src/vue-poc
|
||||||
:)
|
:)
|
||||||
declare variable $efolder as xs:anyURI external :="C:/Users/andy/git/vue-poc/src/vue-poc";
|
declare variable $efolder as xs:anyURI external
|
||||||
|
:=xs:anyURI("C:/Users/andy/git/vue-poc/src/vue-poc");
|
||||||
|
|
||||||
(:~ URL of the schema to use
|
(:~ URL of the schema to use
|
||||||
: @default C:/tmp/xqdoc/
|
: @default C:/tmp/xqdoc/
|
||||||
:)
|
:)
|
||||||
declare variable $target as xs:anyURI external :="C:/tmp/xqdoc/";
|
declare variable $target as xs:anyURI external
|
||||||
|
:=xs:anyURI("C:/tmp/xqdoc/");
|
||||||
|
|
||||||
declare variable $state as element(state):=db:open("vue-poc","/state.xml")/state;
|
declare variable $state as element(state):=db:open("vue-poc","/state.xml")/state;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,9 @@ let $project:=tokenize($efolder,"[/\\]")[last()]=>trace("xqdoc: ")
|
||||||
let $files:= fw:directory-list($efolder,map{"include-filter":".*\.xqm"})
|
let $files:= fw:directory-list($efolder,map{"include-filter":".*\.xqm"})
|
||||||
let $id:=$state/last-id
|
let $id:=$state/last-id
|
||||||
let $opts:=map{
|
let $opts:=map{
|
||||||
|
"src-folder": $efolder,
|
||||||
"project": $project,
|
"project": $project,
|
||||||
"id": $id/string()
|
"ext-id": $id/string()
|
||||||
}
|
}
|
||||||
let $op:=xqd:save-xq($files,$target,$opts)
|
let $op:=xqd:save-xq($files,$target,$opts)
|
||||||
let $result:=<json type="object">
|
let $result:=<json type="object">
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,16 @@ declare namespace xqdoc="http://www.xqdoc.org/1.0";
|
||||||
: @default file:///C:/tmp/xqdoc/
|
: @default file:///C:/tmp/xqdoc/
|
||||||
:)
|
:)
|
||||||
declare variable $target as xs:anyURI external :=
|
declare variable $target as xs:anyURI external :=
|
||||||
"file:///C:/tmp/xqdoc/" cast as xs:anyURI;
|
"file:///C:/tmp/xqdoca/" cast as xs:anyURI;
|
||||||
|
|
||||||
declare variable $nsRESTXQ:= 'http://exquery.org/ns/restxq';
|
declare variable $nsRESTXQ:= 'http://exquery.org/ns/restxq';
|
||||||
|
|
||||||
(:~ map for each restxq:path :)
|
(:~ map for each restxq:path
|
||||||
declare function local:import($path,$id as item(),$folder)
|
: @param
|
||||||
|
:)
|
||||||
|
declare function local:import($path,
|
||||||
|
$id as item(),
|
||||||
|
$folder)
|
||||||
as map(*)*
|
as map(*)*
|
||||||
{
|
{
|
||||||
let $uri:=``[F`{ string($id) }`/]``
|
let $uri:=``[F`{ string($id) }`/]``
|
||||||
|
|
@ -35,8 +39,13 @@ as map(*)*
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: html for page.
|
||||||
|
:)
|
||||||
declare function local:page($reps as map(*)*)
|
declare function local:page($reps as map(*)*)
|
||||||
{
|
{
|
||||||
|
let $tree:=trace($reps?uri)
|
||||||
|
let $tree:=tree:build($tree)=>trace("TRRES")
|
||||||
let $op:= <div>
|
let $op:= <div>
|
||||||
<nav id="toc">
|
<nav id="toc">
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -46,7 +55,7 @@ let $op:= <div>
|
||||||
</div>
|
</div>
|
||||||
<h2>
|
<h2>
|
||||||
<a id="contents"></a>
|
<a id="contents"></a>
|
||||||
<span class="namespace">
|
<span >
|
||||||
RestXQ
|
RestXQ
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
@ -57,14 +66,34 @@ let $op:= <div>
|
||||||
<span class="content">Introduction</span>
|
<span class="content">Introduction</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li href="#main">
|
||||||
|
<a >
|
||||||
|
<span class="secno">2 </span>
|
||||||
|
<span class="content">Paths</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
<a href="index.html">index: </a>
|
<a href="index.html">index: </a>
|
||||||
|
<ol> { local:tree-list($tree) } </ol>
|
||||||
<ul>{$reps!local:path-to-html(.)}</ul>
|
<ul>{$reps!local:path-to-html(.)}</ul>
|
||||||
</div>
|
</div>
|
||||||
return xqd:page($op,map{"resources": "resources/"})
|
return xqd:page($op,map{"resources": "resources/"})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
(:~ tree to list :)
|
||||||
|
declare function local:tree-list($tree){
|
||||||
|
typeswitch ($tree )
|
||||||
|
case element(directory)
|
||||||
|
return <li>{$tree/@name/string()}/<ul>{$tree/*!local:tree-list(.)}</ul></li>
|
||||||
|
|
||||||
|
default
|
||||||
|
return <li>{$tree/@name/string()}</li>
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~ html for a path :)
|
||||||
declare function local:path-to-html($rep as map(*))
|
declare function local:path-to-html($rep as map(*))
|
||||||
as element(li){
|
as element(li){
|
||||||
<li id="{ $rep?uri }">
|
<li id="{ $rep?uri }">
|
||||||
|
|
@ -74,10 +103,11 @@ as element(li){
|
||||||
for $method in map:keys($methods)
|
for $method in map:keys($methods)
|
||||||
let $d:=$methods?($method)
|
let $d:=$methods?($method)
|
||||||
let $id:=head($d?function)
|
let $id:=head($d?function)
|
||||||
return <li><a href="{$d?uri}index.html#{$id }">{ $method }</a>
|
return <li>
|
||||||
<div>{$d?description}</div></li>
|
<a href="{$d?uri}index.html#{$id }">{ $method }</a>
|
||||||
}
|
<div>{$d?description}</div>
|
||||||
</ul>
|
</li>
|
||||||
|
}</ul>
|
||||||
</li>
|
</li>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -102,8 +132,16 @@ let $data:=map:merge(for $report in $reports
|
||||||
|
|
||||||
|
|
||||||
let $uris:=sort(map:keys($data))
|
let $uris:=sort(map:keys($data))
|
||||||
|
let $result:=<json type="object">
|
||||||
return local:page( $data?($uris))
|
<extra>hello</extra>
|
||||||
|
<msg> {$target}, {count($data)} uris processed.</msg>
|
||||||
|
<id>xqrest2 ID??</id>
|
||||||
|
</json>
|
||||||
|
return
|
||||||
|
(
|
||||||
|
local:page( $data?($uris))
|
||||||
=>xqd:store2("restxq.html",$xqd:HTML5)
|
=>xqd:store2("restxq.html",$xqd:HTML5)
|
||||||
=>store:store($target)
|
=>store:store($target),
|
||||||
|
update:output($result)
|
||||||
|
)
|
||||||
|
|
||||||
9
src/vue-poc/features/tasks/xqdoc/xqdoc-pipe.xml
Normal file
9
src/vue-poc/features/tasks/xqdoc/xqdoc-pipe.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<pipeline name='XQDoc generator' xmlns='http://quodatum.com/ns/pipeline'>>
|
||||||
|
<xquery href="tx-xqdoc2.xq">
|
||||||
|
<with-param name="efolder">C:/Users/andy/git/vue-poc/src/vue-poc</with-param>
|
||||||
|
<with-param name="target">C:/tmp/xqdoc/pipe/</with-param>
|
||||||
|
</xquery>
|
||||||
|
<xquery href="tx-xqrest2.xq">
|
||||||
|
<with-param name="target">file:///C:/tmp/xqdoc/pipe/</with-param>
|
||||||
|
</xquery>
|
||||||
|
</pipeline>
|
||||||
29
src/vue-poc/features/tasks/xqdoc/xqdoc.qp.xml
Normal file
29
src/vue-poc/features/tasks/xqdoc/xqdoc.qp.xml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<?xml-model href="../schema/pipeline.rnc" type="application/relax-ng-compact-syntax"?>
|
||||||
|
<pipeline name='XQDoc generator' xmlns='http://quodatum.com/ns/pipeline'>
|
||||||
|
|
||||||
|
<directory-list href="C:\Users\andy\git\vue-poc\src\vue-poc\"
|
||||||
|
include-filter=".*\.xqm" />
|
||||||
|
<store base="C:/tmp/pipes/" fileExpression="'files.xml'" dated="true" />
|
||||||
|
<pipeline>
|
||||||
|
<xslt href="C:\Users\andy\git\vue-poc\src\vue-poc\lib\xqdoc\html-index.xsl">
|
||||||
|
<param/>
|
||||||
|
</xslt>
|
||||||
|
<store base="C:/tmp/pipes/" fileExpression="'index.html'" dated="true" output="html5"/>
|
||||||
|
</pipeline>
|
||||||
|
<pipeline>
|
||||||
|
<xquery href="getxqdoc.xq"/>
|
||||||
|
<store base="C:/tmp/pipes/" fileExpression="'F' || $position || '/xqdoc.xml'" dated="true"/>
|
||||||
|
<identity/>
|
||||||
|
<!--
|
||||||
|
<xslt href="C:\Users\andy\git\vue-poc\src\vue-poc\lib\xqdoc\html-module.xsl"/>
|
||||||
|
-->
|
||||||
|
<store base="C:/tmp/pipes/" fileExpression="'F' || $position || '/index.html'" dated="true" output="html5"/>
|
||||||
|
|
||||||
|
</pipeline>
|
||||||
|
<pipeline>
|
||||||
|
<xquery href="getxparse.xq"/>
|
||||||
|
<store base="C:/tmp/pipes/" fileExpression="'F' || $position || '/xparse.xml'" dated="true"/>
|
||||||
|
</pipeline>
|
||||||
|
|
||||||
|
</pipeline>
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
this.id= r.data.id;
|
this.id= r.data.id;
|
||||||
this.alert={msg:r.data.msg,success:true,error:false}
|
this.alert={msg:r.data.msg,success:true,error:false}
|
||||||
console.log(r.data)
|
console.log(r.data)
|
||||||
settings.setItem('tasks/xqdoc',this.params)
|
Settings.setItem('tasks/xqdoc',this.params)
|
||||||
})
|
})
|
||||||
.catch(error=>{
|
.catch(error=>{
|
||||||
this.waiting=false
|
this.waiting=false
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created: function () {
|
created: function () {
|
||||||
settings.getItem('tasks/xqdoc')
|
Settings.getItem('tasks/xqdoc')
|
||||||
.then((v)=>{
|
.then((v)=>{
|
||||||
if(v)this.params=v
|
if(v)this.params=v
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
Promise.all([settings.getItem('images/thumbtask')
|
Promise.all([Settings.getItem('images/thumbtask')
|
||||||
])
|
])
|
||||||
.then(function(values) {
|
.then(function(values) {
|
||||||
next(vm => {
|
next(vm => {
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
// called when the route that renders this component is about to
|
// called when the route that renders this component is about to
|
||||||
// be navigated away from.
|
// be navigated away from.
|
||||||
// has access to `this` component instance.
|
// has access to `this` component instance.
|
||||||
settings.setItem('images/thumbtask',this.taskxml);
|
Settings.setItem('images/thumbtask',this.taskxml);
|
||||||
next(true);
|
next(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
17
src/vue-poc/features/tiddly/images.xq
Normal file
17
src/vue-poc/features/tiddly/images.xq
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
(: clean tiddly images
|
||||||
|
:)
|
||||||
|
declare variable $SRC:="Z:\home\tiddly\quodatum\tiddlers\";
|
||||||
|
|
||||||
|
declare function local:decode($a){
|
||||||
|
let $b:= analyze-string(trace($a),"%[\d][\d]")
|
||||||
|
transform with {
|
||||||
|
for $m in fn:match
|
||||||
|
return replace value of node $m with
|
||||||
|
bin:decode-string(bin:hex( substring($m,2)))
|
||||||
|
}
|
||||||
|
return $b/string()
|
||||||
|
};
|
||||||
|
|
||||||
|
for $f in file:list($SRC,false())=>filter(function($f){contains($f,"%")})
|
||||||
|
let $d:=local:decode($f)
|
||||||
|
return file:move($SRC || $f,$SRC || $d)
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
beforeRouteEnter (to, from, next) {
|
beforeRouteEnter (to, from, next) {
|
||||||
settings.getItem('settings/ace')
|
Settings.getItem('settings/ace')
|
||||||
.then( v =>{
|
.then( v =>{
|
||||||
|
|
||||||
next(vm => {
|
next(vm => {
|
||||||
|
|
|
||||||
112
src/vue-poc/lib/aync.xqm
Normal file
112
src/vue-poc/lib/aync.xqm
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
xquery version "3.1";
|
||||||
|
(:~
|
||||||
|
: async ..
|
||||||
|
: scheduled, queued, running, cached
|
||||||
|
:)
|
||||||
|
module namespace qipe='http://quodatum.com/ns/pipeline';
|
||||||
|
|
||||||
|
|
||||||
|
(:~ submit a pipeline :)
|
||||||
|
declare
|
||||||
|
%updating
|
||||||
|
function qipe:submit($item as element(qipe:pipeline))
|
||||||
|
{
|
||||||
|
let $dbid:=qipe:id()
|
||||||
|
let $id:=$dbid + 0
|
||||||
|
let $pipe:=<qipe:run id="{$id}" state="queued" step="1"
|
||||||
|
base-uri="{base-uri($item)}">{
|
||||||
|
$item
|
||||||
|
}</qipe:run>
|
||||||
|
return (
|
||||||
|
db:replace("!ASYNC",``[run/`{ $id }`.xml]``,$pipe),
|
||||||
|
replace value of node $dbid with ($dbid +1)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~ next id :)
|
||||||
|
declare
|
||||||
|
function qipe:id()
|
||||||
|
as node(){
|
||||||
|
db:open("!ASYNC","/state.xml")/state/id
|
||||||
|
};
|
||||||
|
|
||||||
|
declare
|
||||||
|
function qipe:get($id as xs:string)
|
||||||
|
as element(qipe:run)?
|
||||||
|
{
|
||||||
|
collection("!ASYNC/run")/qipe:run[@id=$id]
|
||||||
|
};
|
||||||
|
|
||||||
|
declare
|
||||||
|
%updating
|
||||||
|
function qipe:run-step($id as xs:string)
|
||||||
|
{
|
||||||
|
let $run:=qipe:get($id)
|
||||||
|
let $step:= if($run/@state="queued") then
|
||||||
|
$run/@step/number()
|
||||||
|
else error()
|
||||||
|
let $base-uri:= $run/@base-uri/string()
|
||||||
|
|
||||||
|
let $task:= $run/qipe:pipeline/*[position()=$step]
|
||||||
|
let $xq:=resolve-uri($task/@href,$base-uri)
|
||||||
|
let $opts:=map{
|
||||||
|
"id": ``[pipe.`{ $run/@id }`.`{ $step }`]``,
|
||||||
|
"cache": true()
|
||||||
|
}
|
||||||
|
let $bindings:=map:merge( $task/qipe:with-param!map:entry(@name,string()) )
|
||||||
|
let $job:= jobs:invoke($xq,$bindings,$opts)
|
||||||
|
return replace value of node $run/@state with "running"
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~ names of pipeline jobs with results :)
|
||||||
|
declare
|
||||||
|
function qipe:done-jobs()
|
||||||
|
as xs:string*
|
||||||
|
{
|
||||||
|
jobs:list()[starts-with(.,"pipe.")]!.[jobs:list-details(.)/@state="cached"]
|
||||||
|
};
|
||||||
|
|
||||||
|
declare
|
||||||
|
function qipe:queued()
|
||||||
|
as xs:string*
|
||||||
|
{
|
||||||
|
collection("!ASYNC/run")/qipe:run[@state="queued"]/@id/string()
|
||||||
|
};
|
||||||
|
|
||||||
|
(: update run using results of job
|
||||||
|
:)
|
||||||
|
declare
|
||||||
|
%updating
|
||||||
|
function qipe:update($jobid){
|
||||||
|
let $p:=tokenize($jobid,"\.")
|
||||||
|
let $run:=qipe:get($p[2])
|
||||||
|
let $step:=$p[3]
|
||||||
|
|
||||||
|
return try{
|
||||||
|
let $result:=jobs:result($jobid)
|
||||||
|
let $step:=$step+1 (: TODO all done :)
|
||||||
|
return (replace value of node $run/@step with ($step +1),
|
||||||
|
replace value of node $run/@state with "queued")
|
||||||
|
}catch * {
|
||||||
|
(insert node <error code="{ $err:code }">
|
||||||
|
<description>{ $err:description }</description>
|
||||||
|
</error>
|
||||||
|
into $run,
|
||||||
|
replace value of node $run/@state with "error")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
declare
|
||||||
|
function qipe:list-details()
|
||||||
|
{
|
||||||
|
collection("!ASYNC/run")/qipe:run!<run id="{ @id }" state="{ @state }"/>
|
||||||
|
};
|
||||||
|
|
||||||
|
(: periodic task to update :)
|
||||||
|
declare
|
||||||
|
%updating
|
||||||
|
function qipe:tick()
|
||||||
|
{
|
||||||
|
(qipe:queued()!qipe:run-step(.),
|
||||||
|
qipe:done-jobs()!qipe:update(.) )
|
||||||
|
};
|
||||||
|
|
@ -6,8 +6,13 @@
|
||||||
:)
|
:)
|
||||||
module namespace qipe='http://quodatum.com/ns/pipeline';
|
module namespace qipe='http://quodatum.com/ns/pipeline';
|
||||||
import module namespace schematron = "http://github.com/Schematron/schematron-basex";
|
import module namespace schematron = "http://github.com/Schematron/schematron-basex";
|
||||||
|
import module namespace fw="quodatum:file.walker";
|
||||||
|
|
||||||
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
declare variable $qipe:outputs:=map{
|
||||||
|
"html5": map{"method": "html","version":"5.0"},
|
||||||
|
"xml": map{"indent": "no"}
|
||||||
|
};
|
||||||
(:~ run a pipeline
|
(:~ run a pipeline
|
||||||
: @param $pipe the pipeline document
|
: @param $pipe the pipeline document
|
||||||
: @param $initial starting data as sequence
|
: @param $initial starting data as sequence
|
||||||
|
|
@ -26,6 +31,12 @@ as item()*
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
declare function qipe:run($pipe as node() )
|
||||||
|
as item()*
|
||||||
|
{
|
||||||
|
qipe:run($pipe,())
|
||||||
|
};
|
||||||
|
|
||||||
(:~ check pipeline is valid against schema :)
|
(:~ check pipeline is valid against schema :)
|
||||||
declare function qipe:validate-pipeline($pipe as document-node() )
|
declare function qipe:validate-pipeline($pipe as document-node() )
|
||||||
as document-node()
|
as document-node()
|
||||||
|
|
@ -45,9 +56,27 @@ declare function qipe:step($acc,$this as element(*),$opts as map(*))
|
||||||
case element(qipe:xslt) return qipe:xslt($acc,$this,$opts)
|
case element(qipe:xslt) return qipe:xslt($acc,$this,$opts)
|
||||||
case element(qipe:load) return qipe:load($acc,$this,$opts)
|
case element(qipe:load) return qipe:load($acc,$this,$opts)
|
||||||
case element(qipe:store) return qipe:store($acc,$this,$opts)
|
case element(qipe:store) return qipe:store($acc,$this,$opts)
|
||||||
|
case element(qipe:directory-list) return qipe:dir($acc,$this,$opts)
|
||||||
|
case element(qipe:pipeline) return qipe:pipeline($acc,$this,$opts)
|
||||||
|
case element(qipe:identity) return qipe:identity($acc,$this,$opts)
|
||||||
default return error(xs:QName('qipe'), 'unknown step:' || name($this))
|
default return error(xs:QName('qipe'), 'unknown step:' || name($this))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
(:~ subpipe
|
||||||
|
:)
|
||||||
|
declare function qipe:pipeline($acc,$this as element(qipe:pipeline),$opts as map(*))
|
||||||
|
{
|
||||||
|
let $a:=qipe:run($this,$acc)
|
||||||
|
return $acc
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~ identity
|
||||||
|
:)
|
||||||
|
declare function qipe:identity($acc,$this as element(qipe:pipeline),$opts as map(*))
|
||||||
|
{
|
||||||
|
$acc=>trace("IDENT")
|
||||||
|
};
|
||||||
|
|
||||||
(:~ run validate step based on @type
|
(:~ run validate step based on @type
|
||||||
:)
|
:)
|
||||||
declare function qipe:validate($acc,$this as element(qipe:validate),$opts as map(*))
|
declare function qipe:validate($acc,$this as element(qipe:validate),$opts as map(*))
|
||||||
|
|
@ -76,13 +105,25 @@ declare function qipe:validate($acc,$this as element(qipe:validate),$opts as map
|
||||||
$doc
|
$doc
|
||||||
};
|
};
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: append directory-list to accumulator
|
||||||
|
:)
|
||||||
|
declare function qipe:dir($acc,$this as element(qipe:directory-list),$opts as map(*))
|
||||||
|
{
|
||||||
|
let $inc:=$this/@include-filter/string()
|
||||||
|
let $href:=$this/@href/string()
|
||||||
|
let $result:=fw:directory-list($href,map{"include-filter": $inc})
|
||||||
|
let $result:= document { $result } transform with { delete node //c:directory[not(.//c:file)]}
|
||||||
|
return ($acc,$result)
|
||||||
|
};
|
||||||
|
|
||||||
(:~
|
(:~
|
||||||
: run xquery referenced by @href and append result sequence to accumulator
|
: run xquery referenced by @href and append result sequence to accumulator
|
||||||
:)
|
:)
|
||||||
declare function qipe:xquery($acc,$this as element(qipe:xquery),$opts as map(*))
|
declare function qipe:xquery($acc,$this as element(qipe:xquery),$opts as map(*))
|
||||||
{
|
{
|
||||||
let $href:=$this/@href/string()
|
let $href:=resolve-uri($this/@href,base-uri($this))=>trace("AT")
|
||||||
let $result:=xquery:invoke($href)
|
let $result:=xquery:invoke($href,map{'': $acc})
|
||||||
return ($acc,$result)
|
return ($acc,$result)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -91,9 +132,10 @@ declare function qipe:xquery($acc,$this as element(qipe:xquery),$opts as map(*)
|
||||||
:)
|
:)
|
||||||
declare function qipe:xslt($acc,$this as element(qipe:xslt),$opts as map(*))
|
declare function qipe:xslt($acc,$this as element(qipe:xslt),$opts as map(*))
|
||||||
{
|
{
|
||||||
let $href:=qipe:resolve($this/@href)
|
let $href:=qipe:resolve($this/@href)=>trace("XSLT")
|
||||||
for $d at $i in $acc
|
for $d at $i in $acc
|
||||||
let $_:=qipe:log("xslt: " || $i,$opts)
|
let $_:=qipe:log("xslt: " || $i,$opts)
|
||||||
|
let $_:=trace($d,"ddd")
|
||||||
return xslt:transform($d, $href)
|
return xslt:transform($d, $href)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -105,20 +147,23 @@ declare function qipe:store($acc,$this as element(qipe:store),$opts as map(*))
|
||||||
let $href:=qipe:resolve($this/@base)
|
let $href:=qipe:resolve($this/@base)
|
||||||
let $dated:=boolean($this/@dated)
|
let $dated:=boolean($this/@dated)
|
||||||
let $name:=$this/@fileExpression/string()
|
let $name:=$this/@fileExpression/string()
|
||||||
|
let $output:=($this/@output/string(),"xml")[1]
|
||||||
let $eval:="declare variable $position external :=0; " || $name
|
let $eval:="declare variable $position external :=0; " || $name
|
||||||
let $href:=$href || (if( $dated) then
|
let $href:=$href || (if( $dated) then
|
||||||
format-date(current-date(),"/[Y0001][M01][D01]")
|
format-date(current-date(),"/[Y0001][M01][D01]")
|
||||||
else
|
else
|
||||||
())
|
())
|
||||||
|
|
||||||
return (
|
|
||||||
if(file:exists($href)) then () else file:create-dir($href),
|
|
||||||
for $item at $pos in $acc
|
for $item at $pos in $acc
|
||||||
let $name:=xquery:eval($eval,
|
let $name:=xquery:eval($eval,
|
||||||
map{"":$item,
|
map{"":$item,
|
||||||
"position": $pos}) (:eval against doc:)
|
"position": $pos}) (:eval against doc:)
|
||||||
let $dest:=$href || "/" || $name
|
let $dest:=$href || "/" || $name
|
||||||
return ($dest,file:write($dest,$item))
|
let $dir:=file:parent($dest)
|
||||||
|
return (
|
||||||
|
$item
|
||||||
|
,if(file:is-dir($dir)) then () else file:create-dir($dir)
|
||||||
|
,file:write($dest,$item,$qipe:outputs?($output))
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,84 @@
|
||||||
xquery version "3.1";
|
xquery version "3.1";
|
||||||
|
(:~
|
||||||
|
: convert sequence of paths to sequence of xml trees
|
||||||
|
:)
|
||||||
module namespace tree = 'quodatum.data.tree';
|
module namespace tree = 'quodatum.data.tree';
|
||||||
|
|
||||||
|
declare variable $tree:TEST1:=(
|
||||||
|
"/",
|
||||||
|
"/api/environment/",
|
||||||
|
"/api/execute/",
|
||||||
|
"/api/library/",
|
||||||
|
"/api/library/",
|
||||||
|
"/api/library/{$id}/",
|
||||||
|
"/api/library/{$id}/",
|
||||||
|
"/api/state/",
|
||||||
|
"/api/~testbed/",
|
||||||
|
"/api/state/",
|
||||||
|
"/api/state/",
|
||||||
|
"/api/suite/",
|
||||||
|
"/api/suite/{$suite}/",
|
||||||
|
"/api/execute/zz"
|
||||||
|
);
|
||||||
|
|
||||||
|
declare variable $tree:TEST2:=(
|
||||||
|
"/vue-poc",
|
||||||
|
"/vue-poc/api",
|
||||||
|
"/vue-poc/api/collection",
|
||||||
|
"/vue-poc/api/components/tree",
|
||||||
|
"/vue-poc/api/data/users",
|
||||||
|
"/vue-poc/api/data/{$entity}",
|
||||||
|
"/vue-poc/api/edit",
|
||||||
|
"/vue-poc/api/eval/execute",
|
||||||
|
"/vue-poc/api/eval/imports",
|
||||||
|
"/vue-poc/api/eval/invoke",
|
||||||
|
"/vue-poc/api/eval/plan",
|
||||||
|
"/vue-poc/api/eval/result/{$id}",
|
||||||
|
"/vue-poc/api/eval/submit",
|
||||||
|
"/vue-poc/api/form/schema",
|
||||||
|
"/vue-poc/api/get",
|
||||||
|
"/vue-poc/api/get2",
|
||||||
|
"/vue-poc/api/history",
|
||||||
|
"/vue-poc/api/images/datetaken",
|
||||||
|
"/vue-poc/api/images/keywords2",
|
||||||
|
"/vue-poc/api/images/list",
|
||||||
|
"/vue-poc/api/images/list/{ $id }/image",
|
||||||
|
"/vue-poc/api/images/list/{ $id }/meta",
|
||||||
|
"/vue-poc/api/images/list/{ $id }/thumb",
|
||||||
|
"/vue-poc/api/images/list/{$id}",
|
||||||
|
"/vue-poc/api/images/report",
|
||||||
|
"/vue-poc/api/job",
|
||||||
|
"/vue-poc/api/job/{$job}",
|
||||||
|
"/vue-poc/api/log",
|
||||||
|
"/vue-poc/api/log/add",
|
||||||
|
"/vue-poc/api/login-check",
|
||||||
|
"/vue-poc/api/logout",
|
||||||
|
"/vue-poc/api/ping",
|
||||||
|
"/vue-poc/api/repo",
|
||||||
|
"/vue-poc/api/search",
|
||||||
|
"/vue-poc/api/start",
|
||||||
|
"/vue-poc/api/status",
|
||||||
|
"/vue-poc/api/tasks",
|
||||||
|
"/vue-poc/api/tasks/model",
|
||||||
|
"/vue-poc/api/tasks/task",
|
||||||
|
"/vue-poc/api/tasks/vue-compile",
|
||||||
|
"/vue-poc/api/tasks/xqdoc",
|
||||||
|
"/vue-poc/api/tasks/{$task}",
|
||||||
|
"/vue-poc/api/test-select",
|
||||||
|
"/vue-poc/api/thumbnail",
|
||||||
|
"/vue-poc/api/thumbnail/images",
|
||||||
|
"/vue-poc/api/thumbnail/validate",
|
||||||
|
"/vue-poc/api/user",
|
||||||
|
"/vue-poc/api/validate",
|
||||||
|
"/vue-poc/api/xqdoc",
|
||||||
|
"/vue-poc/api/xslt",
|
||||||
|
"/vue-poc/ui",
|
||||||
|
"/vue-poc/ui/{$file=.+}",
|
||||||
|
"vue-poc/api/data/entity",
|
||||||
|
"vue-poc/api/data/entity/{$entity}",
|
||||||
|
"vue-poc/api/data/entity/{$entity}/field"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
(:~
|
(:~
|
||||||
: convert path(s) to tree
|
: convert path(s) to tree
|
||||||
|
|
@ -9,26 +87,28 @@ declare function tree:build($a as xs:string*)
|
||||||
{
|
{
|
||||||
fn:fold-right($a,
|
fn:fold-right($a,
|
||||||
(),
|
(),
|
||||||
function($a,$b){tree:merge(tree:tree($a),$b)}
|
function($this,$acc){ tree:merge($acc,tree:nest($this)) }
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
declare function tree:w($this,$seen)
|
declare function tree:nest($path as xs:string)
|
||||||
as element(*)
|
as element(*)
|
||||||
{
|
{
|
||||||
<directory name="{$this}">{$seen}</directory>
|
let $path:=if(starts-with($path,"/")) then $path else "/" || $path
|
||||||
};
|
let $parts:=fn:tokenize(($path),"/")
|
||||||
|
|
||||||
declare function tree:tree($path as xs:string)
|
|
||||||
as element(*)
|
|
||||||
{
|
|
||||||
let $parts:=fn:tokenize($path,"/")
|
|
||||||
return fn:fold-right(subsequence($parts,1,count($parts)-1),
|
return fn:fold-right(subsequence($parts,1,count($parts)-1),
|
||||||
<file name="{$parts[last()]}"/>,
|
<file name="{$parts[last()]}"/>,
|
||||||
tree:w#2
|
tree:wrap#2
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
declare function tree:wrap($this as xs:string,$acc)
|
||||||
|
as element(*)
|
||||||
|
{
|
||||||
|
<directory name="{$this}">{$acc}</directory>
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
declare function tree:merge($a1 as element(*)?,$a2 as element(*)?)
|
declare function tree:merge($a1 as element(*)?,$a2 as element(*)?)
|
||||||
as element(*)*
|
as element(*)*
|
||||||
{
|
{
|
||||||
|
|
@ -46,7 +126,7 @@ as element(*)*
|
||||||
for $x in fn:distinct-values($n2/@name[fn:not(.=$n1/@name)]) (:only $a2 :)
|
for $x in fn:distinct-values($n2/@name[fn:not(.=$n1/@name)]) (:only $a2 :)
|
||||||
return $a2/*[@name=$x]
|
return $a2/*[@name=$x]
|
||||||
)
|
)
|
||||||
return tree:w($a1/@name,for $x in $t order by $x/@name return $x)
|
return tree:wrap($a1/@name,for $x in $t order by $x/@name return $x)
|
||||||
else
|
else
|
||||||
($a1,$a2)
|
($a1,$a2)
|
||||||
};
|
};
|
||||||
|
|
@ -59,20 +139,13 @@ declare %unit:test
|
||||||
: smoke test
|
: smoke test
|
||||||
:)
|
:)
|
||||||
function tree:test(){
|
function tree:test(){
|
||||||
let $a:=("/",
|
let $t:=tree:build($tree:TEST1)
|
||||||
"/api/environment/",
|
|
||||||
"/api/execute/",
|
|
||||||
"/api/library/",
|
|
||||||
"/api/library/",
|
|
||||||
"/api/library/{$id}/",
|
|
||||||
"/api/library/{$id}/",
|
|
||||||
"/api/state/",
|
|
||||||
"/api/~testbed/",
|
|
||||||
"/api/state/",
|
|
||||||
"/api/state/",
|
|
||||||
"/api/suite/",
|
|
||||||
"/api/suite/{$suite}/",
|
|
||||||
"/api/execute/zz")
|
|
||||||
let $t:=tree:build($a)
|
|
||||||
return unit:assert(fn:true(),$t)
|
return unit:assert(fn:true(),$t)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
declare %unit:test
|
||||||
|
function tree:test2(){
|
||||||
|
|
||||||
|
let $t:=tree:build($tree:TEST1)
|
||||||
|
return unit:assert(fn:false(),$t)
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,14 @@
|
||||||
xmlns:doc="http://www.xqdoc.org/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
xmlns:doc="http://www.xqdoc.org/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
|
||||||
xmlns:qd="http://www.quodatum.com/ns/xsl" exclude-result-prefixes="xs doc fn"
|
xmlns:qd="http://www.quodatum.com/ns/xsl" exclude-result-prefixes="xs doc fn"
|
||||||
xmlns:c="http://www.w3.org/ns/xproc-step" version="2.0">
|
xmlns:c="http://www.w3.org/ns/xproc-step" version="3.0">
|
||||||
|
<xsl:import href="xqdoc.xsl"/>
|
||||||
|
|
||||||
<!-- build project index" -->
|
<!-- build project index" -->
|
||||||
<xsl:param name="project" as="xs:string" />
|
<xsl:param name="project" as="xs:string" >?</xsl:param>
|
||||||
<xsl:param name="id" as="xs:string" />
|
<xsl:param name="ext-id" as="xs:string" >?</xsl:param>
|
||||||
|
<xsl:param name="src-folder" as="xs:string" >c:/</xsl:param>
|
||||||
|
<!-- relative path to resource files -->
|
||||||
<xsl:param name="resources" as="xs:string" select="'resources/'" />
|
<xsl:param name="resources" as="xs:string" select="'resources/'" />
|
||||||
|
|
||||||
<xsl:variable name="css" select="concat($resources,'base.css')" />
|
<xsl:variable name="css" select="concat($resources,'base.css')" />
|
||||||
|
|
@ -22,28 +26,26 @@
|
||||||
content="xqdoc-r - https://github.com/quodatum/xqdoc-r" />
|
content="xqdoc-r - https://github.com/quodatum/xqdoc-r" />
|
||||||
|
|
||||||
<title>
|
<title>
|
||||||
<xsl:value-of select="'Index'" /> <xsl:value-of select="$id" />
|
<xsl:value-of select="'Index'" /> <xsl:value-of select="$ext-id" />
|
||||||
- xqDoc
|
|
||||||
|
* xqDoc
|
||||||
</title>
|
</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="{$resources}xqdoc.png" />
|
<xsl:call-template name="resources">
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}page.css" />
|
<xsl:with-param name="path" select="$resources"/>
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}query.css" />
|
</xsl:call-template>
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}base.css" />
|
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}prettify.css" />
|
|
||||||
|
|
||||||
<script src="{$resources}prettify.js" type="text/javascript"> </script>
|
|
||||||
<script src="{$resources}lang-xq.js" type="text/javascript"> </script>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="home" id="top">
|
<body class="home" id="top">
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<h1>
|
<h1>
|
||||||
XQDoc for
|
<span class="tag tag-success">
|
||||||
<xsl:value-of select="$project" /> ,id: <xsl:value-of select="$id" />
|
<xsl:value-of select="$project" />
|
||||||
|
</span>
|
||||||
|
XQDoc ,id: <xsl:value-of select="$ext-id" />
|
||||||
</h1>
|
</h1>
|
||||||
<xsl:call-template name="toc" />
|
<xsl:call-template name="toc" />
|
||||||
<a href="restxq.html">RestXQ</a>
|
<a href="restxq.html">RestXQ</a>
|
||||||
|
<div>src: <xsl:value-of select="$src-folder" /></div>
|
||||||
<div id="file">
|
<div id="file">
|
||||||
<h1>Files</h1>
|
<h1>Files</h1>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -54,7 +56,14 @@
|
||||||
<div id="ns">
|
<div id="ns">
|
||||||
<h1>Namespace</h1>
|
<h1>Namespace</h1>
|
||||||
<ul>
|
<ul>
|
||||||
<xsl:apply-templates select=".//c:file" />
|
<xsl:for-each select=".//c:file">
|
||||||
|
<xsl:variable name="path" select="resolve-uri(@name,$src-folder)"/>
|
||||||
|
<xsl:variable name="doc" select="doc($path)"/>
|
||||||
|
<li>
|
||||||
|
<xsl:value-of select="position()"/>
|
||||||
|
<xsl:value-of select="$path"/>
|
||||||
|
</li>
|
||||||
|
</xsl:for-each>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -72,12 +81,14 @@
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<xsl:template match="c:file">
|
<xsl:template match="c:file">
|
||||||
|
<xsl:variable name="path" select="string-join(ancestor-or-self::*/@name,'/')"/>
|
||||||
<li>
|
<li>
|
||||||
<a href="F{position()}/index.html">
|
<a href="F{position()}/index.html">
|
||||||
<xsl:value-of select="qd:path(@name)" />
|
<xsl:value-of select="qd:path(@name)" />
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<xsl:value-of select="position()" />
|
<xsl:value-of select="position()" />
|
||||||
|
<xsl:value-of select="$path" />
|
||||||
</li>
|
</li>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
|
|
@ -85,7 +96,7 @@
|
||||||
<nav id="toc">
|
<nav id="toc">
|
||||||
<h2>
|
<h2>
|
||||||
<a id="contents"></a>
|
<a id="contents"></a>
|
||||||
<span class="namespace">
|
<span class="tag tag-success">
|
||||||
<xsl:value-of select="$project" />
|
<xsl:value-of select="$project" />
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
@ -112,9 +123,5 @@
|
||||||
</nav>
|
</nav>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<!-- path -->
|
|
||||||
<xsl:function name="qd:path" as="xs:string">
|
|
||||||
<xsl:param name="file" />
|
|
||||||
<xsl:sequence select="concat('*',$file)" />
|
|
||||||
</xsl:function>
|
|
||||||
</xsl:stylesheet>
|
</xsl:stylesheet>
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,13 @@
|
||||||
xmlns:doc="http://www.xqdoc.org/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
xmlns:doc="http://www.xqdoc.org/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
|
||||||
xmlns:qd="http://www.quodatum.com/ns/xsl" exclude-result-prefixes="xs doc fn"
|
xmlns:qd="http://www.quodatum.com/ns/xsl" exclude-result-prefixes="xs doc fn"
|
||||||
version="2.0">
|
version="3.0">
|
||||||
|
<xsl:import href="xqdoc.xsl"/>
|
||||||
<!-- Standalone xqdoc:xqdoc transform mode"restxq" -->
|
<!-- Standalone xqdoc:xqdoc transform mode"restxq" -->
|
||||||
<xsl:param name="project" as="xs:string" />
|
<xsl:param name="project" as="xs:string" select="'unknown'"/>
|
||||||
<xsl:param name="source" as="xs:string" />
|
<xsl:param name="source" as="xs:string" >No code provided</xsl:param>
|
||||||
<xsl:param name="filename" as="xs:string" />
|
<xsl:param name="filename" as="xs:string" select="'?file'" />
|
||||||
<xsl:param name="id" as="xs:string" />
|
<xsl:param name="ext-id" as="xs:string"></xsl:param>
|
||||||
<xsl:param name="show-private" as="xs:boolean" select="false()" />
|
<xsl:param name="show-private" as="xs:boolean" select="false()" />
|
||||||
<xsl:param name="resources" as="xs:string" select="'../resources/'" />
|
<xsl:param name="resources" as="xs:string" select="'../resources/'" />
|
||||||
|
|
||||||
|
|
@ -28,22 +29,16 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<meta http-equiv="Generator"
|
<meta http-equiv="Generator"
|
||||||
content="xqdoc-r - https://github.com/quodatum/xqdoc-r" />
|
content="xqdoc-r - https://github.com/quodatum/xqdoc-r 2018-11-02" />
|
||||||
|
|
||||||
<title>
|
<title>
|
||||||
<xsl:value-of select="$docuri" />
|
<xsl:value-of select="$docuri" />
|
||||||
- xqDoc
|
- xqDoc
|
||||||
<xsl:value-of select="$id" />
|
<xsl:value-of select="$ext-id" />
|
||||||
</title>
|
</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="{$resources}xqdoc.png" />
|
<xsl:call-template name="resources">
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}page.css" />
|
<xsl:with-param name="path" select="$resources"/>
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}query.css" />
|
</xsl:call-template>
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}base.css" />
|
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}prettify.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="{$resources}prism.css" />
|
|
||||||
<script src="{$resources}prettify.js" type="text/javascript"> </script>
|
|
||||||
<script src="{$resources}prism.js" type="text/javascript"> </script>
|
|
||||||
</head>
|
</head>
|
||||||
<body class="home" id="top">
|
<body class="home" id="top">
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
@ -82,20 +77,18 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = function(){ prettyPrint(); }
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<xsl:template match="doc:module">
|
<xsl:template match="doc:module">
|
||||||
<h1>
|
<h1>
|
||||||
<xsl:value-of select="@type" />
|
<span class="tag tag-success">
|
||||||
module:  
|
|
||||||
<span class="namespace">
|
|
||||||
<xsl:value-of select="doc:uri" />
|
<xsl:value-of select="doc:uri" />
|
||||||
</span>
|
</span>
|
||||||
|
<small> 
|
||||||
|
<xsl:value-of select="@type" /> module
|
||||||
|
</small>
|
||||||
|
|
||||||
</h1>
|
</h1>
|
||||||
<dl>
|
<dl>
|
||||||
|
|
@ -430,12 +423,12 @@
|
||||||
<div>
|
<div>
|
||||||
<a href="{$index}">
|
<a href="{$index}">
|
||||||
↰
|
↰
|
||||||
<xsl:value-of select="$project" /> :id= <xsl:value-of select="$id" />
|
<xsl:value-of select="$project" /> :id= <xsl:value-of select="$ext-id" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<h2>
|
<h2>
|
||||||
<a id="contents"></a>
|
<a id="contents"></a>
|
||||||
<span class="namespace">
|
<span class="">
|
||||||
<xsl:value-of select="$docuri" />
|
<xsl:value-of select="$docuri" />
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
|
||||||
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,48 +0,0 @@
|
||||||
/* Pretty printing styles. Used with prettify.js. */
|
|
||||||
|
|
||||||
.str { color: #080; }
|
|
||||||
.kwd { color: #008; }
|
|
||||||
.com { color: #800; }
|
|
||||||
.typ { color: #606; }
|
|
||||||
.lit { color: #066; }
|
|
||||||
.pun { color: #660; }
|
|
||||||
.pln { color: #000; }
|
|
||||||
.tag { color: #008; }
|
|
||||||
.atn { color: #606; }
|
|
||||||
.atv { color: #080; }
|
|
||||||
.dec { color: #606; }
|
|
||||||
/* pw */
|
|
||||||
.fun { color: red; }
|
|
||||||
.var { color: #606; }
|
|
||||||
/* pw end */
|
|
||||||
pre.prettyprint { padding: 2px; border: 1px solid #888 }
|
|
||||||
|
|
||||||
/* Specify class=linenums on a pre to get line numbering */
|
|
||||||
ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
|
|
||||||
li.L0,
|
|
||||||
li.L1,
|
|
||||||
li.L2,
|
|
||||||
li.L3,
|
|
||||||
li.L5,
|
|
||||||
li.L6,
|
|
||||||
li.L7,
|
|
||||||
li.L8 { list-style-type: none }
|
|
||||||
/* Alternate shading for lines */
|
|
||||||
li.L1,
|
|
||||||
li.L3,
|
|
||||||
li.L5,
|
|
||||||
li.L7,
|
|
||||||
li.L9 { background: #eee }
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
.str { color: #060; }
|
|
||||||
.kwd { color: #006; font-weight: bold; }
|
|
||||||
.com { color: #600; font-style: italic; }
|
|
||||||
.typ { color: #404; font-weight: bold; }
|
|
||||||
.lit { color: #044; }
|
|
||||||
.pun { color: #440; }
|
|
||||||
.pln { color: #000; }
|
|
||||||
.tag { color: #006; font-weight: bold; }
|
|
||||||
.atn { color: #404; }
|
|
||||||
.atv { color: #060; }
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -16,6 +16,8 @@ declare variable $xqd:XML:=map{"indent": "no"};
|
||||||
declare variable $xqd:mod-xslt external :="html-module.xsl";
|
declare variable $xqd:mod-xslt external :="html-module.xsl";
|
||||||
declare variable $xqd:index-xslt external :="html-index.xsl";
|
declare variable $xqd:index-xslt external :="html-index.xsl";
|
||||||
|
|
||||||
|
declare variable $xqd:cache external :=false();
|
||||||
|
|
||||||
(:~ @see https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods :)
|
(:~ @see https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods :)
|
||||||
declare variable $xqd:methods:=("GET","HEAD","POST","PUT","DELETE","PATCH");
|
declare variable $xqd:methods:=("GET","HEAD","POST","PUT","DELETE","PATCH");
|
||||||
|
|
||||||
|
|
@ -61,7 +63,7 @@ declare function xqd:gendoc(
|
||||||
let $params:=map:merge((map{
|
let $params:=map:merge((map{
|
||||||
"source": $xq,
|
"source": $xq,
|
||||||
"filename": $f/@name/string(),
|
"filename": $f/@name/string(),
|
||||||
"cache":true(),
|
"cache": $xqd:cache,
|
||||||
"show-private": true(),
|
"show-private": true(),
|
||||||
"resources": "../resources/"},
|
"resources": "../resources/"},
|
||||||
$params))
|
$params))
|
||||||
|
|
@ -92,7 +94,7 @@ as map(*)* {
|
||||||
let $params:=map:merge((map{
|
let $params:=map:merge((map{
|
||||||
"source": $xq,
|
"source": $xq,
|
||||||
"filename": $f/@name/string(),
|
"filename": $f/@name/string(),
|
||||||
"cache":true(),
|
"cache": $xqd:cache,
|
||||||
"show-private": true(),
|
"show-private": true(),
|
||||||
"resources": "../resources/"},
|
"resources": "../resources/"},
|
||||||
$params))
|
$params))
|
||||||
|
|
|
||||||
27
src/vue-poc/lib/xqdoc/xqdoc.xsl
Normal file
27
src/vue-poc/lib/xqdoc/xqdoc.xsl
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- shared module for xqdoc -->
|
||||||
|
<xsl:stylesheet version="3.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:doc="http://www.xqdoc.org/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:qd="http://www.quodatum.com/ns/xsl" exclude-result-prefixes="xs doc">
|
||||||
|
|
||||||
|
<xsl:template name="resources">
|
||||||
|
<xsl:param name="path" />
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="{$path}xqdoc.png"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{$path}prism.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{$path}page.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{$path}query.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{$path}base.css"/>
|
||||||
|
<style>
|
||||||
|
.tag {font-size: 100%;}
|
||||||
|
</style>
|
||||||
|
<script src="{$path}prism.js" type="text/javascript"> </script>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- path -->
|
||||||
|
<xsl:function name="qd:path" as="xs:string">
|
||||||
|
<xsl:param name="file" />
|
||||||
|
<xsl:sequence select="concat('*',$file)" />
|
||||||
|
</xsl:function>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
(: entity access maps
|
(: entity access maps
|
||||||
: auto generated from xml files in entities folder at: 2018-08-14T21:11:56.357+01:00
|
: auto generated from xml files in entities folder at: 2018-10-26T22:55:28.159+01:00
|
||||||
:)
|
:)
|
||||||
|
|
||||||
module namespace entity = 'quodatum.models.generated';
|
module namespace entity = 'quodatum.models.generated';
|
||||||
|
|
@ -346,6 +346,39 @@ declare variable $entity:list:=map {
|
||||||
|
|
||||||
"views": map{
|
"views": map{
|
||||||
'filter': 'name description'
|
'filter': 'name description'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"repo": map{
|
||||||
|
"name": "repo",
|
||||||
|
"description": "An entry in the basex repository",
|
||||||
|
"access": map{
|
||||||
|
"name": function($_ as element()) as xs:string {$_/@name },
|
||||||
|
"type": function($_ as element()) as xs:string {$_/@type },
|
||||||
|
"version": function($_ as element()) as xs:string {$_/@version } },
|
||||||
|
|
||||||
|
"filter": function($item,$q) as xs:boolean{
|
||||||
|
some $e in ( ) satisfies
|
||||||
|
fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive')
|
||||||
|
},
|
||||||
|
"json": map{
|
||||||
|
"name": function($_ as element()) as element(name)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@name)!element name { .}
|
||||||
|
},
|
||||||
|
"type": function($_ as element()) as element(type)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@type)!element type { .}
|
||||||
|
},
|
||||||
|
"version": function($_ as element()) as element(version)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@version)!element version { .}
|
||||||
|
} },
|
||||||
|
|
||||||
|
"data": function() as element(package)*
|
||||||
|
{ repo:list() },
|
||||||
|
|
||||||
|
"views": map{
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"search-result": map{
|
"search-result": map{
|
||||||
|
|
@ -384,6 +417,87 @@ declare variable $entity:list:=map {
|
||||||
|
|
||||||
"views": map{
|
"views": map{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"task": map{
|
||||||
|
"name": "task",
|
||||||
|
"description": "predefined queries with parameters ",
|
||||||
|
"access": map{
|
||||||
|
"description": function($_ as element()) as xs:string {$_/fn:serialize(description/node()) },
|
||||||
|
"title": function($_ as element()) as xs:string {$_/title },
|
||||||
|
"to": function($_ as element()) as xs:string {$_/@name },
|
||||||
|
"url": function($_ as element()) as xs:string {$_/@url } },
|
||||||
|
|
||||||
|
"filter": function($item,$q) as xs:boolean{
|
||||||
|
some $e in ( ) satisfies
|
||||||
|
fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive')
|
||||||
|
},
|
||||||
|
"json": map{
|
||||||
|
"description": function($_ as element()) as element(description)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/fn:serialize(description/node()))!element description { .}
|
||||||
|
},
|
||||||
|
"title": function($_ as element()) as element(title)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/title)!element title { .}
|
||||||
|
},
|
||||||
|
"to": function($_ as element()) as element(to)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@name)!element to { .}
|
||||||
|
},
|
||||||
|
"url": function($_ as element()) as element(url)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@url)!element url { .}
|
||||||
|
} },
|
||||||
|
|
||||||
|
"data": function() as element(task)*
|
||||||
|
{ doc("tasks/taskdef.xml")/tasks/task },
|
||||||
|
|
||||||
|
"views": map{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"taskhistory": map{
|
||||||
|
"name": "taskhistory",
|
||||||
|
"description": "vue-poc task view events ",
|
||||||
|
"access": map{
|
||||||
|
"created": function($_ as element()) as xs:string {$_/@when },
|
||||||
|
"id": function($_ as element()) as xs:string {$_/@id },
|
||||||
|
"protocol": function($_ as element()) as xs:string {$_/h:file/@mode },
|
||||||
|
"url": function($_ as element()) as xs:string {$_/h:file/@url },
|
||||||
|
"user": function($_ as element()) as xs:string {$_/@user } },
|
||||||
|
|
||||||
|
"filter": function($item,$q) as xs:boolean{
|
||||||
|
some $e in ( ) satisfies
|
||||||
|
fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive')
|
||||||
|
},
|
||||||
|
"json": map{
|
||||||
|
"created": function($_ as element()) as element(created)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@when)!element created { .}
|
||||||
|
},
|
||||||
|
"id": function($_ as element()) as element(id)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@id)!element id { .}
|
||||||
|
},
|
||||||
|
"protocol": function($_ as element()) as element(protocol)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/h:file/@mode)!element protocol { .}
|
||||||
|
},
|
||||||
|
"url": function($_ as element()) as element(url)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/h:file/@url)!element url { .}
|
||||||
|
},
|
||||||
|
"user": function($_ as element()) as element(user)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/@user)!element user { .}
|
||||||
|
} },
|
||||||
|
|
||||||
|
"data": function() as element(h:event)*
|
||||||
|
{ doc("vue-poc/history.xml")/h:history/h:event[task] },
|
||||||
|
|
||||||
|
"views": map{
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"thumbnail": map{
|
"thumbnail": map{
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<xpath>.</xpath>
|
<xpath>.</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-calendar"/>
|
<views iconclass="calendar_today"/>
|
||||||
|
|
||||||
<data type="element(entry)">hof:top-k-by(admin:logs(), hof:id#1, 2)/string()!reverse(admin:logs(.,true()))</data>
|
<data type="element(entry)">hof:top-k-by(admin:logs(), hof:id#1, 2)/string()!reverse(admin:logs(.,true()))</data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
@ -24,6 +24,6 @@
|
||||||
<xpath>h:file/@url</xpath>
|
<xpath>h:file/@url</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-calendar"/>
|
<views iconclass="calendar_today"/>
|
||||||
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[h:file]</data>
|
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[h:file]</data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<xpath>string-length(result)</xpath>
|
<xpath>string-length(result)</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-file-code-o">
|
<views iconclass="code">
|
||||||
<view name="filter">name description</view>
|
<view name="filter">name description</view>
|
||||||
</views>
|
</views>
|
||||||
<data type="element(jobrun)">collection("vue-poc/jobrun")/jobrun
|
<data type="element(jobrun)">collection("vue-poc/jobrun")/jobrun
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<xpath>string-length(result)</xpath>
|
<xpath>string-length(result)</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-file-code-o">
|
<views iconclass="input">
|
||||||
<view name="filter">name description</view>
|
<view name="filter">name description</view>
|
||||||
</views>
|
</views>
|
||||||
<data type="element(query)">collection("replx/queries")/query
|
<data type="element(query)">collection("replx/queries")/query
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,6 @@
|
||||||
<xpath>@type</xpath>
|
<xpath>@type</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="setting_applications"/>
|
<views iconclass="settings_applications"/>
|
||||||
<data type="element(package)">repo:list()</data>
|
<data type="element(package)">repo:list()</data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
@ -18,6 +18,6 @@
|
||||||
<xpath>"app.item.index({'name':'benchx'})"</xpath>
|
<xpath>"app.item.index({'name':'benchx'})"</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-question-circle" />
|
<views iconclass="search" />
|
||||||
<data type="element(search)"></data>
|
<data type="element(search)"></data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
</field>
|
</field>
|
||||||
<field name="description" type="xs:string">
|
<field name="description" type="xs:string">
|
||||||
<description>task description</description>
|
<description>task description</description>
|
||||||
<xpath>fn:serialize(description/node()</xpath>
|
<xpath>fn:serialize(description/node())</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="update"/>
|
<views iconclass="update"/>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,6 @@
|
||||||
<xpath>h:file/@url</xpath>
|
<xpath>h:file/@url</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="fa fa-calendar"/>
|
<views iconclass="calendar_today"/>
|
||||||
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[task]</data>
|
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[task]</data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
@ -48,7 +48,7 @@ const router = new VueRouter({
|
||||||
,children: [
|
,children: [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: Settings, meta:{title:"Settings", requiresAuth:true}
|
component: Showsettings, meta:{title:"Settings", requiresAuth:true}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'keys',
|
path: 'keys',
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -7,22 +7,21 @@
|
||||||
<meta name="description" content="Vue poc" />
|
<meta name="description" content="Vue poc" />
|
||||||
<meta name="author" content="andy bunce." />
|
<meta name="author" content="andy bunce." />
|
||||||
<title>Vue Router Test</title>
|
<title>Vue Router Test</title>
|
||||||
|
<link rel="shortcut icon" href="/vue-poc/ui/icon.png"/>
|
||||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"/>
|
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"/>
|
||||||
<link rel="stylesheet" href="//fonts.googleapis.com/icon?family=Material+Icons"/>
|
<link rel="stylesheet" href="//fonts.googleapis.com/icon?family=Material+Icons"/>
|
||||||
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
|
<link rel="stylesheet" href="//unpkg.com/vuetify@1.3.9/dist/vuetify.min.css" type="text/css"/>
|
||||||
<link rel="stylesheet" href="//unpkg.com/vuetify@1.2.10/dist/vuetify.min.css" type="text/css"/>
|
<link rel="stylesheet" href="//unpkg.com/@riophae/vue-treeselect@0.0.29/dist/vue-treeselect.min.css"/>
|
||||||
<link rel="stylesheet" href="//unpkg.com/@riophae/vue-treeselect@0.0.29/dist/vue-treeselect.min.css">
|
<link rel="stylesheet" href="/vue-poc/ui/prism/prism.css" rel="stylesheet" type="text/css"/>
|
||||||
<link rel="stylesheet" href="/vue-poc/ui/prism/prism.css" rel="stylesheet" type="text/css"/>>
|
|
||||||
<link rel="stylesheet" href="//unpkg.com/leaflet@1.0.3/dist/leaflet.css"/>
|
<link rel="stylesheet" href="//unpkg.com/leaflet@1.0.3/dist/leaflet.css"/>
|
||||||
<link href="/vue-poc/ui/app.css" rel="stylesheet" type="text/css"/>
|
<link href="/vue-poc/ui/app.css" rel="stylesheet" type="text/css"/>
|
||||||
<link href="/vue-poc/ui/svg/d3-svg.css" rel="stylesheet" type="text/css"/>
|
<link href="/vue-poc/ui/svg/d3-svg.css" rel="stylesheet" type="text/css"/>
|
||||||
<link rel="shortcut icon" href="/vue-poc/ui/icon.png"/>
|
|
||||||
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/vis/4.20.1/vis-timeline-graph2d.min.css" />
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/vis/4.20.1/vis-timeline-graph2d.min.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<h3><code>vue-poc</code> <small>(v0.3.10)</small> </h3>
|
<h3><code>vue-poc</code> <small>(v0.3.135)</small> </h3>
|
||||||
|
|
||||||
<div class="spinner">
|
<div class="spinner">
|
||||||
<div class="rect1"></div>
|
<div class="rect1"></div>
|
||||||
|
|
@ -38,7 +37,7 @@
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/qs/6.4.0/qs.js" crossorigin="anonymous" ></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/qs/6.4.0/qs.js" crossorigin="anonymous" ></script>
|
||||||
<script src="//unpkg.com/vuetify@1.2.10/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
<script src="//unpkg.com/vuetify@1.3.9/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ext-language_tools.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ext-language_tools.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ext-linking.js" type="text/javascript" charset="utf-8"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ext-linking.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
declare variable $MAX:=100000;
|
declare variable $MAX external:= 100000;
|
||||||
for $i in (2 to $MAX) return if (every $j in (2 to $i - 1) satisfies $i mod $j ne 0) then $i else ()
|
for $i in (2 to $MAX) return if (every $j in (2 to $i - 1) satisfies $i mod $j ne 0) then $i else ()
|
||||||
Loading…
Add table
Reference in a new issue