| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <template>	<modal title='Create Community Station'>		<div 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 class='input' type='text' placeholder='Name...' v-model='newCommunity.name' autofocus>			</p>			<label class='label'>Display Name</label>			<p class='control'>				<input class='input' type='text' placeholder='Display name...' v-model='newCommunity.displayName'>			</p>			<label class='label'>Description</label>			<p class='control'>				<input class='input' type='text' placeholder='Description...' v-model='newCommunity.description' @keyup.enter="submitModal()">			</p>		</div>		<div slot='footer'>			<a class='button is-primary' @click='submitModal()'>Create</a>		</div>	</modal></template><script>	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: ''				}			}		},		ready: function () {			let _this = this;			io.getSocket((socket) => {				_this.socket = socket;			});		},		methods: {			toggleModal: function () {				this.$parent.modals.createCommunityStation = !this.$parent.modals.createCommunityStation;			},			submitModal: function () {				const name = this.newCommunity.name;				const displayName = this.newCommunity.displayName;				const description = this.newCommunity.description;				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(function(character) {					return character.charCodeAt(0) === 21328;				});				if (characters.length !== 0) return Toast.methods.addToast('Invalid description format. Swastika\'s are not allowed.', 8000);				this.socket.emit('stations.create', {					name: name,					type: 'community',					displayName: displayName,					description: description				}, res => {					if (res.status === 'success') Toast.methods.addToast(`You have added the station successfully`, 4000);					else Toast.methods.addToast(res.message, 4000);				});				this.toggleModal();			}		},		events: {			closeModal: function() {				this.$parent.modals.createCommunityStation = !this.$parent.modals.createCommunityStation;			}		}	}</script>
 |