import Component from '@ember/component'; import {action, computed} from '@ember/object'; import {kgStyle} from '../helpers/kg-style'; import {inject as service} from '@ember/service'; export default Component.extend({ koenigUi: service(), tagName: 'figcaption', classNameBindings: ['figCaptionClass'], alt: '', placeholder: '', update() {}, addParagraphAfterCard() {}, moveCursorToNextSection() {}, moveCursorToPrevSection() {}, figCaptionClass: computed(function () { return `${kgStyle(['figcaption'])} w-100 relative`; }), didInsertElement() { this._super(...arguments); this.element.querySelector('input').focus(); }, willDestroyElement() { this._super(...arguments); this.koenigUi.captionLostFocus(this); }, onInput: action(function (event) { this.update(event.target.value); }), onKeydown: action(function (event) { let {selectionStart, selectionEnd, value} = event.target; let noSelection = selectionStart === selectionEnd; let {altKey, ctrlKey, metaKey, shiftKey} = event; let hasModifier = altKey || ctrlKey || metaKey || shiftKey; if (hasModifier) { return; } switch (event.key) { case 'Enter': event.preventDefault(); event.target.blur(); this.addParagraphAfterCard(); break; case 'Escape': event.target.blur(); break; case 'ArrowUp': case 'ArrowLeft': if (noSelection && selectionStart === 0) { event.preventDefault(); event.target.blur(); this.moveCursorToPrevSection(); } break; case 'ArrowRight': case 'ArrowDown': if (noSelection && selectionEnd === value.length) { event.preventDefault(); event.target.blur(); this.moveCursorToNextSection(); } break; default: break; } }) });