(function () { 'use strict'; var PLUGIN = { name: 'mymovies', title: 'Мои фильмы' }; var DEFAULT_BASE = 'https://movies-lmp-18.dynv6.net/'; function base() { var b = Lampa.Storage.get(PLUGIN.name + '_base', DEFAULT_BASE); return b.replace(/\/+$/, '') + '/'; } function resolve(p) { if (!p) return ''; if (/^https?:\/\//.test(p)) return p; if (/^magnet:/.test(p)) return p; return base() + p.replace(/^\/+/, ''); } // ---- Компонент: список фильмов ---- Lampa.Component.add(PLUGIN.name, { create: function () { var comp = this; comp.activity.loader(true); var content = comp.activity.render().find('.main__content'); content.html('
'); fetch(base() + 'movies/catalog.json') .then(function (r) { return r.json(); }) .then(function (data) { comp.activity.loader(false); renderMovies(content.find('.movies-grid'), data.movies || []); }) .catch(function () { comp.activity.loader(false); Lampa.Noty.show('Не удалось загрузить каталог'); }); } }); function renderMovies(grid, movies) { grid.empty(); if (!movies.length) { grid.append('
Каталог пуст
'); return; } movies.forEach(function (m) { var card = $('
'); card.append($('').attr('src', resolve(m.poster || m.cover)).attr('loading', 'lazy')); card.append($('
').text(m.title)); if (m.year) card.append($('
').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 внутри). // Добавляем ' ); 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() { // подписываемся на сборку меню (при каждом открытии меню) Lampa.Listener.follow('menu', function (e) { if (e.type === 'start') { setTimeout(addMenuItem, 50); } }); // если меню уже отрисовано — добавляем сразу (один раз) 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); } })();