From ab8bfccecbe91541ae2674d2cb107fad6fb2844f Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 24 Jan 2019 10:47:38 +0000 Subject: [PATCH] vuetify 1.4.3 --- README.md | 3 +- src/vue-poc/app.vue | 1 + src/vue-poc/app.xqm | 15 +- src/vue-poc/components/EditTabs.js | 15 +- src/vue-poc/components/aceextras.js | 4 +- src/vue-poc/components/mimetypes.js | 55 +- src/vue-poc/components/qd-mimelist.vue | 90 ++ src/vue-poc/components/qd-tablist.vue | 15 +- src/vue-poc/core.js | 3 +- src/vue-poc/features/edit/edit.vue | 2 +- src/vue-poc/features/edit/tabs.vue | 116 +- src/vue-poc/features/job/jobs.xml | 3 + src/vue-poc/features/model/documentation.vue | 3 +- src/vue-poc/features/model/entity.vue | 14 +- src/vue-poc/features/model/namespace.vue | 8 +- src/vue-poc/features/model/xqdocs.xml | 7 + src/vue-poc/features/model/xqdocs.xqm | 37 + src/vue-poc/features/scratch.vue | 15 +- src/vue-poc/features/server/dicetest.vue | 125 ++ src/vue-poc/features/server/ping.vue | 4 +- src/vue-poc/lib/vue-compile/html5parse.xqm | 5 +- src/vue-poc/models.gen.xqm | 132 +- src/vue-poc/models/entities/basexjob.xml | 55 + src/vue-poc/models/entities/service.xml | 27 + src/vue-poc/models/entities/xqdoc.xml | 6 +- src/vue-poc/package.json | 9 +- src/vue-poc/router.js | 1 + src/vue-poc/static/app-gen.js | 1276 ++++++++++-------- src/vue-poc/static/app.html | 6 +- 29 files changed, 1384 insertions(+), 668 deletions(-) create mode 100644 src/vue-poc/components/qd-mimelist.vue create mode 100644 src/vue-poc/features/job/jobs.xml create mode 100644 src/vue-poc/features/model/xqdocs.xml create mode 100644 src/vue-poc/features/model/xqdocs.xqm create mode 100644 src/vue-poc/features/server/dicetest.vue create mode 100644 src/vue-poc/models/entities/basexjob.xml create mode 100644 src/vue-poc/models/entities/service.xml diff --git a/README.md b/README.md index a3407d4..e8a5b4c 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,5 @@ Example usage deep:true } -``` \ No newline at end of file +``` +## \ No newline at end of file diff --git a/src/vue-poc/app.vue b/src/vue-poc/app.vue index 74fd7df..5d55bdc 100644 --- a/src/vue-poc/app.vue +++ b/src/vue-poc/app.vue @@ -169,6 +169,7 @@ {href: '/server/websocket',text: 'Web socket',icon: 'swap_calls'}, {href: '/server/upload',text: 'Upload to server',icon: 'file_upload'}, {href: '/server/ping',text: 'Ping',icon: 'update'}, + {href: '/server/dicetest',text: 'Dice performance',icon: 'update'}, {href: '/server/settings',text: 'Server settings',icon: 'settings_applications'} ]}, { diff --git a/src/vue-poc/app.xqm b/src/vue-poc/app.xqm index 49863f7..5907a98 100644 --- a/src/vue-poc/app.xqm +++ b/src/vue-poc/app.xqm @@ -45,14 +45,21 @@ function vue-poc:file( (:~ - :web serve $file if it exists otherwise serve $vue-poc:index + : Returns a file. + : @param $file file or unknown path + : @return rest binary data :) -declare function vue-poc:get-file($file) +declare function vue-poc:get-file( $file as xs:string) +as item()+ { let $path := resolve-uri( 'static/' || $file,static-base-uri()) - let $path:=if(file:exists($path))then $path else ($vue-poc:index,prof:dump($path," Not found")) + let $path:= if(file:exists($path))then $path else ($vue-poc:index,prof:dump($path," Not found")) + let $content-type:= vue-poc:content-type($path) return ( - web:response-header(map { 'media-type': vue-poc:content-type($path) }), + web:response-header( + map { 'media-type': $content-type }, + map { 'Cache-Control': 'max-age=3600,public' } + ), file:read-binary($path) ) }; diff --git a/src/vue-poc/components/EditTabs.js b/src/vue-poc/components/EditTabs.js index 822a9a3..c927941 100644 --- a/src/vue-poc/components/EditTabs.js +++ b/src/vue-poc/components/EditTabs.js @@ -1,10 +1,11 @@ //Manage array of text sources used for:edit tabs // item{ -// name: -// contentType: +// name: +// contentType: "text/xml", +// mode: "xml", // text: // id: ids have the form "Tn" -// url: +// url: path to save to // requires: Settings,HTTP // const GEditTabs={ @@ -76,12 +77,14 @@ const GEditTabs={ }); }, - sorted(){ /* sorted indices */ + sorted(q){ /* return sorted and filtered array of tab indices */ var len=this.items.length var indices = new Array(len); for (var i = 0; i < len; ++i) indices[i] = i; - var list=this.items - return indices.sort((a,b) =>list[a].name.localeCompare(list[b].name)) + var list=this.items; + indices=indices.filter(a=>(!q) || list[a].name.toLowerCase().includes(q.toLowerCase())) + var i= indices.sort((a,b) =>list[a].name.localeCompare(list[b].name)) + return i } }, created(){ diff --git a/src/vue-poc/components/aceextras.js b/src/vue-poc/components/aceextras.js index 78e2b88..52965e0 100644 --- a/src/vue-poc/components/aceextras.js +++ b/src/vue-poc/components/aceextras.js @@ -42,11 +42,11 @@ const AceExtras={ snippets:[ { name: "test", - content: "something", + content: "this is a test snippet", tabTrigger: "test:" }, { - name: "test2", + name: "sniptest2", content: "some2", tabTrigger: "he" } diff --git a/src/vue-poc/components/mimetypes.js b/src/vue-poc/components/mimetypes.js index 8afe3ab..bb50fa6 100644 --- a/src/vue-poc/components/mimetypes.js +++ b/src/vue-poc/components/mimetypes.js @@ -1,32 +1,49 @@ // Mimetype info // +// const MimeTypes=new function(){ - this.toMode=[ - {name: "text/plain", mode: "text"}, - {name: "text/xml", mode: "xml"}, - {name: "application/xml", mode:"xml"}, - {name: "application/xquery", mode:"xquery"}, - {name: "text/ecmascript", mode:"javascript"}, - {name: "application/sparql-query", mode:"sparql"}, - {name: "text/html", mode:"html"}, - {name: "text/turtle", mode:"turtle"}, - {name: "text/css", mode:"css"}, - {name: "image/svg+xml", mode:"svg"} - ], - this.formatdom= t=>html_beautify(t, { indent_size: 3 ,indent_inner_html:true}); - this.formatjs= t=>js_beautify(t, { indent_size: 2 }); + var formatdom= t=>html_beautify(t, { indent_size: 3 ,indent_inner_html:true}); + var formatjs= t=>js_beautify(t, { indent_size: 2 }); + var formatcss= t=>css_beautify(t, { indent_size: 2 }); + + this.contentType={ + "text/plain":{ mode: "text"}, + "text/xml":{ mode: "xml"}, + "application/xml":{ mode:"xml"}, + "application/xquery":{ mode:"xquery"}, + "text/ecmascript":{ mode:"javascript"}, + "application/sparql-query": {mode:"sparql"}, + "text/html":{ mode:"html"}, + "text/turtle":{ mode:"turtle"}, + "text/css": {mode:"css"}, + "image/svg+xml":{ mode:"svg"} + }; + this.mode={ - "text": {}, + "text": { + icon: "library_books" + }, "javascript": { - "format":this.formatjs + "format": formatjs }, "xml": { - "format":this.formatdom + "format": formatdom }, - "css": {} + "html": { + "format": formatdom + }, + "css": { + "format": formatcss + } }; - + this.list=function(){ + var that=this + var h= Object.keys(this.contentType).map( + function(k){ return {name: k, mode: that.contentType[k].mode}} + ) + return h + } this.install=function(Vue){ Object.defineProperty(Vue.prototype, '$MimeTypes', { get () { return MimeTypes } diff --git a/src/vue-poc/components/qd-mimelist.vue b/src/vue-poc/components/qd-mimelist.vue new file mode 100644 index 0000000..820d84d --- /dev/null +++ b/src/vue-poc/components/qd-mimelist.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/vue-poc/components/qd-tablist.vue b/src/vue-poc/components/qd-tablist.vue index 448a086..4fe25e7 100644 --- a/src/vue-poc/components/qd-tablist.vue +++ b/src/vue-poc/components/qd-tablist.vue @@ -1,13 +1,12 @@ + + + clearable> - + {{ props.item.iconclass }} {{ props.item.name }} - + {{ props.item.description }} diff --git a/src/vue-poc/features/model/namespace.vue b/src/vue-poc/features/model/namespace.vue index b4f6e57..b0933e2 100644 --- a/src/vue-poc/features/model/namespace.vue +++ b/src/vue-poc/features/model/namespace.vue @@ -33,6 +33,7 @@ {{ props.item.prefix }} + + + diff --git a/src/vue-poc/features/model/xqdocs.xml b/src/vue-poc/features/model/xqdocs.xml new file mode 100644 index 0000000..6e510ba --- /dev/null +++ b/src/vue-poc/features/model/xqdocs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/vue-poc/features/model/xqdocs.xqm b/src/vue-poc/features/model/xqdocs.xqm new file mode 100644 index 0000000..129ffe9 --- /dev/null +++ b/src/vue-poc/features/model/xqdocs.xqm @@ -0,0 +1,37 @@ +module namespace j = 'quodatum.test.xqdoc'; + + +(:~ + : job list + :) +declare +%rest:GET %rest:path("/vue-poc/api/xqdoc") +%output:method("json") +function j:list() +as element(json) +{ + let $jlist:=(279,280) + return + {for $j in $jlist + return <_ type="object"> + { $j } + todo + + } +}; + +(:~ + : job info + :) +declare +%rest:GET %rest:path("/vue-poc/api/xqdoc/{$job}") +%output:method("json") +function j:job($job) +as element(json) +{ + let $j:=$job + return + uuu + +}; + diff --git a/src/vue-poc/features/scratch.vue b/src/vue-poc/features/scratch.vue index d063b1b..4a314ad 100644 --- a/src/vue-poc/features/scratch.vue +++ b/src/vue-poc/features/scratch.vue @@ -4,13 +4,14 @@ Tab index {{ curIndex }} {{ active.mode }} - {{ active.name }}, id: {{ active.id }} + {{ active.mode }} + {{ active.name }}, id: {{ active.id }} Add set - tab list + tab list + :mode="item.mode" :wrap="wrap" :settings="aceSettings" + v-on:annotation="annotation" + :completer="$aceExtras.basexCompleter" :snippets="$aceExtras.snippets" + > @@ -82,6 +86,11 @@ setItem(v){ this.curIndex=v; }, + setmime(mime){ + this.$set(this.active, 'contentType', mime.name) + this.$set(this.active, 'mode', mime.mode) + //alert(mime.contentType+" "+mime.mode) + }, annotation(counts){ this.annotations=counts //console.log("annotations: ",counts) diff --git a/src/vue-poc/features/server/dicetest.vue b/src/vue-poc/features/server/dicetest.vue new file mode 100644 index 0000000..8c3099c --- /dev/null +++ b/src/vue-poc/features/server/dicetest.vue @@ -0,0 +1,125 @@ + + + + diff --git a/src/vue-poc/features/server/ping.vue b/src/vue-poc/features/server/ping.vue index 7a74ee4..25fe6c0 100644 --- a/src/vue-poc/features/server/ping.vue +++ b/src/vue-poc/features/server/ping.vue @@ -3,13 +3,13 @@ - Simple performance measure + Simple response counter Reset

Read or increment a database value. This measures round trip times browser-database-browser.

-

Counter: {{counter}}

+

Value: {{counter}}

diff --git a/src/vue-poc/lib/vue-compile/html5parse.xqm b/src/vue-poc/lib/vue-compile/html5parse.xqm index 9f208f5..f3b9fb9 100644 --- a/src/vue-poc/lib/vue-compile/html5parse.xqm +++ b/src/vue-poc/lib/vue-compile/html5parse.xqm @@ -8,8 +8,11 @@ declare namespace Element="java:ch.digitalfondue.jfiveparse.Element"; declare namespace Node="java:ch.digitalfondue.jfiveparse.Node"; declare namespace Parser="java:ch.digitalfondue.jfiveparse.Parser"; declare namespace Selector="java:ch.digitalfondue.jfiveparse.Selector"; +declare namespace Option="java:ch.digitalfondue.jfiveparse.Option"; +declare namespace EnumSet="java:java.util.EnumSet"; declare namespace list="java:java.util.ArrayList"; +declare variable $html5:opt:=EnumSet:of(Option:valueOf("HIDE_EMPTY_ATTRIBUTE_VALUE")); (:~ : parse html text string into jfiveparse.Document :) @@ -53,7 +56,7 @@ as xs:string declare function html5:getInnerHTML($node) as xs:string { - Node:getInnerHTML($node) + Node:getInnerHTML($node,$html5:opt) }; (:~ : @return matcher for given element and attribute with value diff --git a/src/vue-poc/models.gen.xqm b/src/vue-poc/models.gen.xqm index 40a7345..e004eca 100644 --- a/src/vue-poc/models.gen.xqm +++ b/src/vue-poc/models.gen.xqm @@ -1,11 +1,11 @@ (: entity access maps - : auto generated from xml files in entities folder at: 2018-11-30T09:48:45.409Z + : auto generated from xml files in entities folder at: 2019-01-23T21:27:22.427Z :) module namespace entity = 'quodatum.models.generated'; -import module namespace cfg = "quodatum:media.image.configure" at "config.xqm";declare namespace ent='https://github.com/Quodatum/app-doc/entity'; +import module namespace cfg = "quodatum:media.image.configure" at "config.xqm";declare namespace xqdoc='http://www.xqdoc.org/1.0'; +declare namespace ent='https://github.com/Quodatum/app-doc/entity'; declare namespace h='urn:quodatum:vue-poc.history'; -declare namespace xqdoc='http://www.xqdoc.org/1.0'; declare namespace c='http://www.w3.org/ns/xproc-step'; declare variable $entity:list:=map { @@ -63,6 +63,80 @@ hof:top-k-by(admin:logs(), string#1, 2) "views": map{ + } + }, + "basexjob": map{ + "name": "basexjob", + "description": "A BaseX job", + "access": map{ + "duration": function($_ as element()) as xs:string {$_/@duration }, + "id": function($_ as element()) as xs:string {$_/@id }, + "interval": function($_ as element()) as xs:string {$_/@interval }, + "reads": function($_ as element()) as xs:string {$_/@reads }, + "registered": function($_ as element()) as xs:string {$_/@time }, + "start": function($_ as element()) as xs:string {$_/@start }, + "state": function($_ as element()) as xs:string {$_/@state }, + "text": function($_ as element()) as xs:string {$_/. }, + "type": function($_ as element()) as xs:string {$_/@type }, + "user": function($_ as element()) as xs:string {$_/@user }, + "writes": function($_ as element()) as xs:string {$_/@writes } }, + + "filter": function($item,$q) as xs:boolean{ + some $e in ( ) satisfies + fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive') + }, + "json": map{ + "duration": function($_ as element()) as element(duration)? { + (: xs:string :) + fn:data($_/@duration)!element duration { .} + }, + "id": function($_ as element()) as element(id)? { + (: xs:string :) + fn:data($_/@id)!element id { .} + }, + "interval": function($_ as element()) as element(interval)? { + (: xs:string :) + fn:data($_/@interval)!element interval { .} + }, + "reads": function($_ as element()) as element(reads)? { + (: xs:string :) + fn:data($_/@reads)!element reads { .} + }, + "registered": function($_ as element()) as element(registered)? { + (: xs:string :) + fn:data($_/@time)!element registered { .} + }, + "start": function($_ as element()) as element(start)? { + (: xs:string :) + fn:data($_/@start)!element start { .} + }, + "state": function($_ as element()) as element(state)? { + (: xs:string :) + fn:data($_/@state)!element state { .} + }, + "text": function($_ as element()) as element(text)? { + (: xs:string :) + fn:data($_/.)!element text { .} + }, + "type": function($_ as element()) as element(type)? { + (: xs:string :) + fn:data($_/@type)!element type { .} + }, + "user": function($_ as element()) as element(user)? { + (: xs:string :) + fn:data($_/@user)!element user { .} + }, + "writes": function($_ as element()) as element(writes)? { + (: xs:string :) + fn:data($_/@writes)!element writes { .} + } }, + + "data": function() as element(job)* + { jobs:list()[. != jobs:current()] !jobs:list-details(.)=>reverse() + }, + + "views": map{ + 'filter': 'name description' } }, "entity.field": map{ @@ -425,6 +499,49 @@ hof:top-k-by(admin:logs(), string#1, 2) "views": map{ + } + }, + "service": map{ + "name": "service", + "description": "basex services ", + "access": map{ + "base-uri": function($_ as element()) as xs:string {$_/@base-uri }, + "id": function($_ as element()) as xs:string {$_/@id }, + "interval": function($_ as element()) as xs:string {$_/@interval }, + "query": function($_ as element()) as xs:string {$_/. }, + "running": function($_ as element()) as xs:boolean {$_/jobs:list()=@id } }, + + "filter": function($item,$q) as xs:boolean{ + some $e in ( ) satisfies + fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive') + }, + "json": map{ + "base-uri": function($_ as element()) as element(base-uri)? { + (: xs:string :) + fn:data($_/@base-uri)!element base-uri { .} + }, + "id": function($_ as element()) as element(id)? { + (: xs:string :) + fn:data($_/@id)!element id { .} + }, + "interval": function($_ as element()) as element(interval)? { + (: xs:string :) + fn:data($_/@interval)!element interval { .} + }, + "query": function($_ as element()) as element(query)? { + (: xs:string :) + fn:data($_/.)!element query { .} + }, + "running": function($_ as element()) as element(running)? { + (: xs:boolean :) + fn:data($_/jobs:list()=@id)!element running { attribute type {'boolean'}, .} + } }, + + "data": function() as element(job)* + { jobs:services() }, + + "views": map{ + } }, "task": map{ @@ -598,7 +715,8 @@ hof:top-k-by(admin:logs(), string#1, 2) "name": "xqdoc", "description": "XQuery documentation set ", "access": map{ - "root": function($_ as element()) as xs:string {$_/@root }, + "id": function($_ as element()) as xs:string {$_/@id }, + "root": function($_ as element()) as xs:string {$_/"file:///C:/tmp/xqdoc/" }, "time": function($_ as element()) as xs:string {$_/@time } }, "filter": function($item,$q) as xs:boolean{ @@ -606,9 +724,13 @@ hof:top-k-by(admin:logs(), string#1, 2) fn:contains($e,$q, 'http://www.w3.org/2005/xpath-functions/collation/html-ascii-case-insensitive') }, "json": map{ + "id": function($_ as element()) as element(id)? { + (: xs:string :) + fn:data($_/@id)!element id { .} + }, "root": function($_ as element()) as element(root)? { (: xs:string :) - fn:data($_/@root)!element root { .} + fn:data($_/"file:///C:/tmp/xqdoc/")!element root { .} }, "time": function($_ as element()) as element(time)? { (: xs:string :) diff --git a/src/vue-poc/models/entities/basexjob.xml b/src/vue-poc/models/entities/basexjob.xml new file mode 100644 index 0000000..a439227 --- /dev/null +++ b/src/vue-poc/models/entities/basexjob.xml @@ -0,0 +1,55 @@ + + A BaseX job + + + + unique id + @id + + + state + @state + + + type of job + @type + + + user + @user + + + registered time + @time + + + start + @start + + + start + @duration + + + interval + @interval + + + text + . + + + reads + @reads + + + writes + @writes + + + + name description + + jobs:list()[. != jobs:current()] !jobs:list-details(.)=>reverse() + + \ No newline at end of file diff --git a/src/vue-poc/models/entities/service.xml b/src/vue-poc/models/entities/service.xml new file mode 100644 index 0000000..619161a --- /dev/null +++ b/src/vue-poc/models/entities/service.xml @@ -0,0 +1,27 @@ + + basex services + + + job id + @id + + + base-uri + @base-uri + + + interval + @interval + + + task description + . + + + service is running + jobs:list()=@id + + + + jobs:services() + diff --git a/src/vue-poc/models/entities/xqdoc.xml b/src/vue-poc/models/entities/xqdoc.xml index 234f3ca..1e81ec8 100644 --- a/src/vue-poc/models/entities/xqdoc.xml +++ b/src/vue-poc/models/entities/xqdoc.xml @@ -2,13 +2,17 @@ XQuery documentation set + + id for doc run e.g 56 + @id + time of generation @time root folder to scan - @root + "file:///C:/tmp/xqdoc/" diff --git a/src/vue-poc/package.json b/src/vue-poc/package.json index 5a0c416..5a39bd9 100644 --- a/src/vue-poc/package.json +++ b/src/vue-poc/package.json @@ -3,10 +3,8 @@ "version": "0.1.99", "description": "A vue test", "dependencies": { - "foo": "1.0.0 - 2.9999.9999", - "bar": ">=1.0.2 <2.1.2", - "ace": "1.3.3", - "vuetify": "0.15.2", + "ace": "1.4.2", + "vuetify": "1.4.2", "vue": "2.5.17", "vue-router": "2.5.3", "vue-treeselect": "0.0.25", @@ -15,6 +13,7 @@ "axios": "0.17.1", "qs": "6.4.0", "localforage": "1.7.1", - "moment.js": "2.18.1" + "momentjs": "2.18.1", + "vue-form-generator": "2.2.2" } } \ No newline at end of file diff --git a/src/vue-poc/router.js b/src/vue-poc/router.js index 1bc820a..729bb67 100644 --- a/src/vue-poc/router.js +++ b/src/vue-poc/router.js @@ -83,6 +83,7 @@ const router = new VueRouter({ { path: 'jobs', name:"jobs", component: Jobs, meta:{title:"Jobs running"} }, { path: 'jobs/:job', name:"jobShow", component: Job, props: true, meta:{title:"Job Status"} }, { path: 'ping', component: Ping,meta:{title:"Ping"} }, + { path: 'dicetest', component: Dicetest,meta:{title:"Dice test"} }, { path: 'upload', component: Upload,meta:{title:"Upload"} }, { path: 'websocket', component: Websocket,meta:{title:"Web socket"} }, { path: 'settings', component: Basexsettings,meta:{title:"BaseX settings"} } diff --git a/src/vue-poc/static/app-gen.js b/src/vue-poc/static/app-gen.js index 1e96bdf..cba9ccb 100644 --- a/src/vue-poc/static/app-gen.js +++ b/src/vue-poc/static/app-gen.js @@ -1,8 +1,8 @@ -// generated 2018-12-17T10:20:51.102Z +// generated 2019-01-23T22:04:55.22Z // src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-autoheight.vue Vue.component('qd-autoheight',{template:` - + i will auto2 `, @@ -34,7 +34,7 @@ Vue.component('qd-breadcrumbs',{template:` props.item.icon {{ props.item.text }} - + arrow_drop_down @@ -84,7 +84,7 @@ Vue.component('qd-fileupload',{template:` Select - + cloud_upload @@ -167,18 +167,93 @@ Vue.component('qd-link',{template:` ); +// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-mimelist.vue +Vue.component('qd-mimelist',{template:` + + + + {{ mimetype }} + + arrow_drop_down + + + + + + + + + + + + + check_circle + insert_drive_file + + + + {{ mime.name }} + + + + {{ mime.mode }} + + + + + + + + + + + `, + + props: { + mimetype:{ + type:String, default:"(default)" + } + }, + + data () { + return { + q: null, + show: false + } + }, + + methods:{ + setItem(mime,index){ + console.log("selected ",mime) + this.$emit('selected', mime) + this.show=false + } + }, + + computed:{ + items(){ + return this.$MimeTypes.list().filter(item=>{return (!this.q) || item.name.toLowerCase().includes(this.q.toLowerCase())}) + } + }, + + created:function(){ + console.log("qd-mimelist",this.$MimeTypes.list()) + } +} + ); + // src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-navlist.vue Vue.component('qd-navlist',{template:` - +