import defaults from './defaults'; import { hash_key } from './utils'; import { TomOption, TomSettings, RecursivePartial } from './types/index'; import { iterate } from '@orchidjs/sifter/lib/utils'; import { TomInput } from './types/index'; export default function getSettings( input:TomInput, settings_user:RecursivePartial):TomSettings{ var settings:TomSettings = Object.assign({}, defaults, settings_user); var attr_data = settings.dataAttr; var field_label = settings.labelField; var field_value = settings.valueField; var field_disabled = settings.disabledField; var field_optgroup = settings.optgroupField; var field_optgroup_label = settings.optgroupLabelField; var field_optgroup_value = settings.optgroupValueField; var tag_name = input.tagName.toLowerCase(); var placeholder = input.getAttribute('placeholder') || input.getAttribute('data-placeholder'); if (!placeholder && !settings.allowEmptyOption) { let option = input.querySelector('option[value=""]'); if( option ){ placeholder = option.textContent; } } var settings_element:{ placeholder : null|string, options : TomOption[], optgroups : TomOption[], items : string[], maxItems : null|number, } = { placeholder : placeholder, options : [], optgroups : [], items : [], maxItems : null, }; /** * Initialize from a element. * */ var init_textbox = () => { const data_raw = input.getAttribute(attr_data); if (!data_raw) { var value = input.value.trim() || ''; if (!settings.allowEmptyOption && !value.length) return; const values = value.split(settings.delimiter); iterate( values, (value) => { const option:TomOption = {}; option[field_label] = value; option[field_value] = value; settings_element.options.push(option); }); settings_element.items = values; } else { settings_element.options = JSON.parse(data_raw); iterate( settings_element.options, (opt) => { settings_element.items.push(opt[field_value]); }); } }; if (tag_name === 'select') { init_select(); } else { init_textbox(); } return Object.assign( {}, defaults, settings_element, settings_user) as TomSettings; };