Rework graphic of global message console
This commit is contained in:
parent
e43ea3aa5e
commit
214226a271
@ -9,6 +9,19 @@
|
|||||||
export let game: Game;
|
export let game: Game;
|
||||||
let inputSendTextActive = true;
|
let inputSendTextActive = true;
|
||||||
let uploadMusicActive = false;
|
let uploadMusicActive = false;
|
||||||
|
let handleSendText: { sendTextMessage(): void };
|
||||||
|
let handleSendAudio: { sendAudioMessage(): void };
|
||||||
|
let broadcastToWorld = false;
|
||||||
|
|
||||||
|
function closeConsoleGlobalMessage() {
|
||||||
|
consoleGlobalMessageManagerVisibleStore.set(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
function onKeyDown(e:KeyboardEvent) {
|
||||||
|
if (e.key === 'Escape') {
|
||||||
|
closeConsoleGlobalMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function inputSendTextActivate() {
|
function inputSendTextActivate() {
|
||||||
inputSendTextActive = true;
|
inputSendTextActive = true;
|
||||||
@ -19,26 +32,122 @@
|
|||||||
uploadMusicActive = true;
|
uploadMusicActive = true;
|
||||||
inputSendTextActive = false;
|
inputSendTextActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function send() {
|
||||||
|
if (inputSendTextActive) {
|
||||||
|
handleSendText.sendTextMessage();
|
||||||
|
console.log(typeof handleSendText);
|
||||||
|
}
|
||||||
|
if (uploadMusicActive) {
|
||||||
|
handleSendAudio.sendAudioMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<svelte:window on:keydown={onKeyDown}/>
|
||||||
|
|
||||||
<div class="console-global-message nes-container is-rounded" transition:fly="{{ y: -1000, duration: 500 }}">
|
<div class="console-global-message">
|
||||||
<div class="console-global-message-main">
|
<div class="menu-console-global-message nes-container is-rounded" transition:fly="{{ x: -1000, duration: 500 }}">
|
||||||
<h2> Global Message </h2>
|
|
||||||
<button type="button" class="console-global-message-close nes-btn is-error" on:click|preventDefault={() => consoleGlobalMessageManagerVisibleStore.set(false)}><i class="nes-icon close is-small"></i></button>
|
|
||||||
<div class="console-global-message-content">
|
|
||||||
<div class="console-global-message-menu">
|
|
||||||
<button type="button" class="nes-btn {inputSendTextActive ? 'is-disabled' : ''}" on:click|preventDefault={inputSendTextActivate}>Message</button>
|
<button type="button" class="nes-btn {inputSendTextActive ? 'is-disabled' : ''}" on:click|preventDefault={inputSendTextActivate}>Message</button>
|
||||||
<button type="button" class="nes-btn {uploadMusicActive ? 'is-disabled' : ''}" on:click|preventDefault={inputUploadMusicActivate}>Audio</button>
|
<button type="button" class="nes-btn {uploadMusicActive ? 'is-disabled' : ''}" on:click|preventDefault={inputUploadMusicActivate}>Audio</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="console-global-message-main-input">
|
<div class="main-console-global-message nes-container is-rounded" transition:fly="{{ y: -1000, duration: 500 }}">
|
||||||
|
<div class="title-console-global-message">
|
||||||
|
<h2>Global Message</h2>
|
||||||
|
<button type="button" class="nes-btn is-error" on:click|preventDefault={closeConsoleGlobalMessage}><i class="nes-icon close is-small"></i></button>
|
||||||
|
</div>
|
||||||
|
<div class="content-console-global-message">
|
||||||
{#if inputSendTextActive}
|
{#if inputSendTextActive}
|
||||||
<InputTextGlobalMessage game={game} gameManager={gameManager}/>
|
<InputTextGlobalMessage game={game} gameManager={gameManager} bind:handleSending={handleSendText}/>
|
||||||
{/if}
|
{/if}
|
||||||
{#if uploadMusicActive}
|
{#if uploadMusicActive}
|
||||||
<UploadAudioGlobalMessage game={game} gameManager={gameManager}/>
|
<UploadAudioGlobalMessage game={game} gameManager={gameManager} bind:handleSending={handleSendAudio}/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="footer-console-global-message">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="nes-checkbox is-dark nes-pointer" bind:checked={broadcastToWorld}>
|
||||||
|
<span>Broadcast to all rooms of the world</span>
|
||||||
|
</label>
|
||||||
|
<button class="nes-btn is-primary" on:click|preventDefault={send}>Send</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
|
||||||
|
.nes-container {
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.console-global-message {
|
||||||
|
top: 20vh;
|
||||||
|
width: 50vw;
|
||||||
|
height: 50vh;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
pointer-events: auto;
|
||||||
|
|
||||||
|
div.menu-console-global-message {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
max-width: 180px;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
background-color: #333333;
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 136px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main-console-global-message {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
background-color: #333333;
|
||||||
|
|
||||||
|
div.title-console-global-message {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
height: 50px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
color: whitesmoke;
|
||||||
|
|
||||||
|
.nes-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.content-console-global-message {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
max-height: calc(100% - 120px);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.footer-console-global-message {
|
||||||
|
height: 50px;
|
||||||
|
margin-top: 10px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
label {
|
||||||
|
margin: 0;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
max-width: 30%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
import type { Quill } from "quill";
|
import type { Quill } from "quill";
|
||||||
|
|
||||||
//toolbar
|
//toolbar
|
||||||
export const toolbarOptions = [
|
const toolbarOptions = [
|
||||||
['bold', 'italic', 'underline', 'strike'], // toggled buttons
|
['bold', 'italic', 'underline', 'strike'], // toggled buttons
|
||||||
['blockquote', 'code-block'],
|
['blockquote', 'code-block'],
|
||||||
|
|
||||||
@ -40,6 +40,25 @@
|
|||||||
|
|
||||||
const MESSAGE_TYPE = AdminMessageEventTypes.admin;
|
const MESSAGE_TYPE = AdminMessageEventTypes.admin;
|
||||||
|
|
||||||
|
export const handleSending = {
|
||||||
|
sendTextMessage() {
|
||||||
|
if (gameScene == undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const text = quill.getText(0, quill.getLength());
|
||||||
|
|
||||||
|
const GlobalMessage: PlayGlobalMessageInterface = {
|
||||||
|
id: "1", // FIXME: use another ID?
|
||||||
|
message: text,
|
||||||
|
type: MESSAGE_TYPE
|
||||||
|
};
|
||||||
|
|
||||||
|
quill.deleteText(0, quill.getLength());
|
||||||
|
gameScene.connection?.emitGlobalMessage(GlobalMessage);
|
||||||
|
disableConsole();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Quill
|
//Quill
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
|
|
||||||
@ -66,31 +85,10 @@
|
|||||||
consoleGlobalMessageManagerVisibleStore.set(false);
|
consoleGlobalMessageManagerVisibleStore.set(false);
|
||||||
consoleGlobalMessageManagerFocusStore.set(false);
|
consoleGlobalMessageManagerFocusStore.set(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SendTextMessage() {
|
|
||||||
if (gameScene == undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const text = quill.getText(0, quill.getLength());
|
|
||||||
|
|
||||||
const GlobalMessage: PlayGlobalMessageInterface = {
|
|
||||||
id: "1", // FIXME: use another ID?
|
|
||||||
message: text,
|
|
||||||
type: MESSAGE_TYPE
|
|
||||||
};
|
|
||||||
|
|
||||||
quill.deleteText(0, quill.getLength());
|
|
||||||
gameScene.connection?.emitGlobalMessage(GlobalMessage);
|
|
||||||
disableConsole();
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<section class="section-input-send-text">
|
<section class="section-input-send-text">
|
||||||
<div class="input-send-text" bind:this={INPUT_CONSOLE_MESSAGE}></div>
|
<div class="input-send-text" bind:this={INPUT_CONSOLE_MESSAGE}></div>
|
||||||
<div class="footer-btn-action">
|
|
||||||
<button class="nes-btn is-primary" on:click|preventDefault={SendTextMessage}>Send</button>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,22 +15,22 @@
|
|||||||
export let gameManager: GameManager;
|
export let gameManager: GameManager;
|
||||||
|
|
||||||
let gameScene = gameManager.getCurrentGameScene(game.findAnyScene());
|
let gameScene = gameManager.getCurrentGameScene(game.findAnyScene());
|
||||||
let fileinput: HTMLInputElement;
|
let fileInput: HTMLInputElement;
|
||||||
let filename: string;
|
let fileName: string;
|
||||||
let filesize: string;
|
let fileSize: string;
|
||||||
let errorfile: boolean;
|
let errorFile: boolean;
|
||||||
|
|
||||||
const AUDIO_TYPE = AdminMessageEventTypes.audio;
|
const AUDIO_TYPE = AdminMessageEventTypes.audio;
|
||||||
|
|
||||||
|
export const handleSending = {
|
||||||
async function SendAudioMessage() {
|
async sendAudioMessage() {
|
||||||
if (gameScene == undefined) {
|
if (gameScene == undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const inputAudio = HtmlUtils.getElementByIdOrFail<HTMLInputElement>("input-send-audio");
|
const inputAudio = HtmlUtils.getElementByIdOrFail<HTMLInputElement>("input-send-audio");
|
||||||
const selectedFile = inputAudio.files ? inputAudio.files[0] : null;
|
const selectedFile = inputAudio.files ? inputAudio.files[0] : null;
|
||||||
if (!selectedFile) {
|
if (!selectedFile) {
|
||||||
errorfile = true;
|
errorFile = true;
|
||||||
throw 'no file selected';
|
throw 'no file selected';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,6 +47,7 @@
|
|||||||
gameScene.connection?.emitGlobalMessage(GlobalMessage);
|
gameScene.connection?.emitGlobalMessage(GlobalMessage);
|
||||||
disableConsole();
|
disableConsole();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function inputAudioFile(event: Event) {
|
function inputAudioFile(event: Event) {
|
||||||
const eventTarget : EventTargetFiles = (event.target as EventTargetFiles);
|
const eventTarget : EventTargetFiles = (event.target as EventTargetFiles);
|
||||||
@ -59,9 +60,9 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = file.name;
|
fileName = file.name;
|
||||||
filesize = getFileSize(file.size);
|
fileSize = getFileSize(file.size);
|
||||||
errorfile = false;
|
errorFile = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFileSize(number: number) {
|
function getFileSize(number: number) {
|
||||||
@ -84,15 +85,46 @@
|
|||||||
|
|
||||||
|
|
||||||
<section class="section-input-send-audio">
|
<section class="section-input-send-audio">
|
||||||
<img src="{uploadFile}" alt="Upload a file" on:click|preventDefault={ () => {fileinput.click();}}>
|
<img class="nes-pointer" src="{uploadFile}" alt="Upload a file" on:click|preventDefault={ () => {fileInput.click();}}>
|
||||||
{#if filename !== undefined}
|
{#if fileName !== undefined}
|
||||||
<label for="input-send-audio">{filename} : {filesize}</label>
|
<p>{fileName} : {fileSize}</p>
|
||||||
{/if}
|
{/if}
|
||||||
{#if errorfile}
|
{#if errorFile}
|
||||||
<p class="err">No file selected. You need to upload a file before sending it.</p>
|
<p class="err">No file selected. You need to upload a file before sending it.</p>
|
||||||
{/if}
|
{/if}
|
||||||
<input type="file" id="input-send-audio" bind:this={fileinput} on:change={(e) => {inputAudioFile(e)}}>
|
<input type="file" id="input-send-audio" bind:this={fileInput} on:change={(e) => {inputAudioFile(e)}}>
|
||||||
<div class="footer-btn-action">
|
|
||||||
<button class="nes-btn is-primary" on:click|preventDefault={SendAudioMessage}>Send</button>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
section.section-input-send-audio {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
height: 100%;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
img {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
|
||||||
|
max-height: 80%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
|
||||||
|
margin-bottom: 5px;
|
||||||
|
|
||||||
|
color: whitesmoke;
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
|
&.err {
|
||||||
|
color: #ce372b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -3,4 +3,4 @@
|
|||||||
@import "style";
|
@import "style";
|
||||||
@import "mobile-style.scss";
|
@import "mobile-style.scss";
|
||||||
@import "fonts.scss";
|
@import "fonts.scss";
|
||||||
@import "svelte-style.scss";
|
@import "inputTextGlobalMessageSvelte-Style.scss";
|
||||||
|
24
front/style/inputTextGlobalMessageSvelte-Style.scss
Normal file
24
front/style/inputTextGlobalMessageSvelte-Style.scss
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
//InputTextGlobalMessage
|
||||||
|
section.section-input-send-text {
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.ql-toolbar{
|
||||||
|
max-height: 100px;
|
||||||
|
|
||||||
|
background: whitesmoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.input-send-text{
|
||||||
|
height: auto;
|
||||||
|
max-height: calc(100% - 100px);
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
color: whitesmoke;
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
|
.ql-editor.ql-blank::before {
|
||||||
|
color: whitesmoke;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,121 +0,0 @@
|
|||||||
//Contains all styles not unique to a svelte component.
|
|
||||||
|
|
||||||
//ConsoleGlobalMessage
|
|
||||||
div.console-global-message.nes-container {
|
|
||||||
pointer-events: auto;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
top: 20vh;
|
|
||||||
width: 50vw;
|
|
||||||
height: 50vh;
|
|
||||||
padding: 0;
|
|
||||||
background-color: #333333;
|
|
||||||
|
|
||||||
.console-global-message-main {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
text-align: center;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-global-message-close {
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div.console-global-message-content {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row;
|
|
||||||
height: calc(100% - (36px + 20px));
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.console-global-message-menu {
|
|
||||||
flex: 0 1 auto;
|
|
||||||
|
|
||||||
button {
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-global-message-main-input {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
width: 95%;
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-right: 10px;
|
|
||||||
|
|
||||||
.footer-btn-action {
|
|
||||||
width: 100%;
|
|
||||||
margin: 10px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//InputTextGlobalMessage
|
|
||||||
.section-input-send-text {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
.ql-toolbar{
|
|
||||||
flex: 0 1 auto;
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-send-text{
|
|
||||||
flex: 1 1 auto;
|
|
||||||
max-height: calc(100% - 55px);
|
|
||||||
color: white;
|
|
||||||
font-size: 1rem;
|
|
||||||
|
|
||||||
.ql-editor.ql-blank::before {
|
|
||||||
color: white;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//UploadAudioGlobalMessage
|
|
||||||
.section-input-send-audio {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
img {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
height: 60%;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
cursor: url('images/cursor_pointer.png'), pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
flex: 0 1 auto;
|
|
||||||
color: white;
|
|
||||||
font-size: 1rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.err {
|
|
||||||
flex: 0 1 auto;
|
|
||||||
color: #ce372b;
|
|
||||||
font-size: 1rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#input-send-audio {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user