From 376b4067440c7dfd5096db1a84fb0195dd10fd59 Mon Sep 17 00:00:00 2001 From: JJ Asghar Date: Fri, 3 Apr 2026 16:15:25 -0500 Subject: [PATCH 1/3] modernizing the templates and making it more accessible --- package-lock.json | 378 ++-------- .../devopsdays-theme/assets/scss/custom.scss | 711 +++++++++++------- .../layouts/_default/baseof.html | 83 +- .../layouts/_default/list.html | 19 + .../layouts/_default/single.html | 7 +- .../devopsdays-theme/layouts/blog/single.html | 86 ++- .../layouts/blog/summary.html | 38 +- .../layouts/events/single.html | 99 ++- themes/devopsdays-theme/layouts/index.html | 108 ++- .../layouts/partials/events/cta.html | 114 ++- .../partials/events/event_metadata.html | 37 +- .../layouts/partials/events/event_navbar.html | 57 +- .../partials/events/non-current-banner.html | 22 +- .../layouts/partials/footer.html | 107 ++- .../layouts/partials/footer_scripts.html | 111 +-- .../partials/functions/get-all-events.html | 4 +- .../functions/get-current-event-for-city.html | 27 +- .../partials/functions/get-event-data.html | 12 +- .../partials/functions/get-tbd-events.html | 4 +- .../functions/get-upcoming-events.html | 6 +- .../layouts/partials/future.html | 55 +- .../layouts/partials/global_navbar.html | 21 +- .../layouts/partials/google_analytics.html | 30 +- .../layouts/partials/head.html | 78 +- .../layouts/partials/head/seo.html | 74 +- .../layouts/partials/head_includes.html | 70 +- .../layouts/partials/meta.html | 6 +- .../layouts/partials/speaking.html | 45 +- .../layouts/partials/sponsors-accepted.html | 37 +- .../layouts/partials/sponsors.html | 72 +- .../layouts/partials/welcome.html | 96 +-- .../layouts/section/blog.html | 18 +- .../layouts/shortcodes/cfp_dates.html | 11 +- .../layouts/shortcodes/event_end.html | 3 +- .../layouts/shortcodes/event_logo.html | 21 +- .../layouts/shortcodes/event_map.html | 9 +- .../layouts/shortcodes/event_start.html | 2 +- .../layouts/shortcodes/list_core_active.html | 6 +- .../shortcodes/list_core_advisory.html | 6 +- .../shortcodes/list_core_emeritus.html | 6 +- .../layouts/shortcodes/list_organizers.html | 108 +-- .../layouts/shortcodes/registration_end.html | 2 +- .../shortcodes/registration_start.html | 2 +- .../layouts/speaker/single.html | 173 ++--- .../layouts/speakers/single.html | 144 ++-- .../devopsdays-theme/layouts/talk/single.html | 323 ++++---- 46 files changed, 1568 insertions(+), 1880 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59c54f42553..2414e2bfe61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -847,13 +847,6 @@ "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz", "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==" }, - "node_modules/netlify-cli/node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "optional": true, - "peer": true - }, "node_modules/netlify-cli/node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3941,11 +3934,10 @@ "cpu": [ "arm" ], - "optional": true, + "extraneous": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-android-arm64": { "version": "4.31.0", @@ -3954,11 +3946,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-darwin-arm64": { "version": "4.31.0", @@ -3967,11 +3958,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-darwin-x64": { "version": "4.31.0", @@ -3980,11 +3970,10 @@ "cpu": [ "x64" ], - "optional": true, + "extraneous": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.31.0", @@ -3993,11 +3982,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-freebsd-x64": { "version": "4.31.0", @@ -4006,11 +3994,10 @@ "cpu": [ "x64" ], - "optional": true, + "extraneous": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.31.0", @@ -4019,11 +4006,10 @@ "cpu": [ "arm" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.31.0", @@ -4032,11 +4018,10 @@ "cpu": [ "arm" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.31.0", @@ -4045,11 +4030,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.31.0", @@ -4058,11 +4042,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-loongarch64-gnu": { "version": "4.31.0", @@ -4071,11 +4054,10 @@ "cpu": [ "loong64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.31.0", @@ -4084,11 +4066,10 @@ "cpu": [ "ppc64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.31.0", @@ -4097,11 +4078,10 @@ "cpu": [ "riscv64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.31.0", @@ -4110,11 +4090,10 @@ "cpu": [ "s390x" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.31.0", @@ -4123,11 +4102,10 @@ "cpu": [ "x64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.31.0", @@ -4136,11 +4114,10 @@ "cpu": [ "x64" ], - "optional": true, + "extraneous": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.31.0", @@ -4149,11 +4126,10 @@ "cpu": [ "arm64" ], - "optional": true, + "extraneous": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.31.0", @@ -4162,11 +4138,10 @@ "cpu": [ "ia32" ], - "optional": true, + "extraneous": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.31.0", @@ -4175,11 +4150,10 @@ "cpu": [ "x64" ], - "optional": true, + "extraneous": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/netlify-cli/node_modules/@sindresorhus/is": { "version": "5.6.0", @@ -4292,8 +4266,7 @@ "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4303,8 +4276,7 @@ "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/node": "*" } @@ -4318,8 +4290,7 @@ "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -4331,8 +4302,7 @@ "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4377,8 +4347,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "optional": true, - "peer": true + "extraneous": true }, "node_modules/netlify-cli/node_modules/@types/node": { "version": "22.10.7", @@ -4397,15 +4366,13 @@ "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "optional": true, - "peer": true + "extraneous": true }, "node_modules/netlify-cli/node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "optional": true, - "peer": true + "extraneous": true }, "node_modules/netlify-cli/node_modules/@types/retry": { "version": "0.12.1", @@ -4416,8 +4383,7 @@ "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -6016,16 +5982,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify-cli/node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/netlify-cli/node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -6814,16 +6770,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, - "node_modules/netlify-cli/node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/netlify-cli/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -9101,31 +9047,6 @@ "kind-of": "^6.0.2" } }, - "node_modules/netlify-cli/node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", - "optional": true, - "peer": true, - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, "node_modules/netlify-cli/node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -9869,25 +9790,11 @@ "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" }, - "node_modules/netlify-cli/node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "optional": true, - "peer": true - }, "node_modules/netlify-cli/node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "node_modules/netlify-cli/node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "optional": true, - "peer": true - }, "node_modules/netlify-cli/node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -12156,29 +12063,6 @@ "node": ">= 12.13.0" } }, - "node_modules/netlify-cli/node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify-cli/node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "optional": true, - "peer": true, - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/netlify-cli/node_modules/registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", @@ -12338,8 +12222,7 @@ "version": "4.31.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz", "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==", - "optional": true, - "peer": true, + "extraneous": true, "dependencies": { "@types/estree": "1.0.6" }, @@ -12886,13 +12769,6 @@ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, - "node_modules/netlify-cli/node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "optional": true, - "peer": true - }, "node_modules/netlify-cli/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -15308,13 +15184,6 @@ "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz", "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==" }, - "@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "optional": true, - "peer": true - }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -17196,134 +17065,115 @@ "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz", "integrity": "sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-android-arm64": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz", "integrity": "sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-darwin-arm64": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz", "integrity": "sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-darwin-x64": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz", "integrity": "sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-freebsd-arm64": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz", "integrity": "sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-freebsd-x64": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz", "integrity": "sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-arm-gnueabihf": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz", "integrity": "sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-arm-musleabihf": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz", "integrity": "sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-arm64-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz", "integrity": "sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-arm64-musl": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz", "integrity": "sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-loongarch64-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz", "integrity": "sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz", "integrity": "sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-riscv64-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz", "integrity": "sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-s390x-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz", "integrity": "sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-x64-gnu": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz", "integrity": "sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-linux-x64-musl": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz", "integrity": "sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-win32-arm64-msvc": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz", "integrity": "sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-win32-ia32-msvc": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz", "integrity": "sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==", - "optional": true, - "peer": true + "extraneous": true }, "@rollup/rollup-win32-x64-msvc": { "version": "4.31.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz", "integrity": "sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==", - "optional": true, - "peer": true + "extraneous": true }, "@sindresorhus/is": { "version": "5.6.0", @@ -17404,8 +17254,7 @@ "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@types/connect": "*", "@types/node": "*" @@ -17415,8 +17264,7 @@ "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@types/node": "*" } @@ -17430,8 +17278,7 @@ "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -17443,8 +17290,7 @@ "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -17489,8 +17335,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "optional": true, - "peer": true + "extraneous": true }, "@types/node": { "version": "22.10.7", @@ -17509,15 +17354,13 @@ "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "optional": true, - "peer": true + "extraneous": true }, "@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "optional": true, - "peer": true + "extraneous": true }, "@types/retry": { "version": "0.12.1", @@ -17528,8 +17371,7 @@ "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@types/mime": "^1", "@types/node": "*" @@ -18633,13 +18475,6 @@ } } }, - "cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "optional": true, - "peer": true - }, "color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -19192,13 +19027,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "optional": true, - "peer": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -20818,23 +20646,6 @@ "kind-of": "^6.0.2" } }, - "ioredis": { - "version": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", - "optional": true, - "peer": true, - "requires": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - } - }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -21354,25 +21165,11 @@ "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "optional": true, - "peer": true - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "optional": true, - "peer": true - }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -22953,23 +22750,6 @@ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" }, - "redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "optional": true, - "peer": true - }, - "redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "optional": true, - "peer": true, - "requires": { - "redis-errors": "^1.0.0" - } - }, "registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", @@ -23080,8 +22860,7 @@ "version": "4.31.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz", "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==", - "optional": true, - "peer": true, + "extraneous": true, "requires": { "@rollup/rollup-android-arm-eabi": "4.31.0", "@rollup/rollup-android-arm64": "4.31.0", @@ -23493,13 +23272,6 @@ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, - "standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "optional": true, - "peer": true - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", diff --git a/themes/devopsdays-theme/assets/scss/custom.scss b/themes/devopsdays-theme/assets/scss/custom.scss index f2da1a2519e..fed2bcdff21 100644 --- a/themes/devopsdays-theme/assets/scss/custom.scss +++ b/themes/devopsdays-theme/assets/scss/custom.scss @@ -1,13 +1,43 @@ html { - font-size: 14px; - line-height: 1.4; + font-size: 16px; + line-height: 1.6; + scroll-behavior: smooth; } body { font-size: 1em; font-weight: 300; - color: #000000; + color: #1a1a1a; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// Skip link for keyboard/screen reader accessibility +.skip-link { + position: absolute; + top: -100%; + left: 1rem; + z-index: 10000; + padding: 0.75rem 1.5rem; + background: $devopsdays-blue; + color: #fff; + font-weight: 600; + text-decoration: none; + border-radius: 0 0 4px 4px; + + &:focus { + top: 0; + color: #fff; + outline: 3px solid #ffbf47; + outline-offset: 0; + } +} + +// Global focus styles for keyboard accessibility +*:focus-visible { + outline: 3px solid $devopsdays-blue; + outline-offset: 2px; } .fixed-top-2 { @@ -15,123 +45,173 @@ body { } h1 { - font-size: 2.5em; + font-size: 2.25rem; font-weight: 700; text-transform: capitalize; + line-height: 1.2; + margin-bottom: 0.75rem; } h2 { - font-size: 2em; + font-size: 1.75rem; font-weight: 700; text-transform: capitalize; + line-height: 1.3; + margin-bottom: 0.5rem; } + h3 { - font-size: 1.5em; - font-weight: 300; + font-size: 1.35rem; + font-weight: 400; text-transform: capitalize; + line-height: 1.4; +} + +p, li { + line-height: 1.7; + max-width: 75ch; } a { - color: #0082AB; + color: #006d8f; + transition: color 0.15s ease; + + &:hover { + color: darken(#006d8f, 15%); + } + + &:focus-visible { + outline: 3px solid $devopsdays-blue; + outline-offset: 2px; + } } b, strong { font-weight: 600; } -.event-logo-homepage { - position:relative; - padding: 0; - margin-bottom: 20px; - margin-top: 10px; +img { + max-width: 100%; + height: auto; +} +.event-logo-homepage { + position: relative; + padding: 0; + margin-bottom: 20px; + margin-top: 10px; } -/* set a max-width for horizontal fluid layout and make it centered */ .container-fluid { - max-width: 1600px; /* or 950px */ + max-width: 1400px; + padding-left: 2rem; + padding-right: 2rem; } -/* Navigation */ +// ============================================ +// Navigation +// ============================================ .nav-item { - font-family: 'Roboto', sans-serif; - color: #0082AB; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + color: #006d8f; } .nav-link { - color: #0082AB; + color: #006d8f; white-space: nowrap; + padding: 0.5rem 0.75rem; + border-radius: 4px; + transition: background-color 0.15s ease, color 0.15s ease; + + &:hover, + &:focus { + color: darken(#006d8f, 15%); + background-color: rgba(0, 130, 171, 0.08); + } } .navbar-brand { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; text-transform: lowercase; + font-weight: 700; + font-size: 1.2rem; + color: #1a1a1a; + display: flex; + align-items: center; + gap: 0.5rem; } .global-navigation { - font-family: 'Roboto', sans-serif; - font-weight: 900; - color: #0082AB; - font-size: .9em; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 700; + color: #006d8f; + font-size: 0.9rem; text-transform: uppercase; -} - -.navbar>li>a{ - color: red; + letter-spacing: 0.03em; } .event-navigation { font-family: 'Roboto Condensed', sans-serif; - font-weight: 300; - font-size: 9pt; - color: green; + font-weight: 400; + font-size: 0.85rem; text-transform: uppercase; + border-bottom: 2px solid rgba(0, 130, 171, 0.15); + margin-bottom: 1rem; } .event-navigation-icon { padding-left: 5px; padding-right: 5px; - color: #0082AB; + color: $devopsdays-blue; } .navbar-light { - background-color:transparent !important; - border-color:transparent; - background-image:none; - box-shadow:none; + background-color: #fff !important; + border-bottom: 1px solid #e8e8e8; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); +} + +// ============================================ +// Sidebar / Left navigation +// ============================================ + +.sidebar { + padding-top: 1.5rem; + border-right: 1px solid #e8e8e8; } -/* Left navigation */ -/* TODO: all of these left-nav elements can probably be collapsed */ .left-nav-navs { - font-family: 'Roboto', sans-serif; - font-weight: 300; - font-size: 9pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 600; + font-size: 0.8rem; text-transform: uppercase; - color: #000000; + letter-spacing: 0.05em; + color: #1a1a1a; + display: inline-block; + margin-bottom: 1rem; } .left-nav-months { - font-family: 'Roboto', sans-serif; - font-weight: 300; - font-size: 9pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 400; + font-size: 0.8rem; text-transform: uppercase; - color: #000000; + color: #4a4a4a; margin-top: 1.5rem; } -/* set the current month style */ .left-nav-months.current { - font-weight: 900; - color: #0082AB; + font-weight: 700; + color: $devopsdays-blue; } .left-nav-year { - font-family: 'Roboto', sans-serif; - font-weight: 100; - font-size: 18pt; - color: #000000; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 300; + font-size: 1.25rem; + color: #1a1a1a; + margin-top: 0.5rem; } .left-nav-year + .left-nav-months { @@ -140,68 +220,97 @@ b, strong { .left-nav-event { display: block; - font-family: 'Roboto', sans-serif; - font-weight: 100; - font-size: 9pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 400; + font-size: 0.8rem; text-transform: capitalize; - margin-bottom: .35rem; + margin-bottom: 0.35rem; +} + +// ============================================ +// Footer +// ============================================ + +.site-footer { + margin-top: 3rem; } -/* Footer */ .footer-nav { - font-family: 'Roboto', sans-serif; - font-weight: 900; - font-size: 1.3em; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 700; + font-size: 1.1rem; text-transform: uppercase; - color: #0082AB; - margin-bottom: 1.5rem; + letter-spacing: 0.03em; + color: $devopsdays-blue; + margin-bottom: 1.25rem; +} + +.footer-blog-title { + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-size: 1rem; + font-weight: 600; + color: $devopsdays-blue; + display: block; + margin-top: 0.5rem; } +.footer-blog-meta { + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-size: 0.85rem; + font-weight: 300; + color: #666; + display: block; + margin-bottom: 0.25rem; +} + +// Keep legacy footer-heading for any templates still using it .footer-heading { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; text-transform: capitalize; - color: #0082AB; - font-size: 1.3em; + color: $devopsdays-blue; + font-size: 1rem; } h1.footer-heading { - font-size: 1.2em; - font-weight: 400; + font-size: 1rem; + font-weight: 600; } h2.footer-heading { - font-size: 1.1em; + font-size: 0.85rem; font-weight: 300; + color: #666; } .footer-content { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; font-weight: 300; - font-size: .9em; - color: #000; + font-size: 0.9rem; + color: #1a1a1a; } + a.footer-content { - font-weight: 300; - color: #0082AB; + font-weight: 400; + color: #006d8f; } .footer-nav-background { - background-color: #f7f7f7; - padding-top: 20px; - border-top: 2px solid #0082AB; - padding-left:40px; - padding-right:40px; + background-color: #f8f9fa; + padding: 2rem 2.5rem; + border-top: 3px solid $devopsdays-blue; } .footer-nav-col { - padding-bottom: 30px; + padding-bottom: 2rem; } .footer-nav-row { - margin-top:20px; + margin-top: 1.5rem; } -/* Sponsors */ +// ============================================ +// Sponsors +// ============================================ .sponsor-row { display: flex; @@ -209,57 +318,68 @@ a.footer-content { } .sponsor-cta { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; text-transform: uppercase; - color: #000000; + color: #1a1a1a; } .cta-row { - background-color: lighten(#bfbfc1, 20%); + background-color: #f0f0f1; padding-top: 10px; padding-bottom: 10px; margin-top: 15px; margin-bottom: 15px; + border-radius: 4px; } a.sponsor-cta { - color: #0082AB; + color: $devopsdays-blue; } img.sponsor { margin-top: 20px; margin-bottom: 20px; - width: 200x; - height: 200x; - max-width: 100%; - height: auto; + width: 200px; + height: 200px; + max-width: 100%; + height: auto; } -/* Homepage */ +// ============================================ +// Homepage +// ============================================ .homepage-grid-col { - padding-top: 30px; - padding-bottom: 30px; + padding: 1.5rem 1rem; text-align: center; + transition: transform 0.15s ease, box-shadow 0.15s ease; + border-radius: 8px; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + } } + .homepage-grid-date { - font-family: 'Roboto', sans-serif; - font-weight: 300; - font-size: 9pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 400; + font-size: 0.8rem; text-transform: uppercase; - color: #000000; + letter-spacing: 0.04em; + color: #666; display: inline-block; width: 100%; - margin: auto; + margin: 0.5rem auto 0; text-align: center; } .homepage-grid-city { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; font-weight: 700; - font-size: 2em; - text-transform: capitalize;; - color: #000000; + font-size: 1.5rem; + text-transform: capitalize; + color: #1a1a1a; display: inline-block; width: 100%; margin: auto; @@ -268,56 +388,78 @@ img.sponsor { .homepage-grid-city a { word-break: break-word; - color: #000000; + color: #1a1a1a; + text-decoration: none; + + &:hover { + color: $devopsdays-blue; + } } .homepage-grid-desc { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; font-weight: 300; - font-size: 9pt; - color: #000000; + font-size: 0.8rem; + color: #4a4a4a; } -/* Program */ +// ============================================ +// Program +// ============================================ + button.accordion { - background-color: #eee; - color: #444; - cursor: pointer; - padding: 18px; - width: 100%; - border: none; - text-align: left; - outline: none; - font-size: 15px; - transition: 0.4s; + background-color: #f0f0f1; + color: #1a1a1a; + cursor: pointer; + padding: 1rem 1.25rem; + width: 100%; + border: none; + text-align: left; + outline: none; + font-size: 1rem; + transition: background-color 0.2s ease; + border-radius: 4px; + margin-bottom: 2px; + + &:focus-visible { + outline: 3px solid $devopsdays-blue; + outline-offset: 2px; + } } -button.accordion.active, button.accordion:hover { - background-color: #ddd; +button.accordion.active, +button.accordion:hover { + background-color: #e4e4e4; } div.panel { - padding: 0 18px; - background-color: white; - max-height: 0; - overflow: hidden; - transition: max-height 0.2s ease-out; + padding: 0 1.25rem; + background-color: white; + max-height: 0; + overflow: hidden; + transition: max-height 0.2s ease-out; } -// speaker page +// ============================================ +// Speaker pages +// ============================================ + .speaker-page { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; font-weight: 300; - color: #000000; + color: #1a1a1a; } + h2.speaker-page { - font-size: 2em; + font-size: 1.75rem; font-weight: 700; } + h3.speaker-page { - font-size: 1.5em; - font-weight: 300; + font-size: 1.35rem; + font-weight: 400; } + img.speaker-page { margin-top: 20px; margin-bottom: 20px; @@ -325,26 +467,33 @@ img.speaker-page { height: 600px; max-width: 100%; object-fit: cover; + border-radius: 8px; } .speaker-bio-talks { padding-top: 15px; } -// speakers page +// ============================================ +// Speakers list page +// ============================================ + .speakers-page { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; font-weight: 300; - color: #000000; + color: #1a1a1a; } + h2.speakers-page { - font-size: 2em; + font-size: 1.75rem; font-weight: 700; } + h3.speakers-page { - font-size: 1.5em; - font-weight: 300; + font-size: 1.35rem; + font-weight: 400; } + img.speakers-page { margin-top: 20px; margin-bottom: 20px; @@ -352,25 +501,33 @@ img.speakers-page { height: 300px; max-width: 100%; object-fit: cover; + border-radius: 8px; } -// talk page +// ============================================ +// Talk page +// ============================================ .talk-page { -font-family: 'Roboto', sans-serif; -font-weight: 300; -color: #000000; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 300; + color: #1a1a1a; } h2.talk-page { - font-size: 2em; + font-size: 1.75rem; font-weight: 700; } + h3.talk-page { - font-size: 1.5em; - font-weight: 300; + font-size: 1.35rem; + font-weight: 400; } +// ============================================ +// Welcome / Event landing pages +// ============================================ + h1.welcome-page { color: #FFF; } @@ -379,37 +536,35 @@ h1.welcome-page { text-transform: uppercase; } -// Note that welcome-page-masthead is also defined in templates/welcome.html so we cannot use SCSS here .welcome-page-masthead { - background: #bfbfc1; /* For browsers that do not support gradients */ - background: -webkit-linear-gradient(#0082AB, #bfbfc1); /* For Safari 5.1 to 6.0 */ - background: -o-linear-gradient(#0082AB, #bfbfc1); /* For Opera 11.1 to 12.0 */ - background: -moz-linear-gradient(#0082AB, #bfbfc1); /* For Firefox 3.6 to 15 */ - background: linear-gradient(#0082AB, #bfbfc1); /* Standard syntax */ - padding: 20px; - margin-bottom:20px; - margin-top:20px; + background: linear-gradient(135deg, $devopsdays-blue, lighten($devopsdays-blue, 15%)); + padding: 2rem; + margin-bottom: 1.5rem; + margin-top: 1rem; + border-radius: 8px; } a.welcome-page-masthead-link { color: white; + text-decoration: underline; + text-decoration-color: rgba(255, 255, 255, 0.4); + text-underline-offset: 2px; } a:hover.welcome-page-masthead-link { - color: #bfbfc1; - border-color: #bfbfc1; + color: rgba(255, 255, 255, 0.85); text-decoration: none; } .welcome-page-masthead-venue { - font-size: 1.2em; + font-size: 1.15rem; } .welcome-page-cta { margin-left: 5px; margin-right: 5px; - padding-left: 0px; - padding-right: 0px; + padding-left: 0; + padding-right: 0; } .welcome-page-cta:first-child { @@ -419,7 +574,7 @@ a:hover.welcome-page-masthead-link { @media only screen and (min-width: 768px) { .welcome-page-cta:first-child { - margin-left: 0px; + margin-left: 0; margin-right: 5px; } } @@ -428,6 +583,10 @@ a:hover.welcome-page-masthead-link { max-width: 50%; } +// ============================================ +// Organizers +// ============================================ + .organizer-card { padding-bottom: 20px; } @@ -439,12 +598,15 @@ img.organizer-image { height: 300px; max-width: 100%; object-fit: cover; - // height: auto; + border-radius: 8px; } -.event-page-nav-home{ - padding-left: .9rem; +// ============================================ +// Events pages +// ============================================ +.event-page-nav-home { + padding-left: 0.9rem; } @media only screen and (min-width: 1024px) { @@ -454,46 +616,48 @@ img.organizer-image { } .events-page-col { - padding: 30px; + padding: 2rem; } .events-page-months { - font-family: 'Roboto', sans-serif; - font-weight: 300; - font-size: 14pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 400; + font-size: 1rem; text-transform: uppercase; - color: #000000; + letter-spacing: 0.03em; + color: #1a1a1a; } .events-page-event { - font-family: 'Roboto', sans-serif; - font-weight: 100; - font-size: 11pt; + font-family: 'Roboto Condensed', 'Roboto', sans-serif; + font-weight: 400; + font-size: 0.9rem; text-transform: capitalize; } .event-cta-button:first-child { - margin-left: 0px; + margin-left: 0; } .event-cta-button { margin-left: 5px; } - +// ============================================ // Program page items +// ============================================ h3.program-page { - margin-top:8px; + margin-top: 8px; } .program-page-desc { - font-size: .85em; + font-size: 0.85rem; } .program-element { overflow: hidden; - height: 1% + height: 1%; } @media only screen and (min-width: 768px) { @@ -501,61 +665,61 @@ h3.program-page { border-radius: 5px; margin-right: 5px; overflow: hidden; - height: 1% + height: 1%; } } .program-custom { - background-color: lighten( $devopsdays-gray, 15% ); - color: #000; + background-color: lighten($devopsdays-gray, 15%); + color: #1a1a1a; - >a { - color: #000; + > a { + color: #1a1a1a; } } .program-talk { - background-color: lighten( $devopsdays-blue, 50% ); - color: #000; + background-color: lighten($devopsdays-blue, 50%); + color: #1a1a1a; } -.program-talk>a{ - color: #000; +.program-talk > a { + color: #1a1a1a; } .program-ignite { background-color: lighten(#00C342, 50%); - color: #000; + color: #1a1a1a; } -.program-ignite>ul>li{ - color: #000; +.program-ignite > ul > li { + color: #1a1a1a; } -.program-ignite>ul { - margin-bottom: 0px; +.program-ignite > ul { + margin-bottom: 0; } -.program-ignite>ul>li>a{ - color: #000; +.program-ignite > ul > li > a { + color: #1a1a1a; } .program-open-space { - background-color: lighten( #FF8300, 20%); - color: #000; + background-color: lighten(#FF8300, 20%); + color: #1a1a1a; } -.program-open-space>a{ - color: #000; +.program-open-space > a { + color: #1a1a1a; } .program-workshop { background-color: #FFFA99; - color: #000 + color: #1a1a1a; } -.program-workshop>a{ - color: #000; +.program-workshop > a { + color: #1a1a1a; } .program-row { @@ -564,123 +728,122 @@ h3.program-page { padding-right: 10px; } -// legacy styles +// ============================================ +// Legacy styles +// ============================================ .box { - padding:1.5em; - margin-bottom:1.5em; - background:#E5ECF9; + padding: 1.5em; + margin-bottom: 1.5em; + background: #E5ECF9; + border-radius: 4px; } -//formatting for content provided by events, pages, etc -.content-text h1, h2, h3 { +.content-text h1, +.content-text h2, +.content-text h3 { text-transform: none; } +// ============================================ // 404 page +// ============================================ .page-404-header { color: $devopsdays-blue; - font-size: 2.5em; + font-size: 2.5rem; font-weight: 700; text-transform: capitalize; } .page-404-content { - color: darken($devopsdays-gray, 50%); - font-size: 1.5em; + color: #4a4a4a; + font-size: 1.25rem; font-weight: 300; } -.social-bsky { - color: black; +// ============================================ +// Social icons (consolidated) +// ============================================ + +.social-icon { + color: #1a1a1a; height: 50px; padding: 12px; font-size: 30px; text-decoration: none; display: inline-block; + transition: color 0.15s ease; } -.social-bksy:hover { - color: rgb(17, 134, 243); - text-decoration: none; + +.social-bsky { + @extend .social-icon; + &:hover { color: rgb(17, 134, 243); text-decoration: none; } } + .social-li { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-li:hover { - color: rgb(29, 96, 196); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(29, 96, 196); text-decoration: none; } } + .social-envelope { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-envelope:hover { - color: rgb(46, 124, 43); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(46, 124, 43); text-decoration: none; } } + .social-mstd { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-mstd:hover { - color: rgb(110, 99, 218); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(110, 99, 218); text-decoration: none; } } + .social-slack { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-slack:hover { - color: rgb(223, 180, 42); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(223, 180, 42); text-decoration: none; } } + .social-x { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-x:hover { - color: rgb(95, 92, 92); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(95, 92, 92); text-decoration: none; } } + .social-yt { - color: black; - height: 50px; - padding: 12px; - font-size: 30px; - text-decoration: none; - display: inline-block; -} -.social-yt:hover { - color: rgb(224, 52, 52); - text-decoration: none; + @extend .social-icon; + &:hover { color: rgb(224, 52, 52); text-decoration: none; } } +// ============================================ +// Utility +// ============================================ + .footnotes { - font-size: 0.75rem; + font-size: 0.8rem; } .small-table-text { - font-size: 0.75rem; -} \ No newline at end of file + font-size: 0.8rem; +} + +// Better responsive images in content +.content-text img { + max-width: 100%; + height: auto; + border-radius: 4px; +} + +// Blog post improvements +.blog-post-meta { + color: #666; + font-size: 0.9rem; + margin-bottom: 1.5rem; +} + +.blog-summary { + margin-bottom: 2rem; + padding-bottom: 1.5rem; + border-bottom: 1px solid #e8e8e8; +} + +.blog-read-more { + font-weight: 600; + white-space: nowrap; +} diff --git a/themes/devopsdays-theme/layouts/_default/baseof.html b/themes/devopsdays-theme/layouts/_default/baseof.html index 206acad149f..7113922e0c9 100644 --- a/themes/devopsdays-theme/layouts/_default/baseof.html +++ b/themes/devopsdays-theme/layouts/_default/baseof.html @@ -1,52 +1,59 @@ - + {{- partial "head.html" . -}} - + + {{- partialCached "global_navbar.html" . -}} - {{- if and (eq (index (split (.Permalink | relURL) "/") 1) "events") (ne .Type "events") -}} + {{- $section := index (split (.Permalink | relURL) "/") 1 -}} + {{- if and (eq $section "events") (ne .Type "events") -}} {{- partial "events/event_navbar.html" . -}} {{- end -}} -
-
- {{- if .IsPage -}} - {{- if or (eq (index (split (.Permalink | relURL) "/") 1) "events") (eq .Type "events") -}} -
- {{- block "main" . }} - {{- end -}} -
- {{- else if (eq (index (split (.Permalink | relURL) "/") 1) "organizing") -}} -
- {{- block "main" . }} - {{- end -}} -
-
- Table of Contents
- {{- partialCached "toc.html" . -}} -
- {{- else -}} -
- {{- block "main" . }} {{- end -}} -
-
- ALL EVENTS
- {{- partialCached "future.html" . -}} -
- {{- end -}} +
+
+
+ {{- if .IsPage -}} + {{- if or (eq $section "events") (eq .Type "events") -}} +
+ {{- block "main" . }}{{- end -}} +
+ {{- else if (eq $section "organizing") -}} +
+ {{- block "main" . }}{{- end -}} +
+ {{- else -}} -
- {{- block "main" . }} - {{- end -}} +
+ {{- block "main" . }}{{- end -}}
-
- ALL EVENTS
+
+ + + {{- end -}} + {{- else -}} +
+ {{- block "main" . }}{{- end -}} +
+ {{- end -}} -
- {{- partialCached "footer.html" . -}} - {{- partial "footer_scripts.html" . -}} +
+
+ {{- partialCached "footer.html" . -}} + {{- partial "footer_scripts.html" . -}} diff --git a/themes/devopsdays-theme/layouts/_default/list.html b/themes/devopsdays-theme/layouts/_default/list.html index e69de29bb2d..e932beac384 100644 --- a/themes/devopsdays-theme/layouts/_default/list.html +++ b/themes/devopsdays-theme/layouts/_default/list.html @@ -0,0 +1,19 @@ +{{ define "main" }} + +

{{ .Title }}

+{{ .Content }} + +{{ if .Pages }} +
    + {{- range .Pages -}} +
  • + {{ .Title }} + {{- if not .Date.IsZero -}} + {{ dateFormat "02 January, 2006" .Date }} + {{- end -}} +
  • + {{- end -}} +
+{{ end }} + +{{ end }} diff --git a/themes/devopsdays-theme/layouts/_default/single.html b/themes/devopsdays-theme/layouts/_default/single.html index bef12d3ffcd..38195ee25b0 100644 --- a/themes/devopsdays-theme/layouts/_default/single.html +++ b/themes/devopsdays-theme/layouts/_default/single.html @@ -1,6 +1,11 @@ {{ define "main" }} + +

{{ .Title }}

- {{ .Content }} +
+ {{ .Content }} +
+
{{ end }} diff --git a/themes/devopsdays-theme/layouts/blog/single.html b/themes/devopsdays-theme/layouts/blog/single.html index d4075f337b0..aade9c24164 100644 --- a/themes/devopsdays-theme/layouts/blog/single.html +++ b/themes/devopsdays-theme/layouts/blog/single.html @@ -1,49 +1,47 @@ {{ define "main" }} -

{{ .Title }}

-{{- if isset .Params "author" -}} - by {{ .Params.author }} - {{ dateFormat "02 January, 2006" .Date }} -{{- else -}} - {{ dateFormat "02 January, 2006" .Date }} -{{- end -}} -

-{{ .Content }} -
-
- -
- +
+
+

{{ .Title }}

+ {{- with .Params.author -}} + + {{- else -}} + + {{- end -}} +
+ +
+ {{ .Content }}
-
- + +
+ + + {{ end }} diff --git a/themes/devopsdays-theme/layouts/blog/summary.html b/themes/devopsdays-theme/layouts/blog/summary.html index ae211121090..0b43d7251f1 100644 --- a/themes/devopsdays-theme/layouts/blog/summary.html +++ b/themes/devopsdays-theme/layouts/blog/summary.html @@ -1,20 +1,18 @@ -
-

{{ .Title }}

- {{- if isset .Params "author" -}} - - {{- else -}} - - {{- end -}} - -
-{{ if isset .Params "description" }} - {{ if ne .Params.descripton "" }} - {{ .Params.description | markdownify }} - {{ end }} -{{ else }} - {{ .Summary }} -{{ end }} - -
+
+
+

{{ .Title }}

+ {{- with .Params.author -}} + + {{- else -}} + + {{- end -}} +
+ {{- with .Params.description -}} + {{ . | markdownify }} + {{- else -}} + {{ .Summary }} + {{- end -}} + +
diff --git a/themes/devopsdays-theme/layouts/events/single.html b/themes/devopsdays-theme/layouts/events/single.html index fd33812e29a..bbe1c5831cf 100644 --- a/themes/devopsdays-theme/layouts/events/single.html +++ b/themes/devopsdays-theme/layouts/events/single.html @@ -3,83 +3,72 @@
{{ .Content }}
-
-
+
+

Upcoming

-{{- $upcoming := slice -}} -{{- $tbd := slice -}} -{{- $upcoming = partial "functions/get-upcoming-events" . -}} -{{- $tbd = partial "functions/get-tbd-events" . -}} -{{- $events := slice -}} -{{- $events = partial "functions/get-all-events" . -}} +{{- $upcoming := partial "functions/get-upcoming-events" . -}} +{{- $tbd := partial "functions/get-tbd-events" . -}} +{{- $events := partial "functions/get-all-events" . -}} -
-{{- $.Scratch.Set "close-tag" "false" -}} +
+{{- $currentMonth := "" -}} +{{- $needsCloseTag := false -}} {{- range sort $upcoming "startdate" -}} - {{- if ne ($.Scratch.Get "year") (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year" (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year-displayed" "false" -}} - {{- end -}} - {{- if ne ($.Scratch.Get "month") (dateFormat "January 2006" .startdate ) -}} - {{- $.Scratch.Set "month" (dateFormat "January 2006" .startdate ) -}} - {{- $.Scratch.Set "month-displayed" "false" -}} - {{- end -}} - {{- if ne ($.Scratch.Get "month-displayed") "true" -}} - {{- if eq ($.Scratch.Get "close-tag") "true"}} + {{- $month := time.Format "January 2006" .startdate -}} + {{- if ne $currentMonth $month -}} + {{- $currentMonth = $month -}} + {{- if $needsCloseTag -}}
{{- end -}} -
-

{{ dateFormat "January 2006" .startdate }}

- {{- $.Scratch.Set "month-displayed" "true" -}} - {{- $.Scratch.Set "close-tag" "true" -}} + -
-

TBD

-{{- range sort $tbd "city" -}} - {{ .city }}
-{{- end -}} +
+

TBD

+ {{- range sort $tbd "city" -}} + {{ .city }}
+ {{- end -}}
-
- -
-
+
+ +
+

Past

-
- {{- $.Scratch.Set "close-tag" "false" -}} +
+ {{- $currentYear := "" -}} + {{- $needsCloseTag := false -}} {{- range sort $events "startdate" -}} - {{- if and ( lt (dateFormat "2006-01-02" .enddate) (dateFormat "2006-01-02" (dateFormat "2006-01-02" now))) -}} - {{- if ne ($.Scratch.Get "year") (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year" (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year-displayed" "false" -}} - {{- end -}} - {{- if ne ($.Scratch.Get "year-displayed") "true" -}} - {{- if eq ($.Scratch.Get "close-tag") "true" -}} + {{- if lt (time.Format "2006-01-02" .enddate) (time.Format "2006-01-02" now) -}} + {{- $year := time.Format "2006" .startdate -}} + {{- if ne $currentYear $year -}} + {{- $currentYear = $year -}} + {{- if $needsCloseTag -}}
{{- end -}} -
-

{{ dateFormat "2006" .startdate }}

- {{- $.Scratch.Set "year-displayed" "true" -}} - {{- $.Scratch.Set "close-tag" "true" -}} +
+

{{ $year }}

+ {{- $needsCloseTag = true -}} {{- end -}} - {{ .city }} + {{ .city }}
{{- end -}} {{- end -}} diff --git a/themes/devopsdays-theme/layouts/index.html b/themes/devopsdays-theme/layouts/index.html index 3609ed2a3ed..cebc0e48660 100644 --- a/themes/devopsdays-theme/layouts/index.html +++ b/themes/devopsdays-theme/layouts/index.html @@ -1,77 +1,65 @@ {{ define "main" }} + {{- $upcoming := partial "functions/get-upcoming-events" . -}} - {{- $.Scratch.Add "i" 1 -}} - - {{- $upcoming := slice -}} - {{- $upcoming = partial "functions/get-upcoming-events" . -}} - +

Upcoming DevOpsDays Events

{{- range sort $upcoming "startdate" -}} {{- if .startdate -}} {{- if ne .cancel "true" -}} - - {{- if ge (time .enddate) now -}} - {{- $.Scratch.Set "city" .city -}} - {{- $.Scratch.Set "year" .year -}} - {{- $.Scratch.Set "logo" "unset" -}} -
- {{- $.Scratch.Set "subdir" .name -}} - {{- $.Scratch.Set "assetsdir" (printf "assets/events/%s/" ($.Scratch.Get "subdir")) -}} - {{- $.Scratch.Set "contentdir" (printf "static/events/%s/" ($.Scratch.Get "subdir")) -}} - {{- if (where (readDir "assets/events") "Name" ($.Scratch.Get "subdir")) -}} - - {{- if (where (readDir ($.Scratch.Get "assetsdir")) "Name" "logo-square.png") -}} - {{- $.Scratch.Set "squarelogofile" "logo-square.png" -}} - {{- else -}} - {{- if (where (readDir ($.Scratch.Get "assetsdir")) "Name" "logo.png") -}} - {{- $.Scratch.Set "squarelogofile" "logo.png" -}} - {{- else -}} - {{- $.Scratch.Set "squarelogofile" "" -}} - {{- end -}} + {{- if ge (time.AsTime .enddate) now -}} +
+ {{- $logo := "unset" -}} + {{- $subdir := .name -}} + {{- $assetsdir := printf "assets/events/%s/" $subdir -}} + {{- if where (os.ReadDir "assets/events") "Name" $subdir -}} + {{- $squarelogofile := "" -}} + {{- if where (os.ReadDir $assetsdir) "Name" "logo-square.png" -}} + {{- $squarelogofile = "logo-square.png" -}} + {{- else if where (os.ReadDir $assetsdir) "Name" "logo.png" -}} + {{- $squarelogofile = "logo.png" -}} {{- end -}} - {{- if ($.Scratch.Get "squarelogofile") -}} - {{- $imagelocation := (printf "events/%s/%s" .name ($.Scratch.Get "squarelogofile")) -}} + {{- if $squarelogofile -}} + {{- $imagelocation := printf "events/%s/%s" .name $squarelogofile -}} {{- $imageresource := resources.Get $imagelocation -}} {{- $imagefile := $imageresource.Resize "236x236 webp Lanczos q100 Center" -}} - devopsdays {{ .city }} - {{- $.Scratch.Set "logo" "set" -}} + + devopsdays {{ .city }} + + {{- $logo = "set" -}} {{- end -}} {{- end -}} - {{- if ne ($.Scratch.Get "logo") "set" -}} - {{- $imagelocation := "img/event-logo-square.png" -}} - {{- $imageresource := resources.Get $imagelocation -}} - {{- $imagefile := $imageresource.Resize "236x236 webp Lanczos q100 Center" -}} - devopsdays {{ .city }} + {{- if ne $logo "set" -}} + {{- $imageresource := resources.Get "img/event-logo-square.png" -}} + {{- $imagefile := $imageresource.Resize "236x236 webp Lanczos q100 Center" -}} + + devopsdays {{ .city }} + {{- end -}} -
- {{- if or (ne (time .startdate).Month (time .enddate).Month) (ne (time .startdate).Day (time .enddate).Day) -}} - - {{ if ne (time .startdate).Month (time .enddate).Month }} - {{ dateFormat "Jan 2" .startdate }} - {{ dateFormat "Jan 2, 2006" .enddate }}
- {{ else }} - {{ dateFormat "Jan 2" .startdate }} - {{ dateFormat "2, 2006" .enddate }}
- {{ end }} -
- {{- else -}} - - {{ dateFormat "Jan 2, 2006" .startdate }}
+ + {{- $start := time.AsTime .startdate -}} + {{- $end := time.AsTime .enddate -}} + {{- if or (ne $start.Month $end.Month) (ne $start.Day $end.Day) -}} + + {{- if ne $start.Month $end.Month -}} + {{ time.Format "Jan 2" .startdate }} – {{ time.Format "Jan 2, 2006" .enddate }} + {{- else -}} + {{ time.Format "Jan 2" .startdate }} – {{ time.Format "2, 2006" .enddate }} + {{- end -}} + + {{- else -}} + + {{ time.Format "Jan 2, 2006" .startdate }} + + {{- end -}} + + {{ .city }} - {{- end -}} - - {{ .city }} - -
- {{- if modBool ($.Scratch.Get "i") 4 -}}
-
- {{- end -}} - {{ $.Scratch.Add "i" 1 }} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} -
- + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} +
{{- end -}} diff --git a/themes/devopsdays-theme/layouts/partials/events/cta.html b/themes/devopsdays-theme/layouts/partials/events/cta.html index 01cf09fa8ca..a30ad46e01c 100644 --- a/themes/devopsdays-theme/layouts/partials/events/cta.html +++ b/themes/devopsdays-theme/layouts/partials/events/cta.html @@ -1,103 +1,77 @@ {{- $e := partial "functions/get-event-data" . -}} -
+
- {{- if $e.startdate -}} {{- if $e.cfp_date_start -}} - {{- if and (ge now (time $e.cfp_date_start)) (le now (time $e.cfp_date_end)) -}} -
- Propose + {{- if and (ge now (time.AsTime $e.cfp_date_start)) (le now (time.AsTime $e.cfp_date_end)) -}} + {{- end -}} {{- end -}} {{- end -}} - {{- if $e.registration_open -}} {{- if eq $e.registration_open "true" -}} - {{- if $e.registration_link -}} - {{- if eq $e.registration_link "" -}} - {{- $.Scratch.Set "registration_link" ((printf "/events/%s/registration" $e.name) ) -}} - {{- else -}} - {{- $.Scratch.Set "registration_link" $e.registration_link -}} + {{- $registration_link := printf "/events/%s/registration" $e.name -}} + {{- with $e.registration_link -}} + {{- if ne . "" -}} + {{- $registration_link = . -}} {{- end -}} - {{- else -}} - {{- $.Scratch.Set "registration_link" ((printf "/events/%s/registration" $e.name) ) -}} - {{- end -}} -
- Register -
+ {{- end -}} +
+ Register +
{{- end -}} {{- else -}} {{- if $e.startdate -}} {{- if and $e.registration_date_start $e.registration_date_end -}} - {{- if and (ge now (time $e.registration_date_start)) (le now (time $e.registration_date_end)) -}} - {{- if $e.registration_link -}} - {{- if eq $e.registration_link "" -}} - {{- $.Scratch.Set "registration_link" ((printf "/events/%s/registration" $e.name) ) -}} - {{- else -}} - {{- $.Scratch.Set "registration_link" $e.registration_link -}} + {{- if and (ge now (time.AsTime $e.registration_date_start)) (le now (time.AsTime $e.registration_date_end)) -}} + {{- $registration_link := printf "/events/%s/registration" $e.name -}} + {{- with $e.registration_link -}} + {{- if ne . "" -}} + {{- $registration_link = . -}} {{- end -}} - {{- else -}} - {{- $.Scratch.Set "registration_link" ((printf "/events/%s/registration" $e.name) ) -}} {{- end -}} {{- if $e.registration_closed -}} {{- if ne $e.registration_closed "true" -}} -
- Register + {{- end -}} + {{- else -}} +
+ Register +
{{- end -}} -
- Register -
{{- end -}} {{- end -}} {{- end -}} {{- end -}} - - {{- if $e.organizer_email -}} - {{- if ne $e.organizer_email "" -}} -
- Contact -
- {{- end -}} + {{- with $e.organizer_email -}} +
+ Contact +
{{- end -}} -
-{{- if $e.masthead_background -}} - {{- if ne $e.masthead_background "" -}} - - {{ else }} - - - {{- end -}} +{{- if and $e.masthead_background (ne $e.masthead_background "") -}} + {{- else -}} - - {{- end -}} -
-
+
+
- -
\ No newline at end of file +
diff --git a/themes/devopsdays-theme/layouts/partials/events/event_metadata.html b/themes/devopsdays-theme/layouts/partials/events/event_metadata.html index 86b26333368..fdca6d4c324 100644 --- a/themes/devopsdays-theme/layouts/partials/events/event_metadata.html +++ b/themes/devopsdays-theme/layouts/partials/events/event_metadata.html @@ -1,46 +1,39 @@ {{- $e := partial "functions/get-event-data" . -}} -{{- $.Scratch.Set "contentdir" (printf "static/events/%s/" $e.name) -}} +{{- $contentdir := printf "static/events/%s/" $e.name -}} +{{- $image_url := "/img/event-logo-square.jpg" -}} -{{- if (where (readDir "static/events") "Name" $e.name) -}} - - {{- if (where (readDir ($.Scratch.Get "contentdir")) "Name" "logo.jpg") -}} - {{- $.Scratch.Set "image_url" ((printf "/events/%s/logo.jpg" $e.name) ) -}} +{{- if where (os.ReadDir "static/events") "Name" $e.name -}} + {{- if where (os.ReadDir $contentdir) "Name" "logo.jpg" -}} + {{- $image_url = printf "/events/%s/logo.jpg" $e.name -}} {{- else -}} - {{- $.Scratch.Set "image_url" ((printf "/events/%s/logo.png" $e.name) ) -}} + {{- $image_url = printf "/events/%s/logo.png" $e.name -}} {{- end -}} - -{{- else -}} - {{- $.Scratch.Set "image_url" ("/img/event-logo-square.jpg" ) -}} {{- end -}} - - {{- if and $e.startdate $e.location_address -}} - diff --git a/themes/devopsdays-theme/layouts/partials/events/event_navbar.html b/themes/devopsdays-theme/layouts/partials/events/event_navbar.html index b884c3b38de..3a0e9f4e4c7 100644 --- a/themes/devopsdays-theme/layouts/partials/events/event_navbar.html +++ b/themes/devopsdays-theme/layouts/partials/events/event_navbar.html @@ -1,37 +1,32 @@ {{- $e := partial "functions/get-event-data" . -}} - diff --git a/themes/devopsdays-theme/layouts/partials/events/non-current-banner.html b/themes/devopsdays-theme/layouts/partials/events/non-current-banner.html index d884f681490..a5ec91bf9e6 100644 --- a/themes/devopsdays-theme/layouts/partials/events/non-current-banner.html +++ b/themes/devopsdays-theme/layouts/partials/events/non-current-banner.html @@ -1,4 +1,4 @@ -{{- /* +{{- /* Banner to display on non-current event pages, indicating this is not the current event and providing a link to the current event for that city. */ -}} @@ -6,10 +6,8 @@ {{- $e := partial "functions/get-event-data" . -}} {{- if and $e $e.city $e.name -}} - {{- /* Get the current event for this city - pass page context */ -}} {{- $currentEvent := partial "functions/get-current-event-for-city" . -}} - - {{- /* Extract year from current event being viewed */ -}} + {{- $currentViewYear := 0 -}} {{- if $e.year -}} {{- $currentViewYear = int $e.year -}} @@ -17,8 +15,7 @@ {{- $yearStr := index (split $e.name "-") 0 -}} {{- $currentViewYear = int $yearStr -}} {{- end -}} - - {{- /* Extract year from current event found */ -}} + {{- $currentEventYear := 0 -}} {{- if and $currentEvent $currentEvent.year -}} {{- $currentEventYear = int $currentEvent.year -}} @@ -26,15 +23,13 @@ {{- $yearStr := index (split $currentEvent.name "-") 0 -}} {{- $currentEventYear = int $yearStr -}} {{- end -}} - - {{- /* Only show banner if there is a current event, it's different, and the current view is older or not the latest year */ -}} + {{- if and $currentEvent (ne $currentEvent.name $e.name) (lt $currentViewYear $currentEventYear) -}} - {{- /* Determine if current event being viewed is past or just older */ -}} {{- $isPast := false -}} - {{- if and $e.enddate (time $e.enddate) -}} - {{- $isPast = lt (time $e.enddate) now -}} + {{- if $e.enddate -}} + {{- $isPast = lt (time.AsTime $e.enddate) now -}} {{- end -}} - +
{{- end -}} {{- end -}} - diff --git a/themes/devopsdays-theme/layouts/partials/footer.html b/themes/devopsdays-theme/layouts/partials/footer.html index 3708a31f3b0..b61f7162a98 100644 --- a/themes/devopsdays-theme/layouts/partials/footer.html +++ b/themes/devopsdays-theme/layouts/partials/footer.html @@ -1,69 +1,46 @@ - + diff --git a/themes/devopsdays-theme/layouts/partials/footer_scripts.html b/themes/devopsdays-theme/layouts/partials/footer_scripts.html index 246d1eee34a..be9f41fca55 100644 --- a/themes/devopsdays-theme/layouts/partials/footer_scripts.html +++ b/themes/devopsdays-theme/layouts/partials/footer_scripts.html @@ -1,71 +1,79 @@ +{{- $twitter_handle := "devopsdays" -}} +{{- $sharing_title := "devopsdays" -}} + {{- if .IsHome -}} - {{- $.Scratch.Set "twitter_handle" "devopsdays" -}} - {{- $.Scratch.Set "sharing_title" "devopsdays" -}} + {{- $twitter_handle = "devopsdays" -}} + {{- $sharing_title = "devopsdays" -}} {{- end -}} - {{- if .IsPage -}} - - {{ if eq (index (split (.Permalink | relURL) "/") 1) "events" }} + {{- $section := index (split (.Permalink | relURL) "/") 1 -}} + {{- if eq $section "events" -}} {{- $e := partial "functions/get-event-data" . -}} - {{- if $e.event_twitter -}} - {{- if ne $e.event_twitter "" -}} - {{- $.Scratch.Set "twitter_handle" $e.event_twitter -}} - {{- end -}} + {{- with $e.event_twitter -}} + {{- $twitter_handle = . -}} {{- end -}} - {{- if isset .Params "Title" -}} - {{- if ne .Params.Title "" -}} - {{- $.Scratch.Set "sharing_title" .Params.Title -}} - {{- end -}} + {{- with .Params.Title -}} + {{- $sharing_title = . -}} {{- else -}} - {{- $sharing_title := (printf "devopsdays %s - %s" $e.city $e.year) -}} - {{- $.Scratch.Set "sharing_title" $sharing_title -}} + {{- $sharing_title = printf "devopsdays %s - %s" $e.city $e.year -}} {{- end -}} - {{- /* Build social shares array based on event configuration or use defaults */ -}} {{- $shares := slice -}} {{- if $e.social_shares -}} {{- range $e.social_shares -}} {{- if eq . "twitter" -}} - {{- $shares = $shares | append (dict "share" "twitter" "via" ($.Scratch.Get "twitter_handle")) -}} + {{- $shares = $shares | append (dict "share" "twitter" "via" $twitter_handle) -}} {{- else -}} {{- $shares = $shares | append . -}} {{- end -}} {{- end -}} {{- else -}} - {{- /* Default: all social share buttons */ -}} - {{- $shares = slice "email" (dict "share" "twitter" "via" ($.Scratch.Get "twitter_handle")) "facebook" "linkedin" -}} + {{- $shares = slice "email" (dict "share" "twitter" "via" $twitter_handle) "facebook" "linkedin" -}} {{- end -}} - {{- $.Scratch.Set "social_shares" $shares -}} {{- else -}} - {{- $.Scratch.Set "twitter_handle" "devopsdays" -}} - {{- if isset .Params "Title" -}} - {{- if ne .Params.Title "" -}} - {{- $.Scratch.Set "sharing_title" .Params.Title -}} - {{- else -}} - {{- $.Scratch.Set "sharing_title" .Title -}} - {{- end -}} + {{- $twitter_handle = "devopsdays" -}} + {{- with .Params.Title -}} + {{- $sharing_title = . -}} {{- else -}} - {{- if eq .Type "blog" -}} - {{- $.Scratch.Set "sharing_title" .Title -}} + {{- if eq $.Type "blog" -}} + {{- $sharing_title = $.Title -}} {{- else -}} - {{- $.Scratch.Set "sharing_title" "devopsdays" -}} + {{- $sharing_title = "devopsdays" -}} {{- end -}} {{- end -}} - {{- /* Set default shares for non-event pages */ -}} - {{- $default_shares := slice "email" (dict "share" "twitter" "via" "devopsdays") "facebook" "linkedin" -}} - {{- $.Scratch.Set "social_shares" $default_shares -}} {{- end -}} {{- end -}} -{{- /* Ensure sharing_title is always set */ -}} -{{- if not ($.Scratch.Get "sharing_title") -}} - {{- $.Scratch.Set "sharing_title" "devopsdays" -}} + +{{- if not $sharing_title -}} + {{- $sharing_title = "devopsdays" -}} {{- end -}} -{{- /* Build shares array as JavaScript string before script tag */ -}} -{{- $shares := $.Scratch.Get "social_shares" -}} + +{{- /* Build the shares JS array */ -}} +{{- $shares := slice -}} +{{- if .IsPage -}} + {{- $section := index (split (.Permalink | relURL) "/") 1 -}} + {{- if eq $section "events" -}} + {{- $e := partial "functions/get-event-data" . -}} + {{- if $e.social_shares -}} + {{- range $e.social_shares -}} + {{- if eq . "twitter" -}} + {{- $shares = $shares | append (dict "share" "twitter" "via" $twitter_handle) -}} + {{- else -}} + {{- $shares = $shares | append . -}} + {{- end -}} + {{- end -}} + {{- else -}} + {{- $shares = slice "email" (dict "share" "twitter" "via" $twitter_handle) "facebook" "linkedin" -}} + {{- end -}} + {{- else -}} + {{- $shares = slice "email" (dict "share" "twitter" "via" "devopsdays") "facebook" "linkedin" -}} + {{- end -}} +{{- end -}} + {{- if or (not $shares) (eq (len $shares) 0) -}} - {{- /* Default for non-event pages */ -}} - {{- $shares = slice "email" (dict "share" "twitter" "via" ($.Scratch.Get "twitter_handle")) "facebook" "linkedin" -}} + {{- $shares = slice "email" (dict "share" "twitter" "via" $twitter_handle) "facebook" "linkedin" -}} {{- end -}} + {{- $shares_js_parts := slice -}} {{- range $shares -}} {{- $share_str := "" -}} @@ -79,27 +87,30 @@ {{- else -}} {{- $twitter_share_val := index $current_item "share" -}} {{- if $twitter_share_val -}} - {{- $share_str = printf "{share: \"%s\", via: '%s'}" $twitter_share_val ($.Scratch.Get "twitter_handle") -}} + {{- $share_str = printf "{share: \"%s\", via: '%s'}" $twitter_share_val $twitter_handle -}} {{- end -}} {{- end -}} {{- if $share_str -}} {{- $shares_js_parts = $shares_js_parts | append $share_str -}} {{- end -}} {{- end -}} + {{- $shares_js_str := delimit $shares_js_parts ", " -}} {{- if not $shares_js_str -}} {{- $shares_js_str = "\"email\", {share: \"twitter\", via: 'devopsdays'}, \"facebook\", \"linkedin\"" -}} {{- end -}} -{{- $sharing_title_final := $.Scratch.Get "sharing_title" -}} -{{- if not $sharing_title_final -}} - {{- $sharing_title_final = "devopsdays" -}} + +{{- if not $sharing_title -}} + {{- $sharing_title = "devopsdays" -}} {{- end -}} -{{- $full_script := printf "$(document).ready(function () {\n //YOUR JQUERY CODE\n\n $(\"#share\").jsSocials({\n shares: [%s],\n text: '%s',\n showLabel: false,\n showCount: false\n });\n});" $shares_js_str $sharing_title_final -}} diff --git a/themes/devopsdays-theme/layouts/partials/functions/get-all-events.html b/themes/devopsdays-theme/layouts/partials/functions/get-all-events.html index 897a076ad1f..8df6047459c 100644 --- a/themes/devopsdays-theme/layouts/partials/functions/get-all-events.html +++ b/themes/devopsdays-theme/layouts/partials/functions/get-all-events.html @@ -1,5 +1,5 @@ {{ $events := slice }} -{{- range $k, $v := $.Site.Data.events -}} +{{- range $k, $v := site.Data.events -}} {{- range $ck, $cv := . -}} {{- range $ck2, $cv2 := . -}} {{ if eq $ck2 "main" }} @@ -12,4 +12,4 @@ {{- end -}} {{- end -}} {{- end -}} -{{ return $events }} \ No newline at end of file +{{ return $events }} diff --git a/themes/devopsdays-theme/layouts/partials/functions/get-current-event-for-city.html b/themes/devopsdays-theme/layouts/partials/functions/get-current-event-for-city.html index 6e7bf4ff714..1847eff36f6 100644 --- a/themes/devopsdays-theme/layouts/partials/functions/get-current-event-for-city.html +++ b/themes/devopsdays-theme/layouts/partials/functions/get-current-event-for-city.html @@ -1,8 +1,7 @@ {{- /* - This function determines the "current" event for a given city/event_group. + Determines the "current" event for a given city/event_group. Input: Page context (.) - the function will get the current event data from the page. - Returns: The event object for the current/most recent event, or empty dict if none found. Logic: @@ -15,58 +14,45 @@ {{- $e := partial "functions/get-event-data" . -}} {{- if and $e $e.city -}} - {{- /* Determine matching criteria: use event_group if available, otherwise city */ -}} {{- $matchTitle := $e.city -}} {{- if $e.event_group -}} {{- $matchTitle = $e.event_group -}} {{- end -}} - {{- /* Get all events with dates */ -}} {{- $allEvents := partial "functions/get-all-events" . -}} - - {{- /* Get all events without dates (TBD) */ -}} {{- $tbdEvents := partial "functions/get-tbd-events" . -}} - {{- /* Combine both sets */ -}} {{- $allEventsIncludingTBD := $allEvents -}} {{- range $tbdEvents -}} {{- $allEventsIncludingTBD = $allEventsIncludingTBD | append . -}} {{- end -}} - {{- /* Filter events matching this city/event_group, excluding the current event */ -}} {{- $futureEvents := slice -}} {{- $eventsWithoutDates := slice -}} {{- $pastEvents := slice -}} {{- range $allEventsIncludingTBD -}} - {{- /* Skip if this is the event we're checking */ -}} {{- if and $e.name (ne .name $e.name) -}} - {{- /* Check if event matches city or event_group (case-insensitive) */ -}} {{- $eventMatchTitle := .city -}} {{- if .event_group -}} {{- $eventMatchTitle = .event_group -}} {{- end -}} {{- if or (eq (lower .city) (lower $matchTitle)) (eq (lower $eventMatchTitle) (lower $matchTitle)) -}} - {{- /* Event matches this city/event_group */ -}} {{- if and .startdate .enddate -}} - {{- /* Separate into future and past events based on enddate */ -}} - {{- if gt (time .enddate) now -}} + {{- if gt (time.AsTime .enddate) now -}} {{- $futureEvents = $futureEvents | append . -}} {{- else -}} {{- $pastEvents = $pastEvents | append . -}} {{- end -}} {{- else -}} - {{- /* Event without dates - store separately */ -}} {{- $eventsWithoutDates = $eventsWithoutDates | append . -}} {{- end -}} {{- end -}} {{- end -}} {{- end -}} - {{- /* Determine current event with priority: latest year (future dates or TBD) > past */ -}} {{- $candidateEvent := dict -}} - {{- /* Get the year of the event being viewed */ -}} {{- $viewingYear := 0 -}} {{- if $e.year -}} {{- $viewingYear = int $e.year -}} @@ -75,7 +61,6 @@ {{- $viewingYear = int $yearStr -}} {{- end -}} - {{- /* Find the latest year among all OTHER events (excluding the one being viewed) */ -}} {{- $latestYear := 0 -}} {{- range $futureEvents -}} {{- $eventYear := 0 -}} @@ -98,13 +83,10 @@ {{- end -}} {{- end -}} - {{- /* Only return a current event if another event has a newer year than what we're viewing */ -}} {{- if and (gt $latestYear 0) (gt $latestYear $viewingYear) -}} - {{- /* Find the event from the latest year - prefer future with dates, then TBD */ -}} {{- $futureFromLatestYear := dict -}} {{- $tbdFromLatestYear := dict -}} - {{- /* Look for future events with dates from the latest year */ -}} {{- range $futureEvents -}} {{- $eventYear := 0 -}} {{- if .year -}} @@ -117,7 +99,6 @@ {{- end -}} {{- end -}} - {{- /* Look for TBD events from the latest year */ -}} {{- range $eventsWithoutDates -}} {{- $eventYear := 0 -}} {{- if .name -}} @@ -129,14 +110,12 @@ {{- end -}} {{- end -}} - {{- /* Prefer future event with dates, fallback to TBD */ -}} {{- if $futureFromLatestYear -}} {{- $candidateEvent = $futureFromLatestYear -}} {{- else if $tbdFromLatestYear -}} {{- $candidateEvent = $tbdFromLatestYear -}} {{- end -}} {{- else if eq $latestYear 0 -}} - {{- /* No future/TBD events found, check past events only if viewing year is not newer */ -}} {{- if gt (len $pastEvents) 0 -}} {{- $latestPastYear := 0 -}} {{- $latestPastEvent := dict -}} @@ -150,7 +129,6 @@ {{- $latestPastEvent = . -}} {{- end -}} {{- end -}} - {{- /* Only use past event if its year is newer than viewing year */ -}} {{- if and $latestPastEvent (gt $latestPastYear $viewingYear) -}} {{- $candidateEvent = $latestPastEvent -}} {{- end -}} @@ -161,4 +139,3 @@ {{- end -}} {{- return $currentEvent -}} - diff --git a/themes/devopsdays-theme/layouts/partials/functions/get-event-data.html b/themes/devopsdays-theme/layouts/partials/functions/get-event-data.html index a760660b22c..ca8dc6880b4 100644 --- a/themes/devopsdays-theme/layouts/partials/functions/get-event-data.html +++ b/themes/devopsdays-theme/layouts/partials/functions/get-event-data.html @@ -1,7 +1,5 @@ - {{- $slug := (index (split ($.Page.Permalink | relURL) "/") 2) -}} {{- if not $slug -}} - {{- /* Fallback: try to get slug from file path */ -}} {{- $pathParts := split $.Page.File.Dir "/" -}} {{- $slug = index $pathParts 1 -}} {{- end -}} @@ -9,11 +7,11 @@ {{- if $slug -}} {{- $year := (index (split $slug "-" ) 0) -}} {{- $city := substr $slug 5 -}} - {{- $e = index $.Site.Data.events $year $city "main" -}} + {{- $e = index site.Data.events $year $city "main" -}} {{- if $e -}} - {{- $p := index $.Site.Data.events $year $city "program" -}} - {{- $s := index $.Site.Data.events $year $city "sponsors" -}} - {{- $o := index $.Site.Data.events $year $city "organizers" -}} + {{- $p := index site.Data.events $year $city "program" -}} + {{- $s := index site.Data.events $year $city "sponsors" -}} + {{- $o := index site.Data.events $year $city "organizers" -}} {{- if fileExists (printf "/data/events/%s/%s/program.yml" $year $city) -}} {{- $e = merge $p $e -}} {{- end -}} @@ -25,4 +23,4 @@ {{- end -}} {{- end -}} {{- end -}} -{{- return $e -}} \ No newline at end of file +{{- return $e -}} diff --git a/themes/devopsdays-theme/layouts/partials/functions/get-tbd-events.html b/themes/devopsdays-theme/layouts/partials/functions/get-tbd-events.html index 59c48c1002e..a866982d916 100644 --- a/themes/devopsdays-theme/layouts/partials/functions/get-tbd-events.html +++ b/themes/devopsdays-theme/layouts/partials/functions/get-tbd-events.html @@ -1,5 +1,5 @@ {{ $upcoming := slice }} -{{- range $k, $v := $.Site.Data.events -}} +{{- range $k, $v := site.Data.events -}} {{- range $ck, $cv := . -}} {{- range $ck2, $cv2 := . -}} {{ if eq $ck2 "main" }} @@ -12,4 +12,4 @@ {{- end -}} {{- end -}} {{- end -}} -{{ return $upcoming }} \ No newline at end of file +{{ return $upcoming }} diff --git a/themes/devopsdays-theme/layouts/partials/functions/get-upcoming-events.html b/themes/devopsdays-theme/layouts/partials/functions/get-upcoming-events.html index b4ad125d157..9d0445d16a9 100644 --- a/themes/devopsdays-theme/layouts/partials/functions/get-upcoming-events.html +++ b/themes/devopsdays-theme/layouts/partials/functions/get-upcoming-events.html @@ -1,11 +1,11 @@ {{ $upcoming := slice }} -{{- range $k, $v := $.Site.Data.events -}} +{{- range $k, $v := site.Data.events -}} {{- range $ck, $cv := . -}} {{- range $ck2, $cv2 := . -}} {{ if eq $ck2 "main" }} {{- if .startdate -}} {{- if ne .cancel "true" -}} - {{- if gt (time .enddate) now -}} + {{- if gt (time.AsTime .enddate) now -}} {{ $upcoming = append . $upcoming }} {{- end -}} {{- end -}} @@ -14,4 +14,4 @@ {{- end -}} {{- end -}} {{- end -}} -{{ return $upcoming }} \ No newline at end of file +{{ return $upcoming }} diff --git a/themes/devopsdays-theme/layouts/partials/future.html b/themes/devopsdays-theme/layouts/partials/future.html index 2171823f82d..d4a04d9964e 100644 --- a/themes/devopsdays-theme/layouts/partials/future.html +++ b/themes/devopsdays-theme/layouts/partials/future.html @@ -1,47 +1,40 @@ -{{ $upcoming := slice }} -{{ $tbd := slice }} +{{- $upcoming := partial "functions/get-upcoming-events" . -}} +{{- $tbd := partial "functions/get-tbd-events" . -}} -{{- $upcoming = partial "functions/get-upcoming-events" . -}} -{{- $tbd = partial "functions/get-tbd-events" . -}} +{{- $currentYear := "" -}} +{{- $currentMonth := "" -}} {{- range sort $upcoming "startdate" -}} - {{- if ne ($.Scratch.Get "year") (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year" (dateFormat "2006" .startdate) -}} - {{- $.Scratch.Set "year-displayed" "false" -}} + {{- $year := time.Format "2006" .startdate -}} + {{- $month := time.Format "January" .startdate -}} + {{- if ne $currentYear $year -}} + {{- $currentYear = $year -}} +

{{ $year }}

+ {{- $currentMonth = "" -}} {{- end -}} - {{- if ne ($.Scratch.Get "month") (dateFormat "January" .startdate ) -}} - {{- $.Scratch.Set "month" (dateFormat "January" .startdate ) -}} - {{- $.Scratch.Set "month-displayed" "false" -}} - - {{- end -}} - {{- if ne ($.Scratch.Get "year-displayed") "true" -}} -

{{ dateFormat "2006" .startdate }}

- {{- $.Scratch.Set "year-displayed" "true" -}} - {{- end -}} - {{- if ne ($.Scratch.Get "month-displayed") "true" -}} -

{{ dateFormat "January" .startdate }}

- {{- $.Scratch.Set "month-displayed" "true" -}} + {{- if ne $currentMonth $month -}} + {{- $currentMonth = $month -}} +

{{ $month }}

{{- end -}} - {{- if or (ne (time .startdate).Month (time .enddate).Month) (ne (time .startdate).Day (time .enddate).Day) -}} - {{- if eq (time .startdate).Month (time .enddate).Month -}} - - {{ dateFormat "Jan 2" .startdate }} - {{ dateFormat "2" .enddate }}: - {{ .city }} + {{- $start := time.AsTime .startdate -}} + {{- $end := time.AsTime .enddate -}} + {{- if or (ne $start.Month $end.Month) (ne $start.Day $end.Day) -}} + {{- if eq $start.Month $end.Month -}} + + {{ time.Format "Jan 2" .startdate }} - {{ time.Format "2" .enddate }}: {{ .city }} {{- else -}} - - {{ dateFormat "Jan 2" .startdate }} - {{ dateFormat "Jan 2" .enddate }}: - {{ .city }} + + {{ time.Format "Jan 2" .startdate }} - {{ time.Format "Jan 2" .enddate }}: {{ .city }} {{- end -}} {{- else -}} - - {{ dateFormat "Jan 2" .startdate }}: - {{ .city }} + + {{ time.Format "Jan 2" .startdate }}: {{ .city }} {{- end -}} {{- end -}}

TBD

{{- range sort $tbd "city" -}} - {{ .city }} + {{ .city }} {{- end -}} diff --git a/themes/devopsdays-theme/layouts/partials/global_navbar.html b/themes/devopsdays-theme/layouts/partials/global_navbar.html index 65ccad44611..d703122f054 100644 --- a/themes/devopsdays-theme/layouts/partials/global_navbar.html +++ b/themes/devopsdays-theme/layouts/partials/global_navbar.html @@ -1,17 +1,18 @@ -