1
0
mirror of synced 2024-11-29 08:36:12 +03:00

Adds build files

This commit is contained in:
Justin Schroeder 2020-05-04 16:02:15 -04:00
commit 1d5606c939
11 changed files with 91 additions and 4 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -54,7 +54,9 @@ export default {
methods: { methods: {
groupItemContext (context, option, groupAttributes) { groupItemContext (context, option, groupAttributes) {
const optionAttributes = {} const optionAttributes = {}
const ctx = Object.assign({}, context, option, groupAttributes, optionAttributes) const ctx = Object.assign({}, context, option, groupAttributes, optionAttributes, !context.hasGivenName ? {
name: true
} : {})
return ctx return ctx
} }
} }

View File

@ -11,6 +11,7 @@ export default {
type: this.type, type: this.type,
value: this.value, value: this.value,
name: this.nameOrFallback, name: this.nameOrFallback,
hasGivenName: this.hasGivenName,
classification: this.classification, classification: this.classification,
component: this.component, component: this.component,
id: this.id || this.defaultId, id: this.id || this.defaultId,
@ -31,6 +32,7 @@ export default {
}, },
// Used in sub-context // Used in sub-context
nameOrFallback, nameOrFallback,
hasGivenName,
typeContext, typeContext,
elementAttributes, elementAttributes,
logicalLabelPosition, logicalLabelPosition,
@ -77,11 +79,17 @@ function typeContext () {
*/ */
function elementAttributes () { function elementAttributes () {
const attrs = Object.assign({}, this.localAttributes) const attrs = Object.assign({}, this.localAttributes)
// pass the ID prop through to the root element
if (this.id) { if (this.id) {
attrs.id = this.id attrs.id = this.id
} else { } else {
attrs.id = this.defaultId attrs.id = this.defaultId
} }
// pass an explicitly given name prop through to the root element
if (this.hasGivenName) {
attrs.name = this.name
}
return attrs return attrs
} }
@ -152,6 +160,13 @@ function nameOrFallback () {
return this.name return this.name
} }
/**
* determine if an input has a user-defined name
*/
function hasGivenName () {
return typeof this.name !== 'boolean'
}
/** /**
* Determines if this formulate element is v-modeled or not. * Determines if this formulate element is v-modeled or not.
*/ */

View File

@ -19,6 +19,16 @@ describe('FormulateInputBox', () => {
expect(wrapper.contains(FormulateInputBox)).toBe(true) expect(wrapper.contains(FormulateInputBox)).toBe(true)
}) })
it('passes an explicitly given name prop through to the root radio elements', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'radio', name: 'foo', options: {a: '1', b: '2'} } })
expect(wrapper.findAll('input[name="foo"]')).toHaveLength(2)
})
it('passes an explicitly given name prop through to the root checkbox elements', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'checkbox', name: 'foo', options: {a: '1', b: '2'} } })
expect(wrapper.findAll('input[name="foo"]')).toHaveLength(2)
})
it('box inputs properly process options object in context library', () => { it('box inputs properly process options object in context library', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'checkbox', options: {a: '1', b: '2'} } }) const wrapper = mount(FormulateInput, { propsData: { type: 'checkbox', options: {a: '1', b: '2'} } })
expect(Array.isArray(wrapper.vm.context.options)).toBe(true) expect(Array.isArray(wrapper.vm.context.options)).toBe(true)

View File

@ -78,3 +78,13 @@ test('type "button" renders slot inside button', () => {
}) })
expect(wrapper.find('button > span').html()).toBe('<span>My custom slot</span>') expect(wrapper.find('button > span').html()).toBe('<span>My custom slot</span>')
}) })
it('passes an explicitly given name prop through to the root element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'button', name: 'foo' } })
expect(wrapper.find('button[name="foo"]').exists()).toBe(true)
})
it('additional context does not bleed through to button input attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'button' } } )
expect(Object.keys(wrapper.find('button').attributes())).toEqual(["type", "id"])
})

View File

@ -37,6 +37,16 @@ describe('FormulateInputFile', () => {
expect(file.attributes('data-has-preview')).toBe('true') expect(file.attributes('data-has-preview')).toBe('true')
}) })
it('passes an explicitly given name prop through to the root element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'image', name: 'foo' } })
expect(wrapper.find('input[name="foo"]').exists()).toBe(true)
})
it('additional context does not bleed through to file input attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'image' } } )
expect(Object.keys(wrapper.find('input[type="file"]').attributes())).toEqual(["type", "id"])
})
/** /**
* =========================================================================== * ===========================================================================
* Currently there appears to be no way to properly mock upload data in * Currently there appears to be no way to properly mock upload data in

View File

@ -42,4 +42,14 @@ describe('FormulateInputSelect', () => {
expect(options.length).toBe(1) expect(options.length).toBe(1)
expect(options.at(0).attributes('disabled')).toBeTruthy() expect(options.at(0).attributes('disabled')).toBeTruthy()
}) })
it('passes an explicitly given name prop through to the root element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'select', options: [], name: 'foo' } })
expect(wrapper.find('select[name="foo"]').exists()).toBe(true)
})
it('additional context does not bleed through to text select attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'select' } } )
expect(Object.keys(wrapper.find('select').attributes())).toEqual(["id"])
})
}) })

View File

@ -25,4 +25,14 @@ describe('FormulateInputSlider', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'range', showValue: 'true', value: '15', min: '0', max: '100' } }) const wrapper = mount(FormulateInput, { propsData: { type: 'range', showValue: 'true', value: '15', min: '0', max: '100' } })
expect(wrapper.find('.formulate-input-element-range-value').text()).toBe('15') expect(wrapper.find('.formulate-input-element-range-value').text()).toBe('15')
}) })
it('passes an explicitly given name prop through to the root element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'range', name: 'foo' } })
expect(wrapper.find('input[name="foo"]').exists()).toBe(true)
})
it('additional context does not bleed through to range input attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'range' } } )
expect(Object.keys(wrapper.find('input[type="range"]').attributes())).toEqual(["type", "id"])
})
}) })

View File

@ -83,6 +83,26 @@ describe('FormulateInputText', () => {
expect(wrapper.find(`input[id="${wrapper.vm.context.attributes.id}"]`).exists()).toBe(true) expect(wrapper.find(`input[id="${wrapper.vm.context.attributes.id}"]`).exists()).toBe(true)
}) })
it('passes an explicitly given name prop through to the root text element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'text', name: 'foo' } })
expect(wrapper.find('input[name="foo"]').exists()).toBe(true)
})
it('passes an explicitly given name prop through to the root textarea element', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'textarea', name: 'foo' } })
expect(wrapper.find('textarea[name="foo"]').exists()).toBe(true)
})
it('additional context does not bleed through to text input attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'text' } } )
expect(Object.keys(wrapper.find('input[type="text"]').attributes())).toEqual(["type", "id"])
})
it('additional context does not bleed through to textarea input attributes', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'textarea' } } )
expect(Object.keys(wrapper.find('textarea').attributes())).toEqual(["id"])
})
it('doesnt automatically add a label', () => { it('doesnt automatically add a label', () => {
const wrapper = mount(FormulateInput, { propsData: { type: 'text' } }) const wrapper = mount(FormulateInput, { propsData: { type: 'text' } })
expect(wrapper.find('label').exists()).toBe(false) expect(wrapper.find('label').exists()).toBe(false)