Initial commit

This commit is contained in:
2022-09-04 19:06:04 +02:00
commit 3f1e07e2fc
29 changed files with 1483 additions and 0 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use nix

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
.cabal-sandbox
cabal.sandbox.config
dist/
_cache
public
.cabal-sandbox
.stack-work
thumb/
thumbs.db

2
.htaccess Normal file
View File

@@ -0,0 +1,2 @@
RewriteEngine on
RewriteRule ^$ /cs [R=302]

10
default.nix Normal file
View File

@@ -0,0 +1,10 @@
(import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
) {
src = ./.;
}).defaultNix

128
flake.lock generated Normal file
View File

@@ -0,0 +1,128 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"hakyll-contrib-tojnar": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs",
"utils": "utils"
},
"locked": {
"lastModified": 1650900302,
"narHash": "sha256-QlFO0Q2m/wMlMbMDiV+ggVIqyNQ+b/eVGqQhb9VxaKc=",
"owner": "tojnar.cz",
"repo": "hakyll-contrib-tojnar",
"rev": "5e0e94b9df6d36776e1bbd1ed5a01f7efb8cacf5",
"type": "gitlab"
},
"original": {
"owner": "tojnar.cz",
"repo": "hakyll-contrib-tojnar",
"type": "gitlab"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1650792148,
"narHash": "sha256-n1MZSZIzvP70BJ56tV8GwQ5L0wHt/nTH9UkF5HTGB/4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ab83c5d70528f1edc7080dead3a5dee61797b3ff",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1662096612,
"narHash": "sha256-R+Q8l5JuyJryRPdiIaYpO5O3A55rT+/pItBrKcy7LM4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "21de2b973f9fee595a7a1ac4693efff791245c34",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-compat": "flake-compat",
"hakyll-contrib-tojnar": "hakyll-contrib-tojnar",
"nixpkgs": "nixpkgs_2",
"utils": "utils_2"
}
},
"utils": {
"locked": {
"lastModified": 1649676176,
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

58
flake.nix Normal file
View File

@@ -0,0 +1,58 @@
{
description = "HROB 2022 Website";
inputs = {
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
hakyll-contrib-tojnar.url = "gitlab:tojnar.cz/hakyll-contrib-tojnar";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs = { self, flake-compat, hakyll-contrib-tojnar, nixpkgs, utils }:
utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
haskellPackages = pkgs.haskellPackages.override {
overrides = final: prev: {
hrob2022-krk-litvinov-cz = final.callPackage ./hrob2022-krk-litvinov-cz.nix { };
} // hakyll-contrib-tojnar.haskellOverlay final prev;
};
in {
devShells = {
default = pkgs.mkShell {
buildInputs = [
self.packages.${system}.default
];
};
haskell = self.packages.${system}.hrob2022-krk-litvinov-cz.env.overrideAttrs (attrs: {
nativeBuildInputs = attrs.nativeBuildInputs ++ [
pkgs.cabal-install
];
});
};
packages = rec {
hrob2022-krk-litvinov-cz = haskellPackages.hrob2022-krk-litvinov-cz;
default = hrob2022-krk-litvinov-cz;
};
apps = rec {
hrob2022-krk-litvinov-cz = utils.lib.mkApp {
drv = self.packages.${system}.hrob2022-krk-litvinov-cz;
};
default = hrob2022-krk-litvinov-cz;
};
}
);
}

View File

@@ -0,0 +1,17 @@
name: hrob2022-krk-litvinov-cz
version: 0.0.1
build-type: Simple
cabal-version: >= 1.10
executable site
main-is: site.hs
hs-source-dirs: src
build-depends:
base >= 4.8 && < 5,
containers >= 0.5 && < 0.7,
hakyll >= 4.9 && < 4.16,
hakyll-contrib-tojnar >= 0.0.1 && < 0.2.0,
filepath >= 1.4 && < 1.5,
pandoc >= 2.0 && < 2.18
ghc-options: -threaded -Wall -fno-warn-tabs
default-language: Haskell2010

View File

@@ -0,0 +1,31 @@
{ mkDerivation
, base
, containers
, filepath
, hakyll
, hakyll-contrib-tojnar
, pandoc
, lib
}:
mkDerivation {
pname = "hrob2022-krk-litvinov-cz";
version = "0.0.1";
# Keep the contents of the src/ directory and top-level .cabal file.
src = lib.sourceByRegex ./. [ "^src(/.+|$)" "[^/]+\.cabal$" ];
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
base
containers
filepath
hakyll
hakyll-contrib-tojnar
pandoc
];
license = lib.licenses.mit;
}

29
images/icon.svg Normal file
View File

@@ -0,0 +1,29 @@
<svg width="100" height="100" version="1.0" viewBox="0 0 1050 952" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1.0608 0 0 1.097 -22.697 -96.476)">
<circle transform="matrix(-1.0002 -.51969 .53746 -.96726 563.21 1187.4)" cx="323.32" cy="514.41" r="433.77" fill="#fff" stroke="#000" stroke-width="4.1475"/>
<path transform="matrix(1.134 .056927 .058868 -1.0966 119.37 1067.5)" d="m-84.833 367.58a433.77 433.77 0 0 1 338.9 -281.36 433.77 433.77 0 0 1 410.31 160.19l-341.06 268.01z"/>
<path d="m523.41 488.52c2.7191-12.97 3.5211-26.387 5.4456-39.603 1.855-11.097 1.7388-22.558 1.8631-33.864 0.40311-41.258 0.14557-82.313 0.67277-123.56-0.54249-10.498 0.736-21.083-0.30288-31.606-1.9313-14.661-3.2767-29.439-5.3321-44.106-1.4194-10.625-11.224-42.324-11.505-43.239-3.8155 12.801-6.0902 27.079-9.6641 40.013-2.1995 8.311-2.8969 15.678-4.4759 24.021-0.75658 9.2277-2.8851 18.227-3.1452 27.48-0.10735 38.144-0.10209 76.361-0.58172 114.49 0.37341 20.358-0.59118 40.718-0.10028 61.202 1.4164 12.709 3.2032 34.631 3.875 47.302z"/>
<path d="m533.8 528.01c-9.1252-16.764-20.152-32.907-30.118-49.486-8.1793-14.062-17.601-28.411-27.328-41.685-35.535-48.411-72.046-95.155-107.48-143.63-9.5509-11.933-17.74-25.054-27.705-36.721-14.265-15.966-28.168-32.417-42.536-48.317-10.353-11.559-22.434-17.415-31.999-25.131 5.3953 17.516 0.71246 9.3777 12.49 33.988 5.31 11.096 11.338 20.032 17.342 30.715 7.4219 11.225 13.563 23.001 21.398 33.96 33.063 44.599 66.278 89.217 99.03 134.02 17.986 23.546 34.918 47.893 53.106 71.516 12.162 13.994 32.623 38.524 44.164 52.917z"/>
<circle transform="matrix(1.4602 0 0 1.4121 -252.77 -206.45)" cx="523.4" cy="516.02" r="32.012"/>
<path d="m318.34 622.95c8.8235-3.4851 18.393-4.3263 27.837-5.4079-5.5923 5.7684-12.303 10.455-17.523 16.464-15.783 16.344-26.967 37.134-30.447 59.367-0.24855 4.5667-0.99419 9.0132-1.6156 13.58-0.24855 7.2105 0.37282 14.421 1.6156 21.511 2.1126 8.2921 3.4797 16.704 7.4564 24.396 4.971 12.739 13.422 24.035 23.115 33.89 8.8234 8.6526 18.02 16.945 25.725 26.559-27.837 1.2018-55.55-10.335-75.31-28.962-6.7108-7.6912-13.546-15.503-18.02-24.636-7.5807-15.262-11.682-32.327-10.315-49.272 1.4913-16.704 6.338-33.409 16.031-47.469 11.806-18.507 30.696-32.207 51.449-40.018z" fill="#fff" stroke="#fff" stroke-width=".11457"/>
<g transform="matrix(.71486 0 0 .69129 943.95 289.98)" fill="#fff">
<path transform="matrix(.16185 -.12192 .12192 .16185 -649.84 462.91)" d="m-377.09 515.15-81.523 67.773 34.048 92.36-89.648-56.59-77.318 60.922 26.118-102.75-81.833-54.708 105.79-6.9111 26.743-94.733 39.264 98.476z"/>
<path transform="matrix(.10084 -.10889 .10889 .10084 -444.46 488.07)" d="m-377.09 515.15-81.523 67.773 34.048 92.36-89.648-56.59-77.318 60.922 26.118-102.75-81.833-54.708 105.79-6.9111 26.743-94.733 39.264 98.476z"/>
<path transform="matrix(.19515 -.054574 .054574 .19515 -484.52 679.67)" d="m-377.09 515.15-81.523 67.773 34.048 92.36-89.648-56.59-77.318 60.922 26.118-102.75-81.833-54.708 105.79-6.9111 26.743-94.733 39.264 98.476z"/>
<path transform="matrix(.19515 -.054574 .054574 .19515 -463.37 355.53)" d="m-377.09 515.15-81.523 67.773 34.048 92.36-89.648-56.59-77.318 60.922 26.118-102.75-81.833-54.708 105.79-6.9111 26.743-94.733 39.264 98.476z"/>
<path transform="matrix(.068647 -.074128 .074128 .068647 -501.14 604.3)" d="m-377.09 515.15-81.523 67.773 34.048 92.36-89.648-56.59-77.318 60.922 26.118-102.75-81.833-54.708 105.79-6.9111 26.743-94.733 39.264 98.476z"/>
</g>
<path d="m514.67 918.3v81.098" fill="none" stroke="#fff" stroke-width="3.2079"/>
<path d="m926.93 523.94h81.147" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m883.7 690.27 77.678 35.426" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m683.71 146.62 31.39-59.175" fill="none" stroke="#000" stroke-width="3.3517"/>
<path d="m514.67 47.3v64.121" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m22.899 523.94 71.16 0.46196" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m260.3 930.39 35.069-70.582" fill="none" stroke="#fff" stroke-width="3.2079"/>
<path d="m133 344.23-59.189-27.65" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m929.84 264.81-64.288 38.316" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m268.79 185.94-37.484-52.139" fill="none" stroke="#000" stroke-width="3.2079"/>
<path d="m96.266 763.71 62.849-37.013" fill="none" stroke="#fff" stroke-width="3.2079"/>
<path d="m745.52 844.81 48.767 67.042" fill="none" stroke="#fff" stroke-width="3.2079"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

20
pages/cs/@menu.md Normal file
View File

@@ -0,0 +1,20 @@
[![ČAR](/images/car.gif)](http://www.rogaining.cz/)[![ČAES](/images/caes-cerna.gif)](http://www.caes.cz/)
[![English website](/images/enflag.png)](/en/)
#### Menu
* [Novinky](/cs/)
#### Další závody ČAR
* [6. Sudetské Tojnárkovo Bloudění (25.-27. 9. 2020)](https://bloudeni.krk-litvinov.cz/2020/cs/)
* [19. Letní Kraktrek (3.-4. 10. 2020)](http://kraktrek.maweb.eu/)
* [Noční můry (16.-17. 10. 2020)](http://mury.play-map.com/)
* 23. Brutus Extreme Orienteering (březen 2021)
#### Partneři závodu
[![Playmap - zákresy postupů](/images/playmap.png)](http://play-map.com/)

4
pages/cs/index.md Normal file
View File

@@ -0,0 +1,4 @@
---
title: Novinky
author: Jan Tojnar
---

11
pages/en/@menu.md Normal file
View File

@@ -0,0 +1,11 @@
[![ČAR](/images/car.gif)](http://www.rogaining.cz/)[![ČAES](/images/caes-cerna.gif)](http://www.caes.cz/)
[![Český web](/images/csflag.png)](/cs/)
#### Menu
* [News](/en/)
#### Event partners
[![Playmap - route drawing](/images/playmap.png)](http://play-map.com/)

4
pages/en/index.md Normal file
View File

@@ -0,0 +1,4 @@
---
title: News
author: Jan Tojnar
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
pages/images/caes-cerna.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
pages/images/car.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
pages/images/csflag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

BIN
pages/images/enflag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
pages/images/playmap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

14
readme.md Normal file
View File

@@ -0,0 +1,14 @@
## Requirements
* [git](http://git-scm.com/downloads)
* [nix](https://nixos.org)
* [direnv](https://direnv.net/) (optional)
## Setting up
Run `nix-shell` to enter a shell containing `site` program for controlling the website. If you have `direnv` installed, you can instead run `direnv allow` and it will prepare the correct shell environment automatically, every time you enter the directory.
## Changing content
The website is generated by the `site` program based on the files in `pages/` directory and other directories in this tree. You can trigger the generation a single time by running `site build` or start a program that will regenerate the website on any change by running `site watch`.
The resulting website will be placed in the `public/` directory from which it can be uploaded to the server, either manually or by calling `site deploy`.
You can also run `site check` to check the website for broken links, and `site rebuild` when something breaks in such a way that `site build` does not notice some changes.

12
scripts/jquery.fancybox.min.js vendored Normal file

File diff suppressed because one or more lines are too long

4
scripts/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

14
scripts/main.js Normal file
View File

@@ -0,0 +1,14 @@
$(document).ready(function() {
$("[data-lightbox]").fancybox({
loop: false,
caption: function(instance, item) {
var caption = $(this).find('img').attr('alt') || '';
if (item.type === 'image') {
caption = (caption.length ? caption + '<br />' : '') + '<a href="' + item.src + '">Stáhnout obrázek</a>' ;
}
return caption;
}
});
});

10
shell.nix Normal file
View File

@@ -0,0 +1,10 @@
(import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
) {
src = ./.;
}).shellNix

78
src/site.hs Normal file
View File

@@ -0,0 +1,78 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE OverloadedLists #-}
import Data.Function ((&))
import qualified GHC.IO.Encoding as E
import Hakyll
import Hakyll.Contrib.Tojnar.Gallery (figureGroups, implicitFigures)
import Hakyll.Contrib.Tojnar.Menu (menuField)
import Hakyll.Contrib.Tojnar.Thumbnail (makeThumbnails)
import Text.Pandoc.Extensions (Extension (..), disableExtension)
import Text.Pandoc.Options (readerExtensions)
config :: Configuration
config = defaultConfiguration {
deployCommand = "rsync --checksum -av '--groupmap=\\*:krk' public/* tojnar@ogion.cz:/var/www/krk-litvinov.cz/hrob-2022/",
destinationDirectory = "public",
previewHost = "0.0.0.0"
}
main :: IO ()
main = do
E.setLocaleEncoding E.utf8
hakyllWith config $ do
match "styles/*" $ do
route idRoute
compile compressCssCompiler
match ("scripts/*" .||. "images/*") $ do
route idRoute
compile copyFileCompiler
match (fromRegex "^pages/(.+/)?@menu\\.md$") $ do
compile markdownCompiler
match (fromRegex "^pages/(.+/)?[^@/][^/]+\\.md$") $ do
route $ stripPages `composeRoutes` setExtension "html"
let ctx = activeClassField <> langField <> menuField <> defaultContext
compile $ markdownCompiler
>>= loadAndApplyTemplate "templates/layout.html" ctx
match (fromRegex "^pages/" .&&. complement (fromRegex "\\.md$")) $ do
route $ stripPages `composeRoutes` idRoute
compile copyFileCompiler
match "templates/*" $ compile templateCompiler
version "redirects" $ createRedirects brokenLinks
activeClassField :: Context String
activeClassField = functionField "activeClass" $ \[p] _ -> do
path <- toFilePath <$> getUnderlying
return $ if path == p then "active" else ""
langField :: Context String
langField = field "lang" $ \_ -> do
path <- toFilePath <$> getUnderlying
return $ takeWhile (/= '/') path
stripPages :: Routes
stripPages = gsubRoute "pages/" (const "")
markdownCompiler :: Compiler (Item String)
markdownCompiler = pandocCompilerWithTransformM readOpts writeOpts filters
where
enabledReaderExtensions =
readerExtensions defaultHakyllReaderOptions
& disableExtension Ext_markdown_in_html_blocks
& disableExtension Ext_implicit_figures
readOpts = defaultHakyllReaderOptions { readerExtensions = enabledReaderExtensions }
writeOpts = defaultHakyllWriterOptions
filters = makeThumbnails . implicitFigures . figureGroups
brokenLinks :: [(Identifier, String)]
brokenLinks = [
-- Root redirects
("index.html", "/cs/")
]

7
styles/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

222
styles/default.css Normal file
View File

@@ -0,0 +1,222 @@
/*
* Globals
*/
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #555;
background: #eeeeec;
}
h1, .h1,
h2, .h2,
h3, .h3,
h4, .h4,
h5, .h5,
h6, .h6 {
margin-top: 0;
font-weight: bold;
color: #333;
}
ul + h4 {
margin-top: 1.5em;
}
td {
vertical-align: top;
padding: .75em;
}
td:first-child {
text-align: right;
}
/*
* Override Bootstrap's default container.
*/
@media (min-width: 1200px) {
.container {
width: 970px;
background: white;
margin-top: 2em;
}
}
/* Nav links */
.blog-nav-item {
position: relative;
display: inline-block;
padding: 10px;
font-weight: 500;
color: #cdddeb;
}
.blog-nav-item:hover,
.blog-nav-item:focus {
color: #fff;
text-decoration: none;
}
.embed-responsive {
margin-bottom: 1em;
}
/* Active state gets a caret at the bottom */
.blog-nav .active {
color: #fff;
}
.blog-nav .active:after {
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 0;
margin-left: -5px;
vertical-align: middle;
content: " ";
border-right: 5px solid transparent;
border-bottom: 5px solid;
border-left: 5px solid transparent;
}
/*
* Blog name and description
*/
.main {
margin-right: auto;
margin-left: auto;
padding: 15px;
background-color: #fff;
}
header a {
display: block;
position: relative;
padding-top: 25%;
background-color: #000000;
background-image: url(/images/header.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
margin-bottom: 1em;
}
.header-wrapper {
position: absolute;
bottom: 1rem;
left: 1.5rem;
}
.blog-title {
display: inline-block;
color: white;
text-shadow: 1px 1px 3px black;
margin-bottom: 0;
font-size: 60px;
font-weight: normal;
}
.blog-description {
display: inline-block;
margin-bottom: 0;
font-size: 20px;
color: #eee;
margin-left: 1rem;
text-shadow: 1px 1px 2px black;
}
/*
* Main column and sidebar layout
*/
.blog-main, .blog-masthead, .blog-sidebar {
font-size: 18px;
line-height: 1.5;
}
/* Sidebar modules for boxing content */
.sidebar-module {
padding: 15px;
margin: 0 -15px 15px;
}
.sidebar-module-inset {
padding: 15px;
background-color: #f5f5f5;
border-radius: 4px;
}
.sidebar-module-inset p:last-child,
.sidebar-module-inset ul:last-child,
.sidebar-module-inset ol:last-child {
margin-bottom: 0;
}
/* Pagination */
.pager {
margin-bottom: 60px;
text-align: left;
}
.pager > li > a {
width: 140px;
padding: 10px 20px;
text-align: center;
border-radius: 30px;
}
/*
* Blog posts
*/
.blog-post {
margin-bottom: 60px;
}
.blog-post-title {
margin-bottom: 5px;
font-size: 40px;
}
.blog-post-meta {
margin-bottom: 20px;
color: #999;
}
/*
* Footer
*/
.blog-footer {
padding: 40px 0;
color: #999;
text-align: center;
background-color: #f9f9f9;
border-top: 1px solid #e5e5e5;
}
.blog-footer p:last-child {
margin-bottom: 0;
}
.figuregroup {
margin: 1em auto;
}
.figuregroup > figure {
display: inline-block;
}
.card-sm {
display: inline-block;
width: 300px;
vertical-align: top;
}
.card-sm img {
margin: auto;
display: block;
}
img {
max-width: 100%;
}

748
styles/jquery.fancybox.css vendored Normal file
View File

@@ -0,0 +1,748 @@
@charset "UTF-8";
.fancybox-enabled {
overflow: hidden; }
.fancybox-enabled body {
overflow: visible;
height: 100%; }
.fancybox-is-hidden {
position: absolute;
top: -9999px;
left: -9999px;
visibility: hidden; }
.fancybox-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 99993;
-webkit-tap-highlight-color: transparent;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateZ(0);
transform: translateZ(0); }
/* Make sure that the first one is on the top */
.fancybox-container ~ .fancybox-container {
z-index: 99992; }
.fancybox-outer,
.fancybox-inner,
.fancybox-bg,
.fancybox-stage {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0; }
.fancybox-outer {
overflow-y: auto;
-webkit-overflow-scrolling: touch; }
.fancybox-bg {
background: #1e1e1e;
opacity: 0;
transition-duration: inherit;
transition-property: opacity;
transition-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71); }
.fancybox-is-open .fancybox-bg {
opacity: 0.87;
transition-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1); }
.fancybox-infobar,
.fancybox-toolbar,
.fancybox-caption-wrap {
position: absolute;
direction: ltr;
z-index: 99997;
opacity: 0;
visibility: hidden;
transition: opacity .25s, visibility 0s linear .25s;
box-sizing: border-box; }
.fancybox-show-infobar .fancybox-infobar,
.fancybox-show-toolbar .fancybox-toolbar,
.fancybox-show-caption .fancybox-caption-wrap {
opacity: 1;
visibility: visible;
transition: opacity .25s, visibility 0s; }
.fancybox-infobar {
top: 0;
left: 50%;
margin-left: -79px; }
.fancybox-infobar__body {
display: inline-block;
width: 70px;
line-height: 44px;
font-size: 13px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
text-align: center;
color: #ddd;
background-color: rgba(30, 30, 30, 0.7);
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-webkit-tap-highlight-color: transparent;
-webkit-font-smoothing: subpixel-antialiased; }
.fancybox-toolbar {
top: 0;
right: 0; }
.fancybox-stage {
overflow: hidden;
direction: ltr;
z-index: 99994;
-webkit-transform: translate3d(0, 0, 0); }
.fancybox-slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: auto;
outline: none;
white-space: normal;
box-sizing: border-box;
text-align: center;
z-index: 99994;
-webkit-overflow-scrolling: touch;
display: none;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
transition-property: opacity, -webkit-transform;
transition-property: transform, opacity;
transition-property: transform, opacity, -webkit-transform;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d; }
.fancybox-slide::before {
content: '';
display: inline-block;
vertical-align: middle;
height: 100%;
width: 0; }
.fancybox-is-sliding .fancybox-slide,
.fancybox-slide--previous,
.fancybox-slide--current,
.fancybox-slide--next {
display: block; }
.fancybox-slide--image {
overflow: visible; }
.fancybox-slide--image::before {
display: none; }
.fancybox-slide--video .fancybox-content,
.fancybox-slide--video iframe {
background: #000; }
.fancybox-slide--map .fancybox-content,
.fancybox-slide--map iframe {
background: #E5E3DF; }
.fancybox-slide--next {
z-index: 99995; }
.fancybox-slide > div {
display: inline-block;
position: relative;
padding: 24px;
margin: 44px 0 44px;
border-width: 0;
vertical-align: middle;
text-align: left;
background-color: #fff;
overflow: auto;
box-sizing: border-box; }
.fancybox-slide .fancybox-image-wrap {
position: absolute;
top: 0;
left: 0;
margin: 0;
padding: 0;
border: 0;
z-index: 99995;
background: transparent;
cursor: default;
overflow: visible;
-webkit-transform-origin: top left;
-ms-transform-origin: top left;
transform-origin: top left;
background-size: 100% 100%;
background-repeat: no-repeat;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.fancybox-can-zoomOut .fancybox-image-wrap {
cursor: -webkit-zoom-out;
cursor: zoom-out; }
.fancybox-can-zoomIn .fancybox-image-wrap {
cursor: -webkit-zoom-in;
cursor: zoom-in; }
.fancybox-can-drag .fancybox-image-wrap {
cursor: -webkit-grab;
cursor: grab; }
.fancybox-is-dragging .fancybox-image-wrap {
cursor: -webkit-grabbing;
cursor: grabbing; }
.fancybox-image,
.fancybox-spaceball {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: 0;
max-width: none;
max-height: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.fancybox-spaceball {
z-index: 1; }
.fancybox-slide--iframe .fancybox-content {
padding: 0;
width: 80%;
height: 80%;
max-width: calc(100% - 100px);
max-height: calc(100% - 88px);
overflow: visible;
background: #fff; }
.fancybox-iframe {
display: block;
margin: 0;
padding: 0;
border: 0;
width: 100%;
height: 100%;
background: #fff; }
.fancybox-error {
margin: 0;
padding: 40px;
width: 100%;
max-width: 380px;
background: #fff;
cursor: default; }
.fancybox-error p {
margin: 0;
padding: 0;
color: #444;
font: 16px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; }
.fancybox-close-small {
position: absolute;
top: 0;
right: 0;
width: 44px;
height: 44px;
padding: 0;
margin: 0;
border: 0;
border-radius: 0;
outline: none;
background: transparent;
z-index: 10;
cursor: pointer; }
.fancybox-close-small:after {
content: '×';
position: absolute;
top: 5px;
right: 5px;
width: 30px;
height: 30px;
font: 20px/30px Arial,"Helvetica Neue",Helvetica,sans-serif;
color: #888;
font-weight: 300;
text-align: center;
border-radius: 50%;
border-width: 0;
background: #fff;
transition: background .25s;
box-sizing: border-box;
z-index: 2; }
.fancybox-close-small:focus:after {
outline: 1px dotted #888; }
.fancybox-close-small:hover:after {
color: #555;
background: #eee; }
.fancybox-slide--iframe .fancybox-close-small {
top: 0;
right: -44px; }
.fancybox-slide--iframe .fancybox-close-small:after {
background: transparent;
font-size: 35px;
color: #aaa; }
.fancybox-slide--iframe .fancybox-close-small:hover:after {
color: #fff; }
/* Caption */
.fancybox-caption-wrap {
bottom: 0;
left: 0;
right: 0;
padding: 60px 30px 0 30px;
background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.1) 20%, rgba(0, 0, 0, 0.2) 40%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0.8) 100%);
pointer-events: none; }
.fancybox-caption {
padding: 30px 0;
border-top: 1px solid rgba(255, 255, 255, 0.4);
font-size: 14px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
color: #fff;
line-height: 20px;
-webkit-text-size-adjust: none; }
.fancybox-caption a,
.fancybox-caption button,
.fancybox-caption select {
pointer-events: all; }
.fancybox-caption a {
color: #fff;
text-decoration: underline; }
/* Buttons */
.fancybox-button {
display: inline-block;
position: relative;
margin: 0;
padding: 0;
border: 0;
width: 44px;
height: 44px;
line-height: 44px;
text-align: center;
background: transparent;
color: #ddd;
border-radius: 0;
cursor: pointer;
vertical-align: top;
outline: none; }
.fancybox-button[disabled] {
cursor: default;
pointer-events: none; }
.fancybox-infobar__body, .fancybox-button {
background: rgba(30, 30, 30, 0.6); }
.fancybox-button:hover:not([disabled]) {
color: #fff;
background: rgba(0, 0, 0, 0.8); }
.fancybox-button::before,
.fancybox-button::after {
content: '';
pointer-events: none;
position: absolute;
background-color: currentColor;
color: currentColor;
opacity: 0.9;
box-sizing: border-box;
display: inline-block; }
.fancybox-button[disabled]::before,
.fancybox-button[disabled]::after {
opacity: 0.3; }
.fancybox-button--left::after,
.fancybox-button--right::after {
top: 18px;
width: 6px;
height: 6px;
background: transparent;
border-top: solid 2px currentColor;
border-right: solid 2px currentColor; }
.fancybox-button--left::after {
left: 20px;
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg); }
.fancybox-button--right::after {
right: 20px;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg); }
.fancybox-button--left {
border-bottom-left-radius: 5px; }
.fancybox-button--right {
border-bottom-right-radius: 5px; }
.fancybox-button--close::before, .fancybox-button--close::after {
content: '';
display: inline-block;
position: absolute;
height: 2px;
width: 16px;
top: calc(50% - 1px);
left: calc(50% - 8px); }
.fancybox-button--close::before {
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg); }
.fancybox-button--close::after {
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg); }
/* Navigation arrows */
.fancybox-arrow {
position: absolute;
top: 50%;
margin: -50px 0 0 0;
height: 100px;
width: 54px;
padding: 0;
border: 0;
outline: none;
background: none;
cursor: pointer;
z-index: 99995;
opacity: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
transition: opacity .25s; }
.fancybox-arrow::after {
content: '';
position: absolute;
top: 28px;
width: 44px;
height: 44px;
background-color: rgba(30, 30, 30, 0.8);
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);
background-repeat: no-repeat;
background-position: center center;
background-size: 24px 24px; }
.fancybox-arrow--right {
right: 0; }
.fancybox-arrow--left {
left: 0;
-webkit-transform: scaleX(-1);
-ms-transform: scaleX(-1);
transform: scaleX(-1); }
.fancybox-arrow--right::after,
.fancybox-arrow--left::after {
left: 0; }
.fancybox-show-nav .fancybox-arrow {
opacity: 0.6; }
.fancybox-show-nav .fancybox-arrow[disabled] {
opacity: 0.3; }
/* Loading indicator */
.fancybox-slide > .fancybox-loading {
border: 6px solid rgba(100, 100, 100, 0.4);
border-top: 6px solid rgba(255, 255, 255, 0.6);
border-radius: 100%;
height: 50px;
width: 50px;
-webkit-animation: fancybox-rotate .8s infinite linear;
animation: fancybox-rotate .8s infinite linear;
background: transparent;
position: absolute;
top: 50%;
left: 50%;
margin-top: -25px;
margin-left: -25px;
z-index: 99999; }
@-webkit-keyframes fancybox-rotate {
from {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
to {
-webkit-transform: rotate(359deg);
transform: rotate(359deg); } }
@keyframes fancybox-rotate {
from {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
to {
-webkit-transform: rotate(359deg);
transform: rotate(359deg); } }
/* Transition effects */
.fancybox-animated {
transition-timing-function: cubic-bezier(0, 0, 0.25, 1); }
/* transitionEffect: slide */
.fancybox-fx-slide.fancybox-slide--previous {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
opacity: 0; }
.fancybox-fx-slide.fancybox-slide--next {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
opacity: 0; }
.fancybox-fx-slide.fancybox-slide--current {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1; }
/* transitionEffect: fade */
.fancybox-fx-fade.fancybox-slide--previous,
.fancybox-fx-fade.fancybox-slide--next {
opacity: 0;
transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1); }
.fancybox-fx-fade.fancybox-slide--current {
opacity: 1; }
/* transitionEffect: zoom-in-out */
.fancybox-fx-zoom-in-out.fancybox-slide--previous {
-webkit-transform: scale3d(1.5, 1.5, 1.5);
transform: scale3d(1.5, 1.5, 1.5);
opacity: 0; }
.fancybox-fx-zoom-in-out.fancybox-slide--next {
-webkit-transform: scale3d(0.5, 0.5, 0.5);
transform: scale3d(0.5, 0.5, 0.5);
opacity: 0; }
.fancybox-fx-zoom-in-out.fancybox-slide--current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
/* transitionEffect: rotate */
.fancybox-fx-rotate.fancybox-slide--previous {
-webkit-transform: rotate(-360deg);
-ms-transform: rotate(-360deg);
transform: rotate(-360deg);
opacity: 0; }
.fancybox-fx-rotate.fancybox-slide--next {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
opacity: 0; }
.fancybox-fx-rotate.fancybox-slide--current {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
opacity: 1; }
/* transitionEffect: circular */
.fancybox-fx-circular.fancybox-slide--previous {
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
opacity: 0; }
.fancybox-fx-circular.fancybox-slide--next {
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
opacity: 0; }
.fancybox-fx-circular.fancybox-slide--current {
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
/* transitionEffect: tube */
.fancybox-fx-tube.fancybox-slide--previous {
-webkit-transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg); }
.fancybox-fx-tube.fancybox-slide--next {
-webkit-transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg); }
.fancybox-fx-tube.fancybox-slide--current {
-webkit-transform: translate3d(0, 0, 0) scale(1);
transform: translate3d(0, 0, 0) scale(1); }
/* Styling for Small-Screen Devices */
@media all and (max-width: 800px) {
.fancybox-infobar {
left: 0;
margin-left: 0; }
.fancybox-button--left,
.fancybox-button--right {
display: none !important; }
.fancybox-caption {
padding: 20px 0;
margin: 0; } }
/* Fullscreen */
.fancybox-button--fullscreen::before {
width: 15px;
height: 11px;
left: calc(50% - 7px);
top: calc(50% - 6px);
border: 2px solid;
background: none; }
/* Slideshow button */
.fancybox-button--play::before,
.fancybox-button--pause::before {
top: calc(50% - 6px);
left: calc(50% - 4px);
background: transparent; }
.fancybox-button--play::before {
width: 0;
height: 0;
border-top: 6px inset transparent;
border-bottom: 6px inset transparent;
border-left: 10px solid;
border-radius: 1px; }
.fancybox-button--pause::before {
width: 7px;
height: 11px;
border-style: solid;
border-width: 0 2px 0 2px; }
/* Thumbs */
.fancybox-thumbs {
display: none; }
.fancybox-button--thumbs {
display: none; }
@media all and (min-width: 800px) {
.fancybox-button--thumbs {
display: inline-block; }
.fancybox-button--thumbs span {
font-size: 23px; }
.fancybox-button--thumbs::before {
width: 3px;
height: 3px;
top: calc(50% - 2px);
left: calc(50% - 2px);
box-shadow: 0 -4px 0, -4px -4px 0, 4px -4px 0, 0 0 0 32px inset, -4px 0 0, 4px 0 0, 0 4px 0, -4px 4px 0, 4px 4px 0; }
.fancybox-thumbs {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: auto;
width: 220px;
margin: 0;
padding: 5px 5px 0 0;
background: #fff;
word-break: normal;
-webkit-tap-highlight-color: transparent;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
z-index: 99995; }
.fancybox-show-thumbs .fancybox-thumbs {
display: block; }
.fancybox-show-thumbs .fancybox-inner {
right: 220px; }
.fancybox-thumbs > ul {
list-style: none;
position: absolute;
position: relative;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
font-size: 0; }
.fancybox-thumbs > ul > li {
float: left;
overflow: hidden;
max-width: 50%;
padding: 0;
margin: 0;
width: 105px;
height: 75px;
position: relative;
cursor: pointer;
outline: none;
border: 5px solid transparent;
border-top-width: 0;
border-right-width: 0;
-webkit-tap-highlight-color: transparent;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
box-sizing: border-box; }
li.fancybox-thumbs-loading {
background: rgba(0, 0, 0, 0.1); }
.fancybox-thumbs > ul > li > img {
position: absolute;
top: 0;
left: 0;
min-width: 100%;
min-height: 100%;
max-width: none;
max-height: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.fancybox-thumbs > ul > li:before {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
border-radius: 2px;
border: 4px solid #4ea7f9;
z-index: 99991;
opacity: 0;
transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
.fancybox-thumbs > ul > li.fancybox-thumbs-active:before {
opacity: 1; } }

50
templates/layout.html Normal file
View File

@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="$lang$">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
$if(robots)$<meta name="robots" content="$robots$">$endif$
<link rel="icon" href="/images/icon.svg" type="image/svg+xml">
<title>MČR HROB 2022 ⬩ $title$</title>
<link href="/styles/bootstrap.min.css" rel="stylesheet">
<link href="/styles/default.css" rel="stylesheet">
<link href="/styles/jquery.fancybox.css" rel="stylesheet">
</head>
<body>
<div class="container main">
<header>
<a href="/">
<div class="header-wrapper">
<h1 class="blog-title">MČR HROB 2022</h1>
<p class="lead blog-description">5.6. 11. 2022</p>
</div>
</a>
</header>
<div class="row">
<div class="col-sm-8 blog-main">
<h2>$title$</h2>
$body$
</div><!-- /.blog-main -->
<div class="col-sm-4 col-sm-offset-1 blog-sidebar">
<div class="sidebar-module">
$menu$
</div>
</div><!-- /.blog-sidebar -->
</div><!-- /.row -->
</div><!-- /.container -->
<script src="/scripts/jquery.min.js"></script>
<script src="/scripts/jquery.fancybox.min.js"></script>
<script src="/scripts/main.js"></script>
</body>
</html>