source: main/trunk/model-interfaces-dev/atea/macron-restoration/src/components/DirectInput.vue@ 35718

Last change on this file since 35718 was 35718, checked in by cstephen, 2 years ago

Implement download support

File size: 2.3 KB
Line 
1<template>
2<div class="root">
3 <textarea class="text-input input-area" @input="onTextInput"
4 v-model="input" :placeholder="translations.get('DirectInput_InputPlaceholder')" />
5 <div class="text-container">
6 {{ output }}
7 </div>
8
9 <button class="btn-primary right-column" :disabled="!canDownload" @click="downloadAsText">Download</button>
10</div>
11</template>
12
13<style scoped lang="scss">
14.root {
15 display: grid;
16 grid-template-columns: 1fr 1fr;
17 grid-template-rows: auto auto;
18 gap: 1em;
19}
20
21.input-area {
22 resize: none;
23 min-height: 4em;
24 overflow: hidden;
25}
26
27.right-column {
28 grid-column: 2;
29}
30</style>
31
32<script>
33import { mapState } from "vuex";
34import { saveAs } from "file-saver"
35import MacronRestorationModule from "../js/MacronRestorationModule"
36
37const macroniser = new MacronRestorationModule();
38
39export default {
40 name: "DirectInput",
41 data() {
42 return {
43 input: "",
44 output: "",
45 transcribeTimeout: null,
46 waitingOnTranscribe: false
47 }
48 },
49 computed: {
50 canDownload() {
51 return this.output.length > 0 && !this.waitingOnTranscribe;
52 },
53 ...mapState({
54 translations: state => state.translations
55 })
56 },
57 watch: {
58 input() {
59 this.waitingOnTranscribe = true;
60
61 if (this.transcribeTimeout !== null) {
62 clearTimeout(this.transcribeTimeout);
63 }
64
65 this.transcribeTimeout = setTimeout(this.updateMacronisedText, 1000);
66 }
67 },
68 methods: {
69 /**
70 * Handles input on an element, and grows its height so that the text is always visible.
71 * @param {InputEvent} event The input event.
72 */
73 onTextInput(event) {
74 event.target.height = event.target.scrollHeight;
75 },
76 async updateMacronisedText() {
77 // TODO: Handle error
78 const response = await macroniser.directMacronisation(this.input);
79 this.output = response.fragment2;
80 this.waitingOnTranscribe = false;
81 },
82 downloadAsText() {
83 const blob = new Blob([ this.output ], { type: "text/plain;charset=utf-8" });
84 saveAs(blob, "output.txt");
85 }
86 }
87}
88</script>
Note: See TracBrowser for help on using the repository browser.