').text(m.year));
card.on('hover:enter', function () { openMovie(m); });
grid.append(card);
});
Lampa.Selector.update();
}
// ---- Компонент: детали фильма ----
var selected = null;
Lampa.Component.add(PLUGIN.name + '_detail', {
create: function () {
var m = selected;
if (!m) { Lampa.Activity.back(); return; }
var html = '
';
html += '
';
html += '
 + ')
';
html += '
' + esc(m.title) + '
';
if (m.original_title) html += '
' + esc(m.original_title) + '
';
if (m.year) html += '
' + m.year + '
';
if (m.genre && m.genre.length) html += '
' + m.genre.join(', ') + '
';
if (m.rating) html += '
★ ' + m.rating + '
';
if (m.description) html += '
' + esc(m.description) + '
';
html += '
';
html += '
';
html += '
';
var content = this.activity.render().find('.main__content');
content.html(html);
content.find('[data-act="play"]').on('hover:enter', function () { play(m); });
Lampa.Selector.update();
}
});
function openMovie(m) {
selected = m;
Lampa.Activity.push({
url: '',
component: PLUGIN.name + '_detail',
title: m.title,
page: m.title
});
}
function play(m) {
var url = m.magnet ? m.magnet : resolve(m.torrent);
Lampa.Player.play({
url: url,
title: m.title,
img: resolve(m.poster || m.cover),
season: 0,
episode: 0
});
}
function esc(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}
// ---- Пункт меню ----
// bylampa строит главное меню из массива menu_items и ПЕРЕД отрисовкой
// шлёт событие 'menu:start' с body = jQuery-объект меню (.menu__list внутри).
// Правильный способ добавить пункт — append'ить
в .menu__list при каждой сборке.
function addMenuItem() {
var list = $('.menu__list');
if (!list.length) return;
if (list.find('[data-action="' + PLUGIN.name + '"]').length) return; // уже добавлен
var item = $(
''
);
item.on('hover:enter', function () {
Lampa.Activity.push({
url: '',
component: PLUGIN.name,
title: PLUGIN.title,
page: PLUGIN.title
});
});
list.append(item);
Lampa.Selector.update();
}
function start() {
// 1) подписываемся на сборку меню (срабатывает при каждом открытии)
Lampa.Listener.follow('menu', function (e) {
if (e.type === 'start') {
setTimeout(addMenuItem, 50);
}
});
// 2) если меню уже отрисовано в DOM — добавляем сразу
addMenuItem();
}
// Стартуем когда Lampa готова (или сразу, если уже готова)
if (window.Lampa && Lampa.Listener && Lampa.Activity) {
start();
Lampa.Listener.follow('app', function (e) {
if (e.type === 'ready') start();
});
} else {
document.addEventListener('lampa', start);
}
})();