diff --git a/plugin.js b/plugin.js index c8a9d5a..b87237f 100644 --- a/plugin.js +++ b/plugin.js @@ -14,25 +14,36 @@ if (/^magnet:/.test(p)) return p; return base() + p.replace(/^\/+/, ''); } + function esc(s) { + return String(s == null ? '' : s) + .replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + } - // ---- Компонент: список фильмов ---- + // ---------- Компонент: список фильмов ---------- Lampa.Component.add(PLUGIN.name, { create: function () { var comp = this; - comp.activity.loader(true); - var content = comp.activity.render().find('.main__content'); - content.html('
'); + this.activity.render(); + this.activity.ready(function () { + var content = comp.activity.render().find('.main__content'); + content.html('
'); + comp.activity.loader(true); - 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('Не удалось загрузить каталог'); - }); + fetch(base() + 'movies/catalog.json') + .then(function (r) { return r.json(); }) + .then(function (data) { + comp.activity.loader(false); + var movies = (data && data.movies) || []; + console.log('[mymovies] loaded', movies.length, 'films'); + renderMovies(content.find('.movies-grid'), movies); + }) + .catch(function (err) { + comp.activity.loader(false); + console.error('[mymovies] catalog load error', err); + Lampa.Noty.show('Не удалось загрузить каталог'); + }); + }); } }); @@ -40,12 +51,13 @@ grid.empty(); if (!movies.length) { grid.append('
Каталог пуст
'); + Lampa.Selector.update(); return; } movies.forEach(function (m) { - var card = $('
'); + var card = $('
'); card.append($('').attr('src', resolve(m.poster || m.cover)).attr('loading', 'lazy')); - card.append($('
').text(m.title)); + card.append($('
').text(m.title || m.id)); if (m.year) card.append($('
').text(m.year)); card.on('hover:enter', function () { openMovie(m); }); grid.append(card); @@ -53,29 +65,33 @@ Lampa.Selector.update(); } - // ---- Компонент: детали фильма ---- + // ---------- Компонент: детали фильма ---------- var selected = null; Lampa.Component.add(PLUGIN.name + '_detail', { create: function () { + var comp = this; 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 += '
'; + this.activity.render(); + this.activity.ready(function () { + 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(); + var content = comp.activity.render().find('.main__content'); + content.html(html); + content.find('[data-act="play"]').on('hover:enter', function () { play(m); }); + Lampa.Selector.update(); + }); } }); @@ -100,23 +116,13 @@ }); } - function esc(s) { - return String(s == null ? '' : s) - .replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); - } - - // ---- Пункт меню ---- - // bylampa строит главное меню из menu_items и ПЕРЕД отрисовкой шлёт - // событие 'menu:start' с body = jQuery-объект меню (.menu__list внутри). - // Добавляем
  • в .menu__list. Защита от дублей — проверка по DOM. function addMenuItem() { var list = $('.menu__list'); if (!list.length) return; - if (list.find('[data-action="' + PLUGIN.name + '"]').length) return; // уже есть в этом меню - if (added) return; // уже добавляли когда-либо - added = true; + if ($('[data-action="' + PLUGIN.name + '"]').length) return; // уже в DOM var item = $( '