vuetify 1.1.1

This commit is contained in:
Andy Bunce 2018-07-06 23:48:25 +01:00
parent e78818abfb
commit c5740af450
41 changed files with 688 additions and 350 deletions

View file

@ -44,6 +44,7 @@
<vp-favorite :frmfav.sync="frmfav"></vp-favorite>
<v-spacer></v-spacer>
<qd-search></qd-search>
<v-spacer></v-spacer>
@ -241,7 +242,7 @@
Vue.config.errorHandler = function (err, vm, info) {
// handle error
// `info` is a Vue-specific error info, e.g. which lifecycle hook
console.error(err, vm, info);
console.log('[Global Error Handler]: Error in ' + info + ': ' + err);
var msg=JSON.stringify(err)
that.showAlert("vue error:\n"+msg)
//alert("vue error");
@ -262,9 +263,9 @@
HTTP.get("status")
.then(r=>{
console.log("status",r.data)
Object.assign(Auth,r.data)
this.$forceUpdate()
console.log("status",r)
//Object.assign(Auth,r.data)
//this.$forceUpdate()
})
},

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<!--
file upload see https://github.com/thetutlage/vue-clip
-->
<template id="qd-fileupload">
<vue-clip :options="options">
<template slot="clip-uploader-action">
<div>
<div class="dz-message"><h2> Click or Drag and Drop files here upload </h2></div>
</div>
</template>
<template slot="clip-uploader-body" scope="props">
<div v-for="file in props.files">
<img v-bind:src="file.dataUrl" />
{{ file.name }} {{ file.status }}
</div>
</template>
</vue-clip>
</template>
<script>{
data () {
return {
options: {
url: '/vue-poc/api/upload',
paramName: 'file',
maxFilesize: {
limit: 1,
message: '{{ filesize }} is greater than the {{ maxFilesize }}'
},
maxFiles: {
limit: 5,
message: 'You can only upload a max of 5 files'
}
}
}
}
}
</script>

View file

@ -3,18 +3,17 @@
search
-->
<template id="qd-search">
<v-select
<v-combobox
placeholder="Search..." prepend-icon="search"
autocomplete
:loading="loading"
combobox
clearable
cache-items
:items="items2"
@keyup.enter="goSearch"
:search-input.sync="si"
v-model="q"
></v-select>
></v-combobox>
</template>
<script>{
@ -31,7 +30,7 @@
this.loading = true
// Simulated ajax query
setTimeout(() => {
this.items2 = ["aa","bb",this.si],
this.items2 = ["aa","bb"],
this.loading = false
}, 500)
},

View file

@ -12,8 +12,17 @@
v-model="search"
></v-text-field>
<v-spacer></v-spacer>
<v-btn @click="getData">Refresh</v-btn>
<v-btn
icon
:loading="loading"
:disabled="loading"
@click="getItems"
>
<v-icon>refresh</v-icon>
</v-btn>
<span>{{ entity }}</span>
</v-toolbar>
<v-data-table
:headers="headers"
:items="items"
@ -21,7 +30,7 @@
v-model="selected"
select-all
class="elevation-1"
no-data-text="No users found @todo"
:no-data-text="noDataMsg"
>
<template slot="items" slot-scope="props">
<slot></slot>
@ -44,7 +53,13 @@
]
},
dataUri:{
default: "users"
default: "entity"
},
noDataMsg:{
default: "No USERS found @todo"
},
entity:{
default: "entity"
}
},
data: function(){
@ -57,18 +72,19 @@
}
},
methods:{
getData(){
getItems(){
this.loading=true;
HTTP.get(this.dataUri)
.then(r=>{
this.loading=false
this.items=r.data
this.loading=false;
console.log("items",r);
this.items=r.data.items;
})
}
},
created:function(){
console.log("qd-table")
this.getData()
console.log("qd-table");
this.getItems();
}
}
</script>

View file

@ -2,7 +2,13 @@
<template id="about">
<v-jumbotron color="grey lighten-2">
<v-speed-dial v-model="fab" hover right direction="bottom" transition="slide-y-reverse-transition">
<v-container fill-height>
<v-layout align-center>
<v-flex>
<h3 class="display-3">Vue-poc<v-spacer></v-spacer>
<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>
@ -17,11 +23,6 @@
<v-icon>delete</v-icon>
</v-btn>
</v-speed-dial>
<v-container fill-height>
<v-layout align-center>
<v-flex>
<h3 class="display-3">Vue-poc
</h3>
<span class="subheading">A development environment for managing XML sources and processes.</span>

View file

@ -5,12 +5,6 @@
<v-toolbar >
<v-btn icon to="add" append>
<v-icon>add_circle</v-icon>
</v-btn>
<v-text-field
append-icon="search"
label="Filter logs"
@ -20,25 +14,38 @@
></v-text-field>
<v-btn
icon :color="autorefresh?'red':'green'"
icon :color="autorefresh?'green':''"
:loading="loading"
:disabled="loading"
@click="getItems"
@dblclick="toggle"
:disabled="loading"
>
<v-icon>refresh</v-icon>
</v-btn>
<v-btn
to="add" append
small
absolute
bottom
right
fab
>
<v-icon>add</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-menu offset-y left>
<v-btn icon slot="activator"><v-icon>settings</v-icon></v-btn>
<v-card >
<v-toolbar class="green">
<v-card-title >Settings TODO</v-card-title>
</v-toolbar>
<v-card-text>
<v-btn @click="autorefresh= ! autorefresh">Autorefresh</v-btn>
</v-card-text>
</v-card>
<v-menu bottom left min-width="300px">
<v-btn icon slot="activator" >
<v-icon>settings</v-icon>
</v-btn>
<v-list subheader>
<v-subheader>Settings</v-subheader>
<v-list-tile >
<v-list-tile-title><v-switch label="Auto Refresh" v-model="autorefresh"></v-switch></v-list-tile-title>
</v-list-tile>
</v-list>
</v-menu>
</v-toolbar>
<v-data-table
@ -88,6 +95,9 @@
}
},
methods:{
address(text){
return "%" + text;
},
getItems(){
this.loading=true
HTTP.get("log",{params:this.q})

View file

@ -3,7 +3,7 @@
<v-container fluid>
<v-card>
<v-toolbar class="lime darken-1">
<v-card-title ><qd-link href="https://github.com/zdy1988/vue-jstree">vue-jstree@1.0.11</qd-link> </v-card-title>
<v-card-title ><qd-link href="https://github.com/zdy1988/vue-jstree">vue-jstree@2.1.16</qd-link> </v-card-title>
<v-spacer></v-spacer>
<v-btn>todo</v-btn>
</v-toolbar>

View file

@ -0,0 +1,18 @@
(:~ save in multiple formats :)
import module namespace t="expkg-zone58:image.thumbnailator";
declare namespace cfg = "quodatum:media.image.configure";
declare variable $cfg:IMAGEDIR:="P:/pictures/";
let $types:=("gif","jpg","png")
for $type in $types
let $task:=<thumbnail>
<size width="100" height="100"/>
<output format="{ $type }"/>
</thumbnail>
let $thumb:= file:resolve-path("Pictures/2002/05 may/2005/DSCF1313.JPG", $cfg:IMAGEDIR)
=>fetch:binary()
=>t:task($task)
return file:write-binary(``[c:\tmp\thumb.`{$type}`]``,$thumb)

View file

@ -59,10 +59,9 @@
load(){
this.loading= true
HTTP.get("data/namespace",{params:{}})
HTTP.get("data/namespace",{params:{q:this.q}})
.then(r=>{
this.items= r.data.items
this.q= null
this.loading= false
})
.catch(error=> {

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<template id="scratch">
<v-container fluid>
<qd-fileupload title="Up it" selected-callback="upit">up load</qd-fileupload>
<qd-autoheight>
<vue-ace :content="ace" mode="xml" ></vue-ace>
</qd-autoheight>
@ -14,8 +15,13 @@
ace:"<xml>here</xml>"
}
},
methods:{
upit:function(s){
alert("up")
}
},
mounted:function(){
console.log("notfound",this.$route.path)
console.log("scratch",this.$route.path)
}
}
</script>

View file

@ -20,7 +20,7 @@ declare
%updating
function vue-api:model($efolder ,$target )
{
let $config:='import module namespace cfg = "quodatum:media.image.configure" at "features/images/config.xqm";'
let $config:='import module namespace cfg = "quodatum:media.image.configure" at "config.xqm";'
let $src:=bf:module(bf:entities($efolder),$config)
return (
prof:variables(),

View file

@ -20,16 +20,21 @@ declare
%updating
function vue-api:model($efolder ,$target )
{
let $project:=tokenize($efolder,"[/\\]")[last()]=>trace("DDD")
let $project:=tokenize($efolder,"[/\\]")[last()]=>trace("xqdoc: ")
let $files:= fw:directory-list($efolder,map{"include-filter":".*\.xqm"})
let $op:=xqd:save-xq($files,$target,map{"project":$project})
let $id:=$vue-api:state/last-id
let $opts:=map{
"project": $project,
"id": $id/string()
}
let $op:=xqd:save-xq($files,$target,$opts)
let $result:=<json type="object">
<msg> {$target}, {count($files//c:file)} files processed.</msg>
<id>{$vue-api:state/last-id/string()}</id>
<id>{$id/string()}</id>
</json>
return (
db:output($result),
replace value of node $vue-api:state/last-id with 1+$vue-api:state/last-id
replace value of node $id with 1+$vue-api:state/last-id
)
};

View file

@ -36,12 +36,25 @@
</v-stepper-content>
<v-stepper-content step="3" non-linear>
<v-card class="grey lighten-1 z-depth-1 mb-5" height="200px" >
output todo
</v-card>
<v-card class="grey lighten-1 z-depth-1 mb-5" >
<v-card-actions>
<v-btn flat @click="step -= 1">Back</v-btn>
<v-btn color="primary" @click="go()">go</v-btn>
</v-card-actions>
<v-card-text>
<v-layout style="height:200px" fill-height>
<v-flex xs6>
<img :src="image" class="contain" style="width:100%; height:100%;"/>
</v-flex>
<v-flex xs6>
<img :src="image" class="contain" style="width:50%; height:50%;object-position: 50% 50%;"/>
</v-flex>
</v-layout>
</v-card-text>
</v-card>
</v-stepper-content>
</v-stepper-items>
</v-stepper>
@ -51,9 +64,13 @@
<script>{
data(){
return {
image:"http://images.metmuseum.org/CRDImages/ep/original/DT46.jpg",
image:"https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg",
step: 0,
taskxml:"<task></task>"
taskxml:"<task></task>",
items:[
{
src: 'https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg'
}]
}
},
methods:{

View file

@ -4,6 +4,8 @@
: @author Andy Bunce may-2017
:)
module namespace vue-api = 'quodatum:vue.api.thumbnail';
import module namespace t="expkg-zone58:image.thumbnailator";
import module namespace qweb = 'quodatum.web.utils4' at "../../lib/webutils.xqm";
import module namespace rest = "http://exquery.org/ns/restxq";
@ -15,16 +17,12 @@ declare
%rest:POST %rest:path("/vue-poc/api/thumbnail")
%rest:form-param("url", "{$url}")
%rest:form-param("task", "{$task}")
%rest:produces("application/json")
%output:method("json")
function vue-api:thumbnail($url,$task )
{
let $x:=fn:parse-xml($task)=>fn:trace("task: ")
return <json type="object" >
<items type="array">
{(1 to 100)!(<_>A{.}</_>)}
</items>
</json>
let $thumb:=fetch:binary($url)=>t:task($x/thumbnail)
return (qweb:download-response("raw","xx.gif"), $thumb)
};
(:~

View file

@ -1,7 +1,13 @@
<!DOCTYPE html>
<template id="users">
<v-container fluid>
<qd-table :headers="headers" data-uri="data/users">
<qd-table :headers="headers" data-uri="data/user" entity="user" no-data-msg="Nothing found">
<template slot="items" slot-scope="props">
<td >{{ props.item.id}}</td>
<td >{{ props.item.state }}</td>
</template>
</qd-table>
</v-container>
@ -26,7 +32,7 @@
},
created:function(){
console.log("qd-table")
console.log("users")
}
}
</script>

View file

@ -1,36 +1,30 @@
(:~
: XSLT transform handler
: schema validation
: @author andy bunce
: @since oct 2017
:)
module namespace tx = 'quodatum:vue.api.transform';
module namespace tx = 'quodatum:vue.api.validate';
import module namespace qv = 'quodatum.validate' at "validate.xqm";
declare namespace cnt="http://cambridge.org/core/content";
(:~ location of schema to use :)
declare variable $tx:nvdl:=resolve-uri("../static/consignment/nvdl/consignment.nvdl",static-base-uri());
(:~ location of schema to use :)
declare variable $tx:schematron:=resolve-uri("../static/consignment/nvdl/core-consignment.sch",static-base-uri());
declare variable $tx:validators:=(qv:schematron(?,$tx:schematron)
,qv:nvdl(?,$tx:nvdl)
);
(:~ run validation doc in db :)
(:~ run validation
: @return json
:)
declare
%rest:GET %rest:path("/vue-poc/api/validate")
%rest:query-param("doc", "{$doc}")
%rest:query-param("schema", "{$schema}")
%rest:produces("text/xml")
%output:method("xml")
function tx:validate-path($doc,$schema){
tx:validate(doc($doc))
%rest:POST %rest:path("/vue-poc/api/validate")
%rest:form-param("doc", "{$doc}")
%rest:form-param("schema", "{$schema}")
%rest:produces("application/json")
%output:method("json")
function tx:validate-path($doc as xs:anyURI,
$schema as xs:anyURI)
{
(: tx:validate(doc($doc)) :)
let $_:=trace($doc,"doc ")
let $_:=trace($schema,"schema: ")
let $validators:=qv:xsd(?,$schema)
let $report:= qv:validation($doc ,$validators,attribute type {"xsd"})
return qv:json($report,map{})
};
(:~ run validations add custom details - content-type:)
declare function tx:validate($doc){
let $type:=$doc//cnt:*=>head()=>local-name()=>substring-after("content-")
return qv:validation($doc,$tx:validators,attribute type {$type})
};

View file

@ -1,20 +1,27 @@
<!DOCTYPE html>
<template id="validate">
<v-container fluid v-resize="onResize">
<v-container fluid >
<v-snackbar v-model="snackbar.show"
:timeout="6000"
:success="snackbar.context === 'success'"
:error="snackbar.context === 'error'"
>
{{ snackbar.msg }}
<v-btn dark flat @click="snackbar.show = false">Close</v-btn>
</v-snackbar>
<v-card>
<v-toolbar class="orange">
<v-btn @click="validate" :loading="loading"
:disabled="loading"
><v-icon>play_circle_outline</v-icon>Validate</v-btn>
<span v-text="elapsed"></span>ms. Height:
<span v-text="height"></span>
<span v-text="elapsed"></span>ms.
<v-spacer></v-spacer>
<v-menu offset-y left>
<v-btn icon dark slot="activator"><v-icon>settings</v-icon></v-btn>
<v-card >
<v-toolbar class="green">
<v-card-title >Settings................</v-card-title>
<v-card-title >@TODO.......</v-card-title>
</v-toolbar>
<v-card-text>
stuff
@ -22,13 +29,23 @@
</v-card>
</v-menu>
</v-toolbar>
<v-card-text >
<qd-autoheight>
<v-flex fill-height xs12 >
test here
<v-card-text v-resize="onResize" style="height:100px" ref="auto">
<v-container fluid>
<v-layout row wrap>
<v-flex xs8>
<v-text-field v-for="field in fields" :key="field.model"
v-model="params[field.model]" :label="field.label" clearable :rules="[rules.required]" box
></v-text-field>
</v-flex>
</qd-autoheight>
<v-flex xs4 fill-height style="overflow:scroll">
<pre >Result: {{ result }}</pre>
</v-flex>
</v-layout>
</v-container>
</v-card-text>
</v-card>
</v-container>
</template>
@ -40,38 +57,53 @@
elapsed: null,
height: null,
result: null,
doc: "c:/test.xml",
schema: "c:/schema.xsd"
fields:[
{model: "schema", label: "Schema (xsd url)"},
{model: "doc", label: "Doc (url)"}
],
rules: {
required: value => !!value || 'Required.'
},
params:{
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/adminlog.xml",
schema: "C:/Users/andy/git/vue-poc/src/vue-poc/models/schemas/entity.xsd"
},
snackbar:{show:false,msg:"",context:"success"}
}
},
methods:{
onResize(){
this.height = window.innerHeight
//console.log("EL",this.$el);
var el=this.$refs["auto"];
var h=window.innerHeight - el.getBoundingClientRect().top -32;
var h=Math.max(1,h) ;
//console.log("resize h",h,el.style)
el.style.height=h +"px";
},
validate(){
validate(){
this.loading=true
this.start = performance.now();
HTTPNE.get("validate",Qs.stringify({doc: this.doc, schema: this.schema}))
HTTP.post("validate",Qs.stringify(this.params))
.then(r=>{
console.log(r)
console.log(r);
this.snackbar={show:true,msg:r.data.msg,context:"success"};
this.elapsed=Math.floor(performance.now() - this.start);
this.loading=false
if(r.data.rc==0){
this.result=r.data.result
this.result=r.data
}else{
this.result=r.data.info
this.result=r.data
}
})
.catch(r=> {
console.log("error",r)
console.log("error",r.response.data)
this.snackbar={show: true, msg: r.response.data, context: "error"}
this.result=r.message + ": "+ r.config.url + "\n"+ r.response.data
this.loading=false
});
},
},
created:function(){
console.log("notfound",this.$route.query.q)
}
}
</script>

View file

@ -1,6 +1,10 @@
(:~
: general validation tools, apply sequence of validators
: schematron and nvdl msg handling
: general validation tools,
: qv:validation: apply sequence of validators
: schematron qv:schematron(?,$schematron)
: nvdl qv:nvdl(?,$nvdl)
msg handling
: format as json friendly
: @author andy bunce ,quodatum ltd
: @licence apache 2
@ -16,28 +20,29 @@ declare namespace svrl = "http://purl.oclc.org/dsdl/svrl";
: @param $extras custom attributes and elements to include in response
:)
declare function qv:validation($doc ,$validators as function(*)*,$extras)
as element(validation){
let $uri:=base-uri($doc)
as element(validation)
{
let $_:=trace(if($doc instance of xs:anyURI)then $doc else base-uri($doc),"£££££")
let $uri:=if($doc instance of xs:anyURI)then $doc else base-uri($doc)
let $results:=for-each($validators,function($f){$f($doc)})
return <validation location="{$uri}" nodes="{count($doc//*)}">{ $extras,$results}</validation>
return <validation location="{$uri}" >{ $extras,$results}</validation>
};
(:~ report as json
: @param $options can limit size eg {"limit":200}
:)
declare function qv:json($d as element(validation),$options as item())
as element(_){
as element(json)
{
let $limit:= if($options?limit) then $options?limit else 5000
let $type:=$d/@type/string()
let $uri:=$d/@location/string()
let $name:=tokenize($uri,"/")[last()]
let $nodes:=$d/@nodes/string()
let $fix:=function($r){element {name($r)}{attribute type {"array"},qv:msg-limit($r/_,$limit)}}
return <_ type="object">
return <json type="object">
<uri>{$uri}</uri>
<name>{$name}</name>
<type>{$type}</type>
<nodes type="number">{$nodes}</nodes>
<msgcounts type="object">{
for $v in $d/* return element {name($v)}{attribute type {"number"},count($v/_)}
@ -47,12 +52,13 @@ as element(_){
$d/*!$fix(.)
}</reports>
</_>
</json>
};
(:~ restrict number of messages o/p :)
declare function qv:msg-limit($msgs as element(_)* ,$limit as xs:integer)
as element(_)*{
as element(_)*
{
let $count:=count($msgs)
return if($count>$limit)
then (subsequence($msgs,1,$limit -1),<_ type="object"><text>Messages truncated, {1+ $count - $limit} not shown.</text></_>)
@ -63,7 +69,8 @@ return if($count>$limit)
: run schematron on doc, returns two reports
:)
declare function qv:schematron($d,$sch as xs:anyURI)
as element()*{
as element()*
{
let $report:= sch:validate-document($d,doc($sch))
return (
qv:msgs("failed-assert",$report/svrl:schematron-output/svrl:failed-assert!qv:msg-from-svrl(.)),
@ -73,7 +80,8 @@ return (
(:~ convert svrl node to standard msg :)
declare function qv:msg-from-svrl($svrl as element())
as element(_){
as element(_)
{
<_ type="object">
<text>{$svrl/svrl:text/string()}</text>
<role>{$svrl/@role/string()}</role>
@ -82,14 +90,23 @@ as element(_){
};
(:~ create nvdl report :)
declare function qv:nvdl($d,$nvdl as xs:anyURI){
declare function qv:nvdl($d,$nvdl as xs:anyURI)
{
let $report:= validate:rng-report($d, $nvdl)
return qv:msgs("nvdl",$report/message!qv:msg-from-nvdl(.))
};
(:~ create xsd report :)
declare function qv:xsd($d,$xsd as xs:anyURI)
{
let $report:= validate:xsd-report($d, $xsd)
return qv:msgs("xsd",$report/message!qv:msg-from-nvdl(.))
};
(:~ convert nvdl message to standard msg format :)
declare function qv:msg-from-nvdl($message as element())
as element(_){
as element(_)
{
<_ type="object">
<text>{$message/string()}</text>
<role>{$message/@level/lower-case(.)}</role>
@ -97,8 +114,11 @@ as element(_){
</_>
};
(:~ create element type to wrap array of msgs
:)
declare %private function qv:msgs($type as xs:string,$msgs as element(_)*)
as element(){
as element()
{
element {$type} {attribute type {"array"},$msgs}
};

View file

@ -20,7 +20,7 @@ function tx:xslt($xml,$xslt) {
let $x:=fn:parse-xml($xml)
let $s:=fn:parse-xml($xslt)
let $params:=map{}
let $opts:=map{"cache":true()}
let $opts:=map{"cache":false()} (: BUG? :)
let $r:=xslt:transform-text($x,$s,$params,$opts)
return
<json objects="json">

View file

@ -9,7 +9,7 @@
xmlns:c="http://www.w3.org/ns/xproc-step" version="2.0">
<!-- build project index" -->
<xsl:param name="project" as="xs:string" />
<xsl:param name="id" as="xs:string" />
<xsl:param name="resources" as="xs:string" select="'resources/'" />
<xsl:variable name="css" select="concat($resources,'base.css')" />
@ -22,7 +22,7 @@
content="xqdoc-r - https://github.com/quodatum/xqdoc-r" />
<title>
<xsl:value-of select="'Index'" />
<xsl:value-of select="'Index'" /> <xsl:value-of select="$id" />
- xqDoc
</title>
<link rel="shortcut icon" type="image/x-icon" href="{$resources}xqdoc.png" />
@ -40,7 +40,7 @@
<div id="main">
<h1>
XQDoc for
<xsl:value-of select="$project" />
<xsl:value-of select="$project" /> ,id: <xsl:value-of select="$id" />
</h1>
<xsl:call-template name="toc" />

View file

@ -8,6 +8,7 @@
<xsl:param name="project" as="xs:string" />
<xsl:param name="source" as="xs:string" />
<xsl:param name="filename" as="xs:string" />
<xsl:param name="id" as="xs:string" />
<xsl:param name="show-private" as="xs:boolean" select="false()" />
<xsl:param name="resources" as="xs:string" select="'../resources/'" />
@ -32,6 +33,7 @@
<title>
<xsl:value-of select="$docuri" />
- xqDoc
<xsl:value-of select="$id" />
</title>
<link rel="shortcut icon" type="image/x-icon" href="{$resources}xqdoc.png" />
<link rel="stylesheet" type="text/css" href="{$resources}page.css" />
@ -428,7 +430,7 @@
<div>
<a href="{$index}">
&#8624;
<xsl:value-of select="$project" />
<xsl:value-of select="$project" /> :id= <xsl:value-of select="$id" />
</a>
</div>
<h2>

View file

@ -14,8 +14,11 @@ declare variable $xqd:XML:=map{"indent": "no"};
declare variable $xqd:mod-xslt external :="html-module.xsl";
declare variable $xqd:index-xslt external :="html-index.xsl";
(:~ save documentation for files to target
:
(:~
: save documentation for files to target
: @param $files c:directory-list
: @param $target where to save
: @param $opts
:)
declare function xqd:save-xq($files,$target,$params as map(*))
{

View file

@ -1,5 +1,5 @@
(: entity access maps
: auto generated from xml files in entities folder at: 2018-06-20T22:41:55.037+01:00
: auto generated from xml files in entities folder at: 2018-06-27T22:03:58.364+01:00
:)
module namespace entity = 'quodatum.models.generated';

View file

@ -27,8 +27,7 @@
<xpath>.</xpath>
</field>
</fields>
<views>
</views>
<iconclass>fa fa-calendar</iconclass>
<views iconclass="fa fa-calendar"/>
<data type="element(entry)">hof:top-k-by(admin:logs(), hof:id#1, 2)/string()!reverse(admin:logs(.,true()))</data>
</entity>

View file

@ -25,9 +25,8 @@
<xpath>../../@name</xpath>
</field>
</fields>
<views>
<views iconclass="pin_drop">
<view name="filter">name description</view>
</views>
<iconclass>glyphicon glyphicon-minus</iconclass>
<data type="element(ent:field)">collection("doc-doc")//ent:field</data>
</entity>

View file

@ -30,7 +30,7 @@
</field>
<field name="iconclass" type="xs:string">
<description>css class for icon</description>
<xpath>ent:iconclass</xpath>
<xpath>ent:views/@iconclass</xpath>
</field>
<field name="nfields" type="xs:integer">
<description>The number of fields for this entity</description>
@ -48,6 +48,7 @@
<description>parent entity link if any</description>
<xpath>fn:concat("/data/entity/",ent:parent/@name)</xpath>
</field>
<!--
<field name="fields" entity="field">
<description>parent entity link if any</description>
@ -55,9 +56,8 @@
</field>
-->
</fields>
<views>
<views iconclass="place">
<view name="filter">name description</view>
</views>
<iconclass>glyphicon glyphicon-list-alt</iconclass>
<data type="element(ent:entity)">collection("vue-poc")//ent:entity</data>
</entity>

View file

@ -0,0 +1,29 @@
<entity name="filehistory" xmlns="https://github.com/Quodatum/app-doc/entity">
<description>vue-poc file view events </description>
<namespace prefix="h" uri="urn:quodatum:vue-poc.history" />
<fields>
<field name="created" type="xs:string">
<description>time of event</description>
<xpath>@when</xpath>
</field>
<field name="user" type="xs:string">
<description>user</description>
<xpath>@user</xpath>
</field>
<field name="id" type="xs:string">
<description>id</description>
<xpath>@id</xpath>
</field>
<field name="protocol" type="xs:string">
<description>mode eg file basexdb</description>
<xpath>h:file/@mode</xpath>
</field>
<field name="url" type="xs:string">
<description>path</description>
<xpath>h:file/@url</xpath>
</field>
</fields>
<views iconclass="fa fa-calendar"/>
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[h:file]</data>
</entity>

View file

@ -28,10 +28,9 @@
<xpath>string-length(result)</xpath>
</field>
</fields>
<views>
<views iconclass="fa fa-file-code-o">
<view name="filter">name description</view>
</views>
<iconclass>fa fa-file-code-o</iconclass>
<data type="element(jobrun)">collection("vue-poc/jobrun")/jobrun
</data>
</entity>

View file

@ -15,10 +15,9 @@
</field>
</fields>
<views>
<views iconclass="label">
<view name="filter">xmlns description</view>
</views>
<iconclass>label</iconclass>
<data type="element(namespace)">collection("vue-poc")/namespaces/namespace
</data>
</entity>

View file

@ -0,0 +1,32 @@
<entity name="query" xmlns="https://github.com/Quodatum/app-doc/entity">
<description>An replx query</description>
<namespace prefix="xqdoc" uri="http://www.xqdoc.org/1.0" />
<fields>
<field name="id" type="xs:string">
<description>unique id</description>
<xpath>@id</xpath>
</field>
<field name="created" type="xs:string">
<description>date</description>
<xpath>created</xpath>
</field>
<field name="query" type="xs:string">
<description>query</description>
<xpath>query</xpath>
</field>
<field name="result" type="xs:string">
<description>result</description>
<xpath>substring(result,0,1000)</xpath>
</field>
<field name="resultlength" type="xs:integer">
<description>result</description>
<xpath>string-length(result)</xpath>
</field>
</fields>
<views iconclass="fa fa-file-code-o">
<view name="filter">name description</view>
</views>
<data type="element(query)">collection("replx/queries")/query
</data>
</entity>

View file

@ -18,6 +18,6 @@
<xpath>"app.item.index({'name':'benchx'})"</xpath>
</field>
</fields>
<iconclass>fa fa-question-circle</iconclass>
<views iconclass="fa fa-question-circle" />
<data type="element(search)"></data>
</entity>

View file

@ -38,10 +38,8 @@
</field>
</fields>
<views>
<views iconclass="fa fa-file">
<view name="filter">name</view>
</views>
<iconclass>fa fa-file</iconclass>
<data type="element(image)">collection($cfg:DB-IMAGE || "/image")/image</data>
</entity>

View file

@ -1,5 +1,5 @@
<entity name="user" xmlns="https://github.com/Quodatum/app-doc/entity">
<description>users </description>
<description>A BaseX user </description>
<fields>
<field name="name" type="xs:string">
@ -11,8 +11,6 @@
<xpath>@permission</xpath>
</field>
</fields>
<views>
</views>
<iconclass>fa fa-calendar</iconclass>
<views iconclass="person"/>
<data type="element(user)">user:list-details()</data>
</entity>

View file

@ -11,8 +11,6 @@
<xpath>@root</xpath>
</field>
</fields>
<views>
</views>
<iconclass>fa fa-calendar</iconclass>
<views iconclass="pages"/>
<data type="element(entry)">()</data>
</entity>

View file

@ -1,31 +0,0 @@
<entity name="filehistory" xmlns="https://github.com/Quodatum/app-doc/entity">
<description>vue-poc file view events </description>
<namespace prefix="h" uri="urn:quodatum:vue-poc.history"/>
<fields>
<field name="created" type="xs:string">
<description>time of event</description>
<xpath>@when</xpath>
</field>
<field name="user" type="xs:string">
<description>user</description>
<xpath>@user</xpath>
</field>
<field name="id" type="xs:string">
<description>id</description>
<xpath>@id</xpath>
</field>
<field name="protocol" type="xs:string">
<description>mode eg file basexdb</description>
<xpath>h:file/@mode</xpath>
</field>
<field name="url" type="xs:string">
<description>path</description>
<xpath>h:file/@url</xpath>
</field>
</fields>
<views>
</views>
<iconclass>fa fa-calendar</iconclass>
<data type="element(h:event)">doc("vue-poc/history.xml")/h:history/h:event[h:file]</data>
</entity>

View file

@ -1,33 +0,0 @@
<entity name="query" xmlns="https://github.com/Quodatum/app-doc/entity">
<description>An replx query</description>
<namespace prefix="xqdoc" uri="http://www.xqdoc.org/1.0"/>
<fields>
<field name="id" type="xs:string">
<description>unique id</description>
<xpath>@id</xpath>
</field>
<field name="created" type="xs:string">
<description>date</description>
<xpath>created</xpath>
</field>
<field name="query" type="xs:string">
<description>query</description>
<xpath>query</xpath>
</field>
<field name="result" type="xs:string">
<description>result</description>
<xpath>substring(result,0,1000)</xpath>
</field>
<field name="resultlength" type="xs:integer">
<description>result</description>
<xpath>string-length(result)</xpath>
</field>
</fields>
<views>
<view name="filter">name description</view>
</views>
<iconclass>fa fa-file-code-o</iconclass>
<data type="element(query)">collection("replx/queries")/query
</data>
</entity>

View file

@ -0,0 +1,89 @@
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://github.com/Quodatum/app-doc/entity" xmlns:ent="https://github.com/Quodatum/app-doc/entity">
<xs:element name="entity">
<xs:annotation>
<xs:documentation>Root element for entity</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="ent:description" />
<xs:element maxOccurs="1" minOccurs="0" ref="ent:namespace">
</xs:element>
<xs:element name="fields">
<xs:complexType>
<xs:sequence>
<xs:element name="field" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="description" />
<xs:element type="xs:string" name="xpath" />
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="optional" />
<xs:attribute type="xs:string" name="type" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="ent:viewsType" name="views" />
<xs:element ref="ent:data" />
</xs:sequence>
<xs:attribute type="xs:string" name="name" />
<xs:attribute type="xs:string" name="type" />
</xs:complexType>
</xs:element>
<xs:complexType name="viewsType">
<xs:sequence>
<xs:element name="view" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="iconclass" type="xs:string"></xs:attribute>
</xs:complexType>
<xs:complexType name="dataComplexType">
<xs:annotation></xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string">
<xs:annotation></xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="namespace">
<xs:complexType>
<xs:attribute name="prefix" type="xs:string"></xs:attribute>
<xs:attribute name="uri" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="data" type="ent:dataComplexType" />
<xs:element name="description" type="ent:mixed-text">
<xs:annotation>
<xs:documentation>about the entity</xs:documentation>
</xs:annotation>
</xs:element>
<!-- Complex type used for comment text to allow the inclusion of embedded
HTML markup within comments. -->
<xs:complexType mixed="true" name="mixed-text">
<xs:sequence>
<xs:any maxOccurs="unbounded" minOccurs="0" processContents="skip" />
</xs:sequence>
</xs:complexType>
</xs:schema>

View file

@ -1,4 +1,4 @@
// generated 2018-06-24T22:46:13.105+01:00
// generated 2018-07-06T22:33:10.411+01:00
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-autoheight.vue
Vue.component('qd-autoheight',{template:`
@ -50,6 +50,46 @@ Vue.component('qd-confirm',{template:`
);
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-fileupload.vue
Vue.component('qd-fileupload',{template:`
<vue-clip :options="options">
<template slot="clip-uploader-action">
<div>
<div class="dz-message"><h2> Click or Drag and Drop files here upload </h2></div>
</div>
</template>
<template slot="clip-uploader-body" scope="props">
<div v-for="file in props.files">
<img v-bind:src="file.dataUrl">
{{ file.name }} {{ file.status }}
</div>
</template>
</vue-clip>
`,
data () {
return {
options: {
url: '/vue-poc/api/upload',
paramName: 'file',
maxFilesize: {
limit: 1,
message: '{{ filesize }} is greater than the {{ maxFilesize }}'
},
maxFiles: {
limit: 5,
message: 'You can only upload a max of 5 files'
}
}
}
}
}
);
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-fullscreen.vue
Vue.component('qd-fullscreen',{template:`
<a @click="toggle()" href="javascript:void(0);" title="Fullscreen toggle">
@ -153,7 +193,7 @@ Vue.component('qd-panel',{template:`
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-search.vue
Vue.component('qd-search',{template:`
<v-select placeholder="Search..." prepend-icon="search" autocomplete="" :loading="loading" combobox="" clearable="" cache-items="" :items="items2" @keyup.enter="goSearch" :search-input.sync="si" v-model="q"></v-select>
<v-combobox placeholder="Search..." prepend-icon="search" autocomplete="" :loading="loading" clearable="" cache-items="" :items="items2" @keyup.enter="goSearch" :search-input.sync="si" v-model="q"></v-combobox>
`,
data:function(){return {
@ -169,7 +209,7 @@ Vue.component('qd-search',{template:`
this.loading = true
// Simulated ajax query
setTimeout(() => {
this.items2 = ["aa","bb",this.si],
this.items2 = ["aa","bb"],
this.loading = false
}, 500)
},
@ -194,9 +234,13 @@ Vue.component('qd-table',{template:`
<v-toolbar>
<v-text-field append-icon="search" label="Filter user" single-line="" hide-details="" v-model="search"></v-text-field>
<v-spacer></v-spacer>
<v-btn @click="getData">Refresh</v-btn>
<v-btn icon="" :loading="loading" :disabled="loading" @click="getItems">
<v-icon>refresh</v-icon>
</v-btn>
<span>{{ entity }}</span>
</v-toolbar>
<v-data-table :headers="headers" :items="items" :search="search" v-model="selected" select-all="" class="elevation-1" no-data-text="No users found @todo">
<v-data-table :headers="headers" :items="items" :search="search" v-model="selected" select-all="" class="elevation-1" :no-data-text="noDataMsg">
<template slot="items" slot-scope="props">
<slot></slot>
</template>
@ -217,7 +261,13 @@ Vue.component('qd-table',{template:`
]
},
dataUri:{
default: "users"
default: "entity"
},
noDataMsg:{
default: "No USERS found @todo"
},
entity:{
default: "entity"
}
},
data: function(){
@ -230,18 +280,19 @@ Vue.component('qd-table',{template:`
}
},
methods:{
getData(){
getItems(){
this.loading=true;
HTTP.get(this.dataUri)
.then(r=>{
this.loading=false
this.items=r.data
this.loading=false;
console.log("items",r);
this.items=r.data.items;
})
}
},
created:function(){
console.log("qd-table")
this.getData()
console.log("qd-table");
this.getItems();
}
}
@ -890,6 +941,11 @@ const Notfound=Vue.extend({template:`
const About=Vue.extend({template:`
<v-jumbotron color="grey lighten-2">
<v-container fill-height="">
<v-layout align-center="">
<v-flex>
<h3 class="display-3">Vue-poc<v-spacer></v-spacer>
<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>
@ -905,11 +961,6 @@ const About=Vue.extend({template:`
<v-icon>delete</v-icon>
</v-btn>
</v-speed-dial>
<v-container fill-height="">
<v-layout align-center="">
<v-flex>
<h3 class="display-3">Vue-poc
</h3>
<span class="subheading">A development environment for managing XML sources and processes.</span>
@ -1032,28 +1083,27 @@ const Log=Vue.extend({template:`
<v-toolbar>
<v-btn icon="" to="add" append="">
<v-icon>add_circle</v-icon>
</v-btn>
<v-text-field append-icon="search" label="Filter logs" single-line="" hide-details="" v-model="search"></v-text-field>
<v-btn icon="" :color="autorefresh?'red':'green'" :loading="loading" @click="getItems" @dblclick="toggle" :disabled="loading">
<v-btn icon="" :color="autorefresh?'green':''" :loading="loading" :disabled="loading" @click="getItems" @dblclick="toggle">
<v-icon>refresh</v-icon>
</v-btn>
<v-btn to="add" append="" small="" absolute="" bottom="" right="" fab="">
<v-icon>add</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-menu offset-y="" left="">
<v-btn icon="" slot="activator"><v-icon>settings</v-icon></v-btn>
<v-card>
<v-toolbar class="green">
<v-card-title>Settings TODO</v-card-title>
</v-toolbar>
<v-card-text>
<v-btn @click="autorefresh= ! autorefresh">Autorefresh</v-btn>
</v-card-text>
</v-card>
<v-menu bottom="" left="" min-width="300px">
<v-btn icon="" slot="activator">
<v-icon>settings</v-icon>
</v-btn>
<v-list subheader="">
<v-subheader>Settings</v-subheader>
<v-list-tile>
<v-list-tile-title><v-switch label="Auto Refresh" v-model="autorefresh"></v-switch></v-list-tile-title>
</v-list-tile>
</v-list>
</v-menu>
</v-toolbar>
<v-data-table :headers="headers" :items="items" :search="search" class="elevation-1" no-data-text="No logs found" v-bind:pagination.sync="pagination">
@ -1095,6 +1145,9 @@ const Log=Vue.extend({template:`
}
},
methods:{
address(text){
return "%" + text;
},
getItems(){
this.loading=true
HTTP.get("log",{params:this.q})
@ -1654,7 +1707,7 @@ const Tree=Vue.extend({template:`
<v-container fluid="">
<v-card>
<v-toolbar class="lime darken-1">
<v-card-title><qd-link href="https://github.com/zdy1988/vue-jstree">vue-jstree@1.0.11</qd-link> </v-card-title>
<v-card-title><qd-link href="https://github.com/zdy1988/vue-jstree">vue-jstree@2.1.16</qd-link> </v-card-title>
<v-spacer></v-spacer>
<v-btn>todo</v-btn>
</v-toolbar>
@ -4048,10 +4101,9 @@ const Namespace=Vue.extend({template:`
load(){
this.loading= true
HTTP.get("data/namespace",{params:{}})
HTTP.get("data/namespace",{params:{q:this.q}})
.then(r=>{
this.items= r.data.items
this.q= null
this.loading= false
})
.catch(error=> {
@ -4418,6 +4470,7 @@ const Repo=Vue.extend({template:`
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/scratch.vue
const Scratch=Vue.extend({template:`
<v-container fluid="">
<qd-fileupload title="Up it" selected-callback="upit">up load</qd-fileupload>
<qd-autoheight>
<vue-ace :content="ace" mode="xml"></vue-ace>
</qd-autoheight>
@ -4430,8 +4483,13 @@ const Scratch=Vue.extend({template:`
ace:"<xml>here</xml>"
}
},
methods:{
upit:function(s){
alert("up")
}
},
mounted:function(){
console.log("notfound",this.$route.path)
console.log("scratch",this.$route.path)
}
}
@ -5269,12 +5327,25 @@ const Thumbnail=Vue.extend({template:`
</v-stepper-content>
<v-stepper-content step="3" non-linear="">
<v-card class="grey lighten-1 z-depth-1 mb-5" height="200px">
output todo
</v-card>
<v-card class="grey lighten-1 z-depth-1 mb-5">
<v-card-actions>
<v-btn flat="" @click="step -= 1">Back</v-btn>
<v-btn color="primary" @click="go()">go</v-btn>
</v-card-actions>
<v-card-text>
<v-layout style="height:200px" fill-height="">
<v-flex xs6="">
<img :src="image" class="contain" style="width:100%; height:100%;">
</v-flex>
<v-flex xs6="">
<img :src="image" class="contain" style="width:50%; height:50%;object-position: 50% 50%;">
</v-flex>
</v-layout>
</v-card-text>
</v-card>
</v-stepper-content>
</v-stepper-items>
</v-stepper>
@ -5283,9 +5354,13 @@ const Thumbnail=Vue.extend({template:`
data(){
return {
image:"http://images.metmuseum.org/CRDImages/ep/original/DT46.jpg",
image:"https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg",
step: 0,
taskxml:"<task></task>"
taskxml:"<task></task>",
items:[
{
src: 'https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg'
}]
}
},
methods:{
@ -5331,7 +5406,13 @@ const Thumbnail=Vue.extend({template:`
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/users/users.vue
const Users=Vue.extend({template:`
<v-container fluid="">
<qd-table :headers="headers" data-uri="data/users">
<qd-table :headers="headers" data-uri="data/user" entity="user" no-data-msg="Nothing found">
<template slot="items" slot-scope="props">
<td>{{ props.item.id}}</td>
<td>{{ props.item.state }}</td>
</template>
</qd-table>
</v-container>
@ -5355,7 +5436,7 @@ const Users=Vue.extend({template:`
},
created:function(){
console.log("qd-table")
console.log("users")
}
}
@ -5363,19 +5444,22 @@ const Users=Vue.extend({template:`
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/validate/validate.vue
const Validate=Vue.extend({template:`
<v-container fluid="" v-resize="onResize">
<v-container fluid="">
<v-snackbar v-model="snackbar.show" :timeout="6000" :success="snackbar.context === 'success'" :error="snackbar.context === 'error'">
{{ snackbar.msg }}
<v-btn dark="" flat="" @click="snackbar.show = false">Close</v-btn>
</v-snackbar>
<v-card>
<v-toolbar class="orange">
<v-btn @click="validate" :loading="loading" :disabled="loading"><v-icon>play_circle_outline</v-icon>Validate</v-btn>
<span v-text="elapsed"></span>ms. Height:
<span v-text="height"></span>
<span v-text="elapsed"></span>ms.
<v-spacer></v-spacer>
<v-menu offset-y="" left="">
<v-btn icon="" dark="" slot="activator"><v-icon>settings</v-icon></v-btn>
<v-card>
<v-toolbar class="green">
<v-card-title>Settings................</v-card-title>
<v-card-title>@TODO.......</v-card-title>
</v-toolbar>
<v-card-text>
stuff
@ -5383,13 +5467,21 @@ const Validate=Vue.extend({template:`
</v-card>
</v-menu>
</v-toolbar>
<v-card-text>
<qd-autoheight>
<v-flex fill-height="" xs12="">
test here
<v-card-text v-resize="onResize" style="height:100px" ref="auto">
<v-container fluid="">
<v-layout row="" wrap="">
<v-flex xs8="">
<v-text-field v-for="field in fields" :key="field.model" v-model="params[field.model]" :label="field.label" clearable="" :rules="[rules.required]" box=""></v-text-field>
</v-flex>
</qd-autoheight>
<v-flex xs4="" fill-height="" style="overflow:scroll">
<pre>Result: {{ result }}</pre>
</v-flex>
</v-layout>
</v-container>
</v-card-text>
</v-card>
</v-container>
`,
@ -5400,38 +5492,53 @@ const Validate=Vue.extend({template:`
elapsed: null,
height: null,
result: null,
doc: "c:/test.xml",
schema: "c:/schema.xsd"
fields:[
{model: "schema", label: "Schema (xsd url)"},
{model: "doc", label: "Doc (url)"}
],
rules: {
required: value => !!value || 'Required.'
},
params:{
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/adminlog.xml",
schema: "C:/Users/andy/git/vue-poc/src/vue-poc/models/schemas/entity.xsd"
},
snackbar:{show:false,msg:"",context:"success"}
}
},
methods:{
onResize(){
this.height = window.innerHeight
//console.log("EL",this.$el);
var el=this.$refs["auto"];
var h=window.innerHeight - el.getBoundingClientRect().top -32;
var h=Math.max(1,h) ;
//console.log("resize h",h,el.style)
el.style.height=h +"px";
},
validate(){
validate(){
this.loading=true
this.start = performance.now();
HTTPNE.get("validate",Qs.stringify({doc: this.doc, schema: this.schema}))
HTTP.post("validate",Qs.stringify(this.params))
.then(r=>{
console.log(r)
console.log(r);
this.snackbar={show:true,msg:r.data.msg,context:"success"};
this.elapsed=Math.floor(performance.now() - this.start);
this.loading=false
if(r.data.rc==0){
this.result=r.data.result
this.result=r.data
}else{
this.result=r.data.info
this.result=r.data
}
})
.catch(r=> {
console.log("error",r)
console.log("error",r.response.data)
this.snackbar={show: true, msg: r.response.data, context: "error"}
this.result=r.message + ": "+ r.config.url + "\n"+ r.response.data
this.loading=false
});
},
},
created:function(){
console.log("notfound",this.$route.query.q)
}
}
@ -5805,6 +5912,7 @@ const Vuepoc=Vue.extend({template:`
<vp-favorite :frmfav.sync="frmfav"></vp-favorite>
<v-spacer></v-spacer>
<qd-search></qd-search>
<v-spacer></v-spacer>
@ -6001,7 +6109,7 @@ const Vuepoc=Vue.extend({template:`
Vue.config.errorHandler = function (err, vm, info) {
// handle error
// `info` is a Vue-specific error info, e.g. which lifecycle hook
console.error(err, vm, info);
console.log('[Global Error Handler]: Error in ' + info + ': ' + err);
var msg=JSON.stringify(err)
that.showAlert("vue error:\n"+msg)
//alert("vue error");
@ -6022,9 +6130,9 @@ const Vuepoc=Vue.extend({template:`
HTTP.get("status")
.then(r=>{
console.log("status",r.data)
Object.assign(Auth,r.data)
this.$forceUpdate()
console.log("status",r)
//Object.assign(Auth,r.data)
//this.$forceUpdate()
})
},

View file

@ -135,6 +135,10 @@ height: 100%;
background-color: green;
border: thick double #32a1ce;
}
.contain {
object-fit: contain;
}
.canvas {
overflow: hidden;
}

View file

@ -11,7 +11,7 @@
<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 href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
<link href="//unpkg.com/vuetify@1.0.19/dist/vuetify.min.css" rel="stylesheet" type="text/css"/>
<link href="//unpkg.com/vuetify@1.1.1/dist/vuetify.min.css" rel="stylesheet" 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/vue-form-generator@2.2.2/dist/vfg-core.css"/>
<link href="/vue-poc/ui/app.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<body>
<div id="app">
<h3><code>vue-poc</code> <small>(v0.3.5)</small> </h3>
<h3><code>vue-poc</code> <small>(v0.3.6)</small> </h3>
<div class="spinner">
<div class="rect1"></div>
@ -38,7 +38,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/axios/0.17.1/axios.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.0.19/dist/vuetify.min.js" crossorigin="anonymous"></script>
<script src="//unpkg.com/vuetify@1.1.1/dist/vuetify.min.js" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ext-language_tools.js" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ext-linking.js" type="text/javascript" charset="utf-8"></script>
@ -49,8 +49,8 @@
<script src="//cdnjs.cloudflare.com/ajax/libs/localforage/1.7.1/localforage.js" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/vis/4.20.1/vis-timeline-graph2d.min.js" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue-jstree@1.0.11/dist/vue-jstree.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/vue-clip@1.0.0/dist/vue-clip.js" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue-jstree@2.1.6/dist/vue-jstree.js" crossorigin="anonymous"></script>
<script src="//unpkg.com/@riophae/vue-treeselect@0.0.29/dist/vue-treeselect.min.js" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue-form-generator@2.2.2/dist/vfg-core.js" crossorigin="anonymous"></script>

View file

@ -1,19 +0,0 @@
(:~
: Update `generated/models.xqm` from files in `data/models`
: using file:///C:/Users/andy/workspace/app-doc/src/doc/data/doc/models
:)
declare namespace task="https://github.com/Quodatum/app-doc/task";
import module namespace bf = 'quodatum.tools.buildfields' at "../lib/entity-gen.xqm";
declare variable $efolder:="C:/Users/andy/git/vue-poc/src/vue-poc/models";
declare variable $target:="C:/Users/andy/git/vue-poc/src/vue-poc/models.gen.xqm";
let $config:='import module namespace cfg = "quodatum:media.image.configure" at "config.xqm";'
let $src:=bf:module(bf:entities($efolder),$config)
return (
file:write-text($target,$src)
,db:output("generated " || $target)
)