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