Changeset 35383


Ignore:
Timestamp:
2021-09-14T10:55:28+12:00 (3 years ago)
Author:
davidb
Message:

Implement basic transcription editing

Location:
main/trunk/model-interfaces-dev/atea/korero-maori-asr
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/package-lock.json

    r35356 r35383  
    1193811938      }
    1193911939    },
    11940     "vue-contenteditable": {
    11941       "version": "3.0.4",
    11942       "resolved": "https://registry.npmjs.org/vue-contenteditable/-/vue-contenteditable-3.0.4.tgz",
    11943       "integrity": "sha512-CmtqT4zHQwLoJEyNVaXUjjUFPUVYlXXBHfSbRCHCUjODMqrn6L293LM1nc1ELx8epitZZvecTfIqOLlSzB3d+w=="
    11944     },
    1194511940    "vue-eslint-parser": {
    1194611941      "version": "7.10.0",
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/package.json

    r35355 r35383  
    1111    "core-js": "^3.16.4",
    1212    "vue": "^3.0.0",
    13     "vue-contenteditable": "^3.0.4",
    1413    "vuex": "^4.0.2"
    1514  },
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/components/TranscriptionItemEditor.vue

    r35382 r35383  
    3131        <ul class="list-view" v-if="displayMode == 'editor'">
    3232            <li v-for="(word, index) in words" :key="word.id" class="word-container">
    33                 <contenteditable class="editor-word" tag="span" v-model="word.word" :noNL="true" :noHTML="true" @input="onEditorInput($event, index)" />
     33                <input :size="word.word.length <= 1 ? 1 : word.word.length - 1" :ref="word.id"
     34                    class="editor-word" v-model="word.word" type="text"
     35                    @input="onEditorInput($event, index)" @focusout="onEditorFocusOut(index)" />
    3436                <span>&nbsp;</span>
    3537            </li>
    3638        </ul>
    37         <!-- <ul class="list-view" v-if="displayMode == 'editor'">
    38             <li v-for="(word, index) in transcription.words" class="transcription__word-container">
    39                 <span class="transcription__word" v-on:input="onEditorWordInput($event, word.word)" contenteditable="true" v-text="word.word" />
    40                 <input type="text" v-bind:size="word.word.length == 1 ? 1 : word.word.length - 1" v-model="word.word"
    41                     class="transcription__word" v-on:input="onEditorWordInput($event, index, id)" />
    42                 <span>&nbsp;</span>
    43             </li>
    44         </ul> -->
    4539    </div>
    4640</template>
     
    7266.editor-word {
    7367    border: 1px solid black;
     68    border-radius: 2px;
    7469    padding: 2px;
    75     min-width: 5px;
     70    font-family: inherit;
     71    font-size: 1rem;
    7672}
    7773</style>
     
    7975<script>
    8076import { mapState } from "vuex";
    81 import contenteditable from "vue-contenteditable"
    8277import { TranscriptionViewModel } from "../main";
    8378import Util from "../js/Util";
     
    111106export default {
    112107    name: "TranscriptionItemEditor",
    113     components: {
    114         contenteditable
    115     },
    116108    props: {
    117109        transcription: TranscriptionViewModel
     
    140132         */
    141133        onEditorInput(event, index) {
     134            console.log(event);
     135
    142136            /** @type {Word} */
    143137            const word = this.words[index];
     138
    144139            if (event.inputType === "insertText") {
    145140                if (event.data === " ") {
    146141                    word.word = word.word.replace(" ", "");
    147                     // TODO: Proper timing
    148                     this.words.splice(index + 1, 0, new Word("", word.startTime, word.endTime));
     142
     143                    // TODO: Proper timing metadata
     144                    const newWord = new Word("", word.startTime, word.endTime);
     145                    this.words.splice(index + 1, 0, newWord);
     146
     147                    // We have to give the element some time to render, even though the ref is registered immediately
     148                    setTimeout(() => this.$refs[newWord.id].focus(), 50);
    149149                }
    150150            }
    151             console.log(index);
     151        },
     152        onEditorFocusOut(index) {
     153            if (this.words[index].word === "") {
     154                this.words.splice(index, 1);
     155            }
    152156        }
    153157    },
     
    192196    for (const metadata of transcription.metadata) {
    193197        if (metadata.char === " ") {
    194             words.push({ word: lastWord, startTime: currStartTime, endTime: metadata.start_time, shouldHighlight: false });
     198            words.push(new Word(lastWord, currStartTime, metadata.start_time));
    195199
    196200            lastWord = "";
     
    204208    // Push the last word, as most transcriptions will not end in a space (hence breaking the above algorithm)
    205209    if (lastWord.length > 0) {
    206         words.push(new Word(lastWord, currStartTime, transcription.metadata[transcription.metadata.length - 1].start_time));
     210        const newWord = new Word(lastWord, currStartTime, transcription.metadata[transcription.metadata.length - 1].start_time)
     211        words.push(newWord);
    207212    }
    208213
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/styles/_material.scss

    r35355 r35383  
    1010:root {
    1111    --primary-bg-color-l1: #249ccf;
    12     --primary-bg-color: #2191c0;
    13     --primary-bg-color-d1: #2785ad;
    14     --primary-bg-color-d2: #227497;
     12    --primary-bg-color: #21c05e; // #21c05e
    1513
    1614    --primary-fg-color: white;
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/styles/theme.scss

    r35355 r35383  
    66@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono&family=Roboto:wght@400;700&display=swap');
    77@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
     8
     9*,
     10*::before,
     11*::after {
     12    box-sizing: border-box;
     13}
    814
    915:root {
Note: See TracChangeset for help on using the changeset viewer.