fix v-col
This commit is contained in:
		
							parent
							
								
									9d2378c04e
								
							
						
					
					
						commit
						40a9afb8b5
					
				
					 6 changed files with 67 additions and 736 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								src/vue-poc/data/vue-poc/shaks200.zip
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/vue-poc/data/vue-poc/shaks200.zip
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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
									
								
							
							
						
						
									
										54
									
								
								src/vue-poc/logo.svg
									
										
									
									
									
										Normal 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  | 
| 
						 | 
				
			
			@ -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');
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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');
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue