From 38632479c9b66f48b4540a29e806e4fa69a0feaa Mon Sep 17 00:00:00 2001 From: Hermes Date: Sat, 8 Aug 2026 12:37:02 +0200 Subject: [PATCH] fix: render component via Lampa.Layer (official iptv pattern), create() returns render() --- plugin.js | 58 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/plugin.js b/plugin.js index ee14574..f88e017 100644 --- a/plugin.js +++ b/plugin.js @@ -21,11 +21,15 @@ } // ---------- Компонент: список фильмов ---------- + // Паттерн из официального iptv-плагина Lampa: + // create() возвращает this.render(); render() строит html и выводит через Lampa.Layer. Lampa.Component.add(PLUGIN.name, { create: function () { + return this.render(); + }, + render: function () { var comp = this; - var content = comp.activity.render().find('.main__content'); - content.html('
'); + var html = $('
'); comp.activity.loader(true); fetch(base() + 'movies/catalog.json') @@ -37,14 +41,19 @@ comp.activity.loader(false); var movies = (data && data.movies) || []; console.log('[mymovies] loaded', movies.length, 'films'); - renderMovies(content.find('.movies-grid'), movies); + renderMovies(html.find('.movies-grid'), movies); + Lampa.Layer.update(html); + Lampa.Layer.visible(html); }) .catch(function (err) { comp.activity.loader(false); console.error('[mymovies] catalog error', err); - content.find('.movies-grid').html('
Ошибка загрузки каталога
'); - Lampa.Noty.show('Не удалось загрузить каталог'); + html.find('.movies-grid').html('
Ошибка загрузки каталога
'); + Lampa.Layer.update(html); + Lampa.Layer.visible(html); }); + + return html; } }); @@ -70,27 +79,32 @@ var selected = null; Lampa.Component.add(PLUGIN.name + '_detail', { create: function () { + return this.render(); + }, + render: function () { var comp = this; var m = selected; - if (!m) { Lampa.Activity.back(); return; } - var content = comp.activity.render().find('.main__content'); + 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 html = $('
'); + html.append('
'); + html.append(''); + var info = $('
').append($('

').text(m.title)); + if (m.original_title) info.append($('
').text(m.original_title)); + if (m.year) info.append($('
').text(m.year)); + if (m.genre && m.genre.length) info.append($('
').text(m.genre.join(', '))); + if (m.rating) info.append($('
').text('★ ' + m.rating)); + if (m.description) info.append($('
').text(m.description)); + html.append(info); + html.append('
'); + html.append($('
').append( + $('
').text('Смотреть') + )); - content.html(html); - content.find('[data-act="play"]').on('hover:enter', function () { play(m); }); - Lampa.Selector.update(); + html.find('[data-act="play"]').on('hover:enter', function () { play(m); }); + Lampa.Layer.update(html); + Lampa.Layer.visible(html); + return html; } });