altinn-designsystem
Version:
Altinn Design system based on Pattern Lab.
92 lines (83 loc) • 3.37 kB
JavaScript
// Hard-coded data, should be replaced with JSON
var availableTags = [
{ label: '1. ACC Security level 2 MAG' },
{ label: '2. Corres test 250116' },
{ label: '3. PSA Skatteoppgjør personlig' },
{ label: '4. RF-1400 Melding om flytting innenlands' },
{ label: '5. Aksjeoppgaven 2014' },
{ label: '6. Et veldig langt punkt i lista som bør gå over alle bredder og grenser, men samtidig oppføre seg riktig i layout. Se så lang tekst dette her er.' }
];
// Hard-coded texts, should be replaced with custom strings
var title = 'Vanligste skjema og tjenester i din organisasjon';
var numberOfResultsLabel = ' treff. Bruk pil opp og pil ned for å navigere i resultatene.';
var noResultsLabel = 'Ingen treff';
var moreThanMaxLabel = 'Listen viser kun de første 100 treff. Vennligst begrens søket ditt';
var searchWithAutocomplete = function() {
$.widget('custom.catcomplete', $.ui.autocomplete, ({
_create: function() {
this._super();
this.widget().menu('option', 'items', '> :not(.a-js-autocomplete-header)');
$('.ui-helper-hidden-accessible').addClass('sr-only');
},
_renderMenu: function(ul, items) {
var that = this;
var iLength = items.length;
$.each(items, function(index, item) {
var li = that._renderItemData(ul, item);
li.attr('role', 'menu');
li.addClass('a-dotted');
li.children().first().attr('role', 'button');
});
if (iLength === availableTags.length) {
ul.prepend('<li class=\'a-js-autocomplete-header a-dotted\'>' + title + '</li>');
} else if (!items[0].isNoResultsLabel) {
ul.prepend('<li class=\'a-js-autocomplete-header a-dotted\'>' + iLength + ' treff </li>');
} else {
$('.ui-autocomplete').children().first().addClass('a-js-autocomplete-header');
}
if (iLength >= 3) {
ul.append('<li class=\'a-js-autocomplete-header a-dotted a-info\'>' + moreThanMaxLabel + '</li>');
}
}
}));
$('.a-js-autocomplete').catcomplete({
// delay: 200, // set appropriate delay for ajax call
source: availableTags,
appendTo: '.a-autocomplete-container',
minLength: 0,
classes: {
'ui-autocomplete': 'a-list',
'ui-menu-item': 'a-dotted'
},
open: function(event, ui) {
$('.ui-autocomplete').removeAttr('style'); // remove inline positioning and display of amount results
$('.ui-autocomplete .ui-menu-item').not(':first-of-type').addClass('a-clickable');
},
messages: {
noResults: noResultsLabel,
results: function(count) {
if (count === availableTags.length) {
return title + '. ' + count + ' ' + numberOfResultsLabel;
}
return count + ' ' + numberOfResultsLabel;
}
},
response: function(event, ui) {
var el;
if (ui.content.length === 0) {
el = {
isNoResultsLabel: true,
label: noResultsLabel,
title: noResultsLabel
};
ui.content.push(el);
}
}
}).bind('click', function(e) { // TODO should also open on tab focus? issue 3766
if ($(this).catcomplete('widget').is(':visible')) {
$(this).catcomplete('close');
} else {
$(this).catcomplete('search', $(this).val());
}
});
};