edlp d8 theme starter operatinal with bower and gulp : y'a plus k'a
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
.npm-debug-log
|
||||
bower_components/
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,196 @@
|
||||
/*jslint browser: true*/
|
||||
/*jslint jquery: true*/
|
||||
|
||||
/*
|
||||
* jQuery Hotkeys Plugin
|
||||
* Copyright 2010, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
*
|
||||
* Based upon the plugin by Tzury Bar Yochay:
|
||||
* http://github.com/tzuryby/hotkeys
|
||||
*
|
||||
* Original idea by:
|
||||
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
|
||||
*/
|
||||
|
||||
/*
|
||||
* One small change is: now keys are passed by object { keys: '...' }
|
||||
* Might be useful, when you want to pass some other data to your handler
|
||||
*/
|
||||
|
||||
(function(jQuery) {
|
||||
|
||||
jQuery.hotkeys = {
|
||||
version: "0.8",
|
||||
|
||||
specialKeys: {
|
||||
8: "backspace",
|
||||
9: "tab",
|
||||
10: "return",
|
||||
13: "return",
|
||||
16: "shift",
|
||||
17: "ctrl",
|
||||
18: "alt",
|
||||
19: "pause",
|
||||
20: "capslock",
|
||||
27: "esc",
|
||||
32: "space",
|
||||
33: "pageup",
|
||||
34: "pagedown",
|
||||
35: "end",
|
||||
36: "home",
|
||||
37: "left",
|
||||
38: "up",
|
||||
39: "right",
|
||||
40: "down",
|
||||
45: "insert",
|
||||
46: "del",
|
||||
59: ";",
|
||||
61: "=",
|
||||
96: "0",
|
||||
97: "1",
|
||||
98: "2",
|
||||
99: "3",
|
||||
100: "4",
|
||||
101: "5",
|
||||
102: "6",
|
||||
103: "7",
|
||||
104: "8",
|
||||
105: "9",
|
||||
106: "*",
|
||||
107: "+",
|
||||
109: "-",
|
||||
110: ".",
|
||||
111: "/",
|
||||
112: "f1",
|
||||
113: "f2",
|
||||
114: "f3",
|
||||
115: "f4",
|
||||
116: "f5",
|
||||
117: "f6",
|
||||
118: "f7",
|
||||
119: "f8",
|
||||
120: "f9",
|
||||
121: "f10",
|
||||
122: "f11",
|
||||
123: "f12",
|
||||
144: "numlock",
|
||||
145: "scroll",
|
||||
173: "-",
|
||||
186: ";",
|
||||
187: "=",
|
||||
188: ",",
|
||||
189: "-",
|
||||
190: ".",
|
||||
191: "/",
|
||||
192: "`",
|
||||
219: "[",
|
||||
220: "\\",
|
||||
221: "]",
|
||||
222: "'"
|
||||
},
|
||||
|
||||
shiftNums: {
|
||||
"`": "~",
|
||||
"1": "!",
|
||||
"2": "@",
|
||||
"3": "#",
|
||||
"4": "$",
|
||||
"5": "%",
|
||||
"6": "^",
|
||||
"7": "&",
|
||||
"8": "*",
|
||||
"9": "(",
|
||||
"0": ")",
|
||||
"-": "_",
|
||||
"=": "+",
|
||||
";": ": ",
|
||||
"'": "\"",
|
||||
",": "<",
|
||||
".": ">",
|
||||
"/": "?",
|
||||
"\\": "|"
|
||||
},
|
||||
|
||||
// excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url
|
||||
textAcceptingInputTypes: [
|
||||
"text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime",
|
||||
"datetime-local", "search", "color", "tel"],
|
||||
|
||||
options: {
|
||||
filterTextInputs: true
|
||||
}
|
||||
};
|
||||
|
||||
function keyHandler(handleObj) {
|
||||
if (typeof handleObj.data === "string") {
|
||||
handleObj.data = {
|
||||
keys: handleObj.data
|
||||
};
|
||||
}
|
||||
|
||||
// Only care when a possible input has been specified
|
||||
if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string") {
|
||||
return;
|
||||
}
|
||||
|
||||
var origHandler = handleObj.handler,
|
||||
keys = handleObj.data.keys.toLowerCase().split(" ");
|
||||
|
||||
handleObj.handler = function(event) {
|
||||
// Don't fire in text-accepting inputs that we didn't directly bind to
|
||||
if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) ||
|
||||
(jQuery.hotkeys.options.filterTextInputs &&
|
||||
jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) {
|
||||
return;
|
||||
}
|
||||
|
||||
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[event.which],
|
||||
character = String.fromCharCode(event.which).toLowerCase(),
|
||||
modif = "",
|
||||
possible = {};
|
||||
|
||||
jQuery.each(["alt", "ctrl", "shift"], function(index, specialKey) {
|
||||
|
||||
if (event[specialKey + 'Key'] && special !== specialKey) {
|
||||
modif += specialKey + '+';
|
||||
}
|
||||
});
|
||||
|
||||
// metaKey is triggered off ctrlKey erronously
|
||||
if (event.metaKey && !event.ctrlKey && special !== "meta") {
|
||||
modif += "meta+";
|
||||
}
|
||||
|
||||
if (event.metaKey && special !== "meta" && modif.indexOf("alt+ctrl+shift+") > -1) {
|
||||
modif = modif.replace("alt+ctrl+shift+", "hyper+");
|
||||
}
|
||||
|
||||
if (special) {
|
||||
possible[modif + special] = true;
|
||||
}
|
||||
else {
|
||||
possible[modif + character] = true;
|
||||
possible[modif + jQuery.hotkeys.shiftNums[character]] = true;
|
||||
|
||||
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
|
||||
if (modif === "shift+") {
|
||||
possible[jQuery.hotkeys.shiftNums[character]] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0, l = keys.length; i < l; i++) {
|
||||
if (possible[keys[i]]) {
|
||||
return origHandler.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
jQuery.each(["keydown", "keyup", "keypress"], function() {
|
||||
jQuery.event.special[this] = {
|
||||
add: keyHandler
|
||||
};
|
||||
});
|
||||
|
||||
})(jQuery || this.jQuery || window.jQuery);
|
||||
@@ -0,0 +1,22 @@
|
||||
(function($) {
|
||||
|
||||
|
||||
EdlpTheme = function(){
|
||||
|
||||
|
||||
function init(){
|
||||
console.log("EdlpTheme init()");
|
||||
|
||||
};
|
||||
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function($) {
|
||||
var edlptheme = new EdlpTheme();
|
||||
});
|
||||
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,14 @@
|
||||
body {
|
||||
background: white; }
|
||||
|
||||
.btn--hollow {
|
||||
background: red;
|
||||
display: inline-block;
|
||||
padding: 10px; }
|
||||
|
||||
body, html {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: Georgia, serif;
|
||||
font-style: normal; }
|
||||
@@ -0,0 +1,31 @@
|
||||
body {
|
||||
background: white; }
|
||||
|
||||
.btn--hollow {
|
||||
background: red;
|
||||
display: inline-block;
|
||||
padding: 10px; }
|
||||
|
||||
body, html {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: Georgia, serif;
|
||||
font-style: normal; }
|
||||
|
||||
div.layout-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 1em;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box; }
|
||||
|
||||
header[role="banner"] {
|
||||
outline: 1px solid blue; }
|
||||
|
||||
main[role="main"] {
|
||||
outline: 1px solid green; }
|
||||
|
||||
footer[role="contentinfo"] {
|
||||
outline: 1px solid pink; }
|
||||
@@ -0,0 +1,22 @@
|
||||
(function($) {
|
||||
|
||||
|
||||
EdlpTheme = function(){
|
||||
|
||||
|
||||
function init(){
|
||||
console.log("EdlpTheme init()");
|
||||
|
||||
};
|
||||
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function($) {
|
||||
var edlptheme = new EdlpTheme();
|
||||
});
|
||||
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,36 @@
|
||||
@import 'base/reset';
|
||||
|
||||
@import 'base/vars';
|
||||
@import 'base/grid';
|
||||
@import 'base/colors';
|
||||
@import 'base/buttons';
|
||||
|
||||
|
||||
body, html{
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height:100%;
|
||||
font-family: Georgia, serif;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
|
||||
div.layout-container{
|
||||
position: relative;
|
||||
width:100%; height:100%;
|
||||
padding:1em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
header[role="banner"]{
|
||||
outline: 1px solid blue;
|
||||
}
|
||||
|
||||
|
||||
main[role="main"]{
|
||||
outline:1px solid green;
|
||||
}
|
||||
|
||||
footer[role="contentinfo"]{
|
||||
outline: 1px solid pink;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
// Buttons
|
||||
//
|
||||
// Buttons
|
||||
//
|
||||
// Markup:
|
||||
// <a href="" class="btn {{modifier_class}}">Button</a>
|
||||
//
|
||||
// .btn--hollow - Hollow button
|
||||
// .btn--hollow-white - Hollow button
|
||||
// .btn--blue - Blue button
|
||||
// .btn--block - Block button
|
||||
// .btn--small - Small button
|
||||
// .btn--plain - Plain button
|
||||
//
|
||||
// Styleguide Common.Buttons
|
||||
|
||||
|
||||
.btn {
|
||||
&--hollow {
|
||||
background: red;
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
body {
|
||||
background: white;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "edlp_d8_theme",
|
||||
"version": "1.0.0",
|
||||
"authors": [
|
||||
"Bachir Soussi Chiadmi <bachir@figureslibres.io>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"homepage": "http://encyclopediedelaparole.org",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"dependencies": {
|
||||
"history.js": "latest",
|
||||
"jquery.hotkeys": "latest"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
name: edlp
|
||||
description: 'EDLP Drupal 8 theme with gulp'
|
||||
type: theme
|
||||
base theme: classy
|
||||
core: 8.x
|
||||
libraries:
|
||||
- core/normalize
|
||||
- edlptheme/global-css
|
||||
- edlptheme/history-js
|
||||
- edlptheme/global-js
|
||||
|
||||
# stylesheets-remove:
|
||||
# - core/assets/vendor/normalize-css/normalize.css
|
||||
# - core/modules/system/css/system.module.css
|
||||
# - core/modules/system/css/system.theme.css
|
||||
# - core/modules/views/css/views.module.css
|
||||
|
||||
# regions:
|
||||
# content: Content
|
||||
# content_top: 'Content Top'
|
||||
# content_bottom: 'Content Bottom'
|
||||
# nav: Navigation
|
||||
# front_one: 'Front One'
|
||||
# front_two: 'Front Two'
|
||||
# front_three: 'Front Three'
|
||||
# front_four: 'Front Four'
|
||||
# front_five: 'Front Five'
|
||||
# front_six: 'Front Six'
|
||||
# front_seven: 'Front Seven'
|
||||
# front_eight: 'Front Eight'
|
||||
# footer: Footer
|
||||
@@ -0,0 +1,17 @@
|
||||
global-css:
|
||||
version: VERSION
|
||||
css:
|
||||
base:
|
||||
assets/dist/styles/app.min.css: {}
|
||||
|
||||
global-js:
|
||||
version: VERSION
|
||||
js:
|
||||
bower_components/history.js/scripts/bundled/html4+html5/jquery.history.js: { scope: footer }
|
||||
assets/dist/bower/jquery.hotkeys.js: { scope: footer }
|
||||
assets/dist/scripts/main.min.js: { scope: footer }
|
||||
dependencies:
|
||||
- core/matchmedia
|
||||
- core/matchmedia.addListener
|
||||
- core/jquery
|
||||
- core/jquery.once
|
||||
@@ -0,0 +1,60 @@
|
||||
'use strict';
|
||||
|
||||
var gulp = require('gulp');
|
||||
var util = require('gulp-util');
|
||||
var sass = require('gulp-sass');
|
||||
var watch = require('gulp-watch');
|
||||
var autoprefixer = require('gulp-autoprefixer');
|
||||
var jsmin = require('gulp-jsmin');
|
||||
var cssmin = require('gulp-cssmin');
|
||||
var rename = require('gulp-rename');
|
||||
var mainBowerFiles = require('main-bower-files');
|
||||
|
||||
function handleError(err) {
|
||||
console.log(err.toString());
|
||||
}
|
||||
|
||||
var config = {
|
||||
assetsDir : './assets',
|
||||
production: !!util.env.production
|
||||
}
|
||||
|
||||
gulp.task('scripts', function () {
|
||||
gulp.src('./assets/scripts/main.js')
|
||||
.pipe(config.production ? jsmin() : util.noop())
|
||||
.pipe(rename({suffix: '.min'}))
|
||||
.pipe(gulp.dest('./assets/dist/scripts/'));
|
||||
});
|
||||
|
||||
gulp.task('styles', function () {
|
||||
gulp.src('./assets/styles/app.scss')
|
||||
.pipe(sass().on('error', sass.logError))
|
||||
.pipe(autoprefixer({
|
||||
browsers: ['last 2 versions'],
|
||||
cascade: false
|
||||
})).on('error', handleError)
|
||||
.pipe(config.production ? cssmin() : util.noop())
|
||||
.pipe(rename({suffix: '.min'}))
|
||||
.pipe(gulp.dest('./assets/dist/styles/'));
|
||||
});
|
||||
|
||||
gulp.task('bower', function() {
|
||||
gulp.src(mainBowerFiles({
|
||||
"overrides":{
|
||||
"history.js":{
|
||||
"main":"scripts/bundled/html4+html5/jquery.history.js"
|
||||
},
|
||||
"jquery":{
|
||||
"ignore":true
|
||||
}
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest('./assets/dist/bower/'));
|
||||
});
|
||||
|
||||
// default gulp task
|
||||
gulp.task('default', ['bower', 'scripts', 'styles'], function() {
|
||||
gulp.watch('./assets/styles/*.scss', ['styles']);
|
||||
gulp.watch('./assets/styles/*/*.scss', ['styles']);
|
||||
gulp.watch('./assets/scripts/*.js', ['scripts']);
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "edlpd8theme",
|
||||
"version": "0.0.1",
|
||||
"description": "A theme for drupal.",
|
||||
"main": "gulpfile.js",
|
||||
"author": "Bachir Soussi Chiadmi",
|
||||
"license": "GPLv3",
|
||||
"homepage": "https://encyclopediedelaparole.org",
|
||||
"devDependencies": {
|
||||
"gulp": "latest",
|
||||
"gulp-autoprefixer": "latest",
|
||||
"gulp-cssmin": "latest",
|
||||
"gulp-jsmin": "latest",
|
||||
"gulp-rename": "latest",
|
||||
"gulp-sass": "latest",
|
||||
"gulp-strip-debug": "latest",
|
||||
"gulp-util": "latest",
|
||||
"gulp-watch": "latest",
|
||||
"main-bower-files": "latest"
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{% extends "block.html.twig" %}
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for a branding block.
|
||||
*
|
||||
* Each branding element variable (logo, name, slogan) is only available if
|
||||
* enabled in the block configuration.
|
||||
*
|
||||
* Available variables:
|
||||
* - site_logo: Logo for site as defined in Appearance or theme settings.
|
||||
* - site_name: Name for site as defined in Site information settings.
|
||||
* - site_slogan: Slogan for site as defined in Site information settings.
|
||||
*/
|
||||
#}
|
||||
{% block content %}
|
||||
{% if site_logo %}
|
||||
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo">
|
||||
<img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if site_name %}
|
||||
<div class="site-name">
|
||||
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if site_slogan %}
|
||||
<div class="site-slogan">{{ site_slogan }}</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,55 @@
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override for the basic structure of a single Drupal page.
|
||||
*
|
||||
* Variables:
|
||||
* - logged_in: A flag indicating if user is logged in.
|
||||
* - root_path: The root path of the current page (e.g., node, admin, user).
|
||||
* - node_type: The content type for the current node, if the page is a node.
|
||||
* - head_title: List of text elements that make up the head_title variable.
|
||||
* May contain one or more of the following:
|
||||
* - title: The title of the page.
|
||||
* - name: The name of the site.
|
||||
* - slogan: The slogan of the site.
|
||||
* - page_top: Initial rendered markup. This should be printed before 'page'.
|
||||
* - page: The rendered page markup.
|
||||
* - page_bottom: Closing rendered markup. This variable should be printed after
|
||||
* 'page'.
|
||||
* - db_offline: A flag indicating if the database is offline.
|
||||
* - placeholder_token: The token for generating head, css, js and js-bottom
|
||||
* placeholders.
|
||||
*
|
||||
* @see template_preprocess_html()
|
||||
*/
|
||||
#}
|
||||
{%
|
||||
set body_classes = [
|
||||
logged_in ? 'user-logged-in',
|
||||
not root_path ? 'path-frontpage' : 'path-' ~ root_path|clean_class,
|
||||
node_type ? 'page-node-type-' ~ node_type|clean_class,
|
||||
db_offline ? 'db-offline',
|
||||
]
|
||||
%}
|
||||
<!DOCTYPE html>
|
||||
<html{{ html_attributes }}>
|
||||
<head>
|
||||
<head-placeholder token="{{ placeholder_token }}">
|
||||
<title>{{ head_title|safe_join(' | ') }}</title>
|
||||
<css-placeholder token="{{ placeholder_token }}">
|
||||
<js-placeholder token="{{ placeholder_token }}">
|
||||
</head>
|
||||
<body{{ attributes.addClass(body_classes) }}>
|
||||
{#
|
||||
Keyboard navigation/accessibility link to main content section in
|
||||
page.html.twig.
|
||||
#}
|
||||
<a href="#main-content" class="visually-hidden focusable skip-link">
|
||||
{{ 'Skip to main content'|t }}
|
||||
</a>
|
||||
{{ page_top }}
|
||||
{{ page }}
|
||||
{{ page_bottom }}
|
||||
<js-bottom-placeholder token="{{ placeholder_token }}">
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,65 @@
|
||||
{#
|
||||
/**
|
||||
* @file
|
||||
* Theme override to display a single Drupal page while offline.
|
||||
*
|
||||
* All available variables are mirrored in page.html.twig.
|
||||
* Some may be blank but they are provided for consistency.
|
||||
*
|
||||
* @see template_preprocess_maintenance_page()
|
||||
*/
|
||||
#}
|
||||
<div class="layout-container">
|
||||
|
||||
<header role="banner">
|
||||
{% if logo %}
|
||||
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">
|
||||
<img src="{{ logo }}" alt="{{ 'Home'|t }}"/>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if site_name or site_slogan %}
|
||||
<div class="name-and-slogan">
|
||||
{% if site_name %}
|
||||
<h1 class="site-name">
|
||||
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
|
||||
</h1>
|
||||
{% endif %}
|
||||
|
||||
{% if site_slogan %}
|
||||
<div class="site-slogan">{{ site_slogan }}</div>
|
||||
{% endif %}
|
||||
</div>{# /.name-and-slogan #}
|
||||
{% endif %}
|
||||
|
||||
</header>
|
||||
|
||||
<main role="main">
|
||||
{% if title %}
|
||||
<h1>{{ title }}</h1>
|
||||
{% endif %}
|
||||
|
||||
{{ page.highlighted }}
|
||||
|
||||
{{ page.content }}
|
||||
</main>
|
||||
|
||||
{% if page.sidebar_first %}
|
||||
<aside class="layout-sidebar-first" role="complementary">
|
||||
{{ page.sidebar_first }}
|
||||
</aside>{# /.layout-sidebar-first #}
|
||||
{% endif %}
|
||||
|
||||
{% if page.sidebar_second %}
|
||||
<aside class="layout-sidebar-second" role="complementary">
|
||||
{{ page.sidebar_second }}
|
||||
</aside>{# /.layout-sidebar-second #}
|
||||
{% endif %}
|
||||
|
||||
{% if page.footer %}
|
||||
<footer role="contentinfo">
|
||||
{{ page.footer }}
|
||||
</footer>
|
||||
{% endif %}
|
||||
|
||||
</div>{# /.layout-container #}
|
||||
@@ -0,0 +1,87 @@
|
||||
{#
|
||||
/**
|
||||
* @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>
|
||||
|
||||
{{ page.primary_menu }}
|
||||
{{ page.secondary_menu }}
|
||||
|
||||
{{ page.breadcrumb }}
|
||||
|
||||
{{ page.highlighted }}
|
||||
|
||||
{{ page.help }}
|
||||
|
||||
<main role="main">
|
||||
<a id="main-content" tabindex="-1"></a>{# link is in html.html.twig #}
|
||||
|
||||
<div class="layout-content">
|
||||
{{ page.content }}
|
||||
</div>{# /.layout-content #}
|
||||
|
||||
{% if page.sidebar_first %}
|
||||
<aside class="layout-sidebar-first" role="complementary">
|
||||
{{ page.sidebar_first }}
|
||||
</aside>
|
||||
{% endif %}
|
||||
|
||||
{% if page.sidebar_second %}
|
||||
<aside class="layout-sidebar-second" role="complementary">
|
||||
{{ page.sidebar_second }}
|
||||
</aside>
|
||||
{% endif %}
|
||||
|
||||
</main>
|
||||
|
||||
{% if page.footer %}
|
||||
<footer role="contentinfo">
|
||||
{{ page.footer }}
|
||||
</footer>
|
||||
{% endif %}
|
||||
|
||||
</div>{# /.layout-container #}
|
||||
@@ -0,0 +1,25 @@
|
||||
{#
|
||||
/**
|
||||
* @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>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Functions to support theming in the edlp theme.
|
||||
*/
|
||||
Reference in New Issue
Block a user