mirror of
https://github.com/jekyll/jekyll.git
synced 2026-04-28 03:01:03 -04:00
Compare commits
2 Commits
4.3-stable
...
book
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf71631c34 | ||
|
|
6c0e4b37b9 |
@@ -1,53 +0,0 @@
|
||||
version: "2"
|
||||
checks:
|
||||
argument-count:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 5
|
||||
file-lines:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 300
|
||||
method-complexity:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 15
|
||||
method-count:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 50
|
||||
method-lines:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 30
|
||||
plugins:
|
||||
fixme:
|
||||
enabled: false
|
||||
rubocop:
|
||||
enabled: true
|
||||
channel: rubocop-0-60
|
||||
|
||||
exclude_patterns:
|
||||
- "*.*"
|
||||
- ".*"
|
||||
|
||||
- Gemfile
|
||||
- LICENSE
|
||||
- Rakefile
|
||||
|
||||
- benchmark/
|
||||
- docs/
|
||||
- exe/
|
||||
- features/
|
||||
- rake/
|
||||
- rubocop/
|
||||
- script/
|
||||
- spec/
|
||||
- test/
|
||||
- vendor/
|
||||
|
||||
- lib/blank_template/
|
||||
- lib/site_template/
|
||||
- lib/theme_template/
|
||||
- lib/jekyll/mime.types
|
||||
- lib/jekyll/commands/serve/livereload_assets/livereload.js
|
||||
@@ -1,55 +0,0 @@
|
||||
#-------------------------------------------------------------------------------------------------------------
|
||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
|
||||
#-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
FROM ruby:2
|
||||
|
||||
# Avoid warnings by switching to noninteractive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser"
|
||||
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
|
||||
# will be updated to match your local UID/GID (when using the dockerFile property).
|
||||
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
|
||||
ARG USERNAME=vscode
|
||||
ARG USER_UID=1000
|
||||
ARG USER_GID=$USER_UID
|
||||
|
||||
# Configure apt and install packages
|
||||
RUN apt-get update \
|
||||
&& apt-get -y install --no-install-recommends apt-utils dialog locales 2>&1 \
|
||||
# Verify git, process tools installed
|
||||
&& apt-get -y install git openssh-client iproute2 procps lsb-release \
|
||||
#
|
||||
# Install ruby-debug-ide and debase
|
||||
&& gem install ruby-debug-ide \
|
||||
&& gem install debase \
|
||||
#
|
||||
# Install node.js
|
||||
&& apt-get -y install curl software-properties-common \
|
||||
&& curl -sL https://deb.nodesource.com/setup_13.x | bash - \
|
||||
&& apt-get -y install nodejs \
|
||||
#
|
||||
# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user.
|
||||
&& groupadd --gid $USER_GID $USERNAME \
|
||||
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
|
||||
# [Optional] Add sudo support for the non-root user
|
||||
&& apt-get install -y sudo \
|
||||
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
|
||||
&& chmod 0440 /etc/sudoers.d/$USERNAME \
|
||||
#
|
||||
# Clean up
|
||||
&& apt-get autoremove -y \
|
||||
&& apt-get clean -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Set the locale
|
||||
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
|
||||
dpkg-reconfigure --frontend=noninteractive locales && \
|
||||
update-locale LANG=en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
|
||||
# Switch back to dialog for any ad-hoc use of apt-get
|
||||
ENV DEBIAN_FRONTEND=dialog
|
||||
@@ -1,26 +0,0 @@
|
||||
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
|
||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/ruby-2
|
||||
{
|
||||
"name": "Ruby 2",
|
||||
"dockerFile": "Dockerfile",
|
||||
|
||||
// Set *default* container specific settings.json values on container create.
|
||||
"settings": {
|
||||
"terminal.integrated.shell.linux": "/bin/bash"
|
||||
},
|
||||
|
||||
// Add the IDs of extensions you want installed when the container is created.
|
||||
"extensions": [
|
||||
"rebornix.Ruby"
|
||||
]
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
"postCreateCommand": "bundle install",
|
||||
|
||||
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
|
||||
// "remoteUser": "vscode"
|
||||
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
# editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
* text=auto
|
||||
84
.github/CODEOWNERS
vendored
84
.github/CODEOWNERS
vendored
@@ -1,84 +0,0 @@
|
||||
# The Jekyll project has 6 affinity teams, shown here: https://teams.jekyllrb.com/
|
||||
# They are as follows:
|
||||
#
|
||||
# 1. @jekyll/build
|
||||
# 2. @jekyll/documentation
|
||||
# 3. @jekyll/ecosystem
|
||||
# 4. @jekyll/performance
|
||||
# 5. @jekyll/stability
|
||||
# 6. @jekyll/windows
|
||||
#
|
||||
# Each of these teams has a mission. Wherever possible, GitHub should
|
||||
# automatically require review from these teams on the pieces of the
|
||||
# repository they maintain.
|
||||
|
||||
# @jekyll/documentation
|
||||
/docs/ @jekyll/documentation
|
||||
|
||||
# @jekyll/build
|
||||
/exe/ @jekyll/build
|
||||
/lib/jekyll.rb @jekyll/build
|
||||
/lib/jekyll/cleaner.rb @jekyll/build
|
||||
/lib/jekyll/collection.rb @jekyll/build
|
||||
/lib/jekyll/command.rb @jekyll/build
|
||||
/lib/jekyll/commands/ @jekyll/build
|
||||
/lib/jekyll/converter.rb @jekyll/build
|
||||
/lib/jekyll/converters/ @jekyll/build
|
||||
/lib/jekyll/convertible.rb @jekyll/build
|
||||
/lib/jekyll/document.rb @jekyll/build
|
||||
/lib/jekyll/drops/ @jekyll/build
|
||||
/lib/jekyll/entry_filter.rb @jekyll/build
|
||||
/lib/jekyll/errors.rb @jekyll/build
|
||||
/lib/jekyll/excerpt.rb @jekyll/build
|
||||
/lib/jekyll/filters/ @jekyll/build
|
||||
/lib/jekyll/filters.rb @jekyll/build
|
||||
/lib/jekyll/layout.rb @jekyll/build
|
||||
/lib/jekyll/liquid_extensions.rb @jekyll/build
|
||||
/lib/jekyll/liquid_renderer/ @jekyll/build
|
||||
/lib/jekyll/liquid_renderer.rb @jekyll/build
|
||||
/lib/jekyll/log_adapter.rb @jekyll/build
|
||||
/lib/jekyll/mime.types @jekyll/build
|
||||
/lib/jekyll/page.rb @jekyll/build
|
||||
/lib/jekyll/publisher.rb @jekyll/build
|
||||
/lib/jekyll/reader.rb @jekyll/build
|
||||
/lib/jekyll/readers/ @jekyll/build
|
||||
/lib/jekyll/regenerator.rb @jekyll/build
|
||||
/lib/jekyll/related_posts.rb @jekyll/build
|
||||
/lib/jekyll/renderer.rb @jekyll/build
|
||||
/lib/jekyll/site.rb @jekyll/build
|
||||
/lib/jekyll/static_file.rb @jekyll/build
|
||||
/lib/jekyll/stevenson.rb @jekyll/build
|
||||
/lib/jekyll/tags/ @jekyll/build
|
||||
/lib/jekyll/url.rb @jekyll/build
|
||||
/lib/jekyll/utils/ @jekyll/build
|
||||
/lib/jekyll/utils.rb @jekyll/build
|
||||
|
||||
# @jekyll/ecosystem
|
||||
/lib/jekyll/external.rb @jekyll/ecosystem
|
||||
/lib/jekyll/generator.rb @jekyll/ecosystem
|
||||
/lib/jekyll/hooks.rb @jekyll/ecosystem
|
||||
/lib/jekyll/plugin.rb @jekyll/ecosystem
|
||||
/lib/jekyll/plugin_manager.rb @jekyll/ecosystem
|
||||
/lib/jekyll/theme.rb @jekyll/ecosystem
|
||||
/lib/jekyll/theme_builder.rb @jekyll/ecosystem
|
||||
|
||||
# @jekyll/stability
|
||||
Gemfile @jekyll/stability
|
||||
*.gemspec @jekyll/stability
|
||||
/lib/jekyll/configuration.rb @jekyll/stability
|
||||
/lib/jekyll/deprecator.rb @jekyll/stability
|
||||
/lib/jekyll/frontmatter_defaults.rb @jekyll/stability
|
||||
/lib/site_template @jekyll/stability
|
||||
/lib/theme_template @jekyll/stability
|
||||
/features/ @jekyll/stability
|
||||
/test/ @jekyll/stability
|
||||
|
||||
# Special cases
|
||||
.github/ @jekyll/affinity-team-captains
|
||||
CODE_OF_CONDUCT.markdown @jekyll/affinity-team-captains
|
||||
History.markdown @jekyll/affinity-team-captains
|
||||
LICENSE @jekyll/affinity-team-captains # This file should never change.
|
||||
README.markdown @jekyll/affinity-team-captains
|
||||
/lib/jekyll/version.rb @jekyll/affinity-team-captains
|
||||
/rake/ @jekyll/affinity-team-captains
|
||||
/script/ @jekyll/affinity-team-captains
|
||||
76
.github/CODE_OF_CONDUCT.markdown
vendored
76
.github/CODE_OF_CONDUCT.markdown
vendored
@@ -1,76 +0,0 @@
|
||||
# Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
|
||||
158
.github/CONTRIBUTING.markdown
vendored
158
.github/CONTRIBUTING.markdown
vendored
@@ -1,158 +0,0 @@
|
||||
# Contributing to Jekyll
|
||||
|
||||
Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is an open source project, built one contribution at a time by users like you.
|
||||
|
||||
## Where to get help or report a problem
|
||||
|
||||
See the [support guidelines](https://jekyllrb.com/docs/support/)
|
||||
|
||||
## Ways to contribute
|
||||
|
||||
Whether you're a developer, a designer, or just a Jekyll devotee, there are lots of ways to contribute. Here's a few ideas:
|
||||
|
||||
- [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
|
||||
- Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a workaround? Do you have a suggestion for how the feature could be better?
|
||||
- Read through the [documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
|
||||
- Browse through the [Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
|
||||
- Find an [open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
|
||||
- Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
### Pull requests generally
|
||||
|
||||
- The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
|
||||
|
||||
- The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
|
||||
|
||||
- If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
|
||||
|
||||
- If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
|
||||
|
||||
### Submitting a pull request via github.com
|
||||
|
||||
Many small changes can be made entirely through the github.com web interface.
|
||||
|
||||
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit.
|
||||
2. Click the pencil icon in the top right corner to edit the file
|
||||
3. Make your proposed changes
|
||||
4. Click "Propose file change"
|
||||
5. Click "Create pull request"
|
||||
6. Add a descriptive title and detailed description for your proposed change. The more information the better.
|
||||
7. Click "Create pull request"
|
||||
|
||||
That's it! You'll be automatically subscribed to receive updates as others review your proposed change and provide feedback.
|
||||
|
||||
### Submitting a pull request via Git command line
|
||||
|
||||
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll).
|
||||
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
|
||||
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
|
||||
4. Hack away, add tests. Not necessarily in that order.
|
||||
5. Make sure everything still passes by running `script/cibuild` (see the [tests section](#running-tests-locally) below)
|
||||
6. Push the branch up ( `git push origin my-awesome-feature` ).
|
||||
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
|
||||
|
||||
## Proposing updates to the documentation
|
||||
|
||||
We want the Jekyll documentation to be the best it can be. We've open-sourced our docs and we welcome any pull requests if you find it lacking.
|
||||
|
||||
### How to submit changes
|
||||
|
||||
You can find the documentation for jekyllrb.com in the [docs](https://github.com/jekyll/jekyll/tree/master/docs) directory. See the section above, [submitting a pull request](#submitting-a-pull-request) for information on how to propose a change.
|
||||
|
||||
One gotcha, all pull requests should be directed at the `master` branch (the default branch).
|
||||
|
||||
### Updating FontAwesome iconset for jekyllrb.com
|
||||
|
||||
We use a custom version of FontAwesome which contains just the icons we use.
|
||||
|
||||
If you ever need to update our documentation with an icon that is not already available in our custom iconset, you'll have to regenerate the iconset using Icomoon's Generator:
|
||||
|
||||
1. Go to <https://icomoon.io/app/>.
|
||||
2. Click `Import Icons` on the top-horizontal-bar and upload the existing `<jekyll>/docs/icomoon-selection.json`.
|
||||
3. Click `Add Icons from Library..` further down on the page, and add 'Font Awesome'.
|
||||
4. Select the required icon(s) from the Library (make sure its the 'FontAwesome' library instead of 'IcoMoon-Free' library).
|
||||
5. Click `Generate Font` on the bottom-horizontal-bar.
|
||||
6. Inspect the included icons and proceed by clicking `Download`.
|
||||
7. Extract the font files and adapt the CSS to the paths we use in Jekyll:
|
||||
|
||||
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
|
||||
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
|
||||
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
|
||||
`<jekyll>/docs/_sass/_font-awesome.scss` sass partial.
|
||||
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
|
||||
`('../fonts/Fontawesome.woff?9h6hxj')`.
|
||||
|
||||
### Adding plugins
|
||||
|
||||
If you want to add your plugin to the [list of plugins](https://jekyllrb.com/docs/plugins/#available-plugins), please submit a pull request modifying the [plugins page source file](https://github.com/jekyll/jekyll/blob/master/docs/_docs/plugins.md) by adding a link to your plugin under the proper subheading depending upon its type.
|
||||
|
||||
## Code Contributions
|
||||
|
||||
Interested in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
|
||||
|
||||
### Tests and documentation
|
||||
|
||||
Any time you propose a code change, you should also include updates to the documentation and tests within the same pull request.
|
||||
|
||||
#### Documentation
|
||||
|
||||
If your contribution changes any Jekyll behavior, make sure to update the documentation. Documentation lives in the `docs/_docs` folder (spoiler alert: it's a Jekyll site!). If the docs are missing information, please feel free to add it in. Great docs make a great project. Include changes to the documentation within your pull request, and once merged, `jekyllrb.com` will be updated.
|
||||
|
||||
#### Tests
|
||||
|
||||
- If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
|
||||
|
||||
- If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
|
||||
|
||||
### Code contributions generally
|
||||
|
||||
- Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
|
||||
|
||||
- Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
|
||||
|
||||
- You can use the command `script/console` to start a REPL to explore the result of
|
||||
Jekyll's methods. It also provides you with helpful methods to quickly create a
|
||||
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
|
||||
|
||||
- Previously, we've used the WIP Probot app to help contributors determine whether their pull request is ready for review. Please use a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests) instead. When you're ready, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request)
|
||||
|
||||
## Running tests locally
|
||||
|
||||
### Test Dependencies
|
||||
|
||||
To run the test suite and build the gem you'll need to install Jekyll's dependencies by running the following command:
|
||||
|
||||
```sh
|
||||
script/bootstrap
|
||||
```
|
||||
|
||||
Before you make any changes, run the tests and make sure that they pass (to confirm your environment is configured properly):
|
||||
|
||||
```sh
|
||||
script/cibuild
|
||||
```
|
||||
|
||||
If you are only updating a file in `test/`, you can use the command:
|
||||
|
||||
```sh
|
||||
script/test test/blah_test.rb
|
||||
```
|
||||
|
||||
If you are only updating a `.feature` file, you can use the command:
|
||||
|
||||
```sh
|
||||
script/cucumber features/blah.feature
|
||||
```
|
||||
|
||||
Both `script/test` and `script/cucumber` can be run without arguments to
|
||||
run its entire respective suite.
|
||||
|
||||
## Visual Studio Code Development Container
|
||||
|
||||
If you've got [Visual Studio Code](https://code.visualstudio.com/) with the [Remote Development Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) installed then simply opening this repository in Visual Studio Code and following the prompts to "Re-open In A Development Container" will get you setup and ready to go with a fresh environment with all the requirements installed.
|
||||
|
||||
## A thank you
|
||||
|
||||
Thanks! Hacking on Jekyll should be fun. If you find any of this hard to figure out, let us know so we can improve our process or documentation!
|
||||
5
.github/FUNDING.yml
vendored
5
.github/FUNDING.yml
vendored
@@ -1,5 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
# github: jekyll
|
||||
open_collective: jekyll
|
||||
tidelift: rubygems/jekyll
|
||||
104
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
104
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,104 +0,0 @@
|
||||
name: Bug Report
|
||||
description: "Is something not working as expected?"
|
||||
title: "[Bug]: "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Hi! Thank you for taking the time to report a bug with Jekyll.
|
||||
|
||||
Please consider asking your question at https://talk.jekyllrb.com if one or more of the following is applicable to your situation:
|
||||
|
||||
- You are not sure if the issue is a bug in Jekyll.
|
||||
- The issue is caused by a third-party plugin.
|
||||
- This is just a generic usage question.
|
||||
|
||||
Additionally, please note that this platform is meant for bugs in Jekyll core only.
|
||||
Issues regarding dependencies and plugins should be reported in their respective repositories.
|
||||
- type: input
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: The operating system of your computer.
|
||||
placeholder: "Ubuntu 21.10"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: ruby-version
|
||||
attributes:
|
||||
label: Ruby Version
|
||||
description: |
|
||||
The Ruby version you were using at the time.
|
||||
Run `ruby -v` in your terminal and paste the output in the input field.
|
||||
placeholder: "ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x64-mingw32]"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: jekyll-version
|
||||
attributes:
|
||||
label: Jekyll Version
|
||||
description: |
|
||||
The version of Jekyll used in your project.
|
||||
Run `bundle exec jekyll -v` and paste the output in the input field.
|
||||
*If you are not using a Gemfile, run `jekyll -v` instead.*
|
||||
placeholder: "jekyll 4.2.1"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: ghp-version
|
||||
attributes:
|
||||
label: GitHub Pages Version
|
||||
description: |
|
||||
Are you deploying your site using GitHub Pages?
|
||||
If yes, then we need to know the `github-pages` version used by your project. Proceed ahead otherwise.
|
||||
If you're using the `github-pages` gem in your Gemfile, paste the output from running the following:
|
||||
```
|
||||
bundle exec github-pages -v
|
||||
```
|
||||
Otherwise, enter `Latest` in the input field and proceed ahead.
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: Briefly describe what you expected to see or get with a certain functionality.
|
||||
placeholder: |
|
||||
I expected my site to be built successfully when I run the following:
|
||||
```
|
||||
bundle exec jekyll build
|
||||
```
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: actual
|
||||
attributes:
|
||||
label: Current Behavior
|
||||
description: >
|
||||
Describe the details of the bug.
|
||||
Be sure to include any steps you took for the problem to exist, such as the directories
|
||||
you created and the full command you ran.
|
||||
Include any plugins you have configured for use in the site.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
description: |
|
||||
Please copy and paste any relevant log output from your terminal.
|
||||
*Note: This will be automatically formatted into code, so no need for backticks.*
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: sample
|
||||
attributes:
|
||||
label: Code Sample
|
||||
description: >
|
||||
The easiest way for someone to understand an issue is if they could reproduce your issue
|
||||
in their environment. Therefore, please provide a link to your project repository alongwith
|
||||
instructions to reproduce your issue. If your project is not publicly accessible, please
|
||||
consider setting up a minimal test repository complete with necessary instructions.
|
||||
placeholder: |
|
||||
### Steps to reproduce issue
|
||||
|
||||
- Clone [my repo](https://github.com/owner/repo)
|
||||
- Install site dependencies
|
||||
- Run `bundle exec jekyll build -s src -d src/dist`
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Jekyll Community Forum
|
||||
url: https://talk.jekyllrb.com/
|
||||
about: Please ask and answer questions here.
|
||||
24
.github/ISSUE_TEMPLATE/documentation.md
vendored
24
.github/ISSUE_TEMPLATE/documentation.md
vendored
@@ -1,24 +0,0 @@
|
||||
---
|
||||
name: Documentation
|
||||
about: Found a typo or something that isn't crystal clear in our docs?
|
||||
title: '[Docs]: '
|
||||
labels: documentation
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->
|
||||
|
||||
## Motivation
|
||||
|
||||
<!-- Why should we update our docs? -->
|
||||
|
||||
|
||||
|
||||
## Suggestion
|
||||
|
||||
<!-- What should we do instead? -->
|
||||
|
||||
|
||||
|
||||
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->
|
||||
73
.github/ISSUE_TEMPLATE/feature_request.md
vendored
73
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,73 +0,0 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Want us to add any features to Jekyll?
|
||||
title: 'feat: '
|
||||
labels: feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Hi! Thanks for considering to file a feature request with Jekyll. Please take the time to
|
||||
answer the basic questions. Please try to be as detailed as possible.
|
||||
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
## Summary
|
||||
|
||||
<!--
|
||||
A one-paragraph explanation of the feature.
|
||||
-->
|
||||
|
||||
## Motivation
|
||||
|
||||
<!--
|
||||
Why do you want to see this feature in Jekyll? What makes you sure that it should not be
|
||||
implemented at the plugin level, but in Jekyll core? What use cases does it support?
|
||||
|
||||
NOTE: Please be mindful of the Jekyll philosophy (https://jekyllrb.com/philosophy/),
|
||||
particularly Section 5. Think about if 90% of the users would benefit from your
|
||||
feature request, and whether your feature would be better off in a plugin.
|
||||
-->
|
||||
|
||||
## Guide-level explanation
|
||||
|
||||
<!--
|
||||
Explain the proposal as if it was already included in the project and you
|
||||
were teaching it to another programmer. That generally means:
|
||||
|
||||
- Introducing new named concepts.
|
||||
- Explaining the feature largely in terms of examples.
|
||||
- If applicable, provide sample error messages, deprecation warnings, or
|
||||
migration guidance.
|
||||
|
||||
If this is a small feature, you may omit this section.
|
||||
-->
|
||||
|
||||
## Reference-level explanation
|
||||
|
||||
<!--
|
||||
This is the technical portion of the feature request. Explain the design in
|
||||
sufficient detail that:
|
||||
|
||||
- Its interaction with other features is clear.
|
||||
- It is reasonably clear how the feature would be implemented.
|
||||
- Corner cases are dissected by example.
|
||||
|
||||
If you do not know how to answer this, you can omit it. No worries!
|
||||
-->
|
||||
|
||||
## Drawbacks
|
||||
|
||||
<!--
|
||||
Why should we *not* do this?
|
||||
-->
|
||||
|
||||
## Unresolved Questions
|
||||
|
||||
<!--
|
||||
What related issues do you consider out of scope for this feature that could be
|
||||
addressed in the future independently of the solution that comes out of this
|
||||
feature?
|
||||
-->
|
||||
46
.github/PULL_REQUEST_TEMPLATE.md
vendored
46
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,46 +0,0 @@
|
||||
<!--
|
||||
Thanks for creating a Pull Request! Before you submit, please make sure
|
||||
you've done the following:
|
||||
|
||||
- I read the contributing document at https://jekyllrb.com/docs/contributing/
|
||||
-->
|
||||
|
||||
<!--
|
||||
Make our lives easier! Choose one of the following by uncommenting it:
|
||||
-->
|
||||
|
||||
<!-- This is a 🐛 bug fix. -->
|
||||
<!-- This is a 🙋 feature or enhancement. -->
|
||||
<!-- This is a 🔦 documentation change. -->
|
||||
<!-- This is a 🔨 code refactoring. -->
|
||||
|
||||
<!--
|
||||
Before you submit this pull request, make sure to have a look at the following
|
||||
checklist. If you don't know how to do some of these, that's fine! Submit
|
||||
your pull request and we will help you out on the way.
|
||||
|
||||
- I've added tests (if it's a bug, feature or enhancement)
|
||||
- I've adjusted the documentation (if it's a feature or enhancement)
|
||||
- The test suite passes locally (run `script/cibuild` to verify this)
|
||||
-->
|
||||
|
||||
## Summary
|
||||
|
||||
<!--
|
||||
Provide a description of what your pull request changes.
|
||||
-->
|
||||
|
||||
## Context
|
||||
|
||||
<!--
|
||||
Is this related to any GitHub issue(s)?
|
||||
|
||||
You can use keywords to automatically close the related issue.
|
||||
For example, (all of) the following will close issue #4567 when your PR is merged.
|
||||
|
||||
Closes #4567
|
||||
Fixes #4567
|
||||
Resolves #4567
|
||||
|
||||
Use any one of the above as applicable.
|
||||
-->
|
||||
32
.github/SECURITY.markdown
vendored
32
.github/SECURITY.markdown
vendored
@@ -1,32 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Security updates are applied to the latest MINOR version of Jekyll, and the version used by GitHub Pages, v3.9.x.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 4.2.x | :white_check_mark: |
|
||||
| 3.9.x | :white_check_mark: |
|
||||
| < 3.9.x | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report vulnerabilities by sending an email to security@jekyllrb.com with the following information:
|
||||
|
||||
1. A description of the vulnerability
|
||||
2. Reproduction steps and/or a sample site (share a private repo to the [Jekyll Security Team](docs/pages/team.md))
|
||||
3. Your contact information
|
||||
|
||||
The Jekyll security team will respond to your submission and notify you whether it has been confirmed by the team.
|
||||
Your confidentiality is kindly requested as we work on a fix. We will provide our patch to you to test and verify that the vulnerability has
|
||||
been closed.
|
||||
|
||||
If you have created a patch and would like to submit that to us as well, we will happily consider it though we cannot guarantee that we will
|
||||
use it. If we use your patch, we will attribute authorship to you either as the commit author, or as a co-author.
|
||||
|
||||
Once a fix is verified, we will release PATCH versions of the supported MINOR versions and assign a CVE to the vulnerability. You will receive
|
||||
credit in our release post.
|
||||
|
||||
Once the patched version has been released, we will no longer request you to maintain confidentiality and you may choose to share details on
|
||||
how you found the vulnerability with the community.
|
||||
20
.github/SUPPORT.markdown
vendored
20
.github/SUPPORT.markdown
vendored
@@ -1,20 +0,0 @@
|
||||
# Jekyll Support
|
||||
|
||||
## Getting Help
|
||||
|
||||
**Jekyll's issue tracker is not a support forum.**
|
||||
|
||||
If you're looking for support for Jekyll, there are a lot of options:
|
||||
|
||||
* Read [Jekyll Documentation](https://jekyllrb.com/docs/home/)
|
||||
* If you have a question about using Jekyll, start a discussion on [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll)
|
||||
* Chat with Jekyllers — Join [our Gitter channel](https://gitter.im/jekyll/jekyll) or [our IRC channel on Freenode](irc:irc.freenode.net/jekyll)
|
||||
|
||||
There are a bunch of helpful community members on these services that should be willing to point you in the right direction.
|
||||
|
||||
## Report a bug
|
||||
|
||||
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository — First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository.
|
||||
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
|
||||
|
||||
Happy Jekyllin'!
|
||||
17
.github/actions/spelling/README.md
vendored
17
.github/actions/spelling/README.md
vendored
@@ -1,17 +0,0 @@
|
||||
# check-spelling/check-spelling configuration
|
||||
|
||||
File | Purpose | Format | Info
|
||||
-|-|-|-
|
||||
[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
|
||||
[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
|
||||
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
|
||||
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
|
||||
[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
|
||||
[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
||||
[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
|
||||
[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
||||
[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
|
||||
[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
|
||||
|
||||
Note: you can replace any of these files with a directory by the same name (minus the suffix)
|
||||
and then include multiple files inside that directory (with that suffix) to merge multiple files together.
|
||||
25
.github/actions/spelling/advice.md
vendored
25
.github/actions/spelling/advice.md
vendored
@@ -1,25 +0,0 @@
|
||||
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
|
||||
<details><summary>If the flagged items are :exploding_head: false positives</summary>
|
||||
|
||||
If items relate to a ...
|
||||
* binary file (or some other file you wouldn't want to check at all).
|
||||
|
||||
Please add a file path to the `excludes.txt` file matching the containing file.
|
||||
|
||||
File paths are Perl 5 Regular Expressions - you can [test](
|
||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
|
||||
|
||||
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
|
||||
../tree/HEAD/README.md) (on whichever branch you're using).
|
||||
|
||||
* well-formed pattern.
|
||||
|
||||
If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
|
||||
try adding it to the `patterns.txt` file.
|
||||
|
||||
Patterns are Perl 5 Regular Expressions - you can [test](
|
||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
|
||||
|
||||
Note that patterns can't match multiline strings.
|
||||
|
||||
</details>
|
||||
17
.github/actions/spelling/allow.txt
vendored
17
.github/actions/spelling/allow.txt
vendored
@@ -1,17 +0,0 @@
|
||||
built-ins
|
||||
github
|
||||
hakiri
|
||||
https
|
||||
Linting
|
||||
Microsoft
|
||||
ssh
|
||||
Statictastic
|
||||
statictastic
|
||||
ubuntu
|
||||
Wikipedia
|
||||
workaround
|
||||
workaround
|
||||
workarounds
|
||||
WSL
|
||||
decapcms
|
||||
tina
|
||||
520
.github/actions/spelling/candidate.patterns
vendored
520
.github/actions/spelling/candidate.patterns
vendored
@@ -1,520 +0,0 @@
|
||||
# marker to ignore all code on line
|
||||
^.*/\* #no-spell-check-line \*/.*$
|
||||
# marker for ignoring a comment to the end of the line
|
||||
// #no-spell-check.*$
|
||||
|
||||
# patch hunk comments
|
||||
^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .*
|
||||
# git index header
|
||||
index [0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
|
||||
|
||||
# cid urls
|
||||
(['"])cid:.*?\g{-1}
|
||||
|
||||
# data url in parens
|
||||
\(data:[^)]*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\)
|
||||
# data url in quotes
|
||||
([`'"])data:.*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
|
||||
# data url
|
||||
data:[-a-zA-Z=;:/0-9+]*,\S*
|
||||
|
||||
# mailto urls
|
||||
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
|
||||
|
||||
# magnet urls
|
||||
magnet:[?=:\w]+
|
||||
|
||||
# magnet urls
|
||||
"magnet:[^"]+"
|
||||
|
||||
# obs:
|
||||
"obs:[^"]*"
|
||||
|
||||
# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read
|
||||
# In this examples content, I'm using a number of different ways to match things to show various approaches
|
||||
# asciinema
|
||||
\basciinema\.org/a/[0-9a-zA-Z]+
|
||||
|
||||
# apple
|
||||
\bdeveloper\.apple\.com/[-\w?=/]+
|
||||
# Apple music
|
||||
\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+
|
||||
|
||||
# appveyor api
|
||||
\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
|
||||
# appveyor project
|
||||
\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+
|
||||
|
||||
# Amazon
|
||||
|
||||
# Amazon
|
||||
\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
|
||||
# AWS S3
|
||||
\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]*
|
||||
# AWS execute-api
|
||||
\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b
|
||||
# AWS ELB
|
||||
\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b
|
||||
# AWS SNS
|
||||
\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]*
|
||||
# AWS VPC
|
||||
vpc-\w+
|
||||
|
||||
# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
|
||||
# YouTube url
|
||||
\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
|
||||
# YouTube music
|
||||
\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*)
|
||||
# YouTube tag
|
||||
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
|
||||
# YouTube image
|
||||
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
|
||||
# Google Accounts
|
||||
\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]*
|
||||
# Google Analytics
|
||||
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
|
||||
# Google APIs
|
||||
\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+
|
||||
# Google Storage
|
||||
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
|
||||
# Google Calendar
|
||||
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
|
||||
\w+\@group\.calendar\.google\.com\b
|
||||
# Google DataStudio
|
||||
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
|
||||
# The leading `/` here is as opposed to the `\b` above
|
||||
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
|
||||
# Google Docs
|
||||
/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|))
|
||||
# Google Drive
|
||||
\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]*
|
||||
# Google Groups
|
||||
\bgroups\.google\.com/(?:(?:forum/#!|d/)(?:msg|topics?|searchin)|a)/[^/\s"]+/[-a-zA-Z0-9$]+(?:/[-a-zA-Z0-9]+)*
|
||||
# Google Maps
|
||||
\bmaps\.google\.com/maps\?[\w&;=]*
|
||||
# Google themes
|
||||
themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
|
||||
# Google CDN
|
||||
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
|
||||
# Goo.gl
|
||||
/goo\.gl/[a-zA-Z0-9]+
|
||||
# Google Chrome Store
|
||||
\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|)
|
||||
# Google Books
|
||||
\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]*
|
||||
# Google Fonts
|
||||
\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
|
||||
# Google Forms
|
||||
\bforms\.gle/\w+
|
||||
# Google Scholar
|
||||
\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+
|
||||
# Google Colab Research Drive
|
||||
\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]*
|
||||
|
||||
# GitHub SHAs (api)
|
||||
\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b
|
||||
# GitHub SHAs (markdown)
|
||||
(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
|
||||
# GitHub SHAs
|
||||
\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b
|
||||
# GitHub wiki
|
||||
\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b
|
||||
# githubusercontent
|
||||
/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
|
||||
# githubassets
|
||||
\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+)
|
||||
# gist github
|
||||
\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
|
||||
# git.io
|
||||
\bgit\.io/[0-9a-zA-Z]+
|
||||
# GitHub JSON
|
||||
"node_id": "[-a-zA-Z=;:/0-9+]*"
|
||||
# Contributor
|
||||
\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
|
||||
# GHSA
|
||||
GHSA(?:-[0-9a-z]{4}){3}
|
||||
|
||||
# GitLab commit
|
||||
\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
|
||||
# GitLab merge requests
|
||||
\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b
|
||||
# GitLab uploads
|
||||
\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]*
|
||||
# GitLab commits
|
||||
\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b
|
||||
|
||||
# binanace
|
||||
accounts.binance.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
|
||||
|
||||
# bitbucket diff
|
||||
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+
|
||||
# bitbucket repositories commits
|
||||
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
|
||||
# bitbucket commits
|
||||
\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
|
||||
|
||||
# bit.ly
|
||||
\bbit\.ly/\w+
|
||||
|
||||
# bitrise
|
||||
\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]*
|
||||
|
||||
# bootstrapcdn.com
|
||||
\bbootstrapcdn\.com/[-./\w]+
|
||||
|
||||
# cdn.cloudflare.com
|
||||
\bcdnjs\.cloudflare\.com/[./\w]+
|
||||
|
||||
# circleci
|
||||
\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+
|
||||
|
||||
# gitter
|
||||
\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+
|
||||
|
||||
# gravatar
|
||||
\bgravatar\.com/avatar/[0-9a-f]+
|
||||
|
||||
# ibm
|
||||
[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]*
|
||||
|
||||
# imgur
|
||||
\bimgur\.com/[^.]+
|
||||
|
||||
# Internet Archive
|
||||
\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*)
|
||||
|
||||
# discord
|
||||
/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
|
||||
|
||||
# Disqus
|
||||
\bdisqus\.com/[-\w/%.()!?&=_]*
|
||||
|
||||
# medium link
|
||||
\blink\.medium\.com/[a-zA-Z0-9]+
|
||||
# medium
|
||||
\bmedium\.com/\@?[^/\s"]+/[-\w]+
|
||||
|
||||
# microsoft
|
||||
\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
|
||||
# powerbi
|
||||
\bapp\.powerbi\.com/reportEmbed/[^"' ]*
|
||||
# vs devops
|
||||
\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
|
||||
# microsoft store
|
||||
\bmicrosoft\.com/store/apps/\w+
|
||||
|
||||
# mvnrepository.com
|
||||
\bmvnrepository\.com/[-0-9a-z./]+
|
||||
|
||||
# now.sh
|
||||
/[0-9a-z-.]+\.now\.sh\b
|
||||
|
||||
# oracle
|
||||
\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]*
|
||||
|
||||
# chromatic.com
|
||||
/\S+.chromatic.com\S*[")]
|
||||
|
||||
# codacy
|
||||
\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+
|
||||
|
||||
# compai
|
||||
\bcompai\.pub/v1/png/[0-9a-f]+
|
||||
|
||||
# mailgun api
|
||||
\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]*
|
||||
# mailgun
|
||||
\b[0-9a-z]+.mailgun.org
|
||||
|
||||
# /message-id/
|
||||
/message-id/[-\w@./%]+
|
||||
|
||||
# Reddit
|
||||
\breddit\.com/r/[/\w_]*
|
||||
|
||||
# requestb.in
|
||||
\brequestb\.in/[0-9a-z]+
|
||||
|
||||
# sched
|
||||
\b[a-z0-9]+\.sched\.com\b
|
||||
|
||||
# Slack url
|
||||
slack://[a-zA-Z0-9?&=]+
|
||||
# Slack
|
||||
\bslack\.com/[-0-9a-zA-Z/_~?&=.]*
|
||||
# Slack edge
|
||||
\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+
|
||||
# Slack images
|
||||
\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+
|
||||
|
||||
# shields.io
|
||||
\bshields\.io/[-\w/%?=&.:+;,]*
|
||||
|
||||
# stackexchange -- https://stackexchange.com/feeds/sites
|
||||
\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
|
||||
|
||||
# Sentry
|
||||
[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
|
||||
|
||||
# Twitter markdown
|
||||
\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
|
||||
# Twitter hashtag
|
||||
\btwitter\.com/hashtag/[\w?_=&]*
|
||||
# Twitter status
|
||||
\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
|
||||
# Twitter profile images
|
||||
\btwimg\.com/profile_images/[_\w./]*
|
||||
# Twitter media
|
||||
\btwimg\.com/media/[-_\w./?=]*
|
||||
# Twitter link shortened
|
||||
\bt\.co/\w+
|
||||
|
||||
# facebook
|
||||
\bfburl\.com/[0-9a-z_]+
|
||||
# facebook CDN
|
||||
\bfbcdn\.net/[\w/.,]*
|
||||
# facebook watch
|
||||
\bfb\.watch/[0-9A-Za-z]+
|
||||
|
||||
# dropbox
|
||||
\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+
|
||||
|
||||
# ipfs protocol
|
||||
ipfs://[0-9a-z]*
|
||||
# ipfs url
|
||||
/ipfs/[0-9a-z]*
|
||||
|
||||
# w3
|
||||
\bw3\.org/[-0-9a-zA-Z/#.]+
|
||||
|
||||
# loom
|
||||
\bloom\.com/embed/[0-9a-f]+
|
||||
|
||||
# regex101
|
||||
\bregex101\.com/r/[^/\s"]+/\d+
|
||||
|
||||
# figma
|
||||
\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+
|
||||
|
||||
# freecodecamp.org
|
||||
\bfreecodecamp\.org/[-\w/.]+
|
||||
|
||||
# image.tmdb.org
|
||||
\bimage\.tmdb\.org/[/\w.]+
|
||||
|
||||
# mermaid
|
||||
\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+
|
||||
|
||||
# Wikipedia
|
||||
\ben\.wikipedia\.org/wiki/[-\w%.#]+
|
||||
|
||||
# gitweb
|
||||
[^"\s]+/gitweb/\S+;h=[0-9a-f]+
|
||||
|
||||
# HyperKitty lists
|
||||
/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/
|
||||
|
||||
# lists
|
||||
/thread\.html/[^"\s]+
|
||||
|
||||
# list-management
|
||||
\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+
|
||||
|
||||
# kubectl.kubernetes.io/last-applied-configuration
|
||||
"kubectl.kubernetes.io/last-applied-configuration": ".*"
|
||||
|
||||
# pgp
|
||||
\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]*
|
||||
|
||||
# Spotify
|
||||
\bopen\.spotify\.com/embed/playlist/\w+
|
||||
|
||||
# Mastodon
|
||||
\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]*
|
||||
|
||||
# scastie
|
||||
\bscastie\.scala-lang\.org/[^/]+/\w+
|
||||
|
||||
# images.unsplash.com
|
||||
\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+
|
||||
|
||||
# pastebin
|
||||
\bpastebin\.com/[\w/]+
|
||||
|
||||
# heroku
|
||||
\b\w+\.heroku\.com/source/archive/\w+
|
||||
|
||||
# quip
|
||||
\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)?
|
||||
|
||||
# badgen.net
|
||||
\bbadgen\.net/badge/[^")\]'\s]+
|
||||
|
||||
# statuspage.io
|
||||
\w+\.statuspage\.io\b
|
||||
|
||||
# media.giphy.com
|
||||
\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+
|
||||
|
||||
# tinyurl
|
||||
\btinyurl\.com/\w+
|
||||
|
||||
# getopts
|
||||
\bgetopts\s+(?:"[^"]+"|'[^']+')
|
||||
|
||||
# ANSI color codes
|
||||
(?:\\(?:u00|x)1b|\x1b)\[\d+(?:;\d+|)m
|
||||
|
||||
# URL escaped characters
|
||||
\%[0-9A-F][A-F]
|
||||
# IPv6
|
||||
\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
|
||||
# c99 hex digits (not the full format, just one I've seen)
|
||||
0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP]
|
||||
# Punycode
|
||||
\bxn--[-0-9a-z]+
|
||||
# sha
|
||||
sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
|
||||
# sha-... -- uses a fancy capture
|
||||
(['"]|")[0-9a-f]{40,}\g{-1}
|
||||
# hex runs
|
||||
\b[0-9a-fA-F]{16,}\b
|
||||
# hex in url queries
|
||||
=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?&
|
||||
# ssh
|
||||
(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,}
|
||||
|
||||
# PGP
|
||||
\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b
|
||||
# GPG keys
|
||||
\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b
|
||||
# Well known gpg keys
|
||||
.well-known/openpgpkey/[\w./]+
|
||||
|
||||
# uuid:
|
||||
\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
|
||||
# hex digits including css/html color classes:
|
||||
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
|
||||
# integrity
|
||||
integrity="sha\d+-[-a-zA-Z=;:/0-9+]{40,}"
|
||||
|
||||
# https://www.gnu.org/software/groff/manual/groff.html
|
||||
# man troff content
|
||||
\\f[BCIPR]
|
||||
# '
|
||||
\\\(aq
|
||||
|
||||
# .desktop mime types
|
||||
^MimeTypes?=.*$
|
||||
# .desktop localized entries
|
||||
^[A-Z][a-z]+\[[a-z]+\]=.*$
|
||||
# Localized .desktop content
|
||||
Name\[[^\]]+\]=.*
|
||||
|
||||
# IServiceProvider
|
||||
\bI(?=(?:[A-Z][a-z]{2,})+\b)
|
||||
|
||||
# crypt
|
||||
"\$2[ayb]\$.{56}"
|
||||
|
||||
# scrypt / argon
|
||||
\$(?:scrypt|argon\d+[di]*)\$\S+
|
||||
|
||||
# Input to GitHub JSON
|
||||
content: "[-a-zA-Z=;:/0-9+]*="
|
||||
|
||||
# Python stringprefix / binaryprefix
|
||||
# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
|
||||
(?<!')\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)'(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})
|
||||
|
||||
# Regular expressions for (P|p)assword
|
||||
\([A-Z]\|[a-z]\)[a-z]+
|
||||
|
||||
# JavaScript regular expressions
|
||||
# javascript test regex
|
||||
/.*/[gim]*\.test\(
|
||||
# javascript match regex
|
||||
\.match\(/[^/\s"]*/[gim]*\s*
|
||||
# javascript match regex
|
||||
\.match\(/\\[b].*?/[gim]*\s*\)(?:;|$)
|
||||
# javascript regex
|
||||
^\s*/\\[b].*/[gim]*\s*(?:\)(?:;|$)|,$)
|
||||
# javascript replace regex
|
||||
\.replace\(/[^/\s"]*/[gim]*\s*,
|
||||
|
||||
# Go regular expressions
|
||||
regexp?\.MustCompile\(`[^`]*`\)
|
||||
|
||||
# sed regular expressions
|
||||
sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2}
|
||||
|
||||
# go install
|
||||
go install(?:\s+[a-z]+\.[-@\w/.]+)+
|
||||
|
||||
# kubernetes pod status lists
|
||||
# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase
|
||||
\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+
|
||||
|
||||
# kubectl - pods in CrashLoopBackOff
|
||||
\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+
|
||||
|
||||
# kubernetes object suffix
|
||||
-[0-9a-f]{10}-\w{5}\s
|
||||
|
||||
# posthog secrets
|
||||
posthog\.init\((['"])phc_[^"',]+\g{-1},
|
||||
|
||||
# xcode
|
||||
|
||||
# xcodeproject scenes
|
||||
(?:Controller|ID|id)="\w{3}-\w{2}-\w{3}"
|
||||
|
||||
# xcode api botches
|
||||
customObjectInstantitationMethod
|
||||
|
||||
# font awesome classes
|
||||
\.fa-[-a-z0-9]+
|
||||
|
||||
# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
|
||||
# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
|
||||
# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
|
||||
## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
|
||||
## You could manually change `(?i)X...` to use `[Xx]...`
|
||||
## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
|
||||
# Lorem
|
||||
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*
|
||||
|
||||
# Non-English
|
||||
[a-zA-Z]*[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*
|
||||
|
||||
# French
|
||||
# This corpus only had capital letters, but you probably want lowercase ones as well.
|
||||
\b[LN]'+[a-z]{2,}\b
|
||||
|
||||
# latex
|
||||
\\(?:n(?:ew|ormal|osub)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
|
||||
|
||||
# the negative lookahead here is to allow catching 'templatesz' as a misspelling
|
||||
# but to otherwise recognize a Windows path with \templates\foo.template or similar:
|
||||
\\(?:necessary|r(?:eport|esolve[dr]?|esult)|t(?:arget|emplates?))(?![a-z])
|
||||
# ignore long runs of a single character:
|
||||
\b([A-Za-z])\g{-1}{3,}\b
|
||||
|
||||
# version suffix <word>v#
|
||||
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
|
||||
# Compiler flags (Scala)
|
||||
(?:^|[\t ,>"'`=(])-J-[DPWXY](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
|
||||
# Compiler flags
|
||||
(?:^|[\t ,"'`=(])-[DPWXYLlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
|
||||
# Compiler flags (linker)
|
||||
,-B
|
||||
# curl arguments
|
||||
\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
|
||||
# set arguments
|
||||
\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
|
||||
# tar arguments
|
||||
\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
|
||||
# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
|
||||
\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
|
||||
# macOS temp folders
|
||||
/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/
|
||||
70
.github/actions/spelling/excludes.txt
vendored
70
.github/actions/spelling/excludes.txt
vendored
@@ -1,70 +0,0 @@
|
||||
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
|
||||
|
||||
(?:^|/)(?i)COPYRIGHT
|
||||
(?:^|/)(?i)LICEN[CS]E
|
||||
(?:^|/)3rdparty/
|
||||
(?:^|/)go\.sum$
|
||||
(?:^|/)package(?:-lock|)\.json$
|
||||
(?:^|/)vendor/
|
||||
|
||||
/fonts/
|
||||
ignore$
|
||||
|
||||
\.avi$
|
||||
\.bmp$
|
||||
\.bz2$
|
||||
\.class$
|
||||
\.crt$
|
||||
\.dll$
|
||||
\.docx?$
|
||||
\.drawio$
|
||||
\.DS_Store$
|
||||
\.eot$
|
||||
\.exe$
|
||||
\.gif$
|
||||
\.gitattributes$
|
||||
\.graffle$
|
||||
\.gz$
|
||||
\.icns$
|
||||
\.ico$
|
||||
\.jar$
|
||||
\.jks$
|
||||
\.jpe?g$
|
||||
\.key$
|
||||
\.lib$
|
||||
\.lock$
|
||||
\.map$
|
||||
\.min\..
|
||||
\.mod$
|
||||
\.mp[34]$
|
||||
\.o$
|
||||
\.ocf$
|
||||
\.otf$
|
||||
\.pdf$
|
||||
\.pem$
|
||||
\.png$
|
||||
\.psd$
|
||||
\.pyc$
|
||||
\.s$
|
||||
\.svgz?$
|
||||
\.tar$
|
||||
\.tiff?$
|
||||
\.ttf$
|
||||
\.wav$
|
||||
\.webm$
|
||||
\.webp$
|
||||
\.woff$
|
||||
\.woff2$
|
||||
\.xlsx?$
|
||||
\.zip$
|
||||
|
||||
^docs/pages/redirects/github\.html$
|
||||
^lib/jekyll/mime\.types$
|
||||
^lib/theme_template/example/index\.html$
|
||||
^lib/theme_template/example/_post\.md$
|
||||
^test/fixtures/empty_permalink\.erb$
|
||||
^test/fixtures/webrick/bar/baz\.html$
|
||||
^test/fixtures/webrick/bar/foo\.xhtml$
|
||||
^test/source/_posts/2009-06-22-no-yaml\.markdown$
|
||||
^\.github/
|
||||
^\Q.github/workflows/spelling.yml\E$
|
||||
777
.github/actions/spelling/expect.txt
vendored
777
.github/actions/spelling/expect.txt
vendored
@@ -1,777 +0,0 @@
|
||||
acl
|
||||
activesupport
|
||||
adaoraul
|
||||
addons
|
||||
aeiou
|
||||
AFile
|
||||
afterall
|
||||
Alexey
|
||||
alfredxing
|
||||
algolia
|
||||
allowfullscreen
|
||||
Anatoliy
|
||||
andreyvit
|
||||
Ankit
|
||||
Anning
|
||||
apps
|
||||
appveyor
|
||||
arengu
|
||||
args
|
||||
ariejan
|
||||
arounds
|
||||
asciinema
|
||||
asdf
|
||||
ashmaroli
|
||||
attr
|
||||
Autobuild
|
||||
autocompletion
|
||||
autogenerated
|
||||
Autolink
|
||||
autoload
|
||||
autoreconf
|
||||
autosave
|
||||
awood
|
||||
aws
|
||||
awscli
|
||||
backend
|
||||
backport
|
||||
backtick
|
||||
backticks
|
||||
barcamp
|
||||
baseurl
|
||||
bashrc
|
||||
baz
|
||||
bbatsov
|
||||
bdimcheff
|
||||
bellvat
|
||||
benbalter
|
||||
Beney
|
||||
binstubs
|
||||
bip
|
||||
bitbucket
|
||||
blog
|
||||
Blogger
|
||||
blogging
|
||||
blogs
|
||||
bonafide
|
||||
Bou
|
||||
breadcrumbs
|
||||
briandoll
|
||||
bridgetown
|
||||
bridgetownrb
|
||||
brightbox
|
||||
brighterplanet
|
||||
buddyworks
|
||||
builtatlightspeed
|
||||
Bugfix
|
||||
Burela
|
||||
byparker
|
||||
cachegrind
|
||||
calavera
|
||||
callgraphs
|
||||
cartera
|
||||
cavalle
|
||||
CDNs
|
||||
cgi
|
||||
changefreq
|
||||
changelog
|
||||
chango
|
||||
charset
|
||||
Chayoung
|
||||
chcp
|
||||
chdir
|
||||
Cheatsheet
|
||||
Checkoway
|
||||
chmod
|
||||
chown
|
||||
Chrononaut
|
||||
chruby
|
||||
cibuild
|
||||
cimg
|
||||
circleci
|
||||
CJK
|
||||
classname
|
||||
cloudcannon
|
||||
Cloudinary
|
||||
cloudsh
|
||||
CLT
|
||||
codebase
|
||||
codeclimate
|
||||
CODEOWNERS
|
||||
coderay
|
||||
codeslinger
|
||||
coffeescript
|
||||
colorator
|
||||
commandline
|
||||
commonmark
|
||||
compat
|
||||
compatibilize
|
||||
concat
|
||||
config
|
||||
configyml
|
||||
contentblocks
|
||||
CORS
|
||||
Cov
|
||||
CRLFs
|
||||
cron
|
||||
crontab
|
||||
cruft
|
||||
css
|
||||
csv
|
||||
Currin
|
||||
CVE
|
||||
CWD
|
||||
cygwin
|
||||
daringfireball
|
||||
Dassonville
|
||||
datafiles
|
||||
datetime
|
||||
DCEU
|
||||
Debian
|
||||
debuggability
|
||||
defunkt
|
||||
delegators
|
||||
dependabot
|
||||
deployer
|
||||
deps
|
||||
dest
|
||||
Devkit
|
||||
devops
|
||||
digitalocean
|
||||
dirs
|
||||
disqus
|
||||
ditaa
|
||||
dnf
|
||||
doclist
|
||||
doctype
|
||||
doeorg
|
||||
dommmel
|
||||
dotfile
|
||||
Dousse
|
||||
downcase
|
||||
downcased
|
||||
duckduckgo
|
||||
duritong
|
||||
Dusseau
|
||||
dysinger
|
||||
ecf
|
||||
editorconfig
|
||||
eduardoboucas
|
||||
Elasticsearch
|
||||
elsif
|
||||
Emacs
|
||||
emails
|
||||
emoji
|
||||
endcapture
|
||||
endcomment
|
||||
endfor
|
||||
endhighlight
|
||||
endif
|
||||
endraw
|
||||
endrender
|
||||
endtablerow
|
||||
Enumerables
|
||||
EOL
|
||||
erb
|
||||
errordocument
|
||||
Espinaco
|
||||
eugenebolshakov
|
||||
evaled
|
||||
exe
|
||||
execjs
|
||||
extensionpack
|
||||
extname
|
||||
extnames
|
||||
exts
|
||||
favicon
|
||||
Fengyun
|
||||
ffi
|
||||
figcaption
|
||||
filesystem
|
||||
Finazzo
|
||||
firstimage
|
||||
FIXME
|
||||
flakey
|
||||
flickr
|
||||
fnmatch
|
||||
fontello
|
||||
forloop
|
||||
formcake
|
||||
formcarry
|
||||
formester
|
||||
formingo
|
||||
formkeep
|
||||
formspark
|
||||
formspree
|
||||
formx
|
||||
Forwardable
|
||||
frameborder
|
||||
freenode
|
||||
frontend
|
||||
frontmatter
|
||||
fsnotify
|
||||
ftp
|
||||
fullstory
|
||||
Gaudino
|
||||
gcc
|
||||
gcnovus
|
||||
gemfile
|
||||
gemset
|
||||
gemspec
|
||||
getform
|
||||
getset
|
||||
getsimpleform
|
||||
gettalong
|
||||
gfm
|
||||
ghp
|
||||
ghpages
|
||||
giraffeacademy
|
||||
github
|
||||
githubcom
|
||||
githubusercontent
|
||||
gitignore
|
||||
gitlab
|
||||
gjtorikian
|
||||
globbed
|
||||
globbing
|
||||
google
|
||||
gotcha
|
||||
Goulven
|
||||
gridism
|
||||
GSo
|
||||
gsub
|
||||
gsubbing
|
||||
Hakiri
|
||||
hardcode
|
||||
hashbang
|
||||
hashmap
|
||||
helaili
|
||||
henrik
|
||||
heredoc
|
||||
heroku
|
||||
highlighter
|
||||
hilighting
|
||||
Hoizey
|
||||
homepage
|
||||
hostman
|
||||
hostname
|
||||
href
|
||||
htaccess
|
||||
htm
|
||||
html
|
||||
htmlproofer
|
||||
http
|
||||
httpd
|
||||
httpdocs
|
||||
hyperlinks
|
||||
Iaa
|
||||
ial
|
||||
ico
|
||||
icomoon
|
||||
iconset
|
||||
ified
|
||||
iframe
|
||||
img
|
||||
Impl
|
||||
Inlining
|
||||
invokables
|
||||
irc
|
||||
ivey
|
||||
ize
|
||||
jalali
|
||||
jameshamann
|
||||
jamstackthemes
|
||||
jan
|
||||
javascript
|
||||
Jax
|
||||
jayferd
|
||||
jcon
|
||||
jdoe
|
||||
jeffreytse
|
||||
jeffrydegrande
|
||||
Jekpack
|
||||
jekyllbot
|
||||
jekyllconf
|
||||
Jekyllers
|
||||
Jekyllin
|
||||
Jekylling
|
||||
jekyllized
|
||||
jekylllayoutconcept
|
||||
jekyllrb
|
||||
jekyllthemes
|
||||
jemoji
|
||||
jmcglone
|
||||
jneen
|
||||
johnreilly
|
||||
jpg
|
||||
jqr
|
||||
jruby
|
||||
json
|
||||
jsonify
|
||||
juretta
|
||||
jwarby
|
||||
Kacper
|
||||
Kasberg
|
||||
kbd
|
||||
Kentico
|
||||
Kewin
|
||||
keycdn
|
||||
kickster
|
||||
Kinnula
|
||||
kinsta
|
||||
kiwifruit
|
||||
Kolesky
|
||||
konklone
|
||||
kontent
|
||||
Kotvinsky
|
||||
kramdown
|
||||
Kulig
|
||||
Kwokfu
|
||||
Lamprecht
|
||||
laquo
|
||||
lastmod
|
||||
launchctl
|
||||
launchy
|
||||
laurilehmijoki
|
||||
ldquo
|
||||
learnxinyminutes
|
||||
lexer
|
||||
LGTM
|
||||
libcurl
|
||||
libffi
|
||||
lifecycle
|
||||
lightgray
|
||||
limjh
|
||||
linenos
|
||||
linkify
|
||||
linux
|
||||
liufengyun
|
||||
livereload
|
||||
localheinz
|
||||
localhost
|
||||
localtime
|
||||
Locher
|
||||
loglevel
|
||||
Losslessly
|
||||
lovin
|
||||
lsi
|
||||
lsquo
|
||||
lstrip
|
||||
lyche
|
||||
macos
|
||||
macromates
|
||||
mademistakes
|
||||
mailto
|
||||
Manmeet
|
||||
markdownify
|
||||
Maroli
|
||||
Marsceill
|
||||
maruku
|
||||
mathjax
|
||||
mathml
|
||||
mattr
|
||||
Maximiliano
|
||||
mchung
|
||||
mdash
|
||||
memberspace
|
||||
Memoize
|
||||
memoized
|
||||
memoizing
|
||||
mentoring
|
||||
mergable
|
||||
Mertcan
|
||||
mertkahyaoglu
|
||||
metadata
|
||||
metadatas
|
||||
microdata
|
||||
microsoft
|
||||
mimetype
|
||||
mingw
|
||||
minibundle
|
||||
minifier
|
||||
minitest
|
||||
Mittal
|
||||
mixin
|
||||
mkasberg
|
||||
mkd
|
||||
mkdir
|
||||
mkdn
|
||||
mkdown
|
||||
mmistakes
|
||||
modernizr
|
||||
mojombo
|
||||
moncefbelyamani
|
||||
moz
|
||||
mreid
|
||||
msdn
|
||||
mswin
|
||||
MSYS
|
||||
mtime
|
||||
multiline
|
||||
munging
|
||||
Mvvm
|
||||
myblog
|
||||
mycontent
|
||||
mydata
|
||||
mydoc
|
||||
myimage
|
||||
mypage
|
||||
myposts
|
||||
myproject
|
||||
myrepo
|
||||
mysite
|
||||
myvalue
|
||||
myvar
|
||||
myvariable
|
||||
Nadjib
|
||||
nakanishi
|
||||
namespace
|
||||
namespaced
|
||||
navbar
|
||||
navbars
|
||||
nbsp
|
||||
nearlyfreespeech
|
||||
nethack
|
||||
netlify
|
||||
netlifycms
|
||||
Neue
|
||||
nginx
|
||||
ngx
|
||||
nielsenramon
|
||||
nior
|
||||
nodejs
|
||||
noifniof
|
||||
nokogiri
|
||||
notextile
|
||||
onclick
|
||||
onebox
|
||||
oneclick
|
||||
onschedule
|
||||
opensource
|
||||
openssl
|
||||
Optim
|
||||
orderofinterpretation
|
||||
orgs
|
||||
OSVDB
|
||||
osx
|
||||
packagecontrol
|
||||
pacman
|
||||
paginator
|
||||
pandoc
|
||||
pantulis
|
||||
params
|
||||
parkr
|
||||
parseable
|
||||
paspagon
|
||||
passthrough
|
||||
pathawks
|
||||
Pathutil
|
||||
paywall
|
||||
pdf
|
||||
PDFs
|
||||
Pelykh
|
||||
permalink
|
||||
PHP
|
||||
pinboard
|
||||
Piwigo
|
||||
pjhyett
|
||||
pkill
|
||||
pkpass
|
||||
placeholders
|
||||
planetjekyll
|
||||
plantuml
|
||||
plugin
|
||||
png
|
||||
podcasts
|
||||
popen
|
||||
Porcel
|
||||
Posterous
|
||||
postfiles
|
||||
postlayout
|
||||
postmodern
|
||||
prefetching
|
||||
preinstalled
|
||||
prepends
|
||||
Prioritise
|
||||
Probot
|
||||
projectlist
|
||||
pubstorm
|
||||
pufuwozu
|
||||
pwa
|
||||
pwd
|
||||
pygments
|
||||
qrush
|
||||
Quaid
|
||||
quickstart
|
||||
rackup
|
||||
Rakefile
|
||||
raquo
|
||||
razorops
|
||||
rbenv
|
||||
rdiscount
|
||||
rdoc
|
||||
rdquo
|
||||
readme
|
||||
realz
|
||||
rebund
|
||||
redcarpet
|
||||
redcloth
|
||||
redgreen
|
||||
redhat
|
||||
refactor
|
||||
refactoring
|
||||
refactorings
|
||||
Refactors
|
||||
Refheap
|
||||
regen
|
||||
regex
|
||||
regexp
|
||||
remi
|
||||
reqs
|
||||
Responsify
|
||||
revertable
|
||||
rfc
|
||||
rfelix
|
||||
RHEL
|
||||
ridk
|
||||
roadmap
|
||||
rowspan
|
||||
rspec
|
||||
rsquo
|
||||
rss
|
||||
rstrip
|
||||
rsync
|
||||
rtomayko
|
||||
Rubo
|
||||
rubocop
|
||||
rubychan
|
||||
rubygem
|
||||
rubyinstaller
|
||||
rubyprof
|
||||
Ruparelia
|
||||
Rusiczki
|
||||
rvm
|
||||
ryanflorence
|
||||
saas
|
||||
samplelist
|
||||
samrayner
|
||||
sandboxed
|
||||
Sassc
|
||||
sassify
|
||||
schemastore
|
||||
Schroers
|
||||
Schwartzian
|
||||
scp
|
||||
screenshot
|
||||
scrollbar
|
||||
scrollbars
|
||||
scroller
|
||||
scss
|
||||
scssify
|
||||
sdk
|
||||
SDKROOT
|
||||
sectore
|
||||
semver
|
||||
seo
|
||||
serverless
|
||||
setenv
|
||||
SFTP
|
||||
shingo
|
||||
shopify
|
||||
shortlinks
|
||||
shortlog
|
||||
Shoulda
|
||||
sieversii
|
||||
sigpipe
|
||||
simplecov
|
||||
Singhaniya
|
||||
siteleaf
|
||||
sitemap
|
||||
SITENAME
|
||||
Slicehost
|
||||
slugified
|
||||
slugify
|
||||
smartforms
|
||||
smartify
|
||||
snipcart
|
||||
socio
|
||||
somedir
|
||||
sonnym
|
||||
Sonomy
|
||||
sourced
|
||||
sourcemaps
|
||||
spam
|
||||
spotify
|
||||
src
|
||||
ssg
|
||||
ssh
|
||||
SSL
|
||||
stackoverflow
|
||||
standalone
|
||||
staticfiles
|
||||
staticman
|
||||
statictastic
|
||||
STDERR
|
||||
stdout
|
||||
Stickyposts
|
||||
strftime
|
||||
stringified
|
||||
Stringify
|
||||
styleguide
|
||||
stylesheet
|
||||
subdir
|
||||
subdomain
|
||||
subfolder
|
||||
subfolderitems
|
||||
subfolders
|
||||
subnav
|
||||
subpages
|
||||
subpath
|
||||
subpiece
|
||||
subsubfolderitems
|
||||
subthing
|
||||
subvalues
|
||||
subwidget
|
||||
sudo
|
||||
superdirectories
|
||||
superdirs
|
||||
SUSE
|
||||
sverrirs
|
||||
svg
|
||||
svn
|
||||
swfobject
|
||||
swupd
|
||||
symlink
|
||||
symlinking
|
||||
tablerow
|
||||
tada
|
||||
Taillandier
|
||||
talkyard
|
||||
tbody
|
||||
technicalpickles
|
||||
templating
|
||||
templatize
|
||||
Termux
|
||||
textilize
|
||||
textpattern
|
||||
thead
|
||||
therubyracer
|
||||
Theunissen
|
||||
Thornquest
|
||||
thoughtbot
|
||||
throughs
|
||||
Tidelift
|
||||
timeago
|
||||
timezone
|
||||
timezones
|
||||
titleize
|
||||
TLS
|
||||
tmm
|
||||
tmp
|
||||
toc
|
||||
tok
|
||||
tomjoht
|
||||
toml
|
||||
tomo
|
||||
toolset
|
||||
toshimaru
|
||||
triaged
|
||||
triaging
|
||||
truncatewords
|
||||
tsv
|
||||
ttf
|
||||
Tudou
|
||||
Tumblr
|
||||
Tweetsert
|
||||
txtpen
|
||||
Tyborska
|
||||
tzinfo
|
||||
ubuntu
|
||||
uby
|
||||
ujh
|
||||
ultron
|
||||
undumpable
|
||||
unencode
|
||||
Unescape
|
||||
unescaping
|
||||
unicode
|
||||
uniq
|
||||
upcase
|
||||
uppercasing
|
||||
uri
|
||||
url
|
||||
urlset
|
||||
username
|
||||
usernames
|
||||
usr
|
||||
utf
|
||||
utils
|
||||
utime
|
||||
utm
|
||||
vanpelt
|
||||
Vasovi
|
||||
vendored
|
||||
vercel
|
||||
versioned
|
||||
versioning
|
||||
vertycal
|
||||
Veyor
|
||||
vilcans
|
||||
Vishesh
|
||||
visualstudio
|
||||
vnd
|
||||
vohedge
|
||||
vps
|
||||
vscode
|
||||
vwochnik
|
||||
Walkthroughs
|
||||
wdm
|
||||
We'd
|
||||
webfont
|
||||
webhook
|
||||
webhosting
|
||||
webmentions
|
||||
webrick
|
||||
website
|
||||
weekdate
|
||||
whitelist
|
||||
whitelisting
|
||||
wiki
|
||||
wikipedia
|
||||
wildcards
|
||||
willcodeforfoo
|
||||
woff
|
||||
wordpress
|
||||
Workaround
|
||||
workflow
|
||||
workflows
|
||||
wsl
|
||||
www
|
||||
xcode
|
||||
xcrun
|
||||
xdg
|
||||
Xhmikos
|
||||
xhtml
|
||||
Xiaoiver
|
||||
XMinutes
|
||||
xml
|
||||
xmlns
|
||||
xmlschema
|
||||
yajl
|
||||
yaml
|
||||
Yarp
|
||||
Yashu
|
||||
Yastreb
|
||||
yml
|
||||
Youku
|
||||
youtube
|
||||
yunbox
|
||||
zeropadding
|
||||
Zlatan
|
||||
zlib
|
||||
zoneinfo
|
||||
zpinter
|
||||
Zsh
|
||||
zshrc
|
||||
zypper
|
||||
zzot
|
||||
62
.github/actions/spelling/line_forbidden.patterns
vendored
62
.github/actions/spelling/line_forbidden.patterns
vendored
@@ -1,62 +0,0 @@
|
||||
# reject `m_data` as there's a certain OS which has evil defines that break things if it's used elsewhere
|
||||
# \bm_data\b
|
||||
|
||||
# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
|
||||
# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want
|
||||
# to use this:
|
||||
#\bfit\(
|
||||
|
||||
# s.b. GitHub
|
||||
\bGithub\b
|
||||
|
||||
# s.b. GitLab
|
||||
\bGitlab\b
|
||||
|
||||
# s.b. JavaScript
|
||||
\bJavascript\b
|
||||
|
||||
# s.b. Microsoft
|
||||
\bMicroSoft\b
|
||||
|
||||
# s.b. another
|
||||
\ban[- ]other\b
|
||||
|
||||
# s.b. greater than
|
||||
\bgreater then\b
|
||||
|
||||
# s.b. into
|
||||
#\sin to\s
|
||||
|
||||
# s.b. opt-in
|
||||
\sopt in\s
|
||||
|
||||
# s.b. less than
|
||||
\bless then\b
|
||||
|
||||
# s.b. otherwise
|
||||
\bother[- ]wise\b
|
||||
|
||||
# s.b. nonexistent
|
||||
\bnon existing\b
|
||||
\b[Nn]o[nt][- ]existent\b
|
||||
|
||||
# s.b. preexisting
|
||||
[Pp]re[- ]existing
|
||||
|
||||
# s.b. preempt
|
||||
[Pp]re[- ]empt\b
|
||||
|
||||
# s.b. preemptively
|
||||
[Pp]re[- ]emptively
|
||||
|
||||
# s.b. reentrancy
|
||||
[Rr]e[- ]entrancy
|
||||
|
||||
# s.b. reentrant
|
||||
[Rr]e[- ]entrant
|
||||
|
||||
# s.b. workaround(s)
|
||||
#\bwork[- ]arounds?\b
|
||||
|
||||
# Reject duplicate words
|
||||
\s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s
|
||||
1
.github/actions/spelling/only.txt
vendored
1
.github/actions/spelling/only.txt
vendored
@@ -1 +0,0 @@
|
||||
^docs/.*\.md$
|
||||
164
.github/actions/spelling/patterns.txt
vendored
164
.github/actions/spelling/patterns.txt
vendored
@@ -1,164 +0,0 @@
|
||||
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
|
||||
|
||||
# data urls
|
||||
(['"])data:.*?\g{-1}
|
||||
data:[-a-zA-Z=;:/0-9+]*,\S*
|
||||
|
||||
# YouTube
|
||||
https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]*
|
||||
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
|
||||
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
|
||||
youtube_id:\s*[-a-zA-Z0-9?&=_]*
|
||||
|
||||
# Google Analytics
|
||||
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
|
||||
|
||||
# Google APIs
|
||||
\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+
|
||||
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
|
||||
|
||||
# Google Calendar
|
||||
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
|
||||
\w+\@group\.calendar\.google\.com\b
|
||||
|
||||
# Google DataStudio
|
||||
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
|
||||
|
||||
# The leading `/` here is as opposed to the `\b` above
|
||||
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
|
||||
# Google Docs
|
||||
/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/?
|
||||
|
||||
# Google Groups
|
||||
https://groups\.google\.com/d/topic/[^/]+/[a-zA-Z0-9]+/discussion
|
||||
https://groups\.google\.com/d/msg/[^/]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+
|
||||
|
||||
# Google themes
|
||||
themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+.
|
||||
|
||||
# Google CDN
|
||||
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
|
||||
|
||||
# Goo.gl
|
||||
/goo\.gl/[a-zA-Z0-9]+
|
||||
|
||||
# Google Chrome Store
|
||||
\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|)
|
||||
|
||||
# google_site_verification:
|
||||
google_site_verification: [-a-zA-Z=;:/0-9+]*
|
||||
|
||||
# Ruby-doc.org
|
||||
https://ruby-doc\.org/.*
|
||||
|
||||
# Contributors
|
||||
alphabetical order.*:.*
|
||||
twitter_handle: .*
|
||||
|
||||
# apiKey
|
||||
apiKey: '[a-f0-9]+'
|
||||
|
||||
# FontAwesome
|
||||
/(?:(?i)FontAwesome\.\w+\?\w+)
|
||||
|
||||
# Lorem
|
||||
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus|ultrices)\b(?:\w|\s|[,.])*
|
||||
|
||||
# URL escaped characters
|
||||
\%[0-9A-F]{2}
|
||||
# c99 hex digits (not the full format, just one I've seen)
|
||||
|
||||
# hex digits including css/html color classes:
|
||||
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b
|
||||
|
||||
# Automatically suggested patterns
|
||||
# hit-count: 23 file-count: 15
|
||||
# GitHub SHAs (markdown)
|
||||
(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
|
||||
|
||||
# hit-count: 7 file-count: 4
|
||||
# Wikipedia
|
||||
\ben\.wikipedia\.org/wiki/[-\w%.#]+
|
||||
|
||||
# hit-count: 5 file-count: 3
|
||||
# Non-English
|
||||
[a-zA-Z]*[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*
|
||||
|
||||
# hit-count: 4 file-count: 4
|
||||
# Twitter status
|
||||
\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
|
||||
|
||||
# hit-count: 3 file-count: 3
|
||||
# stackexchange -- https://stackexchange.com/feeds/sites
|
||||
\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
|
||||
|
||||
# hit-count: 3 file-count: 2
|
||||
# vs devops
|
||||
\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
|
||||
|
||||
# hit-count: 2 file-count: 2
|
||||
# mailto urls
|
||||
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
|
||||
|
||||
# hit-count: 2 file-count: 2
|
||||
# githubusercontent
|
||||
/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
|
||||
|
||||
# hit-count: 2 file-count: 2
|
||||
# hex runs
|
||||
\b[0-9a-fA-F]{16,}\b
|
||||
|
||||
# hit-count: 2 file-count: 2
|
||||
# curl arguments
|
||||
\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
|
||||
|
||||
# hit-count: 2 file-count: 1
|
||||
# microsoft
|
||||
\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# Amazon
|
||||
\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# gist github
|
||||
\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# Contributor
|
||||
\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# medium
|
||||
\bmedium\.com/\@?[^/\s"]+/[-\w]+
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# Twitter markdown
|
||||
\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
|
||||
|
||||
# Questionably acceptable forms of `in to`
|
||||
# Personally, I prefer `log into`, but people object
|
||||
# https://www.tprteaching.com/log-into-log-in-to-login/
|
||||
\b[Ll]og in to\b
|
||||
|
||||
# acceptable duplicates
|
||||
# ls directory listings
|
||||
[-bcdlpsw](?:[-r][-w][-sx]){3}\s+\d+\s+(\S+)\s+\g{-1}\s+\d+\s+
|
||||
# C types and repeated CSS values
|
||||
\s(center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?: \g{-1})+\s
|
||||
# go templates
|
||||
\s(\w+)\s+\g{-1}\s+\`(?:graphql|json|yaml):
|
||||
# javadoc / .net
|
||||
(?:[\\@](?:groupname|param)|(?:public|private)(?:\s+static|\s+readonly)*)\s+(\w+)\s+\g{-1}\s
|
||||
|
||||
# Commit message -- Signed-off-by and friends
|
||||
^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$
|
||||
|
||||
# Autogenerated revert commit message
|
||||
^This reverts commit [0-9a-f]{40}\.$
|
||||
|
||||
# ignore long runs of a single character:
|
||||
\b([A-Za-z])\g{-1}{3,}\b
|
||||
|
||||
# ignore inline code
|
||||
`\w+`
|
||||
10
.github/actions/spelling/reject.txt
vendored
10
.github/actions/spelling/reject.txt
vendored
@@ -1,10 +0,0 @@
|
||||
^attache$
|
||||
benefitting
|
||||
occurences?
|
||||
^dependan.*
|
||||
^oer$
|
||||
Sorce
|
||||
^[Ss]pae.*
|
||||
^untill$
|
||||
^untilling$
|
||||
^wether.*
|
||||
15
.github/config.yml
vendored
15
.github/config.yml
vendored
@@ -1,15 +0,0 @@
|
||||
updateDocsComment: >
|
||||
Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would update some of our documentation based on your changes.
|
||||
|
||||
updateDocsWhiteList:
|
||||
- bug
|
||||
- fix
|
||||
- Backport
|
||||
- dev
|
||||
- Update
|
||||
- WIP
|
||||
- chore
|
||||
|
||||
updateDocsTargetFiles:
|
||||
- README
|
||||
- docs/
|
||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
44
.github/first-timers-issue-template.md
vendored
44
.github/first-timers-issue-template.md
vendored
@@ -1,44 +0,0 @@
|
||||
### 🆕🐥☝ First Timers Only.
|
||||
|
||||
This issue is reserved for people who never contributed to Open Source before. We know that the process of creating a pull request is the biggest barrier for new contributors. This issue is for you 💝
|
||||
|
||||
[About First Timers Only](https://www.firsttimersonly.com/).
|
||||
|
||||
### 🤔 What you will need to know.
|
||||
|
||||
Nothing. This issue is meant to welcome you to Open Source :) We are happy to walk you through the process.
|
||||
|
||||
### 📋 Step by Step
|
||||
|
||||
- [ ] 👌 **Join the team**: Add yourself to a Jekyll affinity team.
|
||||
|
||||
Go to [teams.jekyllrb.com](https://teams.jekyllrb.com/) and join a team that best fits your interests. Once you click the link to join a team, you will soon receive an email inviting you to join the Jekyll organization.
|
||||
|
||||
- [ ] 🙋 **Claim this issue**: Comment below.
|
||||
|
||||
Leave a comment that you have claimed this issue.
|
||||
|
||||
- [ ] 📝 **Update** the file [$FILENAME]($BRANCH_URL) in the `$REPO` repository (press the little pen Icon) and edit the line as shown below.
|
||||
|
||||
|
||||
```diff
|
||||
$DIFF
|
||||
```
|
||||
|
||||
|
||||
- [ ] 💾 **Commit** your changes
|
||||
|
||||
- [ ] 🔀 **Start a Pull Request**. There are two ways how you can start a pull request:
|
||||
|
||||
1. If you are familiar with the terminal or would like to learn it, [here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) on how to send a pull request using the terminal.
|
||||
|
||||
2. You can [edit files directly in your browser](https://help.github.com/articles/editing-files-in-your-repository/)
|
||||
|
||||
- [ ] 🏁 **Done** Ask in comments for a review :)
|
||||
|
||||
### 🤔❓ Questions
|
||||
|
||||
Leave a comment below!
|
||||
|
||||
|
||||
This issue was created by [First-Timers-Bot](https://github.com/hoodiehq/first-timers-bot).
|
||||
6
.github/first-timers.yml
vendored
6
.github/first-timers.yml
vendored
@@ -1,6 +0,0 @@
|
||||
repository: jekyll
|
||||
labels:
|
||||
- good first issue
|
||||
- help-wanted
|
||||
- first-time-only
|
||||
template: .github/first-timers-issue-template.md
|
||||
14
.github/workflows/actions/memprof.rb
vendored
14
.github/workflows/actions/memprof.rb
vendored
@@ -1,14 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'jekyll'
|
||||
require 'memory_profiler'
|
||||
|
||||
MemoryProfiler.report(allow_files: ['lib/jekyll/', 'lib/jekyll.rb']) do
|
||||
Jekyll::PluginManager.require_from_bundler
|
||||
Jekyll::Commands::Build.process({
|
||||
"source" => File.expand_path(ARGV[0]),
|
||||
"destination" => File.expand_path("#{ARGV[0]}/_site"),
|
||||
"disable_disk_cache" => true,
|
||||
})
|
||||
puts ''
|
||||
end.pretty_print(scale_bytes: true, normalize_paths: true)
|
||||
30
.github/workflows/benchmark.yml
vendored
30
.github/workflows/benchmark.yml
vendored
@@ -1,30 +0,0 @@
|
||||
name: Micro Benchmark Runs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
path:
|
||||
description: "Path to benchmark script relative to 'benchmark' directory."
|
||||
required: true
|
||||
default: "capture-assign.rb"
|
||||
ruby_version:
|
||||
description: "Ruby version to use (via `ruby/setup-ruby@v1`) action."
|
||||
required: false
|
||||
default: "2.7"
|
||||
|
||||
jobs:
|
||||
benchmark:
|
||||
name: "Benchmark (${{ github.event.inputs.path }}) (Ruby ${{ github.event.inputs.ruby_version }})"
|
||||
runs-on: "ubuntu-latest"
|
||||
env:
|
||||
BENCHMARK: true
|
||||
steps:
|
||||
- name: Checkout Jekyll
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ github.event.inputs.ruby_version }}
|
||||
bundler-cache: true
|
||||
- name: Run Benchmark
|
||||
run: "bundle exec ruby benchmark/${{ github.event.inputs.path }}"
|
||||
85
.github/workflows/ci.yml
vendored
85
.github/workflows/ci.yml
vendored
@@ -1,85 +0,0 @@
|
||||
name: Continuous Integration
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "*-stable"
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- "*-stable"
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
name: "Run Tests (${{ matrix.ruby.label }} on ${{ matrix.os.label }})"
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
ruby:
|
||||
- label: Ruby 2.7
|
||||
version: "2.7"
|
||||
- label: Ruby 3.3
|
||||
version: "3.3"
|
||||
os:
|
||||
- label: Linux
|
||||
image: "ubuntu-latest"
|
||||
- label: Windows
|
||||
image: "windows-latest"
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: "Set up ${{ matrix.ruby.label }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby.version }}
|
||||
bundler-cache: true
|
||||
- name: Run Minitest based tests
|
||||
run: bash script/test
|
||||
- name: Run Cucumber based tests
|
||||
run: bash script/cucumber --color
|
||||
- name: Generate and Build a new site
|
||||
run: bash script/default-site
|
||||
|
||||
xtras:
|
||||
name: "${{ matrix.job_name }} (${{ matrix.setup_label }})"
|
||||
runs-on: "ubuntu-latest"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- job_name: "Unit Test with JRuby"
|
||||
setup_label: "JRuby 9.4.8.0"
|
||||
step_name: "Run Minitest based tests"
|
||||
script_file: "test"
|
||||
ruby_version: "jruby-9.4.8.0"
|
||||
- job_name: "Smoke Test with JRuby"
|
||||
setup_label: "JRuby 9.4.8.0"
|
||||
step_name: "Generate and Build a new site"
|
||||
script_file: "default-site"
|
||||
ruby_version: "jruby-9.4.8.0"
|
||||
- job_name: "Profile Docs Site"
|
||||
setup_label: "Ruby 2.7"
|
||||
step_name: "Build and Profile docs site"
|
||||
script_file: "profile-docs"
|
||||
ruby_version: "2.7"
|
||||
- job_name: "Style Check"
|
||||
setup_label: "Ruby 2.7"
|
||||
step_name: "Run RuboCop"
|
||||
script_file: "fmt"
|
||||
ruby_version: "2.7"
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: "Set up ${{ matrix.setup_label }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby_version }}
|
||||
bundler-cache: true
|
||||
- name: ${{ matrix.step_name }}
|
||||
run: bash script/${{ matrix.script_file }}
|
||||
52
.github/workflows/docs.yml
vendored
52
.github/workflows/docs.yml
vendored
@@ -1,52 +0,0 @@
|
||||
name: Build and deploy Jekyll documentation site
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
env:
|
||||
RUBY_VERSION: 2.7
|
||||
|
||||
jobs:
|
||||
deploy_docs:
|
||||
if: "!contains(github.event.commits[0].message, '[ci skip]')"
|
||||
runs-on: 'ubuntu-latest'
|
||||
env:
|
||||
BUNDLE_PATH: "vendor/bundle"
|
||||
BUNDLE_JOBS: 4
|
||||
BUNDLE_RETRY: 3
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ env.RUBY_VERSION }}
|
||||
bundler-cache: true
|
||||
- name: Clone target branch
|
||||
run: |
|
||||
REMOTE_BRANCH="${REMOTE_BRANCH:-gh-pages}"
|
||||
REMOTE_REPO="https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git"
|
||||
|
||||
echo "Publishing to ${GITHUB_REPOSITORY} on branch ${REMOTE_BRANCH}"
|
||||
rm -rf docs/_site/
|
||||
git clone --depth=1 --branch="${REMOTE_BRANCH}" --single-branch --no-checkout \
|
||||
"${REMOTE_REPO}" docs/_site/
|
||||
- name: Build site
|
||||
run: bundle exec jekyll build --source docs --destination docs/_site --verbose --trace
|
||||
env:
|
||||
# For jekyll-github-metadata
|
||||
JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Deploy to GitHub Pages
|
||||
run: |
|
||||
SOURCE_COMMIT="$(git log -1 --pretty="%an: %B" "$GITHUB_SHA")"
|
||||
pushd docs/_site &>/dev/null
|
||||
: > .nojekyll
|
||||
|
||||
git add --all
|
||||
git -c user.name="${GITHUB_ACTOR}" -c user.email="${GITHUB_ACTOR}@users.noreply.github.com" \
|
||||
commit --quiet \
|
||||
--message "Deploy docs from ${GITHUB_SHA}" \
|
||||
--message "$SOURCE_COMMIT"
|
||||
git push
|
||||
|
||||
popd &>/dev/null
|
||||
34
.github/workflows/release.yml
vendored
34
.github/workflows/release.yml
vendored
@@ -1,34 +0,0 @@
|
||||
name: Release Gem
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "*-stable"
|
||||
paths:
|
||||
- "lib/**/version.rb"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
if: "github.repository_owner == 'jekyll'"
|
||||
name: "Release Gem (Ruby ${{ matrix.ruby_version }})"
|
||||
runs-on: "ubuntu-latest"
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
ruby_version:
|
||||
- 2.7
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: "Set up Ruby ${{ matrix.ruby_version }}"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ${{ matrix.ruby_version }}
|
||||
bundler-cache: true
|
||||
- name: Build and Publish Gem
|
||||
uses: ashmaroli/release-gem@dist
|
||||
with:
|
||||
gemspec_name: jekyll
|
||||
env:
|
||||
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_GEM_PUSH_API_KEY }}
|
||||
90
.github/workflows/spelling.yml
vendored
90
.github/workflows/spelling.yml
vendored
@@ -1,90 +0,0 @@
|
||||
name: Spell Check
|
||||
|
||||
# Comment management is handled through a secondary job, for details see:
|
||||
# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
|
||||
#
|
||||
# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
|
||||
# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare)
|
||||
# it needs `contents: write` in order to add a comment.
|
||||
#
|
||||
# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
|
||||
# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
|
||||
# it needs `pull-requests: write` in order to manipulate those comments.
|
||||
|
||||
# Updating pull request branches is managed via comment handling.
|
||||
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
|
||||
#
|
||||
# These elements work together to make it happen:
|
||||
#
|
||||
# `on.issue_comment`
|
||||
# This event listens to comments by users asking to update the metadata.
|
||||
#
|
||||
# `jobs.update`
|
||||
# This job runs in response to an issue_comment and will push a new commit
|
||||
# to update the spelling metadata.
|
||||
#
|
||||
# `with.experimental_apply_changes_via_bot`
|
||||
# Tells the action to support and generate messages that enable it
|
||||
# to make a commit to update the spelling metadata.
|
||||
#
|
||||
# `with.ssh_key`
|
||||
# In order to trigger workflows when the commit is made, you can provide a
|
||||
# secret (typically, a write-enabled github deploy key).
|
||||
#
|
||||
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
|
||||
|
||||
on:
|
||||
# Switch from `pull_request_target` event to reduce distraction from comments
|
||||
# regarding errors reported in unmodified files.
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- "*-stable"
|
||||
tags-ignore:
|
||||
- "**"
|
||||
types:
|
||||
- 'opened'
|
||||
- 'reopened'
|
||||
- 'synchronize'
|
||||
|
||||
jobs:
|
||||
spelling:
|
||||
name: Spell Check
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
actions: read
|
||||
outputs:
|
||||
followup: ${{ steps.spelling.outputs.followup }}
|
||||
runs-on: ubuntu-latest
|
||||
if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
|
||||
concurrency:
|
||||
group: spelling-${{ github.event.pull_request.number || github.ref }}
|
||||
# note: If you use only_check_changed_files, you do not want cancel-in-progress
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: check-spelling
|
||||
id: spelling
|
||||
uses: check-spelling/check-spelling@v0.0.21
|
||||
with:
|
||||
# This workflow runs in response to both `push` and `pull_request`, if there's an open `pull_request` in the same repository for a given branch, there's no reason to spend resources checking both the `push` and the `pull_request`, so this flag tells the action while running for the `push` to find the `pull_request` and stop working early:
|
||||
suppress_push_for_open_pull_request: 1
|
||||
# The action will manage checking out the repository itself instead of requiring the workflow to use `actions/checkout...`:
|
||||
checkout: true
|
||||
# If running without `: write`, posting a comment won't work, and for security `: write` permissions are left to a distinct (optional) job, here we skip trying to post a comment:
|
||||
post_comment: 0
|
||||
use_magic_file: 1
|
||||
extra_dictionary_limit: 10
|
||||
extra_dictionaries:
|
||||
cspell:software-terms/src/software-terms.txt
|
||||
cspell:php/php.txt
|
||||
cspell:node/node.txt
|
||||
cspell:django/django.txt
|
||||
cspell:html/html.txt
|
||||
cspell:npm/npm.txt
|
||||
cspell:ruby/ruby.txt
|
||||
cspell:fullstack/fullstack.txt
|
||||
cspell:filetypes/filetypes.txt
|
||||
check_extra_dictionaries: ''
|
||||
|
||||
# This workflow has opted not to use comments (users can view the report in GitHub Step Summary)
|
||||
41
.github/workflows/third-party.yml
vendored
41
.github/workflows/third-party.yml
vendored
@@ -1,41 +0,0 @@
|
||||
name: Third-Party Repository Profiling
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
build_n_profile:
|
||||
if: "!contains(github.event.commits[0].message, '[ci skip]')"
|
||||
runs-on: 'ubuntu-latest'
|
||||
env:
|
||||
BUNDLE_GEMFILE: "sandbox/Gemfile"
|
||||
BUNDLE_PATH: "vendor/bundle"
|
||||
BUNDLE_JOBS: 4
|
||||
BUNDLE_RETRY: 3
|
||||
steps:
|
||||
- name: Checkout Jekyll
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 5
|
||||
path: jekyll
|
||||
- name: Checkout Third-Party Repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ashmaroli/tomjoht.github.io
|
||||
path: sandbox
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.7
|
||||
bundler-cache: true
|
||||
- name: Run Jekyll Build 3 times
|
||||
run: |
|
||||
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
|
||||
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
|
||||
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
|
||||
- name: Memory Analysis of Jekyll Build
|
||||
run: bundle exec ruby jekyll/.github/workflows/actions/memprof.rb sandbox
|
||||
30
.gitignore
vendored
30
.gitignore
vendored
@@ -1,28 +1,8 @@
|
||||
# Jekyll
|
||||
_site/
|
||||
*-cache/
|
||||
.jekyll-metadata
|
||||
|
||||
# Ruby
|
||||
.bundle/
|
||||
.byebug_history
|
||||
.ruby-gemset
|
||||
.ruby-version
|
||||
*.gem
|
||||
Gemfile.lock
|
||||
|
||||
# Files
|
||||
.analysis
|
||||
.DS_Store
|
||||
test/dest
|
||||
*.gem
|
||||
pkg/
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# Folders
|
||||
/vendor
|
||||
bbin/
|
||||
bin/
|
||||
coverage
|
||||
gh-pages/
|
||||
pkg/
|
||||
test/dest
|
||||
tmp/*
|
||||
_site/
|
||||
.bundle/
|
||||
|
||||
474
.rubocop.yml
474
.rubocop.yml
@@ -1,474 +0,0 @@
|
||||
---
|
||||
inherit_from: .rubocop_todo.yml
|
||||
|
||||
require:
|
||||
- rubocop-minitest
|
||||
- rubocop-performance
|
||||
- rubocop-rake
|
||||
- rubocop-rspec
|
||||
- ./rubocop/jekyll
|
||||
|
||||
Jekyll/NoPutsAllowed:
|
||||
Exclude:
|
||||
- rake/*.rake
|
||||
|
||||
AllCops:
|
||||
TargetRubyVersion: 2.7
|
||||
Include:
|
||||
- lib/**/*.rb
|
||||
- test/**/*.rb
|
||||
Exclude:
|
||||
- bin/**/*
|
||||
- exe/**/*
|
||||
- benchmark/**/*
|
||||
- script/**/*
|
||||
- vendor/**/*
|
||||
- tmp/**/*
|
||||
|
||||
Gemspec/DeprecatedAttributeAssignment:
|
||||
Enabled: true
|
||||
Gemspec/RequireMFA:
|
||||
Enabled: false
|
||||
|
||||
Layout/BeginEndAlignment:
|
||||
Enabled: true
|
||||
Layout/EmptyComment:
|
||||
Enabled: false
|
||||
Layout/EmptyLinesAroundAttributeAccessor:
|
||||
Enabled: true
|
||||
Layout/EndAlignment:
|
||||
Severity: error
|
||||
Layout/FirstArrayElementIndentation:
|
||||
EnforcedStyle: consistent
|
||||
Layout/FirstHashElementIndentation:
|
||||
EnforcedStyle: consistent
|
||||
Layout/HashAlignment:
|
||||
EnforcedHashRocketStyle: table
|
||||
Layout/IndentationWidth:
|
||||
Severity: error
|
||||
Layout/LineContinuationLeadingSpace:
|
||||
Enabled: true
|
||||
Layout/LineContinuationSpacing:
|
||||
Enabled: true
|
||||
Layout/LineEndStringConcatenationIndentation:
|
||||
Enabled: true
|
||||
Layout/LineLength:
|
||||
Exclude:
|
||||
- !ruby/regexp /features\/.*.rb/
|
||||
- Rakefile
|
||||
- rake/*.rake
|
||||
- Gemfile
|
||||
Max: 100
|
||||
Severity: warning
|
||||
Layout/MultilineMethodCallIndentation:
|
||||
EnforcedStyle: indented
|
||||
Layout/MultilineOperationIndentation:
|
||||
EnforcedStyle: indented
|
||||
Layout/SpaceAroundMethodCallOperator:
|
||||
Enabled: true
|
||||
Layout/SpaceBeforeBrackets:
|
||||
Enabled: true
|
||||
Layout/SpaceInsideHashLiteralBraces:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- test/**/*.rb
|
||||
|
||||
Lint/AmbiguousAssignment:
|
||||
Enabled: true
|
||||
Lint/AmbiguousOperatorPrecedence:
|
||||
Enabled: true
|
||||
Lint/AmbiguousRange:
|
||||
Enabled: true
|
||||
Lint/BinaryOperatorWithIdenticalOperands:
|
||||
Enabled: true
|
||||
Lint/ConstantDefinitionInBlock:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- test/**/*.rb
|
||||
Lint/ConstantOverwrittenInRescue:
|
||||
Enabled: true
|
||||
Lint/DeprecatedConstants:
|
||||
Enabled: true
|
||||
Lint/DeprecatedOpenSSLConstant:
|
||||
Enabled: true
|
||||
Lint/DuplicateBranch:
|
||||
Enabled: true
|
||||
Lint/DuplicateElsifCondition:
|
||||
Enabled: true
|
||||
Lint/DuplicateRegexpCharacterClassElement:
|
||||
Enabled: true
|
||||
Lint/DuplicateRequire:
|
||||
Enabled: true
|
||||
Lint/DuplicateRescueException:
|
||||
Enabled: true
|
||||
Lint/EmptyBlock:
|
||||
Enabled: true
|
||||
Lint/EmptyClass:
|
||||
Enabled: true
|
||||
Lint/EmptyConditionalBody:
|
||||
Enabled: true
|
||||
Lint/EmptyFile:
|
||||
Enabled: true
|
||||
Lint/FloatComparison:
|
||||
Enabled: true
|
||||
Lint/HashCompareByIdentity:
|
||||
Enabled: true
|
||||
Lint/IdentityComparison:
|
||||
Enabled: true
|
||||
Lint/LambdaWithoutLiteralBlock:
|
||||
Enabled: true
|
||||
Lint/MissingSuper:
|
||||
Enabled: false
|
||||
Lint/MixedRegexpCaptureTypes:
|
||||
Enabled: false
|
||||
Lint/NestedPercentLiteral:
|
||||
Exclude:
|
||||
- test/test_site.rb
|
||||
Lint/NoReturnInBeginEndBlocks:
|
||||
Enabled: true
|
||||
Lint/NumberedParameterAssignment:
|
||||
Enabled: true
|
||||
Lint/OrAssignmentToConstant:
|
||||
Enabled: true
|
||||
Lint/OutOfRangeRegexpRef:
|
||||
Enabled: true
|
||||
Lint/RaiseException:
|
||||
Enabled: true
|
||||
Lint/RedundantDirGlobSort:
|
||||
Enabled: true
|
||||
Lint/RedundantSafeNavigation:
|
||||
Enabled: true
|
||||
Lint/RequireRangeParentheses:
|
||||
Enabled: true
|
||||
Lint/RequireRelativeSelfPath:
|
||||
Enabled: true
|
||||
Lint/SelfAssignment:
|
||||
Enabled: true
|
||||
Lint/StructNewOverride:
|
||||
Enabled: true
|
||||
Lint/SymbolConversion:
|
||||
Enabled: true
|
||||
Lint/ToEnumArguments:
|
||||
Enabled: false
|
||||
Lint/TopLevelReturnWithArgument:
|
||||
Enabled: true
|
||||
Lint/TrailingCommaInAttributeDeclaration:
|
||||
Enabled: true
|
||||
Lint/TripleQuotes:
|
||||
Enabled: true
|
||||
Lint/UnexpectedBlockArity:
|
||||
Enabled: true
|
||||
Lint/UnmodifiedReduceAccumulator:
|
||||
Enabled: true
|
||||
Lint/UnreachableCode:
|
||||
Severity: error
|
||||
Lint/UnreachableLoop:
|
||||
Enabled: true
|
||||
Lint/UselessMethodDefinition:
|
||||
Enabled: true
|
||||
Lint/UselessTimes:
|
||||
Enabled: true
|
||||
Lint/Void:
|
||||
Exclude:
|
||||
- lib/jekyll/site.rb
|
||||
|
||||
Metrics/AbcSize:
|
||||
Max: 23
|
||||
Metrics/BlockLength:
|
||||
Exclude:
|
||||
- test/**/*.rb
|
||||
- lib/jekyll/configuration.rb
|
||||
- rake/*.rake
|
||||
Metrics/ClassLength:
|
||||
Exclude:
|
||||
- !ruby/regexp /features\/.*.rb$/
|
||||
- !ruby/regexp /test\/.*.rb$/
|
||||
- lib/jekyll/document.rb
|
||||
- lib/jekyll/site.rb
|
||||
- lib/jekyll/commands/serve.rb
|
||||
- lib/jekyll/configuration.rb
|
||||
Max: 240
|
||||
Metrics/CyclomaticComplexity:
|
||||
Exclude:
|
||||
- lib/jekyll/utils.rb
|
||||
- lib/jekyll/commands/serve.rb
|
||||
Max: 11
|
||||
Metrics/MethodLength:
|
||||
CountComments: false
|
||||
Max: 20
|
||||
Severity: error
|
||||
Metrics/ModuleLength:
|
||||
Exclude:
|
||||
- lib/jekyll/filters.rb
|
||||
Max: 240
|
||||
Metrics/ParameterLists:
|
||||
Max: 4
|
||||
Metrics/PerceivedComplexity:
|
||||
Max: 13
|
||||
|
||||
Minitest/AssertEmptyLiteral:
|
||||
Enabled: false
|
||||
Minitest/AssertInDelta:
|
||||
Enabled: true
|
||||
Minitest/AssertionInLifecycleHook:
|
||||
Enabled: true
|
||||
Minitest/AssertKindOf:
|
||||
Enabled: true
|
||||
Minitest/AssertOutput:
|
||||
Enabled: true
|
||||
Minitest/AssertPathExists:
|
||||
Enabled: true
|
||||
Minitest/AssertSilent:
|
||||
Enabled: true
|
||||
Minitest/AssertWithExpectedArgument:
|
||||
Enabled: true
|
||||
Minitest/LiteralAsActualArgument:
|
||||
Enabled: true
|
||||
Minitest/TestMethodName:
|
||||
Enabled: false
|
||||
Minitest/MultipleAssertions:
|
||||
Enabled: true
|
||||
Minitest/RefuteInDelta:
|
||||
Enabled: true
|
||||
Minitest/RefuteKindOf:
|
||||
Enabled: true
|
||||
Minitest/RefutePathExists:
|
||||
Enabled: true
|
||||
Minitest/UnreachableAssertion:
|
||||
Enabled: true
|
||||
Minitest/UnspecifiedException:
|
||||
Enabled: true
|
||||
|
||||
Naming/FileName:
|
||||
Enabled: false
|
||||
Naming/HeredocDelimiterNaming:
|
||||
Exclude:
|
||||
- test/**/*.rb
|
||||
Naming/MemoizedInstanceVariableName:
|
||||
Exclude:
|
||||
- lib/jekyll/convertible.rb
|
||||
- lib/jekyll/drops/site_drop.rb
|
||||
- lib/jekyll/drops/unified_payload_drop.rb
|
||||
- lib/jekyll/page_without_a_file.rb
|
||||
|
||||
Performance/AncestorsInclude:
|
||||
Enabled: false
|
||||
Performance/ArraySemiInfiniteRangeSlice:
|
||||
Enabled: true
|
||||
Performance/BigDecimalWithNumericArgument:
|
||||
Enabled: true
|
||||
Performance/BlockGivenWithExplicitBlock:
|
||||
Enabled: true
|
||||
Performance/ChainArrayAllocation:
|
||||
Enabled: true
|
||||
Performance/CollectionLiteralInLoop:
|
||||
Enabled: true
|
||||
Performance/ConstantRegexp:
|
||||
Enabled: true
|
||||
Performance/MapCompact:
|
||||
Enabled: true
|
||||
Performance/MethodObjectAsBlock:
|
||||
Enabled: true
|
||||
Performance/RedundantEqualityComparisonBlock:
|
||||
Enabled: false
|
||||
Performance/RedundantSortBlock:
|
||||
Enabled: true
|
||||
Performance/RedundantSplitRegexpArgument:
|
||||
Enabled: true
|
||||
Performance/RedundantStringChars:
|
||||
Enabled: true
|
||||
Performance/ReverseFirst:
|
||||
Enabled: true
|
||||
Performance/SortReverse:
|
||||
Enabled: false
|
||||
Performance/Squeeze:
|
||||
Enabled: true
|
||||
Performance/StringIdentifierArgument:
|
||||
Enabled: true
|
||||
Performance/StringInclude:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- lib/jekyll/utils/platforms.rb
|
||||
Performance/Sum:
|
||||
Enabled: true
|
||||
|
||||
Security/CompoundHash:
|
||||
Enabled: true
|
||||
Security/IoMethods:
|
||||
Enabled: true
|
||||
Security/MarshalLoad:
|
||||
Exclude:
|
||||
- !ruby/regexp /test\/.*.rb$/
|
||||
- lib/jekyll/regenerator.rb
|
||||
Security/YAMLLoad:
|
||||
Exclude:
|
||||
- !ruby/regexp /features\/.*.rb/
|
||||
- !ruby/regexp /test\/.*.rb$/
|
||||
|
||||
Style/AccessModifierDeclarations:
|
||||
Enabled: false
|
||||
Style/AccessorGrouping:
|
||||
Enabled: true
|
||||
Style/Alias:
|
||||
EnforcedStyle: prefer_alias_method
|
||||
Style/AndOr:
|
||||
Severity: error
|
||||
Style/ArgumentsForwarding:
|
||||
Enabled: false
|
||||
Style/ArrayCoercion:
|
||||
Enabled: true
|
||||
Style/BisectedAttrAccessor:
|
||||
Enabled: true
|
||||
Style/CaseLikeIf:
|
||||
Enabled: true
|
||||
Style/StringChars:
|
||||
Enabled: true
|
||||
Style/ClassAndModuleChildren:
|
||||
Exclude:
|
||||
- test/**/*.rb
|
||||
Style/ClassEqualityComparison:
|
||||
Enabled: true
|
||||
Style/CollectionCompact:
|
||||
Enabled: true
|
||||
Style/CombinableLoops:
|
||||
Enabled: true
|
||||
Style/DocumentDynamicEvalDefinition:
|
||||
Enabled: true
|
||||
Style/Documentation:
|
||||
Enabled: false
|
||||
Style/DoubleNegation:
|
||||
Enabled: false
|
||||
Style/EmptyHeredoc:
|
||||
Enabled: true
|
||||
Style/EndlessMethod:
|
||||
Enabled: true
|
||||
Style/ExplicitBlockArgument:
|
||||
Enabled: false
|
||||
Style/ExponentialNotation:
|
||||
Enabled: true
|
||||
Style/EnvHome:
|
||||
Enabled: true
|
||||
Style/FetchEnvVar:
|
||||
Enabled: false
|
||||
Style/FileRead:
|
||||
Enabled: false
|
||||
Style/FormatStringToken:
|
||||
Exclude:
|
||||
- lib/jekyll/utils/ansi.rb
|
||||
- lib/jekyll/liquid_renderer/table.rb
|
||||
- lib/jekyll/profiler.rb
|
||||
Style/FrozenStringLiteralComment:
|
||||
EnforcedStyle: always
|
||||
Style/FileWrite:
|
||||
Enabled: true
|
||||
Style/GlobalStdStream:
|
||||
Enabled: true
|
||||
Style/GuardClause:
|
||||
Enabled: false
|
||||
Style/HashAsLastArrayItem:
|
||||
Enabled: true
|
||||
Style/HashConversion:
|
||||
Enabled: true
|
||||
Style/HashEachMethods:
|
||||
Enabled: true
|
||||
Style/HashExcept:
|
||||
Enabled: true
|
||||
Style/HashLikeCase:
|
||||
Enabled: true
|
||||
Style/HashSyntax:
|
||||
EnforcedStyle: hash_rockets
|
||||
Severity: error
|
||||
Style/HashTransformKeys:
|
||||
Enabled: false
|
||||
Style/HashTransformValues:
|
||||
Enabled: true
|
||||
Style/IfWithBooleanLiteralBranches:
|
||||
Enabled: true
|
||||
Style/KeywordParametersOrder:
|
||||
Enabled: true
|
||||
Style/MagicCommentFormat:
|
||||
Enabled: true
|
||||
Style/MapCompactWithConditionalBlock:
|
||||
Enabled: true
|
||||
Style/MapToHash:
|
||||
Enabled: true
|
||||
Style/MixinUsage:
|
||||
Exclude:
|
||||
- test/helper.rb
|
||||
Style/ModuleFunction:
|
||||
Enabled: false
|
||||
Style/MultilineTernaryOperator:
|
||||
Severity: error
|
||||
Style/NegatedIfElseCondition:
|
||||
Enabled: true
|
||||
Style/NestedFileDirname:
|
||||
Enabled: true
|
||||
Style/NilLambda:
|
||||
Enabled: true
|
||||
Style/OptionalBooleanParameter:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- lib/jekyll/log_adapter.rb
|
||||
Style/PercentLiteralDelimiters:
|
||||
PreferredDelimiters:
|
||||
"%Q": "{}"
|
||||
"%W": ()
|
||||
"%q": "{}"
|
||||
"%r": "!!"
|
||||
"%s": ()
|
||||
"%w": ()
|
||||
"%x": ()
|
||||
Style/QuotedSymbols:
|
||||
Enabled: true
|
||||
Style/RedundantArgument:
|
||||
Enabled: true
|
||||
Style/RedundantAssignment:
|
||||
Enabled: true
|
||||
Style/RedundantFetchBlock:
|
||||
Enabled: false
|
||||
Style/RedundantFileExtensionInRequire:
|
||||
Enabled: true
|
||||
Style/RedundantInitialize:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- lib/jekyll/plugin.rb
|
||||
Style/RedundantRegexpCharacterClass:
|
||||
Enabled: true
|
||||
Style/RedundantRegexpEscape:
|
||||
Enabled: true
|
||||
Style/RedundantSelfAssignment:
|
||||
Enabled: true
|
||||
Style/RedundantSelfAssignmentBranch:
|
||||
Enabled: true
|
||||
Style/RegexpLiteral:
|
||||
EnforcedStyle: percent_r
|
||||
Style/RescueModifier:
|
||||
Enabled: false
|
||||
Style/SafeNavigation:
|
||||
Exclude:
|
||||
- lib/jekyll/document.rb
|
||||
Style/SignalException:
|
||||
EnforcedStyle: only_raise
|
||||
Style/SingleArgumentDig:
|
||||
Enabled: true
|
||||
Style/SlicingWithRange:
|
||||
Enabled: false
|
||||
Style/SoleNestedConditional:
|
||||
Enabled: true
|
||||
Style/StringConcatenation:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- lib/jekyll/commands/*.rb
|
||||
- test/**/*.rb
|
||||
Style/StringLiterals:
|
||||
EnforcedStyle: double_quotes
|
||||
Style/StringLiteralsInInterpolation:
|
||||
EnforcedStyle: double_quotes
|
||||
Style/SwapValues:
|
||||
Enabled: true
|
||||
Style/SymbolArray:
|
||||
EnforcedStyle: brackets
|
||||
Style/TrailingCommaInArrayLiteral:
|
||||
EnforcedStyleForMultiline: consistent_comma
|
||||
Style/TrailingCommaInHashLiteral:
|
||||
EnforcedStyleForMultiline: consistent_comma
|
||||
@@ -1,25 +0,0 @@
|
||||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config --auto-gen-only-exclude`
|
||||
# on 2022-04-06 10:48:47 UTC using RuboCop version 1.26.1.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
# versions of RuboCop, may require this file to be generated again.
|
||||
|
||||
# Offense count: 1
|
||||
# This cop supports safe auto-correction (--auto-correct).
|
||||
Performance/BindCall:
|
||||
Exclude:
|
||||
- 'test/helper.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Style/CombinableLoops:
|
||||
Exclude:
|
||||
- 'lib/jekyll/tags/post_url.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: AllowedMethods.
|
||||
# AllowedMethods: respond_to_missing?
|
||||
Style/OptionalBooleanParameter:
|
||||
Exclude:
|
||||
- 'lib/jekyll/log_adapter.rb'
|
||||
49
Earthfile
49
Earthfile
@@ -1,49 +0,0 @@
|
||||
FROM alpine
|
||||
|
||||
# Run locally: `earthly +all` to run full CI process
|
||||
all:
|
||||
BUILD --build-arg RUBY=3.0 +test
|
||||
BUILD --build-arg RUBY=2.7 +test
|
||||
BUILD --build-arg RUBY=2.5 +test
|
||||
BUILD --build-arg RUBY=jruby:9.2.14.0 +test
|
||||
BUILD style-check
|
||||
BUILD profile-docs
|
||||
|
||||
# Run locally: `earthly +test`
|
||||
# Run with specific version: `earthly --build-arg RUBY=2.5 +test`
|
||||
test:
|
||||
FROM +deps
|
||||
RUN script/test
|
||||
RUN script/cucumber
|
||||
RUN script/default-site
|
||||
|
||||
style-check:
|
||||
FROM +deps
|
||||
RUN script/fmt
|
||||
|
||||
profile-docs:
|
||||
FROM +deps
|
||||
RUN bundle install --jobs 4
|
||||
RUN script/profile-docs
|
||||
RUN script/memprof
|
||||
|
||||
# Install dependencies and copy in source
|
||||
# used in above steps
|
||||
deps:
|
||||
ARG RUBY=3.0
|
||||
IF case $RUBY in jruby*) ;; *) false; esac
|
||||
FROM $RUBY
|
||||
ENV JRUBY_OPTS="--dev -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-XX:CompileThreshold=10 -J-XX:ReservedCodeCacheSize=128M"
|
||||
ELSE
|
||||
FROM ruby:$RUBY
|
||||
END
|
||||
WORKDIR /src
|
||||
RUN apt-get update && apt-get install nodejs dnsutils git make coreutils g++ build-essential -y
|
||||
RUN gem install bundler
|
||||
RUN gem install sassc -v '2.4.0' --source 'https://rubygems.org/'
|
||||
COPY Gemfile .
|
||||
COPY jekyll.gemspec .
|
||||
COPY lib/jekyll/version.rb lib/jekyll/version.rb
|
||||
COPY test test
|
||||
RUN bundle install --jobs 4
|
||||
COPY . .
|
||||
119
Gemfile
119
Gemfile
@@ -1,117 +1,2 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
source "https://rubygems.org"
|
||||
gemspec :name => "jekyll"
|
||||
|
||||
gem "rake", "~> 13.0"
|
||||
|
||||
group :development do
|
||||
gem "launchy", "~> 2.3"
|
||||
gem "pry"
|
||||
|
||||
gem "pry-byebug" unless RUBY_ENGINE == "jruby"
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :test do
|
||||
gem "activesupport", "~> 7.0.0"
|
||||
gem "cucumber", "~> 9.0"
|
||||
gem "httpclient"
|
||||
gem "jekyll_test_plugin"
|
||||
gem "jekyll_test_plugin_malicious"
|
||||
gem "memory_profiler"
|
||||
gem "nokogiri", "~> 1.7"
|
||||
gem "rspec"
|
||||
gem "rspec-mocks"
|
||||
gem "rubocop", "~> 1.37.0"
|
||||
gem "rubocop-minitest"
|
||||
gem "rubocop-performance"
|
||||
gem "rubocop-rake"
|
||||
gem "rubocop-rspec"
|
||||
gem "test-dependency-theme", :path => File.expand_path("test/fixtures/test-dependency-theme", __dir__)
|
||||
gem "test-theme", :path => File.expand_path("test/fixtures/test-theme", __dir__)
|
||||
gem "test-theme-skinny", :path => File.expand_path("test/fixtures/test-theme-skinny", __dir__)
|
||||
gem "test-theme-symlink", :path => File.expand_path("test/fixtures/test-theme-symlink", __dir__)
|
||||
gem "test-theme-w-empty-data", :path => File.expand_path("test/fixtures/test-theme-w-empty-data", __dir__)
|
||||
|
||||
if RUBY_ENGINE == "jruby"
|
||||
gem "http_parser.rb", "~> 0.6.0"
|
||||
gem "jruby-openssl"
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :test_legacy do
|
||||
gem "test-unit" if RUBY_PLATFORM =~ %r!cygwin!
|
||||
|
||||
gem "minitest"
|
||||
gem "minitest-profile"
|
||||
gem "minitest-reporters"
|
||||
gem "shoulda"
|
||||
gem "simplecov"
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :benchmark do
|
||||
if ENV["BENCHMARK"]
|
||||
gem "benchmark-ips"
|
||||
gem "rbtrace"
|
||||
gem "ruby-prof"
|
||||
gem "stackprof"
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :jekyll_optional_dependencies do
|
||||
gem "jekyll-coffeescript"
|
||||
gem "jekyll-docs", :path => "../docs" if Dir.exist?("../docs") && ENV["JEKYLL_VERSION"]
|
||||
gem "jekyll-feed", "~> 0.9"
|
||||
gem "jekyll-gist"
|
||||
gem "jekyll-paginate"
|
||||
gem "jekyll-redirect-from"
|
||||
gem "kramdown-syntax-coderay"
|
||||
gem "matrix"
|
||||
gem "mime-types", "~> 3.0"
|
||||
gem "tomlrb"
|
||||
|
||||
platforms :ruby, :mswin, :mingw, :x64_mingw do
|
||||
gem "classifier-reborn", "~> 2.2"
|
||||
gem "liquid-c", "~> 4.0"
|
||||
gem "yajl-ruby", "~> 1.4"
|
||||
end
|
||||
|
||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
# and associated library
|
||||
platforms :jruby, :mswin, :mingw, :x64_mingw do
|
||||
gem "tzinfo", ENV["TZINFO_VERSION"] if ENV["TZINFO_VERSION"]
|
||||
gem "tzinfo-data"
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :rdoc, :optional => true do
|
||||
# Psych 5 has stopped bundling `libyaml` and expects it to be installed on the host system prior
|
||||
# to being invoked.
|
||||
# Since we don't have a direct dependency on the Psych gem (it gets included in the gem bundle as
|
||||
# a dependency of the `rdoc` gem), lock psych gem to v4.x instead of installing `libyaml` in our
|
||||
# development / CI environment.
|
||||
gem "psych", "~> 4.0"
|
||||
gem "rdoc", "~> 6.0"
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
group :site do
|
||||
gem "html-proofer", "~> 3.4" if ENV["PROOF"]
|
||||
|
||||
gem "jekyll-avatar"
|
||||
gem "jekyll-mentions"
|
||||
gem "jekyll-seo-tag"
|
||||
gem "jekyll-sitemap"
|
||||
gem "jemoji"
|
||||
end
|
||||
source :rubygems
|
||||
gemspec
|
||||
|
||||
3997
History.markdown
3997
History.markdown
File diff suppressed because it is too large
Load Diff
294
History.txt
Normal file
294
History.txt
Normal file
@@ -0,0 +1,294 @@
|
||||
== HEAD
|
||||
* Major Enhancements
|
||||
* Add command line importer functionality (#253)
|
||||
* Minor Enhancements
|
||||
* Switch to Albino gem
|
||||
* Bundler support
|
||||
* Use English library to avoid hoops (#292)
|
||||
* Add Posterous importer (#254)
|
||||
* Fixes for Wordpress importer (#274, #252, #271)
|
||||
* Better error message for invalid post date (#291)
|
||||
* Print formatted fatal exceptions to stdout on build failure
|
||||
* Bug Fixes
|
||||
* Secure additional path exploits
|
||||
|
||||
== 0.10.0 / 2010-12-16
|
||||
* Bug Fixes
|
||||
* Add --no-server option.
|
||||
|
||||
== 0.9.0 / 2010-12-15
|
||||
* Minor Enhancements
|
||||
* Use OptionParser's [no-] functionality for better boolean parsing.
|
||||
* Add Drupal migrator (#245)
|
||||
* Complain about YAML and Liquid errors (#249)
|
||||
* Remove orphaned files during regeneration (#247)
|
||||
* Add Marley migrator (#28)
|
||||
|
||||
== 0.8.0 / 2010-11-22
|
||||
* Minor Enhancements
|
||||
* Add wordpress.com importer (#207)
|
||||
* Add --limit-posts cli option (#212)
|
||||
* Add uri_escape filter (#234)
|
||||
* Add --base-url cli option (#235)
|
||||
* Improve MT migrator (#238)
|
||||
* Add kramdown support (#239)
|
||||
* Bug Fixes
|
||||
* Fixed filename basename generation (#208)
|
||||
* Set mode to UTF8 on Sequel connections (#237)
|
||||
* Prevent _includes dir from being a symlink
|
||||
|
||||
== 0.7.0 / 2010-08-24
|
||||
* Minor Enhancements
|
||||
* Add support for rdiscount extensions (#173)
|
||||
* Bug Fixes
|
||||
* Highlight should not be able to render local files
|
||||
* The site configuration may not always provide a 'time' setting (#184)
|
||||
|
||||
== 0.6.2 / 2010-06-25
|
||||
* Bug Fixes
|
||||
* Fix Rakefile 'release' task (tag pushing was missing origin)
|
||||
* Ensure that RedCloth is loaded when textilize filter is used (#183)
|
||||
* Expand source, destination, and plugin paths (#180)
|
||||
* Fix page.url to include full relative path (#181)
|
||||
|
||||
== 0.6.1 / 2010-06-24
|
||||
* Bug Fixes
|
||||
* Fix Markdown Pygments prefix and suffix (#178)
|
||||
|
||||
== 0.6.0 / 2010-06-23
|
||||
* Major Enhancements
|
||||
* Proper plugin system (#19, #100)
|
||||
* Add safe mode so unsafe converters/generators can be added
|
||||
* Maruku is now the only processor dependency installed by default.
|
||||
Other processors will be lazy-loaded when necessary (and prompt the
|
||||
user to install them when necessary) (#57)
|
||||
* Minor Enhancements
|
||||
* Inclusion/exclusion of future dated posts (#59)
|
||||
* Generation for a specific time (#59)
|
||||
* Allocate site.time on render not per site_payload invocation (#59)
|
||||
* Pages now present in the site payload and can be used through the
|
||||
site.pages and site.html_pages variables
|
||||
* Generate phase added to site#process and pagination is now a generator
|
||||
* Switch to RakeGem for build/test process
|
||||
* Only regenerate static files when they have changed (#142)
|
||||
* Allow arbitrary options to Pygments (#31)
|
||||
* Allow URL to be set via command line option (#147)
|
||||
* Bug Fixes
|
||||
* Render highlighted code for non markdown/textile pages (#116)
|
||||
* Fix highlighting on Ruby 1.9 (#65)
|
||||
* Fix extension munging when pretty permalinks are enabled (#64)
|
||||
* Stop sorting categories (#33)
|
||||
* Preserve generated attributes over front matter (#119)
|
||||
* Fix source directory binding using Dir.pwd (#75)
|
||||
|
||||
== 0.5.7 / 2010-01-12
|
||||
* Minor Enhancements
|
||||
* Allow overriding of post date in the front matter (#62, #38)
|
||||
* Bug Fixes
|
||||
* Categories isn't always an array (#73)
|
||||
* Empty tags causes error in read_posts (#84)
|
||||
* Fix pagination to adhere to read/render/write paradigm
|
||||
* Test Enhancement
|
||||
* cucumber features no longer use site.posts.first where a better
|
||||
alternative is available
|
||||
|
||||
== 0.5.6 / 2010-01-08
|
||||
* Bug Fixes
|
||||
* Require redcloth >= 4.2.1 in tests (#92)
|
||||
* Don't break on triple dashes in yaml frontmatter (#93)
|
||||
* Minor Enhancements
|
||||
* Allow .mkd as markdown extension
|
||||
* Use $stdout/err instead of constants (#99)
|
||||
* Properly wrap code blocks (#91)
|
||||
* Add javascript mime type for webrick (#98)
|
||||
|
||||
== 0.5.5 / 2010-01-08
|
||||
* Bug Fixes
|
||||
* Fix pagination % 0 bug (#78)
|
||||
* Ensure all posts are processed first (#71)
|
||||
|
||||
== NOTE
|
||||
* After this point I will no longer be giving credit in the history;
|
||||
that is what the commit log is for.
|
||||
|
||||
== 0.5.4 / 2009-08-23
|
||||
* Bug Fixes
|
||||
* Do not allow symlinks (security vulnerability)
|
||||
|
||||
== 0.5.3 / 2009-07-14
|
||||
* Bug Fixes
|
||||
* Solving the permalink bug where non-html files wouldn't work
|
||||
[github.com/jeffrydegrande]
|
||||
|
||||
== 0.5.2 / 2009-06-24
|
||||
* Enhancements
|
||||
* Added --paginate option to the executable along with a paginator object
|
||||
for the payload [github.com/calavera]
|
||||
* Upgraded RedCloth to 4.2.1, which makes <notextile> tags work once
|
||||
again.
|
||||
* Configuration options set in config.yml are now available through the
|
||||
site payload [github.com/vilcans]
|
||||
* Posts can now have an empty YAML front matter or none at all
|
||||
[github.com/bahuvrihi]
|
||||
* Bug Fixes
|
||||
* Fixing Ruby 1.9 issue that requires to_s on the err object
|
||||
[github.com/Chrononaut]
|
||||
* Fixes for pagination and ordering posts on the same day [github.com/ujh]
|
||||
* Made pages respect permalinks style and permalinks in yml front matter
|
||||
[github.com/eugenebolshakov]
|
||||
* Index.html file should always have index.html permalink
|
||||
[github.com/eugenebolshakov]
|
||||
* Added trailing slash to pretty permalink style so Apache is happy
|
||||
[github.com/eugenebolshakov]
|
||||
* Bad markdown processor in config fails sooner and with better message
|
||||
[github.com/gcnovus]
|
||||
* Allow CRLFs in yaml frontmatter [github.com/juretta]
|
||||
* Added Date#xmlschema for Ruby versions < 1.9
|
||||
|
||||
== 0.5.1 / 2009-05-06
|
||||
* Major Enhancements
|
||||
* Next/previous posts in site payload [github.com/pantulis,
|
||||
github.com/tomo]
|
||||
* Permalink templating system
|
||||
* Moved most of the README out to the GitHub wiki
|
||||
* Exclude option in configuration so specified files won't be brought over
|
||||
with generated site [github.com/duritong]
|
||||
* Bug Fixes
|
||||
* Making sure config.yaml references are all gone, using only config.yml
|
||||
* Fixed syntax highlighting breaking for UTF-8 code [github.com/henrik]
|
||||
* Worked around RDiscount bug that prevents Markdown from getting parsed
|
||||
after highlight [github.com/henrik]
|
||||
* CGI escaped post titles [github.com/Chrononaut]
|
||||
|
||||
== 0.5.0 / 2009-04-07
|
||||
* Minor Enhancements
|
||||
* Ability to set post categories via YAML [github.com/qrush]
|
||||
* Ability to set prevent a post from publishing via YAML
|
||||
[github.com/qrush]
|
||||
* Add textilize filter [github.com/willcodeforfoo]
|
||||
* Add 'pretty' permalink style for wordpress-like urls
|
||||
[github.com/dysinger]
|
||||
* Made it possible to enter categories from YAML as an array
|
||||
[github.com/Chrononaut]
|
||||
* Ignore Emacs autosave files [github.com/Chrononaut]
|
||||
* Bug Fixes
|
||||
* Use block syntax of popen4 to ensure that subprocesses are properly
|
||||
disposed [github.com/jqr]
|
||||
* Close open4 streams to prevent zombies [github.com/rtomayko]
|
||||
* Only query required fields from the WP Database [github.com/ariejan]
|
||||
* Prevent _posts from being copied to the destination directory
|
||||
[github.com/bdimcheff]
|
||||
* Refactors
|
||||
* Factored the filtering code into a method [github.com/Chrononaut]
|
||||
* Fix tests and convert to Shoulda [github.com/qrush,
|
||||
github.com/technicalpickles]
|
||||
* Add Cucumber acceptance test suite [github.com/qrush,
|
||||
github.com/technicalpickles]
|
||||
|
||||
== 0.4.1
|
||||
* Minor Enhancements
|
||||
* Changed date format on wordpress converter (zeropadding)
|
||||
[github.com/dysinger]
|
||||
* Bug Fixes
|
||||
* Add jekyll binary as executable to gemspec [github.com/dysinger]
|
||||
|
||||
== 0.4.0 / 2009-02-03
|
||||
* Major Enhancements
|
||||
* Switch to Jeweler for packaging tasks
|
||||
* Minor Enhancements
|
||||
* Type importer [github.com/codeslinger]
|
||||
* site.topics accessor [github.com/baz]
|
||||
* Add array_to_sentence_string filter [github.com/mchung]
|
||||
* Add a converter for textpattern [github.com/PerfectlyNormal]
|
||||
* Add a working Mephisto / MySQL converter [github.com/ivey]
|
||||
* Allowing .htaccess files to be copied over into the generated site
|
||||
[github.com/briandoll]
|
||||
* Add option to not put file date in permalink URL [github.com/mreid]
|
||||
* Add line number capabilities to highlight blocks [github.com/jcon]
|
||||
* Bug Fixes
|
||||
* Fix permalink behavior [github.com/cavalle]
|
||||
* Fixed an issue with pygments, markdown, and newlines
|
||||
[github.com/zpinter]
|
||||
* Ampersands need to be escaped [github.com/pufuwozu, github.com/ap]
|
||||
* Test and fix the site.categories hash [github.com/zzot]
|
||||
* Fix site payload available to files [github.com/matrix9180]
|
||||
|
||||
== 0.3.0 / 2008-12-24
|
||||
* Major Enhancements
|
||||
* Added --server option to start a simple WEBrick server on destination
|
||||
directory [github.com/johnreilly and github.com/mchung]
|
||||
* Minor Enhancements
|
||||
* Added post categories based on directories containing _posts
|
||||
[github.com/mreid]
|
||||
* Added post topics based on directories underneath _posts
|
||||
* Added new date filter that shows the full month name [github.com/mreid]
|
||||
* Merge Post's YAML front matter into its to_liquid payload
|
||||
[github.com/remi]
|
||||
* Restrict includes to regular files underneath _includes
|
||||
* Bug Fixes
|
||||
* Change YAML delimiter matcher so as to not chew up 2nd level markdown
|
||||
headers [github.com/mreid]
|
||||
* Fix bug that meant page data (such as the date) was not available in
|
||||
templates [github.com/mreid]
|
||||
* Properly reject directories in _layouts
|
||||
|
||||
== 0.2.1 / 2008-12-15
|
||||
* Major Changes
|
||||
* Use Maruku (pure Ruby) for Markdown by default [github.com/mreid]
|
||||
* Allow use of RDiscount with --rdiscount flag
|
||||
* Minor Enhancements
|
||||
* Don't load directory_watcher unless it's needed [github.com/pjhyett]
|
||||
|
||||
== 0.2.0 / 2008-12-14
|
||||
* Major Changes
|
||||
* related_posts is now found in site.related_posts
|
||||
|
||||
== 0.1.6 / 2008-12-13
|
||||
* Major Features
|
||||
* Include files in _includes with {% include x.textile %}
|
||||
|
||||
== 0.1.5 / 2008-12-12
|
||||
* Major Features
|
||||
* Code highlighting with Pygments if --pygments is specified
|
||||
* Disable true LSI by default, enable with --lsi
|
||||
* Minor Enhancements
|
||||
* Output informative message if RDiscount is not available
|
||||
[github.com/JackDanger]
|
||||
* Bug Fixes
|
||||
* Prevent Jekyll from picking up the output directory as a source
|
||||
[github.com/JackDanger]
|
||||
* Skip related_posts when there is only one post [github.com/JackDanger]
|
||||
|
||||
== 0.1.4 / 2008-12-08
|
||||
* Bug Fixes
|
||||
* DATA does not work properly with rubygems
|
||||
|
||||
== 0.1.3 / 2008-12-06
|
||||
* Major Features
|
||||
* Markdown support [github.com/vanpelt]
|
||||
* Mephisto and CSV converters [github.com/vanpelt]
|
||||
* Code hilighting [github.com/vanpelt]
|
||||
* Autobuild
|
||||
* Bug Fixes
|
||||
* Accept both \r\n and \n in YAML header [github.com/vanpelt]
|
||||
|
||||
== 0.1.2 / 2008-11-22
|
||||
* Major Features
|
||||
* Add a real "related posts" implementation using Classifier
|
||||
* Command Line Changes
|
||||
* Allow cli to be called with 0, 1, or 2 args intuiting dir paths
|
||||
if they are omitted
|
||||
|
||||
== 0.1.1 / 2008-11-22
|
||||
* Minor Additions
|
||||
* Posts now support introspectional data e.g. {{ page.url }}
|
||||
|
||||
== 0.1.0 / 2008-11-05
|
||||
* First release
|
||||
* Converts posts written in Textile
|
||||
* Converts regular site pages
|
||||
* Simple copy of binary files
|
||||
|
||||
== 0.0.0 / 2008-10-19
|
||||
* Birthday!
|
||||
|
||||
10
LICENSE
10
LICENSE
@@ -1,9 +1,9 @@
|
||||
The MIT License (MIT)
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2008-present Tom Preston-Werner and Jekyll contributors
|
||||
Copyright (c) 2008 Tom Preston-Werner
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
of this software and associated documentation files (the 'Software'), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
@@ -12,10 +12,10 @@ furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
SOFTWARE.
|
||||
@@ -1,82 +0,0 @@
|
||||
# [Jekyll](https://jekyllrb.com/)
|
||||
|
||||
[][ruby-gems]
|
||||
[][ci-workflow]
|
||||
[](#backers)
|
||||
[](#sponsors)
|
||||
|
||||
[ruby-gems]: https://rubygems.org/gems/jekyll
|
||||
[ci-workflow]: https://github.com/jekyll/jekyll/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Amaster
|
||||
[appveyor]: https://ci.appveyor.com/project/jekyll/jekyll/branch/master
|
||||
|
||||
Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](https://pages.github.com), which you can use to host sites right from your GitHub repositories.
|
||||
|
||||
## Philosophy
|
||||
|
||||
Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.
|
||||
|
||||
See: [https://jekyllrb.com/philosophy](https://jekyllrb.com/philosophy)
|
||||
|
||||
## Getting Started
|
||||
|
||||
* [Install](https://jekyllrb.com/docs/installation/) the gem
|
||||
* Read up about its [Usage](https://jekyllrb.com/docs/usage/) and [Configuration](https://jekyllrb.com/docs/configuration/)
|
||||
* Take a gander at some existing [Sites](https://github.com/jekyll/jekyll/wiki/sites)
|
||||
* [Fork](https://github.com/jekyll/jekyll/fork) and [Contribute](https://jekyllrb.com/docs/contributing/) your own modifications
|
||||
* Have questions? Check out our official forum community [Jekyll Talk](https://talk.jekyllrb.com/) and [`#jekyll` Channel on Libera IRC](https://libera.chat)
|
||||
|
||||
## Diving In
|
||||
|
||||
* [Migrate](https://import.jekyllrb.com/docs/home/) from your previous system
|
||||
* Learn how [Front Matter](https://jekyllrb.com/docs/front-matter/) works
|
||||
* Put information on your site with [Variables](https://jekyllrb.com/docs/variables/)
|
||||
* Customize the [Permalinks](https://jekyllrb.com/docs/permalinks/) your posts are generated with
|
||||
* Use the built-in [Liquid Extensions](https://jekyllrb.com/docs/templates/) to make your life easier
|
||||
* Use custom [Plugins](https://jekyllrb.com/docs/plugins/) to generate content specific to your site
|
||||
* Watch [video tutorials from Giraffe Academy](https://jekyllrb.com/tutorials/video-walkthroughs/)
|
||||
|
||||
## Need help?
|
||||
|
||||
If you don't find the answer to your problem in our [docs](https://jekyllrb.com/docs/), or in the [troubleshooting section](https://jekyllrb.com/docs/troubleshooting/), ask the [community](https://jekyllrb.com/docs/community/) for help.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
In order to have a more open and welcoming community, Jekyll adheres to a
|
||||
[code of conduct](https://jekyllrb.com/docs/conduct/) adapted from the Ruby on Rails code of
|
||||
conduct.
|
||||
|
||||
Please adhere to this code of conduct in any interactions you have in the
|
||||
Jekyll community. It is strictly enforced on all official Jekyll
|
||||
repositories, websites, and resources. If you encounter someone violating
|
||||
these terms, please let one of our [core team members](https://jekyllrb.com/team/#core-team) know and we will address it as soon as possible.
|
||||
|
||||
## Credits
|
||||
|
||||
### Sponsors
|
||||
|
||||
Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. [Become a sponsor!](https://opencollective.com/jekyll#sponsor)
|
||||
[](https://opencollective.com/jekyll/sponsor/0/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/1/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/2/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/3/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/4/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/5/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/6/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/7/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/8/website)
|
||||
[](https://opencollective.com/jekyll/sponsor/9/website)
|
||||
|
||||
### Contributors
|
||||
|
||||
This project exists thanks to all the people who contribute.
|
||||
[](../../graphs/contributors)
|
||||
|
||||
### Backers
|
||||
|
||||
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/jekyll#backer)
|
||||
|
||||
[](https://opencollective.com/jekyll#backers)
|
||||
|
||||
## License
|
||||
|
||||
See the [LICENSE](https://github.com/jekyll/jekyll/blob/master/LICENSE) file.
|
||||
40
README.textile
Normal file
40
README.textile
Normal file
@@ -0,0 +1,40 @@
|
||||
h1. Jekyll
|
||||
|
||||
By Tom Preston-Werner, Nick Quaranto, and many awesome contributors!
|
||||
|
||||
Jekyll is a simple, blog aware, static site generator. It takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind "GitHub Pages":http://pages.github.com, which you can use to host your project's page or blog right here from GitHub.
|
||||
|
||||
h2. Getting Started
|
||||
|
||||
* "Install":http://wiki.github.com/mojombo/jekyll/install the gem
|
||||
* Read up about its "Usage":http://wiki.github.com/mojombo/jekyll/usage and "Configuration":http://wiki.github.com/mojombo/jekyll/configuration
|
||||
* Take a gander at some existing "Sites":http://wiki.github.com/mojombo/jekyll/sites
|
||||
* Fork and "Contribute":http://wiki.github.com/mojombo/jekyll/contribute your own modifications
|
||||
* Have questions? Post them on the "Mailing List":http://groups.google.com/group/jekyll-rb
|
||||
|
||||
h2. Diving In
|
||||
|
||||
* "Migrate":http://wiki.github.com/mojombo/jekyll/blog-migrations from your previous system
|
||||
* Learn how the "YAML Front Matter":http://wiki.github.com/mojombo/jekyll/yaml-front-matter works
|
||||
* Put information on your site with "Template Data":http://wiki.github.com/mojombo/jekyll/template-data
|
||||
* Customize the "Permalinks":http://wiki.github.com/mojombo/jekyll/permalinks your posts are generated with
|
||||
* Use the built-in "Liquid Extensions":http://wiki.github.com/mojombo/jekyll/liquid-extensions to make your life easier
|
||||
|
||||
h2. Runtime Dependencies
|
||||
|
||||
* RedCloth: Textile support (Ruby)
|
||||
* Liquid: Templating system (Ruby)
|
||||
* Classifier: Generating related posts (Ruby)
|
||||
* Maruku: Default markdown engine (Ruby)
|
||||
* Directory Watcher: Auto-regeneration of sites (Ruby)
|
||||
* Pygments: Syntax highlighting (Python)
|
||||
|
||||
h2. Developer Dependencies
|
||||
|
||||
* Shoulda: Test framework (Ruby)
|
||||
* RR: Mocking (Ruby)
|
||||
* RedGreen: Nicer test output (Ruby)
|
||||
|
||||
h2. License
|
||||
|
||||
See LICENSE.
|
||||
234
Rakefile
234
Rakefile
@@ -1,15 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rubygems"
|
||||
require "rake"
|
||||
require "rdoc"
|
||||
require "date"
|
||||
require "yaml"
|
||||
|
||||
$LOAD_PATH.unshift File.expand_path("lib", __dir__)
|
||||
require "jekyll/version"
|
||||
|
||||
Dir.glob("rake/**.rake").each { |f| import f }
|
||||
require 'rubygems'
|
||||
require 'rake'
|
||||
require 'date'
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
@@ -18,19 +9,20 @@ Dir.glob("rake/**.rake").each { |f| import f }
|
||||
#############################################################################
|
||||
|
||||
def name
|
||||
"jekyll"
|
||||
@name ||= Dir['*.gemspec'].first.split('.').first
|
||||
end
|
||||
|
||||
def version
|
||||
Jekyll::VERSION
|
||||
line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
|
||||
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
|
||||
end
|
||||
|
||||
def docs_name
|
||||
"#{name}-docs"
|
||||
def date
|
||||
Date.today.to_s
|
||||
end
|
||||
|
||||
def docs_folder
|
||||
"docs"
|
||||
def rubyforge_project
|
||||
name
|
||||
end
|
||||
|
||||
def gemspec_file
|
||||
@@ -38,84 +30,11 @@ def gemspec_file
|
||||
end
|
||||
|
||||
def gem_file
|
||||
"#{name}-#{Gem::Version.new(version)}.gem"
|
||||
"#{name}-#{version}.gem"
|
||||
end
|
||||
|
||||
def normalize_bullets(markdown)
|
||||
markdown.gsub(%r!\n\s{2}\*{1}!, "\n-")
|
||||
end
|
||||
|
||||
def linkify_prs(markdown)
|
||||
markdown.gsub(%r!(?<\!&)#(\d+)!) do |word|
|
||||
"[#{word}]({{ site.repository }}/issues/#{word.delete("#")})"
|
||||
end
|
||||
end
|
||||
|
||||
def linkify(markdown)
|
||||
linkify_prs(markdown)
|
||||
end
|
||||
|
||||
def liquid_escape(markdown)
|
||||
markdown.gsub(%r!(`{[{%].+[}%]}`)!, "{% raw %}\\1{% endraw %}")
|
||||
end
|
||||
|
||||
def custom_release_header_anchors(markdown)
|
||||
header_regexp = %r!^(\d{1,2})\.(\d{1,2})\.(\d{1,2}) \/ \d{4}-\d{2}-\d{2}!
|
||||
section_regexp = %r!^### \w+ \w+$!
|
||||
markdown.split(%r!^##\s!).map do |release_notes|
|
||||
_, major, minor, patch = *release_notes.match(header_regexp)
|
||||
release_notes
|
||||
.gsub(header_regexp, "\\0\n{: #v\\1-\\2-\\3}")
|
||||
.gsub(section_regexp) { |section| "#{section}\n{: ##{slugify(section)}-v#{major}-#{minor}-#{patch}}" }
|
||||
end.join("\n## ")
|
||||
end
|
||||
|
||||
def slugify(header)
|
||||
header.delete("#").strip.downcase.gsub(%r!\s+!, "-")
|
||||
end
|
||||
|
||||
def remove_head_from_history(markdown)
|
||||
index = markdown =~ %r!^##\s+\d+\.\d+\.\d+!
|
||||
markdown[index..-1]
|
||||
end
|
||||
|
||||
def converted_history(markdown)
|
||||
remove_head_from_history(
|
||||
custom_release_header_anchors(
|
||||
liquid_escape(
|
||||
linkify(
|
||||
normalize_bullets(markdown)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
def siteify_file(file, overrides_front_matter = {})
|
||||
abort "You seem to have misplaced your #{file} file. I can haz?" unless File.exist?(file)
|
||||
title = begin
|
||||
File.read(file).match(%r!\A# (.*)$!)[1]
|
||||
rescue NoMethodError
|
||||
File.basename(file, ".*").downcase.capitalize
|
||||
end
|
||||
slug = File.basename(file, ".markdown").downcase
|
||||
front_matter = {
|
||||
"title" => title,
|
||||
"permalink" => "/docs/#{slug}/",
|
||||
"note" => "This file is autogenerated. Edit /#{file} instead.",
|
||||
}.merge(overrides_front_matter)
|
||||
contents = "#{front_matter.to_yaml}---\n\n#{content_for(file)}"
|
||||
File.write("#{docs_folder}/_docs/#{slug}.md", contents)
|
||||
end
|
||||
|
||||
def content_for(file)
|
||||
contents = File.read(file)
|
||||
case file
|
||||
when "History.markdown"
|
||||
converted_history(contents)
|
||||
else
|
||||
contents.gsub(%r!\A# .*\n\n?!, "")
|
||||
end
|
||||
def replace_header(head, header_name)
|
||||
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
||||
end
|
||||
|
||||
#############################################################################
|
||||
@@ -124,40 +43,117 @@ end
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
multitask :default => [:test, :features]
|
||||
task :default => [:test, :features]
|
||||
|
||||
task :spec => :test
|
||||
require "rake/testtask"
|
||||
require 'rake/testtask'
|
||||
Rake::TestTask.new(:test) do |test|
|
||||
test.libs << "lib" << "test"
|
||||
test.pattern = "test/**/test_*.rb"
|
||||
test.libs << 'lib' << 'test'
|
||||
test.pattern = 'test/**/test_*.rb'
|
||||
test.verbose = true
|
||||
end
|
||||
|
||||
require "rdoc/task"
|
||||
Rake::RDocTask.new do |rdoc|
|
||||
rdoc.rdoc_dir = "rdoc"
|
||||
rdoc.title = "#{name} #{version}"
|
||||
rdoc.rdoc_files.include("README*")
|
||||
rdoc.rdoc_files.include("lib/**/*.rb")
|
||||
desc "Generate RCov test coverage and open in your browser"
|
||||
task :coverage do
|
||||
require 'rcov'
|
||||
sh "rm -fr coverage"
|
||||
sh "rcov test/test_*.rb"
|
||||
sh "open coverage/index.html"
|
||||
end
|
||||
|
||||
begin
|
||||
require "cucumber/rake/task"
|
||||
Cucumber::Rake::Task.new(:features) do |t|
|
||||
t.profile = "travis"
|
||||
end
|
||||
Cucumber::Rake::Task.new(:"features:html", "Run Cucumber features and produce HTML output") do |t|
|
||||
t.profile = "html_report"
|
||||
end
|
||||
rescue LoadError
|
||||
desc "Cucumber rake task not available"
|
||||
task :features do
|
||||
abort "Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin"
|
||||
end
|
||||
require 'rake/rdoctask'
|
||||
Rake::RDocTask.new do |rdoc|
|
||||
rdoc.rdoc_dir = 'rdoc'
|
||||
rdoc.title = "#{name} #{version}"
|
||||
rdoc.rdoc_files.include('README*')
|
||||
rdoc.rdoc_files.include('lib/**/*.rb')
|
||||
end
|
||||
|
||||
desc "Open an irb session preloaded with this library"
|
||||
task :console do
|
||||
sh "irb -r ./lib/#{name}.rb"
|
||||
sh "irb -rubygems -r ./lib/#{name}.rb"
|
||||
end
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Custom tasks (add your own tasks here)
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
namespace :migrate do
|
||||
desc "Migrate from mephisto in the current directory"
|
||||
task :mephisto do
|
||||
sh %q(ruby -r './lib/jekyll/migrators/mephisto' -e 'Jekyll::Mephisto.postgres(:database => "#{ENV["DB"]}")')
|
||||
end
|
||||
desc "Migrate from Movable Type in the current directory"
|
||||
task :mt do
|
||||
sh %q(ruby -r './lib/jekyll/migrators/mt' -e 'Jekyll::MT.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
|
||||
end
|
||||
desc "Migrate from Typo in the current directory"
|
||||
task :typo do
|
||||
sh %q(ruby -r './lib/jekyll/migrators/typo' -e 'Jekyll::Typo.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
require 'cucumber/rake/task'
|
||||
Cucumber::Rake::Task.new(:features) do |t|
|
||||
t.cucumber_opts = "--format progress"
|
||||
end
|
||||
rescue LoadError
|
||||
desc 'Cucumber rake task not available'
|
||||
task :features do
|
||||
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
||||
end
|
||||
end
|
||||
|
||||
#############################################################################
|
||||
#
|
||||
# Packaging tasks
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
task :release => :build do
|
||||
unless `git branch` =~ /^\* master$/
|
||||
puts "You must be on the master branch to release!"
|
||||
exit!
|
||||
end
|
||||
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
||||
sh "git tag v#{version}"
|
||||
sh "git push origin master"
|
||||
sh "git push origin v#{version}"
|
||||
sh "gem push pkg/#{name}-#{version}.gem"
|
||||
end
|
||||
|
||||
task :build => :gemspec do
|
||||
sh "mkdir -p pkg"
|
||||
sh "gem build #{gemspec_file}"
|
||||
sh "mv #{gem_file} pkg"
|
||||
end
|
||||
|
||||
task :gemspec do
|
||||
# read spec file and split out manifest section
|
||||
spec = File.read(gemspec_file)
|
||||
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
||||
|
||||
# replace name version and date
|
||||
replace_header(head, :name)
|
||||
replace_header(head, :version)
|
||||
replace_header(head, :date)
|
||||
#comment this out if your rubyforge_project has a different name
|
||||
replace_header(head, :rubyforge_project)
|
||||
|
||||
# determine file list from git ls-files
|
||||
files = `git ls-files`.
|
||||
split("\n").
|
||||
sort.
|
||||
reject { |file| file =~ /^\./ }.
|
||||
reject { |file| file =~ /^(rdoc|pkg|coverage)/ }.
|
||||
map { |file| " #{file}" }.
|
||||
join("\n")
|
||||
|
||||
# piece file back together and write
|
||||
manifest = " s.files = %w[\n#{files}\n ]\n"
|
||||
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
|
||||
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
||||
puts "Updated #{gemspec_file}"
|
||||
end
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require "liquid"
|
||||
require "benchmark/ips"
|
||||
|
||||
puts "Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
|
||||
puts "Liquid #{Liquid::VERSION}"
|
||||
|
||||
template1 = '{% capture foobar %}foo{{ bar }}{% endcapture %}{{ foo }}{{ foobar }}'
|
||||
template2 = '{% assign foobar = "foo" | append: bar %}{{ foobar }}'
|
||||
|
||||
def render(template)
|
||||
Liquid::Template.parse(template).render("bar" => "42")
|
||||
end
|
||||
|
||||
puts render(template1)
|
||||
puts render(template2)
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('capture') { render(template1) }
|
||||
x.report('assign') { render(template2) }
|
||||
end
|
||||
@@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "liquid"
|
||||
require "benchmark/ips"
|
||||
|
||||
# Test if processing content string without any Liquid constructs, via Liquid,
|
||||
# is slower than checking whether constructs exist ( using `String#include?` )
|
||||
# and return-ing the "plaintext" content string as is..
|
||||
#
|
||||
# Ref: https://github.com/jekyll/jekyll/pull/6735
|
||||
|
||||
# Sample contents
|
||||
WITHOUT_LIQUID = <<-TEXT.freeze
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
|
||||
pharetra tempus. Etiam bibendum magna et metus fermentum, eu cursus lorem
|
||||
mattis. Curabitur vel dui et lacus rutrum suscipit et eget neque.
|
||||
|
||||
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
|
||||
ligula, at finibus eros laoreet id. Etiam sit amet est in libero efficitur
|
||||
tristique. Ut nec magna augue. Quisque ut fringilla lacus, ac dictum enim.
|
||||
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
|
||||
aliquet. Sed ultrices placerat ultricies.
|
||||
TEXT
|
||||
|
||||
WITH_LIQUID = <<-LIQUID.freeze
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
|
||||
pharetra tempus. {{ author }} et metus fermentum, eu cursus lorem
|
||||
mattis. Curabitur vel dui et lacus rutrum suscipit et eget neque.
|
||||
|
||||
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
|
||||
ligula, {% if author == "Jane Doe" %} at finibus eros laoreet id. {% else %}
|
||||
Etiam sit amet est in libero efficitur.{% endif %}
|
||||
tristique. Ut nec magna augue. Quisque ut fringilla lacus, ac dictum enim.
|
||||
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
|
||||
aliquet. Sed ultrices placerat ultricies.
|
||||
LIQUID
|
||||
|
||||
WITH_JUST_LIQUID_VAR = <<-LIQUID.freeze
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
|
||||
pharetra tempus. et metus fermentum, eu cursus lorem, ac dictum enim.
|
||||
mattis. Curabitur vel dui et lacus rutrum suscipit et {{ title }} neque.
|
||||
|
||||
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
|
||||
ligula, at finibus eros laoreet id. Etiam sit amet est in libero efficitur.
|
||||
tristique. Ut nec magna augue. {{ author }} Quisque ut fringilla lacus
|
||||
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
|
||||
aliquet. Sed ultrices placerat ultricies.
|
||||
LIQUID
|
||||
|
||||
SUITE = {
|
||||
:"plain text" => WITHOUT_LIQUID,
|
||||
:"tags n vars" => WITH_LIQUID,
|
||||
:"just vars" => WITH_JUST_LIQUID_VAR,
|
||||
}.freeze
|
||||
|
||||
# Mimic how Jekyll's LiquidRenderer would process a non-static file, with
|
||||
# some dummy payload
|
||||
def always_liquid(content)
|
||||
Liquid::Template.error_mode = :warn
|
||||
Liquid::Template.parse(content, :line_numbers => true).render(
|
||||
"author" => "John Doe",
|
||||
"title" => "FooBar"
|
||||
)
|
||||
end
|
||||
|
||||
# Mimic how the proposed change would first execute a couple of checks and
|
||||
# proceed to process with Liquid if necessary
|
||||
def conditional_liquid(content)
|
||||
return content if content.nil? || content.empty?
|
||||
return content unless content.include?("{%") || content.include?("{{")
|
||||
always_liquid(content)
|
||||
end
|
||||
|
||||
# Test https://github.com/jekyll/jekyll/pull/6735#discussion_r165499868
|
||||
# ------------------------------------------------------------------------
|
||||
def check_with_regex(content)
|
||||
!content.to_s.match?(%r!{[{%]!)
|
||||
end
|
||||
|
||||
def check_with_builtin(content)
|
||||
content.include?("{%") || content.include?("{{")
|
||||
end
|
||||
|
||||
SUITE.each do |key, text|
|
||||
Benchmark.ips do |x|
|
||||
x.report("regex-check - #{key}") { check_with_regex(text) }
|
||||
x.report("builtin-check - #{key}") { check_with_builtin(text) }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
# ------------------------------------------------------------------------
|
||||
|
||||
# Let's roll!
|
||||
SUITE.each do |key, text|
|
||||
Benchmark.ips do |x|
|
||||
x.report("always thru liquid - #{key}") { always_liquid(text) }
|
||||
x.report("conditional liquid - #{key}") { conditional_liquid(text) }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
Benchmark.ips do |x|
|
||||
path_without_ending_slash = '/some/very/very/long/path/to/a/file/i/like'
|
||||
x.report('no slash regexp') { path_without_ending_slash =~ /\/$/ }
|
||||
x.report('no slash end_with?') { path_without_ending_slash.end_with?("/") }
|
||||
x.report('no slash [-1, 1]') { path_without_ending_slash[-1, 1] == "/" }
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
path_with_ending_slash = '/some/very/very/long/path/to/a/file/i/like/'
|
||||
x.report('slash regexp') { path_with_ending_slash =~ /\/$/ }
|
||||
x.report('slash end_with?') { path_with_ending_slash.end_with?("/") }
|
||||
x.report('slash [-1, 1]') { path_with_ending_slash[-1, 1] == "/" }
|
||||
end
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
# For this pull request, which changes Page#dir
|
||||
# https://github.com/jekyll/jekyll/pull/4403
|
||||
|
||||
FORWARD_SLASH = '/'.freeze
|
||||
|
||||
def pre_pr(url)
|
||||
url[-1, 1] == FORWARD_SLASH ? url : File.dirname(url)
|
||||
end
|
||||
|
||||
def pr(url)
|
||||
if url.end_with?(FORWARD_SLASH)
|
||||
url
|
||||
else
|
||||
url_dir = File.dirname(url)
|
||||
url_dir.end_with?(FORWARD_SLASH) ? url_dir : "#{url_dir}/"
|
||||
end
|
||||
end
|
||||
|
||||
def envygeeks(url)
|
||||
return url if url.end_with?(FORWARD_SLASH) || url == FORWARD_SLASH
|
||||
|
||||
url = File.dirname(url)
|
||||
url == FORWARD_SLASH ? url : "#{url}/"
|
||||
end
|
||||
|
||||
# Just a slash
|
||||
Benchmark.ips do |x|
|
||||
path = '/'
|
||||
x.report("pre_pr:#{path}") { pre_pr(path) }
|
||||
x.report("pr:#{path}") { pr(path) }
|
||||
x.report("envygeeks:#{path}") { pr(path) }
|
||||
x.compare!
|
||||
end
|
||||
|
||||
# No trailing slash
|
||||
Benchmark.ips do |x|
|
||||
path = '/some/very/very/long/path/to/a/file/i/like'
|
||||
x.report("pre_pr:#{path}") { pre_pr(path) }
|
||||
x.report("pr:#{path}") { pr(path) }
|
||||
x.report("envygeeks:#{path}") { pr(path) }
|
||||
x.compare!
|
||||
end
|
||||
|
||||
# No trailing slash
|
||||
Benchmark.ips do |x|
|
||||
path = '/some/very/very/long/path/to/a/file/i/like/'
|
||||
x.report("pre_pr:#{path}") { pre_pr(path) }
|
||||
x.report("pr:#{path}") { pr(path) }
|
||||
x.report("envygeeks:#{path}") { pr(path) }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,49 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'benchmark/ips'
|
||||
require_relative '../lib/jekyll'
|
||||
|
||||
puts ''
|
||||
print 'Setting up... '
|
||||
|
||||
SITE = Jekyll::Site.new(
|
||||
Jekyll.configuration({
|
||||
"source" => File.expand_path("../docs", __dir__),
|
||||
"destination" => File.expand_path("../docs/_site", __dir__),
|
||||
"disable_disk_cache" => true,
|
||||
"quiet" => true,
|
||||
})
|
||||
)
|
||||
|
||||
TEMPLATE_1 = Liquid::Template.parse(<<~HTML)
|
||||
{%- assign doc = site.documents | where: 'url', '/docs/assets/' | first -%}
|
||||
{{- doc.title -}}
|
||||
HTML
|
||||
|
||||
TEMPLATE_2 = Liquid::Template.parse(<<~HTML)
|
||||
{%- assign doc = site.documents | find: 'url', '/docs/assets/' -%}
|
||||
{{- doc.title -}}
|
||||
HTML
|
||||
|
||||
[:reset, :read, :generate].each { |phase| SITE.send(phase) }
|
||||
|
||||
puts 'done.'
|
||||
puts 'Testing... '
|
||||
puts " #{'where + first'.cyan} results in #{TEMPLATE_1.render(SITE.site_payload).inspect.green}"
|
||||
puts " #{'find'.cyan} results in #{TEMPLATE_2.render(SITE.site_payload).inspect.green}"
|
||||
|
||||
if TEMPLATE_1.render(SITE.site_payload) == TEMPLATE_2.render(SITE.site_payload)
|
||||
puts 'Success! Proceeding to run benchmarks.'.green
|
||||
puts ''
|
||||
else
|
||||
puts 'Something went wrong. Aborting.'.magenta
|
||||
puts ''
|
||||
return
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('where + first') { TEMPLATE_1.render(SITE.site_payload) }
|
||||
x.report('find') { TEMPLATE_2.render(SITE.site_payload) }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
enum = (0..50).to_a
|
||||
nested = enum.map { |i| [i] }
|
||||
|
||||
def do_thing(blah)
|
||||
blah * 1
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('.map.flatten with nested arrays') { nested.map { |i| do_thing(i) }.flatten(1) }
|
||||
x.report('.flat_map with nested arrays') { nested.flat_map { |i| do_thing(i) } }
|
||||
|
||||
x.report('.map.flatten with no nested arrays') { enum.map { |i| do_thing(i) }.flatten(1) }
|
||||
x.report('.flat_map with no nested arrays') { enum.flat_map { |i| do_thing(i) } }
|
||||
end
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
h = {:bar => 'uco'}
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('fetch with no block') { h.fetch(:bar, (0..9).to_a) }
|
||||
x.report('fetch with a block') { h.fetch(:bar) { (0..9).to_a } }
|
||||
x.report('brackets with an ||') { h[:bar] || (0..9).to_a }
|
||||
end
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require_relative '../lib/jekyll'
|
||||
require 'benchmark/ips'
|
||||
|
||||
base_directory = Dir.pwd
|
||||
|
||||
Benchmark.ips do |x|
|
||||
#
|
||||
# Does not include the base_directory
|
||||
#
|
||||
x.report('with no questionable path') do
|
||||
Jekyll.sanitized_path(base_directory, '')
|
||||
end
|
||||
x.report('with a single-part questionable path') do
|
||||
Jekyll.sanitized_path(base_directory, 'thingy')
|
||||
end
|
||||
x.report('with a multi-part questionable path') do
|
||||
Jekyll.sanitized_path(base_directory, 'thingy/in/my/soup')
|
||||
end
|
||||
x.report('with a single-part traversal path') do
|
||||
Jekyll.sanitized_path(base_directory, '../thingy')
|
||||
end
|
||||
x.report('with a multi-part traversal path') do
|
||||
Jekyll.sanitized_path(base_directory, '../thingy/in/my/../../soup')
|
||||
end
|
||||
|
||||
#
|
||||
# Including the base_directory
|
||||
#
|
||||
x.report('with the exact same paths') do
|
||||
Jekyll.sanitized_path(base_directory, base_directory)
|
||||
end
|
||||
x.report('with a single-part absolute path including the base_directory') do
|
||||
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy'))
|
||||
end
|
||||
x.report('with a multi-part absolute path including the base_directory') do
|
||||
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy/in/my/soup'))
|
||||
end
|
||||
x.report('with a single-part traversal path including the base_directory') do
|
||||
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy/..'))
|
||||
end
|
||||
x.report('with a multi-part traversal path including the base_directory') do
|
||||
Jekyll.sanitized_path(base_directory, File.join('thingy/in/my/../../soup'))
|
||||
end
|
||||
end
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'benchmark/ips'
|
||||
require 'jekyll'
|
||||
require 'json'
|
||||
|
||||
DATA = {"foo"=>"bar", "alpha"=>{"beta"=>"gamma"}, "lipsum"=>["lorem", "ipsum", "dolor"]}
|
||||
|
||||
def local_require
|
||||
require 'json'
|
||||
JSON.pretty_generate(DATA)
|
||||
end
|
||||
|
||||
def global_require
|
||||
JSON.pretty_generate(DATA)
|
||||
end
|
||||
|
||||
def graceful_require
|
||||
Jekyll::External.require_with_graceful_fail("json")
|
||||
JSON.pretty_generate(DATA)
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report("local-require") { local_require }
|
||||
x.report("global-require") { global_require }
|
||||
x.report("graceful-require") { graceful_require }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Benchmarking changes in https://github.com/jekyll/jekyll/pull/6767
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
require 'benchmark/ips'
|
||||
require 'pathutil'
|
||||
|
||||
DOC_PATH = File.join(File.expand_path(__dir__), "_puppies", "rover.md")
|
||||
COL_PATH = File.join(File.expand_path(__dir__), "_puppies")
|
||||
|
||||
|
||||
def pathutil_relative
|
||||
Pathutil.new(DOC_PATH).relative_path_from(COL_PATH).to_s
|
||||
end
|
||||
|
||||
def native_relative
|
||||
DOC_PATH.sub("#{COL_PATH}/", "")
|
||||
end
|
||||
|
||||
if pathutil_relative == native_relative
|
||||
Benchmark.ips do |x|
|
||||
x.report("pathutil") { pathutil_relative }
|
||||
x.report("native") { native_relative }
|
||||
x.compare!
|
||||
end
|
||||
else
|
||||
print "PATHUTIL: "
|
||||
puts pathutil_relative
|
||||
print "NATIVE: "
|
||||
puts native_relative
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require_relative '../lib/jekyll'
|
||||
require 'benchmark/ips'
|
||||
|
||||
date = "2014-08-02 14:43:06 PDT".freeze
|
||||
time = Time.parse(date)
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('Time.parse') do
|
||||
Time.parse(date)
|
||||
end
|
||||
|
||||
x.report('localtime') do
|
||||
Time.parse(date).localtime
|
||||
end
|
||||
|
||||
x.report('localtime parsed') do
|
||||
time.localtime
|
||||
end
|
||||
|
||||
x.report('Utils.parse_date') do
|
||||
Jekyll::Utils.parse_date(date)
|
||||
end
|
||||
end
|
||||
@@ -1,91 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
# For pull request: https://github.com/jekyll/jekyll/pull/8192
|
||||
|
||||
require 'benchmark/ips'
|
||||
require 'bundler/setup'
|
||||
require 'memory_profiler'
|
||||
require 'jekyll'
|
||||
|
||||
CONTEXT = {"bar"=>"The quick brown fox"}
|
||||
MARKUP_1 = %Q(foo=bar lorem="ipsum \\"dolor\\"" alpha='beta \\'gamma\\'').freeze
|
||||
MARKUP_2 = %Q(foo=bar lorem="ipsum 'dolor'" alpha='beta "gamma"').freeze
|
||||
|
||||
#
|
||||
|
||||
def old_parse_params(markup)
|
||||
params = {}
|
||||
|
||||
while (match = Jekyll::Tags::IncludeTag::VALID_SYNTAX.match(markup))
|
||||
markup = markup[match.end(0)..-1]
|
||||
|
||||
value = if match[2]
|
||||
match[2].gsub('\\"', '"')
|
||||
elsif match[3]
|
||||
match[3].gsub("\\'", "'")
|
||||
elsif match[4]
|
||||
CONTEXT[match[4]]
|
||||
end
|
||||
|
||||
params[match[1]] = value
|
||||
end
|
||||
params
|
||||
end
|
||||
|
||||
def new_parse_params(markup)
|
||||
params = {}
|
||||
markup.scan(Jekyll::Tags::IncludeTag::VALID_SYNTAX) do |key, d_quoted, s_quoted, variable|
|
||||
value = if d_quoted
|
||||
d_quoted.include?('\\"') ? d_quoted.gsub('\\"', '"') : d_quoted
|
||||
elsif s_quoted
|
||||
s_quoted.include?("\\'") ? s_quoted.gsub("\\'", "'") : s_quoted
|
||||
elsif variable
|
||||
CONTEXT[variable]
|
||||
end
|
||||
|
||||
params[key] = value
|
||||
end
|
||||
params
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
def report(label, markup, color)
|
||||
prof_report = MemoryProfiler.report { yield }
|
||||
|
||||
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
|
||||
allocated_objects = prof_report.total_allocated
|
||||
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
|
||||
retained_objects = prof_report.total_retained
|
||||
|
||||
puts <<~MSG.send(color)
|
||||
#{(label + " ").ljust(49, "-")}
|
||||
|
||||
MARKUP: #{markup}
|
||||
RESULT: #{yield}
|
||||
|
||||
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
|
||||
Total retained: #{retained_memory} (#{retained_objects} objects)
|
||||
MSG
|
||||
end
|
||||
|
||||
report('old w/ escaping', MARKUP_1, :magenta) { old_parse_params(MARKUP_1) }
|
||||
report('new w/ escaping', MARKUP_1, :cyan) { new_parse_params(MARKUP_1) }
|
||||
|
||||
report('old no escaping', MARKUP_2, :green) { old_parse_params(MARKUP_2) }
|
||||
report('new no escaping', MARKUP_2, :yellow) { new_parse_params(MARKUP_2) }
|
||||
|
||||
#
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report("old + esc".magenta) { old_parse_params(MARKUP_1) }
|
||||
x.report("new + esc".cyan) { new_parse_params(MARKUP_1) }
|
||||
x.compare!
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report("old - esc".green) { old_parse_params(MARKUP_2) }
|
||||
x.report("new - esc".yellow) { new_parse_params(MARKUP_2) }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,65 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'benchmark/ips'
|
||||
require 'jekyll'
|
||||
|
||||
class FooPage
|
||||
def initialize(dir:, name:)
|
||||
@dir = dir
|
||||
@name = name
|
||||
end
|
||||
|
||||
def slow_path
|
||||
File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A/!, "")
|
||||
end
|
||||
|
||||
def fast_path
|
||||
Jekyll::PathManager.join(@dir, @name).sub(%r!\A/!, "")
|
||||
end
|
||||
end
|
||||
|
||||
nil_page = FooPage.new(:dir => nil, :name => nil)
|
||||
empty_page = FooPage.new(:dir => "", :name => "")
|
||||
root_page = FooPage.new(:dir => "", :name => "ipsum.md")
|
||||
nested_page = FooPage.new(:dir => "lorem", :name => "ipsum.md")
|
||||
slashed_page = FooPage.new(:dir => "/lorem/", :name => "/ipsum.md")
|
||||
|
||||
if nil_page.slow_path == nil_page.fast_path
|
||||
Benchmark.ips do |x|
|
||||
x.report('nil_page slow') { nil_page.slow_path }
|
||||
x.report('nil_page fast') { nil_page.fast_path }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
|
||||
if empty_page.slow_path == empty_page.fast_path
|
||||
Benchmark.ips do |x|
|
||||
x.report('empty_page slow') { empty_page.slow_path }
|
||||
x.report('empty_page fast') { empty_page.fast_path }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
|
||||
if root_page.slow_path == root_page.fast_path
|
||||
Benchmark.ips do |x|
|
||||
x.report('root_page slow') { root_page.slow_path }
|
||||
x.report('root_page fast') { root_page.fast_path }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
|
||||
if nested_page.slow_path == nested_page.fast_path
|
||||
Benchmark.ips do |x|
|
||||
x.report('nested_page slow') { nested_page.slow_path }
|
||||
x.report('nested_page fast') { nested_page.fast_path }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
|
||||
if slashed_page.slow_path == slashed_page.fast_path
|
||||
Benchmark.ips do |x|
|
||||
x.report('slashed_page slow') { slashed_page.slow_path }
|
||||
x.report('slashed_page fast') { slashed_page.fast_path }
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
def fast
|
||||
yield
|
||||
end
|
||||
|
||||
def slow(&block)
|
||||
block.call
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('yield') { fast { (0..9).to_a } }
|
||||
x.report('block.call') { slow { (0..9).to_a } }
|
||||
end
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
# For this pull request, which changes Page#dir
|
||||
# https://github.com/jekyll/jekyll/pull/4403
|
||||
|
||||
CONTENT_CONTAINING = <<-HTML.freeze
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta charset="UTF-8">
|
||||
<title>Jemoji</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<link rel="stylesheet" href="/css/screen.css">
|
||||
</head>
|
||||
<body class="wrap">
|
||||
<p><img class="emoji" title=":+1:" alt=":+1:" src="https://assets.github.com/images/icons/emoji/unicode/1f44d.png" height="20" width="20" align="absmiddle"></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
HTML
|
||||
CONTENT_NOT_CONTAINING = <<-HTML.freeze
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta charset="UTF-8">
|
||||
<title>Jemoji</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<link rel="stylesheet" href="/css/screen.css">
|
||||
</head>
|
||||
<body class="wrap">
|
||||
<p><img class="emoji" title=":+1:" alt=":+1:" src="https://assets.github.com/images/icons/emoji/unicode/1f44d.png" height="20" width="20" align="absmiddle"></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
HTML
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report("no body include?") { CONTENT_NOT_CONTAINING.include?('<body') }
|
||||
x.report("no body regexp") { CONTENT_NOT_CONTAINING =~ /<\s*body/ }
|
||||
x.compare!
|
||||
end
|
||||
|
||||
# No trailing slash
|
||||
Benchmark.ips do |x|
|
||||
x.report("with body include?") { CONTENT_CONTAINING.include?('<body') }
|
||||
x.report("with body regexp") { CONTENT_CONTAINING =~ /<\s*body/ }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require "benchmark/ips"
|
||||
|
||||
PATH = "/../../..../...//.....//lorem/ipsum//dolor///sit.xyz"
|
||||
|
||||
def sanitize_with_regex
|
||||
"/" + PATH.gsub(%r!/{2,}!, "/").gsub(%r!\.+/|\A/+!, "")
|
||||
end
|
||||
|
||||
def sanitize_with_builtin
|
||||
"/#{PATH}".gsub("..", "/").gsub("./", "").squeeze("/")
|
||||
end
|
||||
|
||||
if sanitize_with_regex == sanitize_with_builtin
|
||||
Benchmark.ips do |x|
|
||||
x.report("sanitize w/ regexes") { sanitize_with_regex }
|
||||
x.report("sanitize w/ builtin") { sanitize_with_builtin }
|
||||
x.compare!
|
||||
end
|
||||
else
|
||||
puts "w/ regexes: #{sanitize_with_regex}"
|
||||
puts "w/ builtin: #{sanitize_with_builtin}"
|
||||
puts ""
|
||||
puts "Thank you. Do try again :("
|
||||
end
|
||||
@@ -1,110 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
#
|
||||
# The Ruby documentation for #sort_by describes what's called a Schwartzian transform:
|
||||
#
|
||||
# > A more efficient technique is to cache the sort keys (modification times in this case)
|
||||
# > before the sort. Perl users often call this approach a Schwartzian transform, after
|
||||
# > Randal Schwartz. We construct a temporary array, where each element is an array
|
||||
# > containing our sort key along with the filename. We sort this array, and then extract
|
||||
# > the filename from the result.
|
||||
# > This is exactly what sort_by does internally.
|
||||
#
|
||||
# The well-documented efficiency of sort_by is a good reason to use it. However, when a property
|
||||
# does not exist on an item being sorted, it can cause issues (no nil's allowed!)
|
||||
# In Jekyll::Filters#sort_input, we extract the property in each iteration of #sort,
|
||||
# which is quite inefficient! How inefficient? This benchmark will tell you just how, and how much
|
||||
# it can be improved by using the Schwartzian transform. Thanks, Randall!
|
||||
|
||||
require 'benchmark/ips'
|
||||
require 'minitest'
|
||||
require File.expand_path("../lib/jekyll", __dir__)
|
||||
|
||||
def site
|
||||
@site ||= Jekyll::Site.new(
|
||||
Jekyll.configuration("source" => File.expand_path("../docs", __dir__))
|
||||
).tap(&:reset).tap(&:read)
|
||||
end
|
||||
|
||||
def site_docs
|
||||
site.collections["docs"].docs.dup
|
||||
end
|
||||
|
||||
def sort_by_property_directly(docs, meta_key)
|
||||
docs.sort! do |apple, orange|
|
||||
apple_property = apple[meta_key]
|
||||
orange_property = orange[meta_key]
|
||||
|
||||
if !apple_property.nil? && !orange_property.nil?
|
||||
apple_property <=> orange_property
|
||||
elsif !apple_property.nil? && orange_property.nil?
|
||||
-1
|
||||
elsif apple_property.nil? && !orange_property.nil?
|
||||
1
|
||||
else
|
||||
apple <=> orange
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def schwartzian_transform(docs, meta_key)
|
||||
docs.collect! { |d|
|
||||
[d[meta_key], d]
|
||||
}.sort! { |apple, orange|
|
||||
if !apple[0].nil? && !orange[0].nil?
|
||||
apple.first <=> orange.first
|
||||
elsif !apple[0].nil? && orange[0].nil?
|
||||
-1
|
||||
elsif apple[0].nil? && !orange[0].nil?
|
||||
1
|
||||
else
|
||||
apple[-1] <=> orange[-1]
|
||||
end
|
||||
}.collect! { |d| d[-1] }
|
||||
end
|
||||
|
||||
# Before we test efficiency, do they produce the same output?
|
||||
class Correctness
|
||||
include Minitest::Assertions
|
||||
|
||||
require "pp"
|
||||
define_method :mu_pp, &:pretty_inspect
|
||||
|
||||
attr_accessor :assertions
|
||||
|
||||
def initialize(docs, property)
|
||||
@assertions = 0
|
||||
@docs = docs
|
||||
@property = property
|
||||
end
|
||||
|
||||
def assert!
|
||||
assert sort_by_property_directly(@docs, @property).is_a?(Array), "sort_by_property_directly must return an array"
|
||||
assert schwartzian_transform(@docs, @property).is_a?(Array), "schwartzian_transform must return an array"
|
||||
assert_equal sort_by_property_directly(@docs, @property),
|
||||
schwartzian_transform(@docs, @property)
|
||||
puts "Yeah, ok, correctness all checks out for property #{@property.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
Correctness.new(site_docs, "redirect_from".freeze).assert!
|
||||
Correctness.new(site_docs, "title".freeze).assert!
|
||||
|
||||
def property(property, meta_key)
|
||||
Benchmark.ips do |x|
|
||||
x.config(time: 10, warmup: 5)
|
||||
x.report("sort_by_property_directly with #{property} property") do
|
||||
sort_by_property_directly(site_docs, meta_key)
|
||||
end
|
||||
x.report("schwartzian_transform with #{property} property") do
|
||||
schwartzian_transform(site_docs, meta_key)
|
||||
end
|
||||
x.compare!
|
||||
end
|
||||
end
|
||||
|
||||
# First, test with a property only a handful of documents have.
|
||||
test_property('sparse', 'redirect_from')
|
||||
|
||||
# Next, test with a property they all have.
|
||||
test_property('non-sparse', 'title')
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('parallel assignment') do
|
||||
a, b = 1, 2
|
||||
end
|
||||
x.report('multi-line assignment') do
|
||||
a = 1
|
||||
b = 2
|
||||
end
|
||||
end
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "forwardable"
|
||||
require "colorator"
|
||||
require "liquid"
|
||||
require "benchmark/ips"
|
||||
require "memory_profiler"
|
||||
|
||||
# Set up (memory) profiler
|
||||
|
||||
class Profiler
|
||||
def self.run
|
||||
yield new(ARGV[0] || 10_000)
|
||||
end
|
||||
|
||||
def initialize(count)
|
||||
@count = count.to_i
|
||||
end
|
||||
|
||||
def report(label, color, &block)
|
||||
prof_report = MemoryProfiler.report { @count.to_i.times(&block) }
|
||||
|
||||
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
|
||||
allocated_objects = prof_report.total_allocated
|
||||
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
|
||||
retained_objects = prof_report.total_retained
|
||||
|
||||
puts <<~MSG.send(color)
|
||||
With #{label} calls
|
||||
|
||||
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
|
||||
Total retained: #{retained_memory} (#{retained_objects} objects)
|
||||
MSG
|
||||
end
|
||||
end
|
||||
|
||||
# Set up stage
|
||||
|
||||
class Drop < Liquid::Drop
|
||||
def initialize(obj)
|
||||
@obj = obj
|
||||
end
|
||||
end
|
||||
|
||||
class ForwardDrop < Drop
|
||||
extend Forwardable
|
||||
def_delegators :@obj, :name
|
||||
end
|
||||
|
||||
class StaticDrop < Drop
|
||||
def name
|
||||
@obj.name
|
||||
end
|
||||
end
|
||||
|
||||
class Document
|
||||
def name
|
||||
"lipsum"
|
||||
end
|
||||
end
|
||||
|
||||
# Set up actors
|
||||
|
||||
document = Document.new
|
||||
alpha = ForwardDrop.new(document)
|
||||
beta = StaticDrop.new(document)
|
||||
count = ARGV[0] || 10_000
|
||||
|
||||
# Run profilers
|
||||
puts "\nMemory profiles for #{count} calls to invoke drop key:"
|
||||
Profiler.run do |x|
|
||||
x.report("forwarded", :cyan) { alpha["name"] }
|
||||
x.report("static", :green) { beta["name"] }
|
||||
end
|
||||
|
||||
# Benchmark
|
||||
puts "\nBenchmarking the two scenarios..."
|
||||
Benchmark.ips do |x|
|
||||
x.report("forwarded".cyan) { alpha["name"] }
|
||||
x.report("static".green) { beta["name"] }
|
||||
x.compare!
|
||||
end
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
url = "https://jekyllrb.com"
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('+=') { url += '/' }
|
||||
x.report('<<') { url << '/' }
|
||||
end
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
def str
|
||||
'http://baruco.org/2014/some-talk-with-some-amount-of-value'
|
||||
end
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('#tr') { str.tr('some', 'a') }
|
||||
x.report('#gsub') { str.gsub('some', 'a') }
|
||||
x.report('#gsub!') { str.gsub!('some', 'a') }
|
||||
x.report('#sub') { str.sub('some', 'a') }
|
||||
x.report('#sub!') { str.sub!('some', 'a') }
|
||||
end
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'benchmark/ips'
|
||||
|
||||
Benchmark.ips do |x|
|
||||
x.report('block') { (1..100).map { |i| i.to_s } }
|
||||
x.report('&:to_s') { (1..100).map(&:to_s) }
|
||||
end
|
||||
276
bin/jekyll
Executable file
276
bin/jekyll
Executable file
@@ -0,0 +1,276 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
||||
|
||||
help = <<HELP
|
||||
Jekyll is a blog-aware, static site generator.
|
||||
|
||||
Basic Command Line Usage:
|
||||
jekyll # . -> ./_site
|
||||
jekyll <path to write generated site> # . -> <path>
|
||||
jekyll <path to source> <path to write generated site> # <path> -> <path>
|
||||
jekyll import <importer name> <options> # imports posts using named import script
|
||||
|
||||
Configuration is read from '<source>/_config.yml' but can be overriden
|
||||
using the following options:
|
||||
|
||||
HELP
|
||||
|
||||
require 'optparse'
|
||||
require 'jekyll'
|
||||
|
||||
|
||||
exec = {}
|
||||
options = {}
|
||||
opts = OptionParser.new do |opts|
|
||||
opts.banner = help
|
||||
|
||||
opts.on("--file [PATH]", "File to import from") do |import_file|
|
||||
options['file'] = import_file
|
||||
end
|
||||
|
||||
opts.on("--dbname [TEXT]", "DB to import from") do |import_dbname|
|
||||
options['dbname'] = import_dbname
|
||||
end
|
||||
|
||||
opts.on("--user [TEXT]", "Username to use when importing") do |import_user|
|
||||
options['user'] = import_user
|
||||
end
|
||||
|
||||
opts.on("--pass [TEXT]", "Password to use when importing") do |import_pass|
|
||||
options['pass'] = import_pass
|
||||
end
|
||||
|
||||
opts.on("--host [HOST ADDRESS]", "Host to import from") do |import_host|
|
||||
options['host'] = import_host
|
||||
end
|
||||
|
||||
opts.on("--site [SITE NAME]", "Site to import from") do |import_site|
|
||||
options['site'] = import_site
|
||||
end
|
||||
|
||||
|
||||
opts.on("--[no-]safe", "Safe mode (default unsafe)") do |safe|
|
||||
options['safe'] = safe
|
||||
end
|
||||
|
||||
opts.on("--[no-]auto", "Auto-regenerate") do |auto|
|
||||
options['auto'] = auto
|
||||
end
|
||||
|
||||
opts.on("--server [PORT]", "Start web server (default port 4000)") do |port|
|
||||
options['server'] = true
|
||||
options['server_port'] = port unless port.nil?
|
||||
end
|
||||
|
||||
opts.on("--no-server", "Do not start a web server") do |part|
|
||||
options['server'] = false
|
||||
end
|
||||
|
||||
opts.on("--base-url [BASE_URL]", "Serve website from a given base URL (default '/'") do |baseurl|
|
||||
options['baseurl'] = baseurl
|
||||
end
|
||||
|
||||
opts.on("--[no-]lsi", "Use LSI for better related posts") do |lsi|
|
||||
options['lsi'] = lsi
|
||||
end
|
||||
|
||||
opts.on("--[no-]pygments", "Use pygments to highlight code") do |pygments|
|
||||
options['pygments'] = pygments
|
||||
end
|
||||
|
||||
opts.on("--rdiscount", "Use rdiscount gem for Markdown") do
|
||||
options['markdown'] = 'rdiscount'
|
||||
end
|
||||
|
||||
opts.on("--kramdown", "Use kramdown gem for Markdown") do
|
||||
options['markdown'] = 'kramdown'
|
||||
end
|
||||
|
||||
opts.on("--time [TIME]", "Time to generate the site for") do |time|
|
||||
options['time'] = Time.parse(time)
|
||||
end
|
||||
|
||||
opts.on("--[no-]future", "Render future dated posts") do |future|
|
||||
options['future'] = future
|
||||
end
|
||||
|
||||
opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style|
|
||||
options['permalink'] = style unless style.nil?
|
||||
end
|
||||
|
||||
opts.on("--paginate [POSTS_PER_PAGE]", "Paginate a blog's posts") do |per_page|
|
||||
begin
|
||||
options['paginate'] = per_page.to_i
|
||||
raise ArgumentError if options['paginate'] == 0
|
||||
rescue
|
||||
puts 'you must specify a number of posts by page bigger than 0'
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
opts.on("--limit_posts [MAX_POSTS]", "Limit the number of posts to publish") do |limit_posts|
|
||||
begin
|
||||
options['limit_posts'] = limit_posts.to_i
|
||||
raise ArgumentError if options['limit_posts'] < 1
|
||||
rescue
|
||||
puts 'you must specify a number of posts by page bigger than 0'
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
opts.on("--url [URL]", "Set custom site.url") do |url|
|
||||
options['url'] = url
|
||||
end
|
||||
|
||||
opts.on("--version", "Display current version") do
|
||||
puts "Jekyll " + Jekyll::VERSION
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
# Read command line options into `options` hash
|
||||
opts.parse!
|
||||
|
||||
|
||||
# Check for import stuff
|
||||
if ARGV.size > 0
|
||||
if ARGV[0] == 'import'
|
||||
migrator = ARGV[1]
|
||||
|
||||
if migrator.nil?
|
||||
puts "Invalid options. Run `jekyll --help` for assistance."
|
||||
exit(1)
|
||||
else
|
||||
migrator = migrator.downcase
|
||||
end
|
||||
|
||||
cmd_options = []
|
||||
['file', 'dbname', 'user', 'pass', 'host', 'site'].each do |p|
|
||||
cmd_options << "\"#{options[p]}\"" unless options[p].nil?
|
||||
end
|
||||
|
||||
# It's import time
|
||||
puts "Importing..."
|
||||
|
||||
# Ideally, this shouldn't be necessary. Maybe parse the actual
|
||||
# src files for the migrator name?
|
||||
migrators = {
|
||||
:posterous => 'Posterous',
|
||||
:wordpressdotcom => 'WordpressDotCom',
|
||||
:wordpress => 'Wordpress',
|
||||
:csv => 'CSV',
|
||||
:drupal => 'Drupal',
|
||||
:mephisto => 'Mephisto',
|
||||
:mt => 'MT',
|
||||
:textpattern => 'TextPattern',
|
||||
:typo => 'Typo'
|
||||
}
|
||||
|
||||
app_root = File.join(File.dirname(__FILE__), '..')
|
||||
|
||||
require "#{app_root}/lib/jekyll/migrators/#{migrator}"
|
||||
|
||||
if Jekyll.const_defined?(migrators[migrator.to_sym])
|
||||
migrator_class = Jekyll.const_get(migrators[migrator.to_sym])
|
||||
migrator_class.process(*cmd_options)
|
||||
else
|
||||
puts "Invalid migrator. Run `jekyll --help` for assistance."
|
||||
exit(1)
|
||||
end
|
||||
|
||||
exit(0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
# Get source and destintation from command line
|
||||
case ARGV.size
|
||||
when 0
|
||||
when 1
|
||||
options['destination'] = ARGV[0]
|
||||
when 2
|
||||
options['source'] = ARGV[0]
|
||||
options['destination'] = ARGV[1]
|
||||
else
|
||||
puts "Invalid options. Run `jekyll --help` for assistance."
|
||||
exit(1)
|
||||
end
|
||||
|
||||
options = Jekyll.configuration(options)
|
||||
|
||||
# Get source and destination directories (possibly set by config file)
|
||||
source = options['source']
|
||||
destination = options['destination']
|
||||
|
||||
# Files to watch
|
||||
def globs(source)
|
||||
Dir.chdir(source) do
|
||||
dirs = Dir['*'].select { |x| File.directory?(x) }
|
||||
dirs -= ['_site']
|
||||
dirs = dirs.map { |x| "#{x}/**/*" }
|
||||
dirs += ['*']
|
||||
end
|
||||
end
|
||||
|
||||
# Create the Site
|
||||
site = Jekyll::Site.new(options)
|
||||
|
||||
# Run the directory watcher for auto-generation, if required
|
||||
if options['auto']
|
||||
require 'directory_watcher'
|
||||
|
||||
puts "Auto-regenerating enabled: #{source} -> #{destination}"
|
||||
|
||||
dw = DirectoryWatcher.new(source)
|
||||
dw.interval = 1
|
||||
dw.glob = globs(source)
|
||||
|
||||
dw.add_observer do |*args|
|
||||
t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
puts "[#{t}] regeneration: #{args.size} files changed"
|
||||
site.process
|
||||
end
|
||||
|
||||
dw.start
|
||||
|
||||
unless options['server']
|
||||
loop { sleep 1000 }
|
||||
end
|
||||
else
|
||||
puts "Building site: #{source} -> #{destination}"
|
||||
begin
|
||||
site.process
|
||||
rescue Jekyll::FatalException => e
|
||||
puts
|
||||
puts "ERROR: YOUR SITE COULD NOT BE BUILT:"
|
||||
puts "------------------------------------"
|
||||
puts e.message
|
||||
exit(1)
|
||||
end
|
||||
puts "Successfully generated site: #{source} -> #{destination}"
|
||||
end
|
||||
|
||||
# Run the server on the specified port, if required
|
||||
if options['server']
|
||||
require 'webrick'
|
||||
include WEBrick
|
||||
|
||||
FileUtils.mkdir_p(destination)
|
||||
|
||||
mime_types = WEBrick::HTTPUtils::DefaultMimeTypes
|
||||
mime_types.store 'js', 'application/javascript'
|
||||
|
||||
s = HTTPServer.new(
|
||||
:Port => options['server_port'],
|
||||
:MimeTypes => mime_types
|
||||
)
|
||||
s.mount(options['baseurl'], HTTPServlet::FileHandler, destination)
|
||||
t = Thread.new {
|
||||
s.start
|
||||
}
|
||||
|
||||
trap("INT") { s.shutdown }
|
||||
t.join()
|
||||
end
|
||||
1
cucumber.yml
Normal file
1
cucumber.yml
Normal file
@@ -0,0 +1 @@
|
||||
default: --format progress
|
||||
1
doc/.gitignore
vendored
Normal file
1
doc/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
output
|
||||
7
doc/.gitscribe
Normal file
7
doc/.gitscribe
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
publish: true
|
||||
edition: 0.1
|
||||
language: en
|
||||
version: 1.0
|
||||
author: Your Name
|
||||
cover: image/cover.jpg
|
||||
9
doc/README.asciidoc
Normal file
9
doc/README.asciidoc
Normal file
@@ -0,0 +1,9 @@
|
||||
This Book
|
||||
=========
|
||||
|
||||
This book is written using using the git-scribe toolchain, which can be found at:
|
||||
|
||||
http://github.com/schacon/git-scribe
|
||||
|
||||
Instructions on how to install the tool and use it for things like editing this book,
|
||||
submitting errata and providing translations can be found at that site.
|
||||
10
doc/book/book.asc
Normal file
10
doc/book/book.asc
Normal file
@@ -0,0 +1,10 @@
|
||||
Jekyll
|
||||
======
|
||||
:Author: Tom Preston-Werner
|
||||
:Email: <tom@mojombo.com>
|
||||
|
||||
include::ch00-preface.asc[]
|
||||
|
||||
include::ch01-quick-start.asc[]
|
||||
|
||||
include::ch02-directory-layout.asc[]
|
||||
41
doc/book/ch00-preface.asc
Normal file
41
doc/book/ch00-preface.asc
Normal file
@@ -0,0 +1,41 @@
|
||||
== Preface
|
||||
|
||||
Jekyll was born out the desire to create a blog engine that would make it
|
||||
possible to write posts in my local text editor, version those posts with Git,
|
||||
and keep up with my desire to tweak the styles and layout of my site.
|
||||
|
||||
In other words, I wanted something that fit into my existing software
|
||||
development workflow and toolchain. Jekyll handles not only this case, but a
|
||||
wide variety of other situations that call for static site generation based on
|
||||
converted content and layout templates.
|
||||
|
||||
At its core, Jekyll is a text transformation engine. The concept behind the
|
||||
system is this: you give it text written in your favorite markup language, be
|
||||
that Markdown, Textile, or just plain HTML, and it churns that through a
|
||||
layout or series of layout files. Throughout that process you can tweak how
|
||||
you want the site URLs to look, what data gets displayed on the layout and
|
||||
much more.
|
||||
|
||||
If you're looking for a simple, yet powerful solution to your blogging or
|
||||
static site needs, Jekyll may be just what you've been looking for.
|
||||
|
||||
|
||||
=== What this book covers
|
||||
|
||||
_Chapter 1, Quick Start_ covers installation, introduces the Jekyll command
|
||||
line interface, and runs through a quick example demonstrating the site
|
||||
generator, post generator and how to convert your Jekyll site into a static
|
||||
site.
|
||||
|
||||
_Chapter 2, Directory Layout_ covers the various files and directories that
|
||||
comprise a Jekyll site.
|
||||
|
||||
_Chapter 3, Tags and Filters_
|
||||
|
||||
_Chapter X, Deploying your Jekyll Site_
|
||||
|
||||
_Chapter X, Customizing Jekyll with Plugins_
|
||||
|
||||
_Chapter X, Migrating to Jekyll from your Existing Blog_
|
||||
|
||||
_Chapter X, Configuration Reference_
|
||||
153
doc/book/ch01-quick-start.asc
Normal file
153
doc/book/ch01-quick-start.asc
Normal file
@@ -0,0 +1,153 @@
|
||||
== Chapter 1: Quick Start
|
||||
|
||||
This chapter is designed to get you up and running with Jekyll as quickly as
|
||||
possible.
|
||||
|
||||
|
||||
=== Installation
|
||||
|
||||
The best way to install Jekyll is via RubyGems:
|
||||
|
||||
----
|
||||
gem install jekyll
|
||||
----
|
||||
|
||||
This is all you need in order to get started with a basic Jekyll site. Some
|
||||
options require additional packages to be installed.
|
||||
|
||||
If you encounter errors during gem installation, you may need to install the
|
||||
header files for compiling extension modules for ruby 1.8:
|
||||
|
||||
.Debian
|
||||
----
|
||||
sudo apt-get install ruby1.8-dev
|
||||
----
|
||||
|
||||
.Red Hat / CentOS / Fedora systems
|
||||
----
|
||||
sudo yum install ruby-devel
|
||||
----
|
||||
|
||||
.NearlyFreeSpeech
|
||||
----
|
||||
RB_USER_INSTALL=true gem install jekyll
|
||||
----
|
||||
|
||||
If you encounter errors like +Failed to build gem native extension+ on Windows
|
||||
you may need to install http://wiki.github.com/oneclick/rubyinstaller/development-kit[RubyInstaller
|
||||
DevKit].
|
||||
|
||||
==== LaTeX to PNG
|
||||
|
||||
Maruku comes with optional support for LaTeX to PNG rendering via blahtex
|
||||
(Version 0.6) which must be in your $PATH along with @dvips@.
|
||||
|
||||
(NOTE: "remi's fork of Maruku":http://github.com/remi/maruku/tree/master does
|
||||
not assume a fixed location for @dvips@ if you need that fixed)
|
||||
|
||||
==== RDiscount
|
||||
|
||||
If you prefer to use
|
||||
http://github.com/rtomayko/rdiscount/tree/master[RDiscount] instead of
|
||||
http://maruku.rubyforge.org/[Maruku] for markdown, just make sure it's
|
||||
installed:
|
||||
|
||||
----
|
||||
sudo gem install rdiscount
|
||||
----
|
||||
|
||||
And run Jekyll with the following option:
|
||||
|
||||
----
|
||||
jekyll --rdiscount
|
||||
----
|
||||
|
||||
Or, in your @_config.yml@ file put the following so you don't have to specify the flag:
|
||||
|
||||
----
|
||||
markdown: rdiscount
|
||||
----
|
||||
|
||||
==== Pygments
|
||||
|
||||
If you want syntax highlighting via the @{% highlight %}@ tag in your posts,
|
||||
you'll need to install http://pygments.org/[Pygments].
|
||||
|
||||
.On OSX with Homebrew
|
||||
----
|
||||
brew install pip && pip install pygments
|
||||
----
|
||||
|
||||
.On OSX with MacPorts
|
||||
----
|
||||
sudo port install python25 py25-pygments
|
||||
----
|
||||
|
||||
.Bare OS X Leopard
|
||||
----
|
||||
sudo easy_install Pygments
|
||||
----
|
||||
|
||||
.Archlinux
|
||||
----
|
||||
sudo pacman -S python-pygments
|
||||
----
|
||||
|
||||
.Archlinux python2 for Pygments
|
||||
----
|
||||
$ sudo pacman -S python2-pygments
|
||||
----
|
||||
|
||||
NOTE: python2 pygments version creates a `pygmentize2` executable, while
|
||||
Jekyll tries to find `pygmentize`. Either create a symlink `# ln -s
|
||||
/usr/bin/pygmentize2 /usr/bin/pygmentize` or use the python3 version.
|
||||
|
||||
.Ubuntu and Debian
|
||||
----
|
||||
sudo apt-get install python-pygments
|
||||
----
|
||||
|
||||
.Gentoo
|
||||
----
|
||||
$ sudo emerge -av dev-python/pygments
|
||||
----
|
||||
|
||||
|
||||
=== Creating your First Site
|
||||
|
||||
Jekyll comes with a handy generator that will create a barebones skeleton site
|
||||
to help you get up and running in no time. Simply create an empty directory to
|
||||
contain your site, navigate to it, and run the generator command:
|
||||
|
||||
----
|
||||
$ mkdir mysite
|
||||
$ cd mysite
|
||||
$ jekyll gen
|
||||
----
|
||||
|
||||
Make sure the directory is empty or Jekyll will refuse to run. If everything
|
||||
was successful, you'll be left with a complete, valid Jekyll site that's ready
|
||||
to be converted into a static site.
|
||||
|
||||
To perform the conversion, make sure you're in the root of your Jekyll site
|
||||
directory and run:
|
||||
|
||||
----
|
||||
$ jekyll --server
|
||||
----
|
||||
|
||||
If all goes well, you should get a few lines with information about config
|
||||
file detection, source and destination paths, and a success message.
|
||||
|
||||
The `--server` command line option fires up a simple web server that will
|
||||
serve the static site we just generated so that we can easily preview what it
|
||||
will look like once we deploy it to a production environment.
|
||||
|
||||
Open up your favorite web browser and navigate to:
|
||||
|
||||
----
|
||||
http://localhost:4000
|
||||
----
|
||||
|
||||
Congratulations! You have now successfully created and converted your first
|
||||
Jekyll site!
|
||||
90
doc/book/ch02-directory-layout.asc
Normal file
90
doc/book/ch02-directory-layout.asc
Normal file
@@ -0,0 +1,90 @@
|
||||
== Chapter 2: Directory Layout
|
||||
|
||||
If you followed the Quick Start in the last chapter, you have a Jekyll site on
|
||||
your local machine. Let's take a closer look at it and see what makes it tick.
|
||||
The file layout should look something like this:
|
||||
|
||||
----
|
||||
.
|
||||
|-- _config.yml
|
||||
|-- _layouts
|
||||
| |-- default.html
|
||||
| `-- post.html
|
||||
|-- _posts
|
||||
| |-- 2007-10-29-why-every-programmer-should-play-nethack.textile
|
||||
| `-- 2009-04-26-barcamp-boston-4-roundup.textile
|
||||
|-- _site
|
||||
|-- images
|
||||
| `-- logo.png
|
||||
`-- index.html
|
||||
----
|
||||
|
||||
Notice that some of the files and directories begin with an underscore. These
|
||||
have special meaning to Jekyll. The underscore ensures that they will not
|
||||
interfere with the rest of your site's normal content. It also means that if
|
||||
any of your normal files start with an underscore, they will cause problems,
|
||||
so try to avoid this.
|
||||
|
||||
=== _config.yml
|
||||
|
||||
This file stores configuration data. A majority of these options can be
|
||||
specified from the command line executable but it's easier to throw them in
|
||||
here so you don't have to type them out every time. Detailed explanations of
|
||||
configuration directives can be found in Chapter X.
|
||||
|
||||
=== _layouts
|
||||
|
||||
Files in this directory represent templates that can be used to wrap converted
|
||||
pages. Layouts are defined on a page-by-page basis in the YAML front matter.
|
||||
The liquid tag +{{ content }}+ specifies where the content will be placed
|
||||
during the conversion process.
|
||||
|
||||
=== _posts
|
||||
|
||||
If you're using Jekyll as a blog engine, this is where you'll place your blog
|
||||
posts. A post's filename contains several pieces of data, so you must be very
|
||||
careful about how these files are named. The filename format is:
|
||||
+YEAR-MONTH-DATE-SLUG.MARKUP+. The YEAR must be four numbers and the MONTH and
|
||||
DATE must be two numbers each. The SLUG is what will appear in the URL. The
|
||||
MARKUP tells Jekyll the format of the post. The date and slug will be used
|
||||
along with any permalink options you specify (See Chapter X) to construct the
|
||||
final URL of the post.
|
||||
|
||||
=== _site
|
||||
|
||||
This is where the generated site will be placed (by default) once Jekyll is
|
||||
done transforming it. If you're using version control, you'll want to add this
|
||||
directory to the list of files to be ignored.
|
||||
|
||||
=== Normal Files with YAML Front Matter
|
||||
|
||||
All files outside of the special underscore directories and that do not
|
||||
themselves begin with an underscore will be scanned by Jekyll and subjected to
|
||||
conversion if they contain any YAML front matter.
|
||||
|
||||
=== Everything Else
|
||||
|
||||
Any files and directories that do not fall into one of the above categories
|
||||
will be copied to the static site as-is without modification. In this example,
|
||||
+images/logo.png+ will be copied to the same location in the generated site.
|
||||
|
||||
|
||||
|
||||
|
||||
h2. Running Jekyll
|
||||
|
||||
Usually this is done through the @jekyll@ executable, which is installed with
|
||||
the gem. In order to get a server up and running with your Jekyll site, run:
|
||||
|
||||
@jekyll --server@
|
||||
|
||||
and then browse to http://0.0.0.0:4000. There's plenty of [[configuration
|
||||
options|Configuration]] available to you as well.
|
||||
|
||||
On Debian or Ubuntu, you may need to add @/var/lib/gems/1.8/bin/@ to your path.
|
||||
|
||||
h2. Deployment
|
||||
|
||||
Since Jekyll simply generates a folder filled with HTML files, it can be
|
||||
served using practically any available web server out there. Please check the
|
||||
[[Deployment]] page for more information regarding specific scenarios.
|
||||
5
docs/.gitignore
vendored
5
docs/.gitignore
vendored
@@ -1,5 +0,0 @@
|
||||
_site/
|
||||
.idea/
|
||||
*.swp
|
||||
pkg/
|
||||
test/
|
||||
@@ -1 +0,0 @@
|
||||
jekyllrb.com
|
||||
@@ -1,64 +0,0 @@
|
||||
---
|
||||
version: 4.3.1
|
||||
name: Jekyll • Simple, blog-aware, static sites
|
||||
description: Transform your plain text into static websites and blogs
|
||||
url: https://jekyllrb.com
|
||||
repository: https://github.com/jekyll/jekyll
|
||||
timezone: America/Los_Angeles
|
||||
twitter:
|
||||
username: jekyllrb
|
||||
logo: "/img/logo-2x.png"
|
||||
google_analytics_id: UA-50755011-1
|
||||
google_site_verification: onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY
|
||||
cloudinary_url: https://res.cloudinary.com/jekyll/image/upload/f_auto,q_auto,w_404
|
||||
collections:
|
||||
docs:
|
||||
permalink: "/:collection/:path/"
|
||||
output: true
|
||||
posts:
|
||||
permalink: "/news/:year/:month/:day/:title/"
|
||||
output: true
|
||||
tutorials:
|
||||
permalink: "/:collection/:path/"
|
||||
output: true
|
||||
defaults:
|
||||
- scope:
|
||||
path: _docs
|
||||
type: docs
|
||||
values:
|
||||
layout: docs
|
||||
- scope:
|
||||
path: _posts
|
||||
type: posts
|
||||
values:
|
||||
layout: news_item
|
||||
- scope:
|
||||
path: _tutorials
|
||||
type: tutorials
|
||||
values:
|
||||
layout: tutorials
|
||||
- scope:
|
||||
path: ''
|
||||
values:
|
||||
image: "/img/jekyll-og.png"
|
||||
future: true
|
||||
plugins:
|
||||
- jekyll-avatar
|
||||
- jekyll-feed
|
||||
- jekyll-mentions
|
||||
- jekyll-redirect-from
|
||||
- jekyll-seo-tag
|
||||
- jekyll-sitemap
|
||||
- jemoji
|
||||
feed:
|
||||
categories:
|
||||
- release
|
||||
kramdown:
|
||||
syntax_highlighter_opts:
|
||||
default_lang: plaintext
|
||||
sass:
|
||||
style: compressed
|
||||
strict_front_matter: true
|
||||
exclude:
|
||||
- icomoon-selection.json
|
||||
- readme.md
|
||||
@@ -1,123 +0,0 @@
|
||||
- name: Regeneration
|
||||
description: Enable auto-regeneration of the site when files are modified.
|
||||
flag: "-w, --[no-]watch"
|
||||
|
||||
|
||||
- name: Configuration
|
||||
description: >-
|
||||
Specify config files instead of using <code>_config.yml</code> automatically.
|
||||
Settings in later files override settings in earlier files.
|
||||
flag: "--config FILE1[,FILE2,...]"
|
||||
|
||||
|
||||
- name: Plugins
|
||||
description: >-
|
||||
Specify plugin directories instead of using <code>_plugins/</code> automatically.
|
||||
option: "plugins_dir: [ DIR1,... ]"
|
||||
flag: "-p, --plugins DIR1[,DIR2,...]"
|
||||
|
||||
|
||||
- name: Layouts
|
||||
description: >-
|
||||
Specify layout directory instead of using <code>_layouts/</code> automatically.
|
||||
option: "layouts_dir: DIR"
|
||||
flag: --layouts DIR
|
||||
|
||||
|
||||
- name: Drafts
|
||||
description: Process and render draft posts.
|
||||
option: "show_drafts: BOOL"
|
||||
flag: -D, --drafts
|
||||
|
||||
|
||||
- name: Environment
|
||||
description: Use a specific environment value in the build.
|
||||
flag: JEKYLL_ENV=production
|
||||
|
||||
|
||||
- name: Future
|
||||
description: Publish posts or collection documents with a future date.
|
||||
option: "future: BOOL"
|
||||
flag: --future
|
||||
|
||||
|
||||
- name: Unpublished
|
||||
description: Render posts that were marked as unpublished.
|
||||
option: "unpublished: BOOL"
|
||||
flag: --unpublished
|
||||
|
||||
|
||||
- name: LSI
|
||||
description: >-
|
||||
Produce an index for related posts. Requires the
|
||||
<a href="https://jekyll.github.io/classifier-reborn/">classifier-reborn</a> plugin.
|
||||
option: "lsi: BOOL"
|
||||
flag: --lsi
|
||||
|
||||
|
||||
- name: Limit posts
|
||||
description: Limit the number of posts to parse and publish.
|
||||
option: "limit_posts: NUM"
|
||||
flag: --limit_posts NUM
|
||||
|
||||
|
||||
- name: Force polling
|
||||
description: Force watch to use polling.
|
||||
option: "force_polling: BOOL"
|
||||
flag: --force_polling
|
||||
|
||||
|
||||
- name: Verbose output
|
||||
description: Print verbose output.
|
||||
option: "verbose: BOOL"
|
||||
flag: -V, --verbose
|
||||
|
||||
|
||||
- name: Silence output
|
||||
description: Silence the normal output from Jekyll during a build.
|
||||
option: "quiet: BOOL"
|
||||
flag: -q, --quiet
|
||||
|
||||
|
||||
- name: Log level
|
||||
description: Specify a log level among debug, info, warn, or error.
|
||||
flag: JEKYLL_LOG_LEVEL=info
|
||||
|
||||
|
||||
- name: Incremental build
|
||||
description: >-
|
||||
Enable the experimental
|
||||
<a href="/docs/configuration/incremental-regeneration/">incremental
|
||||
build</a> feature. Incremental build only re-builds posts and pages that
|
||||
have changed, resulting in significant performance improvements for large
|
||||
sites, but may also break site generation in certain cases.
|
||||
option: "incremental: BOOL"
|
||||
flag: -I, --incremental
|
||||
|
||||
|
||||
- name: Disable bundle require
|
||||
description: Disables the need to require gems in `:jekyll_plugins` Gemfile
|
||||
flag: JEKYLL_NO_BUNDLER_REQUIRE=true
|
||||
|
||||
|
||||
- name: Liquid profiler
|
||||
description: Generate a Liquid rendering profile to help you identify performance bottlenecks.
|
||||
option: "profile: BOOL"
|
||||
flag: --profile
|
||||
|
||||
|
||||
- name: Strict front matter
|
||||
description: Cause a build to fail if there is a YAML syntax error in a page's front matter.
|
||||
option: "strict_front_matter: BOOL"
|
||||
flag: --strict_front_matter
|
||||
|
||||
|
||||
- name: Base URL
|
||||
description: Serve the website from the given base URL.
|
||||
option: "baseurl: URL"
|
||||
flag: -b, --baseurl URL
|
||||
|
||||
|
||||
- name: Trace
|
||||
description: Show the full backtrace when an error occurs.
|
||||
flag: -t, --trace
|
||||
@@ -1,77 +0,0 @@
|
||||
- name: Site source
|
||||
description: Change the directory where Jekyll will read files
|
||||
option: "source: DIR"
|
||||
flag: -s, --source DIR
|
||||
|
||||
|
||||
- name: Site destination
|
||||
description: Change the directory where Jekyll will write files
|
||||
option: "destination: DIR"
|
||||
flag: -d, --destination DIR
|
||||
|
||||
|
||||
- name: Safe
|
||||
description: >-
|
||||
Disable <a href="/docs/plugins/">non-whitelisted plugins</a>, caching to disk, and ignore symbolic links.
|
||||
option: "safe: BOOL"
|
||||
flag: --safe
|
||||
|
||||
|
||||
- name: Disable disk cache
|
||||
version-badge: 4.1.0
|
||||
description: >-
|
||||
Disable caching of content to disk in order to skip creating a <code>.jekyll-cache</code> or similar directory at
|
||||
the source to avoid interference with virtual environments and third-party directory watchers. Caching to disk is
|
||||
always disabled in <code>safe</code> mode.
|
||||
option: "disable_disk_cache: BOOL"
|
||||
flag: --disable-disk-cache
|
||||
|
||||
|
||||
- name: Ignore theme configuration
|
||||
version-badge: 4.1.0
|
||||
description: >-
|
||||
Jekyll 4.0 started allowing themes to bundle a <code>_config.yml</code> to simplify theme-onboarding for new users.
|
||||
In the unfortunate situation that importing a bundled theme configuration messes up the merged site-configuration,
|
||||
the user can configure Jekyll to not import the theme-config entirely.
|
||||
option: "ignore_theme_config: BOOL"
|
||||
|
||||
|
||||
- name: Exclude
|
||||
description: >-
|
||||
Exclude directories and/or files from the conversion. These exclusions are relative to the site's source directory
|
||||
and cannot be outside the source directory.
|
||||
option: "exclude: [DIR, FILE, ...]"
|
||||
|
||||
|
||||
- name: Include
|
||||
description: >-
|
||||
Force inclusion of directories and/or files in the conversion. <code>.htaccess</code> is a good example since
|
||||
dotfiles are excluded by default.
|
||||
option: "include: [DIR, FILE, ...]"
|
||||
|
||||
|
||||
- name: Keep files
|
||||
description: >-
|
||||
When clobbering the site destination, keep the selected files. Useful for files that are not generated by jekyll;
|
||||
e.g. files or assets that are generated by your build tool. The paths are relative to the <code>destination</code>.
|
||||
option: "keep_files: [DIR, FILE, ...]"
|
||||
|
||||
|
||||
- name: Time zone
|
||||
description: >-
|
||||
Set the time zone for site generation. This sets the <code>TZ</code> environment variable, which Ruby uses to handle
|
||||
time and date creation and manipulation. Any entry from the
|
||||
<a href="https://en.wikipedia.org/wiki/Tz_database">IANA Time Zone Database</a>
|
||||
is valid, e.g. <code>America/New_York</code>. A list of all available values can be found
|
||||
<a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"> here</a>.
|
||||
When serving on a local machine, the default time zone is set by your operating system. But when served on a remote
|
||||
host/server, the default time zone depends on the server's setting or location.
|
||||
option: "timezone: TIMEZONE"
|
||||
|
||||
|
||||
- name: Encoding
|
||||
description: >-
|
||||
Set the encoding of files by name (only available for Ruby 1.9 or later). The default value is <code>utf-8</code>
|
||||
starting in 2.0.0, and <code>nil</code> before 2.0.0, which will yield the Ruby default of <code>ASCII-8BIT</code>.
|
||||
Available encodings can be shown by the command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
|
||||
option: "encoding: ENCODING"
|
||||
@@ -1,71 +0,0 @@
|
||||
- name: Local server port
|
||||
description: Listen on the given port. The default is `4000`.
|
||||
option: "port: PORT"
|
||||
flag: "-P, --port PORT"
|
||||
|
||||
|
||||
- name: Local server hostname
|
||||
description: Listen at the given hostname. The default is `localhost`.
|
||||
option: "host: HOSTNAME"
|
||||
flag: "-H, --host HOSTNAME"
|
||||
|
||||
|
||||
- name: Live reload
|
||||
description: Reload a page automatically on the browser when its content is edited.
|
||||
option: "livereload: BOOL"
|
||||
flag: "-l, --livereload"
|
||||
|
||||
|
||||
- name: Live reload ignore
|
||||
description: File glob patterns for LiveReload to ignore.
|
||||
option: "livereload_ignore: [ GLOB1,... ]"
|
||||
flag: "--livereload-ignore GLOB1[,GLOB2,...]"
|
||||
|
||||
|
||||
- name: Live reload min/max delay
|
||||
description: Minimum/Maximum delay before automatically reloading page.
|
||||
options:
|
||||
- "livereload_min_delay: SECONDS"
|
||||
- "livereload_max_delay: SECONDS"
|
||||
flags:
|
||||
- "--livereload-min-delay SECONDS"
|
||||
- "--livereload-max-delay SECONDS"
|
||||
|
||||
|
||||
- name: Live reload port
|
||||
description: Port for LiveReload to listen on.
|
||||
flag: "--livereload-port PORT"
|
||||
|
||||
|
||||
- name: Open URL
|
||||
description: Open the site's URL in the browser.
|
||||
option: "open_url: BOOL"
|
||||
flag: "-o, --open-url"
|
||||
|
||||
|
||||
- name: Detach
|
||||
description: Detach the server from the terminal.
|
||||
option: "detach: BOOL"
|
||||
flag: "-B, --detach"
|
||||
|
||||
|
||||
- name: Skips the initial site build
|
||||
description: Skips the initial site build which occurs before the server is started.
|
||||
option: "skip_initial_build: BOOL"
|
||||
flag: "--skip-initial-build"
|
||||
|
||||
|
||||
- name: Show directory listing
|
||||
description: Show a directory listing instead of loading your index file.
|
||||
option: "show_dir_listing: BOOL"
|
||||
flag: "--show-dir-listing"
|
||||
|
||||
|
||||
- name: X.509 (SSL) private key
|
||||
description: "SSL Private Key, stored or symlinked in the site source."
|
||||
flag: "--ssl-key"
|
||||
|
||||
|
||||
- name: X.509 (SSL) certificate
|
||||
description: "SSL Public certificate, stored or symlinked in the site source."
|
||||
flag: "--ssl-cert"
|
||||
@@ -1,37 +0,0 @@
|
||||
- title: Getting Started
|
||||
docs:
|
||||
- link: /docs/
|
||||
- link: /docs/installation/
|
||||
- link: /docs/ruby-101/
|
||||
- link: /docs/community/
|
||||
- link: /docs/step-by-step/01-setup/
|
||||
- title: Build
|
||||
docs:
|
||||
- link: /docs/usage/
|
||||
- link: /docs/configuration/
|
||||
- link: /docs/rendering-process/
|
||||
- title: Content
|
||||
docs:
|
||||
- link: /docs/pages/
|
||||
- link: /docs/posts/
|
||||
- link: /docs/front-matter/
|
||||
- link: /docs/collections/
|
||||
- link: /docs/datafiles/
|
||||
- link: /docs/assets/
|
||||
- link: /docs/static-files/
|
||||
- title: Site Structure
|
||||
docs:
|
||||
- link: /docs/structure/
|
||||
- link: /docs/liquid/
|
||||
- link: /docs/variables/
|
||||
- link: /docs/includes/
|
||||
- link: /docs/layouts/
|
||||
- link: /docs/permalinks/
|
||||
- link: /docs/themes/
|
||||
- link: /docs/pagination/
|
||||
- title: Guides
|
||||
docs:
|
||||
- link: /docs/plugins/
|
||||
- link: /docs/migrations/
|
||||
- link: /docs/upgrading/
|
||||
- link: /docs/deployment/
|
||||
@@ -1,348 +0,0 @@
|
||||
#
|
||||
# ---------------------------------------------------------------------------------------
|
||||
# List of Liquid Filters provided by Jekyll Core that will be utilized for their
|
||||
# documentation.
|
||||
#
|
||||
# To document a new filter, create a new "list-item" below with the following keys:
|
||||
# name: : [REQUIRED] A string label that identifies the filter
|
||||
# description: : [REQUIRED] A short description of what to expect from the filter
|
||||
# version_badge: : [OPTIONAL] Jekyll version that introduced the filter
|
||||
# examples: : [REQUIRED] A 'nested list' comprised of inputs and outputs
|
||||
# input: : [REQUIRED] The filter syntax and usage
|
||||
# output: : [OPTIONAL] The output from the filter
|
||||
#
|
||||
# Tip: Use YAML Block notations to "fold" a long string, or to "break" a long string
|
||||
# to the following line. Block notations can also be used to avoid having to use
|
||||
# backslashes to escape quotes.
|
||||
# ---------------------------------------------------------------------------------------
|
||||
#
|
||||
- name: Relative URL
|
||||
description: >-
|
||||
Prepend <code>baseurl</code> config value to the input to convert a URL path into a relative URL.
|
||||
This is recommended for a site that is hosted on a subpath of a domain.
|
||||
examples:
|
||||
- input: '{{ "/assets/style.css" | relative_url }}'
|
||||
output: '/my-baseurl/assets/style.css'
|
||||
|
||||
#
|
||||
|
||||
- name: Absolute URL
|
||||
description: >-
|
||||
Prepend <code>url</code> and <code>baseurl</code> values to the input to convert a URL path to an absolute URL.
|
||||
examples:
|
||||
- input: '{{ "/assets/style.css" | absolute_url }}'
|
||||
output: 'http://example.com/my-baseurl/assets/style.css'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to XML Schema
|
||||
description: Convert a Date into XML Schema (ISO 8601) format.
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_xmlschema }}'
|
||||
output: '2008-11-07T13:07:54-08:00'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to RFC-822 Format
|
||||
description: Convert a Date into the RFC-822 format used for RSS feeds.
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_rfc822 }}'
|
||||
output: 'Mon, 07 Nov 2008 13:07:54 -0800'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to String
|
||||
description: Convert a date to short format.
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_string }}'
|
||||
output: '07 Nov 2008'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to String in ordinal US style
|
||||
description: 'Format a date to ordinal, US, short format.'
|
||||
version_badge: 3.8.0
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_string: "ordinal", "US" }}'
|
||||
output: 'Nov 7th, 2008'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to Long String
|
||||
description: Format a date to long format.
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_long_string }}'
|
||||
output: '07 November 2008'
|
||||
|
||||
#
|
||||
|
||||
- name: Date to Long String in ordinal UK style
|
||||
description: 'Format a date to ordinal, UK, long format.'
|
||||
version_badge: 3.8.0
|
||||
examples:
|
||||
- input: '{{ site.time | date_to_long_string: "ordinal" }}'
|
||||
output: '7th November 2008'
|
||||
|
||||
#
|
||||
|
||||
- name: Where
|
||||
description: Select all the objects in an array where the key has the given value.
|
||||
examples:
|
||||
- input: '{{ site.members | where:"graduation_year","2014" }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Where Expression
|
||||
description: Select all the objects in an array where the expression is true.
|
||||
version_badge: 3.2.0
|
||||
examples:
|
||||
- input: |-
|
||||
{{ site.members | where_exp:"item",
|
||||
"item.graduation_year == 2014" }}
|
||||
output:
|
||||
- input: |-
|
||||
{{ site.members | where_exp:"item",
|
||||
"item.graduation_year < 2014" }}
|
||||
output:
|
||||
- input: |-
|
||||
{{ site.members | where_exp:"item",
|
||||
"item.projects contains 'foo'" }}
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Find
|
||||
description: >-
|
||||
Return <strong>the first object</strong> in an array for which the queried
|
||||
attribute has the given value or return <code>nil</code> if no item in
|
||||
the array satisfies the given criteria.
|
||||
version_badge: 4.1.0
|
||||
examples:
|
||||
- input: '{{ site.members | find: "graduation_year", "2014" }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Find Expression
|
||||
description: >-
|
||||
Return <strong>the first object</strong> in an array for which the given
|
||||
expression evaluates to true or return <code>nil</code> if no item in
|
||||
the array satisfies the evaluated expression.
|
||||
version_badge: 4.1.0
|
||||
examples:
|
||||
- input: |-
|
||||
{{ site.members | find_exp:"item",
|
||||
"item.graduation_year == 2014" }}
|
||||
output:
|
||||
- input: |-
|
||||
{{ site.members | find_exp:"item",
|
||||
"item.graduation_year < 2014" }}
|
||||
output:
|
||||
- input: |-
|
||||
{{ site.members | find_exp:"item",
|
||||
"item.projects contains 'foo'" }}
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Group By
|
||||
description: Group an array's items by a given property.
|
||||
examples:
|
||||
- input: '{{ site.members | group_by:"graduation_year" }}'
|
||||
output: |-
|
||||
[{"name"=>"2013", "items"=>[...]},
|
||||
{"name"=>"2014", "items"=>[...]}]
|
||||
|
||||
#
|
||||
|
||||
- name: Group By Expression
|
||||
description: Group an array's items using a Liquid expression.
|
||||
version_badge: 3.4.0
|
||||
examples:
|
||||
- input: |-
|
||||
{{ site.members | group_by_exp: "item",
|
||||
"item.graduation_year | truncate: 3, ''" }}
|
||||
output: |-
|
||||
[{"name"=>"201", "items"=>[...]},
|
||||
{"name"=>"200", "items"=>[...]}]
|
||||
|
||||
#
|
||||
|
||||
- name: XML Escape
|
||||
description: Escape some text for use in XML.
|
||||
examples:
|
||||
- input: '{{ page.content | xml_escape }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: CGI Escape
|
||||
description: >-
|
||||
CGI escape a string for use in a URL. Replaces any special characters
|
||||
with appropriate <code>%XX</code> replacements. CGI escape normally
|
||||
replaces a space with a plus <code>+</code> sign.
|
||||
examples:
|
||||
- input: '{{ "foo, bar; baz?" | cgi_escape }}'
|
||||
output: 'foo%2C+bar%3B+baz%3F'
|
||||
|
||||
#
|
||||
|
||||
- name: URI Escape
|
||||
description: >-
|
||||
Percent encodes any special characters in a URI.
|
||||
URI escape normally replaces a space with <code>%20</code>.
|
||||
<a href="https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters">Reserved characters</a>
|
||||
will not be escaped.
|
||||
examples:
|
||||
- input: '{{ "http://foo.com/?q=foo, \bar?" | uri_escape }}'
|
||||
output: 'http://foo.com/?q=foo,%20%5Cbar?'
|
||||
|
||||
#
|
||||
|
||||
- name: Number of Words
|
||||
description: >-
|
||||
Count the number of words in some text.<br/>
|
||||
From <span class="version-badge">v4.1.0</span>, this filter takes an optional
|
||||
argument to control the handling of Chinese-Japanese-Korean (CJK) characters
|
||||
in the <code>input</code> string.<br/>
|
||||
Passing <code>'cjk'</code> as the argument will count every CJK character
|
||||
detected as one word irrespective of being separated by whitespace.<br/>
|
||||
Passing <code>'auto'</code> (auto-detect) works similar to <code>'cjk'</code>
|
||||
but is more performant if the filter is used on a variable string that may
|
||||
or may not contain CJK chars.
|
||||
examples:
|
||||
- input: '{{ "Hello world!" | number_of_words }}'
|
||||
output: 2
|
||||
- input: '{{ "你好hello世界world" | number_of_words }}'
|
||||
output: 1
|
||||
- input: '{{ "你好hello世界world" | number_of_words: "cjk" }}'
|
||||
output: 6
|
||||
- input: '{{ "你好hello世界world" | number_of_words: "auto" }}'
|
||||
output: 6
|
||||
|
||||
#
|
||||
|
||||
- name: Array to Sentence
|
||||
description: >-
|
||||
Convert an array into a sentence. Useful for listing tags.
|
||||
Optional argument for connector.
|
||||
examples:
|
||||
- input: '{{ page.tags | array_to_sentence_string }}'
|
||||
output: 'foo, bar, and baz'
|
||||
- input: '{{ page.tags | array_to_sentence_string: "or" }}'
|
||||
output: 'foo, bar, or baz'
|
||||
|
||||
#
|
||||
|
||||
- name: Markdownify
|
||||
description: Convert a Markdown-formatted string into HTML.
|
||||
examples:
|
||||
- input: '{{ page.excerpt | markdownify }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Smartify
|
||||
description: 'Convert "quotes" into “smart quotes.”'
|
||||
examples:
|
||||
- input: '{{ page.title | smartify }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Converting Sass/SCSS
|
||||
description: Convert a Sass- or SCSS-formatted string into CSS.
|
||||
examples:
|
||||
- input: '{{ some_sass | sassify }}'
|
||||
output:
|
||||
- input: '{{ some_scss | scssify }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Slugify
|
||||
description: Convert a string into a lowercase URL "slug". See below for options.
|
||||
examples:
|
||||
- input: '{{ "The _config.yml file" | slugify }}'
|
||||
output: 'the-config-yml-file'
|
||||
- input: '{{ "The _config.yml file" | slugify: "pretty" }}'
|
||||
output: 'the-_config.yml-file'
|
||||
- input: '{{ "The _cönfig.yml file" | slugify: "ascii" }}'
|
||||
output: 'the-c-nfig-yml-file'
|
||||
- input: '{{ "The cönfig.yml file" | slugify: "latin" }}'
|
||||
output: 'the-config-yml-file'
|
||||
|
||||
#
|
||||
|
||||
- name: Data To JSON
|
||||
description: Convert Hash or Array to JSON.
|
||||
examples:
|
||||
- input: '{{ site.data.projects | jsonify }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Normalize Whitespace
|
||||
description: Replace any occurrence of whitespace with a single space.
|
||||
examples:
|
||||
- input: '{{ "a \n b" | normalize_whitespace }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Sort
|
||||
description: >-
|
||||
Sort an array. Optional arguments for hashes
|
||||
1. property name
|
||||
2. nils order (<em>first</em> or <em>last</em>).
|
||||
examples:
|
||||
- input: '{{ page.tags | sort }}'
|
||||
output:
|
||||
- input: '{{ site.posts | sort: "author" }}'
|
||||
output:
|
||||
- input: '{{ site.pages | sort: "title", "last" }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Sample
|
||||
description: 'Pick a random value from an array. Optionally, pick multiple values.'
|
||||
examples:
|
||||
- input: '{{ site.pages | sample }}'
|
||||
output:
|
||||
- input: '{{ site.pages | sample: 2 }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: To Integer
|
||||
description: Convert a string or boolean to integer.
|
||||
examples:
|
||||
- input: '{{ some_var | to_integer }}'
|
||||
output:
|
||||
|
||||
#
|
||||
|
||||
- name: Array Filters
|
||||
description: >-
|
||||
Push, pop, shift, and unshift elements from an Array.
|
||||
These are <strong>NON-DESTRUCTIVE</strong>, i.e. they do not mutate the array,
|
||||
but rather make a copy and mutate that.
|
||||
examples:
|
||||
- input: '{{ page.tags | push: "Spokane" }}'
|
||||
output: '["Seattle", "Tacoma", "Spokane"]'
|
||||
- input: '{{ page.tags | pop }}'
|
||||
output: '["Seattle"]'
|
||||
- input: '{{ page.tags | shift }}'
|
||||
output: '["Tacoma"]'
|
||||
- input: '{{ page.tags | unshift: "Olympia" }}'
|
||||
output: '["Olympia", "Seattle", "Tacoma"]'
|
||||
|
||||
#
|
||||
|
||||
- name: Inspect
|
||||
description: Convert an object into its String representation for debugging.
|
||||
examples:
|
||||
- input: '{{ some_var | inspect }}'
|
||||
output:
|
||||
@@ -1,195 +0,0 @@
|
||||
# Variables provided by Jekyll core
|
||||
#
|
||||
# name: : name of the variable
|
||||
# description: : content returned by the variable
|
||||
|
||||
global:
|
||||
- name: site
|
||||
description: >-
|
||||
Site wide information + configuration settings from <code>_config.yml</code>.
|
||||
See below for details.
|
||||
- name: page
|
||||
description: >-
|
||||
Page specific information + the <a href="/docs/front-matter/">front matter</a>.
|
||||
Custom variables set via the front matter will be available here. See below for details.
|
||||
- name: layout
|
||||
description: >-
|
||||
Layout specific information + the <a href="/docs/front-matter/">front matter</a>.
|
||||
Custom variables set via front matter in layouts will be available here.
|
||||
- name: theme
|
||||
description: >-
|
||||
Theme-gem specific information as defined in the theme's gemspec. Useful for rendering
|
||||
information in the theme demo's "About" page, for example. See below for details.
|
||||
- name: content
|
||||
description: >-
|
||||
In layout files, the rendered content of the Post or Page being wrapped.
|
||||
Not defined in Post or Page files.
|
||||
- name: paginator
|
||||
description: >-
|
||||
When the <code>paginate</code> configuration option is set, this variable becomes available
|
||||
for use. See <a href="../pagination/">Pagination</a> for details.
|
||||
|
||||
site:
|
||||
- name: site.time
|
||||
description: >-
|
||||
The current time (when you run the <code>jekyll</code> command).
|
||||
- name: site.pages
|
||||
description: >-
|
||||
A list of all Pages.
|
||||
- name: site.posts
|
||||
description: >-
|
||||
A reverse chronological list of all Posts.
|
||||
- name: site.related_posts
|
||||
description: >-
|
||||
If the page being processed is a Post, this contains a list of up to ten related Posts.
|
||||
By default, these are the ten most recent posts. For high quality but slow to compute
|
||||
results, run the <code>jekyll</code> command with the <code>--lsi</code>
|
||||
(<a href="https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing">latent semantic indexing</a>)
|
||||
option. Also note GitHub Pages does not support the
|
||||
<code>lsi</code> option when generating sites.
|
||||
- name: site.static_files
|
||||
description: >-
|
||||
A list of all <a href="/docs/static-files/">static files</a> (i.e.
|
||||
files not processed by Jekyll's converters or the Liquid renderer).
|
||||
Each file has five properties: <code>path</code>, <code>modified_time</code>,
|
||||
<code>name</code>, <code>basename</code> and <code>extname</code>.
|
||||
- name: site.html_pages
|
||||
description: >-
|
||||
A subset of <code>site.pages</code> listing those which end in <code>.html</code>.
|
||||
- name: site.html_files
|
||||
description: >-
|
||||
A subset of <code>site.static_files</code> listing those which end in <code>.html</code>.
|
||||
- name: site.collections
|
||||
description: >-
|
||||
A list of all the collections (including posts).
|
||||
- name: site.data
|
||||
description: >-
|
||||
A list containing the data loaded from the YAML files located in the <code>_data</code>
|
||||
directory.
|
||||
- name: site.documents
|
||||
description: >-
|
||||
A list of all the documents in every collection.
|
||||
- name: site.categories.CATEGORY
|
||||
description: >-
|
||||
The list of all Posts in category <code>CATEGORY</code>.
|
||||
- name: site.tags.TAG
|
||||
description: >-
|
||||
The list of all Posts with tag <code>TAG</code>.
|
||||
- name: site.url
|
||||
description: >-
|
||||
Contains the url of your site as it is configured in the <code>_config.yml</code>.
|
||||
For example, if you have <code>url: http://mysite.com</code> in your configuration file,
|
||||
then it will be accessible in Liquid as <code>site.url</code>. For the development
|
||||
environment there is <a href="/news/2016/10/06/jekyll-3-3-is-here/#3-siteurl-is-set-by-the-development-server">an
|
||||
exception</a>, if you are running <code>jekyll serve</code> in a development environment
|
||||
<code>site.url</code> will be set to the value of <code>host</code>, <code>port</code>,
|
||||
and SSL-related options. This defaults to <code>url: http://localhost:4000</code>.
|
||||
- name: "site.[CONFIGURATION_DATA]"
|
||||
description: >-
|
||||
All the variables set via the command line and your <code>_config.yml</code> are available
|
||||
through the <code>site</code> variable. For example, if you have <code>foo: bar</code> in
|
||||
your configuration file, then it will be accessible in Liquid as <code>site.foo</code>.
|
||||
Jekyll does not parse changes to <code>_config.yml</code> in
|
||||
<code>watch</code> mode, you must restart Jekyll to see changes to variables.
|
||||
|
||||
page:
|
||||
- name: page.content
|
||||
description: >-
|
||||
The content of the Page, rendered or un-rendered depending upon
|
||||
what Liquid is being processed and what <code>page</code> is.
|
||||
- name: page.title
|
||||
description: >-
|
||||
The title of the Page.
|
||||
- name: page.excerpt
|
||||
description: >-
|
||||
The un-rendered excerpt of a document.
|
||||
- name: page.url
|
||||
description: >-
|
||||
The URL of the Post without the domain, but with a leading slash, e.g.
|
||||
<code>/2008/12/14/my-post.html</code>
|
||||
- name: page.date
|
||||
description: >-
|
||||
The Date assigned to the Post. This can be overridden in a Post’s front matter by specifying
|
||||
a new date/time in the format <code>YYYY-MM-DD HH:MM:SS</code> (assuming UTC), or
|
||||
<code>YYYY-MM-DD HH:MM:SS +/-TTTT</code> (to specify a time zone using an offset from UTC.
|
||||
e.g. <code>2008-12-14 10:30:00 +0900</code>).
|
||||
- name: page.id
|
||||
description: >-
|
||||
An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g.
|
||||
<code>/2008/12/14/my-post</code><code>/my-collection/my-document</code>
|
||||
- name: page.categories
|
||||
description: >-
|
||||
The list of categories to which this post belongs. Categories are derived from the directory
|
||||
structure above the <code>_posts</code> directory. For example, a post at
|
||||
<code>/work/code/_posts/2008-12-24-closures.md</code> would have this field set to
|
||||
<code>['work', 'code']</code>. These can also be specified in the
|
||||
<a href="/docs/front-matter/">front matter</a>.
|
||||
- name: page.collection
|
||||
description: >-
|
||||
The label of the collection to which this document belongs. e.g. <code>posts</code> for a post, or
|
||||
<code>puppies</code> for a document at path <code>_puppies/rover.md</code>. If not part of a
|
||||
collection, an empty string is returned.
|
||||
- name: page.tags
|
||||
description: >-
|
||||
The list of tags to which this post belongs. These can be specified in the
|
||||
<a href="/docs/front-matter/">front matter</a>.
|
||||
- name: page.dir
|
||||
description: >-
|
||||
The path between the source directory and the file of the post or page, e.g.
|
||||
<code>/pages/</code>.
|
||||
This can be overridden by <code>permalink</code> in the <a href="/docs/front-matter/">front matter</a>.
|
||||
- name: page.name
|
||||
description: >-
|
||||
The filename of the post or page, e.g. <code>about.md</code>
|
||||
- name: page.path
|
||||
description: >-
|
||||
The path to the raw post or page. Example usage: Linking back to the page or post’s source
|
||||
on GitHub. This can be overridden in the <a href="/docs/front-matter/">front matter</a>.
|
||||
- name: page.next
|
||||
description: >-
|
||||
The next post relative to the position of the current post in <code>site.posts</code>.
|
||||
Returns <code>nil</code> for the last entry.
|
||||
- name: page.previous
|
||||
description: >-
|
||||
The previous post relative to the position of the current post in <code>site.posts</code>.
|
||||
Returns <code>nil</code> for the first entry.
|
||||
|
||||
theme:
|
||||
- name: theme.root
|
||||
description: >-
|
||||
Absolute path to the theme-gem. Rendered only when environment variable <code>JEKYLL_ENV</code>
|
||||
is set to <code>development</code>.
|
||||
- name: theme.authors
|
||||
description: Comma separated string composed of the authors of the theme-gem.
|
||||
- name: theme.description
|
||||
description: Description or summary of the theme-gem as specified in the theme gemspec.
|
||||
- name: theme.version
|
||||
description: The version string of current theme.
|
||||
- name: theme.dependencies
|
||||
description: List of runtime dependencies of the theme.
|
||||
- name: theme.metadata
|
||||
description: A mapping of key-value pairs as defined in the theme gemspec.
|
||||
|
||||
paginator:
|
||||
- name: paginator.page
|
||||
description: The number of the current page
|
||||
- name: paginator.per_page
|
||||
description: Number of posts per page
|
||||
- name: paginator.posts
|
||||
description: Posts available for the current page
|
||||
- name: paginator.total_posts
|
||||
description: Total number of posts
|
||||
- name: paginator.total_pages
|
||||
description: Total number of pages
|
||||
- name: paginator.previous_page
|
||||
description: >-
|
||||
The number of the previous page, or <code>nil</code> if no previous page exists
|
||||
- name: paginator.previous_page_path
|
||||
description: >-
|
||||
The path to the previous page, or <code>nil</code> if no previous page exists
|
||||
- name: paginator.next_page
|
||||
description: >-
|
||||
The number of the next page, or <code>nil</code> if no subsequent page exists
|
||||
- name: paginator.next_page_path
|
||||
description: >-
|
||||
The path to the next page, or <code>nil</code> if no subsequent page exists
|
||||
@@ -1,209 +0,0 @@
|
||||
- speaker: Ben Balter
|
||||
twitter_handle: BenBalter
|
||||
youtube_id: Z-37y1qaoxc
|
||||
topic: GitHub Pages behind the scenes
|
||||
year: 2015
|
||||
|
||||
- speaker: Brandon Mathis
|
||||
twitter_handle: imathis
|
||||
youtube_id: KS6e4XxY2H4
|
||||
topic: What the heck is Octopress and why should I care?
|
||||
year: 2015
|
||||
|
||||
- speaker: Brian Rinaldi
|
||||
twitter_handle: remotesynth
|
||||
youtube_id: vT7DhK5zbv0
|
||||
topic: Comparing Jekyll with the Competition
|
||||
year: 2015
|
||||
|
||||
- speaker: Kyle Rush
|
||||
twitter_handle: kylerush
|
||||
youtube_id: ia8vsuiXiL0
|
||||
topic: Meet the Obama Campaign's $250 Million Fundraising Platform
|
||||
year: 2015
|
||||
|
||||
- speaker: Michael Jovel
|
||||
twitter_handle: mjovel
|
||||
youtube_id: 8zSHG6XU_xY
|
||||
topic: Building Living Style Guides with Jekyll
|
||||
year: 2015
|
||||
|
||||
- speaker: Mike Neumegen
|
||||
twitter_handle: mikeneumegen
|
||||
youtube_id: NuChR_YdjrI
|
||||
topic: A CMS for Jekyll
|
||||
year: 2015
|
||||
|
||||
- speaker: Parker Moore
|
||||
twitter_handle: parkr
|
||||
youtube_id: y2SbOIQ5nSA
|
||||
topic: Jekyll 3 and Beyond
|
||||
year: 2015
|
||||
|
||||
- speaker: Tom Preston-Werner
|
||||
twitter_handle: mojombo
|
||||
youtube_id: BMve1OCKj6M
|
||||
topic: Some crazy ideas I have for the future of static sites
|
||||
year: 2015
|
||||
|
||||
- speaker: Allison Zadrozny
|
||||
twitter_handle: allizad
|
||||
youtube_id: Rsc0Mmp1qc8
|
||||
topic: Elasticsearch for Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: Amy Johnston
|
||||
twitter_handle: AmyJohnstonXL
|
||||
youtube_id: HR12JiUI2Zc
|
||||
topic: Jekyll for Technical Documentation
|
||||
year: 2016
|
||||
|
||||
- speaker: Bud Parr
|
||||
twitter_handle: budparr
|
||||
youtube_id: A1nTuNjoNbg
|
||||
topic: Real World Content Strategy with Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: George Phillips
|
||||
twitter_handle: gphillips_nz
|
||||
youtube_id: skb_XWABEDc
|
||||
topic: Building client-editable Jekyll sites
|
||||
year: 2016
|
||||
|
||||
- speaker: Ire Aderinokun
|
||||
twitter_handle: ireaderinokun
|
||||
youtube_id: PRKV5IGKF2c
|
||||
topic: Using Jekyll for Rapid CSS Testing
|
||||
year: 2016
|
||||
|
||||
- speaker: Jon Chan
|
||||
twitter_handle: JonHMChan
|
||||
youtube_id: vDeKPs6xpOM
|
||||
topic: Stack Overflow on Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: Julio Faerman
|
||||
twitter_handle: juliodevrel
|
||||
youtube_id: SOMonG8Iqak
|
||||
topic: Jekyll on AWS
|
||||
year: 2016
|
||||
|
||||
- speaker: Katy DeCorah
|
||||
twitter_handle: katydecorah
|
||||
youtube_id: s84wFRD8vfE
|
||||
topic: Unconventional use cases for Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: David Darnes
|
||||
twitter_handle: DavidDarnes
|
||||
youtube_id: Y4qwpN40Dvg
|
||||
topic: Doing a lot with a little
|
||||
year: 2016
|
||||
|
||||
- speaker: Ronan Berder
|
||||
twitter_handle: hunvreus
|
||||
youtube_id: TteAQq25_Ns
|
||||
topic: Designing fast websites with Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: David Von Lehman
|
||||
twitter_handle: davidvlsea
|
||||
youtube_id: wMlPlKCZfEk
|
||||
topic: Continuous deployment of Jekyll sites powered by Docker
|
||||
year: 2016
|
||||
|
||||
- speaker: David Jones
|
||||
twitter_handle: d_jones
|
||||
youtube_id: 4XxYQ7efk0E
|
||||
topic: Building our agency site with Jekyll
|
||||
year: 2016
|
||||
|
||||
- speaker: Scott Hewitt
|
||||
twitter_handle: scotthewitt
|
||||
youtube_id: qSd3pXQaPsE
|
||||
topic: Jekyll For Every Case
|
||||
year: 2016
|
||||
|
||||
- speaker: Tim Carry
|
||||
twitter_handle: pixelastic
|
||||
youtube_id: ivMML1J4ABY
|
||||
topic: Algolia search on Jekyll sites
|
||||
year: 2016
|
||||
|
||||
- speaker: Nils Borchers
|
||||
twitter_handle: nilsbo
|
||||
youtube_id: DtNMjuv6Rbo
|
||||
topic: Building a living brand guide with Jekyll and Hologram
|
||||
year: 2016
|
||||
|
||||
- speaker: Mike Neumegen
|
||||
twitter_handle: mikeneumegen
|
||||
youtube_id: rJ5EhVmTR7I
|
||||
topic: Learning resources for the Jekyll community
|
||||
year: 2016
|
||||
|
||||
- speaker: Oliver Pattison
|
||||
twitter_handle: olivermakes
|
||||
youtube_id: BIf6oNpGl74
|
||||
topic: Responsive srcset images with imgix
|
||||
year: 2016
|
||||
|
||||
- speaker: Michael Lee
|
||||
twitter_handle: michaelsoolee
|
||||
youtube_id: F4bJRLEvXIc
|
||||
topic: Jekyll, Your Website's Baseplate
|
||||
year: 2016
|
||||
|
||||
- speaker: Paul Webb
|
||||
twitter_handle: NetOpWibby
|
||||
youtube_id: BRB5DgAE5nM
|
||||
topic: Deploy Jekyll Like A Boss
|
||||
year: 2016
|
||||
|
||||
- speaker: Tom Johnson
|
||||
twitter_handle: tomjohnson
|
||||
youtube_id: nq1AUB72GCQ
|
||||
topic: Overcoming challenges in using Jekyll for documentation projects
|
||||
year: 2016
|
||||
|
||||
- speaker: Pieter Roozen
|
||||
twitter_handle: Pieter_Roozen
|
||||
youtube_id: moQP0SqEPsw
|
||||
topic: Jekyll As An API Endpoint
|
||||
year: 2019
|
||||
|
||||
- speaker: Chen Hui Jing
|
||||
twitter_handle: hj_chen
|
||||
youtube_id: CERXESTZ5w4
|
||||
topic: Why I love Jekyll Data Files
|
||||
year: 2019
|
||||
|
||||
- speaker: Chris Ferdinandi
|
||||
twitter_handle: ChrisFerdinandi
|
||||
youtube_id: vR1aI_kQ4-A
|
||||
topic: The Lean Web
|
||||
year: 2019
|
||||
|
||||
- speaker: Catherine Roebuck
|
||||
twitter_handle:
|
||||
youtube_id: zTAP1m1BaDM
|
||||
topic: Jekyll For City Government
|
||||
year: 2019
|
||||
|
||||
- speaker: Joost van der Schee
|
||||
twitter_handle: jhvanderschee
|
||||
youtube_id: ztJJ1GSlYgI
|
||||
topic: "Jekyll Codex - Jekyll for front-end developers"
|
||||
year: 2019
|
||||
|
||||
- speaker: Matthew Loberg
|
||||
twitter_handle: mloberg
|
||||
youtube_id: 6eiAjAtSGqw
|
||||
topic: Leverage AWS S3 And CloudFront To Deploy Blazing Fast Jekyll Sites
|
||||
year: 2019
|
||||
|
||||
- speaker: George Phillips
|
||||
twitter_handle: gphillips_nz
|
||||
youtube_id: nEvdOwFJBVc
|
||||
topic: Structuring Jekyll Sites For Enterprise Design Systems
|
||||
year: 2019
|
||||
@@ -1,15 +0,0 @@
|
||||
- title: Home
|
||||
link: /
|
||||
show_on_mobile: true
|
||||
- title: Docs
|
||||
link: /docs/
|
||||
show_on_mobile: true
|
||||
- title: Resources
|
||||
link: /resources/
|
||||
show_on_mobile: true
|
||||
- title: Showcase
|
||||
link: /showcase/
|
||||
show_on_mobile: false
|
||||
- title: News
|
||||
link: /news/
|
||||
show_on_mobile: true
|
||||
@@ -1,3 +0,0 @@
|
||||
min_version: 2.5.0
|
||||
current_version: 3.1.2
|
||||
current_version_output: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a)
|
||||
@@ -1,315 +0,0 @@
|
||||
- name: Tom Preston Werner Blog
|
||||
url: https://tom.preston-werner.com/
|
||||
image: tom-preston-werner.png
|
||||
categories:
|
||||
- personal
|
||||
- blog
|
||||
|
||||
# - name: White House Social and Behavioral Sciences Team
|
||||
# url: https://sbst.gov/
|
||||
# image: sbst.png
|
||||
# categories:
|
||||
# - government
|
||||
|
||||
- name: SiteLeaf
|
||||
url: https://siteleaf.com
|
||||
image: siteleaf.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: CloudCannon
|
||||
url: https://cloudcannon.com/
|
||||
image: cloudcannon.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Vesterheim Norwegian-American Museum
|
||||
url: https://vesterheim.org/
|
||||
image: vesterheim.png
|
||||
categories:
|
||||
- marketing-site
|
||||
|
||||
- name: KOTN
|
||||
url: https://kotn.com/
|
||||
image: kotn.png
|
||||
categories:
|
||||
- marketing-site
|
||||
|
||||
- name: MvvmCross
|
||||
url: https://www.mvvmcross.com/
|
||||
image: mvvm.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Vidgrid
|
||||
url: https://www.vidgrid.com/
|
||||
image: vidgrid.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Bitcoin
|
||||
url: https://bitcoin.org/en/
|
||||
image: bitcoin.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Mapwize
|
||||
url: https://www.mapwize.io/
|
||||
image: mapwize.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Auth0 Blog
|
||||
url: https://auth0.com/blog/
|
||||
image: auth0-blog.png
|
||||
categories:
|
||||
- software
|
||||
- blog
|
||||
|
||||
- name: Freedom of Information Act
|
||||
url: https://www.foia.gov/
|
||||
image: foia-gov.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: "Art & About Sydney"
|
||||
url: https://www.artandabout.com.au/
|
||||
image: art-sydney.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: Passbolt Help
|
||||
url: https://help.passbolt.com/
|
||||
image: passbolt-help.png
|
||||
categories:
|
||||
- knowledgebase
|
||||
|
||||
- name: We are COLLINS
|
||||
url: https://www.wearecollins.com/
|
||||
image: collins.png
|
||||
categories:
|
||||
- agency
|
||||
|
||||
- name: Lightburn
|
||||
url: https://lightburn.co/
|
||||
image: lightburn.png
|
||||
categories:
|
||||
- agency
|
||||
|
||||
- name: italia.it
|
||||
url: https://developers.italia.it/
|
||||
image: italia-it.png
|
||||
categories:
|
||||
- community
|
||||
|
||||
- name: Sydney New Years Eve
|
||||
url: https://www.sydneynewyearseve.com/
|
||||
image: nsw.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: Login.gov
|
||||
url: https://login.gov/
|
||||
image: login-gov.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: plainlanguage.gov
|
||||
url: https://plainlanguage.gov/
|
||||
image: plainlanguage-gov.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: U.S. Web Design Standards
|
||||
url: https://standards.usa.gov/
|
||||
image: uswds.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: Grantmaker Search
|
||||
url: https://www.grantmakers.io/
|
||||
image: grantmakers.png
|
||||
categories:
|
||||
- marketing-site
|
||||
|
||||
- name: Rehan Butt
|
||||
url: https://rehanbutt.com/
|
||||
image: rehn.png
|
||||
categories:
|
||||
- personal
|
||||
- portfolio
|
||||
|
||||
- name: The Markdown Guide
|
||||
url: https://www.markdownguide.org/
|
||||
image: markdown-guide.png
|
||||
categories:
|
||||
- knowledgebase
|
||||
|
||||
- name: Probot
|
||||
url: https://probot.github.io/
|
||||
image: probot.png
|
||||
categories:
|
||||
- documentation
|
||||
|
||||
- name: Matt Grey
|
||||
url: https://himatt.com/
|
||||
image: matt-grey.png
|
||||
categories:
|
||||
- personal
|
||||
- portfolio
|
||||
|
||||
- name: Lattice
|
||||
url: https://latticehq.com/
|
||||
image: lattice.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: MailTape
|
||||
url: https://www.mailta.pe/
|
||||
image: mailtape.png
|
||||
categories:
|
||||
- other
|
||||
|
||||
- name: Digital Democracy
|
||||
url: https://www.digital-democracy.org/
|
||||
image: digital-democracy.png
|
||||
categories:
|
||||
- other
|
||||
|
||||
- name: HTML Reference
|
||||
url: https://htmlreference.io/
|
||||
image: htmlreference.png
|
||||
categories:
|
||||
- documentation
|
||||
|
||||
- name: CSS Reference
|
||||
url: https://cssreference.io/
|
||||
image: cssreference.png
|
||||
categories:
|
||||
- documentation
|
||||
|
||||
- name: Chain
|
||||
url: https://chain.com/
|
||||
image: chain.png
|
||||
categories:
|
||||
- marketing-site
|
||||
|
||||
- name: IBM MobileFirst Foundation
|
||||
url: https://mobilefirstplatform.ibmcloud.com/
|
||||
image: ibm-mobile-foundation.png
|
||||
categories:
|
||||
- documentation
|
||||
|
||||
- name: "18F"
|
||||
url: https://18f.gsa.gov/
|
||||
image: 18f.png
|
||||
categories:
|
||||
- agency
|
||||
- government
|
||||
|
||||
- name: Development Seed
|
||||
url: https://developmentseed.org/
|
||||
image: development-seed.png
|
||||
categories:
|
||||
- agency
|
||||
|
||||
- name: Isomer - Singapore Government Static Websites
|
||||
url: https://isomer.gov.sg/
|
||||
image: isomer.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: French Government Digital Services
|
||||
url: https://beta.gouv.fr/
|
||||
image: beta-gouv-fr.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: Paris Call for Trust and Security in Cyberspace
|
||||
url: https://pariscall.international/
|
||||
image: appel-de-paris.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: GitHub On Demand Training
|
||||
url: https://services.github.com/on-demand/
|
||||
image: github-learning-lab.png
|
||||
categories:
|
||||
- software
|
||||
- knowledgebase
|
||||
|
||||
- name: TwitchCon
|
||||
url: https://www.twitchcon.com/
|
||||
image: twitchcon.png
|
||||
categories:
|
||||
- marketing-site
|
||||
- conference
|
||||
|
||||
- name: UN World Statistics
|
||||
url: https://worldstatisticsday.org
|
||||
image: world-statistics-day.png
|
||||
categories:
|
||||
- government
|
||||
|
||||
- name: Netflix Devices
|
||||
url: https://devices.netflix.com/en/
|
||||
image: netflix.png
|
||||
categories:
|
||||
- marketing-site
|
||||
|
||||
- name: Twitch Developer Documentation
|
||||
url: https://dev.twitch.tv/
|
||||
image: twitch-developers.png
|
||||
categories:
|
||||
- marketing-site
|
||||
- documentation
|
||||
|
||||
- name: Yeoman
|
||||
url: https://yeoman.io/
|
||||
image: yeoman.png
|
||||
categories:
|
||||
- open-source
|
||||
- marketing-site
|
||||
|
||||
- name: Release Management Blog
|
||||
url: https://release.mozilla.org/
|
||||
image: mozilla-release-blog.png
|
||||
categories:
|
||||
- software
|
||||
- blog
|
||||
|
||||
- name: frame.ai
|
||||
url: https://frame.ai/
|
||||
image: frame-ai.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Spotify for Developers
|
||||
url: https://developer.spotify.com
|
||||
image: spotify-developers.png
|
||||
categories:
|
||||
- marketing-site
|
||||
- documentation
|
||||
- software
|
||||
|
||||
- name: Sketch
|
||||
url: https://sketch.com/
|
||||
image: sketch.png
|
||||
categories:
|
||||
- software
|
||||
- marketing-site
|
||||
|
||||
- name: Ruby on Rails
|
||||
url: https://rubyonrails.org/
|
||||
image: ruby-on-rails.png
|
||||
categories:
|
||||
- marketing-site
|
||||
- documentation
|
||||
@@ -1,14 +0,0 @@
|
||||
- title: Tutorials
|
||||
tutorials:
|
||||
- home
|
||||
- video-walkthroughs
|
||||
- navigation
|
||||
- orderofinterpretation
|
||||
- custom-404-page
|
||||
- convert-site-to-jekyll
|
||||
- using-jekyll-with-bundler
|
||||
- csv-to-table
|
||||
|
||||
#- title: Another section
|
||||
# tutorials:
|
||||
# - sample
|
||||
@@ -1,94 +0,0 @@
|
||||
---
|
||||
title: Assets
|
||||
permalink: /docs/assets/
|
||||
---
|
||||
|
||||
Jekyll provides built-in support for [Sass](https://sass-lang.com/)
|
||||
and can work with [CoffeeScript](https://coffeescript.org/) via a Ruby gem.
|
||||
In order to use them, you must first create a file with the proper extension
|
||||
name (one of `.sass`, `.scss`, or `.coffee`) and
|
||||
***start the file with two lines of triple dashes***, like this:
|
||||
|
||||
```sass
|
||||
---
|
||||
---
|
||||
|
||||
// start content
|
||||
.my-definition
|
||||
font-size: 1.2em
|
||||
```
|
||||
|
||||
Jekyll treats these files the same as a regular page, in that the output file
|
||||
will be placed in the same directory that it came from. For instance, if you
|
||||
have a file named `css/styles.scss` in your site's source folder, Jekyll
|
||||
will process it and put it in your site's destination folder under
|
||||
`css/styles.css`.
|
||||
|
||||
<div class="note info">
|
||||
<h5>Jekyll processes all Liquid filters and tags in asset files</h5>
|
||||
<p>If you are using <a href="https://mustache.github.io">Mustache</a>
|
||||
or another JavaScript templating language that conflicts with
|
||||
the <a href="{{ '/docs/templates/' | relative_url }}">Liquid template syntax</a>, you
|
||||
will need to place <code>{% raw %}</code> and
|
||||
<code>{% endraw %}</code> tags around your code.</p>
|
||||
</div>
|
||||
|
||||
## Sass/SCSS
|
||||
|
||||
Jekyll allows you to customize your Sass conversion in certain ways.
|
||||
|
||||
Place all your partials in your `sass_dir`, which defaults to
|
||||
`<source>/_sass`. Place your main SCSS or Sass files in the place you want
|
||||
them to be in the output file, such as `<source>/css`. For an example, take
|
||||
a look at [this example site using Sass support in Jekyll][example-sass].
|
||||
|
||||
If you are using Sass `@import` statements, you'll need to ensure that your
|
||||
`sass_dir` is set to the base directory that contains your Sass files:
|
||||
|
||||
```yaml
|
||||
sass:
|
||||
sass_dir: _sass
|
||||
```
|
||||
|
||||
The Sass converter will default the `sass_dir` configuration option to
|
||||
`_sass`.
|
||||
|
||||
[example-sass]: https://github.com/jekyll/jekyll-sass-converter/tree/master/docs
|
||||
|
||||
<div class="note info">
|
||||
<h5>The <code>sass_dir</code> is only used by Sass</h5>
|
||||
<p>
|
||||
|
||||
Note that the <code>sass_dir</code> becomes the load path for Sass imports,
|
||||
nothing more. This means that Jekyll does not know about these files
|
||||
directly. Any files here should not contain the empty front matter as
|
||||
described above. If they do, they'll not be transformed as described above. This
|
||||
folder should only contain imports.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
You may also specify the output style with the `style` option in your
|
||||
`_config.yml` file:
|
||||
|
||||
```yaml
|
||||
sass:
|
||||
style: compressed
|
||||
```
|
||||
|
||||
These are passed to Sass, so any output style options Sass supports are valid
|
||||
here, too.
|
||||
|
||||
For more information on Sass configuration options, see the [Sass configuration]({{ '/docs/configuration/sass/' | relative_url }}) docs.
|
||||
|
||||
## Coffeescript
|
||||
|
||||
To enable Coffeescript in Jekyll 3.0 and up you must
|
||||
|
||||
* Install the `jekyll-coffeescript` gem
|
||||
* Ensure that your `_config.yml` is up-to-date and includes the following:
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
- jekyll-coffeescript
|
||||
```
|
||||
@@ -1,82 +0,0 @@
|
||||
---
|
||||
title: Code of Conduct
|
||||
permalink: "/docs/code_of_conduct/"
|
||||
note: This file is autogenerated. Edit /.github/CODE_OF_CONDUCT.markdown instead.
|
||||
redirect_from: "/conduct/index.html"
|
||||
editable: false
|
||||
---
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
|
||||
@@ -1,382 +0,0 @@
|
||||
---
|
||||
title: Collections
|
||||
permalink: /docs/collections/
|
||||
---
|
||||
|
||||
Collections are a great way to group related content like members of a team or
|
||||
talks at a conference.
|
||||
|
||||
## Setup
|
||||
|
||||
To use a Collection you first need to define it in your `_config.yml`. For
|
||||
example here's a collection of staff members:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
- staff_members
|
||||
```
|
||||
|
||||
In this case `collections` is defined as a sequence (i.e., array) with no additional metadata defined for each collection.
|
||||
You can optionally specify metadata for your collection by defining `collections` as a mapping (i.e., hashmap) instead of sequence, and then defining additional fields in it:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
staff_members:
|
||||
people: true
|
||||
```
|
||||
|
||||
{: .note .info}
|
||||
When defining a collection as a sequence, its pages will not be rendered by
|
||||
default. To enable this, <code>output: true</code> must be specified on the
|
||||
collection, which requires defining the collection as a mapping. For more
|
||||
information, see the section <a href="#output">Output</a>.
|
||||
|
||||
<div class="note">
|
||||
<h5>Gather your collections {%- include docs_version_badge.html version="3.7.0" -%}</h5>
|
||||
|
||||
<p>You can optionally specify a directory to store all your collections in the same place with <code>collections_dir: my_collections</code>.</p>
|
||||
|
||||
<p>Then Jekyll will look in <code>my_collections/_books</code> for the <code>books</code> collection, and
|
||||
in <code>my_collections/_recipes</code> for the <code>recipes</code> collection.</p>
|
||||
</div>
|
||||
|
||||
<div class="note warning">
|
||||
<h5>Be sure to move drafts and posts into custom collections directory</h5>
|
||||
|
||||
<p>If you specify a directory to store all your collections in the same place with <code>collections_dir: my_collections</code>, then you will need to move your <code>_drafts</code> and <code>_posts</code> directory to <code>my_collections/_drafts</code> and <code>my_collections/_posts</code>. Note that, the name of your collections directory cannot start with an underscore (`_`).</p>
|
||||
</div>
|
||||
|
||||
## Add content
|
||||
|
||||
Create a corresponding folder (e.g. `<source>/_staff_members`) and add
|
||||
documents. Front matter is processed if the front matter exists, and everything
|
||||
after the front matter is pushed into the document's `content` attribute. If no front
|
||||
matter is provided, Jekyll will consider it to be a [static file]({{ '/docs/static-files/' | relative_url }})
|
||||
and the contents will not undergo further processing. If front matter is provided,
|
||||
Jekyll will process the file contents into the expected output.
|
||||
|
||||
Regardless of whether front matter exists or not, Jekyll will write to the destination
|
||||
directory (e.g. `_site`) only if `output: true` has been set in the collection's
|
||||
metadata.
|
||||
|
||||
For example here's how you would add a staff member to the collection set above.
|
||||
The filename is `./_staff_members/jane.md` with the following content:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: Jane Doe
|
||||
position: Developer
|
||||
---
|
||||
Jane has worked on Jekyll for the past *five years*.
|
||||
```
|
||||
|
||||
<em>
|
||||
Do note that in spite of being considered as a collection internally, the above
|
||||
doesn't apply to [posts](/docs/posts/). Posts with a valid filename format will be
|
||||
marked for processing even if they do not contain front matter.
|
||||
</em>
|
||||
|
||||
<div class="note info">
|
||||
<h5>Be sure to name your directories correctly</h5>
|
||||
<p>
|
||||
The folder must be named identically to the collection you defined in
|
||||
your <code>_config.yml</code> file, with the addition of the preceding <code>_</code> character.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
## Output
|
||||
|
||||
Now you can iterate over `site.staff_members` on a page and output the content
|
||||
for each staff member. Similar to posts, the body of the document is accessed
|
||||
using the `content` variable:
|
||||
|
||||
{% raw %}
|
||||
```liquid
|
||||
{% for staff_member in site.staff_members %}
|
||||
<h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
|
||||
<p>{{ staff_member.content | markdownify }}</p>
|
||||
{% endfor %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
If you'd like Jekyll to create a rendered page for each document in your
|
||||
collection, you can set the `output` key to `true` in your collection
|
||||
metadata in `_config.yml`:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
staff_members:
|
||||
output: true
|
||||
```
|
||||
|
||||
You can link to the generated page using the `url` attribute:
|
||||
|
||||
{% raw %}
|
||||
```liquid
|
||||
{% for staff_member in site.staff_members %}
|
||||
<h2>
|
||||
<a href="{{ staff_member.url }}">
|
||||
{{ staff_member.name }} - {{ staff_member.position }}
|
||||
</a>
|
||||
</h2>
|
||||
<p>{{ staff_member.content | markdownify }}</p>
|
||||
{% endfor %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
## Permalinks
|
||||
|
||||
There are special [permalink variables for collections]({{ '/docs/permalinks/#collections' | relative_url }}) to
|
||||
help you control the output url for the entire collection.
|
||||
|
||||
## Custom Sorting of Documents {%- include docs_version_badge.html version="4.0" -%}
|
||||
{: #custom-sorting-of-documents}
|
||||
|
||||
By default, two documents in a collection are sorted by their `date` attribute when both of them have the `date` key in their front matter. However, if either or both documents do not have the `date` key in their front matter, they are sorted by their respective paths.
|
||||
|
||||
You can control this sorting via the collection's metadata.
|
||||
|
||||
### Sort By Front Matter Key
|
||||
|
||||
Documents can be sorted based on a front matter key by setting a `sort_by` metadata to the front matter key string. For example,
|
||||
to sort a collection of tutorials based on key `lesson`, the configuration would be:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
tutorials:
|
||||
sort_by: lesson
|
||||
```
|
||||
|
||||
The documents are arranged in the increasing order of the key's value. If a document does not have the front matter key defined
|
||||
then that document is placed immediately after sorted documents. When multiple documents do not have the front matter key defined,
|
||||
those documents are sorted by their dates or paths and then placed immediately after the sorted documents.
|
||||
|
||||
### Manually Ordering Documents
|
||||
|
||||
You can also manually order the documents by setting an `order` metadata with **the filenames listed** in the desired order.
|
||||
For example, a collection of tutorials would be configured as:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
tutorials:
|
||||
order:
|
||||
- hello-world.md
|
||||
- introduction.md
|
||||
- basic-concepts.md
|
||||
- advanced-concepts.md
|
||||
```
|
||||
|
||||
Any documents with filenames that do not match the list entry simply gets placed after the rearranged documents. If a document is
|
||||
nested under subdirectories, include them in entries as well:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
tutorials:
|
||||
order:
|
||||
- hello-world.md
|
||||
- introduction.md
|
||||
- concepts/basics.md
|
||||
- concepts/advanced.md
|
||||
```
|
||||
|
||||
If both metadata keys have been defined properly, `order` list takes precedence.
|
||||
|
||||
## Liquid Attributes
|
||||
|
||||
### Collections
|
||||
|
||||
Collections are also available under `site.collections`, with the metadata
|
||||
you specified in your `_config.yml` (if present) and the following information:
|
||||
|
||||
<div class="mobile-side-scroller">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Variable</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>label</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The name of your collection, e.g. <code>my_collection</code>.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>docs</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
An array of <a href="#documents">documents</a>.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>files</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
An array of static files in the collection.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>relative_directory</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The path to the collection's source directory, relative to the site
|
||||
source.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>directory</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The full path to the collections's source directory.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>output</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
Whether the collection's documents will be output as individual
|
||||
files.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="note info">
|
||||
<h5>A Hard-Coded Collection</h5>
|
||||
<p>In addition to any collections you create yourself, the
|
||||
<code>posts</code> collection is hard-coded into Jekyll. It exists whether
|
||||
you have a <code>_posts</code> directory or not. This is something to note
|
||||
when iterating through <code>site.collections</code> as you may need to
|
||||
filter it out.</p>
|
||||
<p>You may wish to use filters to find your collection:
|
||||
<code>{% raw %}{{ site.collections | where: "label", "myCollection" | first }}{% endraw %}</code></p>
|
||||
</div>
|
||||
|
||||
<div class="note info">
|
||||
<h5>Collections and Time</h5>
|
||||
<p>Except for documents in hard-coded default collection <code>posts</code>, all documents in collections
|
||||
you create, are accessible via Liquid irrespective of their assigned date, if any, and therefore renderable.
|
||||
</p>
|
||||
<p>Documents are attempted to be written to disk only if the concerned collection
|
||||
metadata has <code>output: true</code>. Additionally, future-dated documents are only written if
|
||||
<code>site.future</code> <em>is also true</em>.
|
||||
</p>
|
||||
<p>More fine-grained control over documents being written to disk can be exercised by setting
|
||||
<code>published: false</code> (<em><code>true</code> by default</em>) in the document's front matter.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
### Documents
|
||||
|
||||
In addition to any front matter provided in the document's corresponding
|
||||
file, each document has the following attributes:
|
||||
|
||||
<div class="mobile-side-scroller">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Variable</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>content</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The (unrendered) content of the document. If no front matter is
|
||||
provided, Jekyll will not generate the file in your collection. If
|
||||
front matter is used, then this is all the contents of the file
|
||||
after the terminating
|
||||
`---` of the front matter.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>output</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The rendered output of the document, based on the
|
||||
<code>content</code>.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>path</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The full path to the document's source file.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>relative_path</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The path to the document's source file relative to the site source.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>url</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The URL of the rendered collection. The file is only written to the destination when the collection to which it belongs has <code>output: true</code> in the site's configuration.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>collection</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The name of the document's collection.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p><code>date</code></p>
|
||||
</td>
|
||||
<td>
|
||||
<p>
|
||||
The date of the document's collection.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -1,8 +0,0 @@
|
||||
---
|
||||
title: Report a bug
|
||||
permalink: "/docs/community/bug/"
|
||||
---
|
||||
|
||||
If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository — First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository.
|
||||
|
||||
If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
title: Community
|
||||
permalink: /docs/community/
|
||||
redirect_from: "/help/index.html"
|
||||
---
|
||||
|
||||
## Jekyll Contributor Code of Conduct
|
||||
|
||||
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
||||
|
||||
Read the full [code of conduct]({{ '/docs/conduct/' | relative_url }})
|
||||
|
||||
## Reporting Security Vulnerabilities
|
||||
|
||||
Find something in our codebase that could be exploited by malicious elements?
|
||||
|
||||
Consult our [Security Policy]({{ '/docs/security/' | relative_url }}) to see if a product version is considered *outdated* and how to report
|
||||
the situation responsibly.
|
||||
|
||||
## Where to get support
|
||||
|
||||
If you're looking for support for Jekyll, there are a lot of options:
|
||||
|
||||
* Read the [Jekyll Documentation]({{ '/docs/' | relative_url }})
|
||||
* If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll)
|
||||
* Chat with Jekyllers — Join our [Gitter channel](https://gitter.im/jekyll/jekyll) or our IRC channel #jekyll on [Libera](irc://irc.libera.chat/#jekyll).
|
||||
|
||||
There are a bunch of helpful community members on these services who are willing to point you in the right direction.
|
||||
|
||||
**Reminder: Jekyll's issue tracker is not a support forum.**
|
||||
|
||||
## Ways to contribute
|
||||
|
||||
* [How to Contribute]({{ '/docs/contributing/' | relative_url }})
|
||||
* [How to file a bug]({{ '/docs/community/bug/' | relative_url }})
|
||||
* [Guide for maintaining Jekyll]({{ '/docs/maintaining/' | relative_url }})
|
||||
|
||||
## Jekyllconf
|
||||
|
||||
[Watch videos]({{ '/jekyllconf/' | relative_url }}) from members of the Jekyll community speak about interesting use cases, tricks they’ve learned or meta Jekyll topics.
|
||||
|
||||
## Jekyll on Twitter
|
||||
|
||||
The [official Jekyll Twitter account](https://twitter.com/jekyllrb).
|
||||
@@ -1,82 +0,0 @@
|
||||
---
|
||||
title: Code of Conduct
|
||||
permalink: "/docs/conduct/"
|
||||
note: This file is autogenerated. Edit /CONDUCT.markdown instead.
|
||||
redirect_from: "/conduct/index.html"
|
||||
editable: false
|
||||
---
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user