Skip to content

Commit

Permalink
perf(html): compress html and js with layouts
Browse files Browse the repository at this point in the history
  • Loading branch information
ulrik59 authored and CaptainJojo committed Nov 8, 2017
1 parent 6967b96 commit 8cb064c
Show file tree
Hide file tree
Showing 11 changed files with 34 additions and 6 deletions.
3 changes: 3 additions & 0 deletions .editorconfig
Expand Up @@ -15,5 +15,8 @@ indent_size = 2
[*.scss]
indent_size = 2

[*.rb]
indent_size = 2

[Rakefile]
indent_size = 2
1 change: 1 addition & 0 deletions Gemfile
@@ -1,6 +1,7 @@
source "https://rubygems.org"
gem 'jekyll', '~> 3.6.2'
gem 'rouge', '~> 2.2.1'
gem 'uglifier', '~> 3.2.0'
gem 'scss_lint', require: false

group :jekyll_plugins do
Expand Down
1 change: 1 addition & 0 deletions _config.yml
Expand Up @@ -98,6 +98,7 @@ plugins:
- algoliasearch-jekyll
- jekyll-feed
- amp-jekyll
- uglifier
exclude:
- CNAME
- CODE_OF_CONDUCT.md
Expand Down
3 changes: 2 additions & 1 deletion _includes/scripts.html
@@ -1,5 +1,6 @@
<!-- Go to www.addthis.com/dashboard to customize your tools -->
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-592d8d29f5f816c3"></script>
<script src="{{ "/js/moment.min.js" | prepend: site.baseurl }}"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.19.1/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.19.1/locale/fr.min.js"></script>
<script src="https://cdn.jsdelivr.net/algoliasearch/3/algoliasearchLite.min.js"></script>
<script src="{{ "/js/search.js" | prepend: site.baseurl }}"></script>
5 changes: 1 addition & 4 deletions _layouts/amp.html
@@ -1,7 +1,4 @@
---
layout: amp
---
<!doctype html>
<!DOCTYPE html>
<html amp lang="fr" class="no-js">
<head>
<meta charset="utf-8">
Expand Down
1 change: 1 addition & 0 deletions _layouts/compress-js.html
@@ -0,0 +1 @@
{{ content | uglify | strip }}
10 changes: 10 additions & 0 deletions _layouts/compress.html
@@ -0,0 +1,10 @@
---
# Jekyll layout that compresses HTML
# v3.0.2
# http://jch.penibelst.de/
# © 2014–2015 Anatol Broder
# MIT License
---

{% capture _LINE_FEED %}
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
3 changes: 3 additions & 0 deletions _layouts/default.html
@@ -1,3 +1,6 @@
---
layout: compress
---
<!DOCTYPE html>
<html class="no-js">
{% include head.html %}
Expand Down
9 changes: 9 additions & 0 deletions _plugins/uglify.rb
@@ -0,0 +1,9 @@
module Jekyll
module Uglify
def uglify(input)
Uglifier.new(:harmony => true).compile(input)
end
end
end

Liquid::Template.register_filter(Jekyll::Uglify)
1 change: 0 additions & 1 deletion js/moment.min.js

This file was deleted.

3 changes: 3 additions & 0 deletions js/search.js
@@ -1,3 +1,6 @@
---
layout: compress-js
---
(function() {
'use strict';

Expand Down

0 comments on commit 8cb064c

Please sign in to comment.