xqlint string constructor

This commit is contained in:
Andy Bunce 2017-11-02 20:55:17 +00:00
parent 0b87640f57
commit 2cdc2c50c1
13 changed files with 11753 additions and 11396 deletions

View file

@ -1,5 +1,5 @@
WARNING=DO NOT MODIFY THIS FILE IF YOU DON'T UNDERSTAND
defaultDestination=C\:/Users/andy/Desktop/basex.865/webapp
defaultDestination=C\:/Users/andy/Desktop/basex.9b/webapp
defaultVariables=
eclipse.preferences.version=1
includeTeamPrivateFiles=false

View file

@ -42,7 +42,7 @@
<description>Scalable Vector Graphics namespace
</description>
</namespace>
<namespace uri="http://docbook.org/ns/docbook" prefix="d">
<description>Docbook
</description>
@ -52,28 +52,33 @@
<description>Math ML
</description>
</namespace>
<namespace uri="http://www.vraweb.org/vracore4.htm" prefix="vra">
<description>Visual Resources Association
</description>
</namespace>
<namespace uri="http://purl.oclc.org/dsdl/schematron" prefix="sch">
<description>Schematron
</description>
</namespace>
<namespace uri="http://www.opengis.net/kml/2.2" prefix="kml">
<description>Geo
</description>
</namespace>
<namespace uri="http://www.w3.org/ns/xproc" prefix="xproc">
<description>XProc
</description>
</namespace>
<namespace uri="http://www.w3.org/ns/xproc-step" prefix="c">
<description>XProc step
</description>
</namespace>
<description>Geo
</description>
</namespace>
<namespace uri="http://www.w3.org/ns/xproc" prefix="xproc">
<description>XProc
</description>
</namespace>
<namespace uri="http://www.w3.org/ns/xproc-step" prefix="c">
<description>XProc step
</description>
</namespace>
<namespace uri="http://www.w3.org/ns/xproc-step" prefix="pkg">
<description>EXpath packaging
</description>
</namespace>
</namespaces>

View file

@ -58,7 +58,7 @@ as element(json)
{for $f in $items/*
order by $f/@name/lower-case(.)
return <_ type="object">
{vue-api:details($f,"folder")}
{vue-api:details($f=>trace("foo"),"folder")}
</_>
}
</items>
@ -73,7 +73,7 @@ as element(*)*
,<modified>{$f/@last-modified/string()}</modified>
,<size type="number">{$f/@size/string()}</size>
,<selected type="boolean">false</selected>
,<mime>unknown</mime>
,<mime>{$f/@content-type/string()}</mime>
};

View file

@ -7,7 +7,12 @@
<v-toolbar dense >
<v-btn icon :to="{query: { url: '/' }}">
<v-icon >{{icon}}</v-icon>
</v-btn>
</v-btn>
<v-btn icon @click="load()">
<v-icon>refresh</v-icon>
</v-btn>
<v-toolbar-title>
<v-breadcrumbs>
<v-breadcrumbs-item v-for="item in crumbs" :key="item.path"
@ -34,12 +39,15 @@
</v-btn>
</v-toolbar-items>
<v-toolbar-items v-if="selection.length">
<v-btn icon v-for="b in selopts" :key="b.icon" @click="action(b)">
<v-icon v-text="b.icon"></v-icon>
</v-btn>
</v-toolbar-items>
<v-btn icon v-for="b in selopts" :key="b.icon" @click="action(b)">
<v-icon v-text="b.icon"></v-icon>
</v-btn>
</v-toolbar-items>
<v-menu offset-y v-if="selection.length">
<v-btn icon slot="activator">
<v-icon>more_vert</v-icon>
@ -57,7 +65,8 @@
</v-list-tile>
</v-list>
</v-menu>
</v-toolbar>
<v-layout v-if="!busy">
@ -73,7 +82,10 @@
</v-list-tile-avatar>
<v-list-tile-content >
<v-list-tile-title>{{ item.name }}</v-list-tile-title>
<v-list-tile-sub-title>modified: {{ item.modified | formatDate}} size: {{ item.size | readablizeBytes}}</v-list-tile-sub-title>
<v-list-tile-sub-title>modified: {{ item.modified | formatDate}}
size: {{ item.size | readablizeBytes}}
mimetype: {{ item.mime}}
</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action>
<v-btn icon @click.stop="info(item)">
@ -92,7 +104,10 @@
</v-list-tile-avatar>
<v-list-tile-content @click="file(item.name)">
<v-list-tile-title >{{ item.name }}</v-list-tile-title>
<v-list-tile-sub-title>modified: {{item.modified | formatDate}} size: {{item.size|readablizeBytes }}</v-list-tile-sub-title>
<v-list-tile-sub-title>modified: {{item.modified | formatDate}},
size: {{item.size|readablizeBytes }},
mimetype: {{ item.mime}}
</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action>
<v-btn icon ripple @click.stop="info(item)">

View file

@ -40,31 +40,31 @@
<v-card class="grey lighten-2 pt-1">
<v-card-media :src="src(image)" @dblclick="go(image)"
height="80px" contain>
<v-layout align-baseline align-end fill-height>
<v-flex >
<v-icon class="green--text">check_circle</v-icon>
</v-flex>
</v-layout>
</v-card-media>
<v-card-actions >
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
<v-btn icon small v-if="image.geo">
<v-icon>place</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-tooltip bottom >
<v-btn icon small slot="activator">
<v-icon>info</v-icon>
</v-btn>
<span v-text="image.path"></span>
</v-tooltip>
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
<v-btn icon small v-if="image.geo">
<v-icon>place</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-btn icon small @click="selected(image)">
<v-icon>share</v-icon>
</v-btn>
</v-card-actions>
<div style="position:absolute;right:0;top:0" >
<v-icon class="white primary--text">check_circle</v-icon>
</div
</v-card>
</v-flex>
</v-layout>
@ -85,7 +85,7 @@
label="Keyword" item-value="text" item-text="text"
autocomplete clearable
>
<template slot="item" scope="data">
<template slot="item" slot-scope="data">
<v-list-tile-content>
<v-list-tile-title v-html="data.item.text"></v-list-tile-title>
<v-list-tile-sub-title v-html="data.item.count"></v-list-tile-sub-title>
@ -112,7 +112,7 @@
></v-text-field>
<v-date-picker v-model="query.from" scrollable actions>
<template scope="{ save, cancel }">
<template slot-scope="{ save, cancel }">
<v-card-actions>
<v-btn flat color="primary" @click="cancel()">Cancel</v-btn>
<v-btn flat color="primary" @click="save()">Save</v-btn>
@ -142,7 +142,7 @@
></v-text-field>
<v-date-picker v-model="query.until" scrollable actions>
<template scope="{ save, cancel }">
<template slot-scope="{ save, cancel }">
<v-card-actions>
<v-btn flat color="primary" @click="cancel()">Cancel</v-btn>
<v-btn flat color="primary" @click="save()">Save</v-btn>

View file

@ -142,15 +142,14 @@ as element(*)*
let $id:=$vue-api:entity?access?id($image)
let $path:=$vue-api:entity?access?path($image)
let $name:=$vue-api:entity?access?name($image)
let $geo:=$vue-api:entity?access?geo($image)
let $keywords:=$vue-api:entity?access?keywords($image)
let $geo:=$vue-api:entity?json?geo($image)
let $keywords:=$vue-api:entity?json?keywords($image)
let $thumb:= $cfg:THUMBDIR || $path
let $thumb:=if(file:exists($thumb)) then $thumb else $cfg:THUMBDIR || "missing.jpg"
return ( <id>{$id}</id>
,<name>{$name}</name>
,<path>{$path}</path>
,<geo>{$geo}</geo>
,<keywords>{$keywords}</keywords>
,$geo,$keywords
,<data>{fetch:binary($thumb)}</data>
,<mime>{fetch:content-type($thumb)}</mime>)
};

View file

@ -17,18 +17,19 @@
</v-card-actions>
</v-card>
<v-tabs-bar class="grey lighten-3">
<v-tabs-bar class="grey lighten-3" dense>
<v-tabs-item
v-for="i in 13"
:key="i"
:href="'#mobile-tabs-6-' + i"
>
<v-chip label close>
<v-icon>favorite</v-icon>
Item {{ i }} more
</v-chip>
<span>Item {{ i }} more</span>
<v-spacer></v-spacer>
<v-btn small icon class="grey">
<v-icon>close</v-icon>
</v-btn>
</v-tabs-item>
<v-tabs-slider class="primary"></v-tabs-slider>
</v-tabs-bar>

View file

@ -35,26 +35,31 @@ as element(c:directory)
declare function ufile:xmldb($url as xs:string)
as element(c:directory)
{
<c:directory name="" xml:base="xmldb:/" last-modified="2017-07-01T13:39:38.98691Z" size="4096">{
<c:directory name="" xml:base="xmldb:/" last-modified="?" size="?">{
if($url="/") then
db:list()!
<c:directory name="{db:property(.,'name')}"
<c:directory name="{db:property(.,'name')}" content-type="text/directory"
last-modified="{db:property(.,'timestamp')}"
size="{db:property(.,'size')}"/>
else
let $db:=substring-before(substring($url,2),"/")
let $path:=substring($url,2+string-length($db))
let $map:=ufile:collection-next($url)
for $name in map:keys($map)
(: db:list-details($db as xs:string, $path as xs:string) as element(resource)* :)
return if($map($name)="file") then
<c:file name="{$name}" size="0"/>
let $x:=db:list-details($db , $path || $name)=>trace("detail")
return <c:file name="{$name}" size="0"/>
else
<c:directory name="{$name}" size="0"/>
<c:directory name="{$name}" content-type="text/directory" size="0"/>
}</c:directory>
};
(:~ return map of next level database contents
:@param $url a database base collection e.g /dbname/fred/
:@result keys are names, values are "file" or "directory"
:)
declare function ufile:collection-next($url as xs:string)
as map(*)

View file

@ -1,5 +1,5 @@
(:~
: Update `generated/models.xqm` from files in `data/models`
: Genrate html xquery documntation
: using file:///C:/Users/andy/workspace/app-doc/src/doc/data/doc/models
: $efolder:="file:///C:/Users/andy/workspace/app-doc/src/doc/data/doc/models"
: $target:="file:///C:/Users/andy/workspace/app-doc/src/doc/generated/models.xqm"
@ -40,13 +40,14 @@ declare function xqd:gendoc(
$params as map(*)
)
{
let $target:=file:path-to-native($target)
let $ip:=$f/@name/resolve-uri(.,base-uri(.))
let $op:=$f/ancestor-or-self::*/@name=>tail()=>string-join("/")
let $dest:=file:resolve-path($op,$target)
let $_:= if(file:is-dir($target)) then () else file:create-dir($target)
let $target:= file:path-to-native($target)
let $ip:= $f/@name/resolve-uri(.,base-uri(.))
let $op:= $f/ancestor-or-self::*/@name=>tail()=>string-join("/")
let $dest:= file:resolve-path($op,$target)
let $xqdoc:=xqd:xqdoc($ip,map{})
let $xq:=fetch:text($ip)
let $xqdoc:= xqd:xqdoc($ip,map{})
let $xq:= fetch:text($ip)
let $params:=map:merge((map{
"source":$xq,
"filename":$f/@name/string(),

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
// generated 2017-10-22T22:09:51.205+01:00
// generated 2017-10-26T21:35:41.214+01:00
Vue.component('qd-confirm',{template:`
<v-dialog v-model="value">
<v-card>
@ -516,7 +516,12 @@ Vue.filter('round', function(value, decimals) {
<v-toolbar dense="">
<v-btn icon="" :to="{query: { url: '/' }}">
<v-icon>{{icon}}</v-icon>
</v-btn>
</v-btn>
<v-btn icon="" @click="load()">
<v-icon>refresh</v-icon>
</v-btn>
<v-toolbar-title>
<v-breadcrumbs>
<v-breadcrumbs-item v-for="item in crumbs" :key="item.path" :to="{ query: { url: item.path }}" :exact="true">
@ -540,12 +545,15 @@ Vue.filter('round', function(value, decimals) {
</v-btn>
</v-toolbar-items>
<v-toolbar-items v-if="selection.length">
<v-btn icon="" v-for="b in selopts" :key="b.icon" @click="action(b)">
<v-icon v-text="b.icon"></v-icon>
</v-btn>
</v-toolbar-items>
<v-btn icon="" v-for="b in selopts" :key="b.icon" @click="action(b)">
<v-icon v-text="b.icon"></v-icon>
</v-btn>
</v-toolbar-items>
<v-menu offset-y="" v-if="selection.length">
<v-btn icon="" slot="activator">
<v-icon>more_vert</v-icon>
@ -563,7 +571,8 @@ Vue.filter('round', function(value, decimals) {
</v-list-tile>
</v-list>
</v-menu>
</v-toolbar>
<v-layout v-if="!busy">
@ -578,7 +587,10 @@ Vue.filter('round', function(value, decimals) {
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>{{ item.name }}</v-list-tile-title>
<v-list-tile-sub-title>modified: {{ item.modified | formatDate}} size: {{ item.size | readablizeBytes}}</v-list-tile-sub-title>
<v-list-tile-sub-title>modified: {{ item.modified | formatDate}}
size: {{ item.size | readablizeBytes}}
mimetype: {{ item.mime}}
</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action>
<v-btn icon="" @click.stop="info(item)">
@ -597,7 +609,10 @@ Vue.filter('round', function(value, decimals) {
</v-list-tile-avatar>
<v-list-tile-content @click="file(item.name)">
<v-list-tile-title>{{ item.name }}</v-list-tile-title>
<v-list-tile-sub-title>modified: {{item.modified | formatDate}} size: {{item.size|readablizeBytes }}</v-list-tile-sub-title>
<v-list-tile-sub-title>modified: {{item.modified | formatDate}},
size: {{item.size|readablizeBytes }},
mimetype: {{ item.mime}}
</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action>
<v-btn icon="" ripple="" @click.stop="info(item)">
@ -1526,33 +1541,32 @@ Entities
<v-flex height="80px" xs2="" v-for="image in images" :key="image.name">
<v-card class="grey lighten-2 pt-1">
<v-card-media :src="src(image)" @dblclick="go(image)" height="80px" contain="">
<v-layout align-baseline="" align-end="" fill-height="">
<v-flex>
<v-icon class="green--text">check_circle</v-icon>
</v-flex>
</v-layout>
</v-card-media>
<v-card-actions>
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
<v-btn icon="" small="" v-if="image.geo">
<v-icon>place</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-tooltip bottom="">
<v-btn icon="" small="" slot="activator">
<v-icon>info</v-icon>
</v-btn>
<span v-text="image.path"></span>
</v-tooltip>
<span v-if="image.keywords >0 ">#{{image.keywords}}</span>
<v-btn icon="" small="" v-if="image.geo">
<v-icon>place</v-icon>
</v-btn>
<v-spacer></v-spacer>
<v-btn icon="" small="" @click="selected(image)">
<v-icon>share</v-icon>
</v-btn>
</v-card-actions>
</v-card>
</v-flex>
<div style="position:absolute;right:0;top:0">
<v-icon class="white primary--text">check_circle</v-icon>
</div>
</v-card></v-flex>
</v-layout>
</v-container>
@ -1566,7 +1580,7 @@ Entities
<v-card-text>
<v-select v-bind:items="keywords" v-model="query.keyword" label="Keyword" item-value="text" item-text="text" autocomplete="" clearable="">
<template slot="item" scope="data">
<template slot="item" slot-scope="data">
<v-list-tile-content>
<v-list-tile-title v-html="data.item.text"></v-list-tile-title>
<v-list-tile-sub-title v-html="data.item.count"></v-list-tile-sub-title>
@ -1578,7 +1592,7 @@ Entities
<v-text-field slot="activator" label="Earliest date" v-model="query.from" prepend-icon="event" readonly=""></v-text-field>
<v-date-picker v-model="query.from" scrollable="" actions="">
<template scope="{ save, cancel }">
<template slot-scope="{ save, cancel }">
<v-card-actions>
<v-btn flat="" color="primary" @click="cancel()">Cancel</v-btn>
<v-btn flat="" color="primary" @click="save()">Save</v-btn>
@ -1593,7 +1607,7 @@ Entities
<v-text-field slot="activator" label="Latest date" v-model="query.until" prepend-icon="event" readonly=""></v-text-field>
<v-date-picker v-model="query.until" scrollable="" actions="">
<template scope="{ save, cancel }">
<template slot-scope="{ save, cancel }">
<v-card-actions>
<v-btn flat="" color="primary" @click="cancel()">Cancel</v-btn>
<v-btn flat="" color="primary" @click="save()">Save</v-btn>
@ -2835,12 +2849,13 @@ svg
<v-tabs-bar class="grey lighten-3">
<v-tabs-item v-for="i in 13" :key="i" :href="'#mobile-tabs-6-' + i">
<v-chip label="" close="">
<v-icon>favorite</v-icon>
Item {{ i }} more
</v-chip>
<span>Item {{ i }} more</span>
<v-spacer></v-spacer>
<v-btn small="" icon="" class="grey">
<v-icon>close</v-icon>
</v-btn>
</v-tabs-item>
<v-tabs-slider class="primary"></v-tabs-slider>
</v-tabs-bar>
@ -3587,11 +3602,12 @@ router.beforeEach((to, from, next) => {
<v-icon>star_border</v-icon>
</v-btn>
<v-dialog v-model="frmFav">
<v-card>
<v-card>
<v-toolbar class="amber">
<v-card-title>
Bookmark
Bookmark this page
</v-card-title>
</v-toolbar>
<v-card-text>
<h6>{{$route.meta.title}}</h6>
<v-select v-model="tags" label="tags" chips="" tags="" :items="taglist"></v-select>
@ -3603,9 +3619,9 @@ router.beforeEach((to, from, next) => {
</v-card>
</v-dialog>
<v-spacer></v-spacer>
<v-text-field prepend-icon="search" label="Search..." v-model="q" hide-details="" single-line="" dark="" @keyup.enter="search"></v-text-field>
<v-spacer></v-spacer>
<v-text-field prepend-icon="search" label="Search..." v-model="q" hide-details="" single-line="" dark="" @keyup.enter="search"></v-text-field>
<v-menu left="" transition="v-fade-transition">
<v-btn dark="" icon="" slot="activator">
{{$auth.user}}

View file

@ -37,8 +37,8 @@
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/2.7.0/vue-router.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.16.1/axios.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qs/6.4.0/qs.js"></script>
<script src="https://unpkg.com/vuetify@0.16.9/dist/vuetify.min.js"></script>

View file

@ -51,11 +51,12 @@
<v-icon>star_border</v-icon>
</v-btn>
<v-dialog v-model="frmFav">
<v-card>
<v-card>
<v-toolbar class="amber">
<v-card-title>
Bookmark
Bookmark this page
</v-card-title>
</v-toolbar>
<v-card-text>
<h6>{{$route.meta.title}}</h6>
<v-select
@ -73,10 +74,10 @@
</v-card>
</v-dialog>
<v-spacer></v-spacer>
<v-spacer></v-spacer>
<v-text-field prepend-icon="search" label="Search..." v-model="q"
<v-text-field prepend-icon="search" label="Search..." v-model="q"
hide-details single-line dark @keyup.enter="search"></v-text-field>
<v-spacer></v-spacer>
<v-menu left transition="v-fade-transition">
<v-btn dark icon slot="activator">
{{$auth.user}}