Move all files to 2017/

This commit is contained in:
Oliver Davies 2025-09-29 22:25:17 +01:00
parent ac7370f67f
commit 2875863330
15717 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,31 @@
Themes allow you to change the look and feel of your Drupal site. You can use
themes contributed by others or create your own.
WHAT TO PLACE IN THIS DIRECTORY?
--------------------------------
Placing downloaded and custom themes in this directory separates downloaded and
custom themes from Drupal core's themes. This allows Drupal core to be updated
without overwriting these files.
DOWNLOAD ADDITIONAL THEMES
--------------------------
Contributed themes from the Drupal community may be downloaded at
https://www.drupal.org/project/project_theme.
MULTISITE CONFIGURATION
-----------------------
In multisite configurations, themes found in this directory are available to
all sites. You may also put themes in the sites/all/themes directory, and the
versions in sites/all/themes will take precedence over versions of the same
themes that are here. Alternatively, the sites/your_site_name/themes directory
pattern may be used to restrict themes to a specific site instance.
MORE INFORMATION
-----------------
Refer to the "Appearance" section of the README.txt in the Drupal root directory
for further information on customizing the appearance of Drupal with custom
themes.

1
2017/web/themes/dcb2017/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/css/

View file

@ -0,0 +1,17 @@
name: Drupalcamp Bristol 2017
type: theme
description: Theme for the new Drupalcamp Bristol 2017 site based on classy.
core: 8.x
base theme: classy
libraries:
- dcb2017/global-styling
- dcb2017/fonts
# Regions
regions:
header: Header
featured: Featured
content_top: 'Content top'
content: Content
content_bottom: 'Content bottom'
footer: Footer

View file

@ -0,0 +1,9 @@
global-styling:
css:
component:
css/style.css: {}
fonts:
css:
theme:
//fonts.googleapis.com/css?family=Poppins:400,600,700: { type: external }

View file

@ -0,0 +1,22 @@
<?php
/**
* Theming stuff goes here!
*/
/**
* Implements template_preprocess_html().
*/
function dcb2017_preprocess_html(&$variables) {
if (\Drupal::service('path.matcher')->isFrontPage()) {
$site_config = \Drupal::config('system.site');
$variables['head_title'] = $site_config->get('name');
}
}
/**
* Implements template_preprocess_node().
*/
function dcb2017_preprocess_node(&$variables) {
}

View file

@ -0,0 +1,46 @@
/**
* @file gulpfile.js
*
* Provides gulp tasks for building theme components.
*/
'use strict';
var gulp = require('gulp'),
sass = require('gulp-sass'),
prefix = require('gulp-autoprefixer'),
sourcemaps = require('gulp-sourcemaps');
/**
* @task sass
*
* Compile css from scss.
*/
gulp.task('sass', function () {
return gulp.src('sass/**/*.scss')
.pipe(sourcemaps.init())
.pipe(sass({
// Include the bootstrap library.
//includePaths: ['./node_modules/bootstrap-sass/assets/stylesheets']
}))
.pipe(prefix(['last 15 versions', '> 1%', 'ie 8', 'ie 7'], { cascade: true }))
.pipe(sourcemaps.write(''))
.pipe(gulp.dest('css'));
});
/**
* @task watch
*
* Watch scss files for changes & recompile.
*/
gulp.task('watch', function () {
gulp.watch(['sass/*.scss', 'sass/**/*.scss'], ['sass']);
});
/**
* @task default
*
* Default task, running just `gulp` will
* compile & watch files.
*/
gulp.task('default', ['sass', 'watch']);

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,19 @@
{
"name": "dcb2017_theme",
"version": "1.0.0",
"description": "A theme for new Drupalcamp Bristol site.",
"main": "gulpfile.js",
"author": "",
"license": "ISC",
"dependencies": {
},
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^2.3.1",
"gulp-sass": "^2.0.4",
"gulp-sourcemaps": "^1.5.2"
},
"scripts": {
"postinstall": "find node_modules/ -name '*.info' -type f -delete"
}
}

View file

@ -0,0 +1,35 @@
html {
font-family: 'Poppins', sans-serif;
font-size: 16px;
}
a,
a:visited {
color: $dcb-grey;
&:hover,
&:focus {
color: black;
}
}
h1 {
font-size: 2.4em;
}
h2 {
font-size: 2em;
}
h3 {
font-size: 1.6em;
}
h1, h2, h3, h4 {
font-weight: 600;
margin-bottom: 0.4em
}
h1, h2 {
text-transform: uppercase;
}

View file

@ -0,0 +1,36 @@
// Tablet size breakpoint 600px.
@mixin media-tablet {
@media screen and (min-width: 37.5rem) {
@content;
}
}
// Desktop size breakpoint 900px.
@mixin media-large {
@media screen and (min-width: 56.25rem) {
@content;
}
}
// Wide Desktop size breakpoint 1200px.
@mixin media-wide {
@media screen and (min-width: 75rem) {
@content;
}
}
@mixin button {
background: $dcb-blue;
border: 0;
color: white;
font-size: 1rem;
font-weight: 600;
padding: 0.5rem 1rem;
text-decoration: none;
text-transform: uppercase;
&:hover,
&:focus {
background: $dcb-green;
}
}

View file

@ -0,0 +1,7 @@
// Custom variables, colours etc.
$dcb-green: #0fa877;
$dcb-blue: #b33ee9;
$dcb-purple: #ec16a8;
$dcb-grey: #666;

View file

@ -0,0 +1,174 @@
.block-system-branding-block {
margin: 0.5rem auto;
width: 8rem;
@include media-tablet {
float: left;
margin: 0.5rem 2rem;
width: auto;
}
}
.site-logo img {
display: block;
max-width: 100%;
width: 11rem;
}
#block-homepagehero {
font-size: 1.8rem;
line-height: 1.2;
margin: auto;
max-width: 30rem;
padding: 3rem 1rem;
text-align: center;
@include media-large {
padding: 6rem 1rem;
}
@include media-wide {
padding: 10rem 1rem;
}
img {
max-width: 100%;
}
p {
margin: 1rem 0;
}
a.tickets,
a.submit {
@include button;
display: inline-block;
font-size: 1.2rem;
margin: 0 0.5rem 0.5rem;
padding: 0.8rem 1.6rem;
}
a.tickets {
background-color: $dcb-purple;
}
}
#block-dcbschedule {
overflow: hidden;
position: relative;
.field {
box-sizing: border-box;
padding: 2rem 2rem 2rem;
position: relative;
text-align: center;
text-transform: uppercase;
@include media-large {
float: left;
padding: 3rem 3rem 3rem;
position: static;
width: 33.333%;
}
@include media-wide {
padding: 5rem 4rem 4rem;
}
&:before {
bottom: 0;
content: '';
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: -1;
background-position: center;
background-size: cover;
@include media-large {
width: 33.333%;
}
}
&.field--name-field-cxo-text:before {
background-image: url('../images/cxo.jpg');
@include media-large {
left: 0;
}
}
&.field--name-field-dev-text:before {
background-image: url('../images/dev.jpg');
@include media-large {
left: 33.333%;
}
}
&.field--name-field-sprint-text:before {
background-image: url('../images/sprint.jpg');
@include media-large {
left: 66.666%;
}
}
}
p, h2 {
margin: 0;
}
h2 {
font-size: 5rem;
font-weight: 700;
line-height: 1;
@include media-large {
font-size: 3rem;
}
@include media-wide {
font-size: 5rem;
}
}
.schedule-day {
font-size: 2.5rem;
font-weight: bold;
@include media-large {
font-size: 2rem;
}
@include media-wide {
font-size: 2.5rem;
}
}
.schedule-location {
font-size: 1.6rem;
font-weight: 600;
padding-top: 2rem;
@include media-large {
font-size: 1.2rem;
}
@include media-wide {
font-size: 1.6rem;
}
}
.schedule-date {
font-size: 1.6rem;
font-weight: 600;
@include media-large {
font-size: 1.2rem;
}
@include media-wide {
font-size: 1.6rem;
}
}
}

View file

@ -0,0 +1,18 @@
.form-item > label {
display: block;
font-weight: 600;
&.option {
display: inline;
font-weight: normal;
}
}
.form-submit {
@include button;
}
.form-text,
.form-email {
max-width: 95%;
}

View file

@ -0,0 +1,39 @@
ul.menu {
margin: 0;
padding: 0;
text-align: center;
@include media-tablet {
text-align: left;
}
li.menu-item {
display: inline-block;
padding: 0.5rem 1rem;
text-transform: uppercase;
@include media-tablet {
padding: 1rem 0.8rem;
}
a {
color: black;
text-decoration: none;
&:hover,
&:focus,
&.is-active {
color: $dcb-green;
}
}
}
}
nav.menu--main {
font-weight: bold;
@include media-tablet {
margin: 0.8rem;
float: right;
}
}

View file

@ -0,0 +1,58 @@
.view-schedule {
.view-grouping-header {
background: $dcb-green;
color: white;
font-size: 1.5em;
text-align: center;
}
h2 {
font-size: 1.8em;
text-transform: none;
}
h4 {
font-size: 1.3em
}
p {
margin: 0.5em 0;
}
.node--type-session {
margin-bottom: 3em;
}
.group-wrapper {
@include media-large {
box-sizing: border-box;
float: left;
padding-right: 2em;
h2 {
font-size: 1.2em;
line-height: 1.4;
}
}
h3 {
color: $dcb-grey;
}
}
.view-grouping-content {
overflow: hidden;
&.col-2 .group-wrapper {
@include media-large {
width: 50%;
}
}
&.col-3 .group-wrapper {
@include media-large {
width: 33.33%;
}
}
}
}

View file

@ -0,0 +1,65 @@
.views-view-table {
td {
display: block;
vertical-align: top;
&.views-field-field-logo {
padding: 1em 0;
text-align: center;
@include media-large {
padding: 2em 2em 2em 0;
}
}
@include media-large {
display: table-cell;
}
}
.views-field-body a {
@include button;
}
}
.view-silver-sponsors,
.view-supporting-partners {
overflow: hidden;
text-align: center;
.sponsor {
box-sizing: border-box;
float: left;
padding: 1em;
width: 100%;
@include media-tablet {
width: 50%;
}
@include media-large {
width: 33.333%;
}
@include media-wide {
width: 20%;
}
}
img {
height: auto;
max-width: 100%;
}
}
.view-display-id-sponsor_logo_gold {
.view-content {
text-align: center;
}
.views-row {
display: inline-block;
padding: 0.5em 1.5em;
vertical-align: middle;
}
}

View file

@ -0,0 +1,21 @@
.node--type-session {
.field--name-field-category,
.field--name-field-level,
.field--name-field-length {
padding-right: 5em;
@include media-tablet {
float: left;
font-weight: 600;
.field__label {
display: none;
}
}
}
.field--name-body {
clear: both;
padding: 0.5em 0;
}
}

View file

@ -0,0 +1,36 @@
.node--type-speaker {
.node__content {
position: relative;
}
@include media-tablet {
.profile-picture {
position: absolute;
top: 0;
left: 0;
}
.profile-info {
min-height: 7em;
padding-left: 9em;
}
}
&.node--view-mode-speaker-profile {
margin-bottom: 2em;
}
.speaker-link {
text-decoration: none;
}
}
.speaker-twitter {
background: url('../images/twitter-1.png') no-repeat left center transparent;
padding: 0 10px 0 20px;
}
.speaker-drupal {
background: url('../images/drop-1.png') no-repeat left center transparent;
padding: 0 10px 0 20px;
}

View file

@ -0,0 +1,39 @@
.region-content-bottom {
margin: 2em 0 4em;
text-align: center;
h2 {
font-size: 2em;
font-weight: 700;
@include media-tablet {
font-size: 3em;
}
@include media-large {
font-size: 4em;
}
span {
color: $dcb-green;
}
}
.block {
margin: 2em 1em;
}
.all-sponsors-link a {
@include button;
background-color: $dcb-green;
&:hover,
&:focus {
background: $dcb-purple;
}
}
img {
height: auto;
max-width: 100%;
}
}

View file

@ -0,0 +1,3 @@
.region-content-top {
overflow: hidden;
}

View file

@ -0,0 +1,9 @@
.region-content {
margin: 0 auto;
max-width: 72rem;
padding: 1rem;
.block-views {
margin-bottom: 5em;
}
}

View file

@ -0,0 +1,36 @@
.region-featured {
position: relative;
&:after {
background-image: url('../images/dcb-bg.jpg');
background-position: center center;
background-size: cover;
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
}
}
.featured-footer {
background: black;
color: white;
font-size: 1.2rem;
font-weight: bold;
padding: 1rem;
text-align: center;
text-transform: uppercase;
a {
color: $dcb-purple;
text-decoration: none;
&:focus,
&:hover {
color: $dcb-grey;
}
}
}

View file

@ -0,0 +1,11 @@
.region-footer {
margin: 0 auto;
max-width: 72rem;
padding: 1rem;
}
.layout-container > footer {
background-image: url('../images/dcb-bg.jpg');
background-position: center center;
background-size: cover;
}

View file

@ -0,0 +1,5 @@
.region-header {
margin: 0 auto;
max-width: 72rem;
overflow: hidden;
}

View file

@ -0,0 +1,22 @@
// External libraries.
@import 'base/variables';
@import 'base/mixins';
@import 'global'; // Global Theme Customizations.
@import 'layout/header';
@import 'layout/featured';
@import 'layout/content';
@import 'layout/content-top';
@import 'layout/content-bottom';
@import 'layout/footer';
@import 'components/menus';
@import 'components/blocks';
@import 'components/forms';
@import 'components/views';
@import 'components/schedule';
@import 'content/session';
@import 'content/speaker';

View file

@ -0,0 +1,49 @@
{#
/**
* @file
* Theme override to display a block.
*
* Available variables:
* - plugin_id: The ID of the block implementation.
* - label: The configured label of the block if visible.
* - configuration: A list of the block's configuration values.
* - label: The configured label for the block.
* - label_display: The display settings for the label.
* - provider: The module or other provider that provided this block plugin.
* - Block plugin specific settings will also be stored here.
* - content: The content of this block.
* - attributes: array of HTML attributes populated by modules, intended to
* be added to the main container tag of this template.
* - id: A valid HTML ID and guaranteed unique.
* - title_attributes: Same as attributes, except applied to the main title
* tag that appears in the template.
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
*
* @see template_preprocess_block()
*/
#}
{%
set classes = [
'block',
'block-' ~ configuration.provider|clean_class,
'block-' ~ plugin_id|clean_class,
]
%}
<div{{ attributes.addClass(classes) }}>
{{ title_prefix }}
{% if label %}
<h2{{ title_attributes }}>{{ label }}</h2>
{% endif %}
{{ title_suffix }}
<img src="/{{ base_path ~ directory }}/images/logo-with-dates.svg" alt="Drupalcamp Bristol 30th June - 2nd July" />
{% block content %}
{{ content }}
{% endblock %}
</div>

View file

@ -0,0 +1,98 @@
{#
/**
* @file
* Theme override to display a node.
*
* Available variables:
* - node: The node entity with limited access to object properties and methods.
* Only method names starting with "get", "has", or "is" and a few common
* methods such as "id", "label", and "bundle" are available. For example:
* - node.getCreatedTime() will return the node creation timestamp.
* - node.hasField('field_example') returns TRUE if the node bundle includes
* field_example. (This does not indicate the presence of a value in this
* field.)
* - node.isPublished() will return whether the node is published or not.
* Calling other methods, such as node.delete(), will result in an exception.
* See \Drupal\node\Entity\Node for a full list of public properties and
* methods for the node object.
* - label: The title of the node.
* - content: All node items. Use {{ content }} to print them all,
* or print a subset such as {{ content.field_example }}. Use
* {{ content|without('field_example') }} to temporarily suppress the printing
* of a given child element.
* - author_picture: The node author user entity, rendered using the "compact"
* view mode.
* - metadata: Metadata for this node.
* - date: Themed creation date field.
* - author_name: Themed author name field.
* - url: Direct URL of the current node.
* - display_submitted: Whether submission information should be displayed.
* - attributes: HTML attributes for the containing element.
* The attributes.class element may contain one or more of the following
* classes:
* - node: The current template type (also known as a "theming hook").
* - node--type-[type]: The current node type. For example, if the node is an
* "Article" it would result in "node--type-article". Note that the machine
* name will often be in a short form of the human readable label.
* - node--view-mode-[view_mode]: The View Mode of the node; for example, a
* teaser would result in: "node--view-mode-teaser", and
* full: "node--view-mode-full".
* The following are controlled through the node publishing options.
* - node--promoted: Appears on nodes promoted to the front page.
* - node--sticky: Appears on nodes ordered above other non-sticky nodes in
* teaser listings.
* - node--unpublished: Appears on unpublished nodes visible only to site
* admins.
* - title_attributes: Same as attributes, except applied to the main title
* tag that appears in the template.
* - content_attributes: Same as attributes, except applied to the main
* content tag that appears in the template.
* - author_attributes: Same as attributes, except applied to the author of
* the node tag that appears in the template.
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
* - view_mode: View mode; for example, "teaser" or "full".
* - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'.
* - page: Flag for the full page state. Will be true if view_mode is 'full'.
* - readmore: Flag for more state. Will be true if the teaser content of the
* node cannot hold the main body content.
* - logged_in: Flag for authenticated user status. Will be true when the
* current user is a logged-in member.
* - is_admin: Flag for admin user status. Will be true when the current user
* is an administrator.
*
* @see template_preprocess_node()
*
* @todo Remove the id attribute (or make it a class), because if that gets
* rendered twice on a page this is invalid CSS for example: two lists
* in different view modes.
*/
#}
{%
set classes = [
'node',
'node--type-' ~ node.bundle|clean_class,
node.isPromoted() ? 'node--promoted',
node.isSticky() ? 'node--sticky',
not node.isPublished() ? 'node--unpublished',
view_mode ? 'node--view-mode-' ~ view_mode|clean_class,
]
%}
{{ attach_library('classy/node') }}
<article{{ attributes.addClass(classes) }}>
{{ title_prefix }}
{% if not page %}
<h2{{ title_attributes }}>
{{ label }}
</h2>
{% endif %}
{{ title_suffix }}
<div{{ content_attributes.addClass('node__content') }}>
{{ content }}
</div>
</article>

View file

@ -0,0 +1,107 @@
{#
/**
* @file
* Theme override to display a node.
*
* Available variables:
* - node: The node entity with limited access to object properties and methods.
* Only method names starting with "get", "has", or "is" and a few common
* methods such as "id", "label", and "bundle" are available. For example:
* - node.getCreatedTime() will return the node creation timestamp.
* - node.hasField('field_example') returns TRUE if the node bundle includes
* field_example. (This does not indicate the presence of a value in this
* field.)
* - node.isPublished() will return whether the node is published or not.
* Calling other methods, such as node.delete(), will result in an exception.
* See \Drupal\node\Entity\Node for a full list of public properties and
* methods for the node object.
* - label: The title of the node.
* - content: All node items. Use {{ content }} to print them all,
* or print a subset such as {{ content.field_example }}. Use
* {{ content|without('field_example') }} to temporarily suppress the printing
* of a given child element.
* - author_picture: The node author user entity, rendered using the "compact"
* view mode.
* - metadata: Metadata for this node.
* - date: Themed creation date field.
* - author_name: Themed author name field.
* - url: Direct URL of the current node.
* - display_submitted: Whether submission information should be displayed.
* - attributes: HTML attributes for the containing element.
* The attributes.class element may contain one or more of the following
* classes:
* - node: The current template type (also known as a "theming hook").
* - node--type-[type]: The current node type. For example, if the node is an
* "Article" it would result in "node--type-article". Note that the machine
* name will often be in a short form of the human readable label.
* - node--view-mode-[view_mode]: The View Mode of the node; for example, a
* teaser would result in: "node--view-mode-teaser", and
* full: "node--view-mode-full".
* The following are controlled through the node publishing options.
* - node--promoted: Appears on nodes promoted to the front page.
* - node--sticky: Appears on nodes ordered above other non-sticky nodes in
* teaser listings.
* - node--unpublished: Appears on unpublished nodes visible only to site
* admins.
* - title_attributes: Same as attributes, except applied to the main title
* tag that appears in the template.
* - content_attributes: Same as attributes, except applied to the main
* content tag that appears in the template.
* - author_attributes: Same as attributes, except applied to the author of
* the node tag that appears in the template.
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
* - view_mode: View mode; for example, "teaser" or "full".
* - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'.
* - page: Flag for the full page state. Will be true if view_mode is 'full'.
* - readmore: Flag for more state. Will be true if the teaser content of the
* node cannot hold the main body content.
* - logged_in: Flag for authenticated user status. Will be true when the
* current user is a logged-in member.
* - is_admin: Flag for admin user status. Will be true when the current user
* is an administrator.
*
* @see template_preprocess_node()
*
* @todo Remove the id attribute (or make it a class), because if that gets
* rendered twice on a page this is invalid CSS for example: two lists
* in different view modes.
*/
#}
{%
set classes = [
'node',
'node--type-' ~ node.bundle|clean_class,
node.isPromoted() ? 'node--promoted',
node.isSticky() ? 'node--sticky',
not node.isPublished() ? 'node--unpublished',
view_mode ? 'node--view-mode-' ~ view_mode|clean_class,
]
%}
{{ attach_library('classy/node') }}
<article{{ attributes.addClass(classes) }}>
<div{{ content_attributes.addClass('node__content') }}>
<div class="profile-picture">
{{ content.field_profile_picture }}
</div>
<div class="profile-info">
<h4{{ title_attributes }}>
<a class="speaker-link" href="/speakers#{{ node.id }}">{{ label }}</a>
</h4>
<div class="speaker-links">
{% if node.field_twitter_handle.value %}
<span class="speaker-twitter"><a href="https://twitter.com/{{ node.field_twitter_handle.value }}">{{ node.field_twitter_handle.value }}</a></span>
{% endif %}
{% if node.field_drupal_org_handle.value %}
<span class="speaker-drupal"><a href="https://www.drupal.org/u/{{ node.field_drupal_org_handle.value }}">{{ node.field_drupal_org_handle.value }}</a></span>
{% endif %}
</div>
{{ content.field_organisation }}
{{ content.body }}
</div>
</div>
</article>

View file

@ -0,0 +1,112 @@
{#
/**
* @file
* Theme override to display a node.
*
* Available variables:
* - node: The node entity with limited access to object properties and methods.
* Only method names starting with "get", "has", or "is" and a few common
* methods such as "id", "label", and "bundle" are available. For example:
* - node.getCreatedTime() will return the node creation timestamp.
* - node.hasField('field_example') returns TRUE if the node bundle includes
* field_example. (This does not indicate the presence of a value in this
* field.)
* - node.isPublished() will return whether the node is published or not.
* Calling other methods, such as node.delete(), will result in an exception.
* See \Drupal\node\Entity\Node for a full list of public properties and
* methods for the node object.
* - label: The title of the node.
* - content: All node items. Use {{ content }} to print them all,
* or print a subset such as {{ content.field_example }}. Use
* {{ content|without('field_example') }} to temporarily suppress the printing
* of a given child element.
* - author_picture: The node author user entity, rendered using the "compact"
* view mode.
* - metadata: Metadata for this node.
* - date: Themed creation date field.
* - author_name: Themed author name field.
* - url: Direct URL of the current node.
* - display_submitted: Whether submission information should be displayed.
* - attributes: HTML attributes for the containing element.
* The attributes.class element may contain one or more of the following
* classes:
* - node: The current template type (also known as a "theming hook").
* - node--type-[type]: The current node type. For example, if the node is an
* "Article" it would result in "node--type-article". Note that the machine
* name will often be in a short form of the human readable label.
* - node--view-mode-[view_mode]: The View Mode of the node; for example, a
* teaser would result in: "node--view-mode-teaser", and
* full: "node--view-mode-full".
* The following are controlled through the node publishing options.
* - node--promoted: Appears on nodes promoted to the front page.
* - node--sticky: Appears on nodes ordered above other non-sticky nodes in
* teaser listings.
* - node--unpublished: Appears on unpublished nodes visible only to site
* admins.
* - title_attributes: Same as attributes, except applied to the main title
* tag that appears in the template.
* - content_attributes: Same as attributes, except applied to the main
* content tag that appears in the template.
* - author_attributes: Same as attributes, except applied to the author of
* the node tag that appears in the template.
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
* - view_mode: View mode; for example, "teaser" or "full".
* - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'.
* - page: Flag for the full page state. Will be true if view_mode is 'full'.
* - readmore: Flag for more state. Will be true if the teaser content of the
* node cannot hold the main body content.
* - logged_in: Flag for authenticated user status. Will be true when the
* current user is a logged-in member.
* - is_admin: Flag for admin user status. Will be true when the current user
* is an administrator.
*
* @see template_preprocess_node()
*
* @todo Remove the id attribute (or make it a class), because if that gets
* rendered twice on a page this is invalid CSS for example: two lists
* in different view modes.
*/
#}
{%
set classes = [
'node',
'node--type-' ~ node.bundle|clean_class,
node.isPromoted() ? 'node--promoted',
node.isSticky() ? 'node--sticky',
not node.isPublished() ? 'node--unpublished',
view_mode ? 'node--view-mode-' ~ view_mode|clean_class,
]
%}
{{ attach_library('classy/node') }}
<article{{ attributes.addClass(classes) }} id={{ node.id }}>
{{ title_prefix }}
{% if not page %}
<h3{{ title_attributes }}>
{{ label }}
</h3>
{% endif %}
{{ title_suffix }}
<div{{ content_attributes.addClass('node__content') }}>
<div class="profile-picture">
{{ content.field_profile_picture }}
</div>
<div class="profile-info">
<div class="speaker-links">
{% if node.field_twitter_handle.value %}
<span class="speaker-twitter"><a href="https://twitter.com/{{ node.field_twitter_handle.value }}">{{ node.field_twitter_handle.value }}</a></span>
{% endif %}
{% if node.field_drupal_org_handle.value %}
<span class="speaker-drupal"><a href="https://www.drupal.org/u/{{ node.field_drupal_org_handle.value }}">{{ node.field_drupal_org_handle.value }}</a></span>
{% endif %}
</div>
{{ content.field_organisation }}
{{ content.body }}
</div>
</div>
</article>

View file

@ -0,0 +1,79 @@
{#
/**
* @file
* Theme override to display a single page.
*
* The doctype, html, head and body tags are not in this template. Instead they
* can be found in the html.html.twig template in this directory.
*
* Available variables:
*
* General utility variables:
* - base_path: The base URL path of the Drupal installation. Will usually be
* "/" unless you have installed Drupal in a sub-directory.
* - is_front: A flag indicating if the current page is the front page.
* - logged_in: A flag indicating if the user is registered and signed in.
* - is_admin: A flag indicating if the user has permission to access
* administration pages.
*
* Site identity:
* - front_page: The URL of the front page. Use this instead of base_path when
* linking to the front page. This includes the language domain or prefix.
*
* Page content (in order of occurrence in the default page.html.twig):
* - node: Fully loaded node, if there is an automatically-loaded node
* associated with the page and the node ID is the second argument in the
* page's path (e.g. node/12345 and node/12345/revisions, but not
* comment/reply/12345).
*
* Regions:
* - page.header: Items for the header region.
* - page.primary_menu: Items for the primary menu region.
* - page.secondary_menu: Items for the secondary menu region.
* - page.highlighted: Items for the highlighted content region.
* - page.help: Dynamic help text, mostly for admin pages.
* - page.content: The main content of the current page.
* - page.sidebar_first: Items for the first sidebar.
* - page.sidebar_second: Items for the second sidebar.
* - page.footer: Items for the footer region.
* - page.breadcrumb: Items for the breadcrumb region.
*
* @see template_preprocess_page()
* @see html.html.twig
*/
#}
<div class="layout-container">
<header role="banner">
{{ page.header }}
</header>
{% if page.featured %}
<div class="layout-featured">
{{ page.featured }}
</div>
{% endif %}
<main role="main">
<a id="main-content" tabindex="-1"></a>{# link is in html.html.twig #}
<div class="layout-content-top">
{{ page.content_top }}
</div>{# /.layout-content-top #}
<div class="layout-content">
{{ page.content }}
</div>{# /.layout-content #}
<div class="layout-content-bottom">
{{ page.content_bottom }}
</div>{# /.layout-content-bottom #}
</main>
{% if page.footer %}
<footer role="contentinfo">
{{ page.footer }}
</footer>
{% endif %}
</div>{# /.layout-container #}

View file

@ -0,0 +1,30 @@
{#
/**
* @file
* Theme override to display a region.
*
* Available variables:
* - content: The content for this region, typically blocks.
* - attributes: HTML attributes for the region <div>.
* - region: The name of the region variable as defined in the theme's
* .info.yml file.
*
* @see template_preprocess_region()
*/
#}
{%
set classes = [
'region',
'region-' ~ region|clean_class,
]
%}
{% if content %}
<div{{ attributes.addClass(classes) }}>
<h2>Our <span>Sponsors</span></h2>
{{ content }}
<div class="all-sponsors-link">
<a href="/sponsors">{{ 'See all sponsors'|t }}</a>
</div>
</div>
{% endif %}

View file

@ -0,0 +1,30 @@
{#
/**
* @file
* Theme override to display a region.
*
* Available variables:
* - content: The content for this region, typically blocks.
* - attributes: HTML attributes for the region <div>.
* - region: The name of the region variable as defined in the theme's
* .info.yml file.
*
* @see template_preprocess_region()
*/
#}
{%
set classes = [
'region',
'region-' ~ region|clean_class,
]
%}
{% if content %}
<div{{ attributes.addClass(classes) }}>
{{ content }}
<div class="featured-footer">
Thanks to all previous speakers, sponsors and attendees. See you in 2019!
</div>
</div>
{% endif %}

View file

@ -0,0 +1,20 @@
{#
/**
* @file
* Theme override to display a single views grouping.
*
* Available variables:
* - view: The view object.
* - grouping: The grouping instruction.
* - grouping_level: A number indicating the hierarchical level of the grouping.
* - title: The group heading.
* - content: The content to be grouped.
* - rows: The rows returned from the view.
*
* @see template_preprocess_views_view_grouping()
*/
#}
<div class="view-grouping">
<div class="view-grouping-header">{{ title }}</div>
<div class="view-grouping-content col-{{ rows|length }}">{{ content }}</div>
</div>

View file

@ -0,0 +1,36 @@
{#
/**
* @file
* Default theme implementation to display a view of unformatted rows.
*
* Available variables:
* - title: The title of this group of rows. May be empty.
* - rows: A list of the view's row items.
* - attributes: The row's HTML attributes.
* - content: The row's content.
* - view: The view object.
* - default_row_class: A flag indicating whether default classes should be
* used on rows.
*
* @see template_preprocess_views_view_unformatted()
*
* @ingroup themeable
*/
#}
{% if title|trim %}
<div class="group-wrapper">
<h3>{{ title }}</h3>
{% endif %}
{% for row in rows %}
{%
set row_classes = [
default_row_class ? 'views-row',
]
%}
<div{{ row.attributes.addClass(row_classes) }}>
{{ row.content }}
</div>
{% endfor %}
{% if title|trim %}
</div>
{% endif %}

File diff suppressed because it is too large Load diff