| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | <template>	<modal title="Create Community Station">		<template v-slot:body>			<!-- validation to check if exists http://bulma.io/documentation/elements/form/ -->			<label class="label">Name (unique lowercase station id)</label>			<p class="control">				<input					v-model="newCommunity.name"					class="input"					type="text"					placeholder="Name..."					autofocus				/>			</p>			<label class="label">Display Name</label>			<p class="control">				<input					v-model="newCommunity.displayName"					class="input"					type="text"					placeholder="Display name..."				/>			</p>			<label class="label">Description</label>			<p class="control">				<input					v-model="newCommunity.description"					class="input"					type="text"					placeholder="Description..."					@keyup.enter="submitModal()"				/>			</p>		</template>		<template v-slot:footer>			<a class="button is-primary" v-on:click="submitModal()">Create</a>		</template>	</modal></template><script>import { mapActions } from "vuex";import { Toast } from "vue-roaster";import Modal from "./Modal.vue";import io from "../../io";import validation from "../../validation";export default {	components: { Modal },	data() {		return {			newCommunity: {				name: "",				displayName: "",				description: ""			}		};	},	mounted() {		const _this = this;		io.getSocket(socket => {			_this.socket = socket;		});	},	methods: {		submitModal() {			const { name, displayName, description } = this.newCommunity;			if (!name || !displayName || !description)				return Toast.methods.addToast(					"Please fill in all fields",					8000				);			if (!validation.isLength(name, 2, 16))				return Toast.methods.addToast(					"Name must have between 2 and 16 characters.",					8000				);			if (!validation.regex.az09_.test(name))				return Toast.methods.addToast(					"Invalid name format. Allowed characters: a-z, 0-9 and _.",					8000				);			if (!validation.isLength(displayName, 2, 32))				return Toast.methods.addToast(					"Display name must have between 2 and 32 characters.",					8000				);			if (!validation.regex.azAZ09_.test(displayName))				return Toast.methods.addToast(					"Invalid display name format. Allowed characters: a-z, A-Z, 0-9 and _.",					8000				);			if (!validation.isLength(description, 2, 200))				return Toast.methods.addToast(					"Description must have between 2 and 200 characters.",					8000				);			let characters = description.split("");			characters = characters.filter(character => {				return character.charCodeAt(0) === 21328;			});			if (characters.length !== 0)				return Toast.methods.addToast(					"Invalid description format. Swastika's are not allowed.",					8000				);			const _this = this;			return this.socket.emit(				"stations.create",				{					name,					type: "community",					displayName,					description				},				res => {					if (res.status === "success") {						Toast.methods.addToast(							`You have added the station successfully`,							4000						);						_this.closeModal({							sector: "home",							modal: "createCommunityStation"						});					} else Toast.methods.addToast(res.message, 4000);				}			);		},		...mapActions("modals", ["closeModal"])	}};</script>
 |