Move into nested docroot
17
web/core/themes/classy/README.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
ABOUT CLASSY
|
||||
-----------
|
||||
|
||||
Classy is a base theme that provides many classes in its markup. For cleaner
|
||||
markup (fewer classes), the default Stable base theme can be used instead.
|
||||
|
||||
To use Classy as your base theme, set the 'base theme' in your theme's .info.yml
|
||||
file to "classy":
|
||||
base theme: classy
|
||||
|
||||
See https://www.drupal.org/theme-guide/8/classy for more information on using
|
||||
the Classy theme.
|
||||
|
||||
ABOUT DRUPAL THEMING
|
||||
--------------------
|
||||
|
||||
See https://www.drupal.org/theme-guide/8 for more information on Drupal theming.
|
23
web/core/themes/classy/classy.info.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
name: Classy
|
||||
type: theme
|
||||
description: 'A base theme with sensible default CSS classes added. Learn how to use Classy as a base theme in the <a href="https://www.drupal.org/theme-guide/8">Drupal 8 Theming Guide</a>.'
|
||||
package: Core
|
||||
version: VERSION
|
||||
core: 8.x
|
||||
hidden: true
|
||||
|
||||
libraries:
|
||||
- classy/base
|
||||
- core/normalize
|
||||
|
||||
libraries-extend:
|
||||
user/drupal.user:
|
||||
- classy/user
|
||||
core/drupal.dropbutton:
|
||||
- classy/dropbutton
|
||||
core/drupal.dialog:
|
||||
- classy/dialog
|
||||
file/drupal.file:
|
||||
- classy/file
|
||||
core/drupal.progress:
|
||||
- classy/progress
|
93
web/core/themes/classy/classy.libraries.yml
Normal file
|
@ -0,0 +1,93 @@
|
|||
base:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/action-links.css: { weight: -10 }
|
||||
css/components/breadcrumb.css: { weight: -10 }
|
||||
css/components/button.css: { weight: -10 }
|
||||
css/components/collapse-processed.css: { weight: -10 }
|
||||
css/components/container-inline.css: { weight: -10 }
|
||||
css/components/details.css: { weight: -10 }
|
||||
css/components/exposed-filters.css: { weight: -10 }
|
||||
css/components/field.css: { weight: -10 }
|
||||
css/components/form.css: { weight: -10 }
|
||||
css/components/icons.css: { weight: -10 }
|
||||
css/components/inline-form.css: { weight: -10 }
|
||||
css/components/item-list.css: { weight: -10 }
|
||||
css/components/link.css: { weight: -10 }
|
||||
css/components/links.css: { weight: -10 }
|
||||
css/components/menu.css: { weight: -10 }
|
||||
css/components/more-link.css: { weight: -10 }
|
||||
css/components/pager.css: { weight: -10 }
|
||||
css/components/tabledrag.css: { weight: -10 }
|
||||
css/components/tableselect.css: { weight: -10 }
|
||||
css/components/tablesort.css: { weight: -10 }
|
||||
css/components/tabs.css: { weight: -10 }
|
||||
css/components/textarea.css: { weight: -10 }
|
||||
css/components/ui-dialog.css: { weight: -10 }
|
||||
|
||||
book-navigation:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/book-navigation.css: {}
|
||||
|
||||
dialog:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/dialog.css: { weight: -10 }
|
||||
|
||||
dropbutton:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/dropbutton.css: { weight: -10 }
|
||||
|
||||
file:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/file.css: { weight: -10 }
|
||||
|
||||
forum:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/forum.css: { weight: -10 }
|
||||
|
||||
indented:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/indented.css: {}
|
||||
|
||||
messages:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/messages.css: { weight: -10 }
|
||||
|
||||
node:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/node.css: { weight: -10 }
|
||||
|
||||
progress:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/progress.css: { weight: -10 }
|
||||
|
||||
search-results:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/search-results.css: {}
|
||||
|
||||
user:
|
||||
version: VERSION
|
||||
css:
|
||||
component:
|
||||
css/components/user.css: { weight: -10 }
|
43
web/core/themes/classy/css/components/action-links.css
Normal file
|
@ -0,0 +1,43 @@
|
|||
/**
|
||||
* @file
|
||||
* Styles for link buttons and action links.
|
||||
*/
|
||||
|
||||
.action-links {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 1em 0;
|
||||
}
|
||||
[dir="rtl"] .action-links {
|
||||
/* This is required to win over specificity of [dir="rtl"] ul */
|
||||
margin-right: 0;
|
||||
}
|
||||
.action-links li {
|
||||
display: inline-block;
|
||||
margin: 0 0.3em;
|
||||
}
|
||||
.action-links li:first-child {
|
||||
margin-left: 0; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .action-links li:first-child {
|
||||
margin-left: 0.3em;
|
||||
margin-right: 0;
|
||||
}
|
||||
.button-action {
|
||||
display: inline-block;
|
||||
line-height: 160%;
|
||||
padding: 0.2em 0.5em 0.3em;
|
||||
text-decoration: none;
|
||||
}
|
||||
.button-action:before {
|
||||
content: '+';
|
||||
font-weight: 900;
|
||||
margin-left: -0.1em; /* LTR */
|
||||
padding-right: 0.2em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .button-action:before {
|
||||
margin-left: 0;
|
||||
margin-right: -0.1em;
|
||||
padding-left: 0.2em;
|
||||
padding-right: 0;
|
||||
}
|
40
web/core/themes/classy/css/components/book-navigation.css
Normal file
|
@ -0,0 +1,40 @@
|
|||
/**
|
||||
* @file
|
||||
* Styling for the Book module.
|
||||
*/
|
||||
|
||||
.book-navigation .menu {
|
||||
padding-bottom: 0;
|
||||
padding-top: 1em;
|
||||
}
|
||||
.book-navigation .book-pager {
|
||||
margin: 0;
|
||||
overflow: auto;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
.book-pager__item {
|
||||
display: inline-block;
|
||||
list-style-type: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.book-pager__item--previous {
|
||||
text-align: left; /* LTR */
|
||||
width: 45%;
|
||||
}
|
||||
[dir="rtl"] .book-pager__item--previous {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
.book-pager__item--center {
|
||||
text-align: center;
|
||||
width: 8%;
|
||||
}
|
||||
.book-pager__item--next {
|
||||
float: right; /* LTR */
|
||||
text-align: right; /* LTR */
|
||||
width: 45%;
|
||||
}
|
||||
[dir="rtl"] .book-pager__item--next {
|
||||
float: left;
|
||||
text-align: left;
|
||||
}
|
29
web/core/themes/classy/css/components/breadcrumb.css
Normal file
|
@ -0,0 +1,29 @@
|
|||
/**
|
||||
* @file
|
||||
* Styles for breadcrumbs.
|
||||
*/
|
||||
|
||||
.breadcrumb {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.breadcrumb ol {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
[dir="rtl"] .breadcrumb ol {
|
||||
/* This is required to win over specificity of [dir="rtl"] ol */
|
||||
margin-right: 0;
|
||||
}
|
||||
.breadcrumb li {
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* IE8 does not support :not() and :last-child. */
|
||||
.breadcrumb li:before {
|
||||
content: ' \BB ';
|
||||
}
|
||||
.breadcrumb li:first-child:before {
|
||||
content: none;
|
||||
}
|
15
web/core/themes/classy/css/components/button.css
Normal file
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for buttons.
|
||||
*/
|
||||
|
||||
.button,
|
||||
.image-button {
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
.button:first-child,
|
||||
.image-button:first-child {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
32
web/core/themes/classy/css/components/collapse-processed.css
Normal file
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for collapsible fieldsets.
|
||||
*/
|
||||
|
||||
.collapse-processed > summary {
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
.collapse-processed > summary:before {
|
||||
background: url(../../../../misc/menu-expanded.png) 0px 100% no-repeat; /* LTR */
|
||||
content: "";
|
||||
float: left; /* LTR */
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
[dir="rtl"] .collapse-processed > summary:before {
|
||||
background-position: 100% 100%;
|
||||
float: right;
|
||||
}
|
||||
.collapse-processed:not([open]) > summary:before {
|
||||
background-position: 25% 35%; /* LTR */
|
||||
-ms-transform: rotate(-90deg);
|
||||
-webkit-transform: rotate(-90deg);
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
[dir="rtl"] .collapse-processed:not([open]) > summary:before {
|
||||
background-position: 75% 35%;
|
||||
-ms-transform: rotate(90deg);
|
||||
-webkit-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
}
|
20
web/core/themes/classy/css/components/container-inline.css
Normal file
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* @file
|
||||
* Inline items.
|
||||
*/
|
||||
|
||||
.container-inline label:after,
|
||||
.container-inline .label:after {
|
||||
content: ':';
|
||||
}
|
||||
.form-type-radios .container-inline label:after {
|
||||
content: '';
|
||||
}
|
||||
.form-type-radios .container-inline .form-type-radio {
|
||||
margin: 0 1em;
|
||||
}
|
||||
.container-inline .form-actions,
|
||||
.container-inline.form-actions {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
23
web/core/themes/classy/css/components/details.css
Normal file
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* @file
|
||||
* Collapsible details.
|
||||
*
|
||||
* @see collapse.js
|
||||
* @see http://nicolasgallagher.com/css-background-image-hacks/
|
||||
*/
|
||||
|
||||
details {
|
||||
border: 1px solid #ccc;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
details > .details-wrapper {
|
||||
padding: 0.5em 1.5em;
|
||||
}
|
||||
/* @todo Regression: The summary of uncollapsible details are no longer
|
||||
vertically aligned with the .details-wrapper in browsers without native
|
||||
details support. */
|
||||
summary {
|
||||
cursor: pointer;
|
||||
padding: 0.2em 0.5em;
|
||||
}
|
72
web/core/themes/classy/css/components/dialog.css
Normal file
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
* @file
|
||||
* Presentational styles for Drupal dialogs.
|
||||
*/
|
||||
|
||||
.ui-dialog {
|
||||
position: absolute;
|
||||
z-index: 1260;
|
||||
overflow: visible;
|
||||
color: #000;
|
||||
background: #fff;
|
||||
border: solid 1px #ccc;
|
||||
padding: 0;
|
||||
}
|
||||
@media all and (max-width: 48em) { /* 768px */
|
||||
.ui-dialog {
|
||||
width: 92% !important;
|
||||
}
|
||||
}
|
||||
.ui-dialog .ui-dialog-titlebar {
|
||||
font-weight: bold;
|
||||
background: #f3f4ee;
|
||||
border-style: solid;
|
||||
border-radius: 0;
|
||||
border-width: 0 0 1px 0;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.ui-dialog .ui-dialog-titlebar-close {
|
||||
border: 0;
|
||||
background: none;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane {
|
||||
margin-top: 0;
|
||||
background: #f3f4ee;
|
||||
padding: .3em 1em;
|
||||
border-width: 1px 0 0 0;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-button-text-only .ui-button-text {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Form action buttons are moved in dialogs. Remove empty space. */
|
||||
.ui-dialog .ui-dialog-content .form-actions {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.ui-dialog .ajax-progress-throbber {
|
||||
/* Can't do center:50% middle: 50%, so approximate it for a typical window size. */
|
||||
left: 49%;
|
||||
position: fixed;
|
||||
top: 48.5%;
|
||||
z-index: 1000;
|
||||
background-color: #232323;
|
||||
background-image: url(../../../../misc/loading-small.gif);
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 7px;
|
||||
height: 24px;
|
||||
opacity: 0.9;
|
||||
padding: 4px;
|
||||
width: 24px;
|
||||
}
|
||||
.ui-dialog .ajax-progress-throbber .throbber,
|
||||
.ui-dialog .ajax-progress-throbber .message {
|
||||
display: none;
|
||||
}
|
||||
|
33
web/core/themes/classy/css/components/dropbutton.css
Normal file
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* @file
|
||||
* General styles for dropbuttons.
|
||||
*/
|
||||
|
||||
.js .dropbutton-widget {
|
||||
background-color: white;
|
||||
border: 1px solid #cccccc;
|
||||
}
|
||||
.js .dropbutton-widget:hover {
|
||||
border-color: #b8b8b8;
|
||||
}
|
||||
.dropbutton .dropbutton-action > * {
|
||||
padding: 0.1em 0.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.dropbutton .secondary-action {
|
||||
border-top: 1px solid #e8e8e8;
|
||||
}
|
||||
.dropbutton-multiple .dropbutton {
|
||||
border-right: 1px solid #e8e8e8; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .dropbutton-multiple .dropbutton {
|
||||
border-left: 1px solid #e8e8e8;
|
||||
border-right: 0 none;
|
||||
}
|
||||
.dropbutton-multiple .dropbutton .dropbutton-action > * {
|
||||
margin-right: 0.25em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .dropbutton-multiple .dropbutton .dropbutton-action > * {
|
||||
margin-left: 0.25em;
|
||||
margin-right: 0;
|
||||
}
|
46
web/core/themes/classy/css/components/exposed-filters.css
Normal file
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for exposed filters.
|
||||
*/
|
||||
|
||||
.exposed-filters .filters {
|
||||
float: left; /* LTR */
|
||||
margin-right: 1em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .exposed-filters .filters {
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
margin-right: 0;
|
||||
}
|
||||
.exposed-filters .form-item {
|
||||
margin: 0 0 0.1em 0;
|
||||
padding: 0;
|
||||
}
|
||||
.exposed-filters .form-item label {
|
||||
float: left; /* LTR */
|
||||
font-weight: normal;
|
||||
width: 10em;
|
||||
}
|
||||
[dir="rtl"] .exposed-filters .form-item label {
|
||||
float: right;
|
||||
}
|
||||
.exposed-filters .form-select {
|
||||
width: 14em;
|
||||
}
|
||||
/* Current filters */
|
||||
.exposed-filters .current-filters {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.exposed-filters .current-filters .placeholder {
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
.exposed-filters .additional-filters {
|
||||
float: left; /* LTR */
|
||||
margin-right: 1em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .exposed-filters .additional-filters {
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
margin-right: 0;
|
||||
}
|
25
web/core/themes/classy/css/components/field.css
Normal file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for fields.
|
||||
*/
|
||||
|
||||
.field__label {
|
||||
font-weight: bold;
|
||||
}
|
||||
.field--label-inline .field__label,
|
||||
.field--label-inline .field__items {
|
||||
float: left; /*LTR*/
|
||||
}
|
||||
.field--label-inline .field__label,
|
||||
.field--label-inline > .field__item,
|
||||
.field--label-inline .field__items {
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
[dir="rtl"] .field--label-inline .field__label,
|
||||
[dir="rtl"] .field--label-inline .field__items {
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0;
|
||||
}
|
||||
.field--label-inline .field__label::after {
|
||||
content: ':';
|
||||
}
|
62
web/core/themes/classy/css/components/file.css
Normal file
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* @file
|
||||
* Default style for file module.
|
||||
*/
|
||||
|
||||
/* File icons.*/
|
||||
|
||||
.file {
|
||||
padding-left: 20px; /* LTR */
|
||||
display: inline-block;
|
||||
min-height: 16px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .file {
|
||||
padding-left: inherit;
|
||||
padding-right: 20px;
|
||||
background-position: right center;
|
||||
}
|
||||
.file--general,
|
||||
.file--application-octet-stream {
|
||||
background-image: url(../../images/icons/application-octet-stream.png);
|
||||
}
|
||||
.file--package-x-generic {
|
||||
background-image: url(../../images/icons/package-x-generic.png);
|
||||
}
|
||||
.file--x-office-spreadsheet {
|
||||
background-image: url(../../images/icons/x-office-spreadsheet.png);
|
||||
}
|
||||
.file--x-office-document {
|
||||
background-image: url(../../images/icons/x-office-document.png);
|
||||
}
|
||||
.file--x-office-presentation {
|
||||
background-image: url(../../images/icons/x-office-presentation.png);
|
||||
}
|
||||
.file--text-x-script {
|
||||
background-image: url(../../images/icons/text-x-script.png);
|
||||
}
|
||||
.file--text-html {
|
||||
background-image: url(../../images/icons/text-html.png);
|
||||
}
|
||||
.file--text-plain {
|
||||
background-image: url(../../images/icons/text-plain.png);
|
||||
}
|
||||
.file--application-pdf {
|
||||
background-image: url(../../images/icons/application-pdf.png);
|
||||
}
|
||||
.file--application-x-executable {
|
||||
background-image: url(../../images/icons/application-x-executable.png);
|
||||
}
|
||||
.file--audio {
|
||||
background-image: url(../../images/icons/audio-x-generic.png);
|
||||
}
|
||||
.file--video {
|
||||
background-image: url(../../images/icons/video-x-generic.png);
|
||||
}
|
||||
.file--text {
|
||||
background-image: url(../../images/icons/text-x-generic.png);
|
||||
}
|
||||
.file--image {
|
||||
background-image: url(../../images/icons/image-x-generic.png);
|
||||
}
|
104
web/core/themes/classy/css/components/form.css
Normal file
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for form components.
|
||||
*/
|
||||
|
||||
form .field-multiple-table {
|
||||
margin: 0;
|
||||
}
|
||||
form .field-multiple-table .field-multiple-drag {
|
||||
width: 30px;
|
||||
padding-right: 0; /*LTR*/
|
||||
}
|
||||
[dir="rtl"] form .field-multiple-table .field-multiple-drag {
|
||||
padding-left: 0;
|
||||
}
|
||||
form .field-multiple-table .field-multiple-drag .tabledrag-handle {
|
||||
padding-right: .5em; /*LTR*/
|
||||
}
|
||||
[dir="rtl"] form .field-multiple-table .field-multiple-drag .tabledrag-handle {
|
||||
padding-right: 0;
|
||||
padding-left: .5em;
|
||||
}
|
||||
form .field-add-more-submit {
|
||||
margin: .5em 0 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Markup generated by Form API.
|
||||
*/
|
||||
.form-item,
|
||||
.form-actions {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
tr.odd .form-item,
|
||||
tr.even .form-item {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.form-composite > .fieldset-wrapper > .description,
|
||||
.form-item .description {
|
||||
font-size: 0.85em;
|
||||
}
|
||||
label.option {
|
||||
display: inline;
|
||||
font-weight: normal;
|
||||
}
|
||||
.form-composite > legend,
|
||||
.label {
|
||||
display:inline;
|
||||
font-size: inherit;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.form-checkboxes .form-item,
|
||||
.form-radios .form-item {
|
||||
margin-top: 0.4em;
|
||||
margin-bottom: 0.4em;
|
||||
}
|
||||
.form-type-radio .description,
|
||||
.form-type-checkbox .description {
|
||||
margin-left: 2.4em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .form-type-radio .description,
|
||||
[dir="rtl"] .form-type-checkbox .description {
|
||||
margin-left: 0;
|
||||
margin-right: 2.4em;
|
||||
}
|
||||
.marker {
|
||||
color: #e00;
|
||||
}
|
||||
.form-required:after {
|
||||
content: '';
|
||||
vertical-align: super;
|
||||
display: inline-block;
|
||||
/* Use a background image to prevent screen readers from announcing the text. */
|
||||
background-image: url(../../../../misc/icons/ee0000/required.svg);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 6px 6px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
margin: 0 0.3em;
|
||||
}
|
||||
abbr.tabledrag-changed,
|
||||
abbr.ajax-changed {
|
||||
border-bottom: none;
|
||||
}
|
||||
.form-item input.error,
|
||||
.form-item textarea.error,
|
||||
.form-item select.error {
|
||||
border: 2px solid red;
|
||||
}
|
||||
|
||||
/* Inline error messages. */
|
||||
.form-item--error-message:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
vertical-align: sub;
|
||||
background: url(../../../../misc/icons/e32700/error.svg) no-repeat;
|
||||
background-size: contain;
|
||||
}
|
46
web/core/themes/classy/css/components/forum.css
Normal file
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* @file
|
||||
* Styling for the Forum module.
|
||||
*/
|
||||
|
||||
.forum__description {
|
||||
font-size: 0.9em;
|
||||
margin: 0.5em;
|
||||
}
|
||||
.forum__icon {
|
||||
background-image: url(../../images/icons/forum-icons.png);
|
||||
background-repeat: no-repeat;
|
||||
float: left; /* LTR */
|
||||
height: 24px;
|
||||
margin: 0 9px 0 0; /* LTR */
|
||||
width: 24px;
|
||||
}
|
||||
[dir="rtl"] .forum__icon {
|
||||
float: right;
|
||||
margin: 0 0 0 9px;
|
||||
}
|
||||
.forum__title {
|
||||
overflow: hidden;
|
||||
}
|
||||
.forum .indented {
|
||||
margin-left: 20px; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .forum .indented {
|
||||
margin-left: 0;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.forum__topic-status--new {
|
||||
background-position: -24px 0;
|
||||
}
|
||||
.forum__topic-status--hot {
|
||||
background-position: -48px 0;
|
||||
}
|
||||
.forum__topic-status--hot-new {
|
||||
background-position: -72px 0;
|
||||
}
|
||||
.forum__topic-status--sticky {
|
||||
background-position: -96px 0;
|
||||
}
|
||||
.forum__topic-status--closed {
|
||||
background-position: -120px 0;
|
||||
}
|
21
web/core/themes/classy/css/components/icons.css
Normal file
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for icons.
|
||||
*/
|
||||
|
||||
.icon-help {
|
||||
background: url(../../../../misc/help.png) 0 50% no-repeat; /* LTR */
|
||||
padding: 1px 0 1px 20px; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .icon-help {
|
||||
background-position: 100% 50%;
|
||||
padding: 1px 20px 1px 0;
|
||||
}
|
||||
.feed-icon {
|
||||
background: url(../../../../misc/feed.svg) no-repeat;
|
||||
overflow: hidden;
|
||||
text-indent: -9999px;
|
||||
display: block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
21
web/core/themes/classy/css/components/image-widget.css
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
/**
|
||||
* Image upload widget.
|
||||
*/
|
||||
.image-preview {
|
||||
float: left; /* LTR */
|
||||
padding: 0 10px 10px 0; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .image-preview {
|
||||
float: right;
|
||||
padding: 0 0 10px 10px;
|
||||
}
|
||||
.image-widget-data {
|
||||
float: left; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .image-widget-data {
|
||||
float: right;
|
||||
}
|
||||
.image-widget-data .text-field {
|
||||
width: auto;
|
||||
}
|
16
web/core/themes/classy/css/components/indented.css
Normal file
|
@ -0,0 +1,16 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* Basic styling for comment module.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Indent threaded comments.
|
||||
*/
|
||||
.indented {
|
||||
margin-left: 25px; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .indented {
|
||||
margin-left: 0;
|
||||
margin-right: 25px;
|
||||
}
|
33
web/core/themes/classy/css/components/inline-form.css
Normal file
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for inline forms.
|
||||
*/
|
||||
|
||||
.form--inline .form-item {
|
||||
float: left; /* LTR */
|
||||
margin-right: 0.5em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .form--inline .form-item {
|
||||
float: right;
|
||||
margin-right: 0;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
/* This is required to win over specificity of [dir="rtl"] .form--inline .form-item */
|
||||
[dir="rtl"] .views-filterable-options-controls .form-item {
|
||||
margin-right: 2%;
|
||||
}
|
||||
.form--inline .form-item-separator {
|
||||
margin-top: 2.3em;
|
||||
margin-right: 1em; /* LTR */
|
||||
margin-left: 0.5em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .form--inline .form-item-separator {
|
||||
margin-right: 0.5em;
|
||||
margin-left: 1em;
|
||||
}
|
||||
.form--inline .form-actions {
|
||||
clear: left; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .form--inline .form-actions {
|
||||
clear: right;
|
||||
}
|
32
web/core/themes/classy/css/components/item-list.css
Normal file
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for item list.
|
||||
*/
|
||||
|
||||
.item-list .title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.item-list ul {
|
||||
margin: 0 0 0.75em 0;
|
||||
padding: 0;
|
||||
}
|
||||
.item-list li {
|
||||
margin: 0 0 0.25em 1.5em; /* LTR */
|
||||
padding: 0;
|
||||
}
|
||||
[dir="rtl"] .item-list li {
|
||||
margin: 0 1.5em 0.25em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Comma separated lists.
|
||||
*/
|
||||
.item-list--comma-list {
|
||||
display: inline;
|
||||
}
|
||||
.item-list--comma-list .item-list__comma-list,
|
||||
.item-list__comma-list li,
|
||||
[dir="rtl"] .item-list--comma-list .item-list__comma-list,
|
||||
[dir="rtl"] .item-list__comma-list li {
|
||||
margin: 0;
|
||||
}
|
16
web/core/themes/classy/css/components/link.css
Normal file
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* @file
|
||||
* Style another element as a link.
|
||||
*/
|
||||
|
||||
button.link {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
label button.link {
|
||||
font-weight: bold;
|
||||
}
|
23
web/core/themes/classy/css/components/links.css
Normal file
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for links.
|
||||
*/
|
||||
|
||||
ul.inline,
|
||||
ul.links.inline {
|
||||
display: inline;
|
||||
padding-left: 0; /* LTR */
|
||||
}
|
||||
[dir="rtl"] ul.inline,
|
||||
[dir="rtl"] ul.links.inline {
|
||||
padding-right: 0;
|
||||
padding-left: 15px;
|
||||
}
|
||||
ul.inline li {
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
padding: 0 0.5em;
|
||||
}
|
||||
ul.links a.is-active {
|
||||
color: #000;
|
||||
}
|
34
web/core/themes/classy/css/components/menu.css
Normal file
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for menu.
|
||||
*/
|
||||
|
||||
ul.menu {
|
||||
list-style: none outside;
|
||||
margin-left: 1em; /* LTR */
|
||||
padding: 0;
|
||||
text-align: left; /* LTR */
|
||||
}
|
||||
[dir="rtl"] ul.menu {
|
||||
margin-left: 0;
|
||||
margin-right: 1em;
|
||||
text-align: right;
|
||||
}
|
||||
.menu-item--expanded {
|
||||
list-style-image: url(../../../../misc/menu-expanded.png);
|
||||
list-style-type: circle;
|
||||
}
|
||||
.menu-item--collapsed {
|
||||
list-style-image: url(../../../../misc/menu-collapsed.png); /* LTR */
|
||||
list-style-type: disc;
|
||||
}
|
||||
[dir="rtl"] .menu-item--collapsed {
|
||||
list-style-image: url(../../../../misc/menu-collapsed-rtl.png);
|
||||
}
|
||||
.menu-item {
|
||||
padding-top: 0.2em;
|
||||
margin: 0;
|
||||
}
|
||||
ul.menu a.is-active {
|
||||
color: #000;
|
||||
}
|
72
web/core/themes/classy/css/components/messages.css
Normal file
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
* @file
|
||||
* Styles for system messages.
|
||||
*/
|
||||
|
||||
.messages {
|
||||
background: no-repeat 10px 17px; /* LTR */
|
||||
border: 1px solid;
|
||||
border-width: 1px 1px 1px 0; /* LTR */
|
||||
border-radius: 2px;
|
||||
padding: 15px 20px 15px 35px; /* LTR */
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
[dir="rtl"] .messages {
|
||||
border-width: 1px 0 1px 1px;
|
||||
background-position: right 10px top 17px;
|
||||
padding-left: 20px;
|
||||
padding-right: 35px;
|
||||
text-align: right;
|
||||
}
|
||||
.messages + .messages {
|
||||
margin-top: 1.538em;
|
||||
}
|
||||
.messages__list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.messages__item + .messages__item {
|
||||
margin-top: 0.769em;
|
||||
}
|
||||
/* See .color-success in Seven's colors.css */
|
||||
.messages--status {
|
||||
color: #325e1c;
|
||||
background-color: #f3faef;
|
||||
border-color: #c9e1bd #c9e1bd #c9e1bd transparent; /* LTR */
|
||||
background-image: url(../../../../misc/icons/73b355/check.svg);
|
||||
box-shadow: -8px 0 0 #77b259; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .messages--status {
|
||||
border-color: #c9e1bd transparent #c9e1bd #c9e1bd;
|
||||
box-shadow: 8px 0 0 #77b259;
|
||||
margin-left: 0;
|
||||
}
|
||||
/* See .color-warning in Seven's colors.css */
|
||||
.messages--warning {
|
||||
background-color: #fdf8ed;
|
||||
background-image: url(../../../../misc/icons/e29700/warning.svg);
|
||||
border-color: #f4daa6 #f4daa6 #f4daa6 transparent; /* LTR */
|
||||
color: #734c00;
|
||||
box-shadow: -8px 0 0 #e09600; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .messages--warning {
|
||||
border-color: #f4daa6 transparent #f4daa6 #f4daa6;
|
||||
box-shadow: 8px 0 0 #e09600;
|
||||
}
|
||||
/* See .color-error in Seven's colors.css */
|
||||
.messages--error {
|
||||
background-color: #fcf4f2;
|
||||
color: #a51b00;
|
||||
background-image: url(../../../../misc/icons/e32700/error.svg);
|
||||
border-color: #f9c9bf #f9c9bf #f9c9bf transparent; /* LTR */
|
||||
box-shadow: -8px 0 0 #e62600; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .messages--error {
|
||||
border-color: #f9c9bf transparent #f9c9bf #f9c9bf;
|
||||
box-shadow: 8px 0 0 #e62600;
|
||||
}
|
||||
.messages--error p.error {
|
||||
color: #a51b00;
|
||||
}
|
12
web/core/themes/classy/css/components/more-link.css
Normal file
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* @file
|
||||
* Markup generated by #type 'more_link'.
|
||||
*/
|
||||
|
||||
.more-link {
|
||||
display: block;
|
||||
text-align: right; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .more-link {
|
||||
text-align: left;
|
||||
}
|
8
web/core/themes/classy/css/components/node.css
Normal file
|
@ -0,0 +1,8 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for nodes.
|
||||
*/
|
||||
|
||||
.node--unpublished {
|
||||
background-color: #fff4f4;
|
||||
}
|
16
web/core/themes/classy/css/components/pager.css
Normal file
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for pager.
|
||||
*/
|
||||
|
||||
.pager__items {
|
||||
clear: both;
|
||||
text-align: center;
|
||||
}
|
||||
.pager__item {
|
||||
display: inline;
|
||||
padding: 0.5em;
|
||||
}
|
||||
.pager__item.is-active {
|
||||
font-weight: bold;
|
||||
}
|
71
web/core/themes/classy/css/components/progress.css
Normal file
|
@ -0,0 +1,71 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for progress bar.
|
||||
*
|
||||
* @see progress.js
|
||||
*/
|
||||
|
||||
.progress__track {
|
||||
border-color: #b3b3b3;
|
||||
border-radius: 10em;
|
||||
background-color: #f2f1eb;
|
||||
background-image: -webkit-linear-gradient(#e7e7df, #f0f0f0);
|
||||
background-image: linear-gradient(#e7e7df, #f0f0f0);
|
||||
box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.16);
|
||||
}
|
||||
.progress__bar {
|
||||
border: 1px #07629a solid;
|
||||
background: #057ec9;
|
||||
background-image:
|
||||
-webkit-linear-gradient( top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15) ),
|
||||
-webkit-linear-gradient( left top,
|
||||
#0094f0 0%,
|
||||
#0094f0 25%,
|
||||
#007ecc 25%,
|
||||
#007ecc 50%,
|
||||
#0094f0 50%,
|
||||
#0094f0 75%,
|
||||
#0094f0 100% );
|
||||
background-image:
|
||||
-webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15)), -webkit-linear-gradient(left top, #0094f0 0%, #0094f0 25%, #007ecc 25%, #007ecc 50%, #0094f0 50%, #0094f0 75%, #0094f0 100%);
|
||||
background-image:
|
||||
linear-gradient( to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15) ),
|
||||
linear-gradient( to right bottom,
|
||||
#0094f0 0%,
|
||||
#0094f0 25%,
|
||||
#007ecc 25%,
|
||||
#007ecc 50%,
|
||||
#0094f0 50%,
|
||||
#0094f0 75%,
|
||||
#0094f0 100% );
|
||||
background-size: 40px 40px;
|
||||
margin-top: -1px;
|
||||
margin-left: -1px; /* LTR */
|
||||
padding: 0 1px;
|
||||
height: 16px;
|
||||
border-radius: 10em;
|
||||
-webkit-animation: animate-stripes 3s linear infinite;
|
||||
-moz-animation: animate-stripes 3s linear infinite;
|
||||
-webkit-transition: width 0.5s ease-out;
|
||||
transition: width 0.5s ease-out;
|
||||
}
|
||||
[dir="rtl"] .progress__bar {
|
||||
margin-left: 0;
|
||||
margin-right: -1px;
|
||||
animation-direction: reverse;
|
||||
-webkit-animation-direction: reverse;
|
||||
-moz-animation-direction: reverse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Progress bar animations.
|
||||
*/
|
||||
@-webkit-keyframes animate-stripes {
|
||||
0% {background-position: 0 0, 0 0;} 100% {background-position: 0 0, -80px 0;}
|
||||
}
|
||||
@-ms-keyframes animate-stripes {
|
||||
0% {background-position: 0 0, 0 0;} 100% {background-position: 0 0, -80px 0;}
|
||||
}
|
||||
@keyframes animate-stripes {
|
||||
0% {background-position: 0 0, 0 0;} 100% {background-position: 0 0, -80px 0;}
|
||||
}
|
8
web/core/themes/classy/css/components/search-results.css
Normal file
|
@ -0,0 +1,8 @@
|
|||
/**
|
||||
* @file
|
||||
* Stylesheet for results generated by the Search module.
|
||||
*/
|
||||
|
||||
.search-results {
|
||||
list-style: none;
|
||||
}
|
14
web/core/themes/classy/css/components/tabledrag.css
Normal file
|
@ -0,0 +1,14 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for table drag.
|
||||
*/
|
||||
|
||||
tr.drag {
|
||||
background-color: #fffff0;
|
||||
}
|
||||
tr.drag-previous {
|
||||
background-color: #ffd;
|
||||
}
|
||||
body div.tabledrag-changed-warning {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
19
web/core/themes/classy/css/components/tableselect.css
Normal file
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* @file
|
||||
* Table select behavior.
|
||||
*
|
||||
* @see tableselect.js
|
||||
*/
|
||||
|
||||
tr.selected td {
|
||||
background: #ffc;
|
||||
}
|
||||
td.checkbox,
|
||||
th.checkbox {
|
||||
text-align: center;
|
||||
}
|
||||
[dir="rtl"] td.checkbox,
|
||||
[dir="rtl"] th.checkbox {
|
||||
/* This is required to win over specificity of [dir="rtl"] td */
|
||||
text-align: center;
|
||||
}
|
11
web/core/themes/classy/css/components/tablesort.css
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* @file
|
||||
* Table sort indicator.
|
||||
*/
|
||||
|
||||
th.is-active img {
|
||||
display: inline;
|
||||
}
|
||||
td.is-active {
|
||||
background-color: #ddd;
|
||||
}
|
33
web/core/themes/classy/css/components/tabs.css
Normal file
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for tabs.
|
||||
*/
|
||||
|
||||
div.tabs {
|
||||
margin: 1em 0;
|
||||
}
|
||||
ul.tabs {
|
||||
list-style: none;
|
||||
margin: 0 0 0.5em;
|
||||
padding: 0;
|
||||
}
|
||||
.tabs > li {
|
||||
display: inline-block;
|
||||
margin-right: 0.3em; /* LTR */
|
||||
}
|
||||
[dir="rtl"] .tabs > li {
|
||||
margin-left: 0.3em;
|
||||
margin-right: 0;
|
||||
}
|
||||
.tabs a {
|
||||
display: block;
|
||||
padding: 0.2em 1em;
|
||||
text-decoration: none;
|
||||
}
|
||||
.tabs a.is-active {
|
||||
background-color: #eee;
|
||||
}
|
||||
.tabs a:focus,
|
||||
.tabs a:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
11
web/core/themes/classy/css/components/textarea.css
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* @file
|
||||
* Visual styles for a resizable textarea.
|
||||
*/
|
||||
|
||||
.form-textarea-wrapper textarea {
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
15
web/core/themes/classy/css/components/ui-dialog.css
Normal file
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* @file
|
||||
* Styles for Classy's modal windows.
|
||||
*/
|
||||
|
||||
.ui-dialog--narrow {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.ui-dialog--narrow {
|
||||
max-width: 95%;
|
||||
min-width: 95%;
|
||||
}
|
||||
}
|
66
web/core/themes/classy/css/components/user.css
Normal file
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* @file
|
||||
* Theme styling for user module.
|
||||
*/
|
||||
|
||||
/* Visual styling for the Password strength indicator */
|
||||
.password-strength__meter {
|
||||
margin-top: 0.5em;
|
||||
background-color: #ebeae4;
|
||||
}
|
||||
.password-strength__indicator {
|
||||
background-color: #77b259;
|
||||
-webkit-transition: width 0.5s ease-out;
|
||||
transition: width 0.5s ease-out;
|
||||
}
|
||||
.password-strength__indicator.is-weak {
|
||||
background-color: #e62600;
|
||||
}
|
||||
.password-strength__indicator.is-fair {
|
||||
background-color: #e09600;
|
||||
}
|
||||
.password-strength__indicator.is-good {
|
||||
background-color: #0074bd;
|
||||
}
|
||||
.password-strength__indicator.is-strong {
|
||||
background-color: #77b259;
|
||||
}
|
||||
|
||||
.password-confirm,
|
||||
.password-field,
|
||||
.password-strength,
|
||||
.password-confirm-match {
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
.password-suggestions {
|
||||
padding: 0.2em 0.5em;
|
||||
margin: 0.7em 0;
|
||||
max-width: 34.7em;
|
||||
border: 1px solid #b4b4b4;
|
||||
}
|
||||
.password-suggestions ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.confirm-parent,
|
||||
.password-parent {
|
||||
clear: left; /* LTR */
|
||||
margin: 0;
|
||||
max-width: 33em;
|
||||
overflow: hidden;
|
||||
}
|
||||
[dir="rtl"] .confirm-parent,
|
||||
[dir="rtl"] .password-parent {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
/* Styling for the status indicator of the passwords match test. */
|
||||
.password-confirm .ok {
|
||||
color: #325e1c;
|
||||
font-weight: bold;
|
||||
}
|
||||
.password-confirm .error {
|
||||
color: #a51b00;
|
||||
font-weight: bold;
|
||||
}
|
BIN
web/core/themes/classy/images/icons/application-octet-stream.png
Normal file
After Width: | Height: | Size: 189 B |
BIN
web/core/themes/classy/images/icons/application-pdf.png
Normal file
After Width: | Height: | Size: 346 B |
BIN
web/core/themes/classy/images/icons/application-x-executable.png
Normal file
After Width: | Height: | Size: 189 B |
BIN
web/core/themes/classy/images/icons/audio-x-generic.png
Normal file
After Width: | Height: | Size: 314 B |
BIN
web/core/themes/classy/images/icons/forum-icons.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
web/core/themes/classy/images/icons/image-x-generic.png
Normal file
After Width: | Height: | Size: 385 B |
BIN
web/core/themes/classy/images/icons/package-x-generic.png
Normal file
After Width: | Height: | Size: 260 B |
BIN
web/core/themes/classy/images/icons/text-html.png
Normal file
After Width: | Height: | Size: 265 B |
BIN
web/core/themes/classy/images/icons/text-plain.png
Normal file
After Width: | Height: | Size: 220 B |
BIN
web/core/themes/classy/images/icons/text-x-generic.png
Normal file
After Width: | Height: | Size: 220 B |
BIN
web/core/themes/classy/images/icons/text-x-script.png
Normal file
After Width: | Height: | Size: 276 B |
BIN
web/core/themes/classy/images/icons/video-x-generic.png
Normal file
After Width: | Height: | Size: 214 B |
BIN
web/core/themes/classy/images/icons/x-office-document.png
Normal file
After Width: | Height: | Size: 196 B |
BIN
web/core/themes/classy/images/icons/x-office-presentation.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
web/core/themes/classy/images/icons/x-office-spreadsheet.png
Normal file
After Width: | Height: | Size: 183 B |
1
web/core/themes/classy/logo.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="57" height="66" viewBox="471.5 467 57 66" enable-background="new 471.5 467 57 66"><path opacity=".2" fill="#303030" d="M528.5 504.965c0 16.634-13.123 27.615-28.24 27.615-10.29 0-19.894-5.523-24.978-14.167l.605-.027c1.313 1.192 3.39 2.58 7.404 2.515 4.77-.064 5.645-.875 9.855-2.756 22.716-10.17 26.925-19.457 27.736-21.59s2.013-5.587.756-9.415c-.242-.737-.42-1.333-.54-1.808-3.018-3.372-6.017-5.225-6.92-5.784-.14-.093-.29-.177-.43-.26l.44.26c2.01 1.247 14.314 8.782 14.314 25.417z"/><path fill="#fff" d="M509.09 518.507c1.006 0 2.077.065 2.83.568.756.503 1.193 1.63 1.445 2.263.25.634 0 1.006-.503 1.258-.438.25-.503.12-.94-.69-.44-.81-.82-1.63-3.01-1.63s-2.887.755-3.948 1.63c-1.062.876-1.443 1.193-1.825.69s-.253-1.006.437-1.63 1.825-1.63 2.888-2.077c1.06-.45 1.62-.383 2.625-.383zm-10.413 7.152c1.257 1.005 3.14 1.825 7.153 1.825 4.015 0 6.836-1.137 8.094-2.077.568-.438.82-.065.875.187.056.25.186.624-.252 1.07-.316.317-3.194 2.33-6.594 2.636-3.4.31-7.964.504-10.73-2.01-.438-.44-.316-1.07 0-1.323.317-.25.568-.438.94-.438.374.008.317.008.513.13z"/><path opacity=".2" fill="#aaa" d="M520.89 496.545c-.81 2.133-5.02 11.42-27.735 21.59-4.21 1.88-5.085 2.69-9.854 2.756-4.013.066-6.09-1.32-7.403-2.514l-.605.028h-.01c-2.393-4.042-3.78-8.783-3.78-13.952 0-7.852 2.97-13.654 6.287-17.687.11-.13.213-.26.325-.382 2.683-3.148 5.55-5.17 7.218-6.203.038-.028.075-.047.112-.065.42-.25.754-.447.987-.568 2.757-1.51 4.77-2.263 7.963-4.77.12-.092.242-.186.354-.288l.008-.01c.875-.754 1.64-1.76 2.18-3.4v-.008c.325-.97.567-2.16.716-3.65l.02.018c2.253 2.69 4.954 5.886 6.89 7.144.69.447 1.38.848 2.068 1.202l.3.15c2.243 1.126 4.507 1.945 6.807 3.333l.428.26c.903.56 3.902 2.412 6.92 5.784.12.475.298 1.07.54 1.807 1.274 3.837.073 7.292-.737 9.425z"/><path opacity=".5" fill="#333" d="M514.176 479.538c-3.26-2.077-6.464-2.887-9.603-4.955-1.938-1.267-4.64-4.47-6.893-7.162-.438 4.332-1.686 6.148-3.26 7.35-3.195 2.515-5.207 3.26-7.963 4.77-2.338 1.256-14.958 8.726-14.958 24.913 0 5.17 1.387 9.91 3.77 13.96 5.077 8.635 14.68 14.158 24.97 14.158 15.126 0 28.24-10.98 28.24-27.614 0-9.127-3.707-15.526-7.386-19.633-3.016-3.382-6.015-5.217-6.918-5.785zm7.627 7.34c4.117 5.15 6.213 11.23 6.213 18.077 0 3.968-.755 7.712-2.245 11.148-1.414 3.25-3.444 6.13-6.053 8.56-5.15 4.806-12.062 7.45-19.475 7.45-3.67 0-7.265-.698-10.692-2.086-3.372-1.36-6.398-3.297-9.016-5.774-5.532-5.225-8.57-12.257-8.57-19.8 0-6.716 2.18-12.695 6.483-17.753 3.288-3.865 6.836-6.007 8.196-6.743.67-.363 1.285-.69 1.89-.997 1.892-.97 3.68-1.89 6.14-3.818 1.312-.997 2.71-2.58 3.305-6.585 2.077 2.468 4.48 5.234 6.314 6.426 1.63 1.08 3.307 1.835 4.918 2.562 1.527.69 3.11 1.406 4.676 2.403l.056.037c4.62 2.84 7.06 5.896 7.86 6.892z"/><path opacity=".5" fill="#fff" d="M497.98 468.678c.874 2.58.753 3.893.753 4.452 0 .56-.307 2.077-1.313 2.832-.438.317-.568.568-.568.624 0 .25.568.438.568 1.006 0 .69-.317 2.077-3.642 5.393-3.325 3.316-8.103 6.278-11.8 8.103-3.698 1.826-5.468 1.686-5.97.81s.185-2.83 2.514-5.392l9.667-6.278 9.164-6.398.503-2.44"/><path fill="#fff" d="M497.98 468.613c-.57 4.145-1.826 5.393-3.512 6.715-2.83 2.133-5.588 3.446-6.212 3.763-1.63.82-7.535 4.08-10.608 8.784-.94 1.444 0 2.012.186 2.133.187.12 2.33.372 6.9-2.385 4.574-2.757 6.595-4.387 9.175-7.078 1.377-1.444 1.573-2.263 1.573-2.636 0-.438-.316-.624-.82-.754-.25-.065-.316-.187 0-.373.317-.186 1.622-.82 1.938-1.07.318-.25 1.827-1.257 1.882-2.887.065-1.63-.056-2.766-.503-4.21zm-14.112 45.628c.065-4.898 4.648-9.472 10.422-9.536 7.348-.065 12.424 7.283 16.13 7.208 3.14-.064 9.166-6.212 12.118-6.212 3.14 0 4.014 3.26 4.014 5.206 0 1.938-.623 5.458-2.133 7.656-1.51 2.198-2.44 3.008-4.2 2.888-2.264-.187-6.78-7.21-9.67-7.35-3.64-.12-11.547 7.6-17.75 7.6-3.763 0-4.9-.567-6.147-1.378-1.92-1.312-2.85-3.315-2.785-6.08z"/></svg>
|
After Width: | Height: | Size: 3.7 KiB |
BIN
web/core/themes/classy/screenshot.png
Normal file
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,12 @@
|
|||
{% extends "block.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for local actions (primary admin actions.)
|
||||
*/
|
||||
#}
|
||||
{% block content %}
|
||||
{% if content %}
|
||||
<nav class="action-links">{{ content }}</nav>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,14 @@
|
|||
{% extends "block.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for tabs.
|
||||
*/
|
||||
#}
|
||||
{% block content %}
|
||||
{% if content %}
|
||||
<nav class="tabs" role="navigation" aria-label="{{ 'Tabs'|t }}">
|
||||
{{ content }}
|
||||
</nav>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,45 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for the search form block.
|
||||
*
|
||||
* Available variables:
|
||||
* - plugin_id: The ID of the block implementation.
|
||||
* - label: The configured label of the block if visible.
|
||||
* - configuration: A list of the block's configuration values, including:
|
||||
* - label: The configured label for the block.
|
||||
* - label_display: The display settings for the label.
|
||||
* - provider: The module or other provider that provided this block plugin.
|
||||
* - Block plugin specific settings will also be stored here.
|
||||
* - content: The content of this block.
|
||||
* - attributes: A list HTML attributes populated by modules, intended to
|
||||
* be added to the main container tag of this template. Includes:
|
||||
* - id: A valid HTML ID and guaranteed unique.
|
||||
* - title_attributes: Same as attributes, except applied to the main title
|
||||
* tag that appears in the template.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*
|
||||
* @see template_preprocess_block()
|
||||
* @see search_preprocess_block()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'block',
|
||||
'block-search',
|
||||
'container-inline',
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
{{ title_prefix }}
|
||||
{% if label %}
|
||||
<h2{{ title_attributes }}>{{ label }}</h2>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
||||
{% block content %}
|
||||
{{ content }}
|
||||
{% endblock %}
|
||||
</div>
|
|
@ -0,0 +1,30 @@
|
|||
{% extends "block.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a branding block.
|
||||
*
|
||||
* Each branding element variable (logo, name, slogan) is only available if
|
||||
* enabled in the block configuration.
|
||||
*
|
||||
* Available variables:
|
||||
* - site_logo: Logo for site as defined in Appearance or theme settings.
|
||||
* - site_name: Name for site as defined in Site information settings.
|
||||
* - site_slogan: Slogan for site as defined in Site information settings.
|
||||
*/
|
||||
#}
|
||||
{% block content %}
|
||||
{% if site_logo %}
|
||||
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo">
|
||||
<img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if site_name %}
|
||||
<div class="site-name">
|
||||
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if site_slogan %}
|
||||
<div class="site-slogan">{{ site_slogan }}</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,56 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a menu block.
|
||||
*
|
||||
* Available variables:
|
||||
* - plugin_id: The ID of the block implementation.
|
||||
* - label: The configured label of the block if visible.
|
||||
* - configuration: A list of the block's configuration values.
|
||||
* - label: The configured label for the block.
|
||||
* - label_display: The display settings for the label.
|
||||
* - provider: The module or other provider that provided this block plugin.
|
||||
* - Block plugin specific settings will also be stored here.
|
||||
* - content: The content of this block.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - id: A valid HTML ID and guaranteed unique.
|
||||
* - title_attributes: HTML attributes for the title element.
|
||||
* - content_attributes: HTML attributes for the content element.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*
|
||||
* Headings should be used on navigation menus that consistently appear on
|
||||
* multiple pages. When this menu block's label is configured to not be
|
||||
* displayed, it is automatically made invisible using the 'visually-hidden' CSS
|
||||
* class, which still keeps it visible for screen-readers and assistive
|
||||
* technology. Headings allow screen-reader and keyboard only users to navigate
|
||||
* to or skip the links.
|
||||
* See http://juicystudio.com/article/screen-readers-display-none.php and
|
||||
* http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'block',
|
||||
'block-menu',
|
||||
'navigation',
|
||||
'menu--' ~ derivative_plugin_id|clean_class,
|
||||
]
|
||||
%}
|
||||
{% set heading_id = attributes.id ~ '-menu'|clean_id %}
|
||||
<nav role="navigation" aria-labelledby="{{ heading_id }}"{{ attributes.addClass(classes)|without('role', 'aria-labelledby') }}>
|
||||
{# Label. If not displayed, we still provide it for screen readers. #}
|
||||
{% if not configuration.label_display %}
|
||||
{% set title_attributes = title_attributes.addClass('visually-hidden') %}
|
||||
{% endif %}
|
||||
{{ title_prefix }}
|
||||
<h2{{ title_attributes.setAttribute('id', heading_id) }}>{{ configuration.label }}</h2>
|
||||
{{ title_suffix }}
|
||||
|
||||
{# Menu. #}
|
||||
{% block content %}
|
||||
{{ content }}
|
||||
{% endblock %}
|
||||
</nav>
|
44
web/core/themes/classy/templates/block/block.html.twig
Normal file
|
@ -0,0 +1,44 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a block.
|
||||
*
|
||||
* Available variables:
|
||||
* - plugin_id: The ID of the block implementation.
|
||||
* - label: The configured label of the block if visible.
|
||||
* - configuration: A list of the block's configuration values.
|
||||
* - label: The configured label for the block.
|
||||
* - label_display: The display settings for the label.
|
||||
* - provider: The module or other provider that provided this block plugin.
|
||||
* - Block plugin specific settings will also be stored here.
|
||||
* - content: The content of this block.
|
||||
* - attributes: array of HTML attributes populated by modules, intended to
|
||||
* be added to the main container tag of this template.
|
||||
* - id: A valid HTML ID and guaranteed unique.
|
||||
* - title_attributes: Same as attributes, except applied to the main title
|
||||
* tag that appears in the template.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*
|
||||
* @see template_preprocess_block()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'block',
|
||||
'block-' ~ configuration.provider|clean_class,
|
||||
'block-' ~ plugin_id|clean_class,
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
{{ title_prefix }}
|
||||
{% if label %}
|
||||
<h2{{ title_attributes }}>{{ label }}</h2>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
||||
{% block content %}
|
||||
{{ content }}
|
||||
{% endblock %}
|
||||
</div>
|
|
@ -0,0 +1,22 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a file form widget.
|
||||
*
|
||||
* Available variables:
|
||||
* - element: Form element for the file upload.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
*
|
||||
* @see template_preprocess_file_managed_file()
|
||||
*/
|
||||
#}
|
||||
{{ attach_library('classy/file') }}
|
||||
{%
|
||||
set classes = [
|
||||
'js-form-managed-file',
|
||||
'form-managed-file',
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
{{ element }}
|
||||
</div>
|
|
@ -0,0 +1,12 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display help text for file fields.
|
||||
*
|
||||
* Available variables:
|
||||
* - descriptions: Lines of help text for uploading a file.
|
||||
*
|
||||
* @see template_preprocess_file_upload_help()
|
||||
*/
|
||||
#}
|
||||
{{ descriptions|safe_join('<br />') }}
|
|
@ -0,0 +1,14 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a multi file form widget.
|
||||
*
|
||||
* Available variables:
|
||||
* - table: Table of previously uploaded files.
|
||||
* - element: The form element for uploading another file.
|
||||
*
|
||||
* @see template_preprocess_file_widget_multiple()
|
||||
*/
|
||||
#}
|
||||
{{ table }}
|
||||
{{ element }}
|
|
@ -0,0 +1,18 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a filter caption.
|
||||
*
|
||||
* Returns HTML for a captioned image, audio, video or other tag.
|
||||
*
|
||||
* Available variables
|
||||
* - string node: The complete HTML tag whose contents are being captioned.
|
||||
* - string tag: The name of the HTML tag whose contents are being captioned.
|
||||
* - string caption: The caption text.
|
||||
* - string classes: The classes of the captioned HTML tag.
|
||||
*/
|
||||
#}
|
||||
<figure role="group" class="caption caption-{{ tag }}{%- if classes %} {{ classes }}{%- endif %}">
|
||||
{{ node }}
|
||||
<figcaption>{{ caption }}</figcaption>
|
||||
</figure>
|
|
@ -0,0 +1,29 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for guidelines for a text format.
|
||||
*
|
||||
* Available variables:
|
||||
* - format: Contains information about the current text format, including the
|
||||
* following:
|
||||
* - name: The name of the text format, potentially unsafe and needs to be
|
||||
* escaped.
|
||||
* - format: The machine name of the text format, e.g. 'basic_html'.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id'
|
||||
* (only used when 'long' is TRUE) for each filter in one or more text
|
||||
* formats.
|
||||
*
|
||||
* @see template_preprocess_filter_tips()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'filter-guidelines-item',
|
||||
'filter-guidelines-' ~ format.id,
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
<h4 class="label">{{ format.label }}</h4>
|
||||
{{ tips }}
|
||||
</div>
|
|
@ -0,0 +1,61 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a set of filter tips.
|
||||
*
|
||||
* Available variables:
|
||||
* - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id'
|
||||
* (only used when 'long' is TRUE) for each filter in one or more text
|
||||
* formats.
|
||||
* - long: A flag indicating whether the passed-in filter tips contain extended
|
||||
* explanations, i.e. intended to be output on the path 'filter/tips'
|
||||
* (TRUE), or are in a short format, i.e. suitable to be displayed below a
|
||||
* form element. Defaults to FALSE.
|
||||
* - multiple: A flag indicating there is more than one filter tip.
|
||||
*
|
||||
* @see template_preprocess_filter_tips()
|
||||
*/
|
||||
#}
|
||||
{% if multiple %}
|
||||
<h2>{{ 'Text Formats'|t }}</h2>
|
||||
{% endif %}
|
||||
|
||||
{% if tips|length %}
|
||||
{% if multiple %}
|
||||
<div class="compose-tips">
|
||||
{% endif %}
|
||||
|
||||
{% for name, tip in tips %}
|
||||
{% if multiple %}
|
||||
{%
|
||||
set tip_classes = [
|
||||
'filter-type',
|
||||
'filter-' ~ name|clean_class,
|
||||
]
|
||||
%}
|
||||
<div{{ tip.attributes.addClass(tip_classes) }}>
|
||||
<h3>{{ tip.name }}</h3>
|
||||
{% endif %}
|
||||
|
||||
{% if tip.list|length %}
|
||||
<ul class="tips">
|
||||
{% for item in tip.list %}
|
||||
{%
|
||||
set item_classes = [
|
||||
long ? 'filter-' ~ item.id|replace({'/': '-'}),
|
||||
]
|
||||
%}
|
||||
<li{{ item.attributes.addClass(item_classes) }}>{{ item.tip }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if multiple %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if multiple %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
|
@ -0,0 +1,24 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for an image field widget.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - data: Render elements of the image widget.
|
||||
*
|
||||
* @see template_preprocess_image_widget()
|
||||
*/
|
||||
#}
|
||||
{{ attach_library('classy/image-widget') }}
|
||||
<div{{ attributes }}>
|
||||
{% if data.preview %}
|
||||
<div class="image-preview">
|
||||
{{ data.preview }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="image-widget-data">
|
||||
{# Render widget data without the image preview that was output already. #}
|
||||
{{ data|without('preview') }}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,30 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to list node types available for adding content.
|
||||
*
|
||||
* This list is displayed on the Add content admin page.
|
||||
*
|
||||
* Available variables:
|
||||
* - types: A list of content types, each with the following properties:
|
||||
* - add_link: Link to create a piece of content of this type.
|
||||
* - description: Description of this type of content.
|
||||
*
|
||||
* @see template_preprocess_node_add_list()
|
||||
*/
|
||||
#}
|
||||
{% if types is not empty %}
|
||||
<dl class="node-type-list">
|
||||
{% for type in types %}
|
||||
<dt>{{ type.add_link }}</dt>
|
||||
<dd>{{ type.description }}</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% else %}
|
||||
<p>
|
||||
{% set create_content = path('node.type_add') %}
|
||||
{% trans %}
|
||||
You have not created any content types yet. Go to the <a href="{{ create_content }}">content type creation page</a> to add a new content type.
|
||||
{% endtrans %}
|
||||
</p>
|
||||
{% endif %}
|
|
@ -0,0 +1,28 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a node edit form.
|
||||
*
|
||||
* Two column template for the node add/edit form.
|
||||
*
|
||||
* This template will be used when a node edit form specifies 'node_edit_form'
|
||||
* as its #theme callback. Otherwise, by default, node add/edit forms will be
|
||||
* themed by form.html.twig.
|
||||
*
|
||||
* Available variables:
|
||||
* - form: The node add/edit form.
|
||||
*
|
||||
* @see seven_form_node_form_alter()
|
||||
*/
|
||||
#}
|
||||
<div class="layout-node-form clearfix">
|
||||
<div class="layout-region layout-region-node-main">
|
||||
{{ form|without('advanced', 'actions') }}
|
||||
</div>
|
||||
<div class="layout-region layout-region-node-secondary">
|
||||
{{ form.advanced }}
|
||||
</div>
|
||||
<div class="layout-region layout-region-node-footer">
|
||||
{{ form.actions }}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,26 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a text format-enabled form element.
|
||||
*
|
||||
* Available variables:
|
||||
* - children: Text format element children.
|
||||
* - description: Text format element description.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - aria_description: Flag for whether or not an ARIA description has been
|
||||
* added to the description container.
|
||||
*
|
||||
* @see template_preprocess_text_format_wrapper()
|
||||
*/
|
||||
#}
|
||||
<div class="js-text-format-wrapper text-format-wrapper js-form-item form-item">
|
||||
{{ children }}
|
||||
{% if description %}
|
||||
{%
|
||||
set classes = [
|
||||
aria_description ? 'description',
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>{{ description }}</div>
|
||||
{% endif %}
|
||||
</div>
|
|
@ -0,0 +1,29 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to present a feed item in an aggregator page.
|
||||
*
|
||||
* Available variables:
|
||||
* - url: URL to the originating feed item.
|
||||
* - title: Title of the feed item.
|
||||
* - content: All field items. Use {{ content }} to print them all,
|
||||
* or print a subset such as {{ content.field_example }}. Use
|
||||
* {{ content|without('field_example') }} to temporarily suppress the printing
|
||||
* of a given element.
|
||||
* - attributes: HTML attributes for the wrapper.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*
|
||||
* @see template_preprocess_aggregator_item()
|
||||
*/
|
||||
#}
|
||||
<article{{ attributes.addClass('aggregator-item') }}>
|
||||
{{ title_prefix }}
|
||||
<h3 class="feed-item-title">
|
||||
<a href="{{ url }}">{{ title }}</a>
|
||||
</h3>
|
||||
{{ title_suffix }}
|
||||
{{ content }}
|
||||
</article>
|
|
@ -0,0 +1,20 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a single node in a printer-friendly outline.
|
||||
*
|
||||
* Available variables:
|
||||
* - node: Fully loaded node.
|
||||
* - depth: Depth of the current node inside the outline.
|
||||
* - title: Node title.
|
||||
* - content: Node content.
|
||||
* - children: All the child nodes recursively rendered through this file.
|
||||
*
|
||||
* @see template_preprocess_book_node_export_html()
|
||||
*/
|
||||
#}
|
||||
<article id="node-{{ node.id }}" class="section-{{ depth }}">
|
||||
<h1 class="book-heading">{{ title }}</h1>
|
||||
{{ content }}
|
||||
{{ children }}
|
||||
</article>
|
111
web/core/themes/classy/templates/content/comment.html.twig
Normal file
|
@ -0,0 +1,111 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for comments.
|
||||
*
|
||||
* Available variables:
|
||||
* - author: Comment author. Can be a link or plain text.
|
||||
* - content: The content-related items for the comment display. Use
|
||||
* {{ content }} to print them all, or print a subset such as
|
||||
* {{ content.field_example }}. Use the following code to temporarily suppress
|
||||
* the printing of a given child element:
|
||||
* @code
|
||||
* {{ content|without('field_example') }}
|
||||
* @endcode
|
||||
* - created: Formatted date and time for when the comment was created.
|
||||
* Preprocess functions can reformat it by calling format_date() with the
|
||||
* desired parameters on the 'comment.created' variable.
|
||||
* - changed: Formatted date and time for when the comment was last changed.
|
||||
* Preprocess functions can reformat it by calling format_date() with the
|
||||
* desired parameters on the 'comment.changed' variable.
|
||||
* - permalink: Comment permalink.
|
||||
* - submitted: Submission information created from author and created
|
||||
* during template_preprocess_comment().
|
||||
* - user_picture: The comment author's profile picture.
|
||||
* - status: Comment status. Possible values are:
|
||||
* unpublished, published, or preview.
|
||||
* - title: Comment title, linked to the comment.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* The attributes.class may contain one or more of the following classes:
|
||||
* - comment: The current template type; e.g., 'theming hook'.
|
||||
* - by-anonymous: Comment by an unregistered user.
|
||||
* - by-{entity-type}-author: Comment by the author of the parent entity,
|
||||
* eg. by-node-author.
|
||||
* - preview: When previewing a new or edited comment.
|
||||
* The following applies only to viewers who are registered users:
|
||||
* - unpublished: An unpublished comment visible only to administrators.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
* - content_attributes: List of classes for the styling of the comment content.
|
||||
* - title_attributes: Same as attributes, except applied to the main title
|
||||
* tag that appears in the template.
|
||||
* - threaded: A flag indicating whether the comments are threaded or not.
|
||||
*
|
||||
* These variables are provided to give context about the parent comment (if
|
||||
* any):
|
||||
* - comment_parent: Full parent comment entity (if any).
|
||||
* - parent_author: Equivalent to author for the parent comment.
|
||||
* - parent_created: Equivalent to created for the parent comment.
|
||||
* - parent_changed: Equivalent to changed for the parent comment.
|
||||
* - parent_title: Equivalent to title for the parent comment.
|
||||
* - parent_permalink: Equivalent to permalink for the parent comment.
|
||||
* - parent: A text string of parent comment submission information created from
|
||||
* 'parent_author' and 'parent_created' during template_preprocess_comment().
|
||||
* This information is presented to help screen readers follow lengthy
|
||||
* discussion threads. You can hide this from sighted users using the class
|
||||
* visually-hidden.
|
||||
*
|
||||
* These two variables are provided for context:
|
||||
* - comment: Full comment object.
|
||||
* - entity: Entity the comments are attached to.
|
||||
*
|
||||
* @see template_preprocess_comment()
|
||||
*/
|
||||
#}
|
||||
{% if threaded %}
|
||||
{{ attach_library('classy/indented') }}
|
||||
{% endif %}
|
||||
{%
|
||||
set classes = [
|
||||
'comment',
|
||||
'js-comment',
|
||||
status != 'published' ? status,
|
||||
comment.owner.anonymous ? 'by-anonymous',
|
||||
author_id and author_id == commented_entity.getOwnerId() ? 'by-' ~ commented_entity.getEntityTypeId() ~ '-author',
|
||||
]
|
||||
%}
|
||||
<article{{ attributes.addClass(classes) }}>
|
||||
{#
|
||||
Hide the "new" indicator by default, let a piece of JavaScript ask the
|
||||
server which comments are new for the user. Rendering the final "new"
|
||||
indicator here would break the render cache.
|
||||
#}
|
||||
<mark class="hidden" data-comment-timestamp="{{ new_indicator_timestamp }}"></mark>
|
||||
|
||||
<footer class="comment__meta">
|
||||
{{ user_picture }}
|
||||
<p class="comment__submitted">{{ submitted }}</p>
|
||||
|
||||
{#
|
||||
Indicate the semantic relationship between parent and child comments for
|
||||
accessibility. The list is difficult to navigate in a screen reader
|
||||
without this information.
|
||||
#}
|
||||
{% if parent %}
|
||||
<p class="parent visually-hidden">{{ parent }}</p>
|
||||
{% endif %}
|
||||
|
||||
{{ permalink }}
|
||||
</footer>
|
||||
|
||||
<div{{ content_attributes.addClass('content') }}>
|
||||
{% if title %}
|
||||
{{ title_prefix }}
|
||||
<h3{{ title_attributes }}>{{ title }}</h3>
|
||||
{{ title_suffix }}
|
||||
{% endif %}
|
||||
{{ content }}
|
||||
</div>
|
||||
</article>
|
|
@ -0,0 +1,40 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display node links.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: Attributes for the UL containing the list of links.
|
||||
* - links: Links to be output.
|
||||
* Each link will have the following elements:
|
||||
* - title: The link text.
|
||||
* - href: The link URL. If omitted, the 'title' is shown as a plain text
|
||||
* item in the links list. If 'href' is supplied, the entire link is passed
|
||||
* to l() as its $options parameter.
|
||||
* - attributes: (optional) HTML attributes for the anchor, or for the <span>
|
||||
* tag if no 'href' is supplied.
|
||||
* - heading: (optional) A heading to precede the links.
|
||||
* - text: The heading text.
|
||||
* - level: The heading level (e.g. 'h2', 'h3').
|
||||
* - attributes: (optional) A keyed list of attributes for the heading.
|
||||
* If the heading is a string, it will be used as the text of the heading and
|
||||
* the level will default to 'h2'.
|
||||
*
|
||||
* Headings should be used on navigation menus and any list of links that
|
||||
* consistently appears on multiple pages. To make the heading invisible use
|
||||
* the 'visually-hidden' CSS class. Do not use 'display:none', which
|
||||
* removes it from screen readers and assistive technology. Headings allow
|
||||
* screen reader and keyboard only users to navigate to or skip the links.
|
||||
* See http://juicystudio.com/article/screen-readers-display-none.php and
|
||||
* http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
|
||||
*
|
||||
* @see template_preprocess_links()
|
||||
*
|
||||
* @ingroup themeable
|
||||
*/
|
||||
#}
|
||||
{% if links %}
|
||||
<div class="node__links">
|
||||
{% include "links.html.twig" %}
|
||||
</div>
|
||||
{% endif %}
|
20
web/core/themes/classy/templates/content/mark.html.twig
Normal file
|
@ -0,0 +1,20 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a marker for new or updated content.
|
||||
*
|
||||
* Available variables:
|
||||
* - status: Number representing the marker status to display. Use the constants
|
||||
* below for comparison:
|
||||
* - MARK_NEW
|
||||
* - MARK_UPDATED
|
||||
* - MARK_READ
|
||||
*/
|
||||
#}
|
||||
{% if logged_in %}
|
||||
{% if status is constant('MARK_NEW') %}
|
||||
<span class="marker">{{ 'New'|t }}</span>
|
||||
{% elseif status is constant('MARK_UPDATED') %}
|
||||
<span class="marker">{{ 'Updated'|t }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
108
web/core/themes/classy/templates/content/node.html.twig
Normal file
|
@ -0,0 +1,108 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a node.
|
||||
*
|
||||
* Available variables:
|
||||
* - node: The node entity with limited access to object properties and methods.
|
||||
* Only method names starting with "get", "has", or "is" and a few common
|
||||
* methods such as "id", "label", and "bundle" are available. For example:
|
||||
* - node.getCreatedTime() will return the node creation timestamp.
|
||||
* - node.hasField('field_example') returns TRUE if the node bundle includes
|
||||
* field_example. (This does not indicate the presence of a value in this
|
||||
* field.)
|
||||
* - node.isPublished() will return whether the node is published or not.
|
||||
* Calling other methods, such as node.delete(), will result in an exception.
|
||||
* See \Drupal\node\Entity\Node for a full list of public properties and
|
||||
* methods for the node object.
|
||||
* - label: The title of the node.
|
||||
* - content: All node items. Use {{ content }} to print them all,
|
||||
* or print a subset such as {{ content.field_example }}. Use
|
||||
* {{ content|without('field_example') }} to temporarily suppress the printing
|
||||
* of a given child element.
|
||||
* - author_picture: The node author user entity, rendered using the "compact"
|
||||
* view mode.
|
||||
* - metadata: Metadata for this node.
|
||||
* - date: Themed creation date field.
|
||||
* - author_name: Themed author name field.
|
||||
* - url: Direct URL of the current node.
|
||||
* - display_submitted: Whether submission information should be displayed.
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* The attributes.class element may contain one or more of the following
|
||||
* classes:
|
||||
* - node: The current template type (also known as a "theming hook").
|
||||
* - node--type-[type]: The current node type. For example, if the node is an
|
||||
* "Article" it would result in "node--type-article". Note that the machine
|
||||
* name will often be in a short form of the human readable label.
|
||||
* - node--view-mode-[view_mode]: The View Mode of the node; for example, a
|
||||
* teaser would result in: "node--view-mode-teaser", and
|
||||
* full: "node--view-mode-full".
|
||||
* The following are controlled through the node publishing options.
|
||||
* - node--promoted: Appears on nodes promoted to the front page.
|
||||
* - node--sticky: Appears on nodes ordered above other non-sticky nodes in
|
||||
* teaser listings.
|
||||
* - node--unpublished: Appears on unpublished nodes visible only to site
|
||||
* admins.
|
||||
* - title_attributes: Same as attributes, except applied to the main title
|
||||
* tag that appears in the template.
|
||||
* - content_attributes: Same as attributes, except applied to the main
|
||||
* content tag that appears in the template.
|
||||
* - author_attributes: Same as attributes, except applied to the author of
|
||||
* the node tag that appears in the template.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
* - view_mode: View mode; for example, "teaser" or "full".
|
||||
* - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'.
|
||||
* - page: Flag for the full page state. Will be true if view_mode is 'full'.
|
||||
* - readmore: Flag for more state. Will be true if the teaser content of the
|
||||
* node cannot hold the main body content.
|
||||
* - logged_in: Flag for authenticated user status. Will be true when the
|
||||
* current user is a logged-in member.
|
||||
* - is_admin: Flag for admin user status. Will be true when the current user
|
||||
* is an administrator.
|
||||
*
|
||||
* @see template_preprocess_node()
|
||||
*
|
||||
* @todo Remove the id attribute (or make it a class), because if that gets
|
||||
* rendered twice on a page this is invalid CSS for example: two lists
|
||||
* in different view modes.
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'node',
|
||||
'node--type-' ~ node.bundle|clean_class,
|
||||
node.isPromoted() ? 'node--promoted',
|
||||
node.isSticky() ? 'node--sticky',
|
||||
not node.isPublished() ? 'node--unpublished',
|
||||
view_mode ? 'node--view-mode-' ~ view_mode|clean_class,
|
||||
]
|
||||
%}
|
||||
{{ attach_library('classy/node') }}
|
||||
<article{{ attributes.addClass(classes) }}>
|
||||
|
||||
{{ title_prefix }}
|
||||
{% if not page %}
|
||||
<h2{{ title_attributes }}>
|
||||
<a href="{{ url }}" rel="bookmark">{{ label }}</a>
|
||||
</h2>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
||||
|
||||
{% if display_submitted %}
|
||||
<footer class="node__meta">
|
||||
{{ author_picture }}
|
||||
<div{{ author_attributes.addClass('node__submitted') }}>
|
||||
{% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}
|
||||
{{ metadata }}
|
||||
</div>
|
||||
</footer>
|
||||
{% endif %}
|
||||
|
||||
<div{{ content_attributes.addClass('node__content') }}>
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
</article>
|
|
@ -0,0 +1,19 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for page titles.
|
||||
*
|
||||
* Available variables:
|
||||
* - title_attributes: HTML attributes for the page title element.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title: The page title, for use in the actual content.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*/
|
||||
#}
|
||||
{{ title_prefix }}
|
||||
{% if title %}
|
||||
<h1{{ title_attributes.addClass('page-title') }}>{{ title }}</h1>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
|
@ -0,0 +1,72 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for displaying a single search result.
|
||||
*
|
||||
* This template renders a single search result. The list of results is
|
||||
* rendered using '#theme' => 'item_list', with suggestions of:
|
||||
* - item_list__search_results__(plugin_id)
|
||||
* - item_list__search_results
|
||||
*
|
||||
* Available variables:
|
||||
* - url: URL of the result.
|
||||
* - title: Title of the result.
|
||||
* - snippet: A small preview of the result. Does not apply to user searches.
|
||||
* - info: String of all the meta information ready for print. Does not apply
|
||||
* to user searches.
|
||||
* - plugin_id: The machine-readable name of the plugin being executed,such
|
||||
* as "node_search" or "user_search".
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
* - info_split: Contains same data as info, but split into separate parts.
|
||||
* - info_split.type: Node type (or item type string supplied by module).
|
||||
* - info_split.user: Author of the node linked to users profile. Depends
|
||||
* on permission.
|
||||
* - info_split.date: Last update of the node. Short formatted.
|
||||
* - info_split.comment: Number of comments output as "% comments", %
|
||||
* being the count. (Depends on comment.module).
|
||||
* @todo The info variable needs to be made drillable and each of these sub
|
||||
* items should instead be within info and renamed info.foo, info.bar, etc.
|
||||
*
|
||||
* Other variables:
|
||||
* - title_attributes: HTML attributes for the title.
|
||||
* - content_attributes: HTML attributes for the content.
|
||||
*
|
||||
* Since info_split is keyed, a direct print of the item is possible.
|
||||
* This array does not apply to user searches so it is recommended to check
|
||||
* for its existence before printing. The default keys of 'type', 'user' and
|
||||
* 'date' always exist for node searches. Modules may provide other data.
|
||||
* @code
|
||||
* {% if (info_split.comment) %}
|
||||
* <span class="info-comment">
|
||||
* {{ info_split.comment }}
|
||||
* </span>
|
||||
* {% endif %}
|
||||
* @endcode
|
||||
*
|
||||
* To check for all available data within info_split, use the code below.
|
||||
* @code
|
||||
* <pre>
|
||||
* {{ dump(info_split) }}
|
||||
* </pre>
|
||||
* @endcode
|
||||
*
|
||||
* @see template_preprocess_search_result()
|
||||
*/
|
||||
#}
|
||||
{{ attach_library('classy/search-results') }}
|
||||
{{ title_prefix }}
|
||||
<h3{{ title_attributes.addClass('search-result__title') }}>
|
||||
<a href="{{ url }}">{{ title }}</a>
|
||||
</h3>
|
||||
{{ title_suffix }}
|
||||
<div class="search-result__snippet-info">
|
||||
{% if snippet %}
|
||||
<p{{ content_attributes.addClass('search-result__snippet') }}>{{ snippet }}</p>
|
||||
{% endif %}
|
||||
{% if info %}
|
||||
<p class="search-result__info">{{ info }}</p>
|
||||
{% endif %}
|
||||
</div>
|
|
@ -0,0 +1,41 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a taxonomy term.
|
||||
*
|
||||
* Available variables:
|
||||
* - url: URL of the current term.
|
||||
* - name: Name of the current term.
|
||||
* - content: Items for the content of the term (fields and description).
|
||||
* Use 'content' to print them all, or print a subset such as
|
||||
* 'content.description'. Use the following code to exclude the
|
||||
* printing of a given child element:
|
||||
* @code
|
||||
* {{ content|without('description') }}
|
||||
* @endcode
|
||||
* - attributes: HTML attributes for the wrapper.
|
||||
* - page: Flag for the full page state.
|
||||
* - term: The taxonomy term entity, including:
|
||||
* - id: The ID of the taxonomy term.
|
||||
* - bundle: Machine name of the current vocabulary.
|
||||
* - view_mode: View mode, e.g. 'full', 'teaser', etc.
|
||||
*
|
||||
* @see template_preprocess_taxonomy_term()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'taxonomy-term',
|
||||
'vocabulary-' ~ term.bundle|clean_class,
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.setAttribute('id', 'taxonomy-term-' ~ term.id).addClass(classes) }}>
|
||||
{{ title_prefix }}
|
||||
{% if not page %}
|
||||
<h2><a href="{{ url }}">{{ name }}</a></h2>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
||||
<div class="content">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,36 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to present an aggregator feed.
|
||||
*
|
||||
* The contents are rendered above feed listings when browsing source feeds.
|
||||
* For example, "example.com/aggregator/sources/1".
|
||||
*
|
||||
* Available variables:
|
||||
* - title: Title of the feed item.
|
||||
* - content: All field items. Use {{ content }} to print them all,
|
||||
* or print a subset such as {{ content.field_example }}. Use
|
||||
* {{ content|without('field_example') }} to temporarily suppress the printing
|
||||
* of a given element.
|
||||
* - attributes: HTML attributes for the wrapper.
|
||||
* - title_attributes: Same as attributes, except applied to the main title
|
||||
* tag that appears in the template.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional output populated by modules, intended to be
|
||||
* displayed after the main title tag that appears in the template.
|
||||
*
|
||||
* @see template_preprocess_aggregator_feed()
|
||||
*/
|
||||
#}
|
||||
<div{{ attributes.addClass('aggregator-feed') }}>
|
||||
|
||||
{{ title_prefix }}
|
||||
{% if not full %}
|
||||
<h2{{ title_attributes }}>{{ title }}</h2>
|
||||
{% endif %}
|
||||
{{ title_suffix }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
</div>
|
|
@ -0,0 +1,30 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a status icon for a forum post.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes to be applied to the wrapper element.
|
||||
* - class: HTML classes that determine which icon to display. May be one of
|
||||
* 'hot', 'hot-new', 'new', 'default', 'closed', or 'sticky'.
|
||||
* - title: Text alternative for the forum icon.
|
||||
* - icon_title: Text alternative for the forum icon, same as above.
|
||||
* - new_posts: '1' when this topic contains new posts, otherwise '0'.
|
||||
* - first_new: '1' when this is the first topic with new posts, otherwise '0'.
|
||||
* - icon_status: Indicates which status icon should be used.
|
||||
*
|
||||
* @see template_preprocess_forum_icon()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'forum__icon',
|
||||
'forum__topic-status--' ~ icon_status,
|
||||
]
|
||||
%}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
{% if first_new -%}
|
||||
<a id="new"></a>
|
||||
{%- endif %}
|
||||
<span class="visually-hidden">{{ icon_title }}</span>
|
||||
</div>
|
|
@ -0,0 +1,79 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a list of forums and containers.
|
||||
*
|
||||
* Available variables:
|
||||
* - forums: A collection of forums and containers to display. It is keyed to
|
||||
* the numeric IDs of all child forums and containers. Each forum in forums
|
||||
* contains:
|
||||
* - is_container: A flag indicating if the forum can contain other
|
||||
* forums. Otherwise, the forum can only contain topics.
|
||||
* - depth: How deep the forum is in the current hierarchy.
|
||||
* - zebra: 'even' or 'odd', used for row class.
|
||||
* - icon_class: 'default' or 'new', used for forum icon class.
|
||||
* - icon_title: Text alternative for the forum icon.
|
||||
* - name: The name of the forum.
|
||||
* - link: The URL to link to this forum.
|
||||
* - description: The description field for the forum, containing:
|
||||
* - value: The descriptive text for the forum.
|
||||
* - new_topics: A flag indicating if the forum contains unread posts.
|
||||
* - new_url: A URL to the forum's unread posts.
|
||||
* - new_text: Text for the above URL, which tells how many new posts.
|
||||
* - old_topics: A count of posts that have already been read.
|
||||
* - num_posts: The total number of posts in the forum.
|
||||
* - last_reply: Text representing the last time a forum was posted or
|
||||
* commented in.
|
||||
* - forum_id: Forum ID for the current forum. Parent to all items within the
|
||||
* forums array.
|
||||
*
|
||||
* @see template_preprocess_forum_list()
|
||||
*/
|
||||
#}
|
||||
<table id="forum-{{ forum_id }}">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'Forum'|t }}</th>
|
||||
<th>{{ 'Topics'|t }}</th>
|
||||
<th>{{ 'Posts'|t }}</th>
|
||||
<th>{{ 'Last post'|t }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for child_id, forum in forums %}
|
||||
<tr id="forum-list-{{ child_id }}" class="{{ forum.zebra }}">
|
||||
<td {% if forum.is_container == true -%}
|
||||
colspan="4" class="container"
|
||||
{%- else -%}
|
||||
class="forum-list__forum"
|
||||
{%- endif -%}>
|
||||
{#
|
||||
Enclose the contents of this cell with X divs, where X is the
|
||||
depth this forum resides at. This will allow us to use CSS
|
||||
left-margin for indenting.
|
||||
#}
|
||||
{% for i in 1..forum.depth if forum.depth > 0 %}<div class="indented">{% endfor %}
|
||||
<div class="forum__icon forum-status-{{ forum.icon_class }}" title="{{ forum.icon_title }}">
|
||||
<span class="visually-hidden">{{ forum.icon_title }}</span>
|
||||
</div>
|
||||
<div class="forum__name"><a href="{{ forum.link }}">{{ forum.label }}</a></div>
|
||||
{% if forum.description.value %}
|
||||
<div class="forum__description">{{ forum.description.value }}</div>
|
||||
{% endif %}
|
||||
{% for i in 1..forum.depth if forum.depth > 0 %}</div>{% endfor %}
|
||||
</td>
|
||||
{% if forum.is_container == false %}
|
||||
<td class="forum__topics">
|
||||
{{ forum.num_topics }}
|
||||
{% if forum.new_topics == true %}
|
||||
<br />
|
||||
<a href="{{ forum.new_url }}">{{ forum.new_text }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="forum__posts">{{ forum.num_posts }}</td>
|
||||
<td class="forum__last-reply">{{ forum.last_reply }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
24
web/core/themes/classy/templates/dataset/forums.html.twig
Normal file
|
@ -0,0 +1,24 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a forum.
|
||||
*
|
||||
* May contain forum containers as well as forum topics.
|
||||
*
|
||||
* Available variables:
|
||||
* - forums: The forums to display (as processed by forum-list.html.twig).
|
||||
* - topics: The topics to display.
|
||||
* - topics_pager: The topics pager.
|
||||
* - forums_defined: A flag to indicate that the forums are configured.
|
||||
*
|
||||
* @see template_preprocess_forums()
|
||||
*/
|
||||
#}
|
||||
{{ attach_library('classy/forum') }}
|
||||
{% if forums_defined %}
|
||||
<div class="forum">
|
||||
{{ forums }}
|
||||
{{ topics }}
|
||||
{{ topics_pager }}
|
||||
</div>
|
||||
{% endif %}
|
|
@ -0,0 +1,29 @@
|
|||
{% extends "item-list.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for an item list of search results.
|
||||
*
|
||||
* Available variables:
|
||||
* - items: A list of items. Each item contains:
|
||||
* - attributes: HTML attributes to be applied to each list item.
|
||||
* - value: The content of the list element.
|
||||
* - title: The title of the list.
|
||||
* - list_type: The tag for list element ("ul" or "ol").
|
||||
* - attributes: HTML attributes to be applied to the list.
|
||||
* - empty: A message to display when there are no items. Allowed value is a
|
||||
* string or render array.
|
||||
* - context: An list of contextual data associated with the list. For search
|
||||
* results, the following data is set:
|
||||
* - plugin: The search plugin ID, for example "node_search".
|
||||
*
|
||||
* @see template_preprocess_item_list()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'search-results',
|
||||
context.plugin ~ '-results',
|
||||
]
|
||||
%}
|
||||
{% set attributes = attributes.addClass(classes) %}
|
41
web/core/themes/classy/templates/dataset/item-list.html.twig
Normal file
|
@ -0,0 +1,41 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for an item list.
|
||||
*
|
||||
* Available variables:
|
||||
* - items: A list of items. Each item contains:
|
||||
* - attributes: HTML attributes to be applied to each list item.
|
||||
* - value: The content of the list element.
|
||||
* - title: The title of the list.
|
||||
* - list_type: The tag for list element ("ul" or "ol").
|
||||
* - wrapper_attributes: HTML attributes to be applied to the list wrapper.
|
||||
* - attributes: HTML attributes to be applied to the list.
|
||||
* - empty: A message to display when there are no items. Allowed value is a
|
||||
* string or render array.
|
||||
* - context: A list of contextual data associated with the list. May contain:
|
||||
* - list_style: The custom list style.
|
||||
*
|
||||
* @see template_preprocess_item_list()
|
||||
*/
|
||||
#}
|
||||
{% if context.list_style %}
|
||||
{%- set wrapper_attributes = wrapper_attributes.addClass('item-list--' ~ context.list_style) %}
|
||||
{%- set attributes = attributes.addClass('item-list__' ~ context.list_style) %}
|
||||
{% endif %}
|
||||
{% if items or empty -%}
|
||||
<div{{ wrapper_attributes.addClass('item-list') }}>
|
||||
{%- if title is not empty -%}
|
||||
<h3>{{ title }}</h3>
|
||||
{%- endif -%}
|
||||
{%- if items -%}
|
||||
<{{ list_type }}{{ attributes }}>
|
||||
{%- for item in items -%}
|
||||
<li{{ item.attributes }}>{{ item.value }}</li>
|
||||
{%- endfor -%}
|
||||
</{{ list_type }}>
|
||||
{%- else -%}
|
||||
{{- empty -}}
|
||||
{%- endif -%}
|
||||
</div>
|
||||
{%- endif %}
|
113
web/core/themes/classy/templates/dataset/table.html.twig
Normal file
|
@ -0,0 +1,113 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a table.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes to apply to the <table> tag.
|
||||
* - caption: A localized string for the <caption> tag.
|
||||
* - colgroups: Column groups. Each group contains the following properties:
|
||||
* - attributes: HTML attributes to apply to the <col> tag.
|
||||
* Note: Drupal currently supports only one table header row, see
|
||||
* https://www.drupal.org/node/893530 and
|
||||
* http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
|
||||
* - header: Table header cells. Each cell contains the following properties:
|
||||
* - tag: The HTML tag name to use; either 'th' or 'td'.
|
||||
* - attributes: HTML attributes to apply to the tag.
|
||||
* - content: A localized string for the title of the column.
|
||||
* - field: Field name (required for column sorting).
|
||||
* - sort: Default sort order for this column ("asc" or "desc").
|
||||
* - sticky: A flag indicating whether to use a "sticky" table header.
|
||||
* - rows: Table rows. Each row contains the following properties:
|
||||
* - attributes: HTML attributes to apply to the <tr> tag.
|
||||
* - data: Table cells.
|
||||
* - no_striping: A flag indicating that the row should receive no
|
||||
* 'even / odd' styling. Defaults to FALSE.
|
||||
* - cells: Table cells of the row. Each cell contains the following keys:
|
||||
* - tag: The HTML tag name to use; either 'th' or 'td'.
|
||||
* - attributes: Any HTML attributes, such as "colspan", to apply to the
|
||||
* table cell.
|
||||
* - content: The string to display in the table cell.
|
||||
* - active_table_sort: A boolean indicating whether the cell is the active
|
||||
table sort.
|
||||
* - footer: Table footer rows, in the same format as the rows variable.
|
||||
* - empty: The message to display in an extra row if table does not have
|
||||
* any rows.
|
||||
* - no_striping: A boolean indicating that the row should receive no striping.
|
||||
* - header_columns: The number of columns in the header.
|
||||
*
|
||||
* @see template_preprocess_table()
|
||||
*/
|
||||
#}
|
||||
<table{{ attributes }}>
|
||||
{% if caption %}
|
||||
<caption>{{ caption }}</caption>
|
||||
{% endif %}
|
||||
|
||||
{% for colgroup in colgroups %}
|
||||
{% if colgroup.cols %}
|
||||
<colgroup{{ colgroup.attributes }}>
|
||||
{% for col in colgroup.cols %}
|
||||
<col{{ col.attributes }} />
|
||||
{% endfor %}
|
||||
</colgroup>
|
||||
{% else %}
|
||||
<colgroup{{ colgroup.attributes }} />
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if header %}
|
||||
<thead>
|
||||
<tr>
|
||||
{% for cell in header %}
|
||||
{%
|
||||
set cell_classes = [
|
||||
cell.active_table_sort ? 'is-active',
|
||||
]
|
||||
%}
|
||||
<{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}>
|
||||
{{- cell.content -}}
|
||||
</{{ cell.tag }}>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
{% endif %}
|
||||
|
||||
{% if rows %}
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
{%
|
||||
set row_classes = [
|
||||
not no_striping ? cycle(['odd', 'even'], loop.index0),
|
||||
]
|
||||
%}
|
||||
<tr{{ row.attributes.addClass(row_classes) }}>
|
||||
{% for cell in row.cells %}
|
||||
<{{ cell.tag }}{{ cell.attributes }}>
|
||||
{{- cell.content -}}
|
||||
</{{ cell.tag }}>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
{% elseif empty %}
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td colspan="{{ header_columns }}" class="empty message">{{ empty }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
{% endif %}
|
||||
{% if footer %}
|
||||
<tfoot>
|
||||
{% for row in footer %}
|
||||
<tr{{ row.attributes }}>
|
||||
{% for cell in row.cells %}
|
||||
<{{ cell.tag }}{{ cell.attributes }}>
|
||||
{{- cell.content -}}
|
||||
</{{ cell.tag }}>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tfoot>
|
||||
{% endif %}
|
||||
</table>
|
|
@ -0,0 +1,57 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for comment fields.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - label_hidden: Whether to show the field label or not.
|
||||
* - title_attributes: HTML attributes for the title.
|
||||
* - label: The label for the field.
|
||||
* - title_prefix: Additional output populated by modules, intended to be
|
||||
* displayed in front of the main title tag that appears in the template.
|
||||
* - title_suffix: Additional title output populated by modules, intended to
|
||||
* be displayed after the main title tag that appears in the template.
|
||||
* - comments: List of comments rendered through comment.html.twig.
|
||||
* - comment_form: The 'Add new comment' form.
|
||||
* - comment_display_mode: Is the comments are threaded.
|
||||
* - comment_type: The comment type bundle ID for the comment field.
|
||||
* - entity_type: The entity type to which the field belongs.
|
||||
* - field_name: The name of the field.
|
||||
* - field_type: The type of the field.
|
||||
* - label_display: The display settings for the label.
|
||||
*
|
||||
* @see template_preprocess_field()
|
||||
* @see comment_preprocess_field()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'field',
|
||||
'field--name-' ~ field_name|clean_class,
|
||||
'field--type-' ~ field_type|clean_class,
|
||||
'field--label-' ~ label_display,
|
||||
'comment-wrapper',
|
||||
]
|
||||
%}
|
||||
{%
|
||||
set title_classes = [
|
||||
'title',
|
||||
label_display == 'visually_hidden' ? 'visually-hidden',
|
||||
]
|
||||
%}
|
||||
<section{{ attributes.addClass(classes) }}>
|
||||
{% if comments and not label_hidden %}
|
||||
{{ title_prefix }}
|
||||
<h2{{ title_attributes.addClass(title_classes) }}>{{ label }}</h2>
|
||||
{{ title_suffix }}
|
||||
{% endif %}
|
||||
|
||||
{{ comments }}
|
||||
|
||||
{% if comment_form %}
|
||||
<h2 class="title comment-form__title">{{ 'Add new comment'|t }}</h2>
|
||||
{{ comment_form }}
|
||||
{% endif %}
|
||||
|
||||
</section>
|
|
@ -0,0 +1,34 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for the node created field.
|
||||
*
|
||||
* This is an override of field.html.twig for the node created field. See that
|
||||
* template for documentation about its details and overrides.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing span element.
|
||||
* - items: List of all the field items. Each item contains:
|
||||
* - attributes: List of HTML attributes for each item.
|
||||
* - content: The field item content.
|
||||
* - entity_type: The entity type to which the field belongs.
|
||||
* - field_name: The name of the field.
|
||||
* - field_type: The type of the field.
|
||||
* - label_display: The display settings for the label.
|
||||
*
|
||||
* @see field.html.twig
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'field',
|
||||
'field--name-' ~ field_name|clean_class,
|
||||
'field--type-' ~ field_type|clean_class,
|
||||
'field--label-' ~ label_display,
|
||||
]
|
||||
%}
|
||||
<span{{ attributes.addClass(classes) }}>
|
||||
{%- for item in items -%}
|
||||
{{ item.content }}
|
||||
{%- endfor -%}
|
||||
</span>
|
|
@ -0,0 +1,34 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for the node title field.
|
||||
*
|
||||
* This is an override of field.html.twig for the node title field. See that
|
||||
* template for documentation about its details and overrides.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing span element.
|
||||
* - items: List of all the field items. Each item contains:
|
||||
* - attributes: List of HTML attributes for each item.
|
||||
* - content: The field item content.
|
||||
* - entity_type: The entity type to which the field belongs.
|
||||
* - field_name: The name of the field.
|
||||
* - field_type: The type of the field.
|
||||
* - label_display: The display settings for the label.
|
||||
*
|
||||
* @see field.html.twig
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'field',
|
||||
'field--name-' ~ field_name|clean_class,
|
||||
'field--type-' ~ field_type|clean_class,
|
||||
'field--label-' ~ label_display,
|
||||
]
|
||||
%}
|
||||
<span{{ attributes.addClass(classes) }}>
|
||||
{%- for item in items -%}
|
||||
{{ item.content }}
|
||||
{%- endfor -%}
|
||||
</span>
|
|
@ -0,0 +1,34 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for the node user field.
|
||||
*
|
||||
* This is an override of field.html.twig for the node user field. See that
|
||||
* template for documentation about its details and overrides.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing span element.
|
||||
* - items: List of all the field items. Each item contains:
|
||||
* - attributes: List of HTML attributes for each item.
|
||||
* - content: The field item content.
|
||||
* - entity_type: The entity type to which the field belongs.
|
||||
* - field_name: The name of the field.
|
||||
* - field_type: The type of the field.
|
||||
* - label_display: The display settings for the label.
|
||||
*
|
||||
* @see field.html.twig
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'field',
|
||||
'field--name-' ~ field_name|clean_class,
|
||||
'field--type-' ~ field_type|clean_class,
|
||||
'field--label-' ~ label_display,
|
||||
]
|
||||
%}
|
||||
<span{{ attributes.addClass(classes) }}>
|
||||
{%- for item in items -%}
|
||||
{{ item.content }}
|
||||
{%- endfor -%}
|
||||
</span>
|
|
@ -0,0 +1 @@
|
|||
{% extends "field--text.html.twig" %}
|
|
@ -0,0 +1 @@
|
|||
{% extends "field--text.html.twig" %}
|
28
web/core/themes/classy/templates/field/field--text.html.twig
Normal file
|
@ -0,0 +1,28 @@
|
|||
{% extends "field.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Default theme implementation for a text field.
|
||||
*
|
||||
* A 'clearfix' class is added, because 'text' fields have a 'format' property
|
||||
* that allows a Text Format to be associated with the entered text, which then
|
||||
* applies filtering on output. A common use case is to align images to the left
|
||||
* or right, and without this 'clearfix' class, such aligned images may be
|
||||
* rendered outside of the 'text' field formatter's boundaries, and hence
|
||||
* overlap with other fields. By setting the 'clearfix' class on all 'text'
|
||||
* fields, we prevent that.
|
||||
*
|
||||
* @see https://www.drupal.org/node/2358529
|
||||
*
|
||||
* A 'text-formatted' class is added to assist with default styling of base
|
||||
* elements such as paragraphs and lists that may not have classes assigned to
|
||||
* them. This allows user entered content to have default styling without
|
||||
* interfering with the styles of other UI components such as system generated
|
||||
* lists or other dynamic content.
|
||||
*
|
||||
* @see https://www.drupal.org/node/2539860
|
||||
*
|
||||
* @ingroup themeable
|
||||
*/
|
||||
#}
|
||||
{% set attributes = attributes.addClass('clearfix', 'text-formatted') %}
|
80
web/core/themes/classy/templates/field/field.html.twig
Normal file
|
@ -0,0 +1,80 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a field.
|
||||
*
|
||||
* To override output, copy the "field.html.twig" from the templates directory
|
||||
* to your theme's directory and customize it, just like customizing other
|
||||
* Drupal templates such as page.html.twig or node.html.twig.
|
||||
*
|
||||
* Instead of overriding the theming for all fields, you can also just override
|
||||
* theming for a subset of fields using
|
||||
* @link themeable Theme hook suggestions. @endlink For example,
|
||||
* here are some theme hook suggestions that can be used for a field_foo field
|
||||
* on an article node type:
|
||||
* - field--node--field-foo--article.html.twig
|
||||
* - field--node--field-foo.html.twig
|
||||
* - field--node--article.html.twig
|
||||
* - field--field-foo.html.twig
|
||||
* - field--text-with-summary.html.twig
|
||||
* - field.html.twig
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the containing element.
|
||||
* - label_hidden: Whether to show the field label or not.
|
||||
* - title_attributes: HTML attributes for the title.
|
||||
* - label: The label for the field.
|
||||
* - multiple: TRUE if a field can contain multiple items.
|
||||
* - items: List of all the field items. Each item contains:
|
||||
* - attributes: List of HTML attributes for each item.
|
||||
* - content: The field item's content.
|
||||
* - entity_type: The entity type to which the field belongs.
|
||||
* - field_name: The name of the field.
|
||||
* - field_type: The type of the field.
|
||||
* - label_display: The display settings for the label.
|
||||
*
|
||||
*
|
||||
* @see template_preprocess_field()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
'field',
|
||||
'field--name-' ~ field_name|clean_class,
|
||||
'field--type-' ~ field_type|clean_class,
|
||||
'field--label-' ~ label_display,
|
||||
]
|
||||
%}
|
||||
{%
|
||||
set title_classes = [
|
||||
'field__label',
|
||||
label_display == 'visually_hidden' ? 'visually-hidden',
|
||||
]
|
||||
%}
|
||||
|
||||
{% if label_hidden %}
|
||||
{% if multiple %}
|
||||
<div{{ attributes.addClass(classes, 'field__items') }}>
|
||||
{% for item in items %}
|
||||
<div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
{% for item in items %}
|
||||
<div{{ attributes.addClass(classes, 'field__item') }}>{{ item.content }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div{{ attributes.addClass(classes) }}>
|
||||
<div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
|
||||
{% if multiple %}
|
||||
<div class="field__items">
|
||||
{% endif %}
|
||||
{% for item in items %}
|
||||
<div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div>
|
||||
{% endfor %}
|
||||
{% if multiple %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
15
web/core/themes/classy/templates/field/file-link.html.twig
Normal file
|
@ -0,0 +1,15 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a link to a file.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: The HTML attributes for the containing element.
|
||||
* - link: A link to the file.
|
||||
* - icon: The icon image representing the file type.
|
||||
*
|
||||
* @see template_preprocess_file_link()
|
||||
*/
|
||||
#}
|
||||
{{ attach_library('classy/file') }}
|
||||
<span{{ attributes }}>{{ icon }} {{ link }}</span>
|
|
@ -0,0 +1,19 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a formatted image field.
|
||||
*
|
||||
* Available variables:
|
||||
* - image: A collection of image data.
|
||||
* - image_style: An optional image style.
|
||||
* - path: An optional array containing the link 'path' and link 'options'.
|
||||
* - url: An optional URL the image can be linked to.
|
||||
*
|
||||
* @see template_preprocess_image_formatter()
|
||||
*/
|
||||
#}
|
||||
{% if url %}
|
||||
<a href="{{ url }}">{{ image }}</a>
|
||||
{% else %}
|
||||
{{ image }}
|
||||
{% endif %}
|
18
web/core/themes/classy/templates/field/image-style.html.twig
Normal file
|
@ -0,0 +1,18 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for an image using a specific image style.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the image, including the following:
|
||||
* - src: Full URL or relative path to the image file.
|
||||
* - class: One or more classes to be applied to the image.
|
||||
* - width: The width of the image (if known).
|
||||
* - height: The height of the image (if known).
|
||||
* - title: The title of the image.
|
||||
* - alt: The alternative text for the image.
|
||||
*
|
||||
* @see template_preprocess_image_style()
|
||||
*/
|
||||
#}
|
||||
{{ image }}
|
18
web/core/themes/classy/templates/field/image.html.twig
Normal file
|
@ -0,0 +1,18 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override of an image.
|
||||
*
|
||||
* Available variables:
|
||||
* - attributes: HTML attributes for the img tag.
|
||||
* - style_name: (optional) The name of the image style applied.
|
||||
*
|
||||
* @see template_preprocess_image()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set classes = [
|
||||
style_name ? 'image-style-' ~ style_name|clean_class,
|
||||
]
|
||||
%}
|
||||
<img{{ attributes.addClass(classes) }} />
|
|
@ -0,0 +1,22 @@
|
|||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override of a link with separate title and URL elements.
|
||||
*
|
||||
* Available variables:
|
||||
* - link: The link that has already been formatted by l().
|
||||
* - title: (optional) A descriptive or alternate title for the link, which may
|
||||
* be different than the actual link text.
|
||||
*
|
||||
* @see template_preprocess()
|
||||
* @see template_preprocess_link_formatter_link_separate()
|
||||
*/
|
||||
#}
|
||||
{% spaceless %}
|
||||
<div class="link-item">
|
||||
{% if title %}
|
||||
<div class="link-title">{{ title }}</div>
|
||||
{% endif %}
|
||||
<div class="link-url">{{ link }}</div>
|
||||
</div>
|
||||
{% endspaceless %}
|