Published 2020-10-03.
Last modified 2023-05-23.
Time to read: 1 minutes.
jekyll_plugins collection.
This Jekyll plugin defines the following filters:
-
begins_with– returnstrueif a string starts with a given substring. does_not_begin_with– returnsfalseif a string starts with a given substring.ends_with– returnstrueif a string ends with a given substring.-
does_not_end_with– returnsfalseif a string ends with a given substring. -
append_suffix_if_does_not_start_with– appends a suffix to the string if the string does not start with a substring.
Installation
Add the following highlighted line to your Jekyll project's Gemfile,
within the jekyll_plugins group:
group :jekyll_plugins do gem 'jekyll_begin_end' end
And then execute:
$ bundle
Syntax
Important: the name of each of these filters must be followed by a colon (:). If you fail to do that an error will be generated and the Jekyll site building process will halt. The error message looks something like this:
Liquid Warning: Liquid syntax error (line 285):
Expected end_of_string but found string in
"{{ lines | begins_with 'blah' | xml_escape }}" in /some_directory/some_files.html Liquid Exception: Liquid error (line 285): wrong number of arguments (given 1, expected 2) in /some_directory/some_file.html Error: Liquid error (line 285):
wrong number of arguments (given 1, expected 2).
Examples
begins_with
{% assign url = "https:/asdf.com" %}
{% assign isAbsolute = url | begins_with: 'http' %}
{% assign url = "https:/asdf.com" %}
{% assign isHttp = url | begins_with: 'http' %}
{% if isHttp %}
<p>Absolute</p>
{% else %}
<p>Relative</p>
{% endif %}
does_not_begin_with
{% assign url = "https:/asdf.com" %}
{% assign isRelative = url | does_not_begin_with: 'http' %}
{% assign url = "https:/asdf.com" %}
{% assign isRelative = url | does_not_begin_with: 'http' %}
{% if isRelative %}
<p>Relative</p>
{% else %}
<p>Absolute</p>
{% endif %}
ends_with
{% assign url = "https:/asdf.com" %}
{% assign isDotCom = url | ends_with: '.com' %}
{% if isDotCom %}
<p>.com found</p>
{% else %}
<p>Not a .com</p>
{% endif %}
does_not_end_with
{% assign url = "https:/asdf.com" %}
{% assign isNotDotCom = url | does_not_end_with: '.com' %}
{% if isNotDotCom %}
<p>Not a .com</p>
{% else %}
<p>.com found</p>
{% endif %}
append_suffix_if_does_not_start_with
This filter was created to make asset reloading work better.
Given a portion of _layouts/default.html that looks like this:
{% assign csses = page.css | default: layout.css %}
{% assign nowMillis = site.time | date: '%s' %}
{% assign suffix = '?v=' | append: nowMillis %}
{% for css in csses %}
<link rel="stylesheet" href="{{ css | append_suffix_if_does_not_start_with: 'http', suffix }}" type="text/css">
{% endfor %}
And given index.html with front matter that looks like this:
--- css: [ https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.css, /order/order.css ] ---
The following is generated.
Note that the suffix s?v=1612879301 in only applied to the relative URL for order.css.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.css" type="text/css"> <link rel="stylesheet" href="/order/order.css?v=1612879301" type="text/css">