Added some basic form checks
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Pünkösd Marcell 2020-12-08 01:31:56 +01:00
parent 5757713f7e
commit f5ad932b12
2 changed files with 46 additions and 13 deletions

View File

@ -3,8 +3,8 @@
<md-dialog :md-active.sync="show.editor">
<md-dialog-title>{{ capitalizedType }} preferences</md-dialog-title>
<form novalidate class="editor-form" @submit.prevent="saveEdit">
<form class="editor-form">
<div v-if="type === 'ingest' && apiId !== null">
@ -30,16 +30,25 @@
<md-field>
<label>Width</label>
<md-input type="number" v-model="editorData.width"></md-input>
<md-icon class="md-accent" v-if="show.mistakes && (!editorData.width || editorData.width <= 0)">
report_problem
</md-icon>
</md-field>
<md-field>
<label>Height</label>
<md-input type="number" v-model="editorData.height"></md-input>
<md-icon class="md-accent" v-if="show.mistakes && (!editorData.height || editorData.height <= 0)">
report_problem
</md-icon>
</md-field>
<md-field>
<label>Bitrate</label>
<md-input type="number" v-model="editorData.bitrate"></md-input>
<md-icon class="md-accent" v-if="show.mistakes && (!editorData.bitrate || editorData.bitrate <= 0)">
report_problem
</md-icon>
</md-field>
@ -49,6 +58,7 @@
<md-field>
<label>URL</label>
<md-input v-model="editorData.url"></md-input>
<md-icon class="md-accent" v-if="show.mistakes && (!restreamerValid)">report_problem</md-icon>
</md-field>
<md-field>
@ -61,11 +71,11 @@
</form>
<md-dialog-actions>
<md-button @click="show.editor = false">{{ discardButtonLabel }}</md-button>
<md-button class="md-primary" @click="saveEdit" v-if="type !== 'ingest'">Save</md-button>
<md-button @click.prevent="show.editor = false">{{ discardButtonLabel }}</md-button>
<md-button @click.prevent="saveEdit" class="md-primary" type="submit" v-if="type !== 'ingest'">Save</md-button>
</md-dialog-actions>
</md-dialog>
<div class="flowchart-node" :style="nodeStyle"
@ -88,7 +98,7 @@
<div class="node-content node-content-long" v-if="type === 'ingest'">
<span v-if="this.apiId === null">Apply first!</span>
<span v-else><b>URL:</b> {{this.data.url}}</span>
<span v-else><b>URL:</b> {{ this.data.url }}</span>
</div>
<div class="node-content" v-else-if="type === 'encoder'">
@ -185,7 +195,8 @@ export default {
return {
show: {
delete: false,
editor: false
editor: false,
mistakes: false
},
editorData: {}
}
@ -218,6 +229,15 @@ export default {
} else {
return "DISCARD";
}
},
restreamerValid() {
let pattern = new RegExp('^((https?|rtmp):\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
return !!pattern.test(this.editorData.url);
}
},
@ -247,9 +267,22 @@ export default {
this.show.editor = true;
},
saveEdit() {
let form_valid = true;
if (this.type === 'encoder') {
form_valid = this.editorData.width && this.editorData.height && this.editorData.bitrate &&
(this.editorData.width > 0) && (this.editorData.height > 0) && (this.editorData.bitrate > 0);
} else if (this.type === 'restreamer') {
form_valid = this.restreamerValid;
}
if (form_valid) {
this.show.editor = false;
this.show.mistakes = false;
this.$emit('update:data', this.editorData);
this.$emit("dataUpdated", this.data);
} else {
this.show.mistakes = true;
}
}
}
}

View File

@ -80,14 +80,14 @@ export default {
case "ingest":
newNode.data = {
url: "",
streamkey: "demokey"
streamkey: ""
}
break;
case "encoder":
newNode.data = {
bitrate: 0,
width: 0,
height: 0
bitrate: 2500,
width: 1280,
height: 720
}
break;
case "restreamer":