thelounge/client/components/JoinChannel.vue

83 lines
1.5 KiB
Vue
Raw Normal View History

<template>
<form
:id="'join-channel-' + channel.id"
class="join-form"
method="post"
action=""
autocomplete="off"
2018-07-12 19:06:17 +00:00
@keydown.esc.prevent="$emit('toggleJoinChannel')"
@submit.prevent="onSubmit"
>
<input
2018-07-12 19:06:17 +00:00
v-focus
v-model="inputChannel"
type="text"
class="input"
name="channel"
placeholder="Channel"
pattern="[^\s]+"
maxlength="200"
title="The channel name may not contain spaces"
required
>
<input
2018-07-12 19:06:17 +00:00
v-model="inputPassword"
type="password"
class="input"
name="key"
placeholder="Password (optional)"
pattern="[^\s]+"
maxlength="200"
title="The channel password may not contain spaces"
autocomplete="new-password"
>
<button
type="submit"
class="btn btn-small">Join</button>
</form>
</template>
<script>
2018-07-12 19:06:17 +00:00
import socket from "../js/socket";
export default {
name: "JoinChannel",
2018-07-12 19:06:17 +00:00
directives: {
focus: {
inserted(el) {
el.focus();
},
},
},
props: {
channel: Object,
},
2018-07-12 19:06:17 +00:00
data() {
return {
inputChannel: "",
inputPassword: "",
};
},
methods: {
onSubmit() {
const utils = require("../js/utils");
const existingChannel = utils.findCurrentNetworkChan(this.inputChannel);
if (existingChannel) {
const $ = require("jquery");
$(`#sidebar .chan[data-id="${existingChannel.id}"]`).trigger("click");
} else {
socket.emit("input", {
text: `/join ${this.inputChannel} ${this.inputPassword}`,
target: this.channel.id,
});
}
this.inputChannel = "";
this.inputPassword = "";
this.$emit("toggleJoinChannel");
},
},
};
</script>