mirror of
https://github.com/jekyll/jekyll.git
synced 2026-04-28 03:01:03 -04:00
Compare commits
31 Commits
make-it-an
...
roadmap
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb04d0db3b | ||
|
|
f9411bd362 | ||
|
|
4528772e20 | ||
|
|
5457fa16f6 | ||
|
|
a473b45e35 | ||
|
|
41c3dd4cde | ||
|
|
071e775a55 | ||
|
|
cb6e2574ce | ||
|
|
413783c4e8 | ||
|
|
daf638b600 | ||
|
|
a449512912 | ||
|
|
41e2994868 | ||
|
|
51f79a4387 | ||
|
|
6422477c5e | ||
|
|
e801d55ddf | ||
|
|
ade2847301 | ||
|
|
7040448b75 | ||
|
|
d5b26c94d2 | ||
|
|
eadba642ce | ||
|
|
387c40f667 | ||
|
|
2bd3815b42 | ||
|
|
df2a92cb39 | ||
|
|
a224491d20 | ||
|
|
7861f12727 | ||
|
|
6ee728efcb | ||
|
|
ba9a28474f | ||
|
|
6c9200252a | ||
|
|
4b471fe9fb | ||
|
|
f80321ecac | ||
|
|
06ab708edf | ||
|
|
d213981a24 |
16
.github/CONTRIBUTING.markdown
vendored
16
.github/CONTRIBUTING.markdown
vendored
@@ -6,8 +6,8 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
|
||||
|
||||
* If you have a question about using Jekyll, start a discussion on [Jekyll Talk](https://talk.jekyllrb.com).
|
||||
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository.
|
||||
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new)
|
||||
* More resources are listed on our [Help page](https://jekyllrb.com/help/)
|
||||
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
|
||||
* More resources are listed on our [Help page](https://jekyllrb.com/help/).
|
||||
|
||||
## Ways to contribute
|
||||
|
||||
@@ -28,7 +28,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||
|
||||
* 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.
|
||||
|
||||
* Pull request are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/)
|
||||
* Pull request are easy and fun. 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.
|
||||
|
||||
@@ -36,7 +36,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||
|
||||
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
|
||||
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"
|
||||
@@ -48,13 +48,13 @@ That's it! You'll be automatically subscribed to receive updates as others revie
|
||||
|
||||
### 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 lcoally `git clone https://github.com/<you-username>/jekyll`
|
||||
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll).
|
||||
2. Clone the repository lcoally `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.
|
||||
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
|
||||
|
||||
@@ -84,7 +84,7 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
|
||||
|
||||
#### Tests
|
||||
|
||||
* If you're creating a small fix or patch to an existing feature, a simple test if more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need to 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 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.
|
||||
|
||||
|
||||
2
Gemfile
2
Gemfile
@@ -1,7 +1,7 @@
|
||||
source "https://rubygems.org"
|
||||
gemspec :name => "jekyll"
|
||||
|
||||
gem "rake", "~> 10.1"
|
||||
gem "rake", "~> 11.0"
|
||||
group :development do
|
||||
gem "launchy", "~> 2.3"
|
||||
gem "rubocop", :branch => :master, :github => "bbatsov/rubocop"
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
* Adds `link` Liquid tag to make generation of URL's easier (#4624)
|
||||
* Allow static files to be symlinked in unsafe mode or non-prod environments (#4640)
|
||||
* Add `:after_init` hook & add `Site#config=` to make resetting config easy (#4703)
|
||||
* DocumentDrop: add `#<=>` which sorts by date (falling back to path) (#4741)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -37,6 +38,9 @@
|
||||
* Unify method for copying special files from repo to site (#4601)
|
||||
* Refresh the contributing file (#4596)
|
||||
* change smartify doc from copy/paste of mardownify doc (#4653)
|
||||
* Update Rake & disable warnings when running tests (#4720)
|
||||
* Fix many warnings (#4537)
|
||||
* Don't blindly assume the last system when determining "open" cmd (#4717)
|
||||
|
||||
### Site Enhancements
|
||||
|
||||
@@ -58,6 +62,9 @@
|
||||
* Add jekyll-paspagon plugin (#4700)
|
||||
* Bold-italicize note in assets documentation about needing yaml front matter (#4706)
|
||||
* Highlight the `script/` calls in the Contributing documentation (#4712)
|
||||
* Add Hawkins to the list of third-party plugins (#4755)
|
||||
* Fix a typo in pagination doc (#4763)
|
||||
* Switch second GitHub Pages link to HTTPS (#4760)
|
||||
|
||||
## 3.1.2 / 2016-02-19
|
||||
|
||||
|
||||
@@ -127,15 +127,12 @@ module Jekyll
|
||||
|
||||
private
|
||||
def launch_browser(server, opts)
|
||||
command =
|
||||
if Utils::Platforms.windows?
|
||||
"start"
|
||||
elsif Utils::Platforms.osx?
|
||||
"open"
|
||||
else
|
||||
"xdg-open"
|
||||
end
|
||||
system command, server_address(server, opts)
|
||||
address = server_address(server, opts)
|
||||
return system "start", address if Utils::Platforms.windows?
|
||||
return system "xdg-open", address if Utils::Platforms.linux?
|
||||
return system "open", address if Utils::Platforms.osx?
|
||||
Jekyll.logger.error "Refusing to launch browser; " \
|
||||
"Platform launcher unknown."
|
||||
end
|
||||
|
||||
# Keep in our area with a thread or detach the server as requested
|
||||
|
||||
@@ -149,7 +149,7 @@ module Jekyll
|
||||
Jekyll.logger.info "Configuration file:", file
|
||||
next_config
|
||||
rescue SystemCallError
|
||||
if @default_config_file
|
||||
if @default_config_file ||= nil
|
||||
Jekyll.logger.warn "Configuration file:", "none"
|
||||
{}
|
||||
else
|
||||
|
||||
@@ -8,7 +8,9 @@ module Jekyll
|
||||
#
|
||||
# Returns the String prefix.
|
||||
def self.highlighter_prefix(highlighter_prefix = nil)
|
||||
@highlighter_prefix = highlighter_prefix if highlighter_prefix
|
||||
if !defined?(@highlighter_prefix) || !highlighter_prefix.nil?
|
||||
@highlighter_prefix = highlighter_prefix
|
||||
end
|
||||
@highlighter_prefix
|
||||
end
|
||||
|
||||
@@ -20,7 +22,9 @@ module Jekyll
|
||||
#
|
||||
# Returns the String suffix.
|
||||
def self.highlighter_suffix(highlighter_suffix = nil)
|
||||
@highlighter_suffix = highlighter_suffix if highlighter_suffix
|
||||
if !defined?(@highlighter_suffix) || !highlighter_suffix.nil?
|
||||
@highlighter_suffix = highlighter_suffix
|
||||
end
|
||||
@highlighter_suffix
|
||||
end
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ module Jekyll
|
||||
safe true
|
||||
|
||||
def setup
|
||||
return if @setup
|
||||
return if @setup ||= false
|
||||
unless (@parser = get_processor)
|
||||
Jekyll.logger.error "Invalid Markdown processor given:", @config["markdown"]
|
||||
Jekyll.logger.info "", "Custom processors are not loaded in safe mode" if @config["safe"]
|
||||
|
||||
@@ -18,6 +18,7 @@ module Jekyll
|
||||
Jekyll::External.require_with_graceful_fail "kramdown"
|
||||
@main_fallback_highlighter = config["highlighter"] || "rouge"
|
||||
@config = config["kramdown"] || {}
|
||||
@highlighter = nil
|
||||
setup
|
||||
end
|
||||
|
||||
|
||||
@@ -20,6 +20,13 @@ module Jekyll
|
||||
fallback_data['excerpt'].to_s
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
return nil unless other.is_a? DocumentDrop
|
||||
cmp = self['date'] <=> other['date']
|
||||
cmp = self['path'] <=> other['path'] if cmp.nil? || cmp == 0
|
||||
cmp
|
||||
end
|
||||
|
||||
private
|
||||
def_delegator :@obj, :data, :fallback_data
|
||||
end
|
||||
|
||||
@@ -94,8 +94,8 @@ module Jekyll
|
||||
return true if !scope.key?('path') || scope['path'].empty?
|
||||
|
||||
scope_path = Pathname.new(scope['path'])
|
||||
Pathname.new(sanitize_path(path)).ascend do |path|
|
||||
if path.to_s == scope_path.to_s
|
||||
Pathname.new(sanitize_path(path)).ascend do |ascended_path|
|
||||
if ascended_path.to_s == scope_path.to_s
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -60,7 +60,7 @@ module Jekyll
|
||||
#
|
||||
# Returns the safety Boolean.
|
||||
def self.safe(safe = nil)
|
||||
if safe
|
||||
if !defined?(@safe) || !safe.nil?
|
||||
@safe = safe
|
||||
end
|
||||
@safe || false
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
module Jekyll
|
||||
class Regenerator
|
||||
attr_reader :site, :metadata, :cache
|
||||
attr_accessor :disabled
|
||||
private :disabled, :disabled=
|
||||
|
||||
def initialize(site)
|
||||
@site = site
|
||||
@@ -115,7 +117,7 @@ module Jekyll
|
||||
#
|
||||
# Returns nothing.
|
||||
def add_dependency(path, dependency)
|
||||
return if metadata[path].nil? || @disabled
|
||||
return if metadata[path].nil? || disabled
|
||||
|
||||
unless metadata[path]["deps"].include? dependency
|
||||
metadata[path]["deps"] << dependency
|
||||
@@ -144,8 +146,8 @@ module Jekyll
|
||||
#
|
||||
# Returns a Boolean (true for disabled, false for enabled).
|
||||
def disabled?
|
||||
@disabled = !site.incremental? if @disabled.nil?
|
||||
@disabled
|
||||
self.disabled = !site.incremental? if disabled.nil?
|
||||
disabled
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -230,4 +230,4 @@ This entire guide is open-source. Go ahead and [edit it][3] if you have a
|
||||
fix or [ask for help][4] if you run into trouble and need some help.
|
||||
|
||||
[3]: https://github.com/jekyll/jekyll/edit/master/site/_docs/continuous-integration.md
|
||||
[4]: http://jekyllrb.com/help/
|
||||
[4]: https://jekyllrb.com/help/
|
||||
|
||||
@@ -89,7 +89,7 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
|
||||
|
||||
#### Tests
|
||||
|
||||
* If you're creating a small fix or patch to an existing feature, a simple test if more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need to 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 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.
|
||||
|
||||
|
||||
@@ -898,6 +898,7 @@ LESS.js files during generation.
|
||||
- [Jekyll Deploy](https://github.com/vwochnik/jekyll-deploy): Adds a `deploy` sub-command to Jekyll.
|
||||
- [Official Contentful Jekyll Plugin](https://github.com/contentful/jekyll-contentful-data-import): Adds a `contentful` sub-command to Jekyll to import data from Contentful.
|
||||
- [jekyll-paspagon](https://github.com/KrzysiekJ/jekyll-paspagon): Sell your posts in various formats for cryptocurrencies.
|
||||
- [Hawkins](https://github.com/awood/hawkins): Adds a `liveserve` sub-command to Jekyll that incorporates [LiveReload](http://livereload.com/) into your pages while you preview them. No more hitting the refresh button in your browser!
|
||||
|
||||
#### Editors
|
||||
|
||||
|
||||
@@ -353,7 +353,7 @@ following is a reference of the available data.
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><code>paginator.total_pages</code></p></td>
|
||||
<td><p>Total number of Pages.</p></td>
|
||||
<td><p>Total number of pages.</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><code>paginator.page</code></p></td>
|
||||
|
||||
@@ -79,7 +79,7 @@ overview: true
|
||||
<div class="pane-content">
|
||||
<h2 class="center-on-mobiles"><strong>Free hosting</strong> with GitHub Pages</h2>
|
||||
<p>Sick of dealing with hosting companies? <a href="https://pages.github.com/">GitHub Pages</a> are <em>powered by Jekyll</em>, so you can easily deploy your site using GitHub for free—<a href="https://help.github.com/articles/about-supported-custom-domains/">custom domain name</a> and all.</p>
|
||||
<a href="http://pages.github.com/">Learn more about GitHub Pages →</a>
|
||||
<a href="https://pages.github.com/">Learn more about GitHub Pages →</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
||||
20
site/roadmap.md
Normal file
20
site/roadmap.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
layout: page
|
||||
title: Roadmap
|
||||
---
|
||||
|
||||
This is a high-level roadmap for Jekyll. It is a list of things we're
|
||||
planning for each release. While plans are subject to change, this should
|
||||
offer a bit of an overview for anyone interested in future features.
|
||||
|
||||
If you'd like to discuss any of the items, visit the link next to each
|
||||
item and leave us a comment! We'd love to hear your thoughts.
|
||||
|
||||
- [v3.2](#v32)
|
||||
- [v3.3](#v33)
|
||||
|
||||
## v3.2
|
||||
|
||||
For v3.2, we're interested in shipping:
|
||||
|
||||
1. **Gem-based themes.** This will allow users to ship layouts, includes, and sass (to start with) in a way that is more easily consumable and versionable. ([discuss]({{ site.repository }}/issues/4510))
|
||||
@@ -1,3 +1,10 @@
|
||||
$stdout.puts "# -------------------------------------------------------------"
|
||||
$stdout.puts "# SPECS AND TESTS ARE RUNNING WITH WARNINGS OFF."
|
||||
$stdout.puts "# SEE: https://github.com/Shopify/liquid/issues/730"
|
||||
$stdout.puts "# SEE: https://github.com/jekyll/jekyll/issues/4719"
|
||||
$stdout.puts "# -------------------------------------------------------------"
|
||||
$VERBOSE = nil
|
||||
|
||||
def jruby?
|
||||
defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
||||
end
|
||||
|
||||
@@ -37,7 +37,7 @@ class TestConvertible < JekyllUnitTest
|
||||
out = capture_stderr do
|
||||
@convertible.read_yaml(@base, 'exploit_front_matter.erb')
|
||||
end
|
||||
refute_match /undefined class\/module DoesNotExist/, out
|
||||
refute_match(/undefined class\/module DoesNotExist/, out)
|
||||
end
|
||||
|
||||
should "not parse if there is encoding error in file" do
|
||||
|
||||
@@ -158,7 +158,7 @@ class TestFilters < JekyllUnitTest
|
||||
end
|
||||
|
||||
should "format a time with xmlschema" do
|
||||
assert_match /2014-05-10T00:10:07/, @filter.date_to_xmlschema(@time_as_numeric)
|
||||
assert_match(/2014-05-10T00:10:07/, @filter.date_to_xmlschema(@time_as_numeric))
|
||||
end
|
||||
|
||||
should "format a time according to RFC-822" do
|
||||
|
||||
@@ -91,7 +91,7 @@ class TestNewCommand < JekyllUnitTest
|
||||
should 'force created folder' do
|
||||
capture_stdout { Jekyll::Commands::New.process(@args) }
|
||||
output = capture_stdout { Jekyll::Commands::New.process(@args, '--force') }
|
||||
assert_match /New jekyll site installed in/, output
|
||||
assert_match(/New jekyll site installed in/, output)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -232,13 +232,13 @@ class TestSite < JekyllUnitTest
|
||||
context 'error handling' do
|
||||
should "raise if destination is included in source" do
|
||||
assert_raises Jekyll::Errors::FatalException do
|
||||
site = Site.new(site_configuration('destination' => source_dir))
|
||||
Site.new(site_configuration('destination' => source_dir))
|
||||
end
|
||||
end
|
||||
|
||||
should "raise if destination is source" do
|
||||
assert_raises Jekyll::Errors::FatalException do
|
||||
site = Site.new(site_configuration('destination' => File.join(source_dir, "..")))
|
||||
Site.new(site_configuration('destination' => File.join(source_dir, "..")))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -520,7 +520,6 @@ class TestSite < JekyllUnitTest
|
||||
contacts_html = @site.pages.find { |p| p.name == "contacts.html" }
|
||||
@site.process
|
||||
|
||||
source = @site.in_source_dir(contacts_html.path)
|
||||
dest = File.expand_path(contacts_html.destination(@site.dest))
|
||||
mtime1 = File.stat(dest).mtime.to_i # first run must generate dest file
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ CONTENT
|
||||
end
|
||||
|
||||
should "not cause a markdown error" do
|
||||
refute_match /markdown\-html\-error/, @result
|
||||
refute_match(/markdown\-html\-error/, @result)
|
||||
end
|
||||
|
||||
should "render markdown with pygments" do
|
||||
@@ -442,7 +442,7 @@ CONTENT
|
||||
end
|
||||
|
||||
should "not cause an error" do
|
||||
refute_match /markdown\-html\-error/, @result
|
||||
refute_match(/markdown\-html\-error/, @result)
|
||||
end
|
||||
|
||||
should "have the url to the \"complex\" post from 2008-11-21" do
|
||||
@@ -466,7 +466,7 @@ CONTENT
|
||||
end
|
||||
|
||||
should "not cause an error" do
|
||||
refute_match /markdown\-html\-error/, @result
|
||||
refute_match(/markdown\-html\-error/, @result)
|
||||
end
|
||||
|
||||
should "have the url to the \"complex\" post from 2008-11-21" do
|
||||
@@ -600,7 +600,8 @@ title: Include symlink
|
||||
CONTENT
|
||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||
end
|
||||
refute_match /SYMLINK TEST/, @result
|
||||
@result ||= ''
|
||||
refute_match(/SYMLINK TEST/, @result)
|
||||
end
|
||||
|
||||
should "not expose the existence of symlinked files" do
|
||||
@@ -615,7 +616,7 @@ title: Include symlink
|
||||
CONTENT
|
||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||
end
|
||||
assert_match /should exist and should not be a symlink/, ex.message
|
||||
assert_match(/should exist and should not be a symlink/, ex.message)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -877,7 +878,8 @@ title: Include symlink
|
||||
CONTENT
|
||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||
end
|
||||
refute_match /SYMLINK TEST/, @result
|
||||
@result ||= ''
|
||||
refute_match(/SYMLINK TEST/, @result)
|
||||
end
|
||||
|
||||
should "not expose the existence of symlinked files" do
|
||||
@@ -892,7 +894,7 @@ title: Include symlink
|
||||
CONTENT
|
||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||
end
|
||||
assert_match /should exist and should not be a symlink/, ex.message
|
||||
assert_match(/should exist and should not be a symlink/, ex.message)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -63,12 +63,12 @@ class TestURL < JekyllUnitTest
|
||||
},
|
||||
})
|
||||
site.read
|
||||
doc = site.collections["methods"].docs.find do |doc|
|
||||
matching_doc = site.collections["methods"].docs.find do |doc|
|
||||
doc.relative_path == "_methods/escape-+ #%20[].md"
|
||||
end
|
||||
assert_equal '/methods/escape-+-20/escape-20.html', URL.new(
|
||||
:template => '/methods/:title/:name:output_ext',
|
||||
:placeholders => doc.url_placeholders
|
||||
:placeholders => matching_doc.url_placeholders
|
||||
).to_s
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user