First commit.
This commit is contained in:
commit
b7977e1c28
234 changed files with 28081 additions and 0 deletions
87
.eslintrc
Normal file
87
.eslintrc
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
"extends": "eslint:recommended",
|
||||
"env": {
|
||||
"browser": true
|
||||
},
|
||||
"globals": {
|
||||
"Drupal": true,
|
||||
"jQuery": true
|
||||
},
|
||||
"rules": {
|
||||
// Errors.
|
||||
"array-bracket-spacing": [2, "never"],
|
||||
"block-scoped-var": 2,
|
||||
"brace-style": [2, "stroustrup", {"allowSingleLine": true}],
|
||||
"comma-dangle": [2, "never"],
|
||||
"comma-spacing": 2,
|
||||
"comma-style": [2, "last"],
|
||||
"computed-property-spacing": [2, "never"],
|
||||
"curly": [2, "all"],
|
||||
"eol-last": 2,
|
||||
"eqeqeq": [2, "smart"],
|
||||
"guard-for-in": 2,
|
||||
"indent": [2, 2, {"SwitchCase": 1}],
|
||||
"key-spacing": [2, {"beforeColon": false, "afterColon": true}],
|
||||
"keyword-spacing": [2, {"before": true, "after": true}],
|
||||
"linebreak-style": [2, "unix"],
|
||||
"lines-around-comment": [2, {"beforeBlockComment": true, "afterBlockComment": false}],
|
||||
"new-parens": 2,
|
||||
"no-array-constructor": 2,
|
||||
"no-caller": 2,
|
||||
"no-catch-shadow": 2,
|
||||
"no-eval": 2,
|
||||
"no-extend-native": 2,
|
||||
"no-extra-bind": 2,
|
||||
"no-extra-parens": [2, "functions"],
|
||||
"no-implied-eval": 2,
|
||||
"no-iterator": 2,
|
||||
"no-label-var": 2,
|
||||
"no-labels": 2,
|
||||
"no-lone-blocks": 2,
|
||||
"no-loop-func": 2,
|
||||
"no-multi-spaces": 2,
|
||||
"no-multi-str": 2,
|
||||
"no-native-reassign": 2,
|
||||
"no-nested-ternary": 2,
|
||||
"no-new-func": 2,
|
||||
"no-new-object": 2,
|
||||
"no-new-wrappers": 2,
|
||||
"no-octal-escape": 2,
|
||||
"no-process-exit": 2,
|
||||
"no-proto": 2,
|
||||
"no-return-assign": 2,
|
||||
"no-script-url": 2,
|
||||
"no-sequences": 2,
|
||||
"no-shadow-restricted-names": 2,
|
||||
"no-spaced-func": 2,
|
||||
"no-trailing-spaces": 2,
|
||||
"no-undef-init": 2,
|
||||
"no-undefined": 2,
|
||||
"no-unused-expressions": 2,
|
||||
"no-unused-vars": [2, {"vars": "all", "args": "none"}],
|
||||
"no-with": 2,
|
||||
"object-curly-spacing": [2, "never"],
|
||||
"one-var": [2, "never"],
|
||||
"quote-props": [2, "consistent-as-needed"],
|
||||
"quotes": [2, "single", "avoid-escape"],
|
||||
"semi": [2, "always"],
|
||||
"semi-spacing": [2, {"before": false, "after": true}],
|
||||
"space-before-blocks": [2, "always"],
|
||||
"space-before-function-paren": [2, {"anonymous": "always", "named": "never"}],
|
||||
"space-in-parens": [2, "never"],
|
||||
"space-infix-ops": 2,
|
||||
"space-unary-ops": [2, { "words": true, "nonwords": false }],
|
||||
"spaced-comment": [2, "always"],
|
||||
"strict": 2,
|
||||
"yoda": [2, "never"],
|
||||
// Warnings.
|
||||
"max-nested-callbacks": [1, 3],
|
||||
"valid-jsdoc": [1, {
|
||||
"prefer": {
|
||||
"returns": "return",
|
||||
"property": "prop"
|
||||
},
|
||||
"requireReturn": false
|
||||
}]
|
||||
}
|
||||
}
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
node_modules/
|
||||
127
.sass-lint.yml
Normal file
127
.sass-lint.yml
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
# Documentation for the sass-lint Linters is available at:
|
||||
# https://github.com/sasstools/sass-lint/tree/master/docs/rules
|
||||
|
||||
options:
|
||||
formatter: stylish
|
||||
merge-default-rules: true
|
||||
rules:
|
||||
# Extends
|
||||
extends-before-mixins: 2
|
||||
extends-before-declarations: 2
|
||||
placeholder-in-extend: 2
|
||||
|
||||
# Mixins
|
||||
mixins-before-declarations:
|
||||
- 2
|
||||
- exclude:
|
||||
- 'breakpoint'
|
||||
- 'mq'
|
||||
- 'respond-to'
|
||||
- 'rtl'
|
||||
- 'zen-breakpoint'
|
||||
- 'zen-layout'
|
||||
- 'zen-mq'
|
||||
- 'zen-respond-to'
|
||||
|
||||
# Line Spacing
|
||||
one-declaration-per-line: 2
|
||||
empty-line-between-blocks:
|
||||
- 2
|
||||
- ignore-single-line-rulesets: false
|
||||
single-line-per-selector: 2
|
||||
|
||||
# Disallows
|
||||
# no-color-keywords: 2
|
||||
# no-color-literals: 2
|
||||
# no-css-comments: 2
|
||||
no-debug: 2
|
||||
# no-duplicate-properties: 2
|
||||
no-empty-rulesets: 2
|
||||
no-extends: 0
|
||||
# no-ids: 2
|
||||
# no-important: 2
|
||||
no-invalid-hex: 2
|
||||
no-mergeable-selectors: 2
|
||||
no-misspelled-properties:
|
||||
- 2
|
||||
- extra-properties:
|
||||
- '*font-family'
|
||||
- '*height'
|
||||
- 'interpolation-mode'
|
||||
- '*margin-left'
|
||||
- '*vertical-align'
|
||||
- '*width'
|
||||
no-qualifying-elements: 0
|
||||
no-trailing-zero: 2
|
||||
no-transition-all: 2
|
||||
no-url-protocols: 2
|
||||
# no-vendor-prefixes: 2
|
||||
no-warn: 2
|
||||
property-units: 0
|
||||
|
||||
# Nesting
|
||||
force-attribute-nesting: 0
|
||||
force-element-nesting: 0
|
||||
force-pseudo-nesting: 0
|
||||
|
||||
# Name Formats
|
||||
class-name-format:
|
||||
- 2
|
||||
- convention: hyphenatedbem
|
||||
function-name-format: 2
|
||||
id-name-format: 2
|
||||
mixin-name-format:
|
||||
- 2
|
||||
- convention: hyphenatedbem
|
||||
placeholder-name-format:
|
||||
- 2
|
||||
- convention: hyphenatedbem
|
||||
variable-name-format: 2
|
||||
|
||||
# Style Guide
|
||||
bem-depth: 0
|
||||
border-zero: 2
|
||||
brace-style:
|
||||
- 2
|
||||
- style: stroustrup
|
||||
- allow-single-line: false
|
||||
clean-import-paths: 2
|
||||
empty-args: 0
|
||||
hex-length: 2
|
||||
hex-notation: 2
|
||||
# indentation: 2
|
||||
leading-zero: 2
|
||||
nesting-depth:
|
||||
- 2
|
||||
- max-depth: 4
|
||||
property-sort-order: 0
|
||||
quotes: 2
|
||||
shorthand-values: 2
|
||||
url-quotes: 2
|
||||
variable-for-property: 2
|
||||
zero-unit: 2
|
||||
|
||||
# Inner Spacing
|
||||
space-after-comma: 2
|
||||
space-before-colon: 2
|
||||
space-after-colon: 2
|
||||
space-before-brace: 2
|
||||
space-before-bang: 2
|
||||
space-after-bang: 2
|
||||
space-between-parens: 0
|
||||
space-around-operator: 0
|
||||
|
||||
# Final Items
|
||||
trailing-semicolon: 2
|
||||
final-newline: 2
|
||||
|
||||
# Work-around for sass-lint not having per-file/block/line rule config.
|
||||
# @TODO: Re-enable these disabled rules. See https://www.drupal.org/node/2717117
|
||||
indentation: 0
|
||||
no-color-keywords: 0
|
||||
no-color-literals: 0
|
||||
no-css-comments: 0
|
||||
no-duplicate-properties: 0
|
||||
no-ids: 0
|
||||
no-important: 0
|
||||
no-vendor-prefixes: 0
|
||||
339
LICENSE.txt
Normal file
339
LICENSE.txt
Normal file
|
|
@ -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.
|
||||
113
README.md
Normal file
113
README.md
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
# A Hugo theme based on the Drupal zen base theme
|
||||
|
||||
A very popular base theme for Drupal is [Zen](https://www.drupal.org/project/zen) by [JohnAlbin](https://www.drupal.org/u/johnalbin).
|
||||
|
||||
This is a port of that theme for [Hugo :: A fast and modern static website engine](https://gohugo.io/).
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
* HTML5
|
||||
* Responsive design
|
||||
* Zen grids
|
||||
* Normalize CSS
|
||||
* libSass
|
||||
* Gulp.js
|
||||
* Minify css
|
||||
* jQuery 2
|
||||
* Slicknav mobile menu
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ cd themes
|
||||
$ git clone https://github.com/frjo/hugo-theme-zen.git zen
|
||||
```
|
||||
|
||||
[Hugo - Installing Hugo](http://gohugo.io/overview/installing/)
|
||||
|
||||
|
||||
## config.yaml example
|
||||
|
||||
```
|
||||
baseurl: "https://example.org/"
|
||||
title: "SiteTitle"
|
||||
|
||||
params:
|
||||
copyright: "This site is licensed under a
|
||||
[Creative Commons Attribution-ShareAlike 4.0 International License]
|
||||
(https://creativecommons.org/licenses/by-sa/4.0/)." # Optional
|
||||
contact: "info@example.org" # Optional
|
||||
footer: "A [example.org](https://example.org/) production." # Optional
|
||||
poweredby: true # Optional, show powered by hugo in footer
|
||||
jquery: true # Optional
|
||||
slicknav: true # Optional, activates a nice mobile menu.
|
||||
```
|
||||
|
||||
|
||||
## Shortcodes
|
||||
|
||||
### Clear
|
||||
|
||||
Break float.
|
||||
|
||||
```
|
||||
{{% figure src="/images/image.jpg" class="right" %}}
|
||||
|
||||
blablabla # Displayed left of the image.
|
||||
|
||||
{{% clear %}}
|
||||
|
||||
blablabla # Displayed below of the image.
|
||||
```
|
||||
|
||||
## Use Gulp to generate css from sass
|
||||
|
||||
Your new Zen theme uses Gulp.js as a task runner, so that it can do many
|
||||
different tasks automatically:
|
||||
|
||||
* Build your CSS from your Sass using libSass and node-sass.
|
||||
* Add vendor prefixes for the browsers you want to support using Autoprefixer.
|
||||
* Build a style guide of your components based on the KSS comments in your Sass
|
||||
source files.
|
||||
* Lint your Sass using sass-lint.
|
||||
* Lint your JavaScript using eslint.
|
||||
* Minify the css.
|
||||
* Watch all of your files as you develop and re-build everything on the fly.
|
||||
|
||||
Set up your front-end development build tools:
|
||||
|
||||
1. Install Node.js and npm, the Node.js package manager.
|
||||
|
||||
Detailed instructions are available on the "npm quick start guide":
|
||||
https://github.com/kss-node/kss-node/wiki/npm-quick-start-guide
|
||||
|
||||
2. The package.json file in your new sub-theme contains the versions of all the
|
||||
Node.js software you need. To install them run:
|
||||
|
||||
npm install
|
||||
|
||||
3. Install the gulp-cli tool globally. Normally, installing a Node.js globally
|
||||
is not recommended, which is why both Gulp and Grunt have created wrapper
|
||||
commands that will allow you to run "gulp" or "grunt" from anywhere, while
|
||||
using the local version of gulp or grunt that is installed in your project.
|
||||
To install gulp's global wrapper, run:
|
||||
|
||||
npm install -g gulp-cli
|
||||
|
||||
5. The default gulp task will build your production minified CSS,
|
||||
build your style guide, and lint your Sass and JavaScript.
|
||||
To run the default gulp task, type:
|
||||
|
||||
gulp
|
||||
|
||||
To watch all your files as you develop, type:
|
||||
|
||||
gulp watch
|
||||
|
||||
or just type:
|
||||
|
||||
gulp watch:css
|
||||
|
||||
to only watch the css files.
|
||||
8
archetypes/default.md
Normal file
8
archetypes/default.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
date: "now()"
|
||||
slug: ""
|
||||
tags: ["", ""]
|
||||
title: ""
|
||||
author: ""
|
||||
|
||||
---
|
||||
242
gulpfile.js
Normal file
242
gulpfile.js
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
'use strict';
|
||||
|
||||
var importOnce = require('node-sass-import-once'),
|
||||
path = require('path');
|
||||
|
||||
var options = {};
|
||||
|
||||
// #############################
|
||||
// Edit these paths and options.
|
||||
// #############################
|
||||
|
||||
// The root paths are used to construct all the other paths in this
|
||||
// configuration. The "project" root path is where this gulpfile.js is located.
|
||||
// While Zen distributes this in the theme root folder, you can also put this
|
||||
// (and the package.json) in your project's root folder and edit the paths
|
||||
// accordingly.
|
||||
options.rootPath = {
|
||||
project : __dirname + '/',
|
||||
styleGuide : __dirname + '/styleguide/',
|
||||
theme : __dirname + '/'
|
||||
};
|
||||
|
||||
options.theme = {
|
||||
root : options.rootPath.theme,
|
||||
css : options.rootPath.theme + 'static/css/',
|
||||
sass : options.rootPath.theme + 'sass/',
|
||||
js : options.rootPath.theme + 'static/js/'
|
||||
};
|
||||
|
||||
// Define the node-sass configuration. The includePaths is critical!
|
||||
options.sass = {
|
||||
importer: importOnce,
|
||||
includePaths: [
|
||||
options.theme.sass,
|
||||
options.rootPath.project + 'node_modules/breakpoint-sass/stylesheets',
|
||||
options.rootPath.project + 'node_modules/chroma-sass/sass',
|
||||
options.rootPath.project + 'node_modules/support-for/sass',
|
||||
options.rootPath.project + 'node_modules/typey/stylesheets',
|
||||
options.rootPath.project + 'node_modules/zen-grids/sass'
|
||||
],
|
||||
outputStyle: 'expanded'
|
||||
};
|
||||
|
||||
// Define which browsers to add vendor prefixes for.
|
||||
options.autoprefixer = {
|
||||
browsers: [
|
||||
'> 1%',
|
||||
'ie 10'
|
||||
]
|
||||
};
|
||||
|
||||
// Define the style guide paths and options.
|
||||
options.styleGuide = {
|
||||
source: [
|
||||
options.theme.sass,
|
||||
options.theme.css + 'style-guide/'
|
||||
],
|
||||
destination: options.rootPath.styleGuide,
|
||||
|
||||
builder: 'builder/twig',
|
||||
|
||||
// The css and js paths are URLs, like '/misc/jquery.js'.
|
||||
// The following paths are relative to the generated style guide.
|
||||
css: [
|
||||
path.relative(options.rootPath.styleGuide, options.theme.css + 'styles.css'),
|
||||
path.relative(options.rootPath.styleGuide, options.theme.css + 'style-guide/chroma-kss-styles.css'),
|
||||
path.relative(options.rootPath.styleGuide, options.theme.css + 'style-guide/kss-only.css')
|
||||
],
|
||||
js: [
|
||||
],
|
||||
|
||||
homepage: 'homepage.md',
|
||||
title: 'Hugo Zen Style Guide'
|
||||
};
|
||||
|
||||
// Define the paths to the JS files to lint.
|
||||
options.eslint = {
|
||||
files : [
|
||||
options.theme.js + '**/*.js',
|
||||
'!' + options.theme.js + '**/*.min.js'
|
||||
]
|
||||
};
|
||||
|
||||
// If your files are on a network share, you may want to turn on polling for
|
||||
// Gulp watch. Since polling is less efficient, we disable polling by default.
|
||||
options.gulpWatchOptions = {interval: 600};
|
||||
// options.gulpWatchOptions = {interval: 1000, mode: 'poll'};
|
||||
|
||||
|
||||
// ################################
|
||||
// Load Gulp and tools we will use.
|
||||
// ################################
|
||||
var gulp = require('gulp'),
|
||||
$ = require('gulp-load-plugins')(),
|
||||
del = require('del'),
|
||||
// gulp-load-plugins will report "undefined" error unless you load gulp-sass manually.
|
||||
sass = require('gulp-sass'),
|
||||
kss = require('kss'),
|
||||
cleanCSS = require('gulp-clean-css');
|
||||
|
||||
// The default task.
|
||||
gulp.task('default', ['build']);
|
||||
|
||||
// #################
|
||||
// Build everything.
|
||||
// #################
|
||||
gulp.task('build', ['styles:production', 'styleguide', 'lint']);
|
||||
|
||||
// ##########
|
||||
// Build CSS.
|
||||
// ##########
|
||||
var sassFiles = [
|
||||
options.theme.sass + '**/*.scss',
|
||||
// Do not open Sass partials as they will be included as needed.
|
||||
'!' + options.theme.sass + '**/_*.scss',
|
||||
// Chroma markup has its own gulp task.
|
||||
'!' + options.theme.sass + 'style-guide/kss-example-chroma.scss'
|
||||
];
|
||||
|
||||
gulp.task('styles', ['clean:css'], function() {
|
||||
return gulp.src(sassFiles)
|
||||
.pipe($.sourcemaps.init())
|
||||
.pipe(sass(options.sass).on('error', sass.logError))
|
||||
.pipe($.autoprefixer(options.autoprefixer))
|
||||
.pipe($.size({showFiles: true}))
|
||||
.pipe($.sourcemaps.write('./'))
|
||||
.pipe(gulp.dest(options.theme.css))
|
||||
});
|
||||
|
||||
gulp.task('styles:production', ['clean:css'], function() {
|
||||
return gulp.src(sassFiles)
|
||||
.pipe(sass(options.sass).on('error', sass.logError))
|
||||
.pipe($.autoprefixer(options.autoprefixer))
|
||||
.pipe($.size({showFiles: true}))
|
||||
.pipe(cleanCSS({compatibility: 'ie10'}))
|
||||
.pipe(gulp.dest(options.theme.css));
|
||||
});
|
||||
|
||||
// ##################
|
||||
// Build style guide.
|
||||
// ##################
|
||||
gulp.task('styleguide', ['clean:styleguide', 'styleguide:kss-example-chroma'], function() {
|
||||
return kss(options.styleGuide);
|
||||
});
|
||||
|
||||
gulp.task('styleguide:kss-example-chroma', function() {
|
||||
return gulp.src(options.theme.sass + 'style-guide/kss-example-chroma.scss')
|
||||
.pipe(sass(options.sass).on('error', sass.logError))
|
||||
.pipe($.replace(/(\/\*|\*\/)\n/g, ''))
|
||||
.pipe($.rename('kss-example-chroma.twig'))
|
||||
.pipe($.size({showFiles: true}))
|
||||
.pipe(gulp.dest(options.theme.css + 'style-guide'));
|
||||
});
|
||||
|
||||
// Debug the generation of the style guide with the --verbose flag.
|
||||
gulp.task('styleguide:debug', ['clean:styleguide', 'styleguide:kss-example-chroma'], function() {
|
||||
options.styleGuide.verbose = true;
|
||||
return kss(options.styleGuide);
|
||||
});
|
||||
|
||||
// #########################
|
||||
// Lint Sass and JavaScript.
|
||||
// #########################
|
||||
gulp.task('lint', ['lint:sass', 'lint:js']);
|
||||
|
||||
// Lint JavaScript.
|
||||
gulp.task('lint:js', function() {
|
||||
return gulp.src(options.eslint.files)
|
||||
.pipe($.eslint())
|
||||
.pipe($.eslint.format());
|
||||
});
|
||||
|
||||
// Lint JavaScript and throw an error for a CI to catch.
|
||||
gulp.task('lint:js-with-fail', function() {
|
||||
return gulp.src(options.eslint.files)
|
||||
.pipe($.eslint())
|
||||
.pipe($.eslint.format())
|
||||
.pipe($.eslint.failOnError());
|
||||
});
|
||||
|
||||
// Lint Sass.
|
||||
gulp.task('lint:sass', function() {
|
||||
return gulp.src(options.theme.sass + '**/*.scss')
|
||||
.pipe($.sassLint())
|
||||
.pipe($.sassLint.format());
|
||||
});
|
||||
|
||||
// Lint Sass and throw an error for a CI to catch.
|
||||
gulp.task('lint:sass-with-fail', function() {
|
||||
return gulp.src(options.theme.sass + '**/*.scss')
|
||||
.pipe($.sassLint())
|
||||
.pipe($.sassLint.format())
|
||||
.pipe($.sassLint.failOnError());
|
||||
});
|
||||
|
||||
// ##############################
|
||||
// Watch for changes and rebuild.
|
||||
// ##############################
|
||||
gulp.task('watch', ['watch:lint-and-styleguide', 'watch:js']);
|
||||
|
||||
gulp.task('watch:css', ['styles'], function() {
|
||||
return gulp.watch(options.theme.sass + '**/*.scss', options.gulpWatchOptions, ['styles']);
|
||||
});
|
||||
|
||||
gulp.task('watch:lint-and-styleguide', ['styleguide', 'lint:sass'], function() {
|
||||
return gulp.watch([
|
||||
options.theme.sass + '**/*.scss',
|
||||
options.theme.sass + '**/*.twig'
|
||||
], options.gulpWatchOptions, ['styleguide', 'lint:sass']);
|
||||
});
|
||||
|
||||
gulp.task('watch:js', ['lint:js'], function() {
|
||||
return gulp.watch(options.eslint.files, options.gulpWatchOptions, ['lint:js']);
|
||||
});
|
||||
|
||||
// ######################
|
||||
// Clean all directories.
|
||||
// ######################
|
||||
gulp.task('clean', ['clean:css', 'clean:styleguide']);
|
||||
|
||||
// Clean style guide files.
|
||||
gulp.task('clean:styleguide', function() {
|
||||
// You can use multiple globbing patterns as you would with `gulp.src`
|
||||
return del([
|
||||
options.styleGuide.destination + '*.html',
|
||||
options.styleGuide.destination + 'public',
|
||||
options.theme.css + '**/*.twig'
|
||||
], {force: true});
|
||||
});
|
||||
|
||||
// Clean CSS files.
|
||||
gulp.task('clean:css', function() {
|
||||
return del([
|
||||
options.theme.css + '**/*.css',
|
||||
options.theme.css + '**/*.map'
|
||||
], {force: true});
|
||||
});
|
||||
|
||||
|
||||
// Resources used to create this gulpfile.js:
|
||||
// - https://github.com/google/web-starter-kit/blob/master/gulpfile.babel.js
|
||||
// - https://github.com/dlmanning/gulp-sass/blob/master/README.md
|
||||
33
layouts/_default/baseof.html
Normal file
33
layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.Language.Lang }}">
|
||||
<head>
|
||||
<title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link rel="stylesheet" href="/css/styles.css?{{ readFile "/themes/zen/static/css/styles.css" | sha1}}">
|
||||
{{ partial "meta.html" . }}
|
||||
{{ block "meta" . }}{{ end }}
|
||||
</head>
|
||||
|
||||
<body class="one-sidebar sidebar-second">
|
||||
<div class="layout-center">
|
||||
<header class="header" role="banner">
|
||||
<a href="{{ .Site.BaseURL }}" title="Home" rel="home" class="header__logo"><img src="/images/logo.png" alt="Home" class="header__logo-image" /></a>
|
||||
<h1 class="header__site-name">
|
||||
<a href="{{ .Site.BaseURL }}" title="Home" class="header__site-link" rel="home"><span>{{ .Site.Title }}</span></a>
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<div class="layout-3col layout-swap">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
|
||||
<footer class="footer" role="contentinfo">
|
||||
<p>{{ with .Site.Params.copyright }}{{ . | markdownify }}{{ else }}<span>© {{ .Site.Title }}</span>{{ end }}</p>
|
||||
{{ with .Site.Params.footer }}<p>{{ . | markdownify }}</p>{{ end }}
|
||||
{{ if .Site.Params.poweredby }}<p>Powered by <a href="https://gohugo.io/">Hugo</a></p>{{ end }}
|
||||
</footer>
|
||||
</div>
|
||||
{{ if .Site.Params.jquery }}<script src="/js/jquery.min.js"></script>{{ end }}
|
||||
{{ if and .Site.Params.jquery .Site.Params.slicknav }}<script src="/js/jquery.slicknav.min.js"></script>{{ end }}
|
||||
{{ if .Site.Params.jquery }}<script src="/js/script.js"></script>{{ end }}
|
||||
</body>
|
||||
</html>
|
||||
20
layouts/_default/list.html
Normal file
20
layouts/_default/list.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{{ define "title" }}{{ if not .IsHome }}{{ .Title }} - {{ .Site.Title }}{{ end }}{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<main class="layout-3col__left-content" role="main">
|
||||
{{ range .Data.Pages }}
|
||||
<article class="{{ with .Section }}section-{{ . | urlize }}{{ end }} list-view">
|
||||
<header>
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a><h2>
|
||||
</header>
|
||||
<div>
|
||||
{{ .Summary }}
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
||||
</main>
|
||||
|
||||
{{ partial "menu.html" . }}
|
||||
{{ partial "sidebar.html" . }}
|
||||
|
||||
{{ end }}
|
||||
22
layouts/_default/single.html
Normal file
22
layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{{ define "title" }}{{ .Title }} - {{ .Site.Title }}{{ end }}
|
||||
|
||||
{{ define "meta" }}
|
||||
{{ partial "single_meta.html" . }}
|
||||
{{ partial "single_json_ld.html" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<main class="layout-3col__left-content" role="main">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<article class="{{ with .Section }}section-{{ . | urlize }}{{ end }} single-view">
|
||||
<header>
|
||||
</header>
|
||||
<div>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
{{ partial "menu.html" . }}
|
||||
{{ partial "sidebar.html" . }}
|
||||
{{ end }}
|
||||
14
layouts/index.html
Normal file
14
layouts/index.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{{ define "meta" }}
|
||||
{{ partial "single_meta.html" . }}
|
||||
{{ partial "single_json_ld.html" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<main class="layout-3col__left-content" role="main">
|
||||
<article>
|
||||
{{ .Content }}
|
||||
</article>
|
||||
</main>
|
||||
{{ partial "menu.html" . }}
|
||||
{{ partial "sidebar.html" . }}
|
||||
{{ end }}
|
||||
19
layouts/partials/menu.html
Normal file
19
layouts/partials/menu.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{{ $currentSection := .Section }}
|
||||
{{ $currentID := .UniqueID }}
|
||||
<div class="layout-swap__top layout-3col__full">
|
||||
<nav class="main-menu" role="navigation">
|
||||
<h2 class="visually-hidden">Main menu</h2>
|
||||
<ul class="navbar clearfix">
|
||||
<li><a class="{{ if .IsHome }}active{{ end }}" href="/">Home</a></li>
|
||||
{{ range $section, $taxonomy := .Site.Sections }}
|
||||
{{ if eq $section "" }}
|
||||
{{ range $taxonomy.Pages }}
|
||||
<li><a class="{{ if eq $currentID .UniqueID }}active{{ end }}" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<li><a class="{{ if eq $currentSection $section }}active{{ end }}" href="/{{ urlize $section }}">{{ humanize $section }}</a></li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
9
layouts/partials/meta.html
Normal file
9
layouts/partials/meta.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes">
|
||||
<meta name="MobileOptimized" content="width">
|
||||
<meta name="HandheldFriendly" content="true">
|
||||
{{ .Hugo.Generator }}
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
<link rel="apple-touch-icon" href="{{ .Site.BaseURL }}images/logo.png">
|
||||
{{ with .RSSLink }}<link rel="alternate" type="application/rss+xml" title="RSS" href="{{ . }}">{{ end }}
|
||||
{{ with .Site.Params.contact }}<meta name="contact" content="{{ . }}">{{ end }}
|
||||
11
layouts/partials/pagination.html
Normal file
11
layouts/partials/pagination.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }}
|
||||
<nav class="pager">
|
||||
{{ if .Paginator.HasPrev }}
|
||||
<a href="{{ .Paginator.Prev.URL }}" rel="prev" class="pager-item pager-prev">Prev</a>
|
||||
{{ end }}
|
||||
|
||||
{{ if .Paginator.HasNext }}
|
||||
<a href="{{ .Paginator.Next.URL }}" rel="next" class="pager-item pager-next">Next</a>
|
||||
{{ end }}
|
||||
</nav>
|
||||
{{ end }}
|
||||
14
layouts/partials/sidebar.html
Normal file
14
layouts/partials/sidebar.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{{ $currentSection := .Section }}
|
||||
{{ $currentID := .UniqueID }}
|
||||
<aside class="layout-3col__right-sidebar" role="complementary">
|
||||
{{ range $section, $taxonomy := .Site.Sections }}
|
||||
{{ if ne $section "" }}
|
||||
<h4 class="menu"><a class="{{ if eq $currentSection $section }}active{{ end }}" href="/{{ urlize $section }}">{{ humanize $section }}</a></h4>
|
||||
<ul class="menu">
|
||||
{{ range $taxonomy.Pages }}
|
||||
<li><a class="{{ if eq $currentID .UniqueID }}active{{ end }}" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</aside>
|
||||
34
layouts/partials/single_json_ld.html
Normal file
34
layouts/partials/single_json_ld.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "NewsArticle",
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id":"{{ .Site.BaseURL }}"
|
||||
},
|
||||
"headline": "{{ .Title }} - {{ .Site.Title }}",
|
||||
"image": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ .Site.BaseURL }}{{ .Params.thumbnail | default "images/default.png" }}",
|
||||
"height": 800,
|
||||
"width": 800
|
||||
},
|
||||
"datePublished": "{{ .Date.Format "2006-01-02T15:04:05UTC" }}",
|
||||
"dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05UTC" }}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{{ .Site.Title }}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{{ .Site.Title }}",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ .Site.BaseURL }}images/logo.png",
|
||||
"width": 600,
|
||||
"height": 60
|
||||
}
|
||||
},
|
||||
"description": "{{ .Description | default .Summary }}"
|
||||
}
|
||||
</script>
|
||||
8
layouts/partials/single_meta.html
Normal file
8
layouts/partials/single_meta.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<meta name="description" content="{{ replaceRE "\n" "" (.Description | default .Summary) }}">
|
||||
<meta property="og:title" content="{{ .Title }} - {{ .Site.Title }}">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="{{ .Permalink }}">
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}">
|
||||
<meta property="og:description" content="{{ replaceRE "\n" "" (.Description | default .Summary) }}">
|
||||
<meta property="og:locale" content="{{ .Lang }}">
|
||||
{{ with .Params.thumbnail }}<meta property="og:image" content="{{ .Site.BaseURL }}{{ . }}">{{ end }}
|
||||
1
layouts/shortcodes/clear.html
Normal file
1
layouts/shortcodes/clear.html
Normal file
|
|
@ -0,0 +1 @@
|
|||
<div class="clearfix"></div>
|
||||
39
package.json
Normal file
39
package.json
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "zen",
|
||||
"version": "1.0.0",
|
||||
"description": "The node.js requirements to build this project.",
|
||||
"main": "gulpfile.js",
|
||||
"scripts": {
|
||||
"test": "gulp"
|
||||
},
|
||||
"author": "Fredrik Jonsson",
|
||||
"license": "GPL-2.0",
|
||||
"devDependencies": {
|
||||
"breakpoint-sass": "^2.7.1",
|
||||
"chroma-sass": "^1.2.6",
|
||||
"del": "^2.2.2",
|
||||
"eslint": "^3.17.1",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-autoprefixer": "^3.1.1",
|
||||
"gulp-clean-css": "^3.0.3",
|
||||
"gulp-eslint": "^3.0.1",
|
||||
"gulp-if": "^2.0.2",
|
||||
"gulp-load-plugins": "^1.5.0",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-replace": "^0.5.4",
|
||||
"gulp-sass": "^3.1.0",
|
||||
"gulp-sass-lint": "^1.3.2",
|
||||
"gulp-size": "^2.1.0",
|
||||
"gulp-sourcemaps": "^2.4.1",
|
||||
"kss": "^3.0.0-beta.18",
|
||||
"node-sass-import-once": "^1.2.0",
|
||||
"sass-lint": "^1.10.2",
|
||||
"support-for": "^1.0.7",
|
||||
"typey": "^1.1.1",
|
||||
"zen-grids": "^2.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
88
sass/README.txt
Normal file
88
sass/README.txt
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
ZEN'S STYLESHEETS
|
||||
-----------------
|
||||
|
||||
Don't panic!
|
||||
|
||||
There are a lot of files in this Sass folder. A lot. 56, actually.
|
||||
|
||||
I swear to you I'm going to give you a good reason not to panic. Just give me
|
||||
a minute. (ヘ・_・)ヘ┳━┳
|
||||
|
||||
Okay, how about just panicking slightly while I collect my thoughts.
|
||||
(╯°□°)╯︵ ┻━┻
|
||||
|
||||
Okay. Okay. There _are_ 56 Sass files in this sub-theme, but it's not as bad as
|
||||
it first seems.
|
||||
|
||||
Why not just one stylesheet?
|
||||
|
||||
- For performance reasons you should always have all of your CSS in a single
|
||||
file to minimize the number of HTTP requests the user's browser needs to do.
|
||||
Fortunately, Drupal has a "Aggregate and compress CSS" feature that will
|
||||
automatically combine all the CSS files from its modules and themes into one
|
||||
file. You can turn on that feature under "Bandwidth Optimization" on the page:
|
||||
Administration > Configuration > Development > Performance
|
||||
So Drupal allows us (if we want) to use more than one stylesheet file, but
|
||||
still serves all the styles in one file to our users.
|
||||
|
||||
- When developing a site using a single stylesheet, it can become unwieldy to
|
||||
scroll and find the place you need to edit. As a deadline becomes imminent,
|
||||
developers often start stuffing new styles at the bottom of the stylesheet,
|
||||
completely destroying any stylesheet organization.
|
||||
|
||||
- Instead of one monolithic stylesheet, Zen sub-themes' CSS files are organized
|
||||
into many small stylesheets. Once you learn the organization (described
|
||||
below) it becomes easier to find the right place to add new styles.
|
||||
|
||||
- All the Sass files are imported into the styles.scss so all the CSS is output
|
||||
to the styles.css file.
|
||||
|
||||
ORGANIZATION OF STYLESHEETS
|
||||
---------------------------
|
||||
|
||||
All of the styles in this sub-theme are built using component-based designs. To
|
||||
learn more about component-based design, watch the Drupalcon presentation,
|
||||
"Style Guide Driven Development: All hail the robot overlords!"
|
||||
https://events.drupal.org/losangeles2015/sessions/style-guide-driven-development-all-hail-robot-overlords
|
||||
|
||||
The Sass files are organized in a simple file hierarchy, and, best of all are
|
||||
documented in a style guide which is super easy to keep up-to-date. Open the
|
||||
style guide to learn more about the styles and Sass used in this sub-theme.
|
||||
|
||||
Open the styleguide/index.html file in a web browser.
|
||||
|
||||
|
||||
ABOUT SASS
|
||||
----------
|
||||
|
||||
This directory includes Sass versions of Zen's CSS files.
|
||||
|
||||
Sass is a language that is just normal CSS plus some extra features, like
|
||||
variables, nested rules, math, mixins, etc. If your stylesheets are written in
|
||||
Sass, helper applications can convert them to standard CSS so that you can
|
||||
include the CSS in the normal ways with your theme.
|
||||
|
||||
To learn more about Sass, visit: http://sass-lang.com
|
||||
|
||||
Since Sass is just a language, we also need an executable that can easily
|
||||
convert Sass files into CSS. We use node-sass to convert our files to CSS. And
|
||||
we use Gulp.js to run node-sass and many other useful front-end tasks.
|
||||
|
||||
|
||||
DEVELOPING WITH SASS
|
||||
--------------------
|
||||
|
||||
To automatically generate the CSS versions of the scss while you are doing theme
|
||||
development, you'll need to tell Gulp to "watch" the sass directory so that
|
||||
any time a .scss file is changed it will automatically generate a CSS file in
|
||||
your sub-theme's css directory:
|
||||
|
||||
gulp watch
|
||||
|
||||
|
||||
MOVING YOUR CSS TO PRODUCTION
|
||||
-----------------------------
|
||||
|
||||
Simple! Generate your CSS with: gulp
|
||||
|
||||
And don't forget to turn on Drupal's CSS aggregation. :-)
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue