///
///
///
interface JQuery {
advancedSelect: any;
}
interface AdvancedSelectOptions {
onChange: () => void;
selected?: number;
placeholder?: string;
numbersOnly?: boolean;
}
(function ($: JQueryStatic) {
$.fn.advancedSelect = function (options: AdvancedSelectOptions) {
let $select = $(this);
$select.hide();
$select.on('change', options.onChange);
let selected = options.selected || $select.find('option').first().text();
if (selected == 1000000) { // tslint:disable-line
selected = $.localize('All', '~/Views/Page/Overlay/Sort.cshtml');
}
$select.val(selected);
let $dropdown = $.tmpl('Tmpl-knoema-overlay-advanced-select', {
selected: selected,
placeholder: options.placeholder || 'Enter option'
});
let $ulDropdownMenu = $dropdown.find('ul.dropdown-menu');
let $inputHolder = $dropdown.find('.custom-value-input-holder');
$dropdown.on('click', (e): void => {
if (!$(e.target).is($inputHolder) && !$(e.target).is($inputHolder.find('input'))) {
$dropdown.toggleClass('open');
}
})
$select.find('option').each(function(): void {
let value = $(this).val();
let valueToDisplay = $(this).text();
$ulDropdownMenu.append($(`
${valueToDisplay}`));
});
$dropdown.insertAfter($select);
$ulDropdownMenu.find('a').on('click', function(): boolean {
$select.val($(this).data('value'));
$dropdown.find('.selected-value').text($(this).data('display-value'));
$dropdown.removeClass('open');
$select.trigger('change');
return false;
});
// tslint:disable-next-line
$inputHolder.on('keydown blur', 'input', function(event: JQueryEventObject) {
let $input = $(event.target);
if (
//prevent second change event after $input.val('')
event.type === 'blur' ||
//backspace, delete, tab, escape preseed
//event.keyCode==46||event.keyCode==8||event.keyCode==9||event.keyCode==27||
[46, 8, 9, 27].indexOf(event.keyCode) > -1 ||
//ctrl + A pressed
(event.keyCode === 65 && event.ctrlKey) ||
//home, end, left, right pressed
(event.keyCode >= 35 && event.keyCode <= 39)
) {
return;
} else {
//numbers
if (options.numbersOnly && event.keyCode !== 13 && (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
event.preventDefault();
}
if (event.keyCode === 13 || event.type === 'blur') {
let newValue = $input.val() || $select.find('option').first().text();
$select.append(``);
$select.val(newValue);
$dropdown.find('.selected-value').text(newValue);
$dropdown.removeClass('open');
$select.trigger('change');
setTimeout((): void => {
$input.val('');
}, 100);
}
}
});
return this;
};
})(jQuery);