Skip to content

Commit a4e358e

Browse files
committedMar 18, 2018
Create bootblog4-jinja, make bootstrap4-jinja work
Signed-off-by: Chris Warrick <kwpolska@gmail.com>
1 parent 695e224 commit a4e358e

File tree

17 files changed

+435
-6
lines changed

17 files changed

+435
-6
lines changed
 

‎nikola/data/themes/base-jinja/AUTHORS.txt

-1
This file was deleted.

‎nikola/data/themes/base-jinja/templates/comments_helper.tmpl

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
{% import 'comments_helper_muut.tmpl' as muut with context %}
77
{% import 'comments_helper_facebook.tmpl' as facebook with context %}
88
{% import 'comments_helper_isso.tmpl' as isso with context %}
9+
{% import 'comments_helper_commento.tmpl' as commento with context %}
910

1011
{% macro comment_form(url, title, identifier) %}
1112
{% if comment_system == 'disqus' %}
@@ -20,6 +21,8 @@
2021
{{ facebook.comment_form(url, title, identifier) }}
2122
{% elif comment_system == 'isso' %}
2223
{{ isso.comment_form(url, title, identifier) }}
24+
{% elif comment_system == 'commento' %}
25+
{{ commento.comment_form(url, title, identifier) }}
2326
{% endif %}
2427
{% endmacro %}
2528

@@ -36,6 +39,8 @@
3639
{{ facebook.comment_link(link, identifier) }}
3740
{% elif comment_system == 'isso' %}
3841
{{ isso.comment_link(link, identifier) }}
42+
{% elif comment_system == 'commento' %}
43+
{{ commento.comment_link(link, identifier) }}
3944
{% endif %}
4045
{% endmacro %}
4146

@@ -52,5 +57,7 @@
5257
{{ facebook.comment_link_script() }}
5358
{% elif comment_system == 'isso' %}
5459
{{ isso.comment_link_script() }}
60+
{% elif comment_system == 'commento' %}
61+
{{ commento.comment_link_script() }}
5562
{% endif %}
5663
{% endmacro %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{# -*- coding: utf-8 -*- #}
2+
{% macro comment_form(url, title, identifier) %}
3+
<div id="commento"></div>
4+
{% endmacro %}
5+
6+
{% macro comment_link(link, identifier) %}
7+
{% endmacro %}
8+
9+
10+
{% macro comment_link_script() %}
11+
<script src="{{ comment_system_id }}/assets/js/commento.min.js"></script>
12+
<script>
13+
window.onload = function() {
14+
Commento.init({
15+
serverUrl: "{{ comment_system_id }}",
16+
});
17+
}
18+
</script>
19+
{% endmacro %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
This is a theme based on Bootstrap 4 and the [blog example](https://getbootstrap.com/docs/4.0/examples/blog/) by @mdo.
2+
3+
Note that unlike previous versions of Bootstrap, icon fonts are not built-in.
4+
You can use Font Awesome for this.
5+
6+
This theme **does not** support Bootswatch font/color schemes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../bootblog4/assets/css/bootblog.css
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[Theme]
2+
engine = jinja
3+
parent = bootstrap4-jinja
4+
author = The Nikola Contributors
5+
author_url = https://getnikola.com/
6+
license = MIT
7+
based_on = Bootstrap 4 <http://getbootstrap.com/>, Bootstrap 4 blog example <http://getbootstrap.com/docs/4.0/examples/blog/>
8+
tags = bootstrap
9+
10+
[Family]
11+
family = bootstrap4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../bootblog4/bundles
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
{# -*- coding: utf-8 -*- #}
2+
{% import 'base_helper.tmpl' as base with context %}
3+
{% import 'annotation_helper.tmpl' as notes with context %}
4+
{{ set_locale(lang) }}
5+
{{ base.html_headstart() }}
6+
{% block extra_head %}
7+
{# Leave this block alone. #}
8+
{% endblock %}
9+
{{ template_hooks['extra_head']() }}
10+
</head>
11+
<body>
12+
<a href="#content" class="sr-only sr-only-focusable">{{ messages("Skip to main content") }}</a>
13+
14+
<!-- Header and menu bar -->
15+
<div class="container">
16+
<header class="blog-header py-3">
17+
<div class="row nbb-header align-items-center">
18+
<div class="col-md-3 col-xs-2" style="padding: 0; width: auto;">
19+
<button class="navbar-toggler navbar-light bg-light nbb-navbar-toggler" type="button" data-toggle="collapse" data-target="#bs-navbar" aria-controls="bs-navbar" aria-expanded="false" aria-label="Toggle navigation">
20+
<span class="navbar-toggler-icon"></span>
21+
</button>
22+
{{ search_form }}
23+
</div>
24+
<div class="col-md-6 col-xs-10 text-center" style="width: auto;">
25+
<a class="navbar-brand blog-header-logo text-dark" href="{{ abs_link(_link("root", None, lang)) }}">
26+
{% if logo_url %}
27+
<img src="{{ logo_url }}" alt="{{ blog_title|e }}" id="logo" class="d-inline-block align-top">
28+
{% endif %}
29+
30+
{% if show_blog_title %}
31+
<span id="blog-title">{{ blog_title|e }}</span>
32+
{% endif %}
33+
</a>
34+
</div>
35+
<div class="col-md-3 d-flex justify-content-end align-items-center">
36+
{% block belowtitle %}
37+
{% if translations|length > 1 %}
38+
{{ base.html_translations() }}
39+
{% endif %}
40+
{% endblock %}
41+
<div class="d-none d-md-inline">{% block sourcelink %}{% endblock %}</div>
42+
{{ template_hooks['menu_alt']() }}
43+
</div>
44+
</div>
45+
</header>
46+
47+
<nav class="navbar navbar-expand-md navbar-light bg-white static-top">
48+
<div class="collapse navbar-collapse" id="bs-navbar">
49+
<ul class="navbar-nav nav-fill d-flex w-100">
50+
{{ base.html_navigation_links() }}
51+
{{ template_hooks['menu']() }}
52+
</ul>
53+
</div><!-- /.navbar-collapse -->
54+
</nav>
55+
56+
<div class="container" id="content" role="main">
57+
<div class="body-content">
58+
<!--Body content-->
59+
{{ template_hooks['page_header']() }}
60+
{% block content %}{% endblock %}
61+
<!--End of body content-->
62+
63+
<footer id="footer">
64+
{{ content_footer }}
65+
{{ template_hooks['page_footer']() }}
66+
</footer>
67+
</div>
68+
</div>
69+
70+
{{ base.late_load_js() }}
71+
<!-- fancy dates -->
72+
<script>
73+
moment.locale("{{ momentjs_locales[lang] }}");
74+
fancydates({{ date_fanciness }}, {{ js_date_format }});
75+
</script>
76+
<!-- end fancy dates -->
77+
{% block extra_js %}{% endblock %}
78+
<script>
79+
baguetteBox.run('a.reference:not(.islink)', {
80+
captions: function(element) {
81+
return element.getElementsByTagName('img')[0].alt;
82+
}});
83+
baguetteBox.run('img:not(.islink)', {
84+
captions: function(element) {
85+
return element.alt;
86+
}});
87+
</script>
88+
{{ body_end }}
89+
{{ template_hooks['body_end']() }}
90+
</body>
91+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
{# -*- coding: utf-8 -*- #}
2+
3+
{% import 'annotation_helper.tmpl' as notes with context %}
4+
{% macro html_headstart() %}
5+
<!DOCTYPE html>
6+
<html
7+
8+
{% if use_open_graph or (twitter_card and twitter_card['use_twitter_cards']) or (comment_system == 'facebook') %}
9+
prefix='
10+
{% if use_open_graph or (twitter_card and twitter_card['use_twitter_cards']) %}
11+
og: http://ogp.me/ns#
12+
{% endif %}
13+
{% if use_open_graph %}
14+
article: http://ogp.me/ns/article#
15+
{% endif %}
16+
{% if comment_system == 'facebook' %}
17+
fb: http://ogp.me/ns/fb#
18+
{% endif %}
19+
'
20+
{% endif %}
21+
22+
{% if is_rtl %}
23+
dir="rtl"
24+
{% endif %}
25+
26+
lang="{{ lang }}">
27+
<head>
28+
<meta charset="utf-8">
29+
{% if use_base_tag %}
30+
<base href="{{ abs_link(permalink) }}">
31+
{% endif %}
32+
{% if description %}
33+
<meta name="description" content="{{ description|e }}">
34+
{% endif %}
35+
<meta name="viewport" content="width=device-width, initial-scale=1">
36+
{% if title == blog_title %}
37+
<title>{{ blog_title|e }}</title>
38+
{% else %}
39+
<title>{{ title|e }} | {{ blog_title|e }}</title>
40+
{% endif %}
41+
42+
{{ html_stylesheets() }}
43+
<meta name="theme-color" content="{{ theme_color }}">
44+
{% if meta_generator_tag %}
45+
<meta name="generator" content="Nikola (getnikola.com)">
46+
{% endif %}
47+
{{ html_feedlinks() }}
48+
<link rel="canonical" href="{{ abs_link(permalink) }}">
49+
50+
{% if favicons %}
51+
{% for name, file, size in favicons %}
52+
<link rel="{{ name }}" href="{{ file }}" sizes="{{ size }}"/>
53+
{% endfor %}
54+
{% endif %}
55+
56+
{% if comment_system == 'facebook' %}
57+
<meta property="fb:app_id" content="{{ comment_system_id }}">
58+
{% endif %}
59+
60+
{% if prevlink %}
61+
<link rel="prev" href="{{ prevlink }}" type="text/html">
62+
{% endif %}
63+
{% if nextlink %}
64+
<link rel="next" href="{{ nextlink }}" type="text/html">
65+
{% endif %}
66+
67+
{{ mathjax_config }}
68+
{% if use_cdn %}
69+
<!--[if lt IE 9]><script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
70+
{% else %}
71+
<!--[if lt IE 9]><script src="{{ url_replacer(permalink, '/assets/js/html5.js', lang, url_type) }}"></script><![endif]-->
72+
{% endif %}
73+
74+
{{ extra_head_data }}
75+
{% endmacro %}
76+
77+
{% macro late_load_js() %}
78+
{% if use_bundles %}
79+
{% if use_cdn %}
80+
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
81+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js" integrity="sha256-pS96pU17yq+gVu4KBQJi38VpSuKN7otMrDQprzf/DWY=" crossorigin="anonymous"></script>
82+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
83+
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.js" integrity="sha256-lQrWH6UPtNlJURtEYCgKDqLyBscHa/uF/nFle9bx3tI=" crossorigin="anonymous"></script>
84+
<script src="/assets/js/all.js"></script>
85+
{% else %}
86+
<script src="/assets/js/all-nocdn.js"></script>
87+
{% endif %}
88+
{% else %}
89+
{% if use_cdn %}
90+
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
91+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js" integrity="sha256-pS96pU17yq+gVu4KBQJi38VpSuKN7otMrDQprzf/DWY=" crossorigin="anonymous"></script>
92+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
93+
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.js" integrity="sha256-lQrWH6UPtNlJURtEYCgKDqLyBscHa/uF/nFle9bx3tI=" crossorigin="anonymous"></script>
94+
{% else %}
95+
<script src="/assets/js/jquery.min.js"></script>
96+
<script src="/assets/js/popper.min.js"></script>
97+
<script src="/assets/js/bootstrap.min.js"></script>
98+
<script src="/assets/js/baguetteBox.min.js"></script>
99+
<script src="/assets/js/moment-with-locales.min.js"></script>
100+
<script src="/assets/js/fancydates.js"></script>
101+
{% endif %}
102+
{% endif %}
103+
{{ social_buttons_code }}
104+
{% endmacro %}
105+
106+
107+
{% macro html_stylesheets() %}
108+
{% if use_bundles %}
109+
{% if use_cdn %}
110+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
111+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.css" integrity="sha256-FqCzNnnyXl5HxHMdb+RQ/RV/X7fqfPcQYy+G2gFL3Xk=" crossorigin="anonymous" />
112+
<link href="/assets/css/all.css" rel="stylesheet" type="text/css">
113+
{% else %}
114+
<link href="/assets/css/all-nocdn.css" rel="stylesheet" type="text/css">
115+
{% endif %}
116+
{% else %}
117+
{% if use_cdn %}
118+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
119+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.css" integrity="sha256-FqCzNnnyXl5HxHMdb+RQ/RV/X7fqfPcQYy+G2gFL3Xk=" crossorigin="anonymous" />
120+
{% else %}
121+
<link href="/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css">
122+
<link href="/assets/css/baguetteBox.min.css" rel="stylesheet" type="text/css">
123+
{% endif %}
124+
<link href="/assets/css/rst.css" rel="stylesheet" type="text/css">
125+
<link href="/assets/css/code.css" rel="stylesheet" type="text/css">
126+
<link href="/assets/css/theme.css" rel="stylesheet" type="text/css">
127+
<link href="/assets/css/bootblog.css" rel="stylesheet" type="text/css">
128+
{% if has_custom_css %}
129+
<link href="/assets/css/custom.css" rel="stylesheet" type="text/css">
130+
{% endif %}
131+
{% endif %}
132+
{% if needs_ipython_css %}
133+
<link href="/assets/css/ipython.min.css" rel="stylesheet" type="text/css">
134+
<link href="/assets/css/nikola_ipython.css" rel="stylesheet" type="text/css">
135+
{% endif %}
136+
<link href="https://fonts.googleapis.com/css?family=Playfair+Display:700,900" rel="stylesheet">
137+
{% if annotations and post and not post.meta('noannotations') %}
138+
{{ notes.css() }}
139+
{% elif not annotations and post and post.meta('annotations') %}
140+
{{ notes.css() }}
141+
{% endif %}
142+
{% endmacro %}
143+
144+
{% macro html_navigation_links() %}
145+
{% for url, text in navigation_links[lang] %}
146+
{% if isinstance(url, tuple) %}
147+
<li class="nav-item dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ text }}</a>
148+
<div class="dropdown-menu">
149+
{% for suburl, text in url %}
150+
{% if rel_link(permalink, suburl) == "#" %}
151+
<a href="{{ permalink }}" class="dropdown-item active">{{ text }} <span class="sr-only">{{ messages("(active)", lang) }}</span></a>
152+
{% else %}
153+
<a href="{{ suburl }}" class="dropdown-item">{{ text }}</a>
154+
{% endif %}
155+
{% endfor %}
156+
</div>
157+
{% else %}
158+
{% if rel_link(permalink, url) == "#" %}
159+
{# <a class="p-2 text-white bg-secondary active" href="{{ url }}">{{ text }} <span class="sr-only">{{ messages("(active)", lang) }}</span></a> #}
160+
<li class="nav-item active"><a href="{{ permalink }}" class="nav-link">{{ text }} <span class="sr-only">{{ messages("(active)", lang) }}</span></a>
161+
{% else %}
162+
<li class="nav-item"><a href="{{ url }}" class="nav-link">{{ text }}</a>
163+
{% endif %}
164+
{% endif %}
165+
{% endfor %}
166+
{% endmacro %}
167+
168+
{% macro html_feedlinks() %}
169+
{% if rss_link %}
170+
{{ rss_link }}
171+
{% elif generate_rss %}
172+
{% if translations|length > 1 %}
173+
{% for language in translations|sort %}
174+
<link rel="alternate" type="application/rss+xml" title="RSS ({{ language }})" href="{{ _link('rss', None, language) }}">
175+
{% endfor %}
176+
{% else %}
177+
<link rel="alternate" type="application/rss+xml" title="RSS" href="{{ _link('rss', None) }}">
178+
{% endif %}
179+
{% endif %}
180+
{% if generate_atom %}
181+
{% if translations|length > 1 %}
182+
{% for language in translations|sort %}
183+
<link rel="alternate" type="application/atom+xml" title="Atom ({{ language }})" href="{{ _link('index_atom', None, language) }}">
184+
{% endfor %}
185+
{% else %}
186+
<link rel="alternate" type="application/atom+xml" title="Atom" href="{{ _link('index_atom', None) }}">
187+
{% endif %}
188+
{% endif %}
189+
{% endmacro %}
190+
191+
{% macro html_translations() %}
192+
{% for langname in translations|sort %}
193+
{% if langname != lang %}
194+
<a href="{{ abs_link(_link("root", None, langname)) }}" rel="alternate" hreflang="{{ langname }}" class="p-2 text-secondary">{{ messages("LANGUAGE", langname) }}</a>
195+
{% endif %}
196+
{% endfor %}
197+
{% endmacro %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{# -*- coding: utf-8 -*- #}
2+
{% import 'index_helper.tmpl' as helper with context %}
3+
{% import 'math_helper.tmpl' as math with context %}
4+
{% import 'comments_helper.tmpl' as comments with context %}
5+
{% import 'pagination_helper.tmpl' as pagination with context %}
6+
{% import 'feeds_translations_helper.tmpl' as feeds_translations with context %}
7+
{% extends 'base.tmpl' %}
8+
9+
{% block extra_head %}
10+
{{ super() }}
11+
{% if posts and (permalink == '/' or permalink == '/' + index_file) %}
12+
<link rel="prefetch" href="{{ posts[0].permalink() }}" type="text/html">
13+
{% endif %}
14+
{{ math.math_styles_ifposts(posts) }}
15+
{% endblock %}
16+
17+
{% block content %}
18+
{% block content_header %}
19+
{{ feeds_translations.translation_link(kind) }}
20+
{% endblock %}
21+
{% if 'main_index' in pagekind %}
22+
{{ front_index_header }}
23+
{% endif %}
24+
{% if page_links %}
25+
{{ pagination.page_navigation(current_page, page_links, prevlink, nextlink, prev_next_links_reversed) }}
26+
{% endif %}
27+
<div class="postindex">
28+
{% for post in posts %}
29+
<article class="h-entry post-{{ post.meta('type') }}">
30+
<header>
31+
<h1 class="p-name entry-title"><a href="{{ post.permalink() }}" class="u-url">{{ post.title()|e }}</a></h1>
32+
<div class="metadata">
33+
<p class="byline author vcard"><span class="byline-name fn" itemprop="author">
34+
{% if author_pages_generated %}
35+
<a href="{{ _link('author', post.author()) }}">{{ post.author()|e }}</a>
36+
{% else %}
37+
{{ post.author()|e }}
38+
{% endif %}
39+
</span></p>
40+
<p class="dateline"><a href="{{ post.permalink() }}" rel="bookmark"><time class="published dt-published" datetime="{{ post.formatted_date('webiso') }}" title="{{ post.formatted_date(date_format)|e }}">{{ post.formatted_date(date_format)|e }}</time></a></p>
41+
{% if not post.meta('nocomments') and site_has_comments %}
42+
<p class="commentline">{{ comments.comment_link(post.permalink(), post._base_path) }}
43+
{% endif %}
44+
</div>
45+
</header>
46+
{% if index_teasers %}
47+
<div class="p-summary entry-summary">
48+
{{ post.text(teaser_only=True) }}
49+
{% else %}
50+
<div class="e-content entry-content">
51+
{{ post.text(teaser_only=False) }}
52+
{% endif %}
53+
</div>
54+
</article>
55+
{% endfor %}
56+
</div>
57+
{{ helper.html_pager() }}
58+
{{ comments.comment_link_script() }}
59+
{{ math.math_scripts_ifposts(posts) }}
60+
{% endblock %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{# -*- coding: utf-8 -*- #}
2+
{% macro breadcrumbs(crumbs) %}
3+
{% if crumbs %}
4+
<nav class="breadcrumbs">
5+
<ul class="breadcrumb">
6+
{% for link, text in crumbs %}
7+
{% if text != index_file %}
8+
{% if link == '#' %}
9+
<li class="breadcrumb-item active">{{ text.rsplit('.html', 1)[0] }}</li>
10+
{% else %}
11+
<li class="breadcrumb-item"><a href="{{ link }}">{{ text }}</a></li>
12+
{% endif %}
13+
{% endif %}
14+
{% endfor %}
15+
</ul>
16+
</nav>
17+
{% endif %}
18+
{% endmacro %}
19+
20+
{% macro show_sourcelink(sourcelink_href) %}
21+
<a href="{{ sourcelink_href }}" id="sourcelink" class="p-2 text-muted">{{ messages("Source") }}</a>
22+
{% endmacro %}
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
This is a theme based on Bootstrap 4 and the [blog example](https://getbootstrap.com/docs/4.0/examples/blog/) by @mdo.
2+
3+
Note that unlike previous versions of Bootstrap, icon fonts are not built-in.
4+
You can use Font Awesome for this.
5+
6+
This theme **does not** support Bootswatch font/color schemes.

‎nikola/data/themes/bootstrap4-jinja/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
This is a theme based on Bootstrap 4.
22

3-
43
The theme is a good building block for a site. It is based on a simple navbar +
54
content layout. For a more blog-style layout, check out `bootblog4`.
65

7-
86
Note that unlike previous versions of Bootstrap, icon fonts are not built-in.
97
You can use Font Awesome for this.
108

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[Theme]
2+
engine = jinja
3+
parent = base-jinja
4+
author = The Nikola Contributors
5+
author_url = https://getnikola.com/
6+
license = MIT
7+
based_on = Bootstrap 4 <http://getbootstrap.com/>
8+
tags = bootstrap
9+
10+
[Family]
11+
family = bootstrap4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../bootstrap4/bundles

‎nikola/data/themes/bootstrap4/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
This is a theme based on Bootstrap 4.
22

3-
43
The theme is a good building block for a site. It is based on a simple navbar +
54
content layout. For a more blog-style layout, check out `bootblog4`.
65

7-
86
Note that unlike previous versions of Bootstrap, icon fonts are not built-in.
97
You can use Font Awesome for this.
108

‎scripts/jinjify.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ def usage():
242242
print('Performing standard conversions:')
243243
for m, j in (
244244
('nikola/data/themes/base', 'nikola/data/themes/base-jinja'),
245-
('nikola/data/themes/bootstrap4', 'nikola/data/themes/bootstrap4-jinja')
245+
('nikola/data/themes/bootstrap4', 'nikola/data/themes/bootstrap4-jinja'),
246+
('nikola/data/themes/bootblog4', 'nikola/data/themes/bootblog4-jinja'),
246247
):
247248
print(' {0} -> {1}'.format(m, j))
248249
jinjify(m, j)

0 commit comments

Comments
 (0)
Please sign in to comment.