From 383e5752a30534b02a349f4baa37d4a2ff752274 Mon Sep 17 00:00:00 2001 From: Mariotaku Date: Mon, 10 Jan 2022 19:23:46 +0900 Subject: [PATCH] updated apps pages generator --- .github/workflows/repo-sitegen.yml | 2 +- .github/workflows/sitegen-check.yml | 2 +- pelicanconf.py | 2 +- repogen/plugin.py | 35 +++++++++++++++++++++++++++-- theme/static/styles/apps.scss | 17 +++++--------- theme/templates/apps.html | 23 ++++++++++++------- 6 files changed, 56 insertions(+), 25 deletions(-) diff --git a/.github/workflows/repo-sitegen.yml b/.github/workflows/repo-sitegen.yml index 3050e50..7488b87 100644 --- a/.github/workflows/repo-sitegen.yml +++ b/.github/workflows/repo-sitegen.yml @@ -34,7 +34,7 @@ jobs: run: python3 -m pip install -r ./requirements.txt - name: Generate repository data - run: python3 -m repogen -i ./packages -o ./content -D + run: python3 -m repogen -i ./packages -o ./content -D -L - name: Generate site content run: invoke build diff --git a/.github/workflows/sitegen-check.yml b/.github/workflows/sitegen-check.yml index a2750b5..5161706 100644 --- a/.github/workflows/sitegen-check.yml +++ b/.github/workflows/sitegen-check.yml @@ -24,7 +24,7 @@ jobs: run: python3 -m pip install -r ./requirements.txt - name: '[Dry run] Generate repository data' - run: python3 -m repogen -i ./packages -o ./content -D + run: python3 -m repogen -i ./packages -o ./content -D -L - name: '[Dry run] Generate site content' run: invoke build \ No newline at end of file diff --git a/pelicanconf.py b/pelicanconf.py index 7cc8549..dc8be18 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -68,7 +68,7 @@ ('openlgtv', 'https://openlgtv.github.io/'), ) -DEFAULT_PAGINATION = 30 +DEFAULT_PAGINATION = 20 # Uncomment following line if you want document-relative URLs when developing # RELATIVE_URLS = True diff --git a/repogen/plugin.py b/repogen/plugin.py index 7939293..2f7bb35 100644 --- a/repogen/plugin.py +++ b/repogen/plugin.py @@ -1,9 +1,13 @@ import logging import os +from itertools import chain from markdown import Markdown -from pelican import signals, Readers +from more_itertools import chunked +from pelican import signals, Readers, PagesGenerator +from pelican.contents import Page from pelican.readers import BaseReader +from pelican.themes.webosbrew import pagination_data from repogen.common import parse_package_info @@ -28,7 +32,8 @@ def read(self, filename): 'status': 'hidden', 'modified': info['lastmodified'], 'manifest': info['manifest'], - 'detailIcon': info.get('detailIconUri', info['iconUri']) + 'detailIcon': info.get('detailIconUri', info['iconUri']), + 'package_info': info } return self._md.convert(info['description']), metadata @@ -38,6 +43,32 @@ def readers_init(readers: Readers): readers.reader_classes['py'] = PackageInfoReader +def add_app_indices(generator: PagesGenerator): + packages = list( + sorted(filter(lambda x: x is not None, map(lambda page: page.metadata.get('package_info', None), + chain(generator.pages, generator.hidden_pages))), + key=lambda info: info['title'].lower())) + + pages = list(chunked(packages, generator.settings['DEFAULT_PAGINATION'])) + pages_count = len(pages) + for index, items in enumerate(pages): + metadata = { + 'title': 'Apps', + 'override_save_as': 'apps/index.html' if index == 0 else f'apps/page/{index + 1}.html', + 'template': 'apps', + 'status': 'hidden', + 'packages': items, + 'pagination': pagination_data(index + 1, pages_count, apps_list_href) if pages_count > 1 else None, + } + generator.hidden_pages.append(Page('', metadata=metadata, settings=generator.settings, + source_path=f'apps-page-{index + 1}.html', context=generator.context)) + + +def apps_list_href(page): + return '/apps' if page <= 1 else f'/apps/page/{page}' + + def register(): signals.readers_init.connect(readers_init) + signals.page_generator_finalized.connect(add_app_indices) pass diff --git a/theme/static/styles/apps.scss b/theme/static/styles/apps.scss index dd43572..efdfe0c 100644 --- a/theme/static/styles/apps.scss +++ b/theme/static/styles/apps.scss @@ -1,7 +1,9 @@ +@import "variables"; + ul.apps-list { list-style-type: none; display: grid; - grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); + grid-template-columns: #{repeat(auto-fill, minmax(112px, 1fr))}; margin: 10px; padding: 0px; @@ -37,25 +39,16 @@ ul.apps-list { } } - -.apps-paginator { - text-align: center; -} - -.apps-paginator a.current { - font-weight: bold; -} - @media screen and (max-width: 320px) { ul.apps-list { - grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + grid-template-columns: #{repeat(auto-fill, minmax(80px, 1fr))}; margin: 5px; } } @media screen and (max-width: 480px) { ul.apps-list { - grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + grid-template-columns: #{repeat(auto-fill, minmax(100px, 1fr))}; margin: 5px; } } \ No newline at end of file diff --git a/theme/templates/apps.html b/theme/templates/apps.html index e65cf17..07e2128 100644 --- a/theme/templates/apps.html +++ b/theme/templates/apps.html @@ -17,14 +17,21 @@ {% block content %}

{{ page.title }}

- {% import 'translations.html' as translations with context %} - {{ translations.translations_for(page) }} - {{ page.content }} + + + {% set pagination = page.metadata.pagination %} + {% include "pagination.html" %} - {% if page.modified %} -

- Last updated: {{ page.locale_modified }} -

- {% endif %} {% endblock %}