mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #389 from tbunnyman/issue#380
Add support for `status: hidden` in pages
This commit is contained in:
commit
ea0a964365
9 changed files with 112 additions and 3 deletions
|
|
@ -136,6 +136,10 @@ generate static pages.
|
||||||
Then, use the ``DISPLAY_PAGES_ON_MENU`` setting, which will add all the pages to
|
Then, use the ``DISPLAY_PAGES_ON_MENU`` setting, which will add all the pages to
|
||||||
the menu.
|
the menu.
|
||||||
|
|
||||||
|
If you want to exclude any pages from being linked to or listed in the menu
|
||||||
|
then add a ``status: hidden`` attribute to its metadata. This is useful for
|
||||||
|
things like making error pages that fit the generated theme of your site.
|
||||||
|
|
||||||
Importing an existing blog
|
Importing an existing blog
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -357,10 +357,13 @@ class PagesGenerator(Generator):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.pages = []
|
self.pages = []
|
||||||
|
self.hidden_pages = []
|
||||||
|
self.hidden_translations = []
|
||||||
super(PagesGenerator, self).__init__(*args, **kwargs)
|
super(PagesGenerator, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def generate_context(self):
|
def generate_context(self):
|
||||||
all_pages = []
|
all_pages = []
|
||||||
|
hidden_pages = []
|
||||||
for f in self.get_files(
|
for f in self.get_files(
|
||||||
os.path.join(self.path, self.settings['PAGE_DIR']),
|
os.path.join(self.path, self.settings['PAGE_DIR']),
|
||||||
exclude=self.settings['PAGE_EXCLUDES']):
|
exclude=self.settings['PAGE_EXCLUDES']):
|
||||||
|
|
@ -373,15 +376,25 @@ class PagesGenerator(Generator):
|
||||||
filename=f)
|
filename=f)
|
||||||
if not is_valid_content(page, f):
|
if not is_valid_content(page, f):
|
||||||
continue
|
continue
|
||||||
all_pages.append(page)
|
if page.status == "published":
|
||||||
|
all_pages.append(page)
|
||||||
|
elif page.status == "hidden":
|
||||||
|
hidden_pages.append(page)
|
||||||
|
else:
|
||||||
|
logger.warning(u"Unknown status %s for file %s, skipping it." %
|
||||||
|
(repr(unicode.encode(page.status, 'utf-8')),
|
||||||
|
repr(f)))
|
||||||
|
|
||||||
|
|
||||||
self.pages, self.translations = process_translations(all_pages)
|
self.pages, self.translations = process_translations(all_pages)
|
||||||
|
self.hidden_pages, self.hidden_translations = process_translations(hidden_pages)
|
||||||
|
|
||||||
self._update_context(('pages', ))
|
self._update_context(('pages', ))
|
||||||
self.context['PAGES'] = self.pages
|
self.context['PAGES'] = self.pages
|
||||||
|
|
||||||
def generate_output(self, writer):
|
def generate_output(self, writer):
|
||||||
for page in chain(self.translations, self.pages):
|
for page in chain(self.translations, self.pages,
|
||||||
|
self.hidden_translations, self.hidden_pages):
|
||||||
writer.write_file(page.save_as, self.get_template('page'),
|
writer.write_file(page.save_as, self.get_template('page'),
|
||||||
self.context, page=page,
|
self.context, page=page,
|
||||||
relative_urls=self.settings.get('RELATIVE_URLS'))
|
relative_urls=self.settings.get('RELATIVE_URLS'))
|
||||||
|
|
|
||||||
9
samples/content/pages/hidden_page.rst
Normal file
9
samples/content/pages/hidden_page.rst
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
This is a test hidden page
|
||||||
|
##########################
|
||||||
|
|
||||||
|
:category: test
|
||||||
|
:status: hidden
|
||||||
|
|
||||||
|
This is great for things like error(404) pages
|
||||||
|
Anyone can see this page but it's not linked to anywhere!
|
||||||
|
|
||||||
8
tests/TestPages/bad_page.rst
Normal file
8
tests/TestPages/bad_page.rst
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
This is a test bad page
|
||||||
|
#######################
|
||||||
|
|
||||||
|
:status: invalid
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog's back.
|
||||||
|
|
||||||
|
The status here is invalid, the page should not render.
|
||||||
8
tests/TestPages/hidden_page.rst
Normal file
8
tests/TestPages/hidden_page.rst
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
This is a test hidden page
|
||||||
|
##########################
|
||||||
|
|
||||||
|
:status: hidden
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog's back.
|
||||||
|
|
||||||
|
This page is hidden
|
||||||
12
tests/TestPages/hidden_page_markdown.md
Normal file
12
tests/TestPages/hidden_page_markdown.md
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
title: This is a markdown test hidden page
|
||||||
|
status: hidden
|
||||||
|
|
||||||
|
Test Markdown File Header
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Used for pelican test
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog's back.
|
||||||
|
|
||||||
|
This page is hidden
|
||||||
4
tests/TestPages/page.rst
Normal file
4
tests/TestPages/page.rst
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
This is a test page
|
||||||
|
###################
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog's back.
|
||||||
9
tests/TestPages/page_markdown.md
Normal file
9
tests/TestPages/page_markdown.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
title: This is a markdown test page
|
||||||
|
|
||||||
|
Test Markdown File Header
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Used for pelican test
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog's back.
|
||||||
|
|
@ -4,7 +4,7 @@ from mock import MagicMock
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from pelican.generators import ArticlesGenerator, LessCSSGenerator
|
from pelican.generators import ArticlesGenerator, LessCSSGenerator, PagesGenerator
|
||||||
from pelican.settings import _DEFAULT_CONFIG
|
from pelican.settings import _DEFAULT_CONFIG
|
||||||
from .support import unittest, temporary_folder, skipIfNoExecutable
|
from .support import unittest, temporary_folder, skipIfNoExecutable
|
||||||
|
|
||||||
|
|
@ -94,6 +94,48 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
write.assert_called_count == 0
|
write.assert_called_count == 0
|
||||||
|
|
||||||
|
|
||||||
|
class TestPageGenerator(unittest.TestCase):
|
||||||
|
"""
|
||||||
|
Every time you want to test for a new field;
|
||||||
|
Make sure the test pages in "TestPages" have all the fields
|
||||||
|
Add it to distilled in distill_pages_for_test
|
||||||
|
Then update the assertItemsEqual in test_generate_context to match expected
|
||||||
|
"""
|
||||||
|
|
||||||
|
def distill_pages_for_test(self, pages):
|
||||||
|
distilled = []
|
||||||
|
for page in pages:
|
||||||
|
distilled.append([
|
||||||
|
page.title,
|
||||||
|
page.status
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return distilled
|
||||||
|
|
||||||
|
def test_generate_context(self):
|
||||||
|
settings = _DEFAULT_CONFIG.copy()
|
||||||
|
|
||||||
|
settings['PAGE_DIR'] = 'TestPages'
|
||||||
|
generator = PagesGenerator(settings.copy(), settings, CUR_DIR,
|
||||||
|
_DEFAULT_CONFIG['THEME'], None,
|
||||||
|
_DEFAULT_CONFIG['MARKUP'])
|
||||||
|
generator.generate_context()
|
||||||
|
pages = self.distill_pages_for_test(generator.pages)
|
||||||
|
hidden_pages = self.distill_pages_for_test(generator.hidden_pages)
|
||||||
|
|
||||||
|
pages_expected = [
|
||||||
|
[u'This is a test page', 'published'],
|
||||||
|
[u'This is a markdown test page', 'published']
|
||||||
|
]
|
||||||
|
hidden_pages_expected = [
|
||||||
|
[u'This is a test hidden page', 'hidden'],
|
||||||
|
[u'This is a markdown test hidden page', 'hidden']
|
||||||
|
]
|
||||||
|
|
||||||
|
self.assertItemsEqual(pages_expected,pages)
|
||||||
|
self.assertItemsEqual(hidden_pages_expected,hidden_pages)
|
||||||
|
|
||||||
|
|
||||||
class TestLessCSSGenerator(unittest.TestCase):
|
class TestLessCSSGenerator(unittest.TestCase):
|
||||||
|
|
||||||
LESS_CONTENT = """
|
LESS_CONTENT = """
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue