Merge branch 'master'
13
drupal-tailwindcss-purgecss-test/.docksal/commands/init
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
fin start
|
||||||
|
|
||||||
|
fin drush site-install -y \
|
||||||
|
--account-pass=admin \
|
||||||
|
--site-name='Drupal Tailwind CSS'
|
||||||
|
|
||||||
|
# Change the default theme
|
||||||
|
fin drush theme:enable tailwindcss -y
|
||||||
|
fin drush config-set system.theme default tailwindcss -y
|
||||||
|
|
||||||
|
fin drush uli -l http://drupal-tailwind.docksal
|
4
drupal-tailwindcss-purgecss-test/.docksal/docksal.env
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
DOCKSAL_STACK=default
|
||||||
|
DOCKSAL_VOLUMES=unison
|
||||||
|
COMPOSE_PROJECT_NAME=drupal-tailwind
|
||||||
|
DOCROOT=web
|
1
drupal-tailwindcss-purgecss-test/.docksal/docksal.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
version: "2.1"
|
17
drupal-tailwindcss-purgecss-test/.editorconfig
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Drupal editor configuration normalization
|
||||||
|
# @see http://editorconfig.org/
|
||||||
|
|
||||||
|
# This is the top-most .editorconfig file; do not search in parent directories.
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# All files.
|
||||||
|
[*]
|
||||||
|
end_of_line = LF
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[composer.{json,lock}]
|
||||||
|
indent_size = 4
|
27
drupal-tailwindcss-purgecss-test/.env.example
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#
|
||||||
|
# Copy and rename this file to .env at root of this project.
|
||||||
|
#
|
||||||
|
|
||||||
|
# A common use case is to supply database creds via the environment. Edit settings.php
|
||||||
|
# like so:
|
||||||
|
#
|
||||||
|
# $databases['default']['default'] = [
|
||||||
|
# 'database' => getenv('MYSQL_DATABASE'),
|
||||||
|
# 'driver' => 'mysql',
|
||||||
|
# 'host' => getenv('MYSQL_HOSTNAME'),
|
||||||
|
# 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
|
||||||
|
# 'password' => getenv('MYSQL_PASSWORD'),
|
||||||
|
# 'port' => getenv('MYSQL_PORT'),
|
||||||
|
# 'prefix' => '',
|
||||||
|
# 'username' => getenv('MYSQL_USER'),
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# Uncomment and populate as needed.
|
||||||
|
# MYSQL_DATABASE=
|
||||||
|
# MYSQL_HOSTNAME=
|
||||||
|
# MYSQL_PASSWORD=
|
||||||
|
# MYSQL_PORT=
|
||||||
|
# MYSQL_USER=
|
||||||
|
|
||||||
|
# Another common use case is to set Drush's --uri via environment.
|
||||||
|
# DRUSH_OPTIONS_URI=http://example.com
|
61
drupal-tailwindcss-purgecss-test/.gitattributes
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
# Drupal git normalization
|
||||||
|
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
|
||||||
|
# @see https://www.drupal.org/node/1542048
|
||||||
|
|
||||||
|
# Normally these settings would be done with macro attributes for improved
|
||||||
|
# readability and easier maintenance. However macros can only be defined at the
|
||||||
|
# repository root directory. Drupal avoids making any assumptions about where it
|
||||||
|
# is installed.
|
||||||
|
|
||||||
|
# Define text file attributes.
|
||||||
|
# - Treat them as text.
|
||||||
|
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
|
||||||
|
# - Detect whitespace errors.
|
||||||
|
# - Exposed by default in `git diff --color` on the CLI.
|
||||||
|
# - Validate with `git diff --check`.
|
||||||
|
# - Deny applying with `git apply --whitespace=error-all`.
|
||||||
|
# - Fix automatically with `git apply --whitespace=fix`.
|
||||||
|
|
||||||
|
*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
|
||||||
|
*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
|
||||||
|
# Define binary file attributes.
|
||||||
|
# - Do not treat them as text.
|
||||||
|
# - Include binary diff in patches instead of "binary files differ."
|
||||||
|
*.eot -text diff
|
||||||
|
*.exe -text diff
|
||||||
|
*.gif -text diff
|
||||||
|
*.gz -text diff
|
||||||
|
*.ico -text diff
|
||||||
|
*.jpeg -text diff
|
||||||
|
*.jpg -text diff
|
||||||
|
*.otf -text diff
|
||||||
|
*.phar -text diff
|
||||||
|
*.png -text diff
|
||||||
|
*.svgz -text diff
|
||||||
|
*.ttf -text diff
|
||||||
|
*.woff -text diff
|
||||||
|
*.woff2 -text diff
|
27
drupal-tailwindcss-purgecss-test/.gitignore
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Ignore directories generated by Composer
|
||||||
|
/drush/contrib/
|
||||||
|
/vendor/
|
||||||
|
/web/core/
|
||||||
|
/web/modules/contrib/
|
||||||
|
/web/themes/contrib/
|
||||||
|
/web/profiles/contrib/
|
||||||
|
/web/libraries/
|
||||||
|
|
||||||
|
# Ignore sensitive information
|
||||||
|
/web/sites/*/settings.php
|
||||||
|
/web/sites/*/settings.local.php
|
||||||
|
|
||||||
|
# Ignore Drupal's file directory
|
||||||
|
/web/sites/*/files/
|
||||||
|
|
||||||
|
# Ignore SimpleTest multi-site environment.
|
||||||
|
/web/sites/simpletest
|
||||||
|
|
||||||
|
# Ignore files generated by PhpStorm
|
||||||
|
/.idea/
|
||||||
|
|
||||||
|
# Ignore .env files as they are personal
|
||||||
|
/.env
|
||||||
|
|
||||||
|
# Ignore exported configuration
|
||||||
|
/config/sync/*.yml
|
43
drupal-tailwindcss-purgecss-test/.travis.yml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
language: php
|
||||||
|
dist: trusty
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
php:
|
||||||
|
- 7.0
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- SIMPLETEST_DB=sqlite://tmp/site.sqlite
|
||||||
|
- SIMPLETEST_BASE_URL="http://127.0.0.1:8080"
|
||||||
|
matrix:
|
||||||
|
- RELEASE=stable COMPOSER_CHANNEL=stable
|
||||||
|
- RELEASE=dev COMPOSER_CHANNEL=stable
|
||||||
|
- RELEASE=stable COMPOSER_CHANNEL=snapshot
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- echo 'sendmail_path = /bin/true' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
|
||||||
|
- phpenv config-rm xdebug.ini
|
||||||
|
- composer --verbose self-update --$COMPOSER_CHANNEL
|
||||||
|
- composer --version
|
||||||
|
|
||||||
|
install:
|
||||||
|
- composer --verbose validate
|
||||||
|
- composer --verbose install
|
||||||
|
|
||||||
|
script:
|
||||||
|
- if [[ $RELEASE = dev ]]; then composer --verbose remove --no-update drupal/console; fi;
|
||||||
|
- if [[ $RELEASE = dev ]]; then composer --verbose require --no-update drupal/core:8.8.x-dev webflo/drupal-core-require-dev:8.8.x-dev; fi;
|
||||||
|
- if [[ $RELEASE = dev ]]; then composer --verbose update; fi;
|
||||||
|
- cd $TRAVIS_BUILD_DIR/web
|
||||||
|
- ./../vendor/bin/drush site-install --verbose --yes --db-url=sqlite://tmp/site.sqlite
|
||||||
|
- ./../vendor/bin/drush runserver $SIMPLETEST_BASE_URL &
|
||||||
|
- until curl -s $SIMPLETEST_BASE_URL; do true; done > /dev/null
|
||||||
|
# Skip core/tests/Drupal/Tests/ComposerIntegrationTest.php because web/ has no composer.json
|
||||||
|
# Ignore PageCache group temporarily, @see https://www.drupal.org/node/2770673
|
||||||
|
# Ignore Setup group temporarily, @see https://www.drupal.org/node/2962157
|
||||||
|
- ./../vendor/bin/phpunit -c core --testsuite unit --exclude-group Composer,DependencyInjection,PageCache,Setup
|
||||||
|
- ./../vendor/bin/drush
|
||||||
|
- if [[ $RELEASE = stable ]]; then ./../vendor/bin/drupal; fi;
|
339
drupal-tailwindcss-purgecss-test/LICENSE
Normal file
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
{description}
|
||||||
|
Copyright (C) {year} {fullname}
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
{signature of Ty Coon}, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
83
drupal-tailwindcss-purgecss-test/composer.json
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
{
|
||||||
|
"name": "drupal-composer/drupal-project",
|
||||||
|
"description": "Project template for Drupal 8 projects with composer",
|
||||||
|
"type": "project",
|
||||||
|
"license": "GPL-2.0-or-later",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"role": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "composer",
|
||||||
|
"url": "https://packages.drupal.org/8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.6",
|
||||||
|
"composer/installers": "^1.2",
|
||||||
|
"cweagans/composer-patches": "^1.6.5",
|
||||||
|
"drupal-composer/drupal-scaffold": "^2.5",
|
||||||
|
"drupal/console": "^1.0.2",
|
||||||
|
"drupal/core": "^8.7.0",
|
||||||
|
"drupal/tailwindcss": "^2.1",
|
||||||
|
"drush/drush": "^9.0.0",
|
||||||
|
"vlucas/phpdotenv": "^2.4",
|
||||||
|
"webflo/drupal-finder": "^1.0.0",
|
||||||
|
"webmozart/path-util": "^2.3",
|
||||||
|
"zaporylie/composer-drupal-optimizations": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"webflo/drupal-core-require-dev": "^8.7.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"drupal/drupal": "*"
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"prefer-stable": true,
|
||||||
|
"config": {
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"scripts/composer/ScriptHandler.php"
|
||||||
|
],
|
||||||
|
"files": ["load.environment.php"]
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"pre-install-cmd": [
|
||||||
|
"DrupalProject\\composer\\ScriptHandler::checkComposerVersion"
|
||||||
|
],
|
||||||
|
"pre-update-cmd": [
|
||||||
|
"DrupalProject\\composer\\ScriptHandler::checkComposerVersion"
|
||||||
|
],
|
||||||
|
"post-install-cmd": [
|
||||||
|
"DrupalProject\\composer\\ScriptHandler::createRequiredFiles"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"DrupalProject\\composer\\ScriptHandler::createRequiredFiles"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"composer-exit-on-patch-failure": true,
|
||||||
|
"patchLevel": {
|
||||||
|
"drupal/core": "-p2"
|
||||||
|
},
|
||||||
|
"installer-paths": {
|
||||||
|
"web/core": ["type:drupal-core"],
|
||||||
|
"web/libraries/{$name}": ["type:drupal-library"],
|
||||||
|
"web/modules/contrib/{$name}": ["type:drupal-module"],
|
||||||
|
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
|
||||||
|
"web/themes/contrib/{$name}": ["type:drupal-theme"],
|
||||||
|
"drush/Commands/{$name}": ["type:drupal-drush"]
|
||||||
|
},
|
||||||
|
"drupal-scaffold": {
|
||||||
|
"initial": {
|
||||||
|
".editorconfig": "../.editorconfig",
|
||||||
|
".gitattributes": "../.gitattributes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8502
drupal-tailwindcss-purgecss-test/composer.lock
generated
Normal file
24
drupal-tailwindcss-purgecss-test/config/sync/.htaccess
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Deny all requests from Apache 2.4+.
|
||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Deny all requests from Apache 2.0-2.2.
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Deny from all
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Turn off all options we don't need.
|
||||||
|
Options -Indexes -ExecCGI -Includes -MultiViews
|
||||||
|
|
||||||
|
# Set the catch-all handler to prevent scripts from being executed.
|
||||||
|
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
|
||||||
|
<Files *>
|
||||||
|
# Override the handler again if we're run later in the evaluation list.
|
||||||
|
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
# If we know how to do it safely, disable the PHP engine entirely.
|
||||||
|
<IfModule mod_php5.c>
|
||||||
|
php_flag engine off
|
||||||
|
</IfModule>
|
1
drupal-tailwindcss-purgecss-test/config/sync/README.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync. For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drush\Commands;
|
||||||
|
|
||||||
|
use Consolidation\AnnotatedCommand\CommandData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit this file to reflect your organization's needs.
|
||||||
|
*/
|
||||||
|
class PolicyCommands extends DrushCommands {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent catastrophic braino. Note that this file has to be local to the
|
||||||
|
* machine that initiates the sql:sync command.
|
||||||
|
*
|
||||||
|
* @hook validate sql:sync
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function sqlSyncValidate(CommandData $commandData) {
|
||||||
|
if ($commandData->input()->getArgument('target') == '@prod') {
|
||||||
|
throw new \Exception(dt('Per !file, you may never overwrite the production database.', ['!file' => __FILE__]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Limit rsync operations to production site.
|
||||||
|
*
|
||||||
|
* @hook validate core:rsync
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function rsyncValidate(CommandData $commandData) {
|
||||||
|
if (preg_match("/^@prod/", $commandData->input()->getArgument('target'))) {
|
||||||
|
throw new \Exception(dt('Per !file, you may never rsync to the production site.', ['!file' => __FILE__]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
drupal-tailwindcss-purgecss-test/drush/README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
This directory contains commands, configuration and site aliases for Drush. See https://packagist.org/search/?type=drupal-drush for a directory of Drush commands installable via Composer.
|
6
drupal-tailwindcss-purgecss-test/drush/drush.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#
|
||||||
|
# A Drush configuration file
|
||||||
|
#
|
||||||
|
# Docs at https://github.com/drush-ops/drush/blob/master/examples/example.drush.yml
|
||||||
|
#
|
||||||
|
# Edit or remove this file as needed.
|
14
drupal-tailwindcss-purgecss-test/drush/sites/self.site.yml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Edit or remove this file as needed.
|
||||||
|
# Docs at https://github.com/drush-ops/drush/blob/master/examples/example.site.yml
|
||||||
|
|
||||||
|
#prod:
|
||||||
|
# host: prod.domain.com
|
||||||
|
# user: www-admin
|
||||||
|
# root: /path/to/drupal
|
||||||
|
# uri: http://www.example.com
|
||||||
|
#
|
||||||
|
#stage:
|
||||||
|
# host: stage.domain.com
|
||||||
|
# user: www-admin
|
||||||
|
# root: /path/to/drupal
|
||||||
|
# uri: http://stage.example.com
|
20
drupal-tailwindcss-purgecss-test/load.environment.php
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is included very early. See autoload.files in composer.json and
|
||||||
|
* https://getcomposer.org/doc/04-schema.md#files
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Dotenv\Dotenv;
|
||||||
|
use Dotenv\Exception\InvalidPathException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load any .env file. See /.env.example.
|
||||||
|
*/
|
||||||
|
$dotenv = new Dotenv(__DIR__);
|
||||||
|
try {
|
||||||
|
$dotenv->load();
|
||||||
|
}
|
||||||
|
catch (InvalidPathException $e) {
|
||||||
|
// Do nothing. Production environments rarely use .env files.
|
||||||
|
}
|
15
drupal-tailwindcss-purgecss-test/phpunit.xml.dist
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
|
||||||
|
backupGlobals="false"
|
||||||
|
colors="true"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
verbose="true"
|
||||||
|
>
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="drupal-composer-project tests">
|
||||||
|
<directory>./test/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
</phpunit>
|
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \DrupalProject\composer\ScriptHandler.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace DrupalProject\composer;
|
||||||
|
|
||||||
|
use Composer\Script\Event;
|
||||||
|
use Composer\Semver\Comparator;
|
||||||
|
use DrupalFinder\DrupalFinder;
|
||||||
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
use Webmozart\PathUtil\Path;
|
||||||
|
|
||||||
|
class ScriptHandler {
|
||||||
|
|
||||||
|
public static function createRequiredFiles(Event $event) {
|
||||||
|
$fs = new Filesystem();
|
||||||
|
$drupalFinder = new DrupalFinder();
|
||||||
|
$drupalFinder->locateRoot(getcwd());
|
||||||
|
$drupalRoot = $drupalFinder->getDrupalRoot();
|
||||||
|
|
||||||
|
$dirs = [
|
||||||
|
'modules',
|
||||||
|
'profiles',
|
||||||
|
'themes',
|
||||||
|
];
|
||||||
|
|
||||||
|
// Required for unit testing
|
||||||
|
foreach ($dirs as $dir) {
|
||||||
|
if (!$fs->exists($drupalRoot . '/'. $dir)) {
|
||||||
|
$fs->mkdir($drupalRoot . '/'. $dir);
|
||||||
|
$fs->touch($drupalRoot . '/'. $dir . '/.gitkeep');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare the settings file for installation
|
||||||
|
if (!$fs->exists($drupalRoot . '/sites/default/settings.php') and $fs->exists($drupalRoot . '/sites/default/default.settings.php')) {
|
||||||
|
$fs->copy($drupalRoot . '/sites/default/default.settings.php', $drupalRoot . '/sites/default/settings.php');
|
||||||
|
require_once $drupalRoot . '/core/includes/bootstrap.inc';
|
||||||
|
require_once $drupalRoot . '/core/includes/install.inc';
|
||||||
|
$settings['config_directories'] = [
|
||||||
|
CONFIG_SYNC_DIRECTORY => (object) [
|
||||||
|
'value' => Path::makeRelative($drupalFinder->getComposerRoot() . '/config/sync', $drupalRoot),
|
||||||
|
'required' => TRUE,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
drupal_rewrite_settings($settings, $drupalRoot . '/sites/default/settings.php');
|
||||||
|
$fs->chmod($drupalRoot . '/sites/default/settings.php', 0666);
|
||||||
|
$event->getIO()->write("Created a sites/default/settings.php file with chmod 0666");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the files directory with chmod 0777
|
||||||
|
if (!$fs->exists($drupalRoot . '/sites/default/files')) {
|
||||||
|
$oldmask = umask(0);
|
||||||
|
$fs->mkdir($drupalRoot . '/sites/default/files', 0777);
|
||||||
|
umask($oldmask);
|
||||||
|
$event->getIO()->write("Created a sites/default/files directory with chmod 0777");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the installed version of Composer is compatible.
|
||||||
|
*
|
||||||
|
* Composer 1.0.0 and higher consider a `composer install` without having a
|
||||||
|
* lock file present as equal to `composer update`. We do not ship with a lock
|
||||||
|
* file to avoid merge conflicts downstream, meaning that if a project is
|
||||||
|
* installed with an older version of Composer the scaffolding of Drupal will
|
||||||
|
* not be triggered. We check this here instead of in drupal-scaffold to be
|
||||||
|
* able to give immediate feedback to the end user, rather than failing the
|
||||||
|
* installation after going through the lengthy process of compiling and
|
||||||
|
* downloading the Composer dependencies.
|
||||||
|
*
|
||||||
|
* @see https://github.com/composer/composer/pull/5035
|
||||||
|
*/
|
||||||
|
public static function checkComposerVersion(Event $event) {
|
||||||
|
$composer = $event->getComposer();
|
||||||
|
$io = $event->getIO();
|
||||||
|
|
||||||
|
$version = $composer::VERSION;
|
||||||
|
|
||||||
|
// The dev-channel of composer uses the git revision as version number,
|
||||||
|
// try to the branch alias instead.
|
||||||
|
if (preg_match('/^[0-9a-f]{40}$/i', $version)) {
|
||||||
|
$version = $composer::BRANCH_ALIAS_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If Composer is installed through git we have no easy way to determine if
|
||||||
|
// it is new enough, just display a warning.
|
||||||
|
if ($version === '@package_version@' || $version === '@package_branch_alias_version@') {
|
||||||
|
$io->writeError('<warning>You are running a development version of Composer. If you experience problems, please update Composer to the latest stable version.</warning>');
|
||||||
|
}
|
||||||
|
elseif (Comparator::lessThan($version, '1.0.0')) {
|
||||||
|
$io->writeError('<error>Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing</error>.');
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
drupal-tailwindcss-purgecss-test/web/.csslintrc
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
--errors=box-model,
|
||||||
|
display-property-grouping,
|
||||||
|
duplicate-background-images,
|
||||||
|
duplicate-properties,
|
||||||
|
empty-rules,
|
||||||
|
ids,
|
||||||
|
import,
|
||||||
|
important,
|
||||||
|
known-properties,
|
||||||
|
outline-none,
|
||||||
|
overqualified-elements,
|
||||||
|
qualified-headings,
|
||||||
|
shorthand,
|
||||||
|
star-property-hack,
|
||||||
|
text-indent,
|
||||||
|
underscore-property-hack,
|
||||||
|
unique-headings,
|
||||||
|
unqualified-attributes,
|
||||||
|
vendor-prefix,
|
||||||
|
zero-units
|
||||||
|
--ignore=adjoining-classes,
|
||||||
|
box-sizing,
|
||||||
|
bulletproof-font-face,
|
||||||
|
compatible-vendor-prefixes,
|
||||||
|
errors,
|
||||||
|
fallback-colors,
|
||||||
|
floats,
|
||||||
|
font-faces,
|
||||||
|
font-sizes,
|
||||||
|
gradients,
|
||||||
|
import-ie-limit,
|
||||||
|
order-alphabetical,
|
||||||
|
regex-selectors,
|
||||||
|
rules-count,
|
||||||
|
selector-max,
|
||||||
|
selector-max-approaching,
|
||||||
|
selector-newline,
|
||||||
|
universal-selector
|
||||||
|
--exclude-list=core/assets,
|
||||||
|
vendor
|
17
drupal-tailwindcss-purgecss-test/web/.editorconfig
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Drupal editor configuration normalization
|
||||||
|
# @see http://editorconfig.org/
|
||||||
|
|
||||||
|
# This is the top-most .editorconfig file; do not search in parent directories.
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# All files.
|
||||||
|
[*]
|
||||||
|
end_of_line = LF
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[composer.{json,lock}]
|
||||||
|
indent_size = 4
|
8
drupal-tailwindcss-purgecss-test/web/.eslintignore
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
core/**/*
|
||||||
|
vendor/**/*
|
||||||
|
sites/**/files/**/*
|
||||||
|
libraries/**/*
|
||||||
|
sites/**/libraries/**/*
|
||||||
|
profiles/**/libraries/**/*
|
||||||
|
**/js_test_files/**/*
|
||||||
|
**/node_modules/**/*
|
3
drupal-tailwindcss-purgecss-test/web/.eslintrc.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"extends": "./core/.eslintrc.json"
|
||||||
|
}
|
61
drupal-tailwindcss-purgecss-test/web/.gitattributes
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
# Drupal git normalization
|
||||||
|
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
|
||||||
|
# @see https://www.drupal.org/node/1542048
|
||||||
|
|
||||||
|
# Normally these settings would be done with macro attributes for improved
|
||||||
|
# readability and easier maintenance. However macros can only be defined at the
|
||||||
|
# repository root directory. Drupal avoids making any assumptions about where it
|
||||||
|
# is installed.
|
||||||
|
|
||||||
|
# Define text file attributes.
|
||||||
|
# - Treat them as text.
|
||||||
|
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
|
||||||
|
# - Detect whitespace errors.
|
||||||
|
# - Exposed by default in `git diff --color` on the CLI.
|
||||||
|
# - Validate with `git diff --check`.
|
||||||
|
# - Deny applying with `git apply --whitespace=error-all`.
|
||||||
|
# - Fix automatically with `git apply --whitespace=fix`.
|
||||||
|
|
||||||
|
*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
|
||||||
|
*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||||
|
*.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||||
|
|
||||||
|
# Define binary file attributes.
|
||||||
|
# - Do not treat them as text.
|
||||||
|
# - Include binary diff in patches instead of "binary files differ."
|
||||||
|
*.eot -text diff
|
||||||
|
*.exe -text diff
|
||||||
|
*.gif -text diff
|
||||||
|
*.gz -text diff
|
||||||
|
*.ico -text diff
|
||||||
|
*.jpeg -text diff
|
||||||
|
*.jpg -text diff
|
||||||
|
*.otf -text diff
|
||||||
|
*.phar -text diff
|
||||||
|
*.png -text diff
|
||||||
|
*.svgz -text diff
|
||||||
|
*.ttf -text diff
|
||||||
|
*.woff -text diff
|
||||||
|
*.woff2 -text diff
|
65
drupal-tailwindcss-purgecss-test/web/.ht.router.php
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Router script for the built-in PHP web server.
|
||||||
|
*
|
||||||
|
* The built-in web server should only be used for development and testing as it
|
||||||
|
* has a number of limitations that makes running Drupal on it highly insecure
|
||||||
|
* and somewhat limited.
|
||||||
|
*
|
||||||
|
* Note that:
|
||||||
|
* - The server is single-threaded, any requests made during the execution of
|
||||||
|
* the main request will hang until the main request has been completed.
|
||||||
|
* - The web server does not enforce any of the settings in .htaccess in
|
||||||
|
* particular a remote user will be able to download files that normally would
|
||||||
|
* be protected from direct access such as .module files.
|
||||||
|
*
|
||||||
|
* The router script is needed to work around a bug in PHP, see
|
||||||
|
* https://bugs.php.net/bug.php?id=61286.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* php -S localhost:8888 .ht.router.php
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/en/features.commandline.webserver.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
$url = parse_url($_SERVER['REQUEST_URI']);
|
||||||
|
if (file_exists(__DIR__ . $url['path'])) {
|
||||||
|
// Serve the requested resource as-is.
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Work around the PHP bug.
|
||||||
|
$path = $url['path'];
|
||||||
|
$script = 'index.php';
|
||||||
|
if (strpos($path, '.php') !== FALSE) {
|
||||||
|
// Work backwards through the path to check if a script exists. Otherwise
|
||||||
|
// fallback to index.php.
|
||||||
|
do {
|
||||||
|
$path = dirname($path);
|
||||||
|
if (preg_match('/\.php$/', $path) && is_file(__DIR__ . $path)) {
|
||||||
|
// Discovered that the path contains an existing PHP file. Use that as the
|
||||||
|
// script to include.
|
||||||
|
$script = ltrim($path, '/');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while ($path !== '/' && $path !== '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update $_SERVER variables to point to the correct index-file.
|
||||||
|
$index_file_absolute = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $script;
|
||||||
|
$index_file_relative = DIRECTORY_SEPARATOR . $script;
|
||||||
|
|
||||||
|
// SCRIPT_FILENAME will point to the router script itself, it should point to
|
||||||
|
// the full path of index.php.
|
||||||
|
$_SERVER['SCRIPT_FILENAME'] = $index_file_absolute;
|
||||||
|
|
||||||
|
// SCRIPT_NAME and PHP_SELF will either point to index.php or contain the full
|
||||||
|
// virtual path being requested depending on the URL being requested. They
|
||||||
|
// should always point to index.php relative to document root.
|
||||||
|
$_SERVER['SCRIPT_NAME'] = $index_file_relative;
|
||||||
|
$_SERVER['PHP_SELF'] = $index_file_relative;
|
||||||
|
|
||||||
|
// Require the script and let core take over.
|
||||||
|
require $_SERVER['SCRIPT_FILENAME'];
|
189
drupal-tailwindcss-purgecss-test/web/.htaccess
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
#
|
||||||
|
# Apache/PHP/Drupal settings:
|
||||||
|
#
|
||||||
|
|
||||||
|
# Protect files and directories from prying eyes.
|
||||||
|
<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
|
||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Order allow,deny
|
||||||
|
</IfModule>
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# Don't show directory listings for URLs which map to a directory.
|
||||||
|
Options -Indexes
|
||||||
|
|
||||||
|
# Set the default handler.
|
||||||
|
DirectoryIndex index.php index.html index.htm
|
||||||
|
|
||||||
|
# Add correct encoding for SVGZ.
|
||||||
|
AddType image/svg+xml svg svgz
|
||||||
|
AddEncoding gzip svgz
|
||||||
|
|
||||||
|
# Most of the following PHP settings cannot be changed at runtime. See
|
||||||
|
# sites/default/default.settings.php and
|
||||||
|
# Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be
|
||||||
|
# changed at runtime.
|
||||||
|
|
||||||
|
# PHP 5, Apache 1 and 2.
|
||||||
|
<IfModule mod_php5.c>
|
||||||
|
php_value assert.active 0
|
||||||
|
php_flag session.auto_start off
|
||||||
|
php_value mbstring.http_input pass
|
||||||
|
php_value mbstring.http_output pass
|
||||||
|
php_flag mbstring.encoding_translation off
|
||||||
|
# PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is
|
||||||
|
# not set.
|
||||||
|
php_value always_populate_raw_post_data -1
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Requires mod_expires to be enabled.
|
||||||
|
<IfModule mod_expires.c>
|
||||||
|
# Enable expirations.
|
||||||
|
ExpiresActive On
|
||||||
|
|
||||||
|
# Cache all files for 2 weeks after access (A).
|
||||||
|
ExpiresDefault A1209600
|
||||||
|
|
||||||
|
<FilesMatch \.php$>
|
||||||
|
# Do not allow PHP scripts to be cached unless they explicitly send cache
|
||||||
|
# headers themselves. Otherwise all scripts would have to overwrite the
|
||||||
|
# headers set by mod_expires if they want another caching behavior. This may
|
||||||
|
# fail if an error occurs early in the bootstrap process, and it may cause
|
||||||
|
# problems if a non-Drupal PHP file is installed in a subdirectory.
|
||||||
|
ExpiresActive Off
|
||||||
|
</FilesMatch>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to
|
||||||
|
# work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is
|
||||||
|
# not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of
|
||||||
|
# http://example.com/), the path to index.php will need to be adjusted.
|
||||||
|
<IfModule !mod_rewrite.c>
|
||||||
|
FallbackResource /index.php
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Various rewrite rules.
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine on
|
||||||
|
|
||||||
|
# Set "protossl" to "s" if we were accessed via https://. This is used later
|
||||||
|
# if you enable "www." stripping or enforcement, in order to ensure that
|
||||||
|
# you don't bounce between http and https.
|
||||||
|
RewriteRule ^ - [E=protossl]
|
||||||
|
RewriteCond %{HTTPS} on
|
||||||
|
RewriteRule ^ - [E=protossl:s]
|
||||||
|
|
||||||
|
# Make sure Authorization HTTP header is available to PHP
|
||||||
|
# even when running as CGI or FastCGI.
|
||||||
|
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||||
|
|
||||||
|
# Block access to "hidden" directories whose names begin with a period. This
|
||||||
|
# includes directories used by version control systems such as Subversion or
|
||||||
|
# Git to store control files. Files whose names begin with a period, as well
|
||||||
|
# as the control files used by CVS, are protected by the FilesMatch directive
|
||||||
|
# above.
|
||||||
|
#
|
||||||
|
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
|
||||||
|
# not possible to block access to entire directories from .htaccess because
|
||||||
|
# <DirectoryMatch> is not allowed here.
|
||||||
|
#
|
||||||
|
# If you do not have mod_rewrite installed, you should remove these
|
||||||
|
# directories from your webroot or otherwise protect them from being
|
||||||
|
# downloaded.
|
||||||
|
RewriteRule "/\.|^\.(?!well-known/)" - [F]
|
||||||
|
|
||||||
|
# If your site can be accessed both with and without the 'www.' prefix, you
|
||||||
|
# can use one of the following settings to redirect users to your preferred
|
||||||
|
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
|
||||||
|
#
|
||||||
|
# To redirect all users to access the site WITH the 'www.' prefix,
|
||||||
|
# (http://example.com/foo will be redirected to http://www.example.com/foo)
|
||||||
|
# uncomment the following:
|
||||||
|
# RewriteCond %{HTTP_HOST} .
|
||||||
|
# RewriteCond %{HTTP_HOST} !^www\. [NC]
|
||||||
|
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||||
|
#
|
||||||
|
# To redirect all users to access the site WITHOUT the 'www.' prefix,
|
||||||
|
# (http://www.example.com/foo will be redirected to http://example.com/foo)
|
||||||
|
# uncomment the following:
|
||||||
|
# RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
|
||||||
|
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
|
||||||
|
|
||||||
|
# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
|
||||||
|
# VirtualDocumentRoot and the rewrite rules are not working properly.
|
||||||
|
# For example if your site is at http://example.com/drupal uncomment and
|
||||||
|
# modify the following line:
|
||||||
|
# RewriteBase /drupal
|
||||||
|
#
|
||||||
|
# If your site is running in a VirtualDocumentRoot at http://example.com/,
|
||||||
|
# uncomment the following line:
|
||||||
|
# RewriteBase /
|
||||||
|
|
||||||
|
# Redirect common PHP files to their new locations.
|
||||||
|
RewriteCond %{REQUEST_URI} ^(.*)?/(install.php) [OR]
|
||||||
|
RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild.php)
|
||||||
|
RewriteCond %{REQUEST_URI} !core
|
||||||
|
RewriteRule ^ %1/core/%2 [L,QSA,R=301]
|
||||||
|
|
||||||
|
# Rewrite install.php during installation to see if mod_rewrite is working
|
||||||
|
RewriteRule ^core/install.php core/install.php?rewrite=ok [QSA,L]
|
||||||
|
|
||||||
|
# Pass all requests not referring directly to files in the filesystem to
|
||||||
|
# index.php.
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_URI} !=/favicon.ico
|
||||||
|
RewriteRule ^ index.php [L]
|
||||||
|
|
||||||
|
# For security reasons, deny access to other PHP files on public sites.
|
||||||
|
# Note: The following URI conditions are not anchored at the start (^),
|
||||||
|
# because Drupal may be located in a subdirectory. To further improve
|
||||||
|
# security, you can replace '!/' with '!^/'.
|
||||||
|
# Allow access to PHP files in /core (like authorize.php or install.php):
|
||||||
|
RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$
|
||||||
|
# Allow access to test-specific PHP files:
|
||||||
|
RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php
|
||||||
|
# Allow access to Statistics module's custom front controller.
|
||||||
|
# Copy and adapt this rule to directly execute PHP files in contributed or
|
||||||
|
# custom modules or to run another PHP application in the same directory.
|
||||||
|
RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics.php$
|
||||||
|
# Deny access to any other PHP files that do not match the rules above.
|
||||||
|
# Specifically, disallow autoload.php from being served directly.
|
||||||
|
RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F]
|
||||||
|
|
||||||
|
# Rules to correctly serve gzip compressed CSS and JS files.
|
||||||
|
# Requires both mod_rewrite and mod_headers to be enabled.
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
|
||||||
|
RewriteCond %{HTTP:Accept-encoding} gzip
|
||||||
|
RewriteCond %{REQUEST_FILENAME}\.gz -s
|
||||||
|
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
|
||||||
|
|
||||||
|
# Serve gzip compressed JS files if they exist and the client accepts gzip.
|
||||||
|
RewriteCond %{HTTP:Accept-encoding} gzip
|
||||||
|
RewriteCond %{REQUEST_FILENAME}\.gz -s
|
||||||
|
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
|
||||||
|
|
||||||
|
# Serve correct content types, and prevent mod_deflate double gzip.
|
||||||
|
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
|
||||||
|
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
|
||||||
|
|
||||||
|
<FilesMatch "(\.js\.gz|\.css\.gz)$">
|
||||||
|
# Serve correct encoding type.
|
||||||
|
Header set Content-Encoding gzip
|
||||||
|
# Force proxies to cache gzipped & non-gzipped css/js files separately.
|
||||||
|
Header append Vary Accept-Encoding
|
||||||
|
</FilesMatch>
|
||||||
|
</IfModule>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Various header fixes.
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
# Disable content sniffing, since it's an attack vector.
|
||||||
|
Header always set X-Content-Type-Options nosniff
|
||||||
|
# Disable Proxy header, since it's an attack vector.
|
||||||
|
RequestHeader unset Proxy
|
||||||
|
</IfModule>
|
17
drupal-tailwindcss-purgecss-test/web/autoload.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Includes the autoloader created by Composer.
|
||||||
|
*
|
||||||
|
* This file was generated by drupal-composer/drupal-scaffold.
|
||||||
|
* https://github.com/drupal-composer/drupal-scaffold
|
||||||
|
*
|
||||||
|
* @see composer.json
|
||||||
|
* @see index.php
|
||||||
|
* @see core/install.php
|
||||||
|
* @see core/rebuild.php
|
||||||
|
* @see core/modules/statistics/statistics.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
return require __DIR__ . '/../vendor/autoload.php';
|
22
drupal-tailwindcss-purgecss-test/web/index.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* The PHP page that serves all page requests on a Drupal installation.
|
||||||
|
*
|
||||||
|
* All Drupal code is released under the GNU General Public License.
|
||||||
|
* See COPYRIGHT.txt and LICENSE.txt files in the "core" directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Drupal\Core\DrupalKernel;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
$autoloader = require_once 'autoload.php';
|
||||||
|
|
||||||
|
$kernel = new DrupalKernel('prod', $autoloader);
|
||||||
|
|
||||||
|
$request = Request::createFromGlobals();
|
||||||
|
$response = $kernel->handle($request);
|
||||||
|
$response->send();
|
||||||
|
|
||||||
|
$kernel->terminate($request, $response);
|
0
drupal-tailwindcss-purgecss-test/web/modules/.gitkeep
Normal file
0
drupal-tailwindcss-purgecss-test/web/profiles/.gitkeep
Normal file
61
drupal-tailwindcss-purgecss-test/web/robots.txt
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#
|
||||||
|
# robots.txt
|
||||||
|
#
|
||||||
|
# This file is to prevent the crawling and indexing of certain parts
|
||||||
|
# of your site by web crawlers and spiders run by sites like Yahoo!
|
||||||
|
# and Google. By telling these "robots" where not to go on your site,
|
||||||
|
# you save bandwidth and server resources.
|
||||||
|
#
|
||||||
|
# This file will be ignored unless it is at the root of your host:
|
||||||
|
# Used: http://example.com/robots.txt
|
||||||
|
# Ignored: http://example.com/site/robots.txt
|
||||||
|
#
|
||||||
|
# For more information about the robots.txt standard, see:
|
||||||
|
# http://www.robotstxt.org/robotstxt.html
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
# CSS, JS, Images
|
||||||
|
Allow: /core/*.css$
|
||||||
|
Allow: /core/*.css?
|
||||||
|
Allow: /core/*.js$
|
||||||
|
Allow: /core/*.js?
|
||||||
|
Allow: /core/*.gif
|
||||||
|
Allow: /core/*.jpg
|
||||||
|
Allow: /core/*.jpeg
|
||||||
|
Allow: /core/*.png
|
||||||
|
Allow: /core/*.svg
|
||||||
|
Allow: /profiles/*.css$
|
||||||
|
Allow: /profiles/*.css?
|
||||||
|
Allow: /profiles/*.js$
|
||||||
|
Allow: /profiles/*.js?
|
||||||
|
Allow: /profiles/*.gif
|
||||||
|
Allow: /profiles/*.jpg
|
||||||
|
Allow: /profiles/*.jpeg
|
||||||
|
Allow: /profiles/*.png
|
||||||
|
Allow: /profiles/*.svg
|
||||||
|
# Directories
|
||||||
|
Disallow: /core/
|
||||||
|
Disallow: /profiles/
|
||||||
|
# Files
|
||||||
|
Disallow: /README.txt
|
||||||
|
Disallow: /web.config
|
||||||
|
# Paths (clean URLs)
|
||||||
|
Disallow: /admin/
|
||||||
|
Disallow: /comment/reply/
|
||||||
|
Disallow: /filter/tips
|
||||||
|
Disallow: /node/add/
|
||||||
|
Disallow: /search/
|
||||||
|
Disallow: /user/register/
|
||||||
|
Disallow: /user/password/
|
||||||
|
Disallow: /user/login/
|
||||||
|
Disallow: /user/logout/
|
||||||
|
# Paths (no clean URLs)
|
||||||
|
Disallow: /index.php/admin/
|
||||||
|
Disallow: /index.php/comment/reply/
|
||||||
|
Disallow: /index.php/filter/tips
|
||||||
|
Disallow: /index.php/node/add/
|
||||||
|
Disallow: /index.php/search/
|
||||||
|
Disallow: /index.php/user/password/
|
||||||
|
Disallow: /index.php/user/register/
|
||||||
|
Disallow: /index.php/user/login/
|
||||||
|
Disallow: /index.php/user/logout/
|
|
@ -0,0 +1,174 @@
|
||||||
|
parameters:
|
||||||
|
session.storage.options:
|
||||||
|
# Default ini options for sessions.
|
||||||
|
#
|
||||||
|
# Some distributions of Linux (most notably Debian) ship their PHP
|
||||||
|
# installations with garbage collection (gc) disabled. Since Drupal depends
|
||||||
|
# on PHP's garbage collection for clearing sessions, ensure that garbage
|
||||||
|
# collection occurs by using the most common settings.
|
||||||
|
# @default 1
|
||||||
|
gc_probability: 1
|
||||||
|
# @default 100
|
||||||
|
gc_divisor: 100
|
||||||
|
#
|
||||||
|
# Set session lifetime (in seconds), i.e. the time from the user's last
|
||||||
|
# visit to the active session may be deleted by the session garbage
|
||||||
|
# collector. When a session is deleted, authenticated users are logged out,
|
||||||
|
# and the contents of the user's $_SESSION variable is discarded.
|
||||||
|
# @default 200000
|
||||||
|
gc_maxlifetime: 200000
|
||||||
|
#
|
||||||
|
# Set session cookie lifetime (in seconds), i.e. the time from the session
|
||||||
|
# is created to the cookie expires, i.e. when the browser is expected to
|
||||||
|
# discard the cookie. The value 0 means "until the browser is closed".
|
||||||
|
# @default 2000000
|
||||||
|
cookie_lifetime: 2000000
|
||||||
|
#
|
||||||
|
# Drupal automatically generates a unique session cookie name based on the
|
||||||
|
# full domain name used to access the site. This mechanism is sufficient
|
||||||
|
# for most use-cases, including multi-site deployments. However, if it is
|
||||||
|
# desired that a session can be reused across different subdomains, the
|
||||||
|
# cookie domain needs to be set to the shared base domain. Doing so assures
|
||||||
|
# that users remain logged in as they cross between various subdomains.
|
||||||
|
# To maximize compatibility and normalize the behavior across user agents,
|
||||||
|
# the cookie domain should start with a dot.
|
||||||
|
#
|
||||||
|
# @default none
|
||||||
|
# cookie_domain: '.example.com'
|
||||||
|
#
|
||||||
|
twig.config:
|
||||||
|
# Twig debugging:
|
||||||
|
#
|
||||||
|
# When debugging is enabled:
|
||||||
|
# - The markup of each Twig template is surrounded by HTML comments that
|
||||||
|
# contain theming information, such as template file name suggestions.
|
||||||
|
# - Note that this debugging markup will cause automated tests that directly
|
||||||
|
# check rendered HTML to fail. When running automated tests, 'debug'
|
||||||
|
# should be set to FALSE.
|
||||||
|
# - The dump() function can be used in Twig templates to output information
|
||||||
|
# about template variables.
|
||||||
|
# - Twig templates are automatically recompiled whenever the source code
|
||||||
|
# changes (see auto_reload below).
|
||||||
|
#
|
||||||
|
# For more information about debugging Twig templates, see
|
||||||
|
# https://www.drupal.org/node/1906392.
|
||||||
|
#
|
||||||
|
# Not recommended in production environments
|
||||||
|
# @default false
|
||||||
|
debug: false
|
||||||
|
# Twig auto-reload:
|
||||||
|
#
|
||||||
|
# Automatically recompile Twig templates whenever the source code changes.
|
||||||
|
# If you don't provide a value for auto_reload, it will be determined
|
||||||
|
# based on the value of debug.
|
||||||
|
#
|
||||||
|
# Not recommended in production environments
|
||||||
|
# @default null
|
||||||
|
auto_reload: null
|
||||||
|
# Twig cache:
|
||||||
|
#
|
||||||
|
# By default, Twig templates will be compiled and stored in the filesystem
|
||||||
|
# to increase performance. Disabling the Twig cache will recompile the
|
||||||
|
# templates from source each time they are used. In most cases the
|
||||||
|
# auto_reload setting above should be enabled rather than disabling the
|
||||||
|
# Twig cache.
|
||||||
|
#
|
||||||
|
# Not recommended in production environments
|
||||||
|
# @default true
|
||||||
|
cache: true
|
||||||
|
renderer.config:
|
||||||
|
# Renderer required cache contexts:
|
||||||
|
#
|
||||||
|
# The Renderer will automatically associate these cache contexts with every
|
||||||
|
# render array, hence varying every render array by these cache contexts.
|
||||||
|
#
|
||||||
|
# @default ['languages:language_interface', 'theme', 'user.permissions']
|
||||||
|
required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions']
|
||||||
|
# Renderer automatic placeholdering conditions:
|
||||||
|
#
|
||||||
|
# Drupal allows portions of the page to be automatically deferred when
|
||||||
|
# rendering to improve cache performance. That is especially helpful for
|
||||||
|
# cache contexts that vary widely, such as the active user. On some sites
|
||||||
|
# those may be different, however, such as sites with only a handful of
|
||||||
|
# users. If you know what the high-cardinality cache contexts are for your
|
||||||
|
# site, specify those here. If you're not sure, the defaults are fairly safe
|
||||||
|
# in general.
|
||||||
|
#
|
||||||
|
# For more information about rendering optimizations see
|
||||||
|
# https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing
|
||||||
|
auto_placeholder_conditions:
|
||||||
|
# Max-age at or below which caching is not considered worthwhile.
|
||||||
|
#
|
||||||
|
# Disable by setting to -1.
|
||||||
|
#
|
||||||
|
# @default 0
|
||||||
|
max-age: 0
|
||||||
|
# Cache contexts with a high cardinality.
|
||||||
|
#
|
||||||
|
# Disable by setting to [].
|
||||||
|
#
|
||||||
|
# @default ['session', 'user']
|
||||||
|
contexts: ['session', 'user']
|
||||||
|
# Tags with a high invalidation frequency.
|
||||||
|
#
|
||||||
|
# Disable by setting to [].
|
||||||
|
#
|
||||||
|
# @default []
|
||||||
|
tags: []
|
||||||
|
# Cacheability debugging:
|
||||||
|
#
|
||||||
|
# Responses with cacheability metadata (CacheableResponseInterface instances)
|
||||||
|
# get X-Drupal-Cache-Tags and X-Drupal-Cache-Contexts headers.
|
||||||
|
#
|
||||||
|
# For more information about debugging cacheable responses, see
|
||||||
|
# https://www.drupal.org/developing/api/8/response/cacheable-response-interface
|
||||||
|
#
|
||||||
|
# Not recommended in production environments
|
||||||
|
# @default false
|
||||||
|
http.response.debug_cacheability_headers: false
|
||||||
|
factory.keyvalue:
|
||||||
|
{}
|
||||||
|
# Default key/value storage service to use.
|
||||||
|
# @default keyvalue.database
|
||||||
|
# default: keyvalue.database
|
||||||
|
# Collection-specific overrides.
|
||||||
|
# state: keyvalue.database
|
||||||
|
factory.keyvalue.expirable:
|
||||||
|
{}
|
||||||
|
# Default key/value expirable storage service to use.
|
||||||
|
# @default keyvalue.database.expirable
|
||||||
|
# default: keyvalue.database.expirable
|
||||||
|
# Allowed protocols for URL generation.
|
||||||
|
filter_protocols:
|
||||||
|
- http
|
||||||
|
- https
|
||||||
|
- ftp
|
||||||
|
- news
|
||||||
|
- nntp
|
||||||
|
- tel
|
||||||
|
- telnet
|
||||||
|
- mailto
|
||||||
|
- irc
|
||||||
|
- ssh
|
||||||
|
- sftp
|
||||||
|
- webcal
|
||||||
|
- rtsp
|
||||||
|
|
||||||
|
# Configure Cross-Site HTTP requests (CORS).
|
||||||
|
# Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
|
||||||
|
# for more information about the topic in general.
|
||||||
|
# Note: By default the configuration is disabled.
|
||||||
|
cors.config:
|
||||||
|
enabled: false
|
||||||
|
# Specify allowed headers, like 'x-allowed-header'.
|
||||||
|
allowedHeaders: []
|
||||||
|
# Specify allowed request methods, specify ['*'] to allow all possible ones.
|
||||||
|
allowedMethods: []
|
||||||
|
# Configure requests allowed from specific origins.
|
||||||
|
allowedOrigins: ['*']
|
||||||
|
# Sets the Access-Control-Expose-Headers header.
|
||||||
|
exposedHeaders: false
|
||||||
|
# Sets the Access-Control-Max-Age header.
|
||||||
|
maxAge: false
|
||||||
|
# Sets the Access-Control-Allow-Credentials header.
|
||||||
|
supportsCredentials: false
|
|
@ -0,0 +1,779 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// @codingStandardsIgnoreFile
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Drupal site-specific configuration file.
|
||||||
|
*
|
||||||
|
* IMPORTANT NOTE:
|
||||||
|
* This file may have been set to read-only by the Drupal installation program.
|
||||||
|
* If you make changes to this file, be sure to protect it again after making
|
||||||
|
* your modifications. Failure to remove write permissions to this file is a
|
||||||
|
* security risk.
|
||||||
|
*
|
||||||
|
* In order to use the selection rules below the multisite aliasing file named
|
||||||
|
* sites/sites.php must be present. Its optional settings will be loaded, and
|
||||||
|
* the aliases in the array $sites will override the default directory rules
|
||||||
|
* below. See sites/example.sites.php for more information about aliases.
|
||||||
|
*
|
||||||
|
* The configuration directory will be discovered by stripping the website's
|
||||||
|
* hostname from left to right and pathname from right to left. The first
|
||||||
|
* configuration file found will be used and any others will be ignored. If no
|
||||||
|
* other configuration file is found then the default configuration file at
|
||||||
|
* 'sites/default' will be used.
|
||||||
|
*
|
||||||
|
* For example, for a fictitious site installed at
|
||||||
|
* https://www.drupal.org:8080/mysite/test/, the 'settings.php' file is searched
|
||||||
|
* for in the following directories:
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org.mysite.test
|
||||||
|
* - sites/www.drupal.org.mysite.test
|
||||||
|
* - sites/drupal.org.mysite.test
|
||||||
|
* - sites/org.mysite.test
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org.mysite
|
||||||
|
* - sites/www.drupal.org.mysite
|
||||||
|
* - sites/drupal.org.mysite
|
||||||
|
* - sites/org.mysite
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org
|
||||||
|
* - sites/www.drupal.org
|
||||||
|
* - sites/drupal.org
|
||||||
|
* - sites/org
|
||||||
|
*
|
||||||
|
* - sites/default
|
||||||
|
*
|
||||||
|
* Note that if you are installing on a non-standard port number, prefix the
|
||||||
|
* hostname with that number. For example,
|
||||||
|
* https://www.drupal.org:8080/mysite/test/ could be loaded from
|
||||||
|
* sites/8080.www.drupal.org.mysite.test/.
|
||||||
|
*
|
||||||
|
* @see example.sites.php
|
||||||
|
* @see \Drupal\Core\DrupalKernel::getSitePath()
|
||||||
|
*
|
||||||
|
* In addition to customizing application settings through variables in
|
||||||
|
* settings.php, you can create a services.yml file in the same directory to
|
||||||
|
* register custom, site-specific service definitions and/or swap out default
|
||||||
|
* implementations with custom ones.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database settings:
|
||||||
|
*
|
||||||
|
* The $databases array specifies the database connection or
|
||||||
|
* connections that Drupal may use. Drupal is able to connect
|
||||||
|
* to multiple databases, including multiple types of databases,
|
||||||
|
* during the same request.
|
||||||
|
*
|
||||||
|
* One example of the simplest connection array is shown below. To use the
|
||||||
|
* sample settings, copy and uncomment the code below between the @code and
|
||||||
|
* @endcode lines and paste it after the $databases declaration. You will need
|
||||||
|
* to replace the database username and password and possibly the host and port
|
||||||
|
* with the appropriate credentials for your database system.
|
||||||
|
*
|
||||||
|
* The next section describes how to customize the $databases array for more
|
||||||
|
* specific needs.
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array (
|
||||||
|
* 'database' => 'databasename',
|
||||||
|
* 'username' => 'sqlusername',
|
||||||
|
* 'password' => 'sqlpassword',
|
||||||
|
* 'host' => 'localhost',
|
||||||
|
* 'port' => '3306',
|
||||||
|
* 'driver' => 'mysql',
|
||||||
|
* 'prefix' => '',
|
||||||
|
* 'collation' => 'utf8mb4_general_ci',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$databases = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customizing database settings.
|
||||||
|
*
|
||||||
|
* Many of the values of the $databases array can be customized for your
|
||||||
|
* particular database system. Refer to the sample in the section above as a
|
||||||
|
* starting point.
|
||||||
|
*
|
||||||
|
* The "driver" property indicates what Drupal database driver the
|
||||||
|
* connection should use. This is usually the same as the name of the
|
||||||
|
* database type, such as mysql or sqlite, but not always. The other
|
||||||
|
* properties will vary depending on the driver. For SQLite, you must
|
||||||
|
* specify a database file name in a directory that is writable by the
|
||||||
|
* webserver. For most other drivers, you must specify a
|
||||||
|
* username, password, host, and database name.
|
||||||
|
*
|
||||||
|
* Transaction support is enabled by default for all drivers that support it,
|
||||||
|
* including MySQL. To explicitly disable it, set the 'transactions' key to
|
||||||
|
* FALSE.
|
||||||
|
* Note that some configurations of MySQL, such as the MyISAM engine, don't
|
||||||
|
* support it and will proceed silently even if enabled. If you experience
|
||||||
|
* transaction related crashes with such configuration, set the 'transactions'
|
||||||
|
* key to FALSE.
|
||||||
|
*
|
||||||
|
* For each database, you may optionally specify multiple "target" databases.
|
||||||
|
* A target database allows Drupal to try to send certain queries to a
|
||||||
|
* different database if it can but fall back to the default connection if not.
|
||||||
|
* That is useful for primary/replica replication, as Drupal may try to connect
|
||||||
|
* to a replica server when appropriate and if one is not available will simply
|
||||||
|
* fall back to the single primary server (The terms primary/replica are
|
||||||
|
* traditionally referred to as master/slave in database server documentation).
|
||||||
|
*
|
||||||
|
* The general format for the $databases array is as follows:
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = $info_array;
|
||||||
|
* $databases['default']['replica'][] = $info_array;
|
||||||
|
* $databases['default']['replica'][] = $info_array;
|
||||||
|
* $databases['extra']['default'] = $info_array;
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* In the above example, $info_array is an array of settings described above.
|
||||||
|
* The first line sets a "default" database that has one primary database
|
||||||
|
* (the second level default). The second and third lines create an array
|
||||||
|
* of potential replica databases. Drupal will select one at random for a given
|
||||||
|
* request as needed. The fourth line creates a new database with a name of
|
||||||
|
* "extra".
|
||||||
|
*
|
||||||
|
* You can optionally set prefixes for some or all database table names
|
||||||
|
* by using the 'prefix' setting. If a prefix is specified, the table
|
||||||
|
* name will be prepended with its value. Be sure to use valid database
|
||||||
|
* characters only, usually alphanumeric and underscore. If no prefixes
|
||||||
|
* are desired, leave it as an empty string ''.
|
||||||
|
*
|
||||||
|
* To have all database names prefixed, set 'prefix' as a string:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => 'main_',
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in
|
||||||
|
* Drupal 9.0. After that, only a single prefix for all tables will be
|
||||||
|
* supported.
|
||||||
|
*
|
||||||
|
* To provide prefixes for specific tables, set 'prefix' as an array.
|
||||||
|
* The array's keys are the table names and the values are the prefixes.
|
||||||
|
* The 'default' element is mandatory and holds the prefix for any tables
|
||||||
|
* not specified elsewhere in the array. Example:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => array(
|
||||||
|
* 'default' => 'main_',
|
||||||
|
* 'users' => 'shared_',
|
||||||
|
* 'sessions' => 'shared_',
|
||||||
|
* 'role' => 'shared_',
|
||||||
|
* 'authmap' => 'shared_',
|
||||||
|
* ),
|
||||||
|
* @endcode
|
||||||
|
* You can also use a reference to a schema/database as a prefix. This may be
|
||||||
|
* useful if your Drupal installation exists in a schema that is not the default
|
||||||
|
* or you want to access several databases from the same code base at the same
|
||||||
|
* time.
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => array(
|
||||||
|
* 'default' => 'main.',
|
||||||
|
* 'users' => 'shared.',
|
||||||
|
* 'sessions' => 'shared.',
|
||||||
|
* 'role' => 'shared.',
|
||||||
|
* 'authmap' => 'shared.',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* NOTE: MySQL and SQLite's definition of a schema is a database.
|
||||||
|
*
|
||||||
|
* Advanced users can add or override initial commands to execute when
|
||||||
|
* connecting to the database server, as well as PDO connection settings. For
|
||||||
|
* example, to enable MySQL SELECT queries to exceed the max_join_size system
|
||||||
|
* variable, and to reduce the database connection timeout to 5 seconds:
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'init_commands' => array(
|
||||||
|
* 'big_selects' => 'SET SQL_BIG_SELECTS=1',
|
||||||
|
* ),
|
||||||
|
* 'pdo' => array(
|
||||||
|
* PDO::ATTR_TIMEOUT => 5,
|
||||||
|
* ),
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* WARNING: The above defaults are designed for database portability. Changing
|
||||||
|
* them may cause unexpected behavior, including potential data loss. See
|
||||||
|
* https://www.drupal.org/developing/api/database/configuration for more
|
||||||
|
* information on these defaults and the potential issues.
|
||||||
|
*
|
||||||
|
* More details can be found in the constructor methods for each driver:
|
||||||
|
* - \Drupal\Core\Database\Driver\mysql\Connection::__construct()
|
||||||
|
* - \Drupal\Core\Database\Driver\pgsql\Connection::__construct()
|
||||||
|
* - \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
|
||||||
|
*
|
||||||
|
* Sample Database configuration format for PostgreSQL (pgsql):
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'driver' => 'pgsql',
|
||||||
|
* 'database' => 'databasename',
|
||||||
|
* 'username' => 'sqlusername',
|
||||||
|
* 'password' => 'sqlpassword',
|
||||||
|
* 'host' => 'localhost',
|
||||||
|
* 'prefix' => '',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Sample Database configuration format for SQLite (sqlite):
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'driver' => 'sqlite',
|
||||||
|
* 'database' => '/path/to/databasefilename',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Location of the site configuration files.
|
||||||
|
*
|
||||||
|
* The $config_directories array specifies the location of file system
|
||||||
|
* directories used for configuration data. On install, the "sync" directory is
|
||||||
|
* created. This is used for configuration imports. The "active" directory is
|
||||||
|
* not created by default since the default storage for active configuration is
|
||||||
|
* the database rather than the file system. (This can be changed. See "Active
|
||||||
|
* configuration settings" below).
|
||||||
|
*
|
||||||
|
* The default location for the "sync" directory is inside a randomly-named
|
||||||
|
* directory in the public files path. The setting below allows you to override
|
||||||
|
* the "sync" location.
|
||||||
|
*
|
||||||
|
* If you use files for the "active" configuration, you can tell the
|
||||||
|
* Configuration system where this directory is located by adding an entry with
|
||||||
|
* array key CONFIG_ACTIVE_DIRECTORY.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* $config_directories = array(
|
||||||
|
* CONFIG_SYNC_DIRECTORY => '/directory/outside/webroot',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$config_directories = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Settings:
|
||||||
|
*
|
||||||
|
* $settings contains environment-specific configuration, such as the files
|
||||||
|
* directory and reverse proxy address, and temporary configuration, such as
|
||||||
|
* security overrides.
|
||||||
|
*
|
||||||
|
* @see \Drupal\Core\Site\Settings::get()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Salt for one-time login links, cancel links, form tokens, etc.
|
||||||
|
*
|
||||||
|
* This variable will be set to a random value by the installer. All one-time
|
||||||
|
* login links will be invalidated if the value is changed. Note that if your
|
||||||
|
* site is deployed on a cluster of web servers, you must ensure that this
|
||||||
|
* variable has the same value on each server.
|
||||||
|
*
|
||||||
|
* For enhanced security, you may set this variable to the contents of a file
|
||||||
|
* outside your document root; you should also ensure that this file is not
|
||||||
|
* stored with backups of your database.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* $settings['hash_salt'] = file_get_contents('/home/example/salt.txt');
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$settings['hash_salt'] = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deployment identifier.
|
||||||
|
*
|
||||||
|
* Drupal's dependency injection container will be automatically invalidated and
|
||||||
|
* rebuilt when the Drupal core version changes. When updating contributed or
|
||||||
|
* custom code that changes the container, changing this identifier will also
|
||||||
|
* allow the container to be invalidated as soon as code is deployed.
|
||||||
|
*/
|
||||||
|
# $settings['deployment_identifier'] = \Drupal::VERSION;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access control for update.php script.
|
||||||
|
*
|
||||||
|
* If you are updating your Drupal installation using the update.php script but
|
||||||
|
* are not logged in using either an account with the "Administer software
|
||||||
|
* updates" permission or the site maintenance account (the account that was
|
||||||
|
* created during installation), you will need to modify the access check
|
||||||
|
* statement below. Change the FALSE to a TRUE to disable the access check.
|
||||||
|
* After finishing the upgrade, be sure to open this file again and change the
|
||||||
|
* TRUE back to a FALSE!
|
||||||
|
*/
|
||||||
|
$settings['update_free_access'] = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External access proxy settings:
|
||||||
|
*
|
||||||
|
* If your site must access the Internet via a web proxy then you can enter the
|
||||||
|
* proxy settings here. Set the full URL of the proxy, including the port, in
|
||||||
|
* variables:
|
||||||
|
* - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP
|
||||||
|
* requests.
|
||||||
|
* - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS
|
||||||
|
* requests.
|
||||||
|
* You can pass in the user name and password for basic authentication in the
|
||||||
|
* URLs in these settings.
|
||||||
|
*
|
||||||
|
* You can also define an array of host names that can be accessed directly,
|
||||||
|
* bypassing the proxy, in $settings['http_client_config']['proxy']['no'].
|
||||||
|
*/
|
||||||
|
# $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||||
|
# $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||||
|
# $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse Proxy Configuration:
|
||||||
|
*
|
||||||
|
* Reverse proxy servers are often used to enhance the performance
|
||||||
|
* of heavily visited sites and may also provide other site caching,
|
||||||
|
* security, or encryption benefits. In an environment where Drupal
|
||||||
|
* is behind a reverse proxy, the real IP address of the client should
|
||||||
|
* be determined such that the correct client IP address is available
|
||||||
|
* to Drupal's logging, statistics, and access management systems. In
|
||||||
|
* the most simple scenario, the proxy server will add an
|
||||||
|
* X-Forwarded-For header to the request that contains the client IP
|
||||||
|
* address. However, HTTP headers are vulnerable to spoofing, where a
|
||||||
|
* malicious client could bypass restrictions by setting the
|
||||||
|
* X-Forwarded-For header directly. Therefore, Drupal's proxy
|
||||||
|
* configuration requires the IP addresses of all remote proxies to be
|
||||||
|
* specified in $settings['reverse_proxy_addresses'] to work correctly.
|
||||||
|
*
|
||||||
|
* Enable this setting to get Drupal to determine the client IP from the
|
||||||
|
* X-Forwarded-For header. If you are unsure about this setting, do not have a
|
||||||
|
* reverse proxy, or Drupal operates in a shared hosting environment, this
|
||||||
|
* setting should remain commented out.
|
||||||
|
*
|
||||||
|
* In order for this setting to be used you must specify every possible
|
||||||
|
* reverse proxy IP address in $settings['reverse_proxy_addresses'].
|
||||||
|
* If a complete list of reverse proxies is not available in your
|
||||||
|
* environment (for example, if you use a CDN) you may set the
|
||||||
|
* $_SERVER['REMOTE_ADDR'] variable directly in settings.php.
|
||||||
|
* Be aware, however, that it is likely that this would allow IP
|
||||||
|
* address spoofing unless more advanced precautions are taken.
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify every reverse proxy IP address in your environment.
|
||||||
|
* This setting is required if $settings['reverse_proxy'] is TRUE.
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse proxy trusted headers.
|
||||||
|
*
|
||||||
|
* Sets which headers to trust from your reverse proxy.
|
||||||
|
*
|
||||||
|
* Common values are:
|
||||||
|
* - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
*
|
||||||
|
* Note the default value of
|
||||||
|
* @code
|
||||||
|
* \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
* @endcode
|
||||||
|
* is not secure by default. The value should be set to only the specific
|
||||||
|
* headers the reverse proxy uses. For example:
|
||||||
|
* @code
|
||||||
|
* \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* @endcode
|
||||||
|
* This would trust the following headers:
|
||||||
|
* - X_FORWARDED_FOR
|
||||||
|
* - X_FORWARDED_HOST
|
||||||
|
* - X_FORWARDED_PROTO
|
||||||
|
* - X_FORWARDED_PORT
|
||||||
|
*
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page caching:
|
||||||
|
*
|
||||||
|
* By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page
|
||||||
|
* views. This tells a HTTP proxy that it may return a page from its local
|
||||||
|
* cache without contacting the web server, if the user sends the same Cookie
|
||||||
|
* header as the user who originally requested the cached page. Without "Vary:
|
||||||
|
* Cookie", authenticated users would also be served the anonymous page from
|
||||||
|
* the cache. If the site has mostly anonymous users except a few known
|
||||||
|
* editors/administrators, the Vary header can be omitted. This allows for
|
||||||
|
* better caching in HTTP proxies (including reverse proxies), i.e. even if
|
||||||
|
* clients send different cookies, they still get content served from the cache.
|
||||||
|
* However, authenticated users should access the site directly (i.e. not use an
|
||||||
|
* HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid
|
||||||
|
* getting cached pages from the proxy.
|
||||||
|
*/
|
||||||
|
# $settings['omit_vary_cookie'] = TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache TTL for client error (4xx) responses.
|
||||||
|
*
|
||||||
|
* Items cached per-URL tend to result in a large number of cache items, and
|
||||||
|
* this can be problematic on 404 pages which by their nature are unbounded. A
|
||||||
|
* fixed TTL can be set for these items, defaulting to one hour, so that cache
|
||||||
|
* backends which do not support LRU can purge older entries. To disable caching
|
||||||
|
* of client error responses set the value to 0. Currently applies only to
|
||||||
|
* page_cache module.
|
||||||
|
*/
|
||||||
|
# $settings['cache_ttl_4xx'] = 3600;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expiration of cached forms.
|
||||||
|
*
|
||||||
|
* Drupal's Form API stores details of forms in a cache and these entries are
|
||||||
|
* kept for at least 6 hours by default. Expired entries are cleared by cron.
|
||||||
|
*
|
||||||
|
* @see \Drupal\Core\Form\FormCache::setCache()
|
||||||
|
*/
|
||||||
|
# $settings['form_cache_expiration'] = 21600;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Loader.
|
||||||
|
*
|
||||||
|
* If the APC extension is detected, the Symfony APC class loader is used for
|
||||||
|
* performance reasons. Detection can be prevented by setting
|
||||||
|
* class_loader_auto_detect to false, as in the example below.
|
||||||
|
*/
|
||||||
|
# $settings['class_loader_auto_detect'] = FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the APC extension is not detected, either because APC is missing or
|
||||||
|
* because auto-detection has been disabled, auto-loading falls back to
|
||||||
|
* Composer's ClassLoader, which is good for development as it does not break
|
||||||
|
* when code is moved in the file system. You can also decorate the base class
|
||||||
|
* loader with another cached solution than the Symfony APC class loader, as
|
||||||
|
* all production sites should have a cached class loader of some sort enabled.
|
||||||
|
*
|
||||||
|
* To do so, you may decorate and replace the local $class_loader variable. For
|
||||||
|
* example, to use Symfony's APC class loader without automatic detection,
|
||||||
|
* uncomment the code below.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
if ($settings['hash_salt']) {
|
||||||
|
$prefix = 'drupal.' . hash('sha256', 'drupal.' . $settings['hash_salt']);
|
||||||
|
$apc_loader = new \Symfony\Component\ClassLoader\ApcClassLoader($prefix, $class_loader);
|
||||||
|
unset($prefix);
|
||||||
|
$class_loader->unregister();
|
||||||
|
$apc_loader->register();
|
||||||
|
$class_loader = $apc_loader;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Authorized file system operations:
|
||||||
|
*
|
||||||
|
* The Update Manager module included with Drupal provides a mechanism for
|
||||||
|
* site administrators to securely install missing updates for the site
|
||||||
|
* directly through the web user interface. On securely-configured servers,
|
||||||
|
* the Update manager will require the administrator to provide SSH or FTP
|
||||||
|
* credentials before allowing the installation to proceed; this allows the
|
||||||
|
* site to update the new files as the user who owns all the Drupal files,
|
||||||
|
* instead of as the user the webserver is running as. On servers where the
|
||||||
|
* webserver user is itself the owner of the Drupal files, the administrator
|
||||||
|
* will not be prompted for SSH or FTP credentials (note that these server
|
||||||
|
* setups are common on shared hosting, but are inherently insecure).
|
||||||
|
*
|
||||||
|
* Some sites might wish to disable the above functionality, and only update
|
||||||
|
* the code directly via SSH or FTP themselves. This setting completely
|
||||||
|
* disables all functionality related to these authorized file operations.
|
||||||
|
*
|
||||||
|
* @see https://www.drupal.org/node/244924
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs to disable.
|
||||||
|
*/
|
||||||
|
# $settings['allow_authorize_operations'] = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default mode for directories and files written by Drupal.
|
||||||
|
*
|
||||||
|
* Value should be in PHP Octal Notation, with leading zero.
|
||||||
|
*/
|
||||||
|
# $settings['file_chmod_directory'] = 0775;
|
||||||
|
# $settings['file_chmod_file'] = 0664;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public file base URL:
|
||||||
|
*
|
||||||
|
* An alternative base URL to be used for serving public files. This must
|
||||||
|
* include any leading directory path.
|
||||||
|
*
|
||||||
|
* A different value from the domain used by Drupal to be used for accessing
|
||||||
|
* public files. This can be used for a simple CDN integration, or to improve
|
||||||
|
* security by serving user-uploaded files from a different domain or subdomain
|
||||||
|
* pointing to the same server. Do not include a trailing slash.
|
||||||
|
*/
|
||||||
|
# $settings['file_public_base_url'] = 'http://downloads.example.com/files';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public file path:
|
||||||
|
*
|
||||||
|
* A local file system path where public files will be stored. This directory
|
||||||
|
* must exist and be writable by Drupal. This directory must be relative to
|
||||||
|
* the Drupal installation directory and be accessible over the web.
|
||||||
|
*/
|
||||||
|
# $settings['file_public_path'] = 'sites/default/files';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private file path:
|
||||||
|
*
|
||||||
|
* A local file system path where private files will be stored. This directory
|
||||||
|
* must be absolute, outside of the Drupal installation directory and not
|
||||||
|
* accessible over the web.
|
||||||
|
*
|
||||||
|
* Note: Caches need to be cleared when this value is changed to make the
|
||||||
|
* private:// stream wrapper available to the system.
|
||||||
|
*
|
||||||
|
* See https://www.drupal.org/documentation/modules/file for more information
|
||||||
|
* about securing private files.
|
||||||
|
*/
|
||||||
|
# $settings['file_private_path'] = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Session write interval:
|
||||||
|
*
|
||||||
|
* Set the minimum interval between each session write to database.
|
||||||
|
* For performance reasons it defaults to 180.
|
||||||
|
*/
|
||||||
|
# $settings['session_write_interval'] = 180;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String overrides:
|
||||||
|
*
|
||||||
|
* To override specific strings on your site with or without enabling the Locale
|
||||||
|
* module, add an entry to this list. This functionality allows you to change
|
||||||
|
* a small number of your site's default English language interface strings.
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs to enable.
|
||||||
|
*
|
||||||
|
* The "en" part of the variable name, is dynamic and can be any langcode of
|
||||||
|
* any added language. (eg locale_custom_strings_de for german).
|
||||||
|
*/
|
||||||
|
# $settings['locale_custom_strings_en'][''] = [
|
||||||
|
# 'forum' => 'Discussion board',
|
||||||
|
# '@count min' => '@count minutes',
|
||||||
|
# ];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom theme for the offline page:
|
||||||
|
*
|
||||||
|
* This applies when the site is explicitly set to maintenance mode through the
|
||||||
|
* administration page or when the database is inactive due to an error.
|
||||||
|
* The template file should also be copied into the theme. It is located inside
|
||||||
|
* 'core/modules/system/templates/maintenance-page.html.twig'.
|
||||||
|
*
|
||||||
|
* Note: This setting does not apply to installation and update pages.
|
||||||
|
*/
|
||||||
|
# $settings['maintenance_theme'] = 'bartik';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP settings:
|
||||||
|
*
|
||||||
|
* To see what PHP settings are possible, including whether they can be set at
|
||||||
|
* runtime (by using ini_set()), read the PHP documentation:
|
||||||
|
* http://php.net/manual/ini.list.php
|
||||||
|
* See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime
|
||||||
|
* settings and the .htaccess file for non-runtime settings.
|
||||||
|
* Settings defined there should not be duplicated here so as to avoid conflict
|
||||||
|
* issues.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you encounter a situation where users post a large amount of text, and
|
||||||
|
* the result is stripped out upon viewing but can still be edited, Drupal's
|
||||||
|
* output filter may not have sufficient memory to process it. If you
|
||||||
|
* experience this issue, you may wish to uncomment the following two lines
|
||||||
|
* and increase the limits of these variables. For more information, see
|
||||||
|
* http://php.net/manual/pcre.configuration.php.
|
||||||
|
*/
|
||||||
|
# ini_set('pcre.backtrack_limit', 200000);
|
||||||
|
# ini_set('pcre.recursion_limit', 200000);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active configuration settings.
|
||||||
|
*
|
||||||
|
* By default, the active configuration is stored in the database in the
|
||||||
|
* {config} table. To use a different storage mechanism for the active
|
||||||
|
* configuration, do the following prior to installing:
|
||||||
|
* - Create an "active" directory and declare its path in $config_directories
|
||||||
|
* as explained under the 'Location of the site configuration files' section
|
||||||
|
* above in this file. To enhance security, you can declare a path that is
|
||||||
|
* outside your document root.
|
||||||
|
* - Override the 'bootstrap_config_storage' setting here. It must be set to a
|
||||||
|
* callable that returns an object that implements
|
||||||
|
* \Drupal\Core\Config\StorageInterface.
|
||||||
|
* - Override the service definition 'config.storage.active'. Put this
|
||||||
|
* override in a services.yml file in the same directory as settings.php
|
||||||
|
* (definitions in this file will override service definition defaults).
|
||||||
|
*/
|
||||||
|
# $settings['bootstrap_config_storage'] = ['Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration overrides.
|
||||||
|
*
|
||||||
|
* To globally override specific configuration values for this site,
|
||||||
|
* set them here. You usually don't need to use this feature. This is
|
||||||
|
* useful in a configuration file for a vhost or directory, rather than
|
||||||
|
* the default settings.php.
|
||||||
|
*
|
||||||
|
* Note that any values you provide in these variable overrides will not be
|
||||||
|
* viewable from the Drupal administration interface. The administration
|
||||||
|
* interface displays the values stored in configuration so that you can stage
|
||||||
|
* changes to other environments that don't have the overrides.
|
||||||
|
*
|
||||||
|
* There are particular configuration values that are risky to override. For
|
||||||
|
* example, overriding the list of installed modules in 'core.extension' is not
|
||||||
|
* supported as module install or uninstall has not occurred. Other examples
|
||||||
|
* include field storage configuration, because it has effects on database
|
||||||
|
* structure, and 'core.menu.static_menu_link_overrides' since this is cached in
|
||||||
|
* a way that is not config override aware. Also, note that changing
|
||||||
|
* configuration values in settings.php will not fire any of the configuration
|
||||||
|
* change events.
|
||||||
|
*/
|
||||||
|
# $config['system.file']['path']['temporary'] = '/tmp';
|
||||||
|
# $config['system.site']['name'] = 'My Drupal site';
|
||||||
|
# $config['system.theme']['default'] = 'stark';
|
||||||
|
# $config['user.settings']['anonymous'] = 'Visitor';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fast 404 pages:
|
||||||
|
*
|
||||||
|
* Drupal can generate fully themed 404 pages. However, some of these responses
|
||||||
|
* are for images or other resource files that are not displayed to the user.
|
||||||
|
* This can waste bandwidth, and also generate server load.
|
||||||
|
*
|
||||||
|
* The options below return a simple, fast 404 page for URLs matching a
|
||||||
|
* specific pattern:
|
||||||
|
* - $config['system.performance']['fast_404']['exclude_paths']: A regular
|
||||||
|
* expression to match paths to exclude, such as images generated by image
|
||||||
|
* styles, or dynamically-resized images. The default pattern provided below
|
||||||
|
* also excludes the private file system. If you need to add more paths, you
|
||||||
|
* can add '|path' to the expression.
|
||||||
|
* - $config['system.performance']['fast_404']['paths']: A regular expression to
|
||||||
|
* match paths that should return a simple 404 page, rather than the fully
|
||||||
|
* themed 404 page. If you don't have any aliases ending in htm or html you
|
||||||
|
* can add '|s?html?' to the expression.
|
||||||
|
* - $config['system.performance']['fast_404']['html']: The html to return for
|
||||||
|
* simple 404 pages.
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs if you would like to alter this functionality.
|
||||||
|
*/
|
||||||
|
# $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//';
|
||||||
|
# $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
|
||||||
|
# $config['system.performance']['fast_404']['html'] = '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL "@path" was not found on this server.</p></body></html>';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load services definition file.
|
||||||
|
*/
|
||||||
|
$settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the default service container class.
|
||||||
|
*
|
||||||
|
* This is useful for example to trace the service container for performance
|
||||||
|
* tracking purposes, for testing a service container with an error condition or
|
||||||
|
* to test a service container that throws an exception.
|
||||||
|
*/
|
||||||
|
# $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the default yaml parser class.
|
||||||
|
*
|
||||||
|
* Provide a fully qualified class name here if you would like to provide an
|
||||||
|
* alternate implementation YAML parser. The class must implement the
|
||||||
|
* \Drupal\Component\Serialization\SerializationInterface interface.
|
||||||
|
*/
|
||||||
|
# $settings['yaml_parser_class'] = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trusted host configuration.
|
||||||
|
*
|
||||||
|
* Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host
|
||||||
|
* header spoofing.
|
||||||
|
*
|
||||||
|
* To enable the trusted host mechanism, you enable your allowable hosts
|
||||||
|
* in $settings['trusted_host_patterns']. This should be an array of regular
|
||||||
|
* expression patterns, without delimiters, representing the hosts you would
|
||||||
|
* like to allow.
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* @code
|
||||||
|
* $settings['trusted_host_patterns'] = array(
|
||||||
|
* '^www\.example\.com$',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* will allow the site to only run from www.example.com.
|
||||||
|
*
|
||||||
|
* If you are running multisite, or if you are running your site from
|
||||||
|
* different domain names (eg, you don't redirect http://www.example.com to
|
||||||
|
* http://example.com), you should specify all of the host patterns that are
|
||||||
|
* allowed by your site.
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* @code
|
||||||
|
* $settings['trusted_host_patterns'] = array(
|
||||||
|
* '^example\.com$',
|
||||||
|
* '^.+\.example\.com$',
|
||||||
|
* '^example\.org$',
|
||||||
|
* '^.+\.example\.org$',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* will allow the site to run off of all variants of example.com and
|
||||||
|
* example.org, with all subdomains included.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default list of directories that will be ignored by Drupal's file API.
|
||||||
|
*
|
||||||
|
* By default ignore node_modules and bower_components folders to avoid issues
|
||||||
|
* with common frontend tools and recursive scanning of directories looking for
|
||||||
|
* extensions.
|
||||||
|
*
|
||||||
|
* @see file_scan_directory()
|
||||||
|
* @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory()
|
||||||
|
*/
|
||||||
|
$settings['file_scan_ignore_directories'] = [
|
||||||
|
'node_modules',
|
||||||
|
'bower_components',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default number of entities to update in a batch process.
|
||||||
|
*
|
||||||
|
* This is used by update and post-update functions that need to go through and
|
||||||
|
* change all the entities on a site, so it is useful to increase this number
|
||||||
|
* if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a
|
||||||
|
* larger number of entities to be processed in a single batch run.
|
||||||
|
*/
|
||||||
|
$settings['entity_update_batch_size'] = 50;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entity update backup.
|
||||||
|
*
|
||||||
|
* This is used to inform the entity storage handler that the backup tables as
|
||||||
|
* well as the original entity type and field storage definitions should be
|
||||||
|
* retained after a successful entity update process.
|
||||||
|
*/
|
||||||
|
$settings['entity_update_backup'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load local development override configuration, if available.
|
||||||
|
*
|
||||||
|
* Use settings.local.php to override variables on secondary (staging,
|
||||||
|
* development, etc) installations of this site. Typically used to disable
|
||||||
|
* caching, JavaScript/CSS compression, re-routing of outgoing emails, and
|
||||||
|
* other things that should not happen on development and testing sites.
|
||||||
|
*
|
||||||
|
* Keep this code block at the end of this file to take full effect.
|
||||||
|
*/
|
||||||
|
#
|
||||||
|
# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
|
||||||
|
# include $app_root . '/' . $site_path . '/settings.local.php';
|
||||||
|
# }
|
799
drupal-tailwindcss-purgecss-test/web/sites/default/settings.php
Normal file
|
@ -0,0 +1,799 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// @codingStandardsIgnoreFile
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Drupal site-specific configuration file.
|
||||||
|
*
|
||||||
|
* IMPORTANT NOTE:
|
||||||
|
* This file may have been set to read-only by the Drupal installation program.
|
||||||
|
* If you make changes to this file, be sure to protect it again after making
|
||||||
|
* your modifications. Failure to remove write permissions to this file is a
|
||||||
|
* security risk.
|
||||||
|
*
|
||||||
|
* In order to use the selection rules below the multisite aliasing file named
|
||||||
|
* sites/sites.php must be present. Its optional settings will be loaded, and
|
||||||
|
* the aliases in the array $sites will override the default directory rules
|
||||||
|
* below. See sites/example.sites.php for more information about aliases.
|
||||||
|
*
|
||||||
|
* The configuration directory will be discovered by stripping the website's
|
||||||
|
* hostname from left to right and pathname from right to left. The first
|
||||||
|
* configuration file found will be used and any others will be ignored. If no
|
||||||
|
* other configuration file is found then the default configuration file at
|
||||||
|
* 'sites/default' will be used.
|
||||||
|
*
|
||||||
|
* For example, for a fictitious site installed at
|
||||||
|
* https://www.drupal.org:8080/mysite/test/, the 'settings.php' file is searched
|
||||||
|
* for in the following directories:
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org.mysite.test
|
||||||
|
* - sites/www.drupal.org.mysite.test
|
||||||
|
* - sites/drupal.org.mysite.test
|
||||||
|
* - sites/org.mysite.test
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org.mysite
|
||||||
|
* - sites/www.drupal.org.mysite
|
||||||
|
* - sites/drupal.org.mysite
|
||||||
|
* - sites/org.mysite
|
||||||
|
*
|
||||||
|
* - sites/8080.www.drupal.org
|
||||||
|
* - sites/www.drupal.org
|
||||||
|
* - sites/drupal.org
|
||||||
|
* - sites/org
|
||||||
|
*
|
||||||
|
* - sites/default
|
||||||
|
*
|
||||||
|
* Note that if you are installing on a non-standard port number, prefix the
|
||||||
|
* hostname with that number. For example,
|
||||||
|
* https://www.drupal.org:8080/mysite/test/ could be loaded from
|
||||||
|
* sites/8080.www.drupal.org.mysite.test/.
|
||||||
|
*
|
||||||
|
* @see example.sites.php
|
||||||
|
* @see \Drupal\Core\DrupalKernel::getSitePath()
|
||||||
|
*
|
||||||
|
* In addition to customizing application settings through variables in
|
||||||
|
* settings.php, you can create a services.yml file in the same directory to
|
||||||
|
* register custom, site-specific service definitions and/or swap out default
|
||||||
|
* implementations with custom ones.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database settings:
|
||||||
|
*
|
||||||
|
* The $databases array specifies the database connection or
|
||||||
|
* connections that Drupal may use. Drupal is able to connect
|
||||||
|
* to multiple databases, including multiple types of databases,
|
||||||
|
* during the same request.
|
||||||
|
*
|
||||||
|
* One example of the simplest connection array is shown below. To use the
|
||||||
|
* sample settings, copy and uncomment the code below between the @code and
|
||||||
|
* @endcode lines and paste it after the $databases declaration. You will need
|
||||||
|
* to replace the database username and password and possibly the host and port
|
||||||
|
* with the appropriate credentials for your database system.
|
||||||
|
*
|
||||||
|
* The next section describes how to customize the $databases array for more
|
||||||
|
* specific needs.
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array (
|
||||||
|
* 'database' => 'databasename',
|
||||||
|
* 'username' => 'sqlusername',
|
||||||
|
* 'password' => 'sqlpassword',
|
||||||
|
* 'host' => 'localhost',
|
||||||
|
* 'port' => '3306',
|
||||||
|
* 'driver' => 'mysql',
|
||||||
|
* 'prefix' => '',
|
||||||
|
* 'collation' => 'utf8mb4_general_ci',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$databases['default']['default'] = [
|
||||||
|
'database' => getenv('MYSQL_DATABASE'),
|
||||||
|
'driver' => 'mysql',
|
||||||
|
'host' => getenv('MYSQL_HOSTNAME'),
|
||||||
|
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
|
||||||
|
'password' => getenv('MYSQL_PASSWORD'),
|
||||||
|
'port' => getenv('MYSQL_PORT'),
|
||||||
|
'prefix' => '',
|
||||||
|
'username' => getenv('MYSQL_USER'),
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customizing database settings.
|
||||||
|
*
|
||||||
|
* Many of the values of the $databases array can be customized for your
|
||||||
|
* particular database system. Refer to the sample in the section above as a
|
||||||
|
* starting point.
|
||||||
|
*
|
||||||
|
* The "driver" property indicates what Drupal database driver the
|
||||||
|
* connection should use. This is usually the same as the name of the
|
||||||
|
* database type, such as mysql or sqlite, but not always. The other
|
||||||
|
* properties will vary depending on the driver. For SQLite, you must
|
||||||
|
* specify a database file name in a directory that is writable by the
|
||||||
|
* webserver. For most other drivers, you must specify a
|
||||||
|
* username, password, host, and database name.
|
||||||
|
*
|
||||||
|
* Transaction support is enabled by default for all drivers that support it,
|
||||||
|
* including MySQL. To explicitly disable it, set the 'transactions' key to
|
||||||
|
* FALSE.
|
||||||
|
* Note that some configurations of MySQL, such as the MyISAM engine, don't
|
||||||
|
* support it and will proceed silently even if enabled. If you experience
|
||||||
|
* transaction related crashes with such configuration, set the 'transactions'
|
||||||
|
* key to FALSE.
|
||||||
|
*
|
||||||
|
* For each database, you may optionally specify multiple "target" databases.
|
||||||
|
* A target database allows Drupal to try to send certain queries to a
|
||||||
|
* different database if it can but fall back to the default connection if not.
|
||||||
|
* That is useful for primary/replica replication, as Drupal may try to connect
|
||||||
|
* to a replica server when appropriate and if one is not available will simply
|
||||||
|
* fall back to the single primary server (The terms primary/replica are
|
||||||
|
* traditionally referred to as master/slave in database server documentation).
|
||||||
|
*
|
||||||
|
* The general format for the $databases array is as follows:
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = $info_array;
|
||||||
|
* $databases['default']['replica'][] = $info_array;
|
||||||
|
* $databases['default']['replica'][] = $info_array;
|
||||||
|
* $databases['extra']['default'] = $info_array;
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* In the above example, $info_array is an array of settings described above.
|
||||||
|
* The first line sets a "default" database that has one primary database
|
||||||
|
* (the second level default). The second and third lines create an array
|
||||||
|
* of potential replica databases. Drupal will select one at random for a given
|
||||||
|
* request as needed. The fourth line creates a new database with a name of
|
||||||
|
* "extra".
|
||||||
|
*
|
||||||
|
* You can optionally set prefixes for some or all database table names
|
||||||
|
* by using the 'prefix' setting. If a prefix is specified, the table
|
||||||
|
* name will be prepended with its value. Be sure to use valid database
|
||||||
|
* characters only, usually alphanumeric and underscore. If no prefixes
|
||||||
|
* are desired, leave it as an empty string ''.
|
||||||
|
*
|
||||||
|
* To have all database names prefixed, set 'prefix' as a string:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => 'main_',
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in
|
||||||
|
* Drupal 9.0. After that, only a single prefix for all tables will be
|
||||||
|
* supported.
|
||||||
|
*
|
||||||
|
* To provide prefixes for specific tables, set 'prefix' as an array.
|
||||||
|
* The array's keys are the table names and the values are the prefixes.
|
||||||
|
* The 'default' element is mandatory and holds the prefix for any tables
|
||||||
|
* not specified elsewhere in the array. Example:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => array(
|
||||||
|
* 'default' => 'main_',
|
||||||
|
* 'users' => 'shared_',
|
||||||
|
* 'sessions' => 'shared_',
|
||||||
|
* 'role' => 'shared_',
|
||||||
|
* 'authmap' => 'shared_',
|
||||||
|
* ),
|
||||||
|
* @endcode
|
||||||
|
* You can also use a reference to a schema/database as a prefix. This may be
|
||||||
|
* useful if your Drupal installation exists in a schema that is not the default
|
||||||
|
* or you want to access several databases from the same code base at the same
|
||||||
|
* time.
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* 'prefix' => array(
|
||||||
|
* 'default' => 'main.',
|
||||||
|
* 'users' => 'shared.',
|
||||||
|
* 'sessions' => 'shared.',
|
||||||
|
* 'role' => 'shared.',
|
||||||
|
* 'authmap' => 'shared.',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* NOTE: MySQL and SQLite's definition of a schema is a database.
|
||||||
|
*
|
||||||
|
* Advanced users can add or override initial commands to execute when
|
||||||
|
* connecting to the database server, as well as PDO connection settings. For
|
||||||
|
* example, to enable MySQL SELECT queries to exceed the max_join_size system
|
||||||
|
* variable, and to reduce the database connection timeout to 5 seconds:
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'init_commands' => array(
|
||||||
|
* 'big_selects' => 'SET SQL_BIG_SELECTS=1',
|
||||||
|
* ),
|
||||||
|
* 'pdo' => array(
|
||||||
|
* PDO::ATTR_TIMEOUT => 5,
|
||||||
|
* ),
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* WARNING: The above defaults are designed for database portability. Changing
|
||||||
|
* them may cause unexpected behavior, including potential data loss. See
|
||||||
|
* https://www.drupal.org/developing/api/database/configuration for more
|
||||||
|
* information on these defaults and the potential issues.
|
||||||
|
*
|
||||||
|
* More details can be found in the constructor methods for each driver:
|
||||||
|
* - \Drupal\Core\Database\Driver\mysql\Connection::__construct()
|
||||||
|
* - \Drupal\Core\Database\Driver\pgsql\Connection::__construct()
|
||||||
|
* - \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
|
||||||
|
*
|
||||||
|
* Sample Database configuration format for PostgreSQL (pgsql):
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'driver' => 'pgsql',
|
||||||
|
* 'database' => 'databasename',
|
||||||
|
* 'username' => 'sqlusername',
|
||||||
|
* 'password' => 'sqlpassword',
|
||||||
|
* 'host' => 'localhost',
|
||||||
|
* 'prefix' => '',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Sample Database configuration format for SQLite (sqlite):
|
||||||
|
* @code
|
||||||
|
* $databases['default']['default'] = array(
|
||||||
|
* 'driver' => 'sqlite',
|
||||||
|
* 'database' => '/path/to/databasefilename',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Location of the site configuration files.
|
||||||
|
*
|
||||||
|
* The $config_directories array specifies the location of file system
|
||||||
|
* directories used for configuration data. On install, the "sync" directory is
|
||||||
|
* created. This is used for configuration imports. The "active" directory is
|
||||||
|
* not created by default since the default storage for active configuration is
|
||||||
|
* the database rather than the file system. (This can be changed. See "Active
|
||||||
|
* configuration settings" below).
|
||||||
|
*
|
||||||
|
* The default location for the "sync" directory is inside a randomly-named
|
||||||
|
* directory in the public files path. The setting below allows you to override
|
||||||
|
* the "sync" location.
|
||||||
|
*
|
||||||
|
* If you use files for the "active" configuration, you can tell the
|
||||||
|
* Configuration system where this directory is located by adding an entry with
|
||||||
|
* array key CONFIG_ACTIVE_DIRECTORY.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* $config_directories = array(
|
||||||
|
* CONFIG_SYNC_DIRECTORY => '/directory/outside/webroot',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$config_directories = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Settings:
|
||||||
|
*
|
||||||
|
* $settings contains environment-specific configuration, such as the files
|
||||||
|
* directory and reverse proxy address, and temporary configuration, such as
|
||||||
|
* security overrides.
|
||||||
|
*
|
||||||
|
* @see \Drupal\Core\Site\Settings::get()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Salt for one-time login links, cancel links, form tokens, etc.
|
||||||
|
*
|
||||||
|
* This variable will be set to a random value by the installer. All one-time
|
||||||
|
* login links will be invalidated if the value is changed. Note that if your
|
||||||
|
* site is deployed on a cluster of web servers, you must ensure that this
|
||||||
|
* variable has the same value on each server.
|
||||||
|
*
|
||||||
|
* For enhanced security, you may set this variable to the contents of a file
|
||||||
|
* outside your document root; you should also ensure that this file is not
|
||||||
|
* stored with backups of your database.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @code
|
||||||
|
* $settings['hash_salt'] = file_get_contents('/home/example/salt.txt');
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
$settings['hash_salt'] = 'WLXxC5MIYYOo1bWHNBSJCKn2AEdn_LhuvaHg04oOqJgWxXXUnoKwuYV5_DrhVqkZkh9QuLR_pQ';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deployment identifier.
|
||||||
|
*
|
||||||
|
* Drupal's dependency injection container will be automatically invalidated and
|
||||||
|
* rebuilt when the Drupal core version changes. When updating contributed or
|
||||||
|
* custom code that changes the container, changing this identifier will also
|
||||||
|
* allow the container to be invalidated as soon as code is deployed.
|
||||||
|
*/
|
||||||
|
# $settings['deployment_identifier'] = \Drupal::VERSION;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access control for update.php script.
|
||||||
|
*
|
||||||
|
* If you are updating your Drupal installation using the update.php script but
|
||||||
|
* are not logged in using either an account with the "Administer software
|
||||||
|
* updates" permission or the site maintenance account (the account that was
|
||||||
|
* created during installation), you will need to modify the access check
|
||||||
|
* statement below. Change the FALSE to a TRUE to disable the access check.
|
||||||
|
* After finishing the upgrade, be sure to open this file again and change the
|
||||||
|
* TRUE back to a FALSE!
|
||||||
|
*/
|
||||||
|
$settings['update_free_access'] = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External access proxy settings:
|
||||||
|
*
|
||||||
|
* If your site must access the Internet via a web proxy then you can enter the
|
||||||
|
* proxy settings here. Set the full URL of the proxy, including the port, in
|
||||||
|
* variables:
|
||||||
|
* - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP
|
||||||
|
* requests.
|
||||||
|
* - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS
|
||||||
|
* requests.
|
||||||
|
* You can pass in the user name and password for basic authentication in the
|
||||||
|
* URLs in these settings.
|
||||||
|
*
|
||||||
|
* You can also define an array of host names that can be accessed directly,
|
||||||
|
* bypassing the proxy, in $settings['http_client_config']['proxy']['no'].
|
||||||
|
*/
|
||||||
|
# $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||||
|
# $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||||
|
# $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse Proxy Configuration:
|
||||||
|
*
|
||||||
|
* Reverse proxy servers are often used to enhance the performance
|
||||||
|
* of heavily visited sites and may also provide other site caching,
|
||||||
|
* security, or encryption benefits. In an environment where Drupal
|
||||||
|
* is behind a reverse proxy, the real IP address of the client should
|
||||||
|
* be determined such that the correct client IP address is available
|
||||||
|
* to Drupal's logging, statistics, and access management systems. In
|
||||||
|
* the most simple scenario, the proxy server will add an
|
||||||
|
* X-Forwarded-For header to the request that contains the client IP
|
||||||
|
* address. However, HTTP headers are vulnerable to spoofing, where a
|
||||||
|
* malicious client could bypass restrictions by setting the
|
||||||
|
* X-Forwarded-For header directly. Therefore, Drupal's proxy
|
||||||
|
* configuration requires the IP addresses of all remote proxies to be
|
||||||
|
* specified in $settings['reverse_proxy_addresses'] to work correctly.
|
||||||
|
*
|
||||||
|
* Enable this setting to get Drupal to determine the client IP from the
|
||||||
|
* X-Forwarded-For header. If you are unsure about this setting, do not have a
|
||||||
|
* reverse proxy, or Drupal operates in a shared hosting environment, this
|
||||||
|
* setting should remain commented out.
|
||||||
|
*
|
||||||
|
* In order for this setting to be used you must specify every possible
|
||||||
|
* reverse proxy IP address in $settings['reverse_proxy_addresses'].
|
||||||
|
* If a complete list of reverse proxies is not available in your
|
||||||
|
* environment (for example, if you use a CDN) you may set the
|
||||||
|
* $_SERVER['REMOTE_ADDR'] variable directly in settings.php.
|
||||||
|
* Be aware, however, that it is likely that this would allow IP
|
||||||
|
* address spoofing unless more advanced precautions are taken.
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify every reverse proxy IP address in your environment.
|
||||||
|
* This setting is required if $settings['reverse_proxy'] is TRUE.
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse proxy trusted headers.
|
||||||
|
*
|
||||||
|
* Sets which headers to trust from your reverse proxy.
|
||||||
|
*
|
||||||
|
* Common values are:
|
||||||
|
* - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
*
|
||||||
|
* Note the default value of
|
||||||
|
* @code
|
||||||
|
* \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
* @endcode
|
||||||
|
* is not secure by default. The value should be set to only the specific
|
||||||
|
* headers the reverse proxy uses. For example:
|
||||||
|
* @code
|
||||||
|
* \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* @endcode
|
||||||
|
* This would trust the following headers:
|
||||||
|
* - X_FORWARDED_FOR
|
||||||
|
* - X_FORWARDED_HOST
|
||||||
|
* - X_FORWARDED_PROTO
|
||||||
|
* - X_FORWARDED_PORT
|
||||||
|
*
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED
|
||||||
|
* @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies
|
||||||
|
*/
|
||||||
|
# $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page caching:
|
||||||
|
*
|
||||||
|
* By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page
|
||||||
|
* views. This tells a HTTP proxy that it may return a page from its local
|
||||||
|
* cache without contacting the web server, if the user sends the same Cookie
|
||||||
|
* header as the user who originally requested the cached page. Without "Vary:
|
||||||
|
* Cookie", authenticated users would also be served the anonymous page from
|
||||||
|
* the cache. If the site has mostly anonymous users except a few known
|
||||||
|
* editors/administrators, the Vary header can be omitted. This allows for
|
||||||
|
* better caching in HTTP proxies (including reverse proxies), i.e. even if
|
||||||
|
* clients send different cookies, they still get content served from the cache.
|
||||||
|
* However, authenticated users should access the site directly (i.e. not use an
|
||||||
|
* HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid
|
||||||
|
* getting cached pages from the proxy.
|
||||||
|
*/
|
||||||
|
# $settings['omit_vary_cookie'] = TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache TTL for client error (4xx) responses.
|
||||||
|
*
|
||||||
|
* Items cached per-URL tend to result in a large number of cache items, and
|
||||||
|
* this can be problematic on 404 pages which by their nature are unbounded. A
|
||||||
|
* fixed TTL can be set for these items, defaulting to one hour, so that cache
|
||||||
|
* backends which do not support LRU can purge older entries. To disable caching
|
||||||
|
* of client error responses set the value to 0. Currently applies only to
|
||||||
|
* page_cache module.
|
||||||
|
*/
|
||||||
|
# $settings['cache_ttl_4xx'] = 3600;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expiration of cached forms.
|
||||||
|
*
|
||||||
|
* Drupal's Form API stores details of forms in a cache and these entries are
|
||||||
|
* kept for at least 6 hours by default. Expired entries are cleared by cron.
|
||||||
|
*
|
||||||
|
* @see \Drupal\Core\Form\FormCache::setCache()
|
||||||
|
*/
|
||||||
|
# $settings['form_cache_expiration'] = 21600;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Loader.
|
||||||
|
*
|
||||||
|
* If the APC extension is detected, the Symfony APC class loader is used for
|
||||||
|
* performance reasons. Detection can be prevented by setting
|
||||||
|
* class_loader_auto_detect to false, as in the example below.
|
||||||
|
*/
|
||||||
|
# $settings['class_loader_auto_detect'] = FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the APC extension is not detected, either because APC is missing or
|
||||||
|
* because auto-detection has been disabled, auto-loading falls back to
|
||||||
|
* Composer's ClassLoader, which is good for development as it does not break
|
||||||
|
* when code is moved in the file system. You can also decorate the base class
|
||||||
|
* loader with another cached solution than the Symfony APC class loader, as
|
||||||
|
* all production sites should have a cached class loader of some sort enabled.
|
||||||
|
*
|
||||||
|
* To do so, you may decorate and replace the local $class_loader variable. For
|
||||||
|
* example, to use Symfony's APC class loader without automatic detection,
|
||||||
|
* uncomment the code below.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
if ($settings['hash_salt']) {
|
||||||
|
$prefix = 'drupal.' . hash('sha256', 'drupal.' . $settings['hash_salt']);
|
||||||
|
$apc_loader = new \Symfony\Component\ClassLoader\ApcClassLoader($prefix, $class_loader);
|
||||||
|
unset($prefix);
|
||||||
|
$class_loader->unregister();
|
||||||
|
$apc_loader->register();
|
||||||
|
$class_loader = $apc_loader;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Authorized file system operations:
|
||||||
|
*
|
||||||
|
* The Update Manager module included with Drupal provides a mechanism for
|
||||||
|
* site administrators to securely install missing updates for the site
|
||||||
|
* directly through the web user interface. On securely-configured servers,
|
||||||
|
* the Update manager will require the administrator to provide SSH or FTP
|
||||||
|
* credentials before allowing the installation to proceed; this allows the
|
||||||
|
* site to update the new files as the user who owns all the Drupal files,
|
||||||
|
* instead of as the user the webserver is running as. On servers where the
|
||||||
|
* webserver user is itself the owner of the Drupal files, the administrator
|
||||||
|
* will not be prompted for SSH or FTP credentials (note that these server
|
||||||
|
* setups are common on shared hosting, but are inherently insecure).
|
||||||
|
*
|
||||||
|
* Some sites might wish to disable the above functionality, and only update
|
||||||
|
* the code directly via SSH or FTP themselves. This setting completely
|
||||||
|
* disables all functionality related to these authorized file operations.
|
||||||
|
*
|
||||||
|
* @see https://www.drupal.org/node/244924
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs to disable.
|
||||||
|
*/
|
||||||
|
# $settings['allow_authorize_operations'] = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default mode for directories and files written by Drupal.
|
||||||
|
*
|
||||||
|
* Value should be in PHP Octal Notation, with leading zero.
|
||||||
|
*/
|
||||||
|
# $settings['file_chmod_directory'] = 0775;
|
||||||
|
# $settings['file_chmod_file'] = 0664;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public file base URL:
|
||||||
|
*
|
||||||
|
* An alternative base URL to be used for serving public files. This must
|
||||||
|
* include any leading directory path.
|
||||||
|
*
|
||||||
|
* A different value from the domain used by Drupal to be used for accessing
|
||||||
|
* public files. This can be used for a simple CDN integration, or to improve
|
||||||
|
* security by serving user-uploaded files from a different domain or subdomain
|
||||||
|
* pointing to the same server. Do not include a trailing slash.
|
||||||
|
*/
|
||||||
|
# $settings['file_public_base_url'] = 'http://downloads.example.com/files';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public file path:
|
||||||
|
*
|
||||||
|
* A local file system path where public files will be stored. This directory
|
||||||
|
* must exist and be writable by Drupal. This directory must be relative to
|
||||||
|
* the Drupal installation directory and be accessible over the web.
|
||||||
|
*/
|
||||||
|
# $settings['file_public_path'] = 'sites/default/files';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private file path:
|
||||||
|
*
|
||||||
|
* A local file system path where private files will be stored. This directory
|
||||||
|
* must be absolute, outside of the Drupal installation directory and not
|
||||||
|
* accessible over the web.
|
||||||
|
*
|
||||||
|
* Note: Caches need to be cleared when this value is changed to make the
|
||||||
|
* private:// stream wrapper available to the system.
|
||||||
|
*
|
||||||
|
* See https://www.drupal.org/documentation/modules/file for more information
|
||||||
|
* about securing private files.
|
||||||
|
*/
|
||||||
|
# $settings['file_private_path'] = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Session write interval:
|
||||||
|
*
|
||||||
|
* Set the minimum interval between each session write to database.
|
||||||
|
* For performance reasons it defaults to 180.
|
||||||
|
*/
|
||||||
|
# $settings['session_write_interval'] = 180;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String overrides:
|
||||||
|
*
|
||||||
|
* To override specific strings on your site with or without enabling the Locale
|
||||||
|
* module, add an entry to this list. This functionality allows you to change
|
||||||
|
* a small number of your site's default English language interface strings.
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs to enable.
|
||||||
|
*
|
||||||
|
* The "en" part of the variable name, is dynamic and can be any langcode of
|
||||||
|
* any added language. (eg locale_custom_strings_de for german).
|
||||||
|
*/
|
||||||
|
# $settings['locale_custom_strings_en'][''] = [
|
||||||
|
# 'forum' => 'Discussion board',
|
||||||
|
# '@count min' => '@count minutes',
|
||||||
|
# ];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom theme for the offline page:
|
||||||
|
*
|
||||||
|
* This applies when the site is explicitly set to maintenance mode through the
|
||||||
|
* administration page or when the database is inactive due to an error.
|
||||||
|
* The template file should also be copied into the theme. It is located inside
|
||||||
|
* 'core/modules/system/templates/maintenance-page.html.twig'.
|
||||||
|
*
|
||||||
|
* Note: This setting does not apply to installation and update pages.
|
||||||
|
*/
|
||||||
|
# $settings['maintenance_theme'] = 'bartik';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP settings:
|
||||||
|
*
|
||||||
|
* To see what PHP settings are possible, including whether they can be set at
|
||||||
|
* runtime (by using ini_set()), read the PHP documentation:
|
||||||
|
* http://php.net/manual/ini.list.php
|
||||||
|
* See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime
|
||||||
|
* settings and the .htaccess file for non-runtime settings.
|
||||||
|
* Settings defined there should not be duplicated here so as to avoid conflict
|
||||||
|
* issues.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you encounter a situation where users post a large amount of text, and
|
||||||
|
* the result is stripped out upon viewing but can still be edited, Drupal's
|
||||||
|
* output filter may not have sufficient memory to process it. If you
|
||||||
|
* experience this issue, you may wish to uncomment the following two lines
|
||||||
|
* and increase the limits of these variables. For more information, see
|
||||||
|
* http://php.net/manual/pcre.configuration.php.
|
||||||
|
*/
|
||||||
|
# ini_set('pcre.backtrack_limit', 200000);
|
||||||
|
# ini_set('pcre.recursion_limit', 200000);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active configuration settings.
|
||||||
|
*
|
||||||
|
* By default, the active configuration is stored in the database in the
|
||||||
|
* {config} table. To use a different storage mechanism for the active
|
||||||
|
* configuration, do the following prior to installing:
|
||||||
|
* - Create an "active" directory and declare its path in $config_directories
|
||||||
|
* as explained under the 'Location of the site configuration files' section
|
||||||
|
* above in this file. To enhance security, you can declare a path that is
|
||||||
|
* outside your document root.
|
||||||
|
* - Override the 'bootstrap_config_storage' setting here. It must be set to a
|
||||||
|
* callable that returns an object that implements
|
||||||
|
* \Drupal\Core\Config\StorageInterface.
|
||||||
|
* - Override the service definition 'config.storage.active'. Put this
|
||||||
|
* override in a services.yml file in the same directory as settings.php
|
||||||
|
* (definitions in this file will override service definition defaults).
|
||||||
|
*/
|
||||||
|
# $settings['bootstrap_config_storage'] = ['Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration overrides.
|
||||||
|
*
|
||||||
|
* To globally override specific configuration values for this site,
|
||||||
|
* set them here. You usually don't need to use this feature. This is
|
||||||
|
* useful in a configuration file for a vhost or directory, rather than
|
||||||
|
* the default settings.php.
|
||||||
|
*
|
||||||
|
* Note that any values you provide in these variable overrides will not be
|
||||||
|
* viewable from the Drupal administration interface. The administration
|
||||||
|
* interface displays the values stored in configuration so that you can stage
|
||||||
|
* changes to other environments that don't have the overrides.
|
||||||
|
*
|
||||||
|
* There are particular configuration values that are risky to override. For
|
||||||
|
* example, overriding the list of installed modules in 'core.extension' is not
|
||||||
|
* supported as module install or uninstall has not occurred. Other examples
|
||||||
|
* include field storage configuration, because it has effects on database
|
||||||
|
* structure, and 'core.menu.static_menu_link_overrides' since this is cached in
|
||||||
|
* a way that is not config override aware. Also, note that changing
|
||||||
|
* configuration values in settings.php will not fire any of the configuration
|
||||||
|
* change events.
|
||||||
|
*/
|
||||||
|
# $config['system.file']['path']['temporary'] = '/tmp';
|
||||||
|
# $config['system.site']['name'] = 'My Drupal site';
|
||||||
|
# $config['system.theme']['default'] = 'stark';
|
||||||
|
# $config['user.settings']['anonymous'] = 'Visitor';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fast 404 pages:
|
||||||
|
*
|
||||||
|
* Drupal can generate fully themed 404 pages. However, some of these responses
|
||||||
|
* are for images or other resource files that are not displayed to the user.
|
||||||
|
* This can waste bandwidth, and also generate server load.
|
||||||
|
*
|
||||||
|
* The options below return a simple, fast 404 page for URLs matching a
|
||||||
|
* specific pattern:
|
||||||
|
* - $config['system.performance']['fast_404']['exclude_paths']: A regular
|
||||||
|
* expression to match paths to exclude, such as images generated by image
|
||||||
|
* styles, or dynamically-resized images. The default pattern provided below
|
||||||
|
* also excludes the private file system. If you need to add more paths, you
|
||||||
|
* can add '|path' to the expression.
|
||||||
|
* - $config['system.performance']['fast_404']['paths']: A regular expression to
|
||||||
|
* match paths that should return a simple 404 page, rather than the fully
|
||||||
|
* themed 404 page. If you don't have any aliases ending in htm or html you
|
||||||
|
* can add '|s?html?' to the expression.
|
||||||
|
* - $config['system.performance']['fast_404']['html']: The html to return for
|
||||||
|
* simple 404 pages.
|
||||||
|
*
|
||||||
|
* Remove the leading hash signs if you would like to alter this functionality.
|
||||||
|
*/
|
||||||
|
# $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//';
|
||||||
|
# $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
|
||||||
|
# $config['system.performance']['fast_404']['html'] = '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL "@path" was not found on this server.</p></body></html>';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load services definition file.
|
||||||
|
*/
|
||||||
|
$settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the default service container class.
|
||||||
|
*
|
||||||
|
* This is useful for example to trace the service container for performance
|
||||||
|
* tracking purposes, for testing a service container with an error condition or
|
||||||
|
* to test a service container that throws an exception.
|
||||||
|
*/
|
||||||
|
# $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the default yaml parser class.
|
||||||
|
*
|
||||||
|
* Provide a fully qualified class name here if you would like to provide an
|
||||||
|
* alternate implementation YAML parser. The class must implement the
|
||||||
|
* \Drupal\Component\Serialization\SerializationInterface interface.
|
||||||
|
*/
|
||||||
|
# $settings['yaml_parser_class'] = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trusted host configuration.
|
||||||
|
*
|
||||||
|
* Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host
|
||||||
|
* header spoofing.
|
||||||
|
*
|
||||||
|
* To enable the trusted host mechanism, you enable your allowable hosts
|
||||||
|
* in $settings['trusted_host_patterns']. This should be an array of regular
|
||||||
|
* expression patterns, without delimiters, representing the hosts you would
|
||||||
|
* like to allow.
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* @code
|
||||||
|
* $settings['trusted_host_patterns'] = array(
|
||||||
|
* '^www\.example\.com$',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* will allow the site to only run from www.example.com.
|
||||||
|
*
|
||||||
|
* If you are running multisite, or if you are running your site from
|
||||||
|
* different domain names (eg, you don't redirect http://www.example.com to
|
||||||
|
* http://example.com), you should specify all of the host patterns that are
|
||||||
|
* allowed by your site.
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* @code
|
||||||
|
* $settings['trusted_host_patterns'] = array(
|
||||||
|
* '^example\.com$',
|
||||||
|
* '^.+\.example\.com$',
|
||||||
|
* '^example\.org$',
|
||||||
|
* '^.+\.example\.org$',
|
||||||
|
* );
|
||||||
|
* @endcode
|
||||||
|
* will allow the site to run off of all variants of example.com and
|
||||||
|
* example.org, with all subdomains included.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default list of directories that will be ignored by Drupal's file API.
|
||||||
|
*
|
||||||
|
* By default ignore node_modules and bower_components folders to avoid issues
|
||||||
|
* with common frontend tools and recursive scanning of directories looking for
|
||||||
|
* extensions.
|
||||||
|
*
|
||||||
|
* @see file_scan_directory()
|
||||||
|
* @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory()
|
||||||
|
*/
|
||||||
|
$settings['file_scan_ignore_directories'] = [
|
||||||
|
'node_modules',
|
||||||
|
'bower_components',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default number of entities to update in a batch process.
|
||||||
|
*
|
||||||
|
* This is used by update and post-update functions that need to go through and
|
||||||
|
* change all the entities on a site, so it is useful to increase this number
|
||||||
|
* if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a
|
||||||
|
* larger number of entities to be processed in a single batch run.
|
||||||
|
*/
|
||||||
|
$settings['entity_update_batch_size'] = 50;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entity update backup.
|
||||||
|
*
|
||||||
|
* This is used to inform the entity storage handler that the backup tables as
|
||||||
|
* well as the original entity type and field storage definitions should be
|
||||||
|
* retained after a successful entity update process.
|
||||||
|
*/
|
||||||
|
$settings['entity_update_backup'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load local development override configuration, if available.
|
||||||
|
*
|
||||||
|
* Use settings.local.php to override variables on secondary (staging,
|
||||||
|
* development, etc) installations of this site. Typically used to disable
|
||||||
|
* caching, JavaScript/CSS compression, re-routing of outgoing emails, and
|
||||||
|
* other things that should not happen on development and testing sites.
|
||||||
|
*
|
||||||
|
* Keep this code block at the end of this file to take full effect.
|
||||||
|
*/
|
||||||
|
#
|
||||||
|
# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
|
||||||
|
# include $app_root . '/' . $site_path . '/settings.local.php';
|
||||||
|
# }
|
||||||
|
$config_directories['sync'] = '../config/sync';
|
||||||
|
$databases['default']['default'] = array (
|
||||||
|
'database' => 'default',
|
||||||
|
'username' => 'user',
|
||||||
|
'password' => 'user',
|
||||||
|
'prefix' => '',
|
||||||
|
'host' => 'db',
|
||||||
|
'port' => '3306',
|
||||||
|
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
|
||||||
|
'driver' => 'mysql',
|
||||||
|
);
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Local development services.
|
||||||
|
#
|
||||||
|
# To activate this feature, follow the instructions at the top of the
|
||||||
|
# 'example.settings.local.php' file, which sits next to this file.
|
||||||
|
parameters:
|
||||||
|
http.response.debug_cacheability_headers: true
|
||||||
|
services:
|
||||||
|
cache.backend.null:
|
||||||
|
class: Drupal\Core\Cache\NullBackendFactory
|
|
@ -0,0 +1,131 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// @codingStandardsIgnoreFile
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Local development override configuration feature.
|
||||||
|
*
|
||||||
|
* To activate this feature, copy and rename it such that its path plus
|
||||||
|
* filename is 'sites/default/settings.local.php'. Then, go to the bottom of
|
||||||
|
* 'sites/default/settings.php' and uncomment the commented lines that mention
|
||||||
|
* 'settings.local.php'.
|
||||||
|
*
|
||||||
|
* If you are using a site name in the path, such as 'sites/example.com', copy
|
||||||
|
* this file to 'sites/example.com/settings.local.php', and uncomment the lines
|
||||||
|
* at the bottom of 'sites/example.com/settings.php'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assertions.
|
||||||
|
*
|
||||||
|
* The Drupal project primarily uses runtime assertions to enforce the
|
||||||
|
* expectations of the API by failing when incorrect calls are made by code
|
||||||
|
* under development.
|
||||||
|
*
|
||||||
|
* @see http://php.net/assert
|
||||||
|
* @see https://www.drupal.org/node/2492225
|
||||||
|
*
|
||||||
|
* If you are using PHP 7.0 it is strongly recommended that you set
|
||||||
|
* zend.assertions=1 in the PHP.ini file (It cannot be changed from .htaccess
|
||||||
|
* or runtime) on development machines and to 0 in production.
|
||||||
|
*
|
||||||
|
* @see https://wiki.php.net/rfc/expectations
|
||||||
|
*/
|
||||||
|
assert_options(ASSERT_ACTIVE, TRUE);
|
||||||
|
\Drupal\Component\Assertion\Handle::register();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable local development services.
|
||||||
|
*/
|
||||||
|
$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show all error messages, with backtrace information.
|
||||||
|
*
|
||||||
|
* In case the error level could not be fetched from the database, as for
|
||||||
|
* example the database connection failed, we rely only on this value.
|
||||||
|
*/
|
||||||
|
$config['system.logging']['error_level'] = 'verbose';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable CSS and JS aggregation.
|
||||||
|
*/
|
||||||
|
$config['system.performance']['css']['preprocess'] = FALSE;
|
||||||
|
$config['system.performance']['js']['preprocess'] = FALSE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the render cache.
|
||||||
|
*
|
||||||
|
* Note: you should test with the render cache enabled, to ensure the correct
|
||||||
|
* cacheability metadata is present. However, in the early stages of
|
||||||
|
* development, you may want to disable it.
|
||||||
|
*
|
||||||
|
* This setting disables the render cache by using the Null cache back-end
|
||||||
|
* defined by the development.services.yml file above.
|
||||||
|
*
|
||||||
|
* Only use this setting once the site has been installed.
|
||||||
|
*/
|
||||||
|
# $settings['cache']['bins']['render'] = 'cache.backend.null';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable caching for migrations.
|
||||||
|
*
|
||||||
|
* Uncomment the code below to only store migrations in memory and not in the
|
||||||
|
* database. This makes it easier to develop custom migrations.
|
||||||
|
*/
|
||||||
|
# $settings['cache']['bins']['discovery_migration'] = 'cache.backend.memory';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable Internal Page Cache.
|
||||||
|
*
|
||||||
|
* Note: you should test with Internal Page Cache enabled, to ensure the correct
|
||||||
|
* cacheability metadata is present. However, in the early stages of
|
||||||
|
* development, you may want to disable it.
|
||||||
|
*
|
||||||
|
* This setting disables the page cache by using the Null cache back-end
|
||||||
|
* defined by the development.services.yml file above.
|
||||||
|
*
|
||||||
|
* Only use this setting once the site has been installed.
|
||||||
|
*/
|
||||||
|
# $settings['cache']['bins']['page'] = 'cache.backend.null';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable Dynamic Page Cache.
|
||||||
|
*
|
||||||
|
* Note: you should test with Dynamic Page Cache enabled, to ensure the correct
|
||||||
|
* cacheability metadata is present (and hence the expected behavior). However,
|
||||||
|
* in the early stages of development, you may want to disable it.
|
||||||
|
*/
|
||||||
|
# $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allow test modules and themes to be installed.
|
||||||
|
*
|
||||||
|
* Drupal ignores test modules and themes by default for performance reasons.
|
||||||
|
* During development it can be useful to install test extensions for debugging
|
||||||
|
* purposes.
|
||||||
|
*/
|
||||||
|
# $settings['extension_discovery_scan_tests'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable access to rebuild.php.
|
||||||
|
*
|
||||||
|
* This setting can be enabled to allow Drupal's php and database cached
|
||||||
|
* storage to be cleared via the rebuild.php page. Access to this page can also
|
||||||
|
* be gained by generating a query string from rebuild_token_calculator.sh and
|
||||||
|
* using these parameters in a request to rebuild.php.
|
||||||
|
*/
|
||||||
|
$settings['rebuild_access'] = TRUE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skip file system permissions hardening.
|
||||||
|
*
|
||||||
|
* The system module will periodically check the permissions of your site's
|
||||||
|
* site directory to ensure that it is not writable by the website user. For
|
||||||
|
* sites that are managed with a version control system, this can cause problems
|
||||||
|
* when files in that directory such as settings.php are updated, because the
|
||||||
|
* user pulling in the changes won't have permissions to modify files in the
|
||||||
|
* directory.
|
||||||
|
*/
|
||||||
|
$settings['skip_permissions_hardening'] = TRUE;
|
57
drupal-tailwindcss-purgecss-test/web/sites/example.sites.php
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// @codingStandardsIgnoreFile
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Configuration file for multi-site support and directory aliasing feature.
|
||||||
|
*
|
||||||
|
* This file is required for multi-site support and also allows you to define a
|
||||||
|
* set of aliases that map hostnames, ports, and pathnames to configuration
|
||||||
|
* directories in the sites directory. These aliases are loaded prior to
|
||||||
|
* scanning for directories, and they are exempt from the normal discovery
|
||||||
|
* rules. See default.settings.php to view how Drupal discovers the
|
||||||
|
* configuration directory when no alias is found.
|
||||||
|
*
|
||||||
|
* Aliases are useful on development servers, where the domain name may not be
|
||||||
|
* the same as the domain of the live server. Since Drupal stores file paths in
|
||||||
|
* the database (files, system table, etc.) this will ensure the paths are
|
||||||
|
* correct when the site is deployed to a live server.
|
||||||
|
*
|
||||||
|
* To activate this feature, copy and rename it such that its path plus
|
||||||
|
* filename is 'sites/sites.php'.
|
||||||
|
*
|
||||||
|
* Aliases are defined in an associative array named $sites. The array is
|
||||||
|
* written in the format: '<port>.<domain>.<path>' => 'directory'. As an
|
||||||
|
* example, to map https://www.drupal.org:8080/mysite/test to the configuration
|
||||||
|
* directory sites/example.com, the array should be defined as:
|
||||||
|
* @code
|
||||||
|
* $sites = [
|
||||||
|
* '8080.www.drupal.org.mysite.test' => 'example.com',
|
||||||
|
* ];
|
||||||
|
* @endcode
|
||||||
|
* The URL, https://www.drupal.org:8080/mysite/test/, could be a symbolic link
|
||||||
|
* or an Apache Alias directive that points to the Drupal root containing
|
||||||
|
* index.php. An alias could also be created for a subdomain. See the
|
||||||
|
* @link https://www.drupal.org/documentation/install online Drupal installation guide @endlink
|
||||||
|
* for more information on setting up domains, subdomains, and subdirectories.
|
||||||
|
*
|
||||||
|
* The following examples look for a site configuration in sites/example.com:
|
||||||
|
* @code
|
||||||
|
* URL: http://dev.drupal.org
|
||||||
|
* $sites['dev.drupal.org'] = 'example.com';
|
||||||
|
*
|
||||||
|
* URL: http://localhost/example
|
||||||
|
* $sites['localhost.example'] = 'example.com';
|
||||||
|
*
|
||||||
|
* URL: http://localhost:8080/example
|
||||||
|
* $sites['8080.localhost.example'] = 'example.com';
|
||||||
|
*
|
||||||
|
* URL: https://www.drupal.org:8080/mysite/test/
|
||||||
|
* $sites['8080.www.drupal.org.mysite.test'] = 'example.com';
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @see default.settings.php
|
||||||
|
* @see \Drupal\Core\DrupalKernel::getSitePath()
|
||||||
|
* @see https://www.drupal.org/documentation/install/multi-site
|
||||||
|
*/
|
0
drupal-tailwindcss-purgecss-test/web/themes/.gitkeep
Normal file
10
drupal-tailwindcss-purgecss-test/web/themes/contrib/tailwindcss/.gitignore
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/*.log
|
||||||
|
/mix-manifest.json
|
||||||
|
/node_modules/
|
||||||
|
|
||||||
|
# Ignore compiled assets.
|
||||||
|
# /dist/
|
||||||
|
|
||||||
|
# Ignore lock files.
|
||||||
|
/package-lock.json
|
||||||
|
/yarn.lock
|
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
|
@ -0,0 +1,37 @@
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Tailwind CSS Starter Kit Theme for Drupal 8.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
-----
|
||||||
|
|
||||||
|
```
|
||||||
|
mkdir -p themes/custom
|
||||||
|
cd themes/custom
|
||||||
|
git clone https://git.drupal.org/sandbox/opdavies-3015651 tailwindcss
|
||||||
|
```
|
||||||
|
|
||||||
|
To re-compile the CSS:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
------------
|
||||||
|
|
||||||
|
- Laravel Mix (https://github.com/JeffreyWay/laravel-mix) for PostCSS compiling
|
||||||
|
and asset generation.
|
||||||
|
- The Laravel Mix Tailwind plugin.
|
||||||
|
|
||||||
|
CONFIGURATION OVERRIDES
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Overrides made to the default tailwind.js file:
|
||||||
|
|
||||||
|
- `options.prefix` has been changed to `tw-`. This is so that some of
|
||||||
|
Tailwind's default classes like `block` don't apply to Drupal's default
|
||||||
|
markup.
|
||||||
|
- `options.important` has been changed to `true`.
|
35082
drupal-tailwindcss-purgecss-test/web/themes/contrib/tailwindcss/dist/main.css
vendored
Normal file
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
|
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"cross-env": "^5.2.0",
|
||||||
|
"laravel-mix": "^2.1.14",
|
||||||
|
"tailwindcss": "^1.0.1"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 7 KiB |
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
* This injects Tailwind's base styles, which is a combination of
|
||||||
|
* Normalize.css and some additional base styles.
|
||||||
|
*
|
||||||
|
* You can see the styles here:
|
||||||
|
* https://github.com/tailwindcss/tailwindcss/blob/master/css/preflight.css
|
||||||
|
*
|
||||||
|
* If using `postcss-import`, use this import instead:
|
||||||
|
*
|
||||||
|
* @import "tailwindcss/base";
|
||||||
|
*/
|
||||||
|
@tailwind base;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This injects any component classes registered by plugins.
|
||||||
|
*
|
||||||
|
* If using `postcss-import`, use this import instead:
|
||||||
|
*
|
||||||
|
* @import "tailwindcss/components";
|
||||||
|
*/
|
||||||
|
@tailwind components;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Here you would add any of your custom component classes; stuff that you'd
|
||||||
|
* want loaded *before* the utilities so that the utilities could still
|
||||||
|
* override them.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* .btn { ... }
|
||||||
|
* .form-input { ... }
|
||||||
|
*
|
||||||
|
* Or if using a preprocessor or `postcss-import`:
|
||||||
|
*
|
||||||
|
* @import "components/buttons";
|
||||||
|
* @import "components/forms";
|
||||||
|
*/
|
||||||
|
|
||||||
|
input {
|
||||||
|
@apply border border-gray-500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block,
|
||||||
|
.node {
|
||||||
|
@apply mb-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node__content p,
|
||||||
|
.node__content ul,
|
||||||
|
.node__content ol {
|
||||||
|
@apply mb-4 leading-normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This injects all of Tailwind's utility classes, generated based on your
|
||||||
|
* config file.
|
||||||
|
*
|
||||||
|
* If using `postcss-import`, use this import instead:
|
||||||
|
*
|
||||||
|
* @import "tailwindcss/utilities";
|
||||||
|
*/
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Here you would add any custom utilities you need that don't come out of the
|
||||||
|
* box with Tailwind.
|
||||||
|
*
|
||||||
|
* Example :
|
||||||
|
*
|
||||||
|
* .bg-pattern-graph-paper { ... }
|
||||||
|
* .skew-45 { ... }
|
||||||
|
*
|
||||||
|
* Or if using a preprocessor or `postcss-import`:
|
||||||
|
*
|
||||||
|
* @import "utilities/background-patterns";
|
||||||
|
* @import "utilities/skew-transforms";
|
||||||
|
*/
|
|
@ -0,0 +1,12 @@
|
||||||
|
module.exports = {
|
||||||
|
prefix: 'tw-',
|
||||||
|
important: true,
|
||||||
|
theme: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
variants: {},
|
||||||
|
plugins: [],
|
||||||
|
corePlugins: {
|
||||||
|
preflight: false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
name: Tailwind CSS Starter Kit
|
||||||
|
description: A starter kit theme for Drupal 8 and Tailwind CSS.
|
||||||
|
# core: 8.x
|
||||||
|
type: theme
|
||||||
|
base theme: classy
|
||||||
|
libraries:
|
||||||
|
- tailwindcss/global-styling
|
||||||
|
|
||||||
|
# Information added by Drupal.org packaging script on 2019-05-13
|
||||||
|
version: '8.x-2.1'
|
||||||
|
core: '8.x'
|
||||||
|
project: 'tailwindcss'
|
||||||
|
datestamp: 1557778084
|
|
@ -0,0 +1,4 @@
|
||||||
|
global-styling:
|
||||||
|
css:
|
||||||
|
base:
|
||||||
|
dist/main.css: {}
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Functions to support theming in the Tailwind CSS theme.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_preprocess_HOOK().
|
||||||
|
*/
|
||||||
|
function tailwindcss_preprocess_block(&$variables) {
|
||||||
|
if ($variables['base_plugin_id'] == 'system_branding_block') {
|
||||||
|
$variables['site_logo'] = '';
|
||||||
|
if ($variables['content']['site_logo']['#access'] && $variables['content']['site_logo']['#uri']) {
|
||||||
|
$variables['site_logo'] = str_replace('.svg', '.png', $variables['content']['site_logo']['#uri']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{% extends "block.html.twig" %}
|
||||||
|
{#
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Theme override for a branding block.
|
||||||
|
*
|
||||||
|
* Each branding element variable (logo, name, slogan) is only available if
|
||||||
|
* enabled in the block configuration.
|
||||||
|
*
|
||||||
|
* Available variables:
|
||||||
|
* - site_logo: Logo for site as defined in Appearance or theme settings.
|
||||||
|
* - site_name: Name for site as defined in Site information settings.
|
||||||
|
* - site_slogan: Slogan for site as defined in Site information settings.
|
||||||
|
*/
|
||||||
|
#}
|
||||||
|
{% block content %}
|
||||||
|
<div class="tw-flex tw-items-center">
|
||||||
|
{% if site_logo %}
|
||||||
|
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo tw-mr-2">
|
||||||
|
<img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if site_name %}
|
||||||
|
<div class="site-name tw-text-2xl">
|
||||||
|
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if site_slogan %}
|
||||||
|
<div class="site-slogan">{{ site_slogan }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,91 @@
|
||||||
|
{#
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Default theme implementation to display a single page.
|
||||||
|
*
|
||||||
|
* The doctype, html, head and body tags are not in this template. Instead they
|
||||||
|
* can be found in the html.html.twig template in this directory.
|
||||||
|
*
|
||||||
|
* Available variables:
|
||||||
|
*
|
||||||
|
* General utility variables:
|
||||||
|
* - base_path: The base URL path of the Drupal installation. Will usually be
|
||||||
|
* "/" unless you have installed Drupal in a sub-directory.
|
||||||
|
* - is_front: A flag indicating if the current page is the front page.
|
||||||
|
* - logged_in: A flag indicating if the user is registered and signed in.
|
||||||
|
* - is_admin: A flag indicating if the user has permission to access
|
||||||
|
* administration pages.
|
||||||
|
*
|
||||||
|
* Site identity:
|
||||||
|
* - front_page: The URL of the front page. Use this instead of base_path when
|
||||||
|
* linking to the front page. This includes the language domain or prefix.
|
||||||
|
*
|
||||||
|
* Page content (in order of occurrence in the default page.html.twig):
|
||||||
|
* - messages: Status and error messages. Should be displayed prominently.
|
||||||
|
* - node: Fully loaded node, if there is an automatically-loaded node
|
||||||
|
* associated with the page and the node ID is the second argument in the
|
||||||
|
* page's path (e.g. node/12345 and node/12345/revisions, but not
|
||||||
|
* comment/reply/12345).
|
||||||
|
*
|
||||||
|
* Regions:
|
||||||
|
* - page.header: Items for the header region.
|
||||||
|
* - page.primary_menu: Items for the primary menu region.
|
||||||
|
* - page.secondary_menu: Items for the secondary menu region.
|
||||||
|
* - page.highlighted: Items for the highlighted content region.
|
||||||
|
* - page.help: Dynamic help text, mostly for admin pages.
|
||||||
|
* - page.content: The main content of the current page.
|
||||||
|
* - page.sidebar_first: Items for the first sidebar.
|
||||||
|
* - page.sidebar_second: Items for the second sidebar.
|
||||||
|
* - page.footer: Items for the footer region.
|
||||||
|
* - page.breadcrumb: Items for the breadcrumb region.
|
||||||
|
*
|
||||||
|
* @see template_preprocess_page()
|
||||||
|
* @see html.html.twig
|
||||||
|
*
|
||||||
|
* @ingroup themeable
|
||||||
|
*/
|
||||||
|
#}
|
||||||
|
<div class="tw-container tw-mx-auto tw-p-4">
|
||||||
|
|
||||||
|
<header role="banner">
|
||||||
|
{{ page.header }}
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{ page.primary_menu }}
|
||||||
|
{{ page.secondary_menu }}
|
||||||
|
|
||||||
|
{{ page.breadcrumb }}
|
||||||
|
|
||||||
|
{{ page.highlighted }}
|
||||||
|
|
||||||
|
{{ page.help }}
|
||||||
|
|
||||||
|
<main role="main">
|
||||||
|
<a id="main-content" tabindex="-1"></a>{# link is in html.html.twig #}
|
||||||
|
|
||||||
|
<div class="md:tw-flex tw--mx-4">
|
||||||
|
<div class="md:tw-flex-1 tw-p-4">
|
||||||
|
{{ page.content }}
|
||||||
|
</div>{# /.layout-content #}
|
||||||
|
|
||||||
|
{% if page.sidebar_first %}
|
||||||
|
<aside class="md:tw-w-1/4 tw-p-4" role="complementary">
|
||||||
|
{{ page.sidebar_first }}
|
||||||
|
</aside>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.sidebar_second %}
|
||||||
|
<aside class="md:tw-w-1/4" role="complementary">
|
||||||
|
{{ page.sidebar_second }}
|
||||||
|
</aside>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{% if page.footer %}
|
||||||
|
<footer role="contentinfo">
|
||||||
|
{{ page.footer }}
|
||||||
|
</footer>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>{# /.layout-container #}
|
|
@ -0,0 +1,5 @@
|
||||||
|
let mix = require('laravel-mix');
|
||||||
|
|
||||||
|
mix.postCss('src/main.css', 'dist', [
|
||||||
|
require('tailwindcss')('./tailwind.config.js'),
|
||||||
|
])
|
31
drupal-tailwindcss-purgecss-test/web/update.php
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* The PHP page that handles updating the Drupal installation.
|
||||||
|
*
|
||||||
|
* All Drupal code is released under the GNU General Public License.
|
||||||
|
* See COPYRIGHT.txt and LICENSE.txt files in the "core" directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Drupal\Core\Update\UpdateKernel;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
$autoloader = require_once 'autoload.php';
|
||||||
|
|
||||||
|
// Disable garbage collection during test runs. Under certain circumstances the
|
||||||
|
// update path will create so many objects that garbage collection causes
|
||||||
|
// segmentation faults.
|
||||||
|
require_once 'core/includes/bootstrap.inc';
|
||||||
|
if (drupal_valid_test_ua()) {
|
||||||
|
gc_collect_cycles();
|
||||||
|
gc_disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
$kernel = new UpdateKernel('prod', $autoloader, FALSE);
|
||||||
|
$request = Request::createFromGlobals();
|
||||||
|
|
||||||
|
$response = $kernel->handle($request);
|
||||||
|
$response->send();
|
||||||
|
|
||||||
|
$kernel->terminate($request, $response);
|
103
drupal-tailwindcss-purgecss-test/web/web.config
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<system.webServer>
|
||||||
|
<!-- Don't show directory listings for URLs which map to a directory. -->
|
||||||
|
<directoryBrowse enabled="false" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Caching configuration was not delegated by default. Some hosters may not
|
||||||
|
delegate the caching configuration to site owners by default and that
|
||||||
|
may cause errors when users install. Uncomment this if you want to and
|
||||||
|
are allowed to enable caching.
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
<caching>
|
||||||
|
<profiles>
|
||||||
|
<add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />
|
||||||
|
<add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00" />
|
||||||
|
</profiles>
|
||||||
|
</caching>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<rewrite>
|
||||||
|
<rules>
|
||||||
|
<rule name="Protect files and directories from prying eyes" stopProcessing="true">
|
||||||
|
<match url="\.(engine|inc|install|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format|composer\.(json|lock))$" />
|
||||||
|
<action type="CustomResponse" statusCode="403" subStatusCode="0" statusReason="Forbidden" statusDescription="Access is forbidden." />
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule name="Force simple error message for requests for non-existent favicon.ico" stopProcessing="true">
|
||||||
|
<match url="favicon\.ico" />
|
||||||
|
<action type="CustomResponse" statusCode="404" subStatusCode="1" statusReason="File Not Found" statusDescription="The requested file favicon.ico was not found" />
|
||||||
|
<conditions>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
|
||||||
|
</conditions>
|
||||||
|
</rule>
|
||||||
|
<!-- If running on a PHP version affected by httpoxy vulnerability
|
||||||
|
uncomment the following rule to mitigate it's impact. To make this
|
||||||
|
rule work, you will also need to add HTTP_PROXY to the allowed server
|
||||||
|
variables manually in IIS. See https://www.drupal.org/node/2783079.
|
||||||
|
<rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">
|
||||||
|
<match url="*.*" />
|
||||||
|
<serverVariables>
|
||||||
|
<set name="HTTP_PROXY" value="" />
|
||||||
|
</serverVariables>
|
||||||
|
<action type="None" />
|
||||||
|
</rule>
|
||||||
|
-->
|
||||||
|
<!-- To redirect all users to access the site WITH the 'www.' prefix,
|
||||||
|
http://example.com/foo will be redirected to http://www.example.com/foo)
|
||||||
|
adapt and uncomment the following: -->
|
||||||
|
<!--
|
||||||
|
<rule name="Redirect to add www" stopProcessing="true">
|
||||||
|
<match url="^(.*)$" ignoreCase="false" />
|
||||||
|
<conditions>
|
||||||
|
<add input="{HTTP_HOST}" pattern="^example\.com$" />
|
||||||
|
</conditions>
|
||||||
|
<action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />
|
||||||
|
</rule>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- To redirect all users to access the site WITHOUT the 'www.' prefix,
|
||||||
|
http://www.example.com/foo will be redirected to http://example.com/foo)
|
||||||
|
adapt and uncomment the following: -->
|
||||||
|
<!--
|
||||||
|
<rule name="Redirect to remove www" stopProcessing="true">
|
||||||
|
<match url="^(.*)$" ignoreCase="false" />
|
||||||
|
<conditions>
|
||||||
|
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" />
|
||||||
|
</conditions>
|
||||||
|
<action type="Redirect" redirectType="Permanent" url="http://example.com/{R:1}" />
|
||||||
|
</rule>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Pass all requests not referring directly to files in the filesystem
|
||||||
|
to index.php. -->
|
||||||
|
<rule name="Short URLS" stopProcessing="true">
|
||||||
|
<match url="^(.*)$" ignoreCase="false" />
|
||||||
|
<conditions>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
|
||||||
|
<add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
|
||||||
|
</conditions>
|
||||||
|
<action type="Rewrite" url="index.php" />
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</rewrite>
|
||||||
|
|
||||||
|
<!-- If running Windows Server 2008 R2 this can be commented out -->
|
||||||
|
<!-- httpErrors>
|
||||||
|
<remove statusCode="404" subStatusCode="-1" />
|
||||||
|
<error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />
|
||||||
|
</httpErrors -->
|
||||||
|
|
||||||
|
<defaultDocument>
|
||||||
|
<!-- Set the default document -->
|
||||||
|
<files>
|
||||||
|
<clear />
|
||||||
|
<add value="index.php" />
|
||||||
|
</files>
|
||||||
|
</defaultDocument>
|
||||||
|
|
||||||
|
</system.webServer>
|
||||||
|
</configuration>
|
17
sculpin-minified-css-test/.editorconfig
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# This file is used by editors and IDEs to unify coding standards
|
||||||
|
# @see http://EditorConfig.org
|
||||||
|
# @standards PHP: http://www.php-fig.org/psr/psr-2/
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# Default configuration (applies to all file types)
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
|
||||||
|
# Markdown customizations
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
10
sculpin-minified-css-test/.gitignore
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/.sculpin/
|
||||||
|
/app/cache/*
|
||||||
|
/app/config/sculpin_kernel_*.yml
|
||||||
|
/app/config/sculpin_site_*.yml
|
||||||
|
/app/logs/*
|
||||||
|
/output_*/
|
||||||
|
/node_modules/
|
||||||
|
/source/build/
|
||||||
|
s3.conf
|
||||||
|
/vendor/
|
21
sculpin-minified-css-test/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Sculpin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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.
|
83
sculpin-minified-css-test/README.md
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
Sculpin Blog Skeleton
|
||||||
|
=====================
|
||||||
|
|
||||||
|
A skeleton for a Sculpin based blog.
|
||||||
|
|
||||||
|
Powered by [Sculpin](http://sculpin.io). =)
|
||||||
|
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
A very basic Sculpin based blog supporting the following features:
|
||||||
|
|
||||||
|
* Very minimal Bootstrap based theme.
|
||||||
|
* A handful of existing posts in `source/_posts/` to get you started. Feel
|
||||||
|
free to remove these when you are ready.
|
||||||
|
* An about page at `/about`.
|
||||||
|
* An index page at `/`. It displays all posts and paginates them.
|
||||||
|
* A blog archive page at `/blog`. It displays post titles broken down by
|
||||||
|
month and is paginated.
|
||||||
|
* A blog categories page at `/blog/categories`.
|
||||||
|
* A blog category index at `/blog/categories/$category`. Similar to the blog
|
||||||
|
archive except broken down by each category.
|
||||||
|
* A blog tags page at `/blog/tags`.
|
||||||
|
* A blog tag index at `/blog/tags/$tag`. Similar to the blog archive
|
||||||
|
except broken down by each tag.
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Sculpin is a PHP application and installed with the PHP package manager `composer`.
|
||||||
|
See https://getcomposer.org/ for installation instructions.
|
||||||
|
|
||||||
|
Unless you do a very basic website, you want some CSS and Javascript assets. Sculpin
|
||||||
|
uses `yarn` to manage them. See https://yarnpkg.com/en/docs/install for installation
|
||||||
|
instructions.
|
||||||
|
|
||||||
|
Install
|
||||||
|
-------
|
||||||
|
|
||||||
|
Create a new project using composer:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ composer create-project -s dev sculpin/blog-skeleton my-blog
|
||||||
|
```
|
||||||
|
|
||||||
|
This application uses [Symfony's Webpack Encore](https://symfony.com/doc/current/frontend.html)
|
||||||
|
to manage CSS, JavaScript and image assets. Install the JS dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cd my-blog
|
||||||
|
$ yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
|
||||||
|
First, start Encore to compile and update the assets in `source/assets/` into
|
||||||
|
`source/build/`. The watcher keeps running until you exit it manually:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ composer yarn-watch
|
||||||
|
```
|
||||||
|
|
||||||
|
In a new console, start the sculpin watcher to have your content updated as
|
||||||
|
soon as you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ composer sculpin-watch
|
||||||
|
```
|
||||||
|
|
||||||
|
Your newly generated clone of sculpin-blog-skeleton should now be accessible
|
||||||
|
at `http://localhost:8000/`.
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The skeleton provides you with useful configuration and some example data for
|
||||||
|
a Sculpin installation.
|
||||||
|
|
||||||
|
For more information about getting started with Sculpin, check out the
|
||||||
|
[Get Started page](https://sculpin.io/getstarted/) and have a look at the full
|
||||||
|
[documentation](https://sculpin.io/documentation/).
|
8
sculpin-minified-css-test/app/config/sculpin_kernel.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
sculpin_content_types:
|
||||||
|
posts:
|
||||||
|
permalink: blog/:year/:month/:day/:filename/
|
||||||
|
|
||||||
|
# To disable posts (e.g., if you aren't planning on having any posts and Sculpin's watch mode complains):
|
||||||
|
#sculpin_content_types:
|
||||||
|
# posts:
|
||||||
|
# enabled: false
|
9
sculpin-minified-css-test/app/config/sculpin_site.yml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# The contents of this file are parsed and made available as
|
||||||
|
# via `site.*`. So for example, {{ site.title }} can be used
|
||||||
|
# in a template to get the contents of the `title` key.
|
||||||
|
title: Sculpin Blog Skeleton
|
||||||
|
subtitle: To Get You Started
|
||||||
|
|
||||||
|
# Insert your disqus shortname
|
||||||
|
#disqus:
|
||||||
|
# shortname:
|
34
sculpin-minified-css-test/composer.json
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "sculpin/blog-skeleton",
|
||||||
|
"description": "A Skeleton for a Sculpin Based Blog",
|
||||||
|
"type": "sculpin-skeleton",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Dragonfly Development Inc.",
|
||||||
|
"email": "info@dflydev.com",
|
||||||
|
"homepage": "http://dflydev.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Beau Simensen",
|
||||||
|
"email": "beau@dflydev.com",
|
||||||
|
"homepage": "http://beausimensen.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"sculpin/sculpin": "^3.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"publish": [
|
||||||
|
"./publish.sh"
|
||||||
|
],
|
||||||
|
"sculpin-watch": [
|
||||||
|
"Composer\\Config::disableProcessTimeout",
|
||||||
|
"./vendor/bin/sculpin generate --watch --server"
|
||||||
|
],
|
||||||
|
"yarn-watch": [
|
||||||
|
"Composer\\Config::disableProcessTimeout",
|
||||||
|
"yarn encore dev --watch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
2444
sculpin-minified-css-test/composer.lock
generated
Normal file
11
sculpin-minified-css-test/package.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@symfony/webpack-encore": "^0.24.0",
|
||||||
|
"bootstrap": "^4.3.1",
|
||||||
|
"highlightjs": "^9.12.0",
|
||||||
|
"jquery": "^3.4",
|
||||||
|
"node-sass": "^4.11.0",
|
||||||
|
"popper.js": "^1.14.7",
|
||||||
|
"sass-loader": "^7.0.1"
|
||||||
|
}
|
||||||
|
}
|
9
sculpin-minified-css-test/publish.sh
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sculpin generate --env=prod
|
||||||
|
if [ $? -ne 0 ]; then echo "Could not generate the site"; exit 1; fi
|
||||||
|
|
||||||
|
# Add --delete right before "output_prod" to have rsync remove files that are
|
||||||
|
# deleted locally from the destination too. See README.md for an example.
|
||||||
|
rsync -avze 'ssh -p 4668' output_prod/ username@yoursculpinsite:public_html
|
||||||
|
if [ $? -ne 0 ]; then echo "Could not publish the site"; exit 1; fi
|
58
sculpin-minified-css-test/s3-publish.sh
Executable file
|
@ -0,0 +1,58 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ! -f "s3.conf" ]
|
||||||
|
then
|
||||||
|
echo "Unable to locate s3.conf file - use s3.conf.dist as a template for configuring your S3 settings."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
# Load config file
|
||||||
|
. s3.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -z "$1" -a "$1" != "--dry-run" -a "$1" != "-n" ]
|
||||||
|
then
|
||||||
|
echo "Usage: ./s3-publish.sh [--dry-run|-n]"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Would be a good idea to wipe out the prod env first, so that DELETE_REMOVED works properly
|
||||||
|
# If you're comfortable with that, uncomment the line below:
|
||||||
|
# rm -rf output_prod/*
|
||||||
|
|
||||||
|
vendor/bin/sculpin generate --env=prod || ( echo "Could not generate the site" && exit )
|
||||||
|
|
||||||
|
S3CMD_PATH=`which s3cmd`
|
||||||
|
if [ $? -ne 0 -o -z "$S3CMD_PATH" ]
|
||||||
|
then
|
||||||
|
echo "s3cmd not found - unable to deploy"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$S3_CONFIG" ]
|
||||||
|
then
|
||||||
|
echo "Unable to find s3cmd config file - unable to deploy"
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$S3_DELETE" = "true" ]
|
||||||
|
then
|
||||||
|
echo "Enabling DELETE_REMOVED"
|
||||||
|
DELETE_REMOVED='--delete-removed'
|
||||||
|
else
|
||||||
|
echo "Disabling DELETE_REMOVED"
|
||||||
|
DELETE_REMOVED='--no-delete-removed'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$S3_REGION" = "" ]
|
||||||
|
then
|
||||||
|
S3_REGION=US
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "--dry-run" -o "$1" = "-n" ]
|
||||||
|
then
|
||||||
|
DRY_RUN='--dry-run'
|
||||||
|
else
|
||||||
|
DRY_RUN=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
s3cmd --config="$S3_CONFIG" $DRY_RUN --force --recursive $DELETE_REMOVED --bucket-location=$S3_REGION --progress --acl-public sync output_prod/ s3://$S3_BUCKET
|
14
sculpin-minified-css-test/s3.conf.dist
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Path to s3cmd configuration file for your Amazon S3 bucket
|
||||||
|
# This is useful if you have multiple sets of credentials - you can give Sculpin a locked-down IAM key for deployments
|
||||||
|
S3_CONFIG=./.s3/s3cmd.conf
|
||||||
|
|
||||||
|
# Delete files from S3 bucket that are not created by sculpin (e.g., if you delete a blog post, this will remove the corresponding HTML files for you)
|
||||||
|
# NOTE: If you ever upload files to your bucket that are not a part of your sculpin deployment, THIS SETTING WILL DELETE THEM.
|
||||||
|
# This is why it is set to "false" by default; change to "true" in order to have sculpin fully manage your bucket contents.
|
||||||
|
S3_DELETE=false
|
||||||
|
|
||||||
|
# Region for S3. Set to Oregon by default, because Oregon S3 has special read-after-write consistency.
|
||||||
|
S3_REGION=us-west-2
|
||||||
|
|
||||||
|
# The name of your S3 bucket
|
||||||
|
S3_BUCKET=www.mydomain.com
|
7
sculpin-minified-css-test/source/404.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
permalink: none
|
||||||
|
title: Four o four
|
||||||
|
---
|
||||||
|
|
||||||
|
<h2>Page not found</h2>
|
106
sculpin-minified-css-test/source/_layouts/default.html
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head lang="en">
|
||||||
|
<title>{% block title %}{{ page.title }}{% endblock %} — {{ site.title }} — {{ site.subtitle }}</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
{% block head_meta %}
|
||||||
|
<meta name="robots" content="noindex, follow">
|
||||||
|
{% endblock %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/build/app.css">
|
||||||
|
|
||||||
|
<link rel="apple-touch-startup-image" href="{{ site.url }}/build/2048x2048.png">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<link rel="shortcut icon" sizes="76x76" href="{{ site.url }}/build/jackson/76x76.png">
|
||||||
|
<link rel="shortcut icon" sizes="120x120" href="{{ site.url }}/build/jackson/120x120.png">
|
||||||
|
<link rel="shortcut icon" sizes="128x128" href="{{ site.url }}/build/jackson/128x128.png">
|
||||||
|
<link rel="shortcut icon" sizes="152x152" href="{{ site.url }}/build/jackson/152x152.png">
|
||||||
|
<link rel="shortcut icon" sizes="196x196" href="{{ site.url }}/build/jackson/196x196.png">
|
||||||
|
<link rel="shortcut icon" sizes="512x512" href="{{ site.url }}/build/jackson/512x512.png">
|
||||||
|
<link rel="shortcut icon" sizes="1024x1024" href="{{ site.url }}/build/jackson/1024x1024.png">
|
||||||
|
<link rel="shortcut icon" sizes="2048x2048" href="{{ site.url }}/build/jackson/2048x2048.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" href="{{ site.url }}/build/jackson/76x76.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" href="{{ site.url }}/build/jackson/120x120.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="128x128" href="{{ site.url }}/build/jackson/128x128.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" href="{{ site.url }}/build/jackson/152x152.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="196x196" href="{{ site.url }}/build/jackson/196x196.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="512x512" href="{{ site.url }}/build/jackson/512x512.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="1024x1024" href="{{ site.url }}/build/jackson/1024x1024.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="2048x2048" href="{{ site.url }}/build/jackson/2048x2048.png">
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/atom+xml" href="{{ site.url }}/atom.xml" title="{{ site.title }} activity feed" />
|
||||||
|
{% block head_styles %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block head_scripts %}
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
|
||||||
|
<div class="container">
|
||||||
|
<a class="navbar-brand" href="{{ site.url }}/">{{ site.title }}</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
|
<ul class="navbar-nav mr-auto">
|
||||||
|
<li class="nav-item"><a class="nav-link" href="{{ site.url }}/blog">Posts Archive</a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="{{ site.url }}/blog/categories">Categories</a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="{{ site.url }}/blog/tags">Tags</a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="{{ site.url }}/about">About</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<main role="main" class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-8">
|
||||||
|
{% block content_wrapper %}{% block content %}{% endblock %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4 sidebar">
|
||||||
|
<div class="card bg-light">
|
||||||
|
<div class="card-header">{{ site.title }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
{% if site.subtitle %}<small>{{ site.subtitle }}</small>{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card bg-light sidebar-nav">
|
||||||
|
<div class="card-header">Links</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<ul class="nav flex-column">
|
||||||
|
<li class="nav-item"><a class="nav-link" href="http://sculpin.io">sculpin.io</a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="http://twitter.com/getsculpin">@getsculpin</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="container">
|
||||||
|
<span class="text-muted">© {{ "now"|date("Y") }} {{ site.title }}</span>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="{{ site.url }}/build/app.js"></script>
|
||||||
|
{% block scripts %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% if site.google_analytics_tracking_id %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||||
|
|
||||||
|
ga('create', '{{site.google_analytics_tracking_id}}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% block scripts_after %}
|
||||||
|
{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
title: Happy Birthday Sculpin!
|
||||||
|
tags:
|
||||||
|
- sculpin
|
||||||
|
- markdown
|
||||||
|
categories:
|
||||||
|
- personal
|
||||||
|
|
||||||
|
---
|
||||||
|
The first commit to the Sculpin repository was made on December 20th, 2011.
|
||||||
|
What a trip since then!
|
||||||
|
|
||||||
|
Sculpin has always been a big fan of [Markdown][1]. So this post was
|
||||||
|
written in Markdown. :)
|
||||||
|
|
||||||
|
[1]: http://daringfireball.net/projects/markdown/
|
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
title: Symfony Live Hacking Day!
|
||||||
|
tags: [sensio, symfony, symfony live]
|
||||||
|
categories: [personal]
|
||||||
|
|
||||||
|
---
|
||||||
|
Fun times at the Symfony Live San Francisco 2012 Hacking Day! Code
|
||||||
|
was hacked and pizza was had. Some pics of the conference are
|
||||||
|
available on the [Sensio Labs Facebook page][1].
|
||||||
|
|
||||||
|
[1]: https://www.facebook.com/media/set/?set=a.450514941665306.112810.129739647076172
|
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
title: Balrog
|
||||||
|
tags: [balrog, community, static site generator]
|
||||||
|
categories: [personal]
|
||||||
|
|
||||||
|
---
|
||||||
|
Found out about [Balrog](http://github.com/igorw/balrog) today! It looks
|
||||||
|
like a really nice micro static site generator. Maybe Sculpin and Balrog
|
||||||
|
can be friends?
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
title: And Then There Was Textile Support
|
||||||
|
categories:
|
||||||
|
- features
|
||||||
|
tags:
|
||||||
|
- sculpin
|
||||||
|
- textile
|
||||||
|
|
||||||
|
---
|
||||||
|
"Textile":https://github.com/netcarver/textile support was added on November 26th, 2012. Markdown is great, but so is choice. More converters for all!
|
||||||
|
|
||||||
|
In honor of this milestone, this post is written in *Textile*.
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
title: Lorem Ipsum
|
||||||
|
categories:
|
||||||
|
- testing
|
||||||
|
|
||||||
|
# https://help.disqus.com/customer/portal/articles/472098-javascript-configuration-variables
|
||||||
|
disqus:
|
||||||
|
identifier: # slug_for_current_page
|
||||||
|
title: # title_for_current_page
|
||||||
|
url: # url_for_current_page
|
||||||
|
category_id: # category_id_for_current_page
|
||||||
|
|
||||||
|
---
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin consequat congue
|
||||||
|
lacus vel convallis. Cras nisi urna, ultrices non semper quis, ultricies sit
|
||||||
|
amet est. Donec nunc velit, consequat a pulvinar a, eleifend id leo. Curabitur
|
||||||
|
vel leo eros, vitae elementum purus. Integer id lorem hendrerit purus gravida
|
||||||
|
commodo. Pellentesque nec rhoncus turpis. Cras feugiat odio eget quam semper at
|
||||||
|
dictum lectus adipiscing. In ut est et mauris pulvinar placerat eget fringilla
|
||||||
|
lectus.
|
||||||
|
|
||||||
|
Ut in mauris augue, vitae facilisis purus. Nam ullamcorper pharetra lorem,
|
||||||
|
cursus lobortis tellus facilisis congue. Etiam ac dapibus lectus. Nunc tempus
|
||||||
|
ullamcorper felis, eu sagittis risus mollis aliquam. Mauris congue orci ac metus
|
||||||
|
egestas porta nec ac lectus. Nam ac neque vitae quam sagittis dapibus. Morbi sit
|
||||||
|
amet erat ac justo rutrum molestie id in tortor. Proin egestas tortor neque,
|
||||||
|
eget fringilla nunc. Donec consequat purus ac risus dignissim dignissim.
|
||||||
|
Praesent dui nisl, suscipit sed cursus in, dictum non elit. Nulla eget congue
|
||||||
|
nisl.
|
||||||
|
|
||||||
|
Morbi hendrerit porta ante, dapibus adipiscing nibh ornare at. Nullam iaculis
|
||||||
|
porta ante, at semper tellus auctor nec. Vestibulum nec justo sed purus
|
||||||
|
elementum venenatis. In hac habitasse platea dictumst. Fusce nibh tellus, varius
|
||||||
|
non commodo sit amet, eleifend placerat nisl. Donec sit amet enim cursus ligula
|
||||||
|
adipiscing auctor. Nullam sagittis porta ligula vitae rutrum. Aenean id sapien
|
||||||
|
mi, elementum ullamcorper lectus. Aliquam erat volutpat. Fusce bibendum, leo
|
||||||
|
ultricies lacinia viverra, mauris urna fermentum sem, id tempus lectus nunc
|
||||||
|
faucibus magna. Vestibulum risus mi, tempus ut lobortis non, mattis sed diam.
|
||||||
|
Nunc at mattis leo.
|
||||||
|
|
||||||
|
Ut erat nunc, vestibulum sit amet sodales non, tincidunt nec justo. Integer
|
||||||
|
vitae tortor massa. Vestibulum tincidunt commodo lacus, ac cursus lorem mattis
|
||||||
|
eu. Donec ut magna vel urna fermentum congue. Donec laoreet neque at velit
|
||||||
|
imperdiet luctus. In consectetur lacus eu purus dictum a imperdiet leo
|
||||||
|
ullamcorper. Phasellus consequat feugiat tincidunt. Quisque vel orci in mauris
|
||||||
|
fermentum pretium.
|
||||||
|
|
||||||
|
Pellentesque rhoncus accumsan auctor. Nunc venenatis tellus non ante pharetra
|
||||||
|
pretium. Sed rutrum, eros eu tristique luctus, neque sapien ultrices felis, id
|
||||||
|
varius orci erat eget leo. Curabitur ut volutpat diam. Phasellus porta neque
|
||||||
|
vitae nisi sodales ultrices. Etiam ultricies blandit lorem, id accumsan eros
|
||||||
|
facilisis vel. Praesent nulla sapien, laoreet sit amet dapibus sit amet,
|
||||||
|
tincidunt vitae neque. Vestibulum aliquam sollicitudin urna, in facilisis dui
|
||||||
|
aliquam id.
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
title: This is a draft!
|
||||||
|
draft: true
|
||||||
|
categories:
|
||||||
|
- features
|
||||||
|
|
||||||
|
---
|
||||||
|
This is a draft post. You will only see this if you are running the `dev`
|
||||||
|
environment (`dev` is the default).
|
||||||
|
|
||||||
|
All draft posts will automatically be tagged `draft` so they are easy to
|
||||||
|
find.
|
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
title: Syntax Highlighting
|
||||||
|
categories:
|
||||||
|
- features
|
||||||
|
|
||||||
|
---
|
||||||
|
You're all programmers, right? And you're writing code snippets on your Sculpin
|
||||||
|
powered blog? Yeah. So you want some highlighting with your static site generation?
|
||||||
|
Here you go!
|
||||||
|
|
||||||
|
namespace Foo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Awesome Contrived Example.
|
||||||
|
*/
|
||||||
|
class Bar implements BarInterface
|
||||||
|
{
|
||||||
|
private $baz;
|
||||||
|
|
||||||
|
public function __construct(BazInterface $baz)
|
||||||
|
{
|
||||||
|
$this->baz = $baz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function doIt()
|
||||||
|
{
|
||||||
|
return $this->baz->do('it');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
You can also use [fenced code blocks][fcb] with a syntax declaration at the top.
|
||||||
|
You can use either `~` or <code>`</code> to mark them.
|
||||||
|
|
||||||
|
[fcb]: http://michelf.ca/projects/php-markdown/extra/#fenced-code-blocks
|
||||||
|
|
||||||
|
~~~php
|
||||||
|
if ($fencedCodeBlock->syntax !== 'PHP') {
|
||||||
|
throw new UnexpectedValueException("wat");
|
||||||
|
}
|
||||||
|
~~~
|
||||||
|
Like this addition to the skeleton? You can thank for [@Pawka](https://github.com/Pawka)
|
||||||
|
for suggesting it. :)
|
76
sculpin-minified-css-test/source/_views/post.html
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
{% extends "default" %}
|
||||||
|
|
||||||
|
{% block head_meta %}
|
||||||
|
<meta name="robots" content="index, follow">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content_wrapper %}
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h2>{{ page.title }} <small>post</small></h2>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{ page.blocks.content|raw }}
|
||||||
|
</div>
|
||||||
|
{% if page.categories %}
|
||||||
|
<p class="categories">
|
||||||
|
Categories:
|
||||||
|
{% for category in page.categories %}
|
||||||
|
<a href="{{ site.url }}/blog/categories/{{ category|url_encode(true) }}">{{ category }}</a>{% if not loop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.tags %}
|
||||||
|
<p class="tags">
|
||||||
|
Tags:
|
||||||
|
{% for tag in page.tags %}
|
||||||
|
<a href="{{ site.url }}/blog/tags/{{ tag|url_encode(true) }}">{{ tag }}</a>{% if not loop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.previous_post or page.next_post %}
|
||||||
|
<nav class="article">
|
||||||
|
<ul>
|
||||||
|
{% if page.next_post %}
|
||||||
|
<li>Next: <a class="next" href="{{ site.url }}{{ page.next_post.url }}" title="{{ page.next_post.title }}"><span class="title">{{ page.next_post.title }}</span></a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.previous_post %}
|
||||||
|
<li>Previous: <a class="previous" href="{{ site.url }}{{ page.previous_post.url }}" title="{{ page.previous_post.title }}"><span class="title">{{ page.previous_post.title }}</span></a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
{% if site.disqus.shortname and site.disqus.shortname != '' %}
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script>
|
||||||
|
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
||||||
|
var disqus_shortname = '{{site.disqus.shortname}}'; // required: replace example with your forum shortname
|
||||||
|
|
||||||
|
|
||||||
|
{% if page.disqus.identifier %}var disqus_identifier = '{{page.disqus.identifier}}'; {% endif %}
|
||||||
|
|
||||||
|
{% if page.disqus.title %}var disqus_title = '{{page.disqus.title}}';{% endif %}
|
||||||
|
|
||||||
|
{% if page.disqus.url %}var disqus_url = '{{page.disqus.url}}';{% endif %}
|
||||||
|
|
||||||
|
{% if page.disqus.category_id %}var disqus_category_id = '{{page.disqus.category_id}}';{% endif %}
|
||||||
|
|
||||||
|
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||||
|
(function () {
|
||||||
|
var dsq = document.createElement('script');
|
||||||
|
dsq.type = 'text/javascript';
|
||||||
|
dsq.async = true;
|
||||||
|
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||||
|
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the
|
||||||
|
<a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
|
||||||
|
</noscript>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
8
sculpin-minified-css-test/source/about.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: About
|
||||||
|
|
||||||
|
---
|
||||||
|
# About the Author or Blog
|
||||||
|
|
||||||
|
Here is a little information about the author or the blog.
|
33
sculpin-minified-css-test/source/assets/css/app.scss
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
@import "../../../node_modules/bootstrap/scss/bootstrap";
|
||||||
|
@import "../../../node_modules/highlightjs/styles/github.css";
|
||||||
|
|
||||||
|
small {
|
||||||
|
display: block;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
main.container, footer.container {
|
||||||
|
max-width: 900px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer.container {
|
||||||
|
margin-top: 30px;
|
||||||
|
padding: 30px 0;
|
||||||
|
border-top: 1px dashed #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.sidebar {
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 980px) {
|
||||||
|
body {
|
||||||
|
padding-bottom: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.container {
|
||||||
|
padding: 80px 15px 0; /* 80px to make the container go all the way to the bottom of the topbar */
|
||||||
|
}
|
After Width: | Height: | Size: 242 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 393 KiB |
After Width: | Height: | Size: 109 KiB |
BIN
sculpin-minified-css-test/source/assets/icons/jackson/76x76.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
7
sculpin-minified-css-test/source/assets/js/app.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
require('../css/app.scss');
|
||||||
|
|
||||||
|
require('jquery')
|
||||||
|
require('bootstrap')
|
||||||
|
var hljs = require('highlightjs')
|
||||||
|
|
||||||
|
hljs.initHighlightingOnLoad();
|
28
sculpin-minified-css-test/source/atom.xml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
use: ["posts"]
|
||||||
|
permalink: atom.xml
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<title><![CDATA[{{ site.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}/atom.xml" rel="self"/>
|
||||||
|
<link href="{{ site.url }}/"/>
|
||||||
|
<updated>{{ site.calculated_date | date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}/</id>
|
||||||
|
{% if site.author or site.email %}
|
||||||
|
<author>
|
||||||
|
{% if site.author %}<name><![CDATA[{{ site.author }}]]></name>{% endif %}
|
||||||
|
{% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %}
|
||||||
|
</author>
|
||||||
|
{% endif %}
|
||||||
|
<generator uri="http://sculpin.io/">Sculpin</generator>
|
||||||
|
{% for post in data.posts|slice(0, 10) %}
|
||||||
|
<entry>
|
||||||
|
<title type="html"><![CDATA[{{ post.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}{{ post.url }}"/>
|
||||||
|
<updated>{{ post.date|date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}{{ post.url }}</id>
|
||||||
|
<content type="html"><![CDATA[{{ post.blocks.content|raw }}]]></content>
|
||||||
|
</entry>
|
||||||
|
{% endfor %}
|
||||||
|
</feed>
|
38
sculpin-minified-css-test/source/blog.html
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Posts Archive
|
||||||
|
generator: pagination
|
||||||
|
use:
|
||||||
|
- posts
|
||||||
|
|
||||||
|
---
|
||||||
|
{% set year = '0' %}
|
||||||
|
<h2>Posts Archive</h2>
|
||||||
|
{% for post in page.pagination.items %}
|
||||||
|
{% set this_year %}{{ post.date | date("Y") }}{% endset %}
|
||||||
|
{% if year != this_year %}
|
||||||
|
{% set month = '0' %}
|
||||||
|
{% set year = this_year %}
|
||||||
|
{% endif %}
|
||||||
|
{% set this_month %}{{ post.date | date("F") }}{% endset %}
|
||||||
|
{% if month != this_month %}
|
||||||
|
{% set month = this_month %}
|
||||||
|
<h3>{{ month }} {{ year }}</h3>
|
||||||
|
{% endif %}
|
||||||
|
<div>
|
||||||
|
<a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% if page.pagination.previous_page or page.pagination.next_page %}
|
||||||
|
<nav class="article clearfix">
|
||||||
|
{% if page.pagination.previous_page %}
|
||||||
|
<a class="previous" href="{{ site.url }}{{ page.pagination.previous_page.url }}" title="Previous Page"><span class="title">Previous Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.pagination.next_page %}
|
||||||
|
<a class="next" href="{{ site.url }}{{ page.pagination.next_page.url }}" title="Next Page"><span class="title">Next Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
13
sculpin-minified-css-test/source/blog/categories.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Categories
|
||||||
|
use:
|
||||||
|
- posts_categories
|
||||||
|
---
|
||||||
|
<h2>Categories</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% for category,posts in data.posts_categories %}
|
||||||
|
<a href="{{ site.url }}/blog/categories/{{ category|url_encode(true) }}">{{ category }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Category Archive
|
||||||
|
generator: [posts_category_index, pagination]
|
||||||
|
pagination:
|
||||||
|
provider: page.category_posts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
{% block head_meta %}
|
||||||
|
<link rel="alternate" type="application/atom+xml" href="{{ site.url }}/blog/categories/{{ page.category|url_encode(true) }}.xml" title="{{ site.title }} '{{ page.category }}' category feed" />
|
||||||
|
<meta name="robots" content="noindex, follow">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}{{ page.title }} "{{ page.category }}"{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
{% set year = '0' %}
|
||||||
|
<h2>"{{ page.category }}"</h2>
|
||||||
|
{% for post in page.pagination.items %}
|
||||||
|
{% set this_year %}{{ post.date | date("Y") }}{% endset %}
|
||||||
|
{% if year != this_year %}
|
||||||
|
{% set month = '0' %}
|
||||||
|
{% set year = this_year %}
|
||||||
|
{% endif %}
|
||||||
|
{% set this_month %}{{ post.date | date("F") }}{% endset %}
|
||||||
|
{% if month != this_month %}
|
||||||
|
{% set month = this_month %}
|
||||||
|
<h3>{{ month }} {{ year }}</h3>
|
||||||
|
{% endif %}
|
||||||
|
<article>
|
||||||
|
<div><a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a></div>
|
||||||
|
</article>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% if page.pagination.previous_page or page.pagination.next_page %}
|
||||||
|
<nav class="article clearfix">
|
||||||
|
{% if page.pagination.previous_page %}
|
||||||
|
<a class="previous" href="{{ site.url }}{{ page.pagination.previous_page.url }}" title="Previous Page"><span class="title">Previous Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.pagination.next_page %}
|
||||||
|
<a class="next" href="{{ site.url }}{{ page.pagination.next_page.url }}" title="Next Page"><span class="title">Next Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
generator: [posts_category_index]
|
||||||
|
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<title><![CDATA[{{ site.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}{{ page.url }}" rel="self"/>
|
||||||
|
<link href="{{ site.url }}/"/>
|
||||||
|
<updated>{{ site.calculated_date | date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}/</id>
|
||||||
|
{% if site.author or site.email %}
|
||||||
|
<author>
|
||||||
|
{% if site.author %}<name><![CDATA[{{ site.author }}]]></name>{% endif %}
|
||||||
|
{% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %}
|
||||||
|
</author>
|
||||||
|
{% endif %}
|
||||||
|
<generator uri="http://sculpin.io/">Sculpin</generator>
|
||||||
|
{% for post in page.category_posts|slice(0, 10) %}
|
||||||
|
<entry>
|
||||||
|
<title type="html"><![CDATA[{{ post.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}{{ post.url }}"/>
|
||||||
|
<updated>{{ post.date|date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}{{ post.url }}</id>
|
||||||
|
<content type="html"><![CDATA[{{ post.blocks.content|raw }}]]></content>
|
||||||
|
</entry>
|
||||||
|
{% endfor %}
|
||||||
|
</feed>
|
13
sculpin-minified-css-test/source/blog/tags.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Tags
|
||||||
|
use:
|
||||||
|
- posts_tags
|
||||||
|
---
|
||||||
|
<h2>Tags</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% for tag,posts in data.posts_tags %}
|
||||||
|
<a href="{{ site.url }}/blog/tags/{{ tag|url_encode(true) }}">{{ tag }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
47
sculpin-minified-css-test/source/blog/tags/tag.html
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Tag Archive
|
||||||
|
generator: [posts_tag_index, pagination]
|
||||||
|
pagination:
|
||||||
|
provider: page.tag_posts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
{% block head_meta %}
|
||||||
|
<link rel="alternate" type="application/atom+xml" href="{{ site.url }}/blog/tags/{{ page.tag|url_encode(true) }}.xml" title="{{ site.title }} '{{ page.tag }}' tag feed" />
|
||||||
|
<meta name="robots" content="noindex, follow">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}{{ page.title }} "{{ page.tag }}"{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
{% set year = '0' %}
|
||||||
|
<h2>"{{ page.tag }}"</h2>
|
||||||
|
{% for post in page.pagination.items %}
|
||||||
|
{% set this_year %}{{ post.date | date("Y") }}{% endset %}
|
||||||
|
{% if year != this_year %}
|
||||||
|
{% set month = '0' %}
|
||||||
|
{% set year = this_year %}
|
||||||
|
{% endif %}
|
||||||
|
{% set this_month %}{{ post.date | date("F") }}{% endset %}
|
||||||
|
{% if month != this_month %}
|
||||||
|
{% set month = this_month %}
|
||||||
|
<h3>{{ month }} {{ year }}</h3>
|
||||||
|
{% endif %}
|
||||||
|
<article>
|
||||||
|
<div><a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a></div>
|
||||||
|
</article>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% if page.pagination.previous_page or page.pagination.next_page %}
|
||||||
|
<nav class="article clearfix">
|
||||||
|
{% if page.pagination.previous_page %}
|
||||||
|
<a class="previous" href="{{ site.url }}{{ page.pagination.previous_page.url }}" title="Previous Page"><span class="title">Previous Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.pagination.next_page %}
|
||||||
|
<a class="next" href="{{ site.url }}{{ page.pagination.next_page.url }}" title="Next Page"><span class="title">Next Page</span></a>
|
||||||
|
{% endif %}
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
28
sculpin-minified-css-test/source/blog/tags/tag.xml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
generator: [posts_tag_index]
|
||||||
|
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<title><![CDATA[{{ site.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}{{ page.url }}" rel="self"/>
|
||||||
|
<link href="{{ site.url }}/"/>
|
||||||
|
<updated>{{ site.calculated_date | date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}/</id>
|
||||||
|
{% if site.author or site.email %}
|
||||||
|
<author>
|
||||||
|
{% if site.author %}<name><![CDATA[{{ site.author }}]]></name>{% endif %}
|
||||||
|
{% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %}
|
||||||
|
</author>
|
||||||
|
{% endif %}
|
||||||
|
<generator uri="http://sculpin.io/">Sculpin</generator>
|
||||||
|
{% for post in page.tag_posts|slice(0, 10) %}
|
||||||
|
<entry>
|
||||||
|
<title type="html"><![CDATA[{{ post.title }}]]></title>
|
||||||
|
<link href="{{ site.url }}{{ post.url }}"/>
|
||||||
|
<updated>{{ post.date|date('c') }}</updated>
|
||||||
|
<id>{{ site.url }}{{ post.url }}</id>
|
||||||
|
<content type="html"><![CDATA[{{ post.blocks.content|raw }}]]></content>
|
||||||
|
</entry>
|
||||||
|
{% endfor %}
|
||||||
|
</feed>
|
BIN
sculpin-minified-css-test/source/favicon.ico
Normal file
After Width: | Height: | Size: 5.6 KiB |
33
sculpin-minified-css-test/source/index.html
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Home
|
||||||
|
generator: pagination
|
||||||
|
pagination:
|
||||||
|
max_per_page: 3
|
||||||
|
use:
|
||||||
|
- posts
|
||||||
|
---
|
||||||
|
{% for post in page.pagination.items %}
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h2><a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a></h2>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{ post.blocks.content|raw }}
|
||||||
|
</div>
|
||||||
|
{% if post.meta.tags %}
|
||||||
|
<p class="tags">
|
||||||
|
Tags:
|
||||||
|
{% for tag in post.meta.tags %}
|
||||||
|
<a href="{{ site.url }}/blog/tags/{{ tag|url_encode(true) }}">{{ tag }}</a>{% if not loop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</article>
|
||||||
|
{% endfor %}
|
||||||
|
{% if page.pagination.previous_page or page.pagination.next_page %}
|
||||||
|
<nav>
|
||||||
|
{% if page.pagination.previous_page %}<a href="{{ site.url }}{{ page.pagination.previous_page.url }}">Newer Posts</a>{% endif %}<br />
|
||||||
|
{% if page.pagination.next_page %}<a href="{{ site.url }}{{ page.pagination.next_page.url }}">Older Posts</a>{% endif %}<br />
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
9
sculpin-minified-css-test/source/robots.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
permalink: none
|
||||||
|
---
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
Disallow: /blog/tags/
|
||||||
|
Disallow: /blog/categories/
|
||||||
|
|
||||||
|
Sitemap: {{ site.url }}/sitemap.xml
|