diff --git a/src/components/DelimiterSelector.vue b/src/components/DelimiterSelector.vue index e65543a..f2b49a1 100644 --- a/src/components/DelimiterSelector.vue +++ b/src/components/DelimiterSelector.vue @@ -8,12 +8,12 @@ >
{{ getSymbolName(value) }}
@@ -33,7 +33,7 @@ @click="chooseOption(option)" class="option" > - {{option}}
{{ getSymbolName(option) }}
+
{{option}}
{{ getSymbolName(option) }}
@@ -51,9 +51,26 @@ export default { data () { return { showOptions: false, - options: [',', '\t', '|', ';', '\u001F', '\u001E'] + options: [',', '\t', ' ', '|', ';', '\u001F', '\u001E'], + filled: false, + inputValue: '' } }, + watch: { + inputValue () { + if (this.inputValue) { + this.filled = true + if (this.inputValue !== this.value) { + this.$emit('input', this.inputValue) + } + } else { + this.filled = false + } + } + }, + created () { + this.inputValue = this.value + }, methods: { getSymbolName (str) { if (!str) { @@ -61,15 +78,8 @@ export default { } return ascii[str.charCodeAt(0).toString()].name }, - onInput (event) { - const value = event.target.value - - if (value) { - this.$emit('input', value) - } - }, chooseOption (option) { - this.$emit('input', option) + this.inputValue = option this.showOptions = false }, onContainerClick (event) { @@ -78,7 +88,7 @@ export default { clear () { if (!this.disabled) { - this.$refs.delimiterInput.value = '' + this.inputValue = '' this.$refs.delimiterInput.focus() } } @@ -108,6 +118,7 @@ export default { .value .name { color: var(--color-text-light-2); cursor: default; + margin-left: 4px; } .controls { @@ -130,7 +141,6 @@ export default { .option { display: flex; align-items: center; - white-space: pre; height: 24px; padding: 0 6px; } @@ -141,27 +151,30 @@ export default { cursor: pointer; } -.option span { +.option pre { background-color: var(--color-bg-warning); - line-height: 16px; - letter-spacing: 6px; + line-height: 20px; margin-right: 6px; + tab-size: 1; + font-family: monospace; + width: 16px; + text-align: center; } input { background: var(--color-white); border: none; color: var(--color-text-base); - height: 34px; + height: 20px; + font-family: monospace; font-size: 12px; box-sizing: border-box; - width: 20px; - letter-spacing: 6px; - line-height: 37px; + width: 16px; + text-align: center; } -input::first-line { - background-color: var(--color-bg-warning); +input.filled { + background: var(--color-bg-warning); } input:focus { diff --git a/tests/components/DelimiterSelector.spec.js b/tests/components/DelimiterSelector.spec.js index eb55c74..df78c44 100644 --- a/tests/components/DelimiterSelector.spec.js +++ b/tests/components/DelimiterSelector.spec.js @@ -4,17 +4,21 @@ import DelimiterSelector from '@/components/DelimiterSelector' describe('DelimiterSelector', async () => { it('shows the name of value', async () => { - const wrapper = shallowMount(DelimiterSelector, { + let wrapper = shallowMount(DelimiterSelector, { propsData: { value: ',' } }) expect(wrapper.find('input').element.value).to.equal(',') expect(wrapper.find('.name').text()).to.equal('comma') - await wrapper.setProps({ value: '\t' }) + wrapper = shallowMount(DelimiterSelector, { + propsData: { value: '\t' } + }) expect(wrapper.find('input').element.value).to.equal('\t') expect(wrapper.find('.name').text()).to.equal('horizontal tab') - await wrapper.setProps({ value: '' }) + wrapper = shallowMount(DelimiterSelector, { + propsData: { value: '' } + }) expect(wrapper.find('input').element.value).to.equal('') expect(wrapper.find('.name').text()).to.equal('') }) @@ -90,4 +94,16 @@ describe('DelimiterSelector', async () => { await wrapper.findComponent({ name: 'drop-down-chevron' }).trigger('click') expect(wrapper.find('.options').isVisible()).to.equal(false) }) + + it('has filled class when input is not empty', async () => { + const wrapper = shallowMount(DelimiterSelector, { + propsData: { value: ',' } + }) + await wrapper.vm.$nextTick() + expect(wrapper.find('input').classes()).to.include('filled') + await wrapper.find('input').setValue('') + expect(wrapper.find('input').classes()).to.not.include('filled') + await wrapper.find('input').setValue(';') + expect(wrapper.find('input').classes()).to.include('filled') + }) })