@ -0,0 +1 @@ |
|||||||
|
islandscholar theme, generated from starterkit_theme. Additional information on generating themes can be found in the [Starterkit documentation](https://www.drupal.org/docs/core-modules-and-themes/core-themes/starterkit-theme). |
@ -0,0 +1,44 @@ |
|||||||
|
SITE: |
||||||
|
Local: |
||||||
|
Url: 'https://d10_dev.lndo.site/' |
||||||
|
Remote: |
||||||
|
Url: 'https://library.upei.ca/' |
||||||
|
Path: user |
||||||
|
PORT: 8000 |
||||||
|
BSREWRITE: |
||||||
|
Css: |
||||||
|
|
||||||
|
Match: '/themes/custom/roblib_2023/css/global-style.css' |
||||||
|
Replace: '/css/global-style.css' |
||||||
|
Js: |
||||||
|
Match: "/themes/custom/roblib_2023/js/custom_js.js" |
||||||
|
Replace: "/js/custom_js.js" |
||||||
|
PATHS: |
||||||
|
Watch: |
||||||
|
#changes in these compiled files trigged reload |
||||||
|
- ./css/*.css |
||||||
|
- ./js/*.js |
||||||
|
Scss: |
||||||
|
Dir: ./css/sass |
||||||
|
Libraries: |
||||||
|
#- libraries/guff |
||||||
|
#- bower_components/foundation-sites/scss |
||||||
|
#- bower_components/motion-ui/src |
||||||
|
- node_modules/modularscale-sass/stylesheets |
||||||
|
#- node_modules/vanilla-framework/scss |
||||||
|
- node_modules/foundation-sites/scss |
||||||
|
- node_modules/foundation-sites/scss/util |
||||||
|
- node_modules/motion-ui/src |
||||||
|
- icons/fontawesome/scss |
||||||
|
- node_modules |
||||||
|
Css: |
||||||
|
Dir: css |
||||||
|
#FileName: app.css |
||||||
|
Js: |
||||||
|
Src: ./js/src/*.js |
||||||
|
Dest: js |
||||||
|
FileName: 'ia-islandimagined.behaviors.js' |
||||||
|
Img: |
||||||
|
Src: img/src |
||||||
|
Dest: img |
||||||
|
|
@ -0,0 +1,43 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Styles for link buttons and action links. |
||||||
|
*/ |
||||||
|
|
||||||
|
.action-links { |
||||||
|
margin: 1em 0; |
||||||
|
padding: 0; |
||||||
|
list-style: none; |
||||||
|
} |
||||||
|
[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-right: 0; |
||||||
|
margin-left: 0.3em; |
||||||
|
} |
||||||
|
.button-action { |
||||||
|
display: inline-block; |
||||||
|
padding: 0.2em 0.5em 0.3em; |
||||||
|
text-decoration: none; |
||||||
|
line-height: 160%; |
||||||
|
} |
||||||
|
.button-action:before { |
||||||
|
margin-left: -0.1em; /* LTR */ |
||||||
|
padding-right: 0.2em; /* LTR */ |
||||||
|
content: "+"; |
||||||
|
font-weight: 900; |
||||||
|
} |
||||||
|
[dir="rtl"] .button-action:before { |
||||||
|
margin-right: -0.1em; |
||||||
|
margin-left: 0; |
||||||
|
padding-right: 0; |
||||||
|
padding-left: 0.2em; |
||||||
|
} |
@ -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; |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
list-style-type: none; |
||||||
|
} |
||||||
|
/* IE8 does not support :not() and :last-child. */ |
||||||
|
.breadcrumb li:before { |
||||||
|
content: " \BB "; |
||||||
|
} |
||||||
|
.breadcrumb li:first-child:before { |
||||||
|
content: none; |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for buttons. |
||||||
|
*/ |
||||||
|
|
||||||
|
.button, |
||||||
|
.image-button { |
||||||
|
margin-right: 1em; |
||||||
|
margin-left: 1em; |
||||||
|
} |
||||||
|
.button:first-child, |
||||||
|
.image-button:first-child { |
||||||
|
margin-right: 0; |
||||||
|
margin-left: 0; |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Inline items. |
||||||
|
*/ |
||||||
|
|
||||||
|
.container-inline label:after, |
||||||
|
.container-inline .label:after { |
||||||
|
content: ":"; |
||||||
|
} |
||||||
|
.form-type-radios .container-inline label:after, |
||||||
|
.form-type-checkboxes .container-inline label:after { |
||||||
|
content: ""; |
||||||
|
} |
||||||
|
.form-type-radios .container-inline .form-type-radio, |
||||||
|
.form-type-checkboxes .container-inline .form-type-checkbox { |
||||||
|
margin: 0 1em; |
||||||
|
} |
||||||
|
.container-inline .form-actions, |
||||||
|
.container-inline.form-actions { |
||||||
|
margin-top: 0; |
||||||
|
margin-bottom: 0; |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Collapsible details. |
||||||
|
* |
||||||
|
* @see collapse.js |
||||||
|
* @see http://nicolasgallagher.com/css-background-image-hacks/ |
||||||
|
*/ |
||||||
|
|
||||||
|
details { |
||||||
|
margin-top: 1em; |
||||||
|
margin-bottom: 1em; |
||||||
|
border: 1px solid #ccc; |
||||||
|
} |
||||||
|
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 { |
||||||
|
padding: 0.2em 0.5em; |
||||||
|
cursor: pointer; |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Presentational styles for Drupal dialogs. |
||||||
|
*/ |
||||||
|
|
||||||
|
.ui-dialog { |
||||||
|
position: absolute; |
||||||
|
z-index: 1260; |
||||||
|
overflow: visible; |
||||||
|
padding: 0; |
||||||
|
color: #000; |
||||||
|
border: solid 1px #ccc; |
||||||
|
background: #fff; |
||||||
|
} |
||||||
|
|
||||||
|
@media all and (max-width: 48em) { /* 768px */ |
||||||
|
.ui-dialog { |
||||||
|
width: 92% !important; |
||||||
|
} |
||||||
|
} |
||||||
|
.ui-dialog .ui-dialog-titlebar { |
||||||
|
border-width: 0 0 1px 0; |
||||||
|
border-style: solid; |
||||||
|
border-color: #ccc; |
||||||
|
border-radius: 0; |
||||||
|
background: #f3f4ee; |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
.ui-dialog .ui-dialog-titlebar-close { |
||||||
|
border: 0; |
||||||
|
background: none; |
||||||
|
} |
||||||
|
.ui-dialog .ui-dialog-buttonpane { |
||||||
|
margin-top: 0; |
||||||
|
padding: 0.3em 1em; |
||||||
|
border-width: 1px 0 0 0; |
||||||
|
border-color: #ccc; |
||||||
|
background: #f3f4ee; |
||||||
|
} |
||||||
|
.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 { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
.ui-dialog .ajax-progress-throbber { |
||||||
|
position: fixed; |
||||||
|
z-index: 1000; |
||||||
|
top: 48.5%; |
||||||
|
/* Can't do center:50% middle: 50%, so approximate it for a typical window size. */ |
||||||
|
left: 49%; |
||||||
|
width: 24px; |
||||||
|
height: 24px; |
||||||
|
padding: 4px; |
||||||
|
opacity: 0.9; |
||||||
|
border-radius: 7px; |
||||||
|
background-color: #232323; |
||||||
|
background-image: url(../../images/icons/loading-small.gif); |
||||||
|
background-repeat: no-repeat; |
||||||
|
background-position: center center; |
||||||
|
} |
||||||
|
.ui-dialog .ajax-progress-throbber .throbber, |
||||||
|
.ui-dialog .ajax-progress-throbber .message { |
||||||
|
display: none; |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* General styles for dropbuttons. |
||||||
|
*/ |
||||||
|
|
||||||
|
.js .dropbutton-widget { |
||||||
|
border: 1px solid #ccc; |
||||||
|
background-color: white; |
||||||
|
} |
||||||
|
.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-right: 0 none; |
||||||
|
border-left: 1px solid #e8e8e8; |
||||||
|
} |
||||||
|
.dropbutton-multiple .dropbutton .dropbutton-action > * { |
||||||
|
margin-right: 0.25em; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .dropbutton-multiple .dropbutton .dropbutton-action > * { |
||||||
|
margin-right: 0; |
||||||
|
margin-left: 0.25em; |
||||||
|
} |
@ -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-right: 0; |
||||||
|
margin-left: 1em; |
||||||
|
} |
||||||
|
.exposed-filters .form-item { |
||||||
|
margin: 0 0 0.1em 0; |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
.exposed-filters .form-item label { |
||||||
|
float: left; /* LTR */ |
||||||
|
width: 10em; |
||||||
|
font-weight: normal; |
||||||
|
} |
||||||
|
[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-weight: bold; |
||||||
|
font-style: normal; |
||||||
|
} |
||||||
|
.exposed-filters .additional-filters { |
||||||
|
float: left; /* LTR */ |
||||||
|
margin-right: 1em; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .exposed-filters .additional-filters { |
||||||
|
float: right; |
||||||
|
margin-right: 0; |
||||||
|
margin-left: 1em; |
||||||
|
} |
@ -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-right: 0; |
||||||
|
padding-left: 0.5em; |
||||||
|
} |
||||||
|
.field--label-inline .field__label::after { |
||||||
|
content: ":"; |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Default style for file module. |
||||||
|
*/ |
||||||
|
|
||||||
|
/* File icons. */ |
||||||
|
|
||||||
|
.file { |
||||||
|
display: inline-block; |
||||||
|
min-height: 16px; |
||||||
|
padding-left: 20px; /* LTR */ |
||||||
|
background-repeat: no-repeat; |
||||||
|
background-position: left center; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .file { |
||||||
|
padding-right: 20px; |
||||||
|
padding-left: inherit; |
||||||
|
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); |
||||||
|
} |
@ -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: 0.5em; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] form .field-multiple-table .field-multiple-drag .tabledrag-handle { |
||||||
|
padding-right: 0; |
||||||
|
padding-left: 0.5em; |
||||||
|
} |
||||||
|
form .field-add-more-submit { |
||||||
|
margin: 0.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; |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
font-size: inherit; |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
.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-right: 2.4em; |
||||||
|
margin-left: 0; |
||||||
|
} |
||||||
|
.marker { |
||||||
|
color: #e00; |
||||||
|
} |
||||||
|
.form-required:after { |
||||||
|
display: inline-block; |
||||||
|
width: 6px; |
||||||
|
height: 6px; |
||||||
|
margin: 0 0.3em; |
||||||
|
content: ""; |
||||||
|
vertical-align: super; |
||||||
|
/* Use a background image to prevent screen readers from announcing the text. */ |
||||||
|
background-image: url(../../images/icons/required.svg); |
||||||
|
background-repeat: no-repeat; |
||||||
|
background-size: 6px 6px; |
||||||
|
} |
||||||
|
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 { |
||||||
|
display: inline-block; |
||||||
|
width: 14px; |
||||||
|
height: 14px; |
||||||
|
content: ""; |
||||||
|
vertical-align: sub; |
||||||
|
background: url(../../images/icons/error.svg) no-repeat; |
||||||
|
background-size: contain; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for icons. |
||||||
|
*/ |
||||||
|
|
||||||
|
.icon-help { |
||||||
|
padding: 1px 0 1px 20px; /* LTR */ |
||||||
|
background: url(../../images/icons/help.png) 0 50% no-repeat; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .icon-help { |
||||||
|
padding: 1px 20px 1px 0; |
||||||
|
background-position: 100% 50%; |
||||||
|
} |
||||||
|
.feed-icon { |
||||||
|
display: block; |
||||||
|
overflow: hidden; |
||||||
|
width: 16px; |
||||||
|
height: 16px; |
||||||
|
text-indent: -9999px; |
||||||
|
background: url(../../images/icons/feed.svg) no-repeat; |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* 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; |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Basic styling for comment module. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Indent threaded comments. |
||||||
|
*/ |
||||||
|
.indented { |
||||||
|
margin-left: 25px; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .indented { |
||||||
|
margin-right: 25px; |
||||||
|
margin-left: 0; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Style another element as a link. |
||||||
|
*/ |
||||||
|
|
||||||
|
button.link { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
cursor: pointer; |
||||||
|
border: 0; |
||||||
|
background: transparent; |
||||||
|
font-size: 1em; |
||||||
|
} |
||||||
|
label button.link { |
||||||
|
font-weight: bold; |
||||||
|
} |
@ -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; |
||||||
|
padding: 0 0.5em; |
||||||
|
list-style-type: none; |
||||||
|
} |
||||||
|
ul.links a.is-active { |
||||||
|
color: #000; |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for menu. |
||||||
|
*/ |
||||||
|
|
||||||
|
ul.menu { |
||||||
|
margin-left: 1em; /* LTR */ |
||||||
|
padding: 0; |
||||||
|
list-style: none outside; |
||||||
|
text-align: left; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] ul.menu { |
||||||
|
margin-right: 1em; |
||||||
|
margin-left: 0; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
.menu-item--expanded { |
||||||
|
list-style-type: circle; |
||||||
|
list-style-image: url(../../images/icons/menu-expanded.png); |
||||||
|
} |
||||||
|
.menu-item--collapsed { |
||||||
|
list-style-type: disc; |
||||||
|
list-style-image: url(../../images/icons/menu-collapsed.png); /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .menu-item--collapsed { |
||||||
|
list-style-image: url(../../images/icons/menu-collapsed-rtl.png); |
||||||
|
} |
||||||
|
.menu-item { |
||||||
|
margin: 0; |
||||||
|
padding-top: 0.2em; |
||||||
|
} |
||||||
|
ul.menu a.is-active { |
||||||
|
color: #000; |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Styles for system messages. |
||||||
|
*/ |
||||||
|
|
||||||
|
.messages { |
||||||
|
padding: 15px 20px 15px 35px; /* LTR */ |
||||||
|
word-wrap: break-word; |
||||||
|
border: 1px solid; |
||||||
|
border-width: 1px 1px 1px 0; /* LTR */ |
||||||
|
border-radius: 2px; |
||||||
|
background: no-repeat 10px 17px; /* LTR */ |
||||||
|
overflow-wrap: break-word; |
||||||
|
} |
||||||
|
[dir="rtl"] .messages { |
||||||
|
padding-right: 35px; |
||||||
|
padding-left: 20px; |
||||||
|
text-align: right; |
||||||
|
border-width: 1px 0 1px 1px; |
||||||
|
background-position: right 10px top 17px; |
||||||
|
} |
||||||
|
.messages + .messages { |
||||||
|
margin-top: 1.538em; |
||||||
|
} |
||||||
|
.messages__list { |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
list-style: none; |
||||||
|
} |
||||||
|
.messages__item + .messages__item { |
||||||
|
margin-top: 0.769em; |
||||||
|
} |
||||||
|
.messages--status { |
||||||
|
color: #325e1c; |
||||||
|
border-color: #c9e1bd #c9e1bd #c9e1bd transparent; /* LTR */ |
||||||
|
background-color: #f3faef; |
||||||
|
background-image: url(../../images/icons/check.svg); |
||||||
|
box-shadow: -8px 0 0 #77b259; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .messages--status { |
||||||
|
margin-left: 0; |
||||||
|
border-color: #c9e1bd transparent #c9e1bd #c9e1bd; |
||||||
|
box-shadow: 8px 0 0 #77b259; |
||||||
|
} |
||||||
|
.messages--warning { |
||||||
|
color: #734c00; |
||||||
|
border-color: #f4daa6 #f4daa6 #f4daa6 transparent; /* LTR */ |
||||||
|
background-color: #fdf8ed; |
||||||
|
background-image: url(../../images/icons/warning.svg); |
||||||
|
box-shadow: -8px 0 0 #e09600; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .messages--warning { |
||||||
|
border-color: #f4daa6 transparent #f4daa6 #f4daa6; |
||||||
|
box-shadow: 8px 0 0 #e09600; |
||||||
|
} |
||||||
|
.messages--error { |
||||||
|
color: #a51b00; |
||||||
|
border-color: #f9c9bf #f9c9bf #f9c9bf transparent; /* LTR */ |
||||||
|
background-color: #fcf4f2; |
||||||
|
background-image: url(../../images/icons/error.svg); |
||||||
|
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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for nodes. |
||||||
|
*/ |
||||||
|
|
||||||
|
.node--unpublished { |
||||||
|
background-color: #fff4f4; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for progress bar. |
||||||
|
* |
||||||
|
* @see progress.js |
||||||
|
*/ |
||||||
|
|
||||||
|
.progress__track { |
||||||
|
border-color: #b3b3b3; |
||||||
|
border-radius: 10em; |
||||||
|
background-color: #f2f1eb; |
||||||
|
background-image: linear-gradient(#e7e7df, #f0f0f0); |
||||||
|
box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.16); |
||||||
|
} |
||||||
|
.progress__bar { |
||||||
|
height: 16px; |
||||||
|
margin-top: -1px; |
||||||
|
margin-left: -1px; /* LTR */ |
||||||
|
padding: 0 1px; |
||||||
|
-webkit-transition: width 0.5s ease-out; |
||||||
|
transition: width 0.5s ease-out; |
||||||
|
-webkit-animation: animate-stripes 3s linear infinite; |
||||||
|
-moz-animation: animate-stripes 3s linear infinite; |
||||||
|
border: 1px #07629a solid; |
||||||
|
border-radius: 10em; |
||||||
|
background: #057ec9; |
||||||
|
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; |
||||||
|
} |
||||||
|
[dir="rtl"] .progress__bar { |
||||||
|
margin-right: -1px; |
||||||
|
margin-left: 0; |
||||||
|
-webkit-animation-direction: reverse; |
||||||
|
-moz-animation-direction: reverse; |
||||||
|
animation-direction: reverse; |
||||||
|
} |
||||||
|
|
||||||
|
@media screen and (prefers-reduced-motion: reduce) { |
||||||
|
.progress__bar { |
||||||
|
-webkit-transition: none; |
||||||
|
transition: none; |
||||||
|
-webkit-animation: none; |
||||||
|
-moz-animation: none; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Progress bar animations. |
||||||
|
*/ |
||||||
|
@keyframes animate-stripes { |
||||||
|
0% { background-position: 0 0, 0 0; } |
||||||
|
100% { background-position: 0 0, -80px 0; } |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Stylesheet for results generated by the Search module. |
||||||
|
*/ |
||||||
|
|
||||||
|
.search-results { |
||||||
|
list-style: none; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Table sort indicator. |
||||||
|
*/ |
||||||
|
|
||||||
|
th.is-active img { |
||||||
|
display: inline; |
||||||
|
} |
||||||
|
td.is-active { |
||||||
|
background-color: #ddd; |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for tabs. |
||||||
|
*/ |
||||||
|
|
||||||
|
div.tabs { |
||||||
|
margin: 1em 0; |
||||||
|
} |
||||||
|
ul.tabs { |
||||||
|
margin: 0 0 0.5em; |
||||||
|
padding: 0; |
||||||
|
list-style: none; |
||||||
|
} |
||||||
|
.tabs > li { |
||||||
|
display: inline-block; |
||||||
|
margin-right: 0.3em; /* LTR */ |
||||||
|
} |
||||||
|
[dir="rtl"] .tabs > li { |
||||||
|
margin-right: 0; |
||||||
|
margin-left: 0.3em; |
||||||
|
} |
||||||
|
.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; |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Visual styles for a resizable textarea. |
||||||
|
*/ |
||||||
|
|
||||||
|
.form-textarea-wrapper textarea { |
||||||
|
display: block; |
||||||
|
box-sizing: border-box; |
||||||
|
width: 100%; |
||||||
|
margin: 0; |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
/** |
||||||
|
* @file |
||||||
|
* Styles for modal windows. |
||||||
|
*/ |
||||||
|
|
||||||
|
.ui-dialog--narrow { |
||||||
|
max-width: 500px; |
||||||
|
} |
||||||
|
|
||||||
|
@media screen and (max-width: 600px) { |
||||||
|
.ui-dialog--narrow { |
||||||
|
min-width: 95%; |
||||||
|
max-width: 95%; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
/** |
||||||
|
* @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 { |
||||||
|
-webkit-transition: width 0.5s ease-out; |
||||||
|
transition: width 0.5s ease-out; |
||||||
|
background-color: #77b259; |
||||||
|
} |
||||||
|
.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, |
||||||
|
.password-confirm-message { |
||||||
|
width: 55%; |
||||||
|
} |
||||||
|
|
||||||
|
.password-suggestions { |
||||||
|
max-width: 34.7em; |
||||||
|
margin: 0.7em 0; |
||||||
|
padding: 0.2em 0.5em; |
||||||
|
border: 1px solid #b4b4b4; |
||||||
|
} |
||||||
|
.password-suggestions ul { |
||||||
|
margin-bottom: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.confirm-parent, |
||||||
|
.password-parent { |
||||||
|
clear: left; /* LTR */ |
||||||
|
overflow: hidden; |
||||||
|
max-width: 33em; |
||||||
|
margin: 0; |
||||||
|
} |
||||||
|
[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; |
||||||
|
} |
@ -0,0 +1,110 @@ |
|||||||
|
//@format
|
||||||
|
const yaml = require('js-yaml'); |
||||||
|
const fs = require('fs'); |
||||||
|
const { SITE, PORT, BSREWRITE, PATHS } = loadConfig(); |
||||||
|
//var server = require('browser-sync').create();
|
||||||
|
//global.server = server;
|
||||||
|
const gulp = require('gulp'); |
||||||
|
const plumber = require('gulp-plumber'); |
||||||
|
const autoprefixer = require('gulp-autoprefixer'); |
||||||
|
const sass = require('gulp-sass')(require('sass')); |
||||||
|
const browsersync = require('browser-sync').create(); |
||||||
|
const sourcemaps = require('gulp-sourcemaps'); |
||||||
|
const cleanCSS = require('gulp-clean-css'); |
||||||
|
|
||||||
|
function loadConfig() { |
||||||
|
var ymlFile = fs.readFileSync('config.yml', 'utf8'); |
||||||
|
return yaml.load(ymlFile); |
||||||
|
} |
||||||
|
|
||||||
|
// BrowserSync
|
||||||
|
function bsInit__local(done) { |
||||||
|
browsersync.init({ |
||||||
|
logLevel: 'debug', |
||||||
|
proxy: SITE.Local.Url, |
||||||
|
//proxy: 'https://d10_dev.lndo.site/',
|
||||||
|
}); |
||||||
|
done(); |
||||||
|
} |
||||||
|
|
||||||
|
function bsInit__remote(done) { |
||||||
|
browsersync.init({ |
||||||
|
//logLevel: 'debug',
|
||||||
|
proxy: SITE.Remote.Url, |
||||||
|
serveStatic: ['.'], |
||||||
|
files: PATHS.Watch, |
||||||
|
plugins: ['bs-rewrite-rules'], |
||||||
|
rewriteRules: [ |
||||||
|
{ |
||||||
|
match: BSREWRITE.Css.Match, |
||||||
|
replace: BSREWRITE.Css.Replace |
||||||
|
}, |
||||||
|
{ |
||||||
|
match: BSREWRITE.Js.Match, |
||||||
|
replace: BSREWRITE.Js.Replace |
||||||
|
} |
||||||
|
] |
||||||
|
}); |
||||||
|
done(); |
||||||
|
} |
||||||
|
|
||||||
|
// BrowserSync Reload
|
||||||
|
function bsReload(done) { |
||||||
|
browsersync.reload(); |
||||||
|
done(); |
||||||
|
} |
||||||
|
|
||||||
|
var cp = require('child_process'); |
||||||
|
function drush() { |
||||||
|
return cp.exec('lando drush cr'); |
||||||
|
} |
||||||
|
|
||||||
|
// Compile CSS
|
||||||
|
function styles() { |
||||||
|
'use strict'; |
||||||
|
return gulp |
||||||
|
//.src(PATHS.Scss.Dir + '/**/*.scss')
|
||||||
|
.src('./css/sass/**/*.scss') |
||||||
|
.pipe(plumber()) |
||||||
|
.pipe(sourcemaps.init()) |
||||||
|
.pipe( |
||||||
|
sass |
||||||
|
.sync({ |
||||||
|
includePaths: PATHS.Scss.Libraries |
||||||
|
}) |
||||||
|
.on('error', sass.logError) |
||||||
|
) |
||||||
|
//.pipe(cleanCSS())
|
||||||
|
.pipe(sourcemaps.write('.')) |
||||||
|
//.pipe(gulp.dest(PATHS.Css.Dir))
|
||||||
|
.pipe(gulp.dest('./css')) |
||||||
|
.pipe(browsersync.stream()); |
||||||
|
} |
||||||
|
|
||||||
|
// Watch Files
|
||||||
|
function watchFiles() { |
||||||
|
'use strict'; |
||||||
|
//gulp.watch(PATHS.Scss.Dir + '/**/*.scss', styles);
|
||||||
|
gulp.watch('css/sass/**/*.scss', styles); |
||||||
|
gulp.watch('./templates/**/*.twig', drush); |
||||||
|
} |
||||||
|
|
||||||
|
// Group complex tasks
|
||||||
|
const build = gulp.parallel(styles); |
||||||
|
const watch_remote = gulp.series( |
||||||
|
styles, |
||||||
|
gulp.parallel(watchFiles, bsInit__remote) |
||||||
|
); |
||||||
|
const watch_local = gulp.series( |
||||||
|
styles, |
||||||
|
gulp.parallel(watchFiles, bsInit__local) |
||||||
|
); |
||||||
|
|
||||||
|
// Export tasks
|
||||||
|
exports.build = build; |
||||||
|
exports.styles = styles; |
||||||
|
exports.drush = drush; |
||||||
|
exports.watch = watch_remote; |
||||||
|
exports.remote = watch_remote; |
||||||
|
exports.local = watch_local; |
||||||
|
exports.default = watch_remote; |
After Width: | Height: | Size: 189 B |
After Width: | Height: | Size: 346 B |
After Width: | Height: | Size: 189 B |
After Width: | Height: | Size: 314 B |
After Width: | Height: | Size: 294 B |
After Width: | Height: | Size: 385 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 107 B |
After Width: | Height: | Size: 105 B |
After Width: | Height: | Size: 106 B |
After Width: | Height: | Size: 260 B |
After Width: | Height: | Size: 265 B |
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 276 B |
After Width: | Height: | Size: 214 B |
After Width: | Height: | Size: 196 B |
After Width: | Height: | Size: 181 B |
After Width: | Height: | Size: 183 B |
@ -0,0 +1,22 @@ |
|||||||
|
name: islandscholar |
||||||
|
type: theme |
||||||
|
'base theme': stable9 |
||||||
|
starterkit: true |
||||||
|
version: VERSION |
||||||
|
libraries: |
||||||
|
- islandscholar/base |
||||||
|
- islandscholar/messages |
||||||
|
- core/normalize |
||||||
|
libraries-extend: |
||||||
|
user/drupal.user: |
||||||
|
- islandscholar/user |
||||||
|
core/drupal.dropbutton: |
||||||
|
- islandscholar/dropbutton |
||||||
|
core/drupal.dialog: |
||||||
|
- islandscholar/dialog |
||||||
|
file/drupal.file: |
||||||
|
- islandscholar/file |
||||||
|
core/drupal.progress: |
||||||
|
- islandscholar/progress |
||||||
|
core_version_requirement: ^10 |
||||||
|
generator: 'starterkit_theme:10.0.9' |
@ -0,0 +1,105 @@ |
|||||||
|
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/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 |
||||||
|
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 |
||||||
|
image-widget: |
||||||
|
version: VERSION |
||||||
|
css: |
||||||
|
component: |
||||||
|
css/components/image-widget.css: { } |
||||||
|
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 |
@ -0,0 +1,21 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Functions to support theming. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_preprocess_image_widget(). |
||||||
|
*/ |
||||||
|
function islandscholar_preprocess_image_widget(array &$variables) { |
||||||
|
$data = &$variables['data']; |
||||||
|
|
||||||
|
// This prevents image widget templates from rendering preview container HTML |
||||||
|
// to users that do not have permission to access these previews. |
||||||
|
// @todo revisit in https://drupal.org/node/953034 |
||||||
|
// @todo revisit in https://drupal.org/node/3114318 |
||||||
|
if (isset($data['preview']['#access']) && $data['preview']['#access'] === FALSE) { |
||||||
|
unset($data['preview']); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
{ |
||||||
|
"name": "vanilla_vre", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "vanilla_vre theme, generated from starterkit_theme. Additional information on generating themes can be found in the [Starterkit documentation](https://www.drupal.org/docs/core-modules-and-themes/core-themes/starterkit-theme).", |
||||||
|
"main": "index.js", |
||||||
|
"scripts": { |
||||||
|
"test": "echo \"Error: no test specified\" && exit 1" |
||||||
|
}, |
||||||
|
"author": "", |
||||||
|
"license": "ISC", |
||||||
|
"devDependencies": { |
||||||
|
"breakpoint-sass": "^2.7.1", |
||||||
|
"browser-sync": "latest", |
||||||
|
"bs-rewrite-rules": "^2.1.2", |
||||||
|
"foundation-sites": "^6.7.5", |
||||||
|
"fs": "^0.0.1-security", |
||||||
|
"gulp": "latest", |
||||||
|
"gulp-autoprefixer": "latest", |
||||||
|
"gulp-cache": "^1.1.3", |
||||||
|
"gulp-clean-css": "^4.3.0", |
||||||
|
"gulp-concat": "^2.6.1", |
||||||
|
"gulp-plumber": "latest", |
||||||
|
"gulp-rename": "latest", |
||||||
|
"gulp-sass": "latest", |
||||||
|
"gulp-sourcemaps": "^3.0.0", |
||||||
|
"gulp4-run-sequence": "^1.0.0", |
||||||
|
"js-yaml": "^4.1.0", |
||||||
|
"modularscale-sass": "^3.0.10", |
||||||
|
"natives": "^1.1.6", |
||||||
|
"require-dir": "^1.2.0", |
||||||
|
"run-sequence": "^2.2.1", |
||||||
|
"sass": "^1.44.0", |
||||||
|
"vanilla-framework": "^3.10.0" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"superfish": "^1.7.10" |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,20 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace Drupal\starterkit_theme; |
||||||
|
|
||||||
|
use Drupal\Component\Serialization\Yaml; |
||||||
|
use Drupal\Core\Theme\StarterKitInterface; |
||||||
|
|
||||||
|
final class StarterKit implements StarterKitInterface { |
||||||
|
|
||||||
|
/** |
||||||
|
* {@inheritdoc} |
||||||
|
*/ |
||||||
|
public static function postProcess(string $working_dir, string $machine_name, string $theme_name): void { |
||||||
|
$info_file = "$working_dir/$machine_name.info.yml"; |
||||||
|
$info = Yaml::decode(file_get_contents($info_file)); |
||||||
|
unset($info['hidden']); |
||||||
|
file_put_contents($info_file, Yaml::encode($info)); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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,46 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - in_preview: Whether the plugin is being rendered in preview mode. |
||||||
|
* - 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>') }}" 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>') }}" rel="home">{{ site_name }}</a> |
||||||
|
</div> |
||||||
|
{% endif %} |
||||||
|
{% if site_slogan %} |
||||||
|
<div class="site-slogan">{{ site_slogan }}</div> |
||||||
|
{% endif %} |
||||||
|
{% endblock %} |
@ -0,0 +1,57 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - in_preview: Whether the plugin is being rendered in preview mode. |
||||||
|
* - 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> |
@ -0,0 +1,45 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - in_preview: Whether the plugin is being rendered in preview mode. |
||||||
|
* - 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('islandscholar/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,23 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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() |
||||||
|
*/ |
||||||
|
#} |
||||||
|
<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,26 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
*/ |
||||||
|
#} |
||||||
|
<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,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 DateFormatter::format() |
||||||
|
* 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 DateFormatter::format() |
||||||
|
* 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): |
||||||
|
* - parent_comment: 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. |
||||||
|
* - commented_entity: Entity the comments are attached to. |
||||||
|
* |
||||||
|
* @see template_preprocess_comment() |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% if threaded %} |
||||||
|
{{ attach_library('islandscholar/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: |
||||||
|
* - link: (optional) A render array that returns a link. See |
||||||
|
* template_preprocess_links() for details how it is generated. |
||||||
|
* - text: The link text. |
||||||
|
* - attributes: HTML attributes for the list item element. |
||||||
|
* - text_attributes: (optional) HTML attributes for the span element if no |
||||||
|
* 'url' was 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 %} |
@ -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 %} |
@ -0,0 +1,28 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Theme override to display a media item. |
||||||
|
* |
||||||
|
* Available variables: |
||||||
|
* - name: Name of the media. |
||||||
|
* - content: Media content. |
||||||
|
* |
||||||
|
* @see template_preprocess_media() |
||||||
|
* |
||||||
|
* @ingroup themeable |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% |
||||||
|
set classes = [ |
||||||
|
'media', |
||||||
|
'media--type-' ~ media.bundle()|clean_class, |
||||||
|
not media.isPublished() ? 'media--unpublished', |
||||||
|
view_mode ? 'media--view-mode-' ~ view_mode|clean_class, |
||||||
|
] |
||||||
|
%} |
||||||
|
<article{{ attributes.addClass(classes) }}> |
||||||
|
{{ title_suffix.contextual_links }} |
||||||
|
{% if content %} |
||||||
|
{{ content }} |
||||||
|
{% endif %} |
||||||
|
</article> |
@ -0,0 +1,105 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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: (optional) 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: (optional) Themed creation date field. |
||||||
|
* - author_name: (optional) 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() |
||||||
|
* |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% |
||||||
|
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('islandscholar/node') }} |
||||||
|
<article{{ attributes.addClass(classes) }}> |
||||||
|
|
||||||
|
{{ title_prefix }} |
||||||
|
{% if label and 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('islandscholar/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: (optional) 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 name and not page %} |
||||||
|
<h2><a href="{{ url }}">{{ name }}</a></h2> |
||||||
|
{% endif %} |
||||||
|
{{ title_suffix }} |
||||||
|
<div class="content"> |
||||||
|
{{ content }} |
||||||
|
</div> |
||||||
|
</div> |
@ -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) %} |
@ -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 %} |
@ -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,44 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - is_inline: If false, display an ordinary field. |
||||||
|
* If true, display an inline format, suitable for inside elements such as |
||||||
|
* <span>, <h2> and so on. |
||||||
|
* |
||||||
|
* @see field.html.twig |
||||||
|
* @see node_preprocess_field__node() |
||||||
|
* |
||||||
|
* @todo Delete as part of https://www.drupal.org/node/3015623 |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% if not is_inline %} |
||||||
|
{% include "field.html.twig" %} |
||||||
|
{% else %} |
||||||
|
{% |
||||||
|
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> |
||||||
|
{% endif %} |
@ -0,0 +1,44 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - is_inline: If false, display an ordinary field. |
||||||
|
* If true, display an inline format, suitable for inside elements such as |
||||||
|
* <span>, <h2> and so on. |
||||||
|
* |
||||||
|
* @see field.html.twig |
||||||
|
* @see node_preprocess_field__node() |
||||||
|
* |
||||||
|
* @todo Delete as part of https://www.drupal.org/node/3015623 |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% if not is_inline %} |
||||||
|
{% include "field.html.twig" %} |
||||||
|
{% else %} |
||||||
|
{% |
||||||
|
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> |
||||||
|
{% endif %} |
@ -0,0 +1,44 @@ |
|||||||
|
{# |
||||||
|
/** |
||||||
|
* @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. |
||||||
|
* - is_inline: If false, display an ordinary field. |
||||||
|
* If true, display an inline format, suitable for inside elements such as |
||||||
|
* <span>, <h2> and so on. |
||||||
|
* |
||||||
|
* @see field.html.twig |
||||||
|
* @see node_preprocess_field__node() |
||||||
|
* |
||||||
|
* @todo Delete as part of https://www.drupal.org/node/3015623 |
||||||
|
*/ |
||||||
|
#} |
||||||
|
{% if not is_inline %} |
||||||
|
{% include "field.html.twig" %} |
||||||
|
{% else %} |
||||||
|
{% |
||||||
|
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> |
||||||
|
{% endif %} |
@ -0,0 +1 @@ |
|||||||
|
{% extends "field--text.html.twig" %} |
@ -0,0 +1 @@ |
|||||||
|
{% extends "field--text.html.twig" %} |
@ -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') %} |