fix v-col

This commit is contained in:
Andy Bunce 2017-05-23 22:31:56 +01:00
parent 9d2378c04e
commit 40a9afb8b5
6 changed files with 67 additions and 736 deletions

Binary file not shown.

View file

@ -1,5 +1,14 @@
<package xmlns="http://expath.org/ns/pkg" name="http://expkg-zone58.github.io/ex-dotml"
abbrev="vue-poc" version="0.0.1" spec="1.0">
<title>vue-poc test of vue.js.</title>
<dependency name="ace" version="1.2.6" />
<dependency name="vuetify" version="0.12.0" />
<dependency name="vue" version="2.3.3" />
<dependency name="vue-router" version="2.5.3" />
<dependency name="google-material" version="0.0.0" />
<dependency name="js-beautify" version="1.6.12" />
<dependency name="axios" version="0.16.1" />
<dependency name="qs" version="6.4.0" />
<dependency name="vue-multiselect" version="2.0.0-beta.14" />
<dependency name="lodash" version="4.13.1" />
</package>

54
src/vue-poc/logo.svg Normal file
View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 400 400"
height="400"
width="400"
xml:space="preserve"
id="svg2"
version="1.1"
sodipodi:docname="Vue.js_Logo.svg"
inkscape:version="0.92.0 r15299"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="715"
id="namedview10"
showgrid="false"
inkscape:zoom="0.59"
inkscape:cx="200"
inkscape:cy="200"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" /><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6" /><g
transform="matrix(0,-1.3333333,-1.3333333,0,407.19159,407.19133)"
id="g10"><g
transform="translate(178.0626,235.0086)"
id="g12"><path
id="path14"
style="fill:#4dba87;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 -22.669,-39.264 -45.338,0 h -75.491 L -22.669,-170.017 75.491,0 Z"
inkscape:connector-curvature="0" /></g><g
transform="translate(178.0626,235.0086)"
id="g16"><path
id="path18"
style="fill:#435466;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 -22.669,-39.264 -45.338,0 H -81.565 L -22.669,-102.01 36.227,0 Z"
inkscape:connector-curvature="0" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,319 +0,0 @@
const Home = Vue.extend({ template: '#home'});
const Options = Vue.extend({
template: '#heart',
data: function(){
return {
snackbar:false
}
}
});
const Select = Vue.extend({
template: '#select',
components: { multiselect: VueMultiselect.Multiselect},
data: function(){
return {
value: null,
value2: null,
options: [],
isLoading: false
}
},
created:function(){
this.asyncFind("")
},
methods: {
asyncFind: function(query){
this.isLoading = true
that=this;
HTTP.get("test-select?q="+query,axios_json)
.then(function(r){
that.isLoading = false
that.options=r.data.items;
})
.catch(function (error) {
console.log(error);
this.isLoading = false
alert("Get query error")
});
}
}
});
const People = Vue.extend({
template: '#people',
data: function(){
return {message: 'Hello Vue.js!'}
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
});
const Search = Vue.extend({
template: '#search',
data: function(){
return {
message: 'Hello Vue.js!',
q:this.$route.query.q
}
},
created:function(){
console.log("Serch",this.$route.query.q)
}
});
const Edit = Vue.extend({
template: '#edit',
data () {
return {
contentA: 'declare function local:query($q as xs:string)\n{\n<json type="object" >}',
mode:'xquery',
url:'',
name:'',
path:[],
wrap:false,
busy:false,
clearDialog:false,
annotations:null
}
},
methods: {
reset () {
this.contentA = 'reset content for Editor A'
},
changeContentA (val) {
if (this.contentA !== val) {
this.contentA = val
}
},
// load from url
fetch(url){
this.busy=true
HTTP.get("raw?url="+url,axios_json)
.then(r=>{
//console.log(r)
var a=acetype(r.data.mimetype)
this.mode=a
this.contentA=r.data.data
var a=url.split("/")
this.url=url
this.name=a.pop()
this.path=a
this.busy=false
//alert(mode)
})
.catch(error=> {
console.log(error);
this.busy=false
alert("Get query error"+url)
});
},
acecmd(cmd){
Events.$emit('eventFired',cmd);
},
fold(){
Events.$emit('eventFired',"foldall");
},
save(){
alert("TODO save: "+this.path.join("/"));
},
showfiles(){
router.push({ path: 'files', query: { url: this.path.join("/") }})
},
beautify(){
this.busy=true
var a=this.contentA
switch(this.mode) {
case "html":
case "xml":
a=html_beautify(a, { indent_size: 3 ,indent_inner_html:true})
break;
case "javascript":
a=js_beautify(a, { indent_size: 2 })
break;
case "css":
a=css_beautify(a, { indent_size: 2 })
break;
default:
alert("beaut: " + this.mode)
}
this.contentA=a
this.busy=false
},
annotation(counts){
this.annotations=counts
}
},
created:function(){
var url=this.$route.query.url
console.log("Edit: ",url)
if(url) this.fetch(url)
}
});
const Files = Vue.extend({
template: '#files',
data: function(){
return {url: ".",
folders:[],
files:[],
items:["root"]
}
},
methods:{
click (val) {
// with query, resulting in /register?plan=private
router.push({ path: 'edit', query: { url: this.url+"/" +val }})
},
folder (val) {
this.url+="/"+ val
this.$router.push({ query: { url: this.url }})
this.load(this.url)
},
load(url){
HTTP.get("file?url="+url,axios_json)
.then(r=>{
console.log(r)
this.folders=r.data.folders
this.files=r.data.files
})
.catch(error=> {
console.log(error);
alert("Get query error"+url)
});
},
root(){
this.url="."
this.$router.push({ query: { url: this.url }})
this.load(this.url)
}
},
created:function(){
var url=this.$route.query.url
this.url=url?url:".";
console.log("files: ",this.$route.query.url)
this.load(this.url)
}
});
const Stepper = Vue.extend({
template: '#stepper',
data: function(){
return {e6: 0}
}
});
// base -----------------------
const HTTP = axios.create({
baseURL: "/vue-poc/api/",
headers: {
'X-Custom-Header': 'vue-poc',
accept: 'application/json'
}
});
const axios_json={ headers: {accept: 'application/json'}};
function acetype(mime){
const mimemap={
"text/xml":"xml",
"application/xml":"xml",
"application/xquery":"xquery",
"text/ecmascript":"javascript",
"text/html":"html"
};
var r=mimemap[mime]
return r?r:"text"
};
Vue.component('my-component', {
template: '<div>A custom component!</div>',
created:function(){
console.log("my-component");
},
});
var Events = new Vue({});
const router = new VueRouter({
base:"/vue-poc/ui/",
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/people', component: People ,meta:{title:"People"}},
{ path: '/options', component: Options,meta:{title:"Options"} },
{ path: '/select', component: Select,meta:{title:"Select"} },
{ path: '/search', component: Search,meta:{title:"Search"} },
{ path: '/edit', component: Edit,meta:{title:"Ace editor"} },
{ path: '/stepper', component: Stepper,meta:{title:"Stepper"} },
{ path: '/files', component: Files,meta:{title:"Files"} }
],
});
router.afterEach(function(route) {
document.title = (route.meta.title?route.meta.title:"") + " VUE-Poc";
});
Vue.use(Vuetify);
const app = new Vue({
router,
data:function(){return {
q:"",
sidebar:false,
items: [{
href: '/',
router: true,
title: 'Home',
icon: 'home'
}, {
href: 'files',
router: true,
title: 'files',
icon: 'folder'
}, {
href: 'edit',
router: true,
title: 'edit',
icon: 'mode_edit'
}, {
href: 'search',
router: true,
title: 'search',
icon: 'search'
}, {
href: 'people',
router: true,
title: 'People',
icon: 'person'
}, {
href: 'select',
router: true,
title: 'select',
icon: 'extension'
}, {
href: 'options',
router: true,
title: 'options',
icon: 'domain'
}, {
href: 'stepper',
router: true,
title: 'stepper',
icon: 'picture_in_picture'
}]
}},
methods: {
openSidebar() {
this.sidebar = !this.sidebar;
},
search(){
this.$router.push({path: 'search',query: { q: this.q }})
}
}
}).$mount('#app');

View file

@ -10,7 +10,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="https://unpkg.com/vuetify@0.12.0/dist/vuetify.min.css" rel="stylesheet" type="text/css">
<link href="https://unpkg.com/vue-multiselect@2.0.0-beta.14/dist/vue-multiselect.min.css" rel="stylesheet" type="text/css">
<link href="https://unpkg.com/vue-multiselect@2.0.0-beta.15/dist/vue-multiselect.min.css" rel="stylesheet" type="text/css">
<link href="/vue-poc/ui/app.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="/vue-poc/ui/icon.png"/>
@ -20,7 +20,7 @@
<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.12.0/dist/vuetify.min.js"></script>
<script src="https://unpkg.com/vue-multiselect@2.0.0-beta.14"></script>
<script src="https://unpkg.com/vue-multiselect@2.0.0-beta.15/dist/vue-multiselect.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ace.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ext-language_tools.js"></script>
@ -55,7 +55,7 @@
<v-divider></v-divider>
<v-list-item v-for="item in items" :key="item">
<v-list-tile :href="item.href" router="true">
<v-list-tile :href="item.href" router="true" ripple="true">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>

View file

@ -1,413 +0,0 @@
const Home = Vue.extend({ template: '#home'});
const Options = Vue.extend({
template: '#heart',
data: function(){
return {
snackbar:false
}
}
});
const Select = Vue.extend({
template: '#select',
components: { multiselect: VueMultiselect.Multiselect},
data: function(){
return {
value: null,
value2: null,
options: [],
isLoading: false
}
},
created:function(){
this.asyncFind("")
},
methods: {
asyncFind: function(query){
this.isLoading = true
that=this;
HTTP.get("test-select?q="+query,axios_json)
.then(function(r){
that.isLoading = false
that.options=r.data.items;
})
.catch(function (error) {
console.log(error);
this.isLoading = false
alert("Get query error")
});
}
}
});
const People = Vue.extend({
template: '#people',
data: function(){
return {message: 'Hello Vue.js!'}
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
});
const Search = Vue.extend({
template: '#search',
data: function(){
return {
message: 'Hello Vue.js!',
q:this.$route.query.q
}
},
created:function(){
console.log("Serch",this.$route.query.q)
}
});
const Edit=Vue.extend({
template: `
<v-container fluid="">
<v-toolbar class="green">
<v-toolbar-side-icon></v-toolbar-side-icon>
<v-toolbar-title>
<v-btn @click.native="showfiles()" small="" icon=""><v-icon>folder</v-icon></v-btn>
<span>{{ name }}</span> <v-chip small="" class="primary white--text">{{ mode }}</v-chip>
</v-toolbar-title>
<v-toolbar-items>
<v-btn dark="" icon="" @click.native="acecmd('outline')">
<v-icon>star</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="acecmd('goToPreviousError')">
<v-icon>navigate_before</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="acecmd('goToNextError')">
<v-icon>navigate_next</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="acecmd('foldall')">
<v-icon>vertical_align_center</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="acecmd('showSettingsMenu')">
<v-icon>settings</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="wrap=!wrap">
<v-icon>wrap_text</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="acecmd('showKeyboardShortcuts')">
<v-icon>keyboard</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="save()">
<v-icon>cloud_upload</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="beautify()">
<v-icon>format_align_center</v-icon>
</v-btn>
<v-btn dark="" icon="" @click.native="d2 = true">
<v-icon>delete</v-icon>
</v-btn>
<v-menu bottom="" origin="top right" transition="v-scale-transition">
<v-btn dark="" icon="" slot="activator">
<v-icon>more_vert</v-icon>
</v-btn>
<v-list>
<v-list-item>
<v-list-tile>
<v-list-tile-title @click="fetch('vue-poc/vue-poc.xqm')">load xquery</v-list-tile-title>
</v-list-tile>
</v-list-item>
<v-list-item>
<v-list-tile>
<v-list-tile-title @click="fetch('vue-poc/data/vue-poc/ch4d1.xml')">load xml</v-list-tile-title>
</v-list-tile>
</v-list-item>
<v-list-item>
<v-list-tile>
<v-list-tile-title @click="fetch('vue-poc/static/app.js')">load js</v-list-tile-title>
</v-list-tile>
</v-list-item>
<v-list-item>
<v-list-tile>
<v-list-tile-title @click="fetch('vue-poc/static/app.html')">load html</v-list-tile-title>
</v-list-tile>
</v-list-item>
</v-list>
</v-menu>
</v-toolbar-items>
</v-toolbar>
<v-progress-linear v-if="busy" v-bind:indeterminate="true"></v-progress-linear>
<v-dialog v-model="clearDialog">
<v-card>
<v-card-row>
<v-card-title>Clear?</v-card-title>
</v-card-row>
<v-card-row>
<v-card-text>clear text.</v-card-text>
</v-card-row>
<v-card-row actions="">
<v-btn class="green--text darken-1" flat="flat" @click.native="clearDialog = false">Cancel</v-btn>
<v-btn class="green--text darken-1" flat="flat" @click.native="reset()">Ok</v-btn>
</v-card-row>
</v-card>
</v-dialog>
<div v-if="!busy" style="height:70vh">
<vue-ace editor-id="editorA" :content="contentA" :mode="mode" :wrap="wrap" v-on:change-content="changeContentA" v-on:annotation="annotation"></vue-ace>
</div>
</v-container>
`,
data () {
return {
contentA: 'declare function local:query($q as xs:string)\n{\n<json type="object" >}',
mode:'xquery',
url:'',
name:'',
path:[],
wrap:false,
busy:false,
clearDialog:false,
annotations:null
}
},
methods: {
reset () {
this.contentA = 'reset content for Editor A'
},
changeContentA (val) {
if (this.contentA !== val) {
this.contentA = val
}
},
// load from url
fetch(url){
this.busy=true
HTTP.get("raw?url="+url,axios_json)
.then(r=>{
//console.log(r)
var a=acetype(r.data.mimetype)
this.mode=a
this.contentA=r.data.data
var a=url.split("/")
this.url=url
this.name=a.pop()
this.path=a
this.busy=false
//alert(mode)
})
.catch(error=> {
console.log(error);
this.busy=false
alert("Get query error"+url)
});
},
acecmd(cmd){
Events.$emit('eventFired',cmd);
},
fold(){
Events.$emit('eventFired',"foldall");
},
save(){
alert("TODO save: "+this.path.join("/"));
},
showfiles(){
router.push({ path: 'files', query: { url: this.path.join("/") }})
},
beautify(){
this.busy=true
var a=this.contentA
switch(this.mode) {
case "html":
case "xml":
a=html_beautify(a, { indent_size: 3 ,indent_inner_html:true})
break;
case "javascript":
a=js_beautify(a, { indent_size: 2 })
break;
case "css":
a=css_beautify(a, { indent_size: 2 })
break;
default:
alert("beaut: " + this.mode)
}
this.contentA=a
this.busy=false
},
annotation(counts){
this.annotations=counts
}
},
created:function(){
var url=this.$route.query.url
console.log("Edit: ",url)
if(url) this.fetch(url)
}
}
);
const Files = Vue.extend({
template: '#files',
data: function(){
return {url: ".",
folders:[],
files:[],
items:["root"]
}
},
methods:{
click (val) {
// with query, resulting in /register?plan=private
router.push({ path: 'edit', query: { url: this.url+"/" +val }})
},
folder (val) {
this.url+="/"+ val
this.$router.push({ query: { url: this.url }})
this.load(this.url)
},
load(url){
HTTP.get("file?url="+url,axios_json)
.then(r=>{
console.log(r)
this.folders=r.data.folders
this.files=r.data.files
})
.catch(error=> {
console.log(error);
alert("Get query error"+url)
});
},
root(){
this.url="."
this.$router.push({ query: { url: this.url }})
this.load(this.url)
}
},
created:function(){
var url=this.$route.query.url
this.url=url?url:".";
console.log("files: ",this.$route.query.url)
this.load(this.url)
}
});
const Stepper = Vue.extend({
template: '#stepper',
data: function(){
return {e6: 0}
}
});
// base -----------------------
const HTTP = axios.create({
baseURL: "/vue-poc/api/",
headers: {
'X-Custom-Header': 'vue-poc',
accept: 'application/json'
}
});
const axios_json={ headers: {accept: 'application/json'}};
function acetype(mime){
const mimemap={
"text/xml":"xml",
"application/xml":"xml",
"application/xquery":"xquery",
"text/ecmascript":"javascript",
"text/html":"html"
};
var r=mimemap[mime]
return r?r:"text"
};
Vue.component('my-component', {
template: '<div>A custom component!</div>',
created:function(){
console.log("my-component");
},
});
var Events = new Vue({});
const router = new VueRouter({
base:"/vue-poc/ui/",
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/people', component: People ,meta:{title:"People"}},
{ path: '/options', component: Options,meta:{title:"Options"} },
{ path: '/select', component: Select,meta:{title:"Select"} },
{ path: '/search', component: Search,meta:{title:"Search"} },
{ path: '/edit', component: Edit,meta:{title:"Ace editor"} },
{ path: '/stepper', component: Stepper,meta:{title:"Stepper"} },
{ path: '/files', component: Files,meta:{title:"Files"} }
],
});
router.afterEach(function(route) {
document.title = (route.meta.title?route.meta.title:"") + " VUE-Poc";
});
Vue.use(Vuetify);
const app = new Vue({
router,
data:function(){return {
q:"",
sidebar:false,
items: [{
href: '/',
router: true,
title: 'Home',
icon: 'home'
}, {
href: 'files',
router: true,
title: 'files',
icon: 'folder'
}, {
href: 'edit',
router: true,
title: 'edit',
icon: 'mode_edit'
}, {
href: 'search',
router: true,
title: 'search',
icon: 'search'
}, {
href: 'people',
router: true,
title: 'People',
icon: 'person'
}, {
href: 'select',
router: true,
title: 'select',
icon: 'extension'
}, {
href: 'options',
router: true,
title: 'options',
icon: 'domain'
}, {
href: 'stepper',
router: true,
title: 'stepper',
icon: 'picture_in_picture'
}]
}},
methods: {
openSidebar() {
this.sidebar = !this.sidebar;
},
search(){
this.$router.push({path: 'search',query: { q: this.q }})
}
}
}).$mount('#app');