vuetify 1.1.4
This commit is contained in:
parent
c5740af450
commit
5506b42789
12
src/vue-poc/components/vp-entitylink.vue
Normal file
12
src/vue-poc/components/vp-entitylink.vue
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
show a entity link
|
||||
-->
|
||||
<template id="vp-entitylink">
|
||||
<router-link :to="'entity/'+entity">E</router-link>
|
||||
</template>
|
||||
|
||||
<script>{
|
||||
props: ['entity']
|
||||
}
|
||||
</script>
|
23
src/vue-poc/components/vp-validationreport.vue
Normal file
23
src/vue-poc/components/vp-validationreport.vue
Normal file
@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
show a validition report
|
||||
-->
|
||||
<template id="vp-validationreport">
|
||||
<v-card v-if="report" >
|
||||
|
||||
<v-toolbar class="orange darken-1">
|
||||
<v-card-title>Validation</v-card-title>
|
||||
<span v-for="(value, key) in report.msgcounts">{{ key }}:{{ value }}</span>
|
||||
</v-toolbar>
|
||||
|
||||
<v-card-text>
|
||||
<pre >*** {{ report }}</pre>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<script>{
|
||||
props: ['report']
|
||||
}
|
||||
</script>
|
Binary file not shown.
@ -58,7 +58,10 @@ function vue-api:edit-post($url as xs:string,$data)
|
||||
(:~
|
||||
: Returns a file content.
|
||||
:)
|
||||
declare function vue-api:get-webfile($url as xs:string)
|
||||
declare
|
||||
%rest:GET %rest:path("/vue-poc/api/get")
|
||||
%rest:query-param("url", "{$url}")
|
||||
function vue-api:get-webfile($url as xs:string?)
|
||||
as element(json)
|
||||
{
|
||||
let $path := ufile:web( $url)=>trace("path ")
|
||||
@ -74,6 +77,29 @@ as element(json)
|
||||
error(xs:QName('vue-api:raw'),$url)
|
||||
};
|
||||
|
||||
(:~
|
||||
: Returns a file content.
|
||||
:)
|
||||
declare
|
||||
%rest:GET %rest:path("/vue-poc/api/get2")
|
||||
%rest:query-param("url", "{$url}")
|
||||
%output:method("json")
|
||||
function vue-api:get-file($url as xs:string?)
|
||||
as element(json)
|
||||
{
|
||||
let $path := $url
|
||||
return if( file:exists($path))then
|
||||
let $type:=mt:type($path)
|
||||
let $fetch:=mt:fetch-fn($type("treat-as"))
|
||||
return <json type="object" >
|
||||
<url>{$url}</url>
|
||||
<mimetype>{$type?type}</mimetype>
|
||||
<data>{$fetch($path)}</data>
|
||||
</json>
|
||||
else
|
||||
error(xs:QName('vue-api:raw'),$url)
|
||||
};
|
||||
|
||||
(:~
|
||||
: Returns a file content.
|
||||
:)
|
||||
|
@ -263,11 +263,15 @@
|
||||
},
|
||||
|
||||
loadItem(url){
|
||||
HTTP.get("get",{params: {url:url}})
|
||||
HTTP.get("get2",{params: {url:url}})
|
||||
.then(r=>{
|
||||
//console.log(r)
|
||||
alert("go")
|
||||
//alert(mode)
|
||||
console.log(r)
|
||||
var tab={
|
||||
text: ""+ r.data.data,
|
||||
location: url,
|
||||
name: url.split(/.*[\/|\\]/)[1]
|
||||
};
|
||||
this.addItem(tab);
|
||||
})
|
||||
.catch(error=> {
|
||||
console.log(error);
|
||||
|
@ -1,18 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<template id="namespace">
|
||||
<v-container fluid grid-list-md>
|
||||
|
||||
<v-toolbar >
|
||||
<v-toolbar-title>Namespaces</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn @click="load"
|
||||
|
||||
<v-btn @click="load"
|
||||
:loading="loading"
|
||||
:disabled="loading"
|
||||
>Refresh</v-btn>
|
||||
Text
|
||||
><v-icon>refresh</v-icon></v-btn>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<v-text-field prepend-icon="filter_list" label="Filter..." v-model="q" type="search"
|
||||
hide-details single-line @keyup.enter="setfilter"
|
||||
:append-icon="this.q?'clear':''" :append-icon-cb="e=>this.q=''"></v-text-field>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
<vp-entitylink entity="namespace"></vp-entitylink>
|
||||
|
||||
</v-toolbar>
|
||||
|
||||
<v-data-table
|
||||
:headers="headers"
|
||||
:items="items"
|
||||
:items="filtered"
|
||||
hide-actions
|
||||
class="elevation-1"
|
||||
>
|
||||
@ -25,8 +36,8 @@
|
||||
|
||||
</template>
|
||||
<template slot="no-data">
|
||||
<v-alert :value="true" color="error" icon="warning">
|
||||
Sorry, nothing to display here :(
|
||||
<v-alert :value="true" icon="warning">
|
||||
No matching items.
|
||||
</v-alert>
|
||||
</template>
|
||||
</v-data-table>
|
||||
@ -71,8 +82,25 @@
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
setfilter(){
|
||||
console.log("TODO",this.q)
|
||||
this.$router.push({ query: {url:this.url,q:this.q }})
|
||||
},
|
||||
},
|
||||
watch:{
|
||||
$route(vnew,vold){
|
||||
console.log("ROUTE",vnew,vold)
|
||||
var url=this.$route.query.url
|
||||
this.url=url?url:"/";
|
||||
if(vnew.query.url != vold.query.url) this.load()
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
filtered(){
|
||||
var regex = new RegExp( this.q, "i");
|
||||
return this.items.filter(item=>{return ((!this.q) || regex.test(item.description))})
|
||||
}
|
||||
},
|
||||
created:function(){
|
||||
this.q=this.$route.query.q || this.q;
|
||||
this.load();
|
||||
|
@ -52,7 +52,7 @@
|
||||
data: function(){
|
||||
return {
|
||||
params:{
|
||||
efolder:"C:/Users/andy/git/vue-poc/src/vue-poc/models",
|
||||
efolder:"C:/Users/andy/git/vue-poc/src/vue-poc/models/entities",
|
||||
target:"C:/Users/andy/git/vue-poc/src/vue-poc/models.gen.xqm"
|
||||
},
|
||||
waiting:false,
|
||||
|
@ -64,12 +64,12 @@
|
||||
<script>{
|
||||
data(){
|
||||
return {
|
||||
image:"https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg",
|
||||
image:"https://upload.wikimedia.org/wikipedia/commons/c/c1/Lycidae-Kadavoor-2017-05-22-001.jpg",
|
||||
step: 0,
|
||||
taskxml:"<task></task>",
|
||||
items:[
|
||||
{
|
||||
src: 'https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg'
|
||||
src: 'https://upload.wikimedia.org/wikipedia/commons/c/c1/Lycidae-Kadavoor-2017-05-22-001.jpg'
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
@ -32,15 +32,18 @@
|
||||
<v-card-text v-resize="onResize" style="height:100px" ref="auto">
|
||||
<v-container fluid>
|
||||
|
||||
<v-layout row wrap>
|
||||
<v-flex xs8>
|
||||
<v-text-field v-for="field in fields" :key="field.model"
|
||||
v-model="params[field.model]" :label="field.label" clearable :rules="[rules.required]" box
|
||||
></v-text-field>
|
||||
<v-layout row wrap>
|
||||
<v-flex xs8>
|
||||
<v-flex v-for="field in fields" :key="field.model" >
|
||||
<v-text-field xs10
|
||||
v-model="params[field.model]" :label="field.label"
|
||||
clearable :rules="[rules.required]" box
|
||||
append-outer-icon="send" @click:append-outer="source(field)"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-flex>
|
||||
|
||||
<v-flex xs4 fill-height style="overflow:scroll">
|
||||
<pre >Result: {{ result }}</pre>
|
||||
<v-flex xs4 green fill-height style="height:100%;overflow:scroll">
|
||||
<vp-validationreport :report="result"></vp-validationreport>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-container>
|
||||
@ -66,7 +69,7 @@
|
||||
required: value => !!value || 'Required.'
|
||||
},
|
||||
params:{
|
||||
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/adminlog.xml",
|
||||
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/entities/adminlog.xml",
|
||||
schema: "C:/Users/andy/git/vue-poc/src/vue-poc/models/schemas/entity.xsd"
|
||||
},
|
||||
snackbar:{show:false,msg:"",context:"success"}
|
||||
@ -82,6 +85,11 @@
|
||||
el.style.height=h +"px";
|
||||
},
|
||||
|
||||
source(field){
|
||||
console.log("field: ",field);
|
||||
router.push({ path: 'tabs', query: { url:this.params[field.model]}})
|
||||
},
|
||||
|
||||
validate(){
|
||||
this.loading=true
|
||||
this.start = performance.now();
|
||||
|
@ -1,5 +1,5 @@
|
||||
(: entity access maps
|
||||
: auto generated from xml files in entities folder at: 2018-06-27T22:03:58.364+01:00
|
||||
: auto generated from xml files in entities folder at: 2018-07-07T11:46:28.985+01:00
|
||||
:)
|
||||
|
||||
module namespace entity = 'quodatum.models.generated';
|
||||
@ -108,7 +108,7 @@ declare variable $entity:list:=map {
|
||||
"code": function($_ as element()) as xs:string? {$_/ent:data },
|
||||
"description": function($_ as element()) as xs:string {$_/ent:description },
|
||||
"fieldslink": function($_ as element()) as xs:string {$_/fn:concat("/data/entity/",@name,"/field") },
|
||||
"iconclass": function($_ as element()) as xs:string {$_/ent:iconclass },
|
||||
"iconclass": function($_ as element()) as xs:string {$_/ent:views/@iconclass },
|
||||
"modules": function($_ as element()) as xs:string? {$_/ent:module/concat("import module namespace ",@prefix,"='",@namespace,"';
|
||||
")=>string-join() },
|
||||
"name": function($_ as element()) as xs:string {$_/@name },
|
||||
@ -138,7 +138,7 @@ declare variable $entity:list:=map {
|
||||
},
|
||||
"iconclass": function($_ as element()) as element(iconclass)? {
|
||||
(: xs:string :)
|
||||
fn:data($_/ent:iconclass)!element iconclass { .}
|
||||
fn:data($_/ent:views/@iconclass)!element iconclass { .}
|
||||
},
|
||||
"modules": function($_ as element()) as element(modules)? {
|
||||
(: xs:string? :)
|
||||
@ -446,7 +446,7 @@ declare variable $entity:list:=map {
|
||||
},
|
||||
"user": map{
|
||||
"name": "user",
|
||||
"description": "users ",
|
||||
"description": "A BaseX user ",
|
||||
"access": map{
|
||||
"name": function($_ as element()) as xs:string {$_/@name },
|
||||
"permission": function($_ as element()) as xs:string {$_/@permission } },
|
||||
|
@ -1,9 +1,8 @@
|
||||
<entity name="entity.field" xmlns="https://github.com/Quodatum/app-doc/entity">
|
||||
<has-a name="entity" />
|
||||
<description>About an entity field. </description>
|
||||
<namespace prefix="ent"
|
||||
uri="https://github.com/Quodatum/app-doc/entity" />
|
||||
<fields>
|
||||
<fields parent="entity">
|
||||
<field name="name" type="xs:string">
|
||||
<description>name</description>
|
||||
<xpath>@name</xpath>
|
||||
|
@ -27,6 +27,7 @@
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="parent" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// generated 2018-07-06T22:33:10.411+01:00
|
||||
// generated 2018-07-10T23:15:53.605+01:00
|
||||
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/qd-autoheight.vue
|
||||
Vue.component('qd-autoheight',{template:`
|
||||
@ -327,6 +327,16 @@ Vue.component('vis-time-line',{template:`
|
||||
}
|
||||
);
|
||||
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/vp-entitylink.vue
|
||||
Vue.component('vp-entitylink',{template:`
|
||||
<router-link :to="'entity/'+entity">E</router-link>
|
||||
`,
|
||||
|
||||
props: ['entity']
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/vp-favorite.vue
|
||||
Vue.component('vp-favorite',{template:`
|
||||
<v-menu :close-on-click="false" offset-x="" :close-on-content-click="false" :nudge-width="200" v-model="frmfav">
|
||||
@ -609,6 +619,27 @@ Vue.component('vp-selectpath',{template:`
|
||||
}
|
||||
);
|
||||
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/vp-validationreport.vue
|
||||
Vue.component('vp-validationreport',{template:`
|
||||
<v-card v-if="report">
|
||||
|
||||
<v-toolbar class="orange darken-1">
|
||||
<v-card-title>Validation</v-card-title>
|
||||
<span v-for="(value, key) in report.msgcounts">{{ key }}:{{ value }}</span>
|
||||
</v-toolbar>
|
||||
|
||||
<v-card-text>
|
||||
<pre>*** {{ report }}</pre>
|
||||
</v-card-text>
|
||||
|
||||
</v-card>
|
||||
`,
|
||||
|
||||
props: ['report']
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/components/vue-ace.vue
|
||||
Vue.component('vue-ace',{template:`
|
||||
<div style="width: 100%; height: 100%;"></div>
|
||||
@ -2418,11 +2449,15 @@ const Tabs=Vue.extend({template:`
|
||||
},
|
||||
|
||||
loadItem(url){
|
||||
HTTP.get("get",{params: {url:url}})
|
||||
HTTP.get("get2",{params: {url:url}})
|
||||
.then(r=>{
|
||||
//console.log(r)
|
||||
alert("go")
|
||||
//alert(mode)
|
||||
console.log(r)
|
||||
var tab={
|
||||
text: ""+ r.data.data,
|
||||
location: url,
|
||||
name: url.split(/.*[\/|\\]/)[1]
|
||||
};
|
||||
this.addItem(tab);
|
||||
})
|
||||
.catch(error=> {
|
||||
console.log(error);
|
||||
@ -4052,13 +4087,22 @@ const Entity1=Vue.extend({template:`
|
||||
// src: file:///C:/Users/andy/git/vue-poc/src/vue-poc/features/model/namespace.vue
|
||||
const Namespace=Vue.extend({template:`
|
||||
<v-container fluid="" grid-list-md="">
|
||||
|
||||
<v-toolbar>
|
||||
<v-toolbar-title>Namespaces</v-toolbar-title>
|
||||
|
||||
<v-btn @click="load" :loading="loading" :disabled="loading"><v-icon>refresh</v-icon></v-btn>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn @click="load" :loading="loading" :disabled="loading">Refresh</v-btn>
|
||||
Text
|
||||
|
||||
<v-text-field prepend-icon="filter_list" label="Filter..." v-model="q" type="search" hide-details="" single-line="" @keyup.enter="setfilter" :append-icon="this.q?'clear':''" :append-icon-cb="e=>this.q=''"></v-text-field>
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
<vp-entitylink entity="namespace"></vp-entitylink>
|
||||
|
||||
</v-toolbar>
|
||||
<v-data-table :headers="headers" :items="items" hide-actions="" class="elevation-1">
|
||||
|
||||
<v-data-table :headers="headers" :items="filtered" hide-actions="" class="elevation-1">
|
||||
<template slot="items" slot-scope="props">
|
||||
<td><router-link :to="{path:'namespace/item?xmlns='+ props.item.xmlns}">
|
||||
{{ props.item.xmlns }}
|
||||
@ -4068,8 +4112,8 @@ const Namespace=Vue.extend({template:`
|
||||
|
||||
</template>
|
||||
<template slot="no-data">
|
||||
<v-alert :value="true" color="error" icon="warning">
|
||||
Sorry, nothing to display here :(
|
||||
<v-alert :value="true" icon="warning">
|
||||
No matching items.
|
||||
</v-alert>
|
||||
</template>
|
||||
</v-data-table>
|
||||
@ -4113,8 +4157,25 @@ const Namespace=Vue.extend({template:`
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
setfilter(){
|
||||
console.log("TODO",this.q)
|
||||
this.$router.push({ query: {url:this.url,q:this.q }})
|
||||
},
|
||||
},
|
||||
watch:{
|
||||
$route(vnew,vold){
|
||||
console.log("ROUTE",vnew,vold)
|
||||
var url=this.$route.query.url
|
||||
this.url=url?url:"/";
|
||||
if(vnew.query.url != vold.query.url) this.load()
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
filtered(){
|
||||
var regex = new RegExp( this.q, "i");
|
||||
return this.items.filter(item=>{return ((!this.q) || regex.test(item.description))})
|
||||
}
|
||||
},
|
||||
created:function(){
|
||||
this.q=this.$route.query.q || this.q;
|
||||
this.load();
|
||||
@ -4987,7 +5048,7 @@ const Model=Vue.extend({template:`
|
||||
data: function(){
|
||||
return {
|
||||
params:{
|
||||
efolder:"C:/Users/andy/git/vue-poc/src/vue-poc/models",
|
||||
efolder:"C:/Users/andy/git/vue-poc/src/vue-poc/models/entities",
|
||||
target:"C:/Users/andy/git/vue-poc/src/vue-poc/models.gen.xqm"
|
||||
},
|
||||
waiting:false,
|
||||
@ -5354,12 +5415,12 @@ const Thumbnail=Vue.extend({template:`
|
||||
|
||||
data(){
|
||||
return {
|
||||
image:"https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg",
|
||||
image:"https://upload.wikimedia.org/wikipedia/commons/c/c1/Lycidae-Kadavoor-2017-05-22-001.jpg",
|
||||
step: 0,
|
||||
taskxml:"<task></task>",
|
||||
items:[
|
||||
{
|
||||
src: 'https://cdn.pixabay.com/photo/2017/10/31/07/49/horses-2904536_960_720.jpg'
|
||||
src: 'https://upload.wikimedia.org/wikipedia/commons/c/c1/Lycidae-Kadavoor-2017-05-22-001.jpg'
|
||||
}]
|
||||
}
|
||||
},
|
||||
@ -5470,13 +5531,14 @@ const Validate=Vue.extend({template:`
|
||||
<v-card-text v-resize="onResize" style="height:100px" ref="auto">
|
||||
<v-container fluid="">
|
||||
|
||||
<v-layout row="" wrap="">
|
||||
<v-flex xs8="">
|
||||
<v-text-field v-for="field in fields" :key="field.model" v-model="params[field.model]" :label="field.label" clearable="" :rules="[rules.required]" box=""></v-text-field>
|
||||
<v-layout row="" wrap="">
|
||||
<v-flex xs8="">
|
||||
<v-flex v-for="field in fields" :key="field.model">
|
||||
<v-text-field xs10="" v-model="params[field.model]" :label="field.label" clearable="" :rules="[rules.required]" box="" append-outer-icon="send" @click:append-outer="source(field)"></v-text-field>
|
||||
</v-flex>
|
||||
</v-flex>
|
||||
|
||||
<v-flex xs4="" fill-height="" style="overflow:scroll">
|
||||
<pre>Result: {{ result }}</pre>
|
||||
<v-flex xs4="" green="" fill-height="" style="height:100%;overflow:scroll">
|
||||
<vp-validationreport :report="result"></vp-validationreport>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-container>
|
||||
@ -5501,7 +5563,7 @@ const Validate=Vue.extend({template:`
|
||||
required: value => !!value || 'Required.'
|
||||
},
|
||||
params:{
|
||||
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/adminlog.xml",
|
||||
doc: "C:/Users/andy/git/vue-poc/src/vue-poc/models/entities/adminlog.xml",
|
||||
schema: "C:/Users/andy/git/vue-poc/src/vue-poc/models/schemas/entity.xsd"
|
||||
},
|
||||
snackbar:{show:false,msg:"",context:"success"}
|
||||
@ -5517,6 +5579,11 @@ const Validate=Vue.extend({template:`
|
||||
el.style.height=h +"px";
|
||||
},
|
||||
|
||||
source(field){
|
||||
console.log("field: ",field);
|
||||
router.push({ path: 'tabs', query: { url:this.params[field.model]}})
|
||||
},
|
||||
|
||||
validate(){
|
||||
this.loading=true
|
||||
this.start = performance.now();
|
||||
|
@ -11,7 +11,7 @@
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"/>
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/icon?family=Material+Icons"/>
|
||||
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="//unpkg.com/vuetify@1.1.1/dist/vuetify.min.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="//unpkg.com/vuetify@1.1.4/dist/vuetify.min.css" rel="stylesheet" type="text/css"/>
|
||||
<link rel="stylesheet" href="//unpkg.com/@riophae/vue-treeselect@0.0.29/dist/vue-treeselect.min.css">
|
||||
<link rel="stylesheet" href="//unpkg.com/vue-form-generator@2.2.2/dist/vfg-core.css"/>
|
||||
<link href="/vue-poc/ui/app.css" rel="stylesheet" type="text/css"/>
|
||||
@ -38,7 +38,7 @@
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.js" crossorigin="anonymous"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/axios/0.17.1/axios.js" crossorigin="anonymous"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/qs/6.4.0/qs.js" crossorigin="anonymous" ></script>
|
||||
<script src="//unpkg.com/vuetify@1.1.1/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
||||
<script src="//unpkg.com/vuetify@1.1.4/dist/vuetify.min.js" crossorigin="anonymous"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" crossorigin="anonymous"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ext-language_tools.js" crossorigin="anonymous"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ext-linking.js" type="text/javascript" charset="utf-8"></script>
|
||||
|
Loading…
Reference in New Issue
Block a user