| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | <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 station-id"					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 "toasters";import Modal from "./Modal.vue";import io from "../../io";import validation from "../../validation";export default {	components: { Modal },	data() {		return {			newCommunity: {				name: "",				displayName: "",				description: ""			}		};	},	mounted() {		io.getSocket(socket => {			this.socket = socket;		});	},	methods: {		submitModal() {			this.newCommunity.name = this.newCommunity.name.toLowerCase();			const { name, displayName, description } = this.newCommunity;			if (!name || !displayName || !description)				return new Toast({					content: "Please fill in all fields",					timeout: 8000				});			if (!validation.isLength(name, 2, 16))				return new Toast({					content: "Name must have between 2 and 16 characters.",					timeout: 8000				});			if (!validation.regex.az09_.test(name))				return new Toast({					content:						"Invalid name format. Allowed characters: a-z, 0-9 and _.",					timeout: 8000				});			if (!validation.isLength(displayName, 2, 32))				return new Toast({					content:						"Display name must have between 2 and 32 characters.",					timeout: 8000				});			if (!validation.regex.ascii.test(displayName))				return new Toast({					content:						"Invalid display name format. Only ASCII characters are allowed.",					timeout: 8000				});			if (!validation.isLength(description, 2, 200))				return new Toast({					content:						"Description must have between 2 and 200 characters.",					timeout: 8000				});			let characters = description.split("");			characters = characters.filter(character => {				return character.charCodeAt(0) === 21328;			});			if (characters.length !== 0)				return new Toast({					content: "Invalid description format.",					timeout: 8000				});			return this.socket.emit(				"stations.create",				{					name,					type: "community",					displayName,					description				},				res => {					if (res.status === "success") {						new Toast({							content: `You have added the station successfully`,							timeout: 4000						});						this.closeModal({							sector: "home",							modal: "createCommunityStation"						});					} else new Toast({ content: res.message, timeout: 4000 });				}			);		},		...mapActions("modals", ["closeModal"])	}};</script><style lang="scss" scoped>.station-id {	text-transform: lowercase;	&::placeholder {		text-transform: none;	}}</style>
 |