[mod] vuetify 1.5.16
This commit is contained in:
parent
5ca759abeb
commit
466cfada2a
32 changed files with 920 additions and 213 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
WARNING=DO NOT MODIFY THIS FILE IF YOU DON'T UNDERSTAND
|
WARNING=DO NOT MODIFY THIS FILE IF YOU DON'T UNDERSTAND
|
||||||
defaultDestination=C\:/Users/andy/Desktop/basex.versions/webapp
|
defaultDestination=C\:/Users/andy/basex.home/webapp
|
||||||
defaultVariables=
|
defaultVariables=
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
includeTeamPrivateFiles=false
|
includeTeamPrivateFiles=false
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,8 @@
|
||||||
text: 'Server' ,
|
text: 'Server' ,
|
||||||
model: false,
|
model: false,
|
||||||
children: [
|
children: [
|
||||||
{href: '/server/jobs',text: 'Running jobs',icon: 'dashboard'},
|
{href: '/server/jobs',text: 'Running jobs',icon: 'dashboard'},
|
||||||
|
{href: '/server/services',text: 'Services',icon: 'dashboard'},
|
||||||
{href: '/server/logs',text: 'Server logs',icon: 'dns'},
|
{href: '/server/logs',text: 'Server logs',icon: 'dns'},
|
||||||
{href: '/server/users',text: 'Users',icon: 'supervisor_account'},
|
{href: '/server/users',text: 'Users',icon: 'supervisor_account'},
|
||||||
{href: '/server/repo',text: 'Server code repository',icon: 'local_library'},
|
{href: '/server/repo',text: 'Server code repository',icon: 'local_library'},
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ function vue-api:xqdoc( )
|
||||||
|
|
||||||
(:~
|
(:~
|
||||||
: Returns folder info.
|
: Returns folder info.
|
||||||
|
: @param $url location
|
||||||
|
: @param $protocol 'file' or 'xmldb'
|
||||||
:)
|
:)
|
||||||
declare
|
declare
|
||||||
%rest:GET %rest:path("/vue-poc/api/collection")
|
%rest:GET %rest:path("/vue-poc/api/collection")
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ xquery version "3.1";
|
||||||
(:~ data locations for image feature :)
|
(:~ data locations for image feature :)
|
||||||
module namespace cfg = "quodatum:media.image.configure";
|
module namespace cfg = "quodatum:media.image.configure";
|
||||||
|
|
||||||
declare variable $cfg:DB-IMAGE:="media-images-20180817";
|
declare variable $cfg:DB-IMAGE:="media-images";
|
||||||
|
|
||||||
declare variable $cfg:IMAGEDIR:="P:/pictures/Pictures/";
|
declare variable $cfg:IMAGEDIR:="P:/pictures/Pictures/";
|
||||||
declare variable $cfg:THUMBDIR:="C:/tmp/";
|
declare variable $cfg:THUMBDIR:="C:/tmp/";
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
<span class="white--text">Image: {{ id }}</span>
|
<span class="white--text">Image: {{ id }}</span>
|
||||||
<a :href="path" :download="id +'.jpg'"><v-icon>file_download</v-icon></a>
|
<a :href="path" :download="id +'.jpg'"><v-icon>file_download</v-icon></a>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-layout>
|
<v-layout>
|
||||||
<v-flex xs5>
|
<v-flex xs5>
|
||||||
|
|
@ -24,7 +25,8 @@
|
||||||
</v-flex>
|
</v-flex>
|
||||||
|
|
||||||
<v-flex xs7 >
|
<v-flex xs7 >
|
||||||
<iframe :src="path" style="border:0;width:100%;height:100%;min-height:400px;">image</iframe>
|
|
||||||
|
<v-img v-if="loaded" src="/vue-poc/api/images/list/17236456/image" min-height="400px" height="100%" width="100%"/>
|
||||||
</v-flex>
|
</v-flex>
|
||||||
</v-layout>
|
</v-layout>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|
@ -40,18 +42,22 @@
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
path(){
|
path(){
|
||||||
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/image':null
|
var a=this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/image':null
|
||||||
|
console.log("path",a)
|
||||||
|
return a
|
||||||
},
|
},
|
||||||
meta(){
|
meta(){
|
||||||
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/meta':null
|
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/meta':null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created:function(){
|
created:function(){
|
||||||
var id=this._props.id
|
var id=this.id
|
||||||
|
|
||||||
HTTP.get("images/list/"+id)
|
HTTP.get("images/list/"+id)
|
||||||
.then(r=>{
|
.then(r=>{
|
||||||
this.image=r.data
|
this.image=r.data
|
||||||
this.loaded=true
|
this.loaded=true
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,39 +38,52 @@
|
||||||
</v-toolbar-items>
|
</v-toolbar-items>
|
||||||
</span>
|
</span>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-toolbar-items>
|
<v-toolbar-items>
|
||||||
<v-btn @click.stop="pageBack()" :disabled="query.page==0" icon >
|
<v-btn @click.stop="pageBack()" :disabled="query.page==0" icon >
|
||||||
<v-avatar>
|
<v-avatar>
|
||||||
<v-icon>arrow_back</v-icon>
|
<v-icon>arrow_back</v-icon>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-btn @click.stop="pageNext()" icon >
|
|
||||||
<v-avatar>
|
<v-btn @click.stop="pageNext()" icon >
|
||||||
<v-icon>arrow_forward</v-icon>
|
<v-avatar>
|
||||||
</v-avatar>
|
<v-icon>arrow_forward</v-icon>
|
||||||
</v-btn>
|
</v-avatar>
|
||||||
|
</v-btn>
|
||||||
</v-toolbar-items>
|
</v-toolbar-items>
|
||||||
|
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true" ></v-progress-linear>
|
<v-progress-linear v-if="busy" v-bind:indeterminate="true" ></v-progress-linear>
|
||||||
<v-container v-if="!busy" fluid grid-list-md>
|
<v-container v-if="!busy" fluid grid-list-md>
|
||||||
<v-layout row wrap v-touch="{ left: () => pageNext(), right: () => pageBack()}">
|
<v-layout row wrap v-touch="{ left: () => pageNext(), right: () => pageBack()}">
|
||||||
<v-flex height="80px"
|
<v-flex xs12 sm6 md4 lg3 xl2
|
||||||
xs2
|
|
||||||
v-for="image in images"
|
v-for="image in images"
|
||||||
:key="image.name"
|
:key="image.name"
|
||||||
>
|
>
|
||||||
<v-card tile :elevation="2" :hover="true" color="grey lighten-3" >
|
<v-card tile :elevation="2" :hover="true" color="grey lighten-3" >
|
||||||
|
<v-toolbar height="16px" >
|
||||||
|
<v-toolbar-title :title="image.path">{{image.name}}</v-toolbar-title>
|
||||||
|
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
|
||||||
|
<v-avatar icon small v-if="image.geo">
|
||||||
|
<v-icon>place</v-icon>
|
||||||
|
</v-avatar>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<a :href="src(image)" target="thumb" :title="image.id">
|
||||||
|
<v-avatar icon small >
|
||||||
|
<v-icon>search</v-icon>
|
||||||
|
</v-avatar>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</v-toolbar>
|
||||||
|
|
||||||
<div :style="style(image)" v-bind:class="{ selcard: image.selected}"
|
<div :style="style(image)" v-bind:class="{ selcard: image.selected}"
|
||||||
|
|
||||||
@dblclick="go(image)" @click.prevent.stop="image.selected =! image.selected ">
|
@dblclick="go(image)" @click.prevent.stop="image.selected =! image.selected ">
|
||||||
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
|
|
||||||
<v-avatar icon small v-if="image.geo">
|
|
||||||
<v-icon>place</v-icon>
|
|
||||||
</v-avatar>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a :href="src(image)" target="thumb">{{image.id}}</a>
|
|
||||||
<div v-if="image.selected" style="position:absolute;right:0;top:0" >
|
<div v-if="image.selected" style="position:absolute;right:0;top:0" >
|
||||||
<v-icon class="white primary--text">check_circle</v-icon>
|
<v-icon class="white primary--text">check_circle</v-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,32 +3,19 @@
|
||||||
image report
|
image report
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<template id="report">
|
<template id="report"> <v-container fluid> <v-card>
|
||||||
<v-container fluid>
|
<v-toolbar class="orange darken-1"> <v-btn icon to="./">
|
||||||
<v-card >
|
<v-icon>arrow_back</v-icon></v-btn> <v-card-title> <v-chip>Settings</v-chip>
|
||||||
<v-toolbar class="orange darken-1">
|
</v-card-title> <v-spacer></v-spacer> </v-toolbar> <v-progress-linear v-if="busy"
|
||||||
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
v-bind:indeterminate="true"></v-progress-linear> <v-card-text>
|
||||||
<v-card-title >
|
<ul v-if="report">
|
||||||
<v-chip >Settings</v-chip>
|
<li>DB: {{ report.imagedb }}</li>
|
||||||
</v-card-title>
|
<li><a :href="'/vue-poc/ui/database?url=/' + report.imagedb + '/'" target="new">db</a></li>
|
||||||
|
<li></li>
|
||||||
<v-spacer></v-spacer>
|
</ul>
|
||||||
|
<pre>
|
||||||
</v-toolbar>
|
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true" ></v-progress-linear>
|
|
||||||
<v-card-text >
|
|
||||||
<ul>
|
|
||||||
<li></li>
|
|
||||||
<li></li>
|
|
||||||
<li></li>
|
|
||||||
</ul>
|
|
||||||
<pre>
|
|
||||||
{{ report | pretty }}
|
{{ report | pretty }}
|
||||||
</pre>
|
</pre> </v-card-text> </v-card> </v-container> </template>
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-container>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>{
|
<script>{
|
||||||
data: ()=>({
|
data: ()=>({
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,17 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<template id="keywords">
|
<template id="keywords">
|
||||||
<v-container fluid>
|
<v-card >
|
||||||
<v-card >
|
<v-toolbar dense class="orange darken-1">
|
||||||
<v-toolbar class="orange darken-1">
|
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
||||||
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
<v-card-title>
|
||||||
<v-card-title >
|
<v-chip>click to show</v-chip>
|
||||||
<v-chip >click to show</v-chip>
|
</v-card-title>
|
||||||
</v-card-title>
|
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-text-field prepend-icon="search" label="Filter..." v-model="q" type="search"
|
<v-text-field prepend-icon="search"
|
||||||
hide-details single-line @keyup.enter="setfilter"
|
label="Filter..." v-model="q" type="search" hide-details
|
||||||
:append-icon="this.q?'clear':''" @click:append="e=>this.q=''"></v-text-field>
|
single-line @keyup.enter="setfilter" :append-icon="this.q?'clear':''"
|
||||||
</v-toolbar>
|
@click:append="e=>this.q=''"></v-text-field> </v-toolbar>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true" ></v-progress-linear>
|
<v-progress-linear v-if="busy" v-bind:indeterminate="true" ></v-progress-linear>
|
||||||
<v-container v-if="!busy" fluid grid-list-md>
|
<v-container v-if="!busy" fluid grid-list-md>
|
||||||
|
|
@ -38,7 +36,6 @@
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-container>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>{
|
<script>{
|
||||||
|
|
|
||||||
|
|
@ -16,4 +16,9 @@ declare %updating function local:put($data,$path)
|
||||||
|
|
||||||
let $opt:=map{"include-info":true()}
|
let $opt:=map{"include-info":true()}
|
||||||
let $files:=fw:directory-list($cfg:IMAGEDIR,$opt)
|
let $files:=fw:directory-list($cfg:IMAGEDIR,$opt)
|
||||||
return $files=>local:put('/pics.xml')
|
let $meta:=<meta created="{ current-dateTime() }">
|
||||||
|
<imagedir>{ $cfg:IMAGEDIR }></imagedir>
|
||||||
|
</meta>
|
||||||
|
return ($files=>local:put('/pics.xml'),
|
||||||
|
$meta=>local:put('pics-meta.xml')
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
(:~
|
||||||
|
: enrich file list for images
|
||||||
|
:)
|
||||||
|
import module namespace cfg = "quodatum:media.image.configure" at "../config.xqm";
|
||||||
|
|
||||||
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
|
declare %updating function local:put($data,$path)
|
||||||
|
{
|
||||||
|
if(db:exists($cfg:DB-IMAGE)) then
|
||||||
|
db:replace($cfg:DB-IMAGE,$path,$data)
|
||||||
|
else
|
||||||
|
db:create($cfg:DB-IMAGE,$data,$path)
|
||||||
|
};
|
||||||
|
|
||||||
|
declare function local:type($path as xs:string)
|
||||||
|
as xs:string
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
fetch:content-type($path)
|
||||||
|
}catch * {
|
||||||
|
"**ERR"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
declare %updating function local:meta($doc)
|
||||||
|
{
|
||||||
|
insert node (attribute { 'dc-updated' } { current-dateTime() }) into $doc/*
|
||||||
|
};
|
||||||
|
|
||||||
|
declare %updating function local:original($doc)
|
||||||
|
{
|
||||||
|
for $f in $doc//c:file[ends-with(../@xml:base,"originals/")]
|
||||||
|
return insert node (attribute { 'original' } {true() }) into $f
|
||||||
|
};
|
||||||
|
|
||||||
|
declare %updating function local:content-type($doc)
|
||||||
|
{
|
||||||
|
for $f in $doc//c:file
|
||||||
|
let $loc:= $f/../@xml:base || $f/@name
|
||||||
|
let $mime:="?" (: local:type($loc) :)
|
||||||
|
return insert node attribute { 'content-type' } { $mime } into $f
|
||||||
|
};
|
||||||
|
|
||||||
|
let $doc:=db:open($cfg:DB-IMAGE,"/pics.xml")
|
||||||
|
let $doc:= $doc transform with {
|
||||||
|
local:meta(/)
|
||||||
|
,local:original(/)
|
||||||
|
,local:content-type(/)
|
||||||
|
}
|
||||||
|
return $doc
|
||||||
|
|
@ -7,11 +7,12 @@ import module namespace cfg = "quodatum:media.image.configure" at "../config.xqm
|
||||||
import module namespace imgmeta = "expkg-zone58:image.metadata" ;
|
import module namespace imgmeta = "expkg-zone58:image.metadata" ;
|
||||||
declare namespace c="http://www.w3.org/ns/xproc-step";
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
|
declare variable $CHUNK as xs:integer external := 100;
|
||||||
|
|
||||||
declare variable $dir-uri:=``[`{ $cfg:DB-IMAGE }`/pics.xml]``;
|
declare variable $dir-uri:=``[`{ $cfg:DB-IMAGE }`/pics.xml]``;
|
||||||
declare variable $doc:=doc( $dir-uri);
|
declare variable $doc:=doc( $dir-uri);
|
||||||
declare variable $CHUNK:=15000;
|
|
||||||
declare variable $meta:="/meta/";
|
declare variable $meta:="/meta/";
|
||||||
let $done:=uri-collection($cfg:DB-IMAGE ||$meta)
|
let $done:=uri-collection($cfg:DB-IMAGE ||$meta)
|
||||||
let $files:= $doc//c:file[ends-with(lower-case(@name),".jpg")]
|
let $files:= $doc//c:file[ends-with(lower-case(@name),".jpg")]
|
||||||
|
|
||||||
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
||||||
|
|
@ -22,4 +23,7 @@ return (for $f in subsequence($todo,1, $CHUNK)
|
||||||
let $dbpath:=$meta || $f || "/meta.xml"
|
let $dbpath:=$meta || $f || "/meta.xml"
|
||||||
let $meta:=imgmeta:read(trace($spath))
|
let $meta:=imgmeta:read(trace($spath))
|
||||||
return db:replace($cfg:DB-IMAGE,$dbpath,$meta),
|
return db:replace($cfg:DB-IMAGE,$dbpath,$meta),
|
||||||
update:output($todo=>count()))
|
|
||||||
|
let $msg:=out:format("%d / %d (%f)",count($todo),count($relpath),1 - count($todo) div count($relpath))
|
||||||
|
return update:output($msg)
|
||||||
|
)
|
||||||
|
|
@ -6,21 +6,53 @@ import module namespace t="expkg-zone58:image.thumbnailator";
|
||||||
import module namespace cfg = "quodatum:media.image.configure" at "../config.xqm";
|
import module namespace cfg = "quodatum:media.image.configure" at "../config.xqm";
|
||||||
declare namespace c="http://www.w3.org/ns/xproc-step";
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
declare variable $CHUNK:=1000;
|
declare variable $CHUNK as xs:integer external := 5;
|
||||||
|
|
||||||
declare variable $DEST:="/pics.xml";
|
declare variable $DEST:="/pics.xml";
|
||||||
declare variable $SIZE:=xs:integer(100);
|
declare variable $SIZE:=xs:integer(100);
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: true if thumbnail not found
|
||||||
|
:)
|
||||||
|
declare function local:missing($f as xs:string)
|
||||||
|
as xs:boolean
|
||||||
|
{
|
||||||
|
let $_:=$f
|
||||||
|
return not(file:exists($cfg:THUMBDIR || $f))
|
||||||
|
and file:exists($cfg:IMAGEDIR || "../" || $f)
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: find 1st chunk valid items
|
||||||
|
:)
|
||||||
|
declare function local:chunk($items as item()*,
|
||||||
|
$fn as function(*),
|
||||||
|
$chunksize as xs:integer)
|
||||||
|
{
|
||||||
|
fold-left($items,(),
|
||||||
|
function($result,$curr){
|
||||||
|
if(count($result) ge $chunksize) then
|
||||||
|
($result,$curr)
|
||||||
|
else if($fn($curr)) then
|
||||||
|
($result,$curr)
|
||||||
|
else
|
||||||
|
$result
|
||||||
|
}
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
declare %updating function local:store-thumb($f as xs:string)
|
declare %updating function local:store-thumb($f as xs:string)
|
||||||
{
|
{
|
||||||
let $src:=$cfg:IMAGEDIR || "../" || trace($f)
|
let $src:=$cfg:IMAGEDIR || "../" || trace($f,"gen thumb: ")
|
||||||
let $trg:= $cfg:THUMBDIR || $f
|
let $trg:= $cfg:THUMBDIR || $f
|
||||||
return try{
|
return try{
|
||||||
fetch:binary($src)=>t:size($SIZE)=>local:write-binary($trg)
|
fetch:binary($src)=>t:size($SIZE)=>local:write-binary($trg)
|
||||||
} catch * {
|
} catch * {
|
||||||
update:output("bad: " || $f)
|
prof:dump("bad: " || $f),
|
||||||
|
local:write-binary(convert:string-to-hex('bad'),$trg)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
(:~ create folder if missing) :)
|
(:~ create folder if missing) :)
|
||||||
declare %updating function local:write-binary($data,$url as xs:string)
|
declare %updating function local:write-binary($data,$url as xs:string)
|
||||||
{
|
{
|
||||||
|
|
@ -36,13 +68,9 @@ declare %updating function local:write-binary($data,$url as xs:string)
|
||||||
let $files:= doc($cfg:DB-IMAGE || $DEST)//c:file[ends-with(lower-case(@name),".jpg")]
|
let $files:= doc($cfg:DB-IMAGE || $DEST)//c:file[ends-with(lower-case(@name),".jpg")]
|
||||||
|
|
||||||
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
||||||
let $relpath:=filter($relpath,function($f){
|
let $todo:= local:chunk($relpath,local:missing#1,$CHUNK)
|
||||||
not(file:exists($cfg:THUMBDIR || $f))
|
let $msg:=out:format("%d / %d (%f)",count($todo),count($relpath),1 - count($todo) div count($relpath))
|
||||||
and file:exists($cfg:IMAGEDIR || "../" || $f)
|
|
||||||
})
|
|
||||||
let $todo:= $relpath=>subsequence(1, $CHUNK)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
$todo!local:store-thumb(.),
|
subsequence($todo,1,$CHUNK)!local:store-thumb(.),
|
||||||
update:output($relpath=>count())
|
update:output($msg)
|
||||||
)
|
)
|
||||||
60
src/vue-poc/features/images/tasks/pics-04a-thumbs.xq
Normal file
60
src/vue-poc/features/images/tasks/pics-04a-thumbs.xq
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
(:~
|
||||||
|
: generate thumbs
|
||||||
|
: @return initial number of missing docs
|
||||||
|
:)
|
||||||
|
import module namespace t="expkg-zone58:image.thumbnailator";
|
||||||
|
import module namespace cfg = "quodatum:media.image.configure" at "../config.xqm";
|
||||||
|
declare namespace c="http://www.w3.org/ns/xproc-step";
|
||||||
|
|
||||||
|
declare variable $CHUNK:= 2;
|
||||||
|
|
||||||
|
declare variable $DEST:="/pics.xml";
|
||||||
|
declare variable $SIZE:=xs:integer(100);
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: true if thumbnail not found
|
||||||
|
:)
|
||||||
|
declare function local:missing($f as xs:string)
|
||||||
|
as xs:boolean
|
||||||
|
{
|
||||||
|
let $_:=$f
|
||||||
|
return not(file:exists($cfg:THUMBDIR || $f))
|
||||||
|
and file:exists($cfg:IMAGEDIR || "../" || $f)
|
||||||
|
};
|
||||||
|
|
||||||
|
(:~
|
||||||
|
: find 1st chunk valid items
|
||||||
|
:)
|
||||||
|
declare function local:chunk($items as item()*,
|
||||||
|
$fn as function(*),
|
||||||
|
$chunksize as xs:integer)
|
||||||
|
{
|
||||||
|
fold-left($items,(),
|
||||||
|
function($result,$curr){
|
||||||
|
if(count($result) ge $chunksize) then
|
||||||
|
($result,$curr)
|
||||||
|
else if(local:missing($curr)) then
|
||||||
|
($result,$curr)
|
||||||
|
else
|
||||||
|
$result
|
||||||
|
}
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
let $files:= doc($cfg:DB-IMAGE || $DEST)//c:file[ends-with(lower-case(@name),".jpg")]
|
||||||
|
|
||||||
|
let $relpath:= $files!( ancestor-or-self::*/@name=>string-join("/"))
|
||||||
|
(: let $relpath:=filter($relpath,local:missing#1) :)
|
||||||
|
|
||||||
|
(: let $relpath:=fold-left($relpath,(),
|
||||||
|
function($result,$curr){
|
||||||
|
if(count($result) ge $CHUNK) then
|
||||||
|
$result
|
||||||
|
else if(local:missing($curr)) then
|
||||||
|
($result,$curr)
|
||||||
|
else
|
||||||
|
$result
|
||||||
|
}
|
||||||
|
) :)
|
||||||
|
|
||||||
|
return local:chunk($relpath,local:missing#1,$CHUNK)
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
-->
|
||||||
<template id="job">
|
<template id="job">
|
||||||
<v-card >
|
<v-card >
|
||||||
<v-toolbar >
|
<v-toolbar >
|
||||||
|
|
@ -12,14 +14,17 @@
|
||||||
<v-chip label class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
<v-chip label class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
||||||
<v-chip label class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
<v-chip label class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-chip class="primary white--text">
|
<v-chip class="primary white--text">
|
||||||
<v-avatar>
|
<v-avatar>
|
||||||
<v-icon>account_circle</v-icon>
|
<v-icon>account_circle</v-icon>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
{{ jobstate.user }}</v-chip>
|
{{ jobstate.user }}</v-chip>
|
||||||
|
|
||||||
<v-chip class="green white--text">
|
<v-chip class="green white--text">
|
||||||
<v-avatar ><v-icon>timer</v-icon></v-avatar>
|
<v-avatar ><v-icon>timer</v-icon></v-avatar>
|
||||||
{{ jobstate.duration }}</v-chip>
|
{{ jobstate.duration }}</v-chip>
|
||||||
|
|
||||||
<v-btn icon :loading="loading" @click="getJob()" :disabled="loading || finished">
|
<v-btn icon :loading="loading" @click="getJob()" :disabled="loading || finished">
|
||||||
<v-icon>refresh</v-icon>
|
<v-icon>refresh</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,17 @@
|
||||||
<jobs>
|
<jobs>
|
||||||
<job base-uri="file:///C:/Users/andy/git/vue-poc/src/vue-poc/tasks/file2" id="cleanup" interval="PT1M">admin:write-log("cleanup","QDS")</job>
|
<job base-uri="file:///C:/Users/andy/git/vue-poc/src/vue-poc/tasks/file2" id="cleanup" interval="PT1M">admin:write-log("cleanup","QDS")</job>
|
||||||
|
<job base-uri="file:///C:/Users/andy/basex.home/webapp/" id="thumbs" interval="PT5M">
|
||||||
|
let $showtime:=function($a, $start){
|
||||||
|
out:format(" (time %d ms)",prof:current-ms()-$start)
|
||||||
|
}(?,prof:current-ms())
|
||||||
|
let $xq:= 'file:///C:/Users/andy/basex.home/webapp/vue-poc/features/images/tasks/pics-04-store-thumbs.xq'
|
||||||
|
|
||||||
|
return try {
|
||||||
|
admin:write-log("start","THUMB"),
|
||||||
|
xquery:eval-update(xs:anyURI($xq),map{"CHUNK": 20}),
|
||||||
|
admin:write-log("state20: " || update:cache() || $showtime(""),"THUMB")
|
||||||
|
}catch * {
|
||||||
|
admin:write-log("err: " || $err:description,"THUMB")
|
||||||
|
}
|
||||||
|
</job>
|
||||||
</jobs>
|
</jobs>
|
||||||
|
|
@ -19,6 +19,8 @@ as element(json)
|
||||||
}</json>
|
}</json>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(:~
|
(:~
|
||||||
: job info
|
: job info
|
||||||
:)
|
:)
|
||||||
|
|
@ -42,7 +44,7 @@ as element(*)*
|
||||||
,<state>{$j/@state/string()}</state>
|
,<state>{$j/@state/string()}</state>
|
||||||
,<user>{$j/@user/string()}</user>
|
,<user>{$j/@user/string()}</user>
|
||||||
,<registered>{$j/@time/string()}</registered>
|
,<registered>{$j/@time/string()}</registered>
|
||||||
,<start>{$j/@start/string()}</start>
|
,if($j/@start) then <start>{$j/@start/string()}</start> else ()
|
||||||
,<duration>{$j/@duration/string()}</duration>
|
,<duration>{$j/@duration/string()}</duration>
|
||||||
,<text>{$j/string()}</text>
|
,<text>{$j/string()}</text>
|
||||||
,<reads>{$j/@reads/string()}</reads>
|
,<reads>{$j/@reads/string()}</reads>
|
||||||
|
|
|
||||||
114
src/vue-poc/features/job/services.vue
Normal file
114
src/vue-poc/features/job/services.vue
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<template id="services">
|
||||||
|
<v-card >
|
||||||
|
<v-toolbar >
|
||||||
|
<v-text-field
|
||||||
|
prepend-icon="filter_list"
|
||||||
|
label="Filter jobs"
|
||||||
|
single-line
|
||||||
|
hide-details
|
||||||
|
clearable
|
||||||
|
v-model="search"
|
||||||
|
></v-text-field>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn
|
||||||
|
@click="stop()"
|
||||||
|
:disabled="noSelection"
|
||||||
|
>Stop</v-btn>
|
||||||
|
|
||||||
|
<v-btn icon ><v-icon>add</v-icon></v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
:loading="loading"
|
||||||
|
@click="getJobs()"
|
||||||
|
@dblclick="autorefresh = !autorefresh"
|
||||||
|
:disabled="loading"
|
||||||
|
>
|
||||||
|
<v-icon>{{ autorefresh?'refresh':'arrow_downward' }}</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-data-table
|
||||||
|
:headers="headers"
|
||||||
|
:items="items"
|
||||||
|
:search="search"
|
||||||
|
v-model="selected"
|
||||||
|
select-all
|
||||||
|
class="elevation-1"
|
||||||
|
no-data-text="No Jobs currently running"
|
||||||
|
>
|
||||||
|
<template slot="items" slot-scope="props">
|
||||||
|
<td class="vtop">
|
||||||
|
<v-checkbox
|
||||||
|
primary
|
||||||
|
hide-details
|
||||||
|
v-model="props.selected"
|
||||||
|
></v-checkbox>
|
||||||
|
</td>
|
||||||
|
<td class="vtop"> <router-link :to="{name: 'jobShow', params: {job: props.item.id }}">{{props.item.id}}</router-link></td>
|
||||||
|
<td class="vtop "><div>{{ props.item.running }}</div>
|
||||||
|
<td class="vtop " :title="props.item.interval">{{ props.item.interval }}</td>
|
||||||
|
<td class="vtop " :title="props.item.base-uri">{{ props.item['base-uri'] }}</td>
|
||||||
|
<td class="vtop ">{{ props.item.query }}</td>
|
||||||
|
</template>
|
||||||
|
</v-data-table>
|
||||||
|
</v-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>{
|
||||||
|
data: function(){
|
||||||
|
return {
|
||||||
|
headers: [
|
||||||
|
{
|
||||||
|
text: 'Job id',
|
||||||
|
left: true,
|
||||||
|
value: 'id'
|
||||||
|
},
|
||||||
|
{ text: 'Running', value: 'running' },
|
||||||
|
{ text: 'Interval', value: 'interval' },
|
||||||
|
{ text: 'Base-uri', value: 'base-uri' },
|
||||||
|
{ text: 'Query', value: 'query' },
|
||||||
|
|
||||||
|
],
|
||||||
|
items:[
|
||||||
|
],
|
||||||
|
selected: [],
|
||||||
|
search: "",
|
||||||
|
loading: false,
|
||||||
|
autorefresh: true,
|
||||||
|
timer:null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
load(){
|
||||||
|
this.loading= true
|
||||||
|
HTTP.get("data/service",{params:{q:this.q}})
|
||||||
|
.then(r=>{
|
||||||
|
this.items= r.data.items
|
||||||
|
this.loading= false
|
||||||
|
if(this.autorefresh) this.timer=setTimeout(()=>{ this.load() }, 10000);
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
stop(){
|
||||||
|
var s=this.selected.map((j)=>{return j.id}).join(",")
|
||||||
|
console.log("AAA",this.selected)
|
||||||
|
alert(s)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// a computed getter
|
||||||
|
noSelection: function () {
|
||||||
|
// `this` points to the vm instance
|
||||||
|
return this.selected.length==0
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created(){
|
||||||
|
this.load()
|
||||||
|
},
|
||||||
|
beforeDestroy(){
|
||||||
|
if(this.timer) clearTimeout(this.timer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -23,8 +23,11 @@
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
>
|
>
|
||||||
<v-card :hover="true" >
|
<v-card :hover="true" >
|
||||||
<v-card-title color="#26c6da">{{ item.id }}</v-card-title>
|
<v-toolbar color="blue lighten-3" dense>
|
||||||
<v-card-text>{{ item.name }}</v-card-text>
|
<v-card-title >{{ item.name }}</v-card-title>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-card-text>{{ item.id }}</v-card-text>
|
||||||
|
<v-card-text>{{ item.created | formatDate }}</v-card-text>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<a :href="item.href" target="_new">go</a>
|
<a :href="item.href" target="_new">go</a>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
@ -46,9 +49,11 @@
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
get() {
|
get() {
|
||||||
|
this.loading=true;
|
||||||
HTTP.get('xqdocjob')
|
HTTP.get('xqdocjob')
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.items = res.data;
|
this.items = res.data;
|
||||||
|
this.loading=false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
doEdit(item){
|
doEdit(item){
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
md4
|
md4
|
||||||
lg3
|
lg3
|
||||||
>
|
>
|
||||||
<v-card :hover="true" active-class="default-class qd-active" max-height="200px">
|
<v-card :hover="true" active-class="default-class qd-active" height="200px" max-height="200px">
|
||||||
|
|
||||||
<v-toolbar color="blue lighten-3" dense>
|
<v-toolbar color="blue lighten-3" dense>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
|
|
@ -56,13 +56,14 @@
|
||||||
</v-toolbar-title>
|
</v-toolbar-title>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-card-text>{{ props.item.description }}</<v-card-text>
|
<v-card-text >{{ props.item.description }}</<v-card-text>
|
||||||
<v-card-text>
|
<v-card-actions green>
|
||||||
|
Fields
|
||||||
<v-badge >
|
<v-badge >
|
||||||
<span slot="badge">{{ props.item.nfields }}</span>
|
<span slot="badge">{{ props.item.nfields }}</span>
|
||||||
Fields
|
Fields
|
||||||
</v-badge>
|
</v-badge>
|
||||||
</v-card-text>
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-flex>
|
</v-flex>
|
||||||
</v-data-iterator>
|
</v-data-iterator>
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,17 @@ declare
|
||||||
function j:list()
|
function j:list()
|
||||||
as element(json)
|
as element(json)
|
||||||
{
|
{
|
||||||
let $jlist:=file:list(db:option("webpath") || "/static/xqdoc/")
|
let $xqdoc-folder:=db:option("webpath") || "/static/xqdoc/"
|
||||||
return <json type="array">
|
return <json type="array">
|
||||||
{for $j in reverse($jlist)
|
{for $di in file:list($xqdoc-folder)
|
||||||
|
let $meta:= $xqdoc-folder || $di || "xqdoca.xml"
|
||||||
|
where fn:doc-available($meta)
|
||||||
|
let $doc:=doc($meta)/xqdoca
|
||||||
return <_ type="object">
|
return <_ type="object">
|
||||||
<id>{ $j }</id>
|
<id>{ $di}</id>
|
||||||
<name>todo</name>
|
<created>{ $doc/@created/string() }</created>
|
||||||
<href>/static/xqdoc/{ $j }index.html</href>
|
<name>{ $doc/project/string() }</name>
|
||||||
|
<href>/static/xqdoc/{ $di }index.html</href>
|
||||||
</_>
|
</_>
|
||||||
}</json>
|
}</json>
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<p>Read json data for 1st page for entity.</p>
|
<p>Read json data for 1st page for entity.</p>
|
||||||
<v-flex xs12 sm6>
|
<v-flex xs12 sm6>
|
||||||
<v-combobox
|
<v-combobox
|
||||||
v-model="url"
|
v-model="entity"
|
||||||
:items="entities" item-text="name"
|
:items="entities" item-text="name"
|
||||||
label="Select target" clearable open-on-clear
|
label="Select target" clearable open-on-clear
|
||||||
></v-combobox>
|
></v-combobox>
|
||||||
|
|
@ -38,10 +38,10 @@
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ url && url.name }}
|
{{ entity && entity.name }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<v-btn @click="get()" :disabled="!url" >
|
<v-btn @click="get()" :disabled="!entity" >
|
||||||
Read <v-icon right>compare_arrows</v-icon>
|
Read <v-icon right>compare_arrows</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
return {
|
return {
|
||||||
getValues: new perfStat(),
|
getValues: new perfStat(),
|
||||||
repeat: {get:false},
|
repeat: {get:false},
|
||||||
url: null,
|
entity: null,
|
||||||
counter: 0,
|
counter: 0,
|
||||||
result: null,
|
result: null,
|
||||||
entities: null
|
entities: null
|
||||||
|
|
@ -97,8 +97,8 @@
|
||||||
|
|
||||||
get(){
|
get(){
|
||||||
var _start = performance.now();
|
var _start = performance.now();
|
||||||
console.log("FFFFF"," "+ this.url.parentlink)
|
console.log("entity:", this.entity)
|
||||||
HTTP.get(this.url.parentlink,axios_json)
|
HTTP.get(this.entity.datalink,axios_json)
|
||||||
.then(r=>{
|
.then(r=>{
|
||||||
var elapsed=Math.floor(performance.now() - _start);
|
var elapsed=Math.floor(performance.now() - _start);
|
||||||
this.counter++;
|
this.counter++;
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,10 @@ import module namespace store = 'quodatum.store' at "../../../lib/store.xqm";
|
||||||
declare variable $efolder as xs:anyURI external := xs:anyURI("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");
|
||||||
|
|
||||||
declare variable $id as element(last-id):=db:open("vue-poc","/state.xml")/state/last-id;
|
declare variable $id as element(last-id):=db:open("vue-poc","/state.xml")/state/last-id;
|
||||||
|
let $path:="static/xqdoc/" || "33" || "/"
|
||||||
|
let $root:=db:option("webpath")=>file:path-to-uri()
|
||||||
|
let $target:=resolve-uri($path,$root)
|
||||||
|
|
||||||
let $target:="file:///" || db:option("webpath") || "/static/xqdoc/" || $id || "/"
|
|
||||||
|
|
||||||
let $state:=xqd:read($efolder)=>trace("READ: ")
|
let $state:=xqd:read($efolder)=>trace("READ: ")
|
||||||
let $opts:=map{
|
let $opts:=map{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
xquery version "3.1";
|
xquery version "3.1";
|
||||||
|
|
||||||
module namespace mt = 'quodatum.data.mimetype';
|
module namespace mt = 'quodatum.data.mimetype';
|
||||||
declare namespace MediaType='java:org.basex.util.http.MediaType';
|
declare namespace MediaType='java:org.basex.util.http.MediaType';
|
||||||
declare %basex:lazy variable $mt:lines:="media-types.properties"=>fn:unparsed-text-lines();
|
declare %basex:lazy variable $mt:lines:="media-types.properties"=>fn:unparsed-text-lines();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
(: entity access maps
|
(: entity access maps
|
||||||
: auto generated from xml files in entities folder at: 2019-02-23T22:59:34.827Z
|
: auto generated from xml files in entities folder at: 2019-07-04T23:21:15.539+01:00
|
||||||
:)
|
:)
|
||||||
|
|
||||||
module namespace entity = 'quodatum.models.generated';
|
module namespace entity = 'quodatum.models.generated';
|
||||||
|
|
@ -188,13 +188,14 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
",
|
",
|
||||||
"access": map{
|
"access": map{
|
||||||
"code": function($_ as element()) as xs:string? {$_/ent:data },
|
"code": function($_ as element()) as xs:string? {$_/ent:data },
|
||||||
|
"datalink": function($_ as element()) as xs:string {$_/fn:concat("/data/",@name,"") },
|
||||||
"description": function($_ as element()) as xs:string {$_/ent:description },
|
"description": function($_ as element()) as xs:string {$_/ent:description },
|
||||||
"fieldslink": function($_ as element()) as xs:string {$_/fn:concat("/data/entity/",@name,"/field") },
|
"fieldslink": function($_ as element()) as xs:string {$_/fn:concat("/data/entity/",@name,"/field") },
|
||||||
"iconclass": function($_ as element()) as xs:string {$_/ent:views/@iconclass },
|
"iconclass": function($_ as element()) as xs:string {$_/ent:views/@iconclass },
|
||||||
"modules": function($_ as element()) as xs:string? {$_/ent:module/concat("import module namespace ",@prefix,"='",@namespace,"';
|
"modules": function($_ as element()) as xs:string? {$_/ent:module/concat("import module namespace ",@prefix,"='",@namespace,"';
|
||||||
")=>string-join() },
|
")=>string-join() },
|
||||||
"name": function($_ as element()) as xs:string {$_/@name },
|
"name": function($_ as element()) as xs:string {$_/@name },
|
||||||
"namespaces": function($_ as element()) as xs:string? {$_/ent:namespace/concat("declare namespace ",@prefix,"='",@uri,"';
|
"namespaces": function($_ as element()) as xs:string? {$_/ent:namespace/concat("declare namespace ",@prefix,"='",@uri,"';
|
||||||
")=>string-join() },
|
")=>string-join() },
|
||||||
"nfields": function($_ as element()) as xs:integer {$_/fn:count(ent:fields/ent:field) },
|
"nfields": function($_ as element()) as xs:integer {$_/fn:count(ent:fields/ent:field) },
|
||||||
"parent": function($_ as element()) as xs:string? {$_/ent:parent/@name },
|
"parent": function($_ as element()) as xs:string? {$_/ent:parent/@name },
|
||||||
|
|
@ -210,6 +211,10 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
(: xs:string? :)
|
(: xs:string? :)
|
||||||
fn:data($_/ent:data)!element code { .}
|
fn:data($_/ent:data)!element code { .}
|
||||||
},
|
},
|
||||||
|
"datalink": function($_ as element()) as element(datalink)? {
|
||||||
|
(: xs:string :)
|
||||||
|
fn:data($_/fn:concat("/data/",@name,""))!element datalink { .}
|
||||||
|
},
|
||||||
"description": function($_ as element()) as element(description)? {
|
"description": function($_ as element()) as element(description)? {
|
||||||
(: xs:string :)
|
(: xs:string :)
|
||||||
fn:data($_/ent:description)!element description { .}
|
fn:data($_/ent:description)!element description { .}
|
||||||
|
|
@ -224,7 +229,7 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
},
|
},
|
||||||
"modules": function($_ as element()) as element(modules)? {
|
"modules": function($_ as element()) as element(modules)? {
|
||||||
(: xs:string? :)
|
(: xs:string? :)
|
||||||
fn:data($_/ent:module/concat("import module namespace ",@prefix,"='",@namespace,"';
|
fn:data($_/ent:module/concat("import module namespace ",@prefix,"='",@namespace,"';
|
||||||
")=>string-join())!element modules { .}
|
")=>string-join())!element modules { .}
|
||||||
},
|
},
|
||||||
"name": function($_ as element()) as element(name)? {
|
"name": function($_ as element()) as element(name)? {
|
||||||
|
|
@ -233,7 +238,7 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
},
|
},
|
||||||
"namespaces": function($_ as element()) as element(namespaces)? {
|
"namespaces": function($_ as element()) as element(namespaces)? {
|
||||||
(: xs:string? :)
|
(: xs:string? :)
|
||||||
fn:data($_/ent:namespace/concat("declare namespace ",@prefix,"='",@uri,"';
|
fn:data($_/ent:namespace/concat("declare namespace ",@prefix,"='",@uri,"';
|
||||||
")=>string-join())!element namespaces { .}
|
")=>string-join())!element namespaces { .}
|
||||||
},
|
},
|
||||||
"nfields": function($_ as element()) as element(nfields)? {
|
"nfields": function($_ as element()) as element(nfields)? {
|
||||||
|
|
@ -503,13 +508,13 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
},
|
},
|
||||||
"service": map{
|
"service": map{
|
||||||
"name": "service",
|
"name": "service",
|
||||||
"description": "basex services ",
|
"description": "basex services a list of all jobs that have been persistently registered as Services.",
|
||||||
"access": map{
|
"access": map{
|
||||||
"base-uri": function($_ as element()) as xs:string {$_/@base-uri },
|
"base-uri": function($_ as element()) as xs:string {$_/@base-uri },
|
||||||
"id": function($_ as element()) as xs:string {$_/@id },
|
"id": function($_ as element()) as xs:string {$_/@id },
|
||||||
"interval": function($_ as element()) as xs:string {$_/@interval },
|
"interval": function($_ as element()) as xs:string {$_/@interval },
|
||||||
"query": function($_ as element()) as xs:string {$_/. },
|
"query": function($_ as element()) as xs:string {$_/. },
|
||||||
"running": function($_ as element()) as xs:boolean {$_/jobs:list()=@id } },
|
"running": function($_ as element()) as xs:boolean {$_/(@id = jobs:list-details()/@id) } },
|
||||||
|
|
||||||
"filter": function($item,$q) as xs:boolean{
|
"filter": function($item,$q) as xs:boolean{
|
||||||
some $e in ( ) satisfies
|
some $e in ( ) satisfies
|
||||||
|
|
@ -534,7 +539,7 @@ hof:top-k-by(admin:logs(), string#1, 2)
|
||||||
},
|
},
|
||||||
"running": function($_ as element()) as element(running)? {
|
"running": function($_ as element()) as element(running)? {
|
||||||
(: xs:boolean :)
|
(: xs:boolean :)
|
||||||
fn:data($_/jobs:list()=@id)!element running { attribute type {'boolean'}, .}
|
fn:data($_/(@id = jobs:list-details()/@id))!element running { attribute type {'boolean'}, .}
|
||||||
} },
|
} },
|
||||||
|
|
||||||
"data": function() as element(job)*
|
"data": function() as element(job)*
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<entity name="basexjob" xmlns="https://github.com/Quodatum/app-doc/entity">
|
<entity name="basexjob" xmlns="https://github.com/Quodatum/app-doc/entity">
|
||||||
<description>A BaseX job</description>
|
<description>A BaseX job</description>
|
||||||
<namespace prefix="xqdoc" uri="http://www.xqdoc.org/1.0" />
|
<namespace prefix="xqdoc" uri="http://www.xqdoc.org/1.0"/>
|
||||||
<fields>
|
<fields>
|
||||||
<field name="id" type="xs:string">
|
<field name="id" type="xs:string">
|
||||||
<description>unique id</description>
|
<description>unique id</description>
|
||||||
<xpath>@id</xpath>
|
<xpath>@id</xpath>
|
||||||
|
|
@ -10,10 +10,10 @@
|
||||||
<description>state</description>
|
<description>state</description>
|
||||||
<xpath>@state</xpath>
|
<xpath>@state</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="type" type="xs:string">
|
<field name="type" type="xs:string">
|
||||||
<description>type of job</description>
|
<description>type of job</description>
|
||||||
<xpath>@type</xpath>
|
<xpath>@type</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="user" type="xs:string">
|
<field name="user" type="xs:string">
|
||||||
<description>user</description>
|
<description>user</description>
|
||||||
<xpath>@user</xpath>
|
<xpath>@user</xpath>
|
||||||
|
|
@ -27,29 +27,29 @@
|
||||||
<xpath>@start</xpath>
|
<xpath>@start</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="duration" type="xs:string">
|
<field name="duration" type="xs:string">
|
||||||
<description>start</description>
|
<description>start</description>
|
||||||
<xpath>@duration</xpath>
|
<xpath>@duration</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="interval" type="xs:string">
|
<field name="interval" type="xs:string">
|
||||||
<description>interval</description>
|
<description>interval</description>
|
||||||
<xpath>@interval</xpath>
|
<xpath>@interval</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="text" type="xs:string">
|
<field name="text" type="xs:string">
|
||||||
<description>text</description>
|
<description>text</description>
|
||||||
<xpath>.</xpath>
|
<xpath>.</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="reads" type="xs:string">
|
<field name="reads" type="xs:string">
|
||||||
<description>reads</description>
|
<description>reads</description>
|
||||||
<xpath>@reads</xpath>
|
<xpath>@reads</xpath>
|
||||||
</field>
|
</field>
|
||||||
<field name="writes" type="xs:string">
|
<field name="writes" type="xs:string">
|
||||||
<description>writes</description>
|
<description>writes</description>
|
||||||
<xpath>@writes</xpath>
|
<xpath>@writes</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="code">
|
<views iconclass="code">
|
||||||
<view name="filter">name description</view>
|
<view name="filter">name description</view>
|
||||||
</views>
|
</views>
|
||||||
<data type="element(job)">jobs:list()[. != jobs:current()] !jobs:list-details(.)=>reverse()
|
<data type="element(job)">jobs:list()[. != jobs:current()] !jobs:list-details(.)=>reverse()
|
||||||
</data>
|
</data>
|
||||||
</entity>
|
</entity>
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@
|
||||||
<description>Links for fields description</description>
|
<description>Links for fields description</description>
|
||||||
<xpath>fn:concat("/data/entity/",@name,"/field")</xpath>
|
<xpath>fn:concat("/data/entity/",@name,"/field")</xpath>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="datalink" type="xs:string">
|
||||||
|
<description>Link to read data</description>
|
||||||
|
<xpath>fn:concat("/data/",@name,"")</xpath>
|
||||||
|
</field>
|
||||||
<field name="parent" type="xs:string?">
|
<field name="parent" type="xs:string?">
|
||||||
<description>parent entity, if any</description>
|
<description>parent entity, if any</description>
|
||||||
<xpath>ent:parent/@name</xpath>
|
<xpath>ent:parent/@name</xpath>
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
</field>
|
</field>
|
||||||
<field name="running" type="xs:boolean">
|
<field name="running" type="xs:boolean">
|
||||||
<description>service is running</description>
|
<description>service is running</description>
|
||||||
<xpath>jobs:list()=@id</xpath>
|
<xpath>(@id = jobs:list-details()/@id)</xpath>
|
||||||
</field>
|
</field>
|
||||||
</fields>
|
</fields>
|
||||||
<views iconclass="shop" />
|
<views iconclass="shop" />
|
||||||
|
|
|
||||||
295
src/vue-poc/models/schemas/xqdoc-1.0.01132014.xsd
Normal file
295
src/vue-poc/models/schemas/xqdoc-1.0.01132014.xsd
Normal file
|
|
@ -0,0 +1,295 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
* Copyright (c)2010 Elsevier, Inc.
|
||||||
|
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* The use of the Apache License does not indicate that this project is
|
||||||
|
* affiliated with the Apache Software Foundation.
|
||||||
|
-->
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xqdoc.org/1.0" xmlns="http://www.xqdoc.org/1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
|
|
||||||
|
<!-- Simple type for defining the uris associated
|
||||||
|
with things such as library modules associated
|
||||||
|
with functions, variables, imports, etc. -->
|
||||||
|
<xsd:simpleType name="uri">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<!-- Simple type for defining the type associated
|
||||||
|
with things such as global variables, function
|
||||||
|
parameters, and function return types etc. -->
|
||||||
|
<xsd:complexType name="type">
|
||||||
|
<xsd:simpleContent>
|
||||||
|
<xsd:extension base="xsd:string">
|
||||||
|
<xsd:attribute name="occurrence" type="occurrence" use="optional"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:simpleContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type for function parameters -->
|
||||||
|
<xsd:complexType name="parameters">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="parameter" type="parameter" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type for an individual function parameter -->
|
||||||
|
<xsd:complexType name="parameter">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="name" type="name" minOccurs="0"/>
|
||||||
|
<xsd:element name="type" type="type" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type for the return value from a function -->
|
||||||
|
<xsd:complexType name="return">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="type" type="type" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Simple type used for definging the number of occurrences for a global variable, function parameter
|
||||||
|
or function return type -->
|
||||||
|
<xsd:simpleType name="occurrence">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="?"/>
|
||||||
|
<xsd:enumeration value="*"/>
|
||||||
|
<xsd:enumeration value="+"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<!-- Simple type for defining the names associated
|
||||||
|
with things such as functions, paramters, module name, etc. -->
|
||||||
|
<xsd:simpleType name="name">
|
||||||
|
<xsd:restriction base="xsd:string"/>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the functions
|
||||||
|
invoked from within a particular function. -->
|
||||||
|
<xsd:complexType name="invoked">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="uri" type="uri"/>
|
||||||
|
<xsd:element name="name" type="name"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="arity" type="xsd:integer" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining a custom comment type.
|
||||||
|
The type attribute allows the differentiation of the custom
|
||||||
|
comment types. If the custom comment is @example, then the
|
||||||
|
value in the 'tag' attribute would be 'example'. -->
|
||||||
|
<xsd:complexType name="custom">
|
||||||
|
<xsd:complexContent>
|
||||||
|
<xsd:extension base="mixed-text">
|
||||||
|
<xsd:attribute name="tag" type="xsd:string" use="required"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:complexContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the comments associated
|
||||||
|
with a library module, imports, variables, or functions.
|
||||||
|
The follow xqdoc 'directives' map to the equivalent
|
||||||
|
elements defined below ... with the exception of description
|
||||||
|
where there is no directive.
|
||||||
|
|
||||||
|
@author ...... author
|
||||||
|
@version ..... version
|
||||||
|
@param ....... param
|
||||||
|
@return ...... return
|
||||||
|
@error ....... error
|
||||||
|
@deprecated .. deprecated
|
||||||
|
@since ....... since
|
||||||
|
@see ......... see -->
|
||||||
|
<xsd:complexType name="comment">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="description" type="mixed-text" minOccurs="0"/>
|
||||||
|
<xsd:element name="author" type="mixed-text" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="version" type="mixed-text" minOccurs="0"/>
|
||||||
|
<xsd:element name="param" type="mixed-text" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="return" type="mixed-text" minOccurs="0"/>
|
||||||
|
<xsd:element name="error" type="mixed-text" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="deprecated" type="mixed-text" minOccurs="0"/>
|
||||||
|
<xsd:element name="see" type="mixed-text" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="since" type="mixed-text" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="custom" type="custom" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for comment text to allow the inclusion
|
||||||
|
of embedded HTML markup within comments. -->
|
||||||
|
<xsd:complexType name="mixed-text" mixed="true">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining information about the package
|
||||||
|
version (and date) used to generate the internal xqdoc XML.
|
||||||
|
Date should be the date when the XML xqdoc file is genearted.
|
||||||
|
Version should either be the version of the XQDoc conversion package
|
||||||
|
used to generate the XML or 'n/a' if the XML is generated from
|
||||||
|
some other mechanism (i.e. scripts from XHTML for MarkLogic). -->
|
||||||
|
<xsd:complexType name="control">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="date" type="xsd:string"/>
|
||||||
|
<xsd:element name="version">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="1.0"/>
|
||||||
|
<xsd:enumeration value="N/A"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the module URI and any
|
||||||
|
high-level comments associated with the module. -->
|
||||||
|
<xsd:complexType name="module">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="uri" type="uri"/>
|
||||||
|
<xsd:element name="name" type="name" minOccurs="0"/>
|
||||||
|
<xsd:element name="comment" type="comment" minOccurs="0"/>
|
||||||
|
<xsd:element name="body" type="xsd:string" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="type" use="required">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="main"/>
|
||||||
|
<xsd:enumeration value="library"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:attribute>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the namespaces defined within
|
||||||
|
the library module. -->
|
||||||
|
<xsd:complexType name="namespaces">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="namespace" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="prefix" use="required"/>
|
||||||
|
<xsd:attribute name="uri" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the variable names defined within
|
||||||
|
the library module and any comments associated with the variables. -->
|
||||||
|
<xsd:complexType name="variables">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="uri" type="uri" minOccurs="0"/>
|
||||||
|
<xsd:element name="name" type="name"/>
|
||||||
|
<xsd:element name="comment" type="comment" minOccurs="0"/>
|
||||||
|
<xsd:element name="annotations" type="annotations" minOccurs="0"/>
|
||||||
|
<xsd:element name="type" type="type" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the annotations defined for
|
||||||
|
a variable or function. -->
|
||||||
|
<xsd:complexType name="annotations">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="annotation" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="literal" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:complexContent>
|
||||||
|
<xsd:extension base="mixed-text">
|
||||||
|
<xsd:attribute name="type" type="xsd:string" use="required"/>
|
||||||
|
</xsd:extension>
|
||||||
|
</xsd:complexContent>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the imported modules within the
|
||||||
|
the library module and any comments associated with the imports. -->
|
||||||
|
<xsd:complexType name="imports">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="import" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="uri" type="uri"/>
|
||||||
|
<xsd:element name="comment" type="comment" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="type" use="optional">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="library"/>
|
||||||
|
<xsd:enumeration value="schema"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:attribute>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the functions contained within the
|
||||||
|
the library module and any comments associated with the functions.
|
||||||
|
Any 'invoked' functions associated with this function should also
|
||||||
|
be defined. -->
|
||||||
|
<xsd:complexType name="functions">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="function" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="comment" type="comment" minOccurs="0"/>
|
||||||
|
<xsd:element name="name" type="name"/>
|
||||||
|
<xsd:element name="annotations" type="annotations" minOccurs="0"/>
|
||||||
|
<xsd:element name="signature" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="parameters" type="parameters" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:element name="return" type="parameter" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="invoked" type="invoked" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xsd:element name="ref-variable" type="invoked" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:choice>
|
||||||
|
<xsd:element name="body" type="xsd:string" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="arity" type="xsd:integer" use="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<!-- Complex type used for defining the global root element of xqdoc.
|
||||||
|
There should be '1' xqdoc xml file for each library module. -->
|
||||||
|
<xsd:element name="xqdoc">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="control" type="control"/>
|
||||||
|
<xsd:element name="module" type="module"/>
|
||||||
|
<xsd:element name="imports" type="imports" minOccurs="0"/>
|
||||||
|
<xsd:element name="namespaces" type="namespaces" minOccurs="0"/>
|
||||||
|
<xsd:element name="variables" type="variables" minOccurs="0"/>
|
||||||
|
<xsd:element name="functions" type="functions" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"name": "vue-poc",
|
"name": "vue-poc",
|
||||||
"version": "0.1.99",
|
"version": "0.2.0",
|
||||||
"description": "A vue test",
|
"description": "A vue test",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ace": "1.4.3",
|
"ace": "1.4.5",
|
||||||
"vuetify": "1.5.6",
|
"vuetify": "1.5.16",
|
||||||
"vue": "2.6.7",
|
"vue": "2.6.10",
|
||||||
"vuex": "3.0.1",
|
"vuex": "3.0.1",
|
||||||
"vue-router": "3.0.2",
|
"vue-router": "3.0.3",
|
||||||
"vue-treeselect": "0.0.25",
|
"vue-treeselect": "0.0.25",
|
||||||
"google-material": "0.0.0",
|
"google-material": "0.0.0",
|
||||||
"js-beautify": "1.9.0",
|
"js-beautify": "1.9.0",
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ const router = new VueRouter({
|
||||||
|
|
||||||
{ path: 'jobs', name:"jobs", component: Jobs, meta:{title:"Jobs running"} },
|
{ path: 'jobs', name:"jobs", component: Jobs, meta:{title:"Jobs running"} },
|
||||||
{ path: 'jobs/:job', name:"jobShow", component: Job, props: true, meta:{title:"Job Status"} },
|
{ path: 'jobs/:job', name:"jobShow", component: Job, props: true, meta:{title:"Job Status"} },
|
||||||
|
{ path: 'services', component: Services, meta:{title:"Services"} },
|
||||||
{ path: 'upload', component: Upload,meta:{title:"Upload"} },
|
{ path: 'upload', component: Upload,meta:{title:"Upload"} },
|
||||||
|
|
||||||
{ path: 'settings', component: Basexsettings,meta:{title:"BaseX settings"} },
|
{ path: 'settings', component: Basexsettings,meta:{title:"BaseX settings"} },
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// generated 2019-04-13T21:49:49.993+01:00
|
// generated 2019-07-24T10:31:16.914+01:00
|
||||||
|
|
||||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-autoheight.vue
|
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-autoheight.vue
|
||||||
Vue.component('qd-autoheight',{template:`
|
Vue.component('qd-autoheight',{template:`
|
||||||
<v-layout style="height:200px;overflow:hidden;" row wrap ref="auto" v-resize="onResize" class="green">
|
<v-layout style="height:200px;overflow:hidden;" row wrap ref="auto" v-resize="onResize" class="green">
|
||||||
|
|
@ -3603,6 +3603,7 @@ const Image=Vue.extend({template:`
|
||||||
<span class="white--text">Image: {{ id }}</span>
|
<span class="white--text">Image: {{ id }}</span>
|
||||||
<a :href="path" :download="id +'.jpg'"><v-icon>file_download</v-icon></a>
|
<a :href="path" :download="id +'.jpg'"><v-icon>file_download</v-icon></a>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-layout>
|
<v-layout>
|
||||||
<v-flex xs5>
|
<v-flex xs5>
|
||||||
|
|
@ -3611,8 +3612,9 @@ const Image=Vue.extend({template:`
|
||||||
</v-flex>
|
</v-flex>
|
||||||
|
|
||||||
<v-flex xs7>
|
<v-flex xs7>
|
||||||
<iframe :src="path" style="border:0;width:100%;height:100%;min-height:400px;">image</iframe>
|
|
||||||
</v-flex>
|
<v-img v-if="loaded" src="/vue-poc/api/images/list/17236456/image" min-height="400px" height="100%" width="100%">
|
||||||
|
</v-img></v-flex>
|
||||||
</v-layout>
|
</v-layout>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|
@ -3626,18 +3628,22 @@ const Image=Vue.extend({template:`
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
path(){
|
path(){
|
||||||
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/image':null
|
var a=this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/image':null
|
||||||
|
console.log("path",a)
|
||||||
|
return a
|
||||||
},
|
},
|
||||||
meta(){
|
meta(){
|
||||||
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/meta':null
|
return this.loaded?'/vue-poc/api/images/list/'+ this.id+ '/meta':null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created:function(){
|
created:function(){
|
||||||
var id=this._props.id
|
var id=this.id
|
||||||
|
|
||||||
HTTP.get("images/list/"+id)
|
HTTP.get("images/list/"+id)
|
||||||
.then(r=>{
|
.then(r=>{
|
||||||
this.image=r.data
|
this.image=r.data
|
||||||
this.loaded=true
|
this.loaded=true
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3680,33 +3686,47 @@ const Images=Vue.extend({template:`
|
||||||
</v-toolbar-items>
|
</v-toolbar-items>
|
||||||
</span>
|
</span>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-toolbar-items>
|
<v-toolbar-items>
|
||||||
<v-btn @click.stop="pageBack()" :disabled="query.page==0" icon>
|
<v-btn @click.stop="pageBack()" :disabled="query.page==0" icon>
|
||||||
<v-avatar>
|
<v-avatar>
|
||||||
<v-icon>arrow_back</v-icon>
|
<v-icon>arrow_back</v-icon>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-btn @click.stop="pageNext()" icon>
|
|
||||||
<v-avatar>
|
<v-btn @click.stop="pageNext()" icon>
|
||||||
<v-icon>arrow_forward</v-icon>
|
<v-avatar>
|
||||||
</v-avatar>
|
<v-icon>arrow_forward</v-icon>
|
||||||
</v-btn>
|
</v-avatar>
|
||||||
|
</v-btn>
|
||||||
</v-toolbar-items>
|
</v-toolbar-items>
|
||||||
|
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
|
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
|
||||||
<v-container v-if="!busy" fluid grid-list-md>
|
<v-container v-if="!busy" fluid grid-list-md>
|
||||||
<v-layout row wrap v-touch="{ left: () => pageNext(), right: () => pageBack()}">
|
<v-layout row wrap v-touch="{ left: () => pageNext(), right: () => pageBack()}">
|
||||||
<v-flex height="80px" xs2 v-for="image in images" :key="image.name">
|
<v-flex xs12 sm6 md4 lg3 xl2 v-for="image in images" :key="image.name">
|
||||||
<v-card tile :elevation="2" :hover="true" color="grey lighten-3">
|
<v-card tile :elevation="2" :hover="true" color="grey lighten-3">
|
||||||
<div :style="style(image)" v-bind:class="{ selcard: image.selected}" @dblclick="go(image)" @click.prevent.stop="image.selected =! image.selected ">
|
<v-toolbar height="16px">
|
||||||
|
<v-toolbar-title :title="image.path">{{image.name}}</v-toolbar-title>
|
||||||
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
|
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
|
||||||
<v-avatar icon small v-if="image.geo">
|
<v-avatar icon small v-if="image.geo">
|
||||||
<v-icon>place</v-icon>
|
<v-icon>place</v-icon>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<a :href="src(image)" target="thumb" :title="image.id">
|
||||||
|
<v-avatar icon small>
|
||||||
|
<v-icon>search</v-icon>
|
||||||
|
</v-avatar>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</v-toolbar>
|
||||||
|
|
||||||
|
<div :style="style(image)" v-bind:class="{ selcard: image.selected}" @dblclick="go(image)" @click.prevent.stop="image.selected =! image.selected ">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a :href="src(image)" target="thumb">{{image.id}}</a>
|
|
||||||
<div v-if="image.selected" style="position:absolute;right:0;top:0">
|
<div v-if="image.selected" style="position:absolute;right:0;top:0">
|
||||||
<v-icon class="white primary--text">check_circle</v-icon>
|
<v-icon class="white primary--text">check_circle</v-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -4084,31 +4104,17 @@ const Imagesfilter=Vue.extend({template:`
|
||||||
);
|
);
|
||||||
|
|
||||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/images/ireport.vue
|
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/images/ireport.vue
|
||||||
const Report=Vue.extend({template:`
|
const Report=Vue.extend({template:` <v-container fluid> <v-card>
|
||||||
<v-container fluid>
|
<v-toolbar class="orange darken-1"> <v-btn icon to="./">
|
||||||
<v-card>
|
<v-icon>arrow_back</v-icon></v-btn> <v-card-title> <v-chip>Settings</v-chip>
|
||||||
<v-toolbar class="orange darken-1">
|
</v-card-title> <v-spacer></v-spacer> </v-toolbar> <v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear> <v-card-text>
|
||||||
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
<ul v-if="report">
|
||||||
<v-card-title>
|
<li>DB: {{ report.imagedb }}</li>
|
||||||
<v-chip>Settings</v-chip>
|
<li><a :href="'/vue-poc/ui/database?url=/' + report.imagedb + '/'" target="new">db</a></li>
|
||||||
</v-card-title>
|
<li></li>
|
||||||
|
</ul>
|
||||||
<v-spacer></v-spacer>
|
<pre> {{ report | pretty }}
|
||||||
|
</pre> </v-card-text> </v-card> </v-container> `,
|
||||||
</v-toolbar>
|
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
|
|
||||||
<v-card-text>
|
|
||||||
<ul>
|
|
||||||
<li></li>
|
|
||||||
<li></li>
|
|
||||||
<li></li>
|
|
||||||
</ul>
|
|
||||||
<pre> {{ report | pretty }}
|
|
||||||
</pre>
|
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-container>
|
|
||||||
`,
|
|
||||||
|
|
||||||
data: ()=>({
|
data: ()=>({
|
||||||
busy: false,
|
busy: false,
|
||||||
|
|
@ -4138,17 +4144,14 @@ const Report=Vue.extend({template:`
|
||||||
|
|
||||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/images/keywords.vue
|
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/images/keywords.vue
|
||||||
const Keywords=Vue.extend({template:`
|
const Keywords=Vue.extend({template:`
|
||||||
<v-container fluid>
|
<v-card>
|
||||||
<v-card>
|
<v-toolbar dense class="orange darken-1">
|
||||||
<v-toolbar class="orange darken-1">
|
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
||||||
<v-btn icon to="./"><v-icon>arrow_back</v-icon></v-btn>
|
<v-card-title>
|
||||||
<v-card-title>
|
<v-chip>click to show</v-chip>
|
||||||
<v-chip>click to show</v-chip>
|
</v-card-title>
|
||||||
</v-card-title>
|
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-text-field prepend-icon="search" label="Filter..." v-model="q" type="search" hide-details single-line @keyup.enter="setfilter" :append-icon="this.q?'clear':''" @click:append="e=>this.q=''"></v-text-field>
|
<v-text-field prepend-icon="search" label="Filter..." v-model="q" type="search" hide-details single-line @keyup.enter="setfilter" :append-icon="this.q?'clear':''" @click:append="e=>this.q=''"></v-text-field> </v-toolbar>
|
||||||
</v-toolbar>
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
|
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
|
||||||
<v-container v-if="!busy" fluid grid-list-md>
|
<v-container v-if="!busy" fluid grid-list-md>
|
||||||
|
|
@ -4166,7 +4169,6 @@ const Keywords=Vue.extend({template:`
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-container>
|
|
||||||
`,
|
`,
|
||||||
|
|
||||||
data: ()=>({
|
data: ()=>({
|
||||||
|
|
@ -4243,14 +4245,17 @@ const Job=Vue.extend({template:`
|
||||||
<v-chip label class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
<v-chip label class="grey white--text"><v-icon class="red">lock</v-icon>{{ jobstate.writes }}</v-chip>
|
||||||
<v-chip label class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
<v-chip label class="grey white--text"><v-icon class="amber">lock</v-icon>{{ jobstate.reads }}</v-chip>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-chip class="primary white--text">
|
<v-chip class="primary white--text">
|
||||||
<v-avatar>
|
<v-avatar>
|
||||||
<v-icon>account_circle</v-icon>
|
<v-icon>account_circle</v-icon>
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
{{ jobstate.user }}</v-chip>
|
{{ jobstate.user }}</v-chip>
|
||||||
|
|
||||||
<v-chip class="green white--text">
|
<v-chip class="green white--text">
|
||||||
<v-avatar><v-icon>timer</v-icon></v-avatar>
|
<v-avatar><v-icon>timer</v-icon></v-avatar>
|
||||||
{{ jobstate.duration }}</v-chip>
|
{{ jobstate.duration }}</v-chip>
|
||||||
|
|
||||||
<v-btn icon :loading="loading" @click="getJob()" :disabled="loading || finished">
|
<v-btn icon :loading="loading" @click="getJob()" :disabled="loading || finished">
|
||||||
<v-icon>refresh</v-icon>
|
<v-icon>refresh</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
@ -4405,6 +4410,93 @@ const Jobs=Vue.extend({template:`
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/job/services.vue
|
||||||
|
const Services=Vue.extend({template:`
|
||||||
|
<v-card>
|
||||||
|
<v-toolbar>
|
||||||
|
<v-text-field prepend-icon="filter_list" label="Filter jobs" single-line hide-details clearable v-model="search"></v-text-field>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn @click="stop()" :disabled="noSelection">Stop</v-btn>
|
||||||
|
|
||||||
|
<v-btn icon><v-icon>add</v-icon></v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
|
<v-btn icon :loading="loading" @click="getJobs()" @dblclick="autorefresh = !autorefresh" :disabled="loading">
|
||||||
|
<v-icon>{{ autorefresh?'refresh':'arrow_downward' }}</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-data-table :headers="headers" :items="items" :search="search" v-model="selected" select-all class="elevation-1" no-data-text="No Jobs currently running">
|
||||||
|
<template slot="items" slot-scope="props">
|
||||||
|
<td class="vtop">
|
||||||
|
<v-checkbox primary hide-details v-model="props.selected"></v-checkbox>
|
||||||
|
</td>
|
||||||
|
<td class="vtop"> <router-link :to="{name: 'jobShow', params: {job: props.item.id }}">{{props.item.id}}</router-link></td>
|
||||||
|
<td class="vtop "><div>{{ props.item.running }}</div>
|
||||||
|
</td><td class="vtop " :title="props.item.interval">{{ props.item.interval }}</td>
|
||||||
|
<td class="vtop " :title="props.item.base-uri">{{ props.item['base-uri'] }}</td>
|
||||||
|
<td class="vtop ">{{ props.item.query }}</td>
|
||||||
|
</template>
|
||||||
|
</v-data-table>
|
||||||
|
</v-card>
|
||||||
|
`,
|
||||||
|
|
||||||
|
data: function(){
|
||||||
|
return {
|
||||||
|
headers: [
|
||||||
|
{
|
||||||
|
text: 'Job id',
|
||||||
|
left: true,
|
||||||
|
value: 'id'
|
||||||
|
},
|
||||||
|
{ text: 'Running', value: 'running' },
|
||||||
|
{ text: 'Interval', value: 'interval' },
|
||||||
|
{ text: 'Base-uri', value: 'base-uri' },
|
||||||
|
{ text: 'Query', value: 'query' },
|
||||||
|
|
||||||
|
],
|
||||||
|
items:[
|
||||||
|
],
|
||||||
|
selected: [],
|
||||||
|
search: "",
|
||||||
|
loading: false,
|
||||||
|
autorefresh: true,
|
||||||
|
timer:null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
load(){
|
||||||
|
this.loading= true
|
||||||
|
HTTP.get("data/service",{params:{q:this.q}})
|
||||||
|
.then(r=>{
|
||||||
|
this.items= r.data.items
|
||||||
|
this.loading= false
|
||||||
|
if(this.autorefresh) this.timer=setTimeout(()=>{ this.load() }, 10000);
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
stop(){
|
||||||
|
var s=this.selected.map((j)=>{return j.id}).join(",")
|
||||||
|
console.log("AAA",this.selected)
|
||||||
|
alert(s)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// a computed getter
|
||||||
|
noSelection: function () {
|
||||||
|
// `this` points to the vm instance
|
||||||
|
return this.selected.length==0
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created(){
|
||||||
|
this.load()
|
||||||
|
},
|
||||||
|
beforeDestroy(){
|
||||||
|
if(this.timer) clearTimeout(this.timer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/login/login.vue
|
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/login/login.vue
|
||||||
const Login=Vue.extend({template:`
|
const Login=Vue.extend({template:`
|
||||||
<v-layout>
|
<v-layout>
|
||||||
|
|
@ -4551,8 +4643,11 @@ const Documentation=Vue.extend({template:`
|
||||||
<v-layout row wrap>
|
<v-layout row wrap>
|
||||||
<v-flex height="80px" xs2 v-for="item in items" :key="item.id">
|
<v-flex height="80px" xs2 v-for="item in items" :key="item.id">
|
||||||
<v-card :hover="true">
|
<v-card :hover="true">
|
||||||
<v-card-title color="#26c6da">{{ item.id }}</v-card-title>
|
<v-toolbar color="blue lighten-3" dense>
|
||||||
<v-card-text>{{ item.name }}</v-card-text>
|
<v-card-title>{{ item.name }}</v-card-title>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-card-text>{{ item.id }}</v-card-text>
|
||||||
|
<v-card-text>{{ item.created | formatDate }}</v-card-text>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<a :href="item.href" target="_new">go</a>
|
<a :href="item.href" target="_new">go</a>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
@ -4573,9 +4668,11 @@ const Documentation=Vue.extend({template:`
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
get() {
|
get() {
|
||||||
|
this.loading=true;
|
||||||
HTTP.get('xqdocjob')
|
HTTP.get('xqdocjob')
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.items = res.data;
|
this.items = res.data;
|
||||||
|
this.loading=false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
doEdit(item){
|
doEdit(item){
|
||||||
|
|
@ -4615,7 +4712,7 @@ const Entity=Vue.extend({template:`
|
||||||
|
|
||||||
<v-data-iterator content-tag="v-layout" row wrap :loading="loading" :items="items" :search="q" :rows-per-page-items="rowsPerPageItems" :pagination.sync="pagination" select-all :value="selected">
|
<v-data-iterator content-tag="v-layout" row wrap :loading="loading" :items="items" :search="q" :rows-per-page-items="rowsPerPageItems" :pagination.sync="pagination" select-all :value="selected">
|
||||||
<v-flex slot="item" slot-scope="props" xs12 sm6 md4 lg3>
|
<v-flex slot="item" slot-scope="props" xs12 sm6 md4 lg3>
|
||||||
<v-card :hover="true" active-class="default-class qd-active" max-height="200px">
|
<v-card :hover="true" active-class="default-class qd-active" height="200px" max-height="200px">
|
||||||
|
|
||||||
<v-toolbar color="blue lighten-3" dense>
|
<v-toolbar color="blue lighten-3" dense>
|
||||||
<v-toolbar-title>
|
<v-toolbar-title>
|
||||||
|
|
@ -4627,12 +4724,13 @@ const Entity=Vue.extend({template:`
|
||||||
|
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-card-text>{{ props.item.description }}<!--<v-card-text-->
|
<v-card-text>{{ props.item.description }}<!--<v-card-text-->
|
||||||
<v-card-text>
|
<v-card-actions green>
|
||||||
|
Fields
|
||||||
<v-badge>
|
<v-badge>
|
||||||
<span slot="badge">{{ props.item.nfields }}</span>
|
<span slot="badge">{{ props.item.nfields }}</span>
|
||||||
Fields
|
Fields
|
||||||
</v-badge>
|
</v-badge>
|
||||||
</v-card-text>
|
</v-card-actions>
|
||||||
</v-card-text></v-card>
|
</v-card-text></v-card>
|
||||||
</v-flex>
|
</v-flex>
|
||||||
</v-data-iterator>
|
</v-data-iterator>
|
||||||
|
|
@ -5546,7 +5644,7 @@ const Dicetest=Vue.extend({template:`
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<p>Read json data for 1st page for entity.</p>
|
<p>Read json data for 1st page for entity.</p>
|
||||||
<v-flex xs12 sm6>
|
<v-flex xs12 sm6>
|
||||||
<v-combobox v-model="url" :items="entities" item-text="name" label="Select target" clearable open-on-clear></v-combobox>
|
<v-combobox v-model="entity" :items="entities" item-text="name" label="Select target" clearable open-on-clear></v-combobox>
|
||||||
|
|
||||||
</v-flex>
|
</v-flex>
|
||||||
|
|
||||||
|
|
@ -5569,10 +5667,10 @@ const Dicetest=Vue.extend({template:`
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ url && url.name }}
|
{{ entity && entity.name }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<v-btn @click="get()" :disabled="!url">
|
<v-btn @click="get()" :disabled="!entity">
|
||||||
Read <v-icon right>compare_arrows</v-icon>
|
Read <v-icon right>compare_arrows</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -5617,7 +5715,7 @@ const Dicetest=Vue.extend({template:`
|
||||||
return {
|
return {
|
||||||
getValues: new perfStat(),
|
getValues: new perfStat(),
|
||||||
repeat: {get:false},
|
repeat: {get:false},
|
||||||
url: null,
|
entity: null,
|
||||||
counter: 0,
|
counter: 0,
|
||||||
result: null,
|
result: null,
|
||||||
entities: null
|
entities: null
|
||||||
|
|
@ -5627,8 +5725,8 @@ const Dicetest=Vue.extend({template:`
|
||||||
|
|
||||||
get(){
|
get(){
|
||||||
var _start = performance.now();
|
var _start = performance.now();
|
||||||
console.log("FFFFF"," "+ this.url.parentlink)
|
console.log("entity:", this.entity)
|
||||||
HTTP.get(this.url.parentlink,axios_json)
|
HTTP.get(this.entity.datalink,axios_json)
|
||||||
.then(r=>{
|
.then(r=>{
|
||||||
var elapsed=Math.floor(performance.now() - _start);
|
var elapsed=Math.floor(performance.now() - _start);
|
||||||
this.counter++;
|
this.counter++;
|
||||||
|
|
@ -7234,6 +7332,7 @@ const router = new VueRouter({
|
||||||
|
|
||||||
{ path: 'jobs', name:"jobs", component: Jobs, meta:{title:"Jobs running"} },
|
{ path: 'jobs', name:"jobs", component: Jobs, meta:{title:"Jobs running"} },
|
||||||
{ path: 'jobs/:job', name:"jobShow", component: Job, props: true, meta:{title:"Job Status"} },
|
{ path: 'jobs/:job', name:"jobShow", component: Job, props: true, meta:{title:"Job Status"} },
|
||||||
|
{ path: 'services', component: Services, meta:{title:"Services"} },
|
||||||
{ path: 'upload', component: Upload,meta:{title:"Upload"} },
|
{ path: 'upload', component: Upload,meta:{title:"Upload"} },
|
||||||
|
|
||||||
{ path: 'settings', component: Basexsettings,meta:{title:"BaseX settings"} },
|
{ path: 'settings', component: Basexsettings,meta:{title:"BaseX settings"} },
|
||||||
|
|
@ -7467,7 +7566,8 @@ const Vuepoc=Vue.extend({template:`
|
||||||
text: 'Server' ,
|
text: 'Server' ,
|
||||||
model: false,
|
model: false,
|
||||||
children: [
|
children: [
|
||||||
{href: '/server/jobs',text: 'Running jobs',icon: 'dashboard'},
|
{href: '/server/jobs',text: 'Running jobs',icon: 'dashboard'},
|
||||||
|
{href: '/server/services',text: 'Services',icon: 'dashboard'},
|
||||||
{href: '/server/logs',text: 'Server logs',icon: 'dns'},
|
{href: '/server/logs',text: 'Server logs',icon: 'dns'},
|
||||||
{href: '/server/users',text: 'Users',icon: 'supervisor_account'},
|
{href: '/server/users',text: 'Users',icon: 'supervisor_account'},
|
||||||
{href: '/server/repo',text: 'Server code repository',icon: 'local_library'},
|
{href: '/server/repo',text: 'Server code repository',icon: 'local_library'},
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<link rel="shortcut icon" href="/vue-poc/ui/icon.png"/>
|
<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="//unpkg.com/vuetify@1.5.12/dist/vuetify.min.css" type="text/css"/>
|
<link rel="stylesheet" href="//unpkg.com/vuetify@1.5.16/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"/>
|
||||||
|
|
@ -34,15 +34,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.6.7/vue.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.2/vue-router.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.3/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.1/axios.js" crossorigin="anonymous"></script>
|
||||||
<script src="//unpkg.com/vuex@3.1.0/dist/vuex.js" crossorigin="anonymous"></script>
|
<script src="//unpkg.com/vuex@3.1.0/dist/vuex.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.5.12/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
<script src="//unpkg.com/vuetify@1.5.16/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.3/ace.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ace.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.3/ext-language_tools.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ext-language_tools.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.3/ext-linking.js" crossorigin="anonymous" charset="utf-8"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ext-linking.js" crossorigin="anonymous" charset="utf-8"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/js-beautify/1.9.0/beautify.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/js-beautify/1.9.0/beautify.js" crossorigin="anonymous"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/js-beautify/1.9.0/beautify-css.js" crossorigin="anonymous"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/js-beautify/1.9.0/beautify-css.js" crossorigin="anonymous"></script>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue