91 lines
2.7 KiB
JavaScript
91 lines
2.7 KiB
JavaScript
ВыборныйСписок = function(элемент, настройки)
|
||
{
|
||
// Конструктор.
|
||
this.отклик = {};
|
||
if (!настройки)
|
||
{
|
||
настройки = {
|
||
"макет": {
|
||
"элемент": `
|
||
<li id="%id%">
|
||
<a id="%id%-ссылка">%название%</a>
|
||
</li>
|
||
`,
|
||
},
|
||
};
|
||
}
|
||
|
||
this.задатьЗаголовок = (заголовок) =>
|
||
{
|
||
this.заголовок = заголовок;
|
||
this.__пересобрать();
|
||
};
|
||
|
||
this.задатьСписок = (список) =>
|
||
{
|
||
this.список = список;
|
||
this.__пересобрать();
|
||
};
|
||
|
||
this.очиститьВыбор = () =>
|
||
{
|
||
for (var номер in this.список)
|
||
{
|
||
var id = `${элемент.id}-${номер}`;
|
||
$(`#${id}`).removeClass("uk-active");
|
||
}
|
||
};
|
||
|
||
this.выбратьЭлемент = (номер) =>
|
||
{
|
||
this.очиститьВыбор();
|
||
$(`#${элемент.id}-${номер}`).addClass("uk-active");
|
||
};
|
||
|
||
this.__пересобрать = () =>
|
||
{
|
||
this.__задатьЗаголовокИСписок();
|
||
this.__отслеживатьВыбор();
|
||
}
|
||
|
||
this.__задатьЗаголовокИСписок = () =>
|
||
{
|
||
var содержимое = "";
|
||
for (var номер in this.список)
|
||
{
|
||
var название = this.список[номер];
|
||
var id = `${элемент.id}-${номер}`;
|
||
var пункт = настройки.макет.элемент
|
||
.replace(/%название%/g, название)
|
||
.replace(/%id%/g, id)
|
||
;
|
||
содержимое += пункт;
|
||
}
|
||
|
||
if (this.заголовок && this.заголовок.length)
|
||
{
|
||
содержимое = `
|
||
<li class="uk-nav-header">${this.заголовок}</li>
|
||
${содержимое}
|
||
`;
|
||
}
|
||
|
||
элемент.innerHTML = содержимое;
|
||
};
|
||
|
||
this.__отслеживатьВыбор = () =>
|
||
{
|
||
var тут = this;
|
||
for (var номер in this.список)
|
||
{
|
||
var id = `${элемент.id}-${номер}`;
|
||
const номерПункта = номер;
|
||
$(`#${id}-ссылка`).click(function() {
|
||
if (тут.отклик && тут.отклик.выбор)
|
||
{
|
||
тут.отклик.выбор(номерПункта);
|
||
}
|
||
});
|
||
}
|
||
};
|
||
}; |