1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
|
<div align="center">
<img src="https://raw.githubusercontent.com/Jieiku/abridge/master/abridge.svg"/>
# Abridge Zola Theme
Abridge is a fast and lightweight Zola theme using semantic html, only ~6kb css before the svg icons and syntax highlighting css, no mandatory JS[*](https://github.com/Jieiku/abridge#contributing-and-philosophy), and perfect [Lighthouse](https://pagespeed.web.dev/report?url=abridge.netlify.app), [YellowLabTools](https://yellowlab.tools/), and [Observatory](https://observatory.mozilla.org/analyze/abridge.netlify.app) scores.
There is also [Abridge-minimal](https://github.com/jieiku/abridge.css) Theme which is used to showcase the [abridge.css framework](https://github.com/Jieiku/abridge.css/tree/master/dist)
Here is a [Zola Themes Benchmarks](https://github.com/Jieiku/zola-themes-benchmarks/blob/main/README.md) Page.
Maintenance of this project is made possible by all the <a href="https://github.com/Jieiku/abridge/graphs/contributors">contributors</a> and <a href="https://github.com/sponsors/Jieiku">sponsors</a>. If you'd like to sponsor this project and have your avatar or company logo appear below <a href="https://github.com/sponsors/Jieiku">click here</a>. 💖
<!-- sponsors --><!-- sponsors -->
---
**[View demo](https://abridge.netlify.app/)**
</div>
## Requirements
This theme requires version 0.17.3 or later of [Zola](https://www.getzola.org/documentation/getting-started/installation/)
## Quick Start
```bash
git clone https://github.com/jieiku/abridge.git
cd abridge
zola serve
# open http://127.0.0.1:1111/ in the browser
```
## Installation
The Quick Start shows how to run the theme directly.
Next we will use abridge as a theme to a NEW site.
### Step 1: Create a new zola site
```bash
zola init mysite
cd mysite
```
### Step 2: Install abridge
Download this theme to your themes directory:
```bash
git clone https://github.com/jieiku/abridge.git themes/abridge
```
Or install as a submodule:
```bash
git init # if your project is a git repository already, ignore this command
git submodule add https://github.com/jieiku/abridge.git themes/abridge
```
### Step 3: Configuration
Copy some files from the theme directory to your project's root directory:
```bash
rsync themes/abridge/config.toml config.toml
rsync themes/abridge/COPY-TO-ROOT-SASS/* sass/
rsync themes/abridge/netlify.toml netlify.toml
rsync themes/abridge/package.json package.json
rsync -r themes/abridge/content/static content/
```
- `config.toml` base configuration with all config values
- `COPY-TO-ROOT-SASS/abridge.scss` overrides to customize Abridge variables.
- `netlify.toml` settings to deploy your repo with netlfiy
- `package.json` to switch between nosearch, elasticlunr, tinysearch, stork.
- `content/static` files for generating tinysearch and stork indexes.
Uncomment the theme line in your project's root config.toml:
```bash
sed -i 's/^#theme = "abridge"/theme = "abridge"/' config.toml
```
### Step 4: Add new content
Copy the content from the theme directory to your project or make a new post:
```bash
rsync -r themes/abridge/content .
```
### Step 5: Run the project
Just run `zola serve` in the root path of the project:
```bash
zola serve
```
Zola will start the dev web server, accessible by default at `http://127.0.0.1:1111`.
Saved changes will live reload in the browser.
## Customization
A lot of effort has been made to ensure Abridge features can be easily customized.
### Number of Items per page for pagination
To change the number of items per page edit: `content/_index.md` and change the value for `paginate_by`
## Sass Overrides
Abridge SASS variables can be overrided by editing `sass\abridge.scss` file in your project's root sass folder.
### Page Width:
```scss
$mw:75%,// max-width
```
### Abridge Theme Modes
```scss
$abridgeMode: "switcher",//valid values: switcher, auto, dark, light
```
- Switcher automatically displays a dark or light version depending on browser/OS settings, and has a javascript user clickable theme switcher.
- Auto automatically displays a dark or light version depending on browser/OS settings.
- Dark is the dark theme always.
- Light is the light theme always.
### Colors and Styles
You can specify which color template you want to use as a base:
```scss
$color: "orange",// color template to use/override: orange, blue, blueshade
```
Then override individual colors as needed:
```scss
/// Dark Colors
$f1d: #ccc,// Font Color Primary
$f2d: #ddd,// Font Color Headers
$c1d: #111,// Background Color Primary
$c2d: #222,// Background Color Secondary
...
```
### Footer Social Icons
You should configure which social icons you plan to use. (makes the css file size smaller)
To simply turn them all off you can set `$enable-icons: false`
Otherwise enable only the icons you need, eg for mail you would set `$icon-mail: true`
You should then disable all the icons that you do not use.
## Config.toml Configuration
Most Options in config.toml are self documenting. (obvious between name of config value and comments)
Abridge will work with a barebones config.toml because default values are provided in the template files.
I recommend copying the entire config.toml file as outlined in Step 3 as it provides all configurable values.
### Top and Footer menus
Set a field in `extra` with a key of `menu` and `menu_footer`.
If you want the link to open in a new tab/browser then set `blank = true`.
If a link should have a trailing slash at the end of the url set `slash = true`.
(generally all links should have a trailing slash unless its a file link such as sitemap.xml)
```toml
menu = [
{url = "about", name = "About", slash = true, blank = false},
{url = "posts", name = "Posts", slash = true, blank = false},
{url = "categories", name = "Categories", slash = true, blank = false},
{url = "tags", name = "Tags", slash = true, blank = false},
]
menu_footer = [
{url = "about", name = "About", slash = true, blank = false},
{url = "contact", name = "Contact", slash = true, blank = false},
{url = "privacy", name = "Privacy", slash = true, blank = false},
{url = "sitemap.xml", name = "Sitemap", slash = false, blank = true},
]
```
### SEO and Header Tags
You can review the SEO tags in the head macro located at `templates/macros/head.html`, all configurable values should be in config.toml under config.extra or in the content markdown files.
In your post markdown file you should set a title less than 60 characters and a description between 80 and 160 characters in length. The description is what is displayed in search results below the page title. Anywhere that you do not set a page description, the primary site config.description will be used instead.
You should also set page specific keywords unless your keywords defined in config.toml suffice, any keywords that you add to the page are in addition to the ones defined in config.toml, so do not add those same keywords to your page keywords.
You can optionally also set a page specific image for search results by using page.extra.thumbnail. OpenGraph recommends 1200 x 630 (1.9:1). Twitter recommends 2:1 for large and 1:1 for small. If you do not set a page specific thumbnail then the banner defined in config.toml will be used instead.
Refer to [overview-images](https://raw.githubusercontent.com/Jieiku/abridge/master/content/overview-images/index.md) for an example:
```md
+++
title = "Image Shortcodes"
description = "Images can be embedded directly using markdown ``, but using a shortcode prevents CLS by explicitly setting the width and height."
date = 2021-05-19
[taxonomies]
categories = ["Features"]
tags = ["shortcodes","images"]
[extra]
toc = true
keywords = "Image, Markdown, Shortcodes, Hover"
thumbnail = "ferris-gesture.png"
+++
```
### KaTeX Math Notation
KaTeX can be used to display complex mathematics, it is a "Fast math typesetting for the web."
You can see a demo on [this page](https://abridge.netlify.app/overview-math/).
For better performance I recommend only enabling math on a [per page bases in your post.md files](https://github.com/Jieiku/abridge/blob/master/content/overview-math.md?plain=1#L11-L13), instead of in your main config.toml file.
## Javascript files
These are the javascript files currently used by Abridge:
- search_index.en.js: search index generated by zola at each build for elasticlunr.
- elasticlunr.min.js: search library for client side searching.
- search.js: to make use of elasticlunr from our sites search box for both suggestions and the results page.
- email.js: uses javascript to obfuscate your real email address for the mail icon at the bottom of the page.
- codecopy.js: add a Copy Button to code blocks, to copy contents of the code block to clipboard.
- theme.js: tiny script to facilitate local storage for the theme switcher. (never bundle, always separate)
- theme_button.js: tiny script for the theme switcher function when you click the theme switch button.
- prestyle.js: Used to preload css files `<link rel="preload"` - this script changes these to `<link rel="stylesheet"` once the page has finished loading, this allows us to load stylesheets for external fonts, fontawesome, or katex in a non blocking fashion.
### js_bundle option
`js_bundle` when set to true serves a bundle file instead of all of the individual js files.
All Bundles are defined in [package.json](https://github.com/Jieiku/abridge/blob/master/package.json)
A Bundle can be generated from the package.json scripts using npm:
- `npm run abridge-bundle-nosearch` - generates a bundle without search.
- `npm run abridge-bundle-elasticlunr` - generates a bundle of all js with elasticlunr.
- `npm run abridge-bundle-tinysearch` - generates a bundle of all js with tinysearch.
- `npm run abridge-bundle-stork` - generates a bundle of all js with stork.
## Switch Search Library
In addition to elasticlunr abridge also supports tinysearch and stork.
tinysearch demo: https://jieiku.github.io/abridge-tinysearch/
stork demo: https://jieiku.github.io/abridge-stork/
To use tinysearch/stork extra steps are required.
**Switch to tinysearch:**
First you have to install tinysearch so that you can build the index:
```shell
git clone https://github.com/tinysearch/tinysearch
cd tinysearch
cargo build --release
sudo cp ./target/release/tinysearch /usr/local/bin/tinysearch
exit # reload shell environment
```
Switch abridge to tinysearch:
```shell
npm run tinysearch
zola build
tinysearch --optimize --path static public/data_tinysearch/index.html
# zola serve
```
**Switch to stork:**
First you have to install stork so that you can build the index:
```shell
git clone https://github.com/jameslittle230/stork
cd stork
cargo build --release
sudo cp ./target/release/stork /usr/local/bin/stork
exit # reload shell environment
```
Switch abridge to stork:
```shell
npm run stork
zola build
stork build --input public/data_stork/index.html --output static/stork.st
# zola serve
```
**Switch to elasticlunr:**
```shell
npm run elasticlunr
```
**Switch to nosearch:**
```shell
npm run nosearch
```
## Optional Performance Optimizations:
### Theme-Switcher
The theme switcher relies on javascript to work, it applies the .light class to the root documentElement. The file that handles this (theme.js) is tiny and optimized and it is the first file loaded in the head, so the performance hit is minimal. Without the Theme switcher you can still use The automatic Theme which uses the Browser/OS preference settings. You can even install a [Firefox plugin](https://addons.mozilla.org/en-US/firefox/addon/theme-switcher-for-firefox/) to quickly switch between the two.
### Optimize PNG/ICO files:
All png files can be optimized using [oxipng](https://github.com/shssoichiro/oxipng):
```bash
cd static
oxipng -o max --strip all -a -Z *.png
```
leanify can compress farther for both png and ico files:
```bash
git clone https://github.com/JayXon/Leanify
cd Leanify
make
sudo cp leanify /usr/local/bin/leanify
exit #launch new terminal
leanify -i 7777 *.png
leanify -i 7777 *.ico
```
### Pre gzip/brotli content to serve with nginx:
If you are serving your site with nginx, you can pre gzip your content.
First configure nginx:
```bash
sudo nano /etc/nginx/nginx.conf
gzip on;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
#gzip_proxied any;
gzip_comp_level 9;
gzip_buffers 64 16k;
#gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/xhtml+xml application/x-javascript application/x-font-ttf application/vnd.ms-fontobject font/opentype font/ttf font/eot font/otf;
#gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
```
Then you can gzip/brotli your files:
```bash
zola build
find ~/.dev/abridge/public -type f -regextype posix-extended -regex '.*\.(htm|html|css|js|xml|xsl|txt|woff|woff2|svg|otf|eot|ttf)' -exec gzip --best -k -f {} \+ -exec brotli --best -f {} \;
rsync -zvrh ~/.dev/abridge/public/ web:/var/www/abridge
```
Nginx does not come by default with brotli support, but adding it was not difficult.
(Netlify brotli gzips your files automatically, no exta work required.)
## Contributing and Philosophy
We'd love your help! Especially with fixes to issues.
The overall idea behind abridge is to be lightweight, fast, and to work properly even if javascript is disabled.
The only feature that may be considered a necessity that relies on javascript is the Search.
New features that rely on javascript will do so with it disabled by default unless lightweight and useful.
## License
**abridge** is distributed under the terms of the [MIT license](https://github.com/jieiku/abridge/blob/master/LICENSE).
|