Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • vimazeno/blog.limos.fr
  • matrossevi/blog.limos.fr
  • borlonjo/blog.limos.fr
3 results
Show changes
Showing
with 0 additions and 791 deletions
<!DOCTYPE html>
<html lang="de">
<head>
<title>Willkommen Sie zur unserer Testseite</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
</ul></nav><!-- /#menu -->
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="http://example.com/test/de/drafts/an-untranslated-article-en.html" rel="bookmark"
title="Permalink to An untranslated article">An untranslated article</a></h2>
</header>
<footer class="post-info">
<time class="published" datetime="2014-07-14T00:00:00+00:00">
Mon 14 July 2014
</time>
<address class="vcard author">
By <a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content">
<p>An article without a translation.
Here is a link to an <a class="reference external" href="http://example.com/test/de/pages/untranslated-page-en.html">untranslated page</a></p>
</div><!-- /.entry-content -->
</section>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Testseite</title><link href="http://example.com/test/de/" rel="alternate"></link><link href="http://example.com/test/feeds_all.atom.xml" rel="self"></link><id>http://example.com/test/de/</id><updated>2014-09-15T00:00:00+00:00</updated><entry><title>Přeložený článek</title><link href="http://example.com/test/de/../cz/translated-article.html" rel="alternate"></link><published>2014-09-15T00:00:00+00:00</published><updated>2014-09-15T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-15:/test/de/../cz/translated-article.html</id><summary type="html">&lt;p&gt;Jednoduchý článek s překlady.
Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jednoduchý článek s překlady.
Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title>Ein übersetzter Artikel</title><link href="http://example.com/test/de/translated-article.html" rel="alternate"></link><published>2014-09-14T00:00:00+00:00</published><updated>2014-09-14T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-14:/test/de/translated-article.html</id><summary type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title>A translated article</title><link href="http://example.com/test/de/../translated-article.html" rel="alternate"></link><published>2014-09-13T00:00:00+00:00</published><updated>2014-09-13T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-13:/test/de/../translated-article.html</id><summary type="html">&lt;p&gt;A simple article with a translation.
Here is a link to &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;A simple article with a translation.
Here is a link to &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
</content></entry></feed>
\ No newline at end of file
<!DOCTYPE html>
<html lang="de">
<head>
<title>Willkommen Sie zur unserer Testseite</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
</ul></nav><!-- /#menu -->
<section id="content">
<h2>All articles</h2>
<ol id="post-list">
<li><article class="hentry">
<header> <h2 class="entry-title"><a href="http://example.com/test/de/translated-article.html" rel="bookmark" title="Permalink to Ein übersetzter Artikel">Ein übersetzter Artikel</a></h2> </header>
<footer class="post-info">
<time class="published" datetime="2014-09-14T00:00:00+00:00"> Sun 14 September 2014 </time>
<address class="vcard author">By
<a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content"> <p>Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur <a class="reference external" href="http://example.com/test/de/../images/img.png">einigem Bild</a>.</p>
</div><!-- /.entry-content -->
</article></li>
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="de">
<head>
<title>Eine 404 Seite</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
</ul></nav><!-- /#menu -->
<h1>Eine 404 Seite</h1>
Translations:
<a href="http://example.com/test/de/../cz/pages/404.html">cz</a>
<a href="http://example.com/test/de/../pages/404.html">en</a>
<p>Eine einfache 404 Seite.</p>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="de">
<head>
<title>Untranslated page</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
</ul></nav><!-- /#menu -->
<h1>Untranslated page</h1>
<p>This page has no translation.</p>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="de">
<head>
<title>Willkommen Sie zur unserer Testseite</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
</ul></nav><!-- /#menu -->
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="http://example.com/test/de/translated-article.html" rel="bookmark"
title="Permalink to Ein übersetzter Artikel">Ein übersetzter Artikel</a></h2>
Translations:
<a href="http://example.com/test/de/../cz/translated-article.html">cz</a>
<a href="http://example.com/test/de/../translated-article.html">en</a>
</header>
<footer class="post-info">
<time class="published" datetime="2014-09-14T00:00:00+00:00">
Sun 14 September 2014
</time>
<address class="vcard author">
By <a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content">
<p>Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur <a class="reference external" href="http://example.com/test/de/../images/img.png">einigem Bild</a>.</p>
</div><!-- /.entry-content -->
</section>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Testing site</title><link href="http://example.com/test/" rel="alternate"></link><link href="http://example.com/test/feeds_all.atom.xml" rel="self"></link><id>http://example.com/test/</id><updated>2014-09-15T00:00:00+00:00</updated><entry><title>Přeložený článek</title><link href="http://example.com/test/cz/translated-article.html" rel="alternate"></link><published>2014-09-15T00:00:00+00:00</published><updated>2014-09-15T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-15:/test/cz/translated-article.html</id><summary type="html">&lt;p&gt;Jednoduchý článek s překlady.
Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jednoduchý článek s překlady.
Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title>Ein übersetzter Artikel</title><link href="http://example.com/test/de/translated-article.html" rel="alternate"></link><published>2014-09-14T00:00:00+00:00</published><updated>2014-09-14T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-14:/test/de/translated-article.html</id><summary type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title>A translated article</title><link href="http://example.com/test/translated-article.html" rel="alternate"></link><published>2014-09-13T00:00:00+00:00</published><updated>2014-09-13T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-13:/test/translated-article.html</id><summary type="html">&lt;p&gt;A simple article with a translation.
Here is a link to &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;A simple article with a translation.
Here is a link to &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title>An untranslated article</title><link href="http://example.com/test/an-untranslated-article.html" rel="alternate"></link><published>2014-07-14T00:00:00+00:00</published><updated>2014-07-14T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-07-14:/test/an-untranslated-article.html</id><summary type="html">&lt;p&gt;An article without a translation.
Here is a link to an &lt;a class="reference external" href="http://example.com/test/pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;An article without a translation.
Here is a link to an &lt;a class="reference external" href="http://example.com/test/pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
</content></entry></feed>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to our Testing site</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
<li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
</ul></nav><!-- /#menu -->
<section id="content">
<h2>All articles</h2>
<ol id="post-list">
<li><article class="hentry">
<header> <h2 class="entry-title"><a href="http://example.com/test/translated-article.html" rel="bookmark" title="Permalink to A translated article">A translated article</a></h2> </header>
<footer class="post-info">
<time class="published" datetime="2014-09-13T00:00:00+00:00"> Sat 13 September 2014 </time>
<address class="vcard author">By
<a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content"> <p>A simple article with a translation.
Here is a link to <a class="reference external" href="http://example.com/test/images/img.png">some image</a>.</p>
</div><!-- /.entry-content -->
</article></li>
<li><article class="hentry">
<header> <h2 class="entry-title"><a href="http://example.com/test/an-untranslated-article.html" rel="bookmark" title="Permalink to An untranslated article">An untranslated article</a></h2> </header>
<footer class="post-info">
<time class="published" datetime="2014-07-14T00:00:00+00:00"> Mon 14 July 2014 </time>
<address class="vcard author">By
<a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content"> <p>An article without a translation.
Here is a link to an <a class="reference external" href="http://example.com/test/pages/untranslated-page.html">untranslated page</a></p>
</div><!-- /.entry-content -->
</article></li>
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>A 404 page</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
<li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
</ul></nav><!-- /#menu -->
<h1>A 404 page</h1>
Translations:
<a href="http://example.com/test/cz/pages/404.html">cz</a>
<a href="http://example.com/test/de/pages/404.html">de</a>
<p>A simple 404 page.</p>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>Untranslated page</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
<li class="active"><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
</ul></nav><!-- /#menu -->
<h1>Untranslated page</h1>
<p>This page has no translation.</p>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to our Testing site</title>
<meta charset="utf-8" />
<link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
</header><!-- /#banner -->
<nav id="menu"><ul>
<li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
</ul></nav><!-- /#menu -->
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="http://example.com/test/translated-article.html" rel="bookmark"
title="Permalink to A translated article">A translated article</a></h2>
Translations:
<a href="http://example.com/test/cz/translated-article.html">cz</a>
<a href="http://example.com/test/de/translated-article.html">de</a>
</header>
<footer class="post-info">
<time class="published" datetime="2014-09-13T00:00:00+00:00">
Sat 13 September 2014
</time>
<address class="vcard author">
By <a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
</address>
</footer><!-- /.post-info -->
<div class="entry-content">
<p>A simple article with a translation.
Here is a link to <a class="reference external" href="http://example.com/test/images/img.png">some image</a>.</p>
</div><!-- /.entry-content -->
</section>
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = 'The Tester'
SITENAME = 'Testing site'
SITEURL = 'http://example.com/test'
# to make the test suite portable
TIMEZONE = 'UTC'
DEFAULT_LANG = 'en'
LOCALE = 'en_US.UTF-8'
# Generate only one feed
FEED_ALL_ATOM = 'feeds_all.atom.xml'
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Disable unnecessary pages
CATEGORY_SAVE_AS = ''
TAG_SAVE_AS = ''
AUTHOR_SAVE_AS = ''
ARCHIVES_SAVE_AS = ''
AUTHORS_SAVE_AS = ''
CATEGORIES_SAVE_AS = ''
TAGS_SAVE_AS = ''
PLUGIN_PATHS = ['../../']
PLUGINS = ['i18n_subsites']
THEME = 'localized_theme'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
from blinker import signal
tmpsig = signal('tmpsig')
I18N_FILTER_SIGNALS = [tmpsig]
I18N_SUBSITES = {
'de': {
'SITENAME': 'Testseite',
'AUTHOR': 'Der Tester',
'LOCALE': 'de_DE.UTF-8',
},
'cz': {
'SITENAME': 'Testovací stránka',
'AUTHOR': 'Test Testovič',
'I18N_UNTRANSLATED_PAGES': 'remove',
'I18N_UNTRANSLATED_ARTICLES': 'keep',
},
}
'''Unit tests for the i18n_subsites plugin'''
import os
import locale
import unittest
import subprocess
from tempfile import mkdtemp
from shutil import rmtree
from . import i18n_subsites as i18ns
from pelican import Pelican
from pelican.tests.support import get_settings
from pelican.settings import read_settings
class TestTemporaryLocale(unittest.TestCase):
'''Test the temporary locale context manager'''
def test_locale_restored(self):
'''Test that the locale is restored after exiting context'''
orig_locale = locale.setlocale(locale.LC_ALL)
with i18ns.temporary_locale():
locale.setlocale(locale.LC_ALL, 'C')
self.assertEqual(locale.setlocale(locale.LC_ALL), 'C')
self.assertEqual(locale.setlocale(locale.LC_ALL), orig_locale)
def test_temp_locale_set(self):
'''Test that the temporary locale is set'''
with i18ns.temporary_locale('C'):
self.assertEqual(locale.setlocale(locale.LC_ALL), 'C')
class TestSettingsManipulation(unittest.TestCase):
'''Test operations on settings dict'''
def setUp(self):
'''Prepare default settings'''
self.settings = get_settings()
def test_get_pelican_cls_class(self):
'''Test that we get class given as an object'''
self.settings['PELICAN_CLASS'] = object
cls = i18ns.get_pelican_cls(self.settings)
self.assertIs(cls, object)
def test_get_pelican_cls_str(self):
'''Test that we get correct class given by string'''
cls = i18ns.get_pelican_cls(self.settings)
self.assertIs(cls, Pelican)
class TestSitesRelpath(unittest.TestCase):
'''Test relative path between sites generation'''
def setUp(self):
'''Generate some sample siteurls'''
self.siteurl = 'http://example.com'
i18ns._SITE_DB['en'] = self.siteurl
i18ns._SITE_DB['de'] = self.siteurl + '/de'
def tearDown(self):
'''Remove sites from db'''
i18ns._SITE_DB.clear()
def test_get_site_path(self):
'''Test getting the path within a site'''
self.assertEqual(i18ns.get_site_path(self.siteurl), '/')
self.assertEqual(i18ns.get_site_path(self.siteurl + '/de'), '/de')
def test_relpath_to_site(self):
'''Test getting relative paths between sites'''
self.assertEqual(i18ns.relpath_to_site('en', 'de'), 'de')
self.assertEqual(i18ns.relpath_to_site('de', 'en'), '..')
class TestRegistration(unittest.TestCase):
'''Test plugin registration'''
def test_return_on_missing_signal(self):
'''Test return on missing required signal'''
i18ns._SIGNAL_HANDLERS_DB['tmp_sig'] = None
i18ns.register()
self.assertNotIn(id(i18ns.save_generator),
i18ns.signals.generator_init.receivers)
def test_registration(self):
'''Test registration of all signal handlers'''
i18ns.register()
for sig_name, handler in i18ns._SIGNAL_HANDLERS_DB.items():
sig = getattr(i18ns.signals, sig_name)
self.assertIn(id(handler), sig.receivers)
# clean up
sig.disconnect(handler)
class TestFullRun(unittest.TestCase):
'''Test running Pelican with the Plugin'''
def setUp(self):
'''Create temporary output and cache folders'''
self.temp_path = mkdtemp(prefix='pelicantests.')
self.temp_cache = mkdtemp(prefix='pelican_cache.')
def tearDown(self):
'''Remove output and cache folders'''
rmtree(self.temp_path)
rmtree(self.temp_cache)
def test_sites_generation(self):
'''Test generation of sites with the plugin
Compare with recorded output via ``git diff``.
To generate output for comparison run the command
``pelican -o test_data/output -s test_data/pelicanconf.py \
test_data/content``
Remember to remove the output/ folder before that.
'''
base_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(base_path, 'test_data')
content_path = os.path.join(base_path, 'content')
output_path = os.path.join(base_path, 'output')
settings_path = os.path.join(base_path, 'pelicanconf.py')
settings = read_settings(path=settings_path, override={
'PATH': content_path,
'OUTPUT_PATH': self.temp_path,
'CACHE_PATH': self.temp_cache,
'PLUGINS': [i18ns],
}
)
pelican = Pelican(settings)
pelican.run()
# compare output
out, err = subprocess.Popen(
['git', 'diff', '--no-ext-diff', '--exit-code', '-w', output_path,
self.temp_path], env={'PAGER': ''},
stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
self.assertFalse(out, 'non-empty `diff` stdout:\n{}'.format(out))
self.assertFalse(err, 'non-empty `diff` stderr:\n{}'.format(out))
math_render @ 2bb931ab
Subproject commit 2bb931abf47ed1b23da0c6ae41f82149b132c49f
pandoc_reader @ 9ef0197e
Subproject commit 9ef0197eed5d141bf0f3b9a8468cd37ad3e5fbd7
tag_cloud
=========
This plugin generates a tag-cloud.
Installation
------------
In order to use to use this plugin, you have to edit(*) or create(+) the following files::
blog/
├── pelicanconf.py *
├── content
├── plugins +
│ └── tag_cloud.py +
└── themes
└── mytheme
├── templates
│ └── base.html *
└── static
└── css
└── style.css *
In **pelicanconf.py** you have to activate the plugin::
PLUGIN_PATHS = ["plugins"]
PLUGINS = ["tag_cloud"]
Into your **plugins** folder, you should add tag_cloud.py (from this repository).
In your theme files, you should change **base.html** to apply formats (and sizes) defined in **style.css**, as specified in "Settings", below.
Settings
--------
================================================ =====================================================
Setting name (followed by default value) What does it do?
================================================ =====================================================
``TAG_CLOUD_STEPS = 4`` Count of different font sizes in the tag
cloud.
``TAG_CLOUD_MAX_ITEMS = 100`` Maximum number of tags in the cloud.
``TAG_CLOUD_SORTING = 'random'`` The tag cloud ordering scheme. Valid values:
random, alphabetically, alphabetically-rev, size and
size-rev
``TAG_CLOUD_BADGE = True`` Optionnal setting : can bring **badges**, which mean
say : display the number of each tags present
on all articles.
================================================ =====================================================
The default theme does not include a tag cloud, but it is pretty easy to add one::
<ul class="tagcloud">
{% for tag in tag_cloud %}
<li class="tag-{{ tag.1 }}">
<a href="{{ SITEURL }}/{{ tag.0.url }}">
{{ tag.0 }}
{% if TAG_CLOUD_BADGE %}
<span class="badge">{{ tag.2 }}</span>
{% endif %}
</a>
</li>
{% endfor %}
</ul>
You should then also define CSS styles with appropriate classes (tag-1 to tag-N,
where N matches ``TAG_CLOUD_STEPS``), tag-1 being the most frequent, and
define a ``ul.tagcloud`` class with appropriate list-style to create the cloud.
You should copy/paste this **badge** CSS rule ``ul.tagcloud .list-group-item <span>.badge``
if you're using ``TAG_CLOUD_BADGE`` setting. (this rule, potentially long , is suggested to avoid
conflicts with CSS libs as twitter Bootstrap)
For example::
ul.tagcloud {
list-style: none;
padding: 0;
}
ul.tagcloud li {
display: inline-block;
}
li.tag-1 {
font-size: 150%;
}
li.tag-2 {
font-size: 120%;
}
...
ul.tagcloud .list-group-item <span>.badge {
background-color: grey;
color: white;
}
By default the tags in the cloud are sorted randomly, but if you prefers to have it alphabetically use the `alphabetically` (ascending) and `alphabetically-rev` (descending). Also is possible to sort the tags by it's size (number of articles with this specific tag) using the values `size` (ascending) and `size-rev` (descending).
\ No newline at end of file
from .tag_cloud import *
'''
tag_cloud
===================================
This plugin generates a tag cloud from available tags
'''
from __future__ import unicode_literals
from collections import defaultdict
from operator import itemgetter
import logging
import math
import random
from pelican import signals
logger = logging.getLogger(__name__)
def set_default_settings(settings):
settings.setdefault('TAG_CLOUD_STEPS', 4)
settings.setdefault('TAG_CLOUD_MAX_ITEMS', 100)
settings.setdefault('TAG_CLOUD_SORTING', 'random')
settings.setdefault('TAG_CLOUD_BADGE', False)
def init_default_config(pelican):
from pelican.settings import DEFAULT_CONFIG
set_default_settings(DEFAULT_CONFIG)
if(pelican):
set_default_settings(pelican.settings)
def generate_tag_cloud(generator):
tag_cloud = defaultdict(int)
for article in generator.articles:
for tag in getattr(article, 'tags', []):
tag_cloud[tag] += 1
tag_cloud = sorted(tag_cloud.items(), key=itemgetter(1), reverse=True)
tag_cloud = tag_cloud[:generator.settings.get('TAG_CLOUD_MAX_ITEMS')]
tags = list(map(itemgetter(1), tag_cloud))
if tags:
max_count = max(tags)
steps = generator.settings.get('TAG_CLOUD_STEPS')
# calculate word sizes
def generate_tag(tag, count):
tag = (
tag,
int(math.floor(steps - (steps - 1) * math.log(count)
/ (math.log(max_count)or 1)))
)
if generator.settings.get('TAG_CLOUD_BADGE'):
tag += (count,)
return tag
tag_cloud = [
generate_tag(tag, count)
for tag, count in tag_cloud
]
sorting = generator.settings.get('TAG_CLOUD_SORTING')
if sorting == 'alphabetically':
tag_cloud.sort(key=lambda elem: elem[0].name)
elif sorting == 'alphabetically-rev':
tag_cloud.sort(key=lambda elem: elem[0].name, reverse=True)
elif sorting == 'size':
tag_cloud.sort(key=lambda elem: elem[1])
elif sorting == 'size-rev':
tag_cloud.sort(key=lambda elem: elem[1], reverse=True)
elif sorting == 'random':
random.shuffle(tag_cloud)
else:
logger.warning("setting for TAG_CLOUD_SORTING not recognized: %s, "
"falling back to 'random'", sorting)
random.shuffle(tag_cloud)
# make available in context
generator.tag_cloud = tag_cloud
generator._update_context(['tag_cloud'])
def register():
signals.initialized.connect(init_default_config)
signals.article_generator_finalized.connect(generate_tag_cloud)