Merge remote-tracking branch 'lambda/master' into doc - cl-yag - Common Lisp Yet Another website Generator HTML git clone git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/cl-yag/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit cac6b1e0980f2284552f3bc13c7653b1db35e5a8 DIR parent fd137db849f0b058408e668af45d3f74bb656779 HTML Author: Solene Rapenne <solene@perso.pw> Date: Tue, 5 Dec 2017 19:08:16 +0100 Merge remote-tracking branch 'lambda/master' into doc Diffstat: M README.md | 32 ++++++++++++++++---------------- M data/README.md | 176 +++++++++++++++---------------- M data/articles.lisp | 9 ++++++--- A data/css.md | 123 +++++++++++++++++++++++++++++++ A static/css/clym.css | 214 +++++++++++++++++++++++++++++++ A static/css/custom.css | 16 ++++++++++++++++ A static/css/pure_r1.0.0/LICENSE.md | 52 +++++++++++++++++++++++++++++++ A static/css/pure_r1.0.0/pure.css | 1508 +++++++++++++++++++++++++++++++ M static/css/style.css | 17 +++++++++++++++++ M templates/layout.tpl | 14 +++++++------- A templates/layout.tpl_original | 34 +++++++++++++++++++++++++++++++ 11 files changed, 2080 insertions(+), 115 deletions(-) --- DIR diff --git a/README.md b/README.md @@ -1,9 +1,9 @@ -o# README +# README ## Introduction -cl-yag is a lightweight, static-site generator that produces **gopher** sites as well as **html** websites. +cl-yag is a lightweight, static site generator that produces **gopher** sites as well as **html** websites. The name 'cl-yag' stands for 'Common Lisp - Yet Another website Generator'. It runs without Quicklisp. @@ -117,13 +117,13 @@ The *config* variable is used to assign the following values: - **:title** - The title of the webpage - **:description** - - This text is used in the *description* field of the Atom RSS + - This text is used in the *description* field of the atom/rss feed. - **:url** - This needs to be the full(!) URL of your website, including(!) a final slash. - - MIND: If the url contains a tilde (~), it needs to get duplicated + - MIND: If the url contains a tilde (~), it needs to get duplicated. - Example: ``https://mydomain/~~user/`` - **:rss-item-number** - - This holds the number of latest(!) RSS items you want to get published when you generate the files. + - This holds the number of latest(!) RSS items you want to get published. - **html** - ``t`` to export html website. Set ``nil`` to disable. - **gopher** @@ -131,9 +131,9 @@ The *config* variable is used to assign the following values: - **gopher-path** - This is the full path of the directory to access your gopher hole. - **gopher-server** - - Hostname of the gopher server. It needs to be included in every link. + - Hostname of the gopher server. It needs to be included in each link. - **gopher-port** - - tcp port of the gopher server. 70 is the default port. It needs to be included in every link. + - tcp port of the gopher server. 70 is the default port. It needs to be included in each link. ### The *articles* Variable @@ -150,13 +150,13 @@ Of the following keywords, only ``:author`` and ``:short`` can be omitted. - The ``:id`` field holds the filename of your post/page. - Example: ``:id "2"`` will load file **data/2.md**. Use text instead of numbers, if you want to. - (See section: 'The **data/** Directory'.) -- **:short** - - The ``:short`` field's value is used for displaying a really short description of the posts content on your homepage. - - If ``:short`` doesn't get a value, the full article gets displayed. - - Hint: Use ``:short "view the article for the full text"``, if you don't want to display the full text of an article on your index site. - **:tag** - ``:tag`` field is used to create a "view" containing all articles of the same tag. - MIND: Whitespaces are used to separate tags and are not allowed in(!) tags. +- **:tiny** + - The ``:tiny`` field's value is used for displaying a really short description of the posts content on your homepage. + - If ``:tiny`` doesn't get a value, the full article gets displayed. + - Hint: Use ``:tiny "Read the full article for more information."``, if you don't want to display the full text of an article on your index site. - **:title** - The ``:title`` field's value sets your post's title, its first headline, as well as its entry on the index.html. @@ -169,7 +169,7 @@ Edit **data/articles.lisp** and add a new list to the *articles* variable: :id "2" :date "29 April 2016" :author "Solène" - :short "I will explain how to use the generator" + :tiny "Read more about how I use cl-yag." :tag "example help code") Then write a corresponding **data/2.md** file, using markdown. @@ -202,9 +202,9 @@ This will produce **output/html/somepage.html**. ### Howto Use Another Common Lisp Interpreter -cl-yags default Lisp interpreter is **sbcl**. -If you want to use a different lisp interpreter you need to set the -variable *LISP* to the name of your binary, when calling ``make``: +cl-yags default Lisp interpreter is **sbcl**. If you want to use a +different interpreter you need to set the variable *LISP* to the name +of your binary, when calling ``make``: make LISP=ecl @@ -262,7 +262,7 @@ themed layouts. If you want some deeply refined, cross-browser compatible, responsive, webscale style sheets, you need to create them yourself. However, cl-yag will work nicely with them and if you want to make your -stylesheets a part of cl-yag you're very welcome to contact me. +style sheets a part of cl-yag you're very welcome to contact me. # Hacking cl-yag DIR diff --git a/data/README.md b/data/README.md @@ -3,7 +3,7 @@ ## Introduction -cl-yag is a very lightweight, 'static site'-generator that produces **gopher** sites as well as **html** websites. +cl-yag is a lightweight, static site generator that produces **gopher** sites as well as **html** websites. The name 'cl-yag' stands for 'Common Lisp - Yet Another website Generator'. It runs without Quicklisp. @@ -21,20 +21,16 @@ gopher-space](gopher://dataswamp.org/1/~solene/). To use cl-yag you'll need: 1. A Common Lisp Interpreter - - cl-yag's current default is **Steel Bank Common Lisp (SBCL)**. - - **Embeddable Common Lisp (ECL)** will do fine as well. + - cl-yag's current default is [Steel Bank Common Lisp (SBCL)](http://www.sbcl.org/). + - [Embeddable Common Lisp (ECL)](https://common-lisp.net/project/ecl/) will do fine as well. 2. A Markdown-to-HTML Converter - - cl-yag's current default is **multimarkdown**. -3. BSD Make - - Linux-Users, cl-yag uses a BSD Makefile syntax, that isn't compatible with GNU make's. - - You need to install a port of the NetBSD make tool, called **bmake**. + - cl-yag's current default is [multimarkdown](http://fletcherpenney.net/multimarkdown/). ## Usage -Go into your project's directory and type ``make``. You'll find your new website/gopher page in 'output/'. -If you want to get rid of everything in your 'output/' subdirectories, -type ``make clean``. +Go into your project's directory and type ``make``. You'll find your new website/gopher page in **output/**. +If you want to get rid of everything in your **output/** subdirectories, type ``make clean``. For further commands: read the Makefile. Read in the follwing section where to find it. @@ -73,25 +69,25 @@ least the following files and folders: - This is cl-yag's core library. - **static/** - This directory holds content, that needs to be published without being changed (e.g. stylesheets, js-scripts). - - If you come from 'non-static CMS'-Country: 'static/' holds, what you would put in your 'assets/' directory. + - If you come from 'non-static CMS'-Country: **static/** holds, what you would put in your **assets/** directory. - **templates/** - The templates in this directory provide the structural skeleton(s) of the webpages and feeds you want to create. - **output/** - cl-yag puts in this directory everything ready to get deployed. - - Because cl-yag generates not only HTML, but gopher-compliant pages as well, output/ **holds two subdirectories**. - - **gopher/** : contains the website for gopher, - - **html/** : contains the website in HTML. + - Because cl-yag generates not only HTML, but gopher-compliant pages as well, **output/** **holds two subdirectories**. + - **gopher/** contains the website for gopher, + - **html/** contains the website in HTML. And there is the **data/** directory, which is important enough to get a subsubsection of its own. -### The 'data/' Directory +### The data/ Directory This directory is crucial for the usage of cl-yag. **data/** contains -- the **articles.lisp configuration file**, which defines important metadata for posts and pages. -- It also holds **${id}.md**-files, which are holding your posts' and pages' content. You can use markdown to write them. +- the **articles.lisp** configuration file, which defines important metadata for posts and pages. +- It also holds **${id}.md** files, which are holding your posts' (or pages') content. You can use markdown to write them. For more information: Read section 'Configuration'. @@ -99,172 +95,174 @@ For more information: Read section 'Configuration'. ## Configuration cl-yag's main configuration file is **data/articles.lisp**. -In order to have a reliably running implementation of cl-yag, you have +In order to have a running implementation of cl-yag, you have to set most of the values in this file. **data/articles.lisp** has two parts: -1. A variable called **config**. It defines global values, that define your webpage. -2. A variable called **articles**. It defines local values, that - in turn - define individual pages/posts. +1. A variable called *config*. Its values define your webpage. +2. A variable called *articles*. Its values define your posts. -Values are assigned by placing a string (e.g. "foo") or a boolean -(i.e. 't' or 'nil') behind a keyword (e.g. ':title'). +Values are assigned by placing a string (e.g. ``"foo"``) or a boolean +(i.e. ``t`` or ``nil``) behind a keyword (e.g. ``:title``). -### The **config** Variable +### The *config* Variable -The **config** variable is used to assign the following values: +The *config* variable is used to assign the following values: - **:webmaster** - The name of the default(!) author. - - :webmaster gets used, if **:author** is omitted. (see below: 'The **articles** variable'.) + - ``:webmaster`` gets used, if ``:author`` is omitted. (See below: 'The **articles** variable'.) - **:title** - The title of the webpage - **:description** - - This text is used in the *description* field of the Atom RSS + - This text is used in the *description* field of the atom/rss feed. - **:url** - This needs to be the full(!) URL of your website, including(!) a final slash. - - MIND: If the url contains a tilde (~), it needs to get duplicated - - Example: https://mydomain/~~user/ is a valid url. + - MIND: If the url contains a tilde (~), it needs to get duplicated. + - Example: ``https://mydomain/~~user/`` - **:rss-item-number** - - This holds the number of latest(!) RSS items you want to get published when you generate the files. + - This holds the number of latest(!) RSS items you want to get published. - **html** - - *t* to export html website. Set *nil* to disable. + - ``t`` to export html website. Set ``nil`` to disable. - **gopher** - - *t* to export gopher website. Set *nil* to disable. + - ``t`` to export gopher website. Set ``nil`` to disable. - **gopher-path** - This is the full path of the directory to access your gopher hole. - **gopher-server** - - Hostname of the gopher server. Because gopher doesn't allow relative links (like html), you need to know where you put your files. + - Hostname of the gopher server. It needs to be included in each link. - **gopher-port** - - tcp port of the gopher server. 70 is the default port. It need to be included in every link (see: **gopher-server**). + - tcp port of the gopher server. 70 is the default port. It needs to be included in each link. -### The **articles** Variable +### The *articles* Variable -The **articles** variable holds per page/post-metadata. -Of the following fields, only the *:author* and *:short* description could be omitted. +The *articles* variable holds post metadata. +So you need to create an entry in the *articles* variable for each of your posts. + +Of the following keywords, only ``:author`` and ``:short`` can be omitted. -- **:short** - - The _:short_ field's value is used for displaying a really short description of the posts content on your homepage. - - If _:short_ doesn't get a value, the full article gets displayed. - - Hint: Use ``:short "view the article for the full text"``, if you don't want to display the full text of an article on your index site. -- **:id_** - - The _:id_ field holds the filename of your post/page. - - Example: ``:id "2"`` will load file ``data/2.md``. Use text instead of numbers, if you want to. - - (See section: 'The **data/** Directory'.) - **:author** - - The _:author_ field is used to display the article' author. - - If you omit it, the generator will take the name from the **:webmaster** field of the *config* variable. + - The ``:author`` field is used to display the article's author. + - If you omit it, the generator will take the name from the ``:webmaster`` field of the *config* variable. +- **:id** + - The ``:id`` field holds the filename of your post/page. + - Example: ``:id "2"`` will load file **data/2.md**. Use text instead of numbers, if you want to. + - (See section: 'The **data/** Directory'.) - **:tag** - - _:tag_ field is used to create a "view" containing all articles of the same tag. - - MIND: Whitespaces are not allowed in(!) tags. + - ``:tag`` field is used to create a "view" containing all articles of the same tag. + - MIND: Whitespaces are used to separate tags and are not allowed in(!) tags. +- **:tiny** + - The ``:tiny`` field's value is used for displaying a really short description of the posts content on your homepage. + - If ``:tiny`` doesn't get a value, the full article gets displayed. + - Hint: Use ``:tiny "Read the full article for more information."``, if you don't want to display the full text of an article on your index site. +- **:title** + - The ``:title`` field's value sets your post's title, its first headline, as well as its entry on the index.html. ## Howto Create A New Post -Edit data/articles.lisp and add a new list to the *articles* variable: +Edit **data/articles.lisp** and add a new list to the *articles* variable: (list :title "How do I use cl-yag" :id "2" :date "29 April 2016" :author "Solène" - :short "I will explain how to use the generator" + :tiny "Read more about how I use cl-yag." :tag "example help code") -Then write a corresponding ``2.md`` file, using markdown. +Then write a corresponding **data/2.md** file, using markdown. + ## Howto Publish A Post I prepared a Makefile to facilitate the process of generating and -publishing your static sites. - +publishing your static sites. All you need to do in order to publish is to go into your cl-yag -directory and type "make". +directory and type ``make``. -The 'make' command does create html and gopher files in the defined -**output/** location (which can be a symbolic link pointing to some -other directory, somewhere else on your machine). +The make command creates html and gopher files in the defined location. +The default is the **output/** directory, but you can use a symbolic link +pointing to some other directory as well. ## Howto Add A New Page You may want to have some dedicated pages besides the index or a post. -To create one, edit the **generate-site** function in cl-yag's -generator.lisp and add a function call, like this: +To create one, edit the *generate-site* function in cl-yag's +**generator.lisp** and add a function call, like this: (generate "somepage.html" (load-file "data/mypage.html")) -This will produce the file **somepage.html** in the output folder. +This will produce **output/html/somepage.html**. ## Further Customization ### Howto Use Another Common Lisp Interpreter -cl-yags default Lisp interpreter is **sbcl**. -If you want to use a different lisp interpreter you need to set the -variable 'LISP' to the name of your binary, when calling ``make``. +cl-yags default Lisp interpreter is **sbcl**. If you want to use a +different interpreter you need to set the variable *LISP* to the name +of your binary, when calling ``make``: - `make LISP=ecl` + make LISP=ecl ### Using git Hooks For Publishing You may customize your publishing-process further, e.g. by using a git -hook to call 'make' after each change in the repo so your website gets -updated automatically. +hook to call the make program after each change in the repo so your +website gets updated automatically. ## Page-Includes Here is an example code, if you want to include another page in the template: -1. Create **template/panel.tpl** with the html you want to include. -2. Add a string in the target file, where the replacement should occur. - In this case, we choose **%%Panel%%** for a string, and, because we want the panel to be displayed on each page, we add this string to **template/layout.tpl**. +1. Create **templates/panel.tpl** containing the html you want to include. +2. Add a replacement-string in the target file, where the replacement should occur. + In this case, we choose **%%Panel%%** for a string, and, because we want the panel to be displayed on each page, we add this string to **templates/layout.tpl**. 3. Modify the function *generate-layout* in cl-yag's **generator.lisp** accordingly. This is done by adding the following template function call: - "**(template "%%Panel%%" (load-file "template/panel.tpl"))**" - -(Note: You can insert your text directly into the layout template file -as well.) + (template "%%Panel%%" (load-file "templates/panel.tpl")) +Another valid approach is to writer your html directly into **templates/layout.tpl**. ## Known Limitations ### Use ~~ To Create ~ -cl-yag crashes if you use a single "**~**" caracter inside one data -structure in **articles.lisp** files, because Common Lisp employs the -tilde as a prefix to indicate format specifiers in format strings. +cl-yag crashes if you use a single "~" character inside +**templates/articles.lisp**, because Common Lisp employs the tilde as a +prefix to indicate format specifiers in format strings. -In order to use a literal `~` - e.g. for creating a :title or :url -reference - you have to **escape** the tilde **by duplicating** it: -``~~``. -(See _:url_ in section 'Configuration'). +In order to use a literal `~` -- e.g. for creating a ``:title`` or +``:url`` reference -- you have to *escape* the tilde *by +duplicating* it: ``~~``. (See ``:url`` in section 'Configuration'). ### Posting Without Tagging -cl-yag allows posts to be 'untagged'- but with the default template -you'll get a line below your title that displays: "Tags: ". +cl-yag allows posts without tags, but, using the default +**templates/layout.tpl**, you'll get a line below your title that +displays: "Tags: ". (Note: If you are looking for a way to contribute this may be a task for you.) ### A Note On Themes -Although cl-yag **may** ship with a **minimalistic** template, cl-yag -focuses only on generating html- and gopher-compliant structural -markup - not themed layouts. +Although cl-yag may ship with a minimalistic template, cl-yag focuses +on generating html- and gopher-compliant structural markup - not +themed layouts. If you want some deeply refined, cross-browser compatible, responsive, -webscale style-sheet, you need to create it yourself. -However, cl-yag will work nicely with it and if you want to make your -stylesheets a part of cl-yag you're very welcome to contact me. +webscale style sheets, you need to create them yourself. However, +cl-yag will work nicely with them and if you want to make your +style sheets a part of cl-yag you're very welcome to contact me. # Hacking cl-yag @@ -275,4 +273,4 @@ If you want to contribute, feel free to contact me and/or to send in a patch. - If you are looking for a way to contribute: - You could find a way to "sanitize" cl-yag's behaviour regarding the tilde (see: above); - Also see: 'Note' in 'Posting Without Tagging'; - - Also see: 'A Note On Themes. + - Also see: 'A Note On Themes'. DIR diff --git a/data/articles.lisp b/data/articles.lisp @@ -33,11 +33,14 @@ (defvar *articles* (list + ;; CSS + (list :id "css" :date "02.12.2017" :tag "cl-yag" + :title "CSS For cl-yag" :author "lambda" :tiny "Read more") ;; README - (list :id "README" :date "23 November 2017" :tag "cl-yag README" - :title "README" :author "lambda" :short "cl-yag's README got reworked." :tiny "Read cl-yag's README") + (list :id "README" :date "23.11.2017" :tag "cl-yag" + :title "README" :author "lambda" :tiny "Read cl-yag's README") ;; 1 - (list :id "1" :date "29 April 2016":tag "pony code" + (list :id "1" :date "29.04.2016" :tag "pony" :title "My first message" :short "This is my first message" :author "Solène" :tiny "Read more") )) DIR diff --git a/data/css.md b/data/css.md @@ -0,0 +1,123 @@ +# CSS For cl-yag + +cl-yag provides you with a default theme and a useful approach to +handle CSS style sheets as well as CSS frameworks. + + +## Where The Style Sheets Live + +All of cl-yag's style sheets are located in **static/css/**. +Currently there are the following files: + + css/ + |-- clym.css + |-- custom.css + |-- pure_r1.0.0/ + | |-- LICENSE.md + | `-- pure.css + `-- style.css + + +## style.css -- One Sheet To Rule Them All + +In order to keep it simple cl-yag uses **static/css/style.css** to +administrate all of its style sheets. Use the ``@import`` rule to +include your own, or comments to get rid of what is already there - +but mind the [cascade](https://www.w3.org/TR/css-cascade-3/ "W3C: CSS Cascading and Inheritance Level 3"). + +Currently, **style.css** looks like this: + + /* =================================================================== */ + /* style.css for cl-yag */ + /* =================================================================== */ + @charset "utf-8"; + + + /* ~ PURE ~ */ + @import url("pure_r1.0.0/pure.css"); + + + /* ~ CLYM ~ */ + @import url("clym.css"); + + + /* ~ LAST ENTRY ~ */ + /* ~ use custom.css for overriding rules ~ */ + @import url("custom.css"); + + + +## Pure -- "A Set Of Small, Responsive CSS Modules" + +cl-yag uses a style sheet called **pure.css**, taken from +[Pure](https://purecss.io/ "purecss.io"), a minimal, BSD licensed CSS +framework, to provide a set of expected UI features, among which are +sane resets (such as +[normalize.css](https://necolas.github.io/normalize.css/ +"Normalize.css - A modern, HTML5-ready alternative to CSS resets")'s +reset rules) and usable menus. + +To deactivate Pure, put the *PURE.CSS* ``@import`` rule in +**static/css/style.css** in comments and re-run ``make``. + + +## clym -- A Default Theme + +Additionally, cl-yag comes with its first theme: *clym*. + +*clym* stands for *cl-yag minimal*. It is a set of css rules designed to +work with cl-yag's html skeleton. It provides an unobtrusive color +scheme, basic typography, as well as basic responsiveness. You'll find +it in **static/css/clym.css**. + +**clym.css** doesn't provide neither css resets nor a menu layout. This +is handled by [Pure](https://purecss.io/ "purecss.io")'s +**pure.css**. Further, it doesn't need any JavaScript. + +If you don't like *clym*, put comments around the line ``@import +url("clym.css");`` in **static/css/style.css**, around all pure-rules +in **static/css/custom.css**, and re-run ``make``. + + +## **custom.css** + +For information about **custom.css** you need to read it, as well as +the following section "Working With Style Sheets". + + +## Working With Style Sheets + +### Current Styles And Minor Tweaks + +If you are already using a combination of style sheets and you need to +adjust some parts of the layout, use cl-yag's +**static/css/custom.css**. It is currently used to override Pure's +default layout for horizontal menus with *clym*'s colorscheme. + +#### MIND + +- In order to override rules located in all previous(!) style sheets +**custom.css** needs to get sourced in as the last(!) file in +**static/css/style.css** (see section: "style.css – One Sheet To Rule Them +All"). +- Respect the [cascade](https://www.w3.org/TR/css-cascade-3/ "W3C: CSS Cascading and Inheritance Level 3") :-). + + +### Frameworks + +CSS frameworks provide an easy way to create your own theme. To make use +of a framework's rulesets, + +- its style sheets need to get included via your **static/css/style.css**, +- their ids and classes need to get wired into cl-yag's template files and +- the template files need to get used by cl-yag's **generator.lisp**. + +So you need to edit cl-yag's template files in **templates/** and - in +case you've choosen to rename your templates - you need to adjust their +corresponding paths and filenames in **generator.lisp**. + + + + + + DIR diff --git a/static/css/clym.css b/static/css/clym.css @@ -0,0 +1,214 @@ +/* + * OpenBSD License + * + * Copyright (c) 2017 lambda <lambda@fnord.one> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* ====================================================== */ +/* A basic style for wrapper main footer */ +/* ====================================================== */ +html{ + overflow-y:scroll; +} +html, body { + margin: 0em; + padding: 0em; + min-height:100%; + height: 100%; +} +body { + position: relative; + margin: 0 auto; + padding: 0em 1em; +} +#wrapper { + position: relative; + width:100%; + min-height: 100%; + margin: 0em auto; +} +main { + padding-bottom: 3em; + height:100%; +} +main:after { + display: block; + width: 100%; + content:""; + clear: both; +} +footer { + position: absolute; + width: 100%; + height: 3em; + bottom: 0em; + text-align: center; +} +footer > p { + display: block; + text-align: center; + font-size: 0.9em; +} +/* ====================================================== */ +/* A basic style for header */ +/* ====================================================== */ +/* All Tags */ +header > div { + display: block; + margin: 0.5em auto auto auto; + padding: 1ex; + float: right; + border: 1px solid transparent; + min-width: auto; + max-width: 100%; +} +/* ====================================================== */ +/* A basic responsive'ish ruleset */ +/* ====================================================== */ +@media only screen and (min-width: 360px) { + #wrapper { + font-size: 0.95em; + } +} +@media only screen and (min-width: 800px) { + #wrapper { + max-width: 750px; + font-size: 1em; + } +} +@media only screen and (min-width: 1000px) { + #wrapper { + max-width: 800px; + } +} +@media only screen and (min-width: 1025px) { + #wrapper { + max-width: 1000px; + } +} +/* ====================================================== */ +/* A basic theme */ +/* ====================================================== */ +html, body { + font-family: Arial, sans; + color: #1f1f1f ; +} +main { + line-height: 1.3em; +} +h1,h2,h3 { + font-weight: bold; + line-height: 1.8; + margin: 0em; +} +h1 { + font-size: 175%; +} +h2 { + font-size: 150%; +} +h3 { + font-size: 125%; +} +p { + text-align: justify; +} +a { + color: #3b5487; + text-decoration: none; +} +a:active, a:hover, a:focus { + color: #203785; + text-decoration: underline; +} +footer > p { + display: block; + text-align: center; + font-size: 0.9em; +} +/* default style for 'information' */ +article > header { + font-weight: 900; + font-size: 90%; + text-align: center; +} +article > header > h1 > a { + color: #1f1f1f ; + text-decoration: none; +} +/* ====================================================== */ +/* A basic style for code */ +/* ====================================================== */ +code { + display:inline-block; + padding: 1px 5px; + border-radius: 3px; + background-color: #e3f0ff; + font-weight: 700; + font-size: 0.8em; + color: #3c3f42; +} +pre > code { + display: block; + height: auto; + padding: 1em; +} +/* ====================================================== */ +/* A basic style for posts */ +/* ====================================================== */ +article { + display: block; + float: left; + clear:both; + width: 100%; +} +article:after { + display:block; + height: 1em; + content:""; + clear:both; +} +article > header { + display:block; + margin: 0em; + padding: 1em; + border: 1px solid transparent; + border-radius: 3px; + -webkit-box-shadow: 1px 1px 5px 1px #1f1f1f; + box-shadow: 1px 1px 5px 1px #1f1f1f; +} +article > header:after { + display:block; + width:100%; + height: auto; + content:""; + clear:both; +} +article > header > .information { + font-size: 80%; +} +article > header > h1 { + float: left; + margin: auto 1em; +} +article > header > p { + float: left; + margin-top: 5px; +} +article > header + h1 { + margin-top: 1em; +} DIR diff --git a/static/css/custom.css b/static/css/custom.css @@ -0,0 +1,16 @@ +/* ==================================================================== */ + /* custom.css */ +/* ==================================================================== */ +/* use this file to tweak your styles by overriding others */ + + +/* Override some of pure.css's menu rules to get clym's */ +a.pure-menu-link { + color: #3b5487; + text-decoration: none; + font-weight: 700; + text-transform: uppercase; +} +a.pure-menu-link:active, a.pure-menu-link:hover, a.pure-menu-link:focus { + color: #203785; +} DIR diff --git a/static/css/pure_r1.0.0/LICENSE.md b/static/css/pure_r1.0.0/LICENSE.md @@ -0,0 +1,52 @@ +Software License Agreement (BSD License) +======================================== + +Copyright 2014 Yahoo! Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Normalize.css License +===================== + +Copyright (c) Nicolas Gallagher and Jonathan Neal + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. DIR diff --git a/static/css/pure_r1.0.0/pure.css b/static/css/pure_r1.0.0/pure.css @@ -0,0 +1,1508 @@ +/*! +Pure v1.0.0 +Copyright 2013 Yahoo! +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +/*! +normalize.css v^3.0 | MIT License | git.io/normalize +Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +/*csslint important:false*/ + +/* ========================================================================== + Pure Base Extras + ========================================================================== */ + +/** + * Extra rules that Pure adds on top of Normalize.css + */ + +/** + * Always hide an element when it has the `hidden` HTML attribute. + */ + +.hidden, +[hidden] { + display: none !important; +} + +/** + * Add this class to an image to make it fit within it's fluid parent wrapper while maintaining + * aspect ratio. + */ +.pure-img { + max-width: 100%; + height: auto; + display: block; +} + +/*csslint regex-selectors:false, known-properties:false, duplicate-properties:false*/ + +.pure-g { + letter-spacing: -0.31em; /* Webkit: collapse white-space between units */ + *letter-spacing: normal; /* reset IE < 8 */ + *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */ + text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */ + + /* + Sets the font stack to fonts known to work properly with the above letter + and word spacings. See: https://github.com/yahoo/pure/issues/41/ + + The following font stack makes Pure Grids work on all known environments. + + * FreeSans: Ships with many Linux distros, including Ubuntu + + * Arimo: Ships with Chrome OS. Arimo has to be defined before Helvetica and + Arial to get picked up by the browser, even though neither is available + in Chrome OS. + + * Droid Sans: Ships with all versions of Android. + + * Helvetica, Arial, sans-serif: Common font stack on OS X and Windows. + */ + font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; + + /* Use flexbox when possible to avoid `letter-spacing` side-effects. */ + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + + /* Prevents distributing space between rows */ + -webkit-align-content: flex-start; + -ms-flex-line-pack: start; + align-content: flex-start; +} + +/* IE10 display: -ms-flexbox (and display: flex in IE 11) does not work inside a table; fall back to block and rely on font hack */ +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + table .pure-g { + display: block; + } +} + +/* Opera as of 12 on Windows needs word-spacing. + The ".opera-only" selector is used to prevent actual prefocus styling + and is not required in markup. +*/ +.opera-only :-o-prefocus, +.pure-g { + word-spacing: -0.43em; +} + +.pure-u { + display: inline-block; + *display: inline; /* IE < 8: fake inline-block */ + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} + +/* +Resets the font family back to the OS/browser's default sans-serif font, +this the same font stack that Normalize.css sets for the `body`. +*/ +.pure-g [class *= "pure-u"] { + font-family: sans-serif; +} + +.pure-u-1, +.pure-u-1-1, +.pure-u-1-2, +.pure-u-1-3, +.pure-u-2-3, +.pure-u-1-4, +.pure-u-3-4, +.pure-u-1-5, +.pure-u-2-5, +.pure-u-3-5, +.pure-u-4-5, +.pure-u-5-5, +.pure-u-1-6, +.pure-u-5-6, +.pure-u-1-8, +.pure-u-3-8, +.pure-u-5-8, +.pure-u-7-8, +.pure-u-1-12, +.pure-u-5-12, +.pure-u-7-12, +.pure-u-11-12, +.pure-u-1-24, +.pure-u-2-24, +.pure-u-3-24, +.pure-u-4-24, +.pure-u-5-24, +.pure-u-6-24, +.pure-u-7-24, +.pure-u-8-24, +.pure-u-9-24, +.pure-u-10-24, +.pure-u-11-24, +.pure-u-12-24, +.pure-u-13-24, +.pure-u-14-24, +.pure-u-15-24, +.pure-u-16-24, +.pure-u-17-24, +.pure-u-18-24, +.pure-u-19-24, +.pure-u-20-24, +.pure-u-21-24, +.pure-u-22-24, +.pure-u-23-24, +.pure-u-24-24 { + display: inline-block; + *display: inline; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} + +.pure-u-1-24 { + width: 4.1667%; + *width: 4.1357%; +} + +.pure-u-1-12, +.pure-u-2-24 { + width: 8.3333%; + *width: 8.3023%; +} + +.pure-u-1-8, +.pure-u-3-24 { + width: 12.5000%; + *width: 12.4690%; +} + +.pure-u-1-6, +.pure-u-4-24 { + width: 16.6667%; + *width: 16.6357%; +} + +.pure-u-1-5 { + width: 20%; + *width: 19.9690%; +} + +.pure-u-5-24 { + width: 20.8333%; + *width: 20.8023%; +} + +.pure-u-1-4, +.pure-u-6-24 { + width: 25%; + *width: 24.9690%; +} + +.pure-u-7-24 { + width: 29.1667%; + *width: 29.1357%; +} + +.pure-u-1-3, +.pure-u-8-24 { + width: 33.3333%; + *width: 33.3023%; +} + +.pure-u-3-8, +.pure-u-9-24 { + width: 37.5000%; + *width: 37.4690%; +} + +.pure-u-2-5 { + width: 40%; + *width: 39.9690%; +} + +.pure-u-5-12, +.pure-u-10-24 { + width: 41.6667%; + *width: 41.6357%; +} + +.pure-u-11-24 { + width: 45.8333%; + *width: 45.8023%; +} + +.pure-u-1-2, +.pure-u-12-24 { + width: 50%; + *width: 49.9690%; +} + +.pure-u-13-24 { + width: 54.1667%; + *width: 54.1357%; +} + +.pure-u-7-12, +.pure-u-14-24 { + width: 58.3333%; + *width: 58.3023%; +} + +.pure-u-3-5 { + width: 60%; + *width: 59.9690%; +} + +.pure-u-5-8, +.pure-u-15-24 { + width: 62.5000%; + *width: 62.4690%; +} + +.pure-u-2-3, +.pure-u-16-24 { + width: 66.6667%; + *width: 66.6357%; +} + +.pure-u-17-24 { + width: 70.8333%; + *width: 70.8023%; +} + +.pure-u-3-4, +.pure-u-18-24 { + width: 75%; + *width: 74.9690%; +} + +.pure-u-19-24 { + width: 79.1667%; + *width: 79.1357%; +} + +.pure-u-4-5 { + width: 80%; + *width: 79.9690%; +} + +.pure-u-5-6, +.pure-u-20-24 { + width: 83.3333%; + *width: 83.3023%; +} + +.pure-u-7-8, +.pure-u-21-24 { + width: 87.5000%; + *width: 87.4690%; +} + +.pure-u-11-12, +.pure-u-22-24 { + width: 91.6667%; + *width: 91.6357%; +} + +.pure-u-23-24 { + width: 95.8333%; + *width: 95.8023%; +} + +.pure-u-1, +.pure-u-1-1, +.pure-u-5-5, +.pure-u-24-24 { + width: 100%; +} +.pure-button { + /* Structure */ + display: inline-block; + zoom: 1; + line-height: normal; + white-space: nowrap; + vertical-align: middle; + text-align: center; + cursor: pointer; + -webkit-user-drag: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + box-sizing: border-box; +} + +/* Firefox: Get rid of the inner focus border */ +.pure-button::-moz-focus-inner { + padding: 0; + border: 0; +} + +/* Inherit .pure-g styles */ +.pure-button-group { + letter-spacing: -0.31em; /* Webkit: collapse white-space between units */ + *letter-spacing: normal; /* reset IE < 8 */ + *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */ + text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */ +} + +.opera-only :-o-prefocus, +.pure-button-group { + word-spacing: -0.43em; +} + +.pure-button-group .pure-button { + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} + +/*csslint outline-none:false*/ + +.pure-button { + font-family: inherit; + font-size: 100%; + padding: 0.5em 1em; + color: #444; /* rgba not supported (IE 8) */ + color: rgba(0, 0, 0, 0.80); /* rgba supported */ + border: 1px solid #999; /*IE 6/7/8*/ + border: none rgba(0, 0, 0, 0); /*IE9 + everything else*/ + background-color: #E6E6E6; + text-decoration: none; + border-radius: 2px; +} + +.pure-button-hover, +.pure-button:hover, +.pure-button:focus { + /* csslint ignore:start */ + filter: alpha(opacity=90); + /* csslint ignore:end */ + background-image: -webkit-linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, rgba(0,0,0, 0.10)); + background-image: linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, rgba(0,0,0, 0.10)); +} +.pure-button:focus { + outline: 0; +} +.pure-button-active, +.pure-button:active { + box-shadow: 0 0 0 1px rgba(0,0,0, 0.15) inset, 0 0 6px rgba(0,0,0, 0.20) inset; + border-color: #000\9; +} + +.pure-button[disabled], +.pure-button-disabled, +.pure-button-disabled:hover, +.pure-button-disabled:focus, +.pure-button-disabled:active { + border: none; + background-image: none; + /* csslint ignore:start */ + filter: alpha(opacity=40); + /* csslint ignore:end */ + opacity: 0.40; + cursor: not-allowed; + box-shadow: none; + pointer-events: none; +} + +.pure-button-hidden { + display: none; +} + +.pure-button-primary, +.pure-button-selected, +a.pure-button-primary, +a.pure-button-selected { + background-color: rgb(0, 120, 231); + color: #fff; +} + +/* Button Groups */ +.pure-button-group .pure-button { + margin: 0; + border-radius: 0; + border-right: 1px solid #111; /* fallback color for rgba() for IE7/8 */ + border-right: 1px solid rgba(0, 0, 0, 0.2); + +} + +.pure-button-group .pure-button:first-child { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.pure-button-group .pure-button:last-child { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-right: none; +} + +/*csslint box-model:false*/ +/* +Box-model set to false because we're setting a height on select elements, which +also have border and padding. This is done because some browsers don't render +the padding. We explicitly set the box-model for select elements to border-box, +so we can ignore the csslint warning. +*/ + +.pure-form input[type="text"], +.pure-form input[type="password"], +.pure-form input[type="email"], +.pure-form input[type="url"], +.pure-form input[type="date"], +.pure-form input[type="month"], +.pure-form input[type="time"], +.pure-form input[type="datetime"], +.pure-form input[type="datetime-local"], +.pure-form input[type="week"], +.pure-form input[type="number"], +.pure-form input[type="search"], +.pure-form input[type="tel"], +.pure-form input[type="color"], +.pure-form select, +.pure-form textarea { + padding: 0.5em 0.6em; + display: inline-block; + border: 1px solid #ccc; + box-shadow: inset 0 1px 3px #ddd; + border-radius: 4px; + vertical-align: middle; + box-sizing: border-box; +} + +/* +Need to separate out the :not() selector from the rest of the CSS 2.1 selectors +since IE8 won't execute CSS that contains a CSS3 selector. +*/ +.pure-form input:not([type]) { + padding: 0.5em 0.6em; + display: inline-block; + border: 1px solid #ccc; + box-shadow: inset 0 1px 3px #ddd; + border-radius: 4px; + box-sizing: border-box; +} + + +/* Chrome (as of v.32/34 on OS X) needs additional room for color to display. */ +/* May be able to remove this tweak as color inputs become more standardized across browsers. */ +.pure-form input[type="color"] { + padding: 0.2em 0.5em; +} + + +.pure-form input[type="text"]:focus, +.pure-form input[type="password"]:focus, +.pure-form input[type="email"]:focus, +.pure-form input[type="url"]:focus, +.pure-form input[type="date"]:focus, +.pure-form input[type="month"]:focus, +.pure-form input[type="time"]:focus, +.pure-form input[type="datetime"]:focus, +.pure-form input[type="datetime-local"]:focus, +.pure-form input[type="week"]:focus, +.pure-form input[type="number"]:focus, +.pure-form input[type="search"]:focus, +.pure-form input[type="tel"]:focus, +.pure-form input[type="color"]:focus, +.pure-form select:focus, +.pure-form textarea:focus { + outline: 0; + border-color: #129FEA; +} + +/* +Need to separate out the :not() selector from the rest of the CSS 2.1 selectors +since IE8 won't execute CSS that contains a CSS3 selector. +*/ +.pure-form input:not([type]):focus { + outline: 0; + border-color: #129FEA; +} + +.pure-form input[type="file"]:focus, +.pure-form input[type="radio"]:focus, +.pure-form input[type="checkbox"]:focus { + outline: thin solid #129FEA; + outline: 1px auto #129FEA; +} +.pure-form .pure-checkbox, +.pure-form .pure-radio { + margin: 0.5em 0; + display: block; +} + +.pure-form input[type="text"][disabled], +.pure-form input[type="password"][disabled], +.pure-form input[type="email"][disabled], +.pure-form input[type="url"][disabled], +.pure-form input[type="date"][disabled], +.pure-form input[type="month"][disabled], +.pure-form input[type="time"][disabled], +.pure-form input[type="datetime"][disabled], +.pure-form input[type="datetime-local"][disabled], +.pure-form input[type="week"][disabled], +.pure-form input[type="number"][disabled], +.pure-form input[type="search"][disabled], +.pure-form input[type="tel"][disabled], +.pure-form input[type="color"][disabled], +.pure-form select[disabled], +.pure-form textarea[disabled] { + cursor: not-allowed; + background-color: #eaeded; + color: #cad2d3; +} + +/* +Need to separate out the :not() selector from the rest of the CSS 2.1 selectors +since IE8 won't execute CSS that contains a CSS3 selector. +*/ +.pure-form input:not([type])[disabled] { + cursor: not-allowed; + background-color: #eaeded; + color: #cad2d3; +} +.pure-form input[readonly], +.pure-form select[readonly], +.pure-form textarea[readonly] { + background-color: #eee; /* menu hover bg color */ + color: #777; /* menu text color */ + border-color: #ccc; +} + +.pure-form input:focus:invalid, +.pure-form textarea:focus:invalid, +.pure-form select:focus:invalid { + color: #b94a48; + border-color: #e9322d; +} +.pure-form input[type="file"]:focus:invalid:focus, +.pure-form input[type="radio"]:focus:invalid:focus, +.pure-form input[type="checkbox"]:focus:invalid:focus { + outline-color: #e9322d; +} +.pure-form select { + /* Normalizes the height; padding is not sufficient. */ + height: 2.25em; + border: 1px solid #ccc; + background-color: white; +} +.pure-form select[multiple] { + height: auto; +} +.pure-form label { + margin: 0.5em 0 0.2em; +} +.pure-form fieldset { + margin: 0; + padding: 0.35em 0 0.75em; + border: 0; +} +.pure-form legend { + display: block; + width: 100%; + padding: 0.3em 0; + margin-bottom: 0.3em; + color: #333; + border-bottom: 1px solid #e5e5e5; +} + +.pure-form-stacked input[type="text"], +.pure-form-stacked input[type="password"], +.pure-form-stacked input[type="email"], +.pure-form-stacked input[type="url"], +.pure-form-stacked input[type="date"], +.pure-form-stacked input[type="month"], +.pure-form-stacked input[type="time"], +.pure-form-stacked input[type="datetime"], +.pure-form-stacked input[type="datetime-local"], +.pure-form-stacked input[type="week"], +.pure-form-stacked input[type="number"], +.pure-form-stacked input[type="search"], +.pure-form-stacked input[type="tel"], +.pure-form-stacked input[type="color"], +.pure-form-stacked input[type="file"], +.pure-form-stacked select, +.pure-form-stacked label, +.pure-form-stacked textarea { + display: block; + margin: 0.25em 0; +} + +/* +Need to separate out the :not() selector from the rest of the CSS 2.1 selectors +since IE8 won't execute CSS that contains a CSS3 selector. +*/ +.pure-form-stacked input:not([type]) { + display: block; + margin: 0.25em 0; +} +.pure-form-aligned input, +.pure-form-aligned textarea, +.pure-form-aligned select, +/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ +.pure-form-aligned .pure-help-inline, +.pure-form-message-inline { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: middle; +} +.pure-form-aligned textarea { + vertical-align: top; +} + +/* Aligned Forms */ +.pure-form-aligned .pure-control-group { + margin-bottom: 0.5em; +} +.pure-form-aligned .pure-control-group label { + text-align: right; + display: inline-block; + vertical-align: middle; + width: 10em; + margin: 0 1em 0 0; +} +.pure-form-aligned .pure-controls { + margin: 1.5em 0 0 11em; +} + +/* Rounded Inputs */ +.pure-form input.pure-input-rounded, +.pure-form .pure-input-rounded { + border-radius: 2em; + padding: 0.5em 1em; +} + +/* Grouped Inputs */ +.pure-form .pure-group fieldset { + margin-bottom: 10px; +} +.pure-form .pure-group input, +.pure-form .pure-group textarea { + display: block; + padding: 10px; + margin: 0 0 -1px; + border-radius: 0; + position: relative; + top: -1px; +} +.pure-form .pure-group input:focus, +.pure-form .pure-group textarea:focus { + z-index: 3; +} +.pure-form .pure-group input:first-child, +.pure-form .pure-group textarea:first-child { + top: 1px; + border-radius: 4px 4px 0 0; + margin: 0; +} +.pure-form .pure-group input:first-child:last-child, +.pure-form .pure-group textarea:first-child:last-child { + top: 1px; + border-radius: 4px; + margin: 0; +} +.pure-form .pure-group input:last-child, +.pure-form .pure-group textarea:last-child { + top: -2px; + border-radius: 0 0 4px 4px; + margin: 0; +} +.pure-form .pure-group button { + margin: 0.35em 0; +} + +.pure-form .pure-input-1 { + width: 100%; +} +.pure-form .pure-input-3-4 { + width: 75%; +} +.pure-form .pure-input-2-3 { + width: 66%; +} +.pure-form .pure-input-1-2 { + width: 50%; +} +.pure-form .pure-input-1-3 { + width: 33%; +} +.pure-form .pure-input-1-4 { + width: 25%; +} + +/* Inline help for forms */ +/* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ +.pure-form .pure-help-inline, +.pure-form-message-inline { + display: inline-block; + padding-left: 0.3em; + color: #666; + vertical-align: middle; + font-size: 0.875em; +} + +/* Block help for forms */ +.pure-form-message { + display: block; + color: #666; + font-size: 0.875em; +} + +@media only screen and (max-width : 480px) { + .pure-form button[type="submit"] { + margin: 0.7em 0 0; + } + + .pure-form input:not([type]), + .pure-form input[type="text"], + .pure-form input[type="password"], + .pure-form input[type="email"], + .pure-form input[type="url"], + .pure-form input[type="date"], + .pure-form input[type="month"], + .pure-form input[type="time"], + .pure-form input[type="datetime"], + .pure-form input[type="datetime-local"], + .pure-form input[type="week"], + .pure-form input[type="number"], + .pure-form input[type="search"], + .pure-form input[type="tel"], + .pure-form input[type="color"], + .pure-form label { + margin-bottom: 0.3em; + display: block; + } + + .pure-group input:not([type]), + .pure-group input[type="text"], + .pure-group input[type="password"], + .pure-group input[type="email"], + .pure-group input[type="url"], + .pure-group input[type="date"], + .pure-group input[type="month"], + .pure-group input[type="time"], + .pure-group input[type="datetime"], + .pure-group input[type="datetime-local"], + .pure-group input[type="week"], + .pure-group input[type="number"], + .pure-group input[type="search"], + .pure-group input[type="tel"], + .pure-group input[type="color"] { + margin-bottom: 0; + } + + .pure-form-aligned .pure-control-group label { + margin-bottom: 0.3em; + text-align: left; + display: block; + width: 100%; + } + + .pure-form-aligned .pure-controls { + margin: 1.5em 0 0 0; + } + + /* NOTE: pure-help-inline is deprecated. Use .pure-form-message-inline instead. */ + .pure-form .pure-help-inline, + .pure-form-message-inline, + .pure-form-message { + display: block; + font-size: 0.75em; + /* Increased bottom padding to make it group with its related input element. */ + padding: 0.2em 0 0.8em; + } +} + +/*csslint adjoining-classes: false, box-model:false*/ +.pure-menu { + box-sizing: border-box; +} + +.pure-menu-fixed { + position: fixed; + left: 0; + top: 0; + z-index: 3; +} + +.pure-menu-list, +.pure-menu-item { + position: relative; +} + +.pure-menu-list { + list-style: none; + margin: 0; + padding: 0; +} + +.pure-menu-item { + padding: 0; + margin: 0; + height: 100%; +} + +.pure-menu-link, +.pure-menu-heading { + display: block; + text-decoration: none; + white-space: nowrap; +} + +/* HORIZONTAL MENU */ +.pure-menu-horizontal { + width: 100%; + white-space: nowrap; +} + +.pure-menu-horizontal .pure-menu-list { + display: inline-block; +} + +/* Initial menus should be inline-block so that they are horizontal */ +.pure-menu-horizontal .pure-menu-item, +.pure-menu-horizontal .pure-menu-heading, +.pure-menu-horizontal .pure-menu-separator { + display: inline-block; + *display: inline; + zoom: 1; + vertical-align: middle; +} + +/* Submenus should still be display: block; */ +.pure-menu-item .pure-menu-item { + display: block; +} + +.pure-menu-children { + display: none; + position: absolute; + left: 100%; + top: 0; + margin: 0; + padding: 0; + z-index: 3; +} + +.pure-menu-horizontal .pure-menu-children { + left: 0; + top: auto; + width: inherit; +} + +.pure-menu-allow-hover:hover > .pure-menu-children, +.pure-menu-active > .pure-menu-children { + display: block; + position: absolute; +} + +/* Vertical Menus - show the dropdown arrow */ +.pure-menu-has-children > .pure-menu-link:after { + padding-left: 0.5em; + content: "\25B8"; + font-size: small; +} + +/* Horizontal Menus - show the dropdown arrow */ +.pure-menu-horizontal .pure-menu-has-children > .pure-menu-link:after { + content: "\25BE"; +} + +/* scrollable menus */ +.pure-menu-scrollable { + overflow-y: scroll; + overflow-x: hidden; +} + +.pure-menu-scrollable .pure-menu-list { + display: block; +} + +.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list { + display: inline-block; +} + +.pure-menu-horizontal.pure-menu-scrollable { + white-space: nowrap; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: none; + -webkit-overflow-scrolling: touch; + /* a little extra padding for this style to allow for scrollbars */ + padding: .5em 0; +} + +.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar { + display: none; +} + +/* misc default styling */ + +.pure-menu-separator, +.pure-menu-horizontal .pure-menu-children .pure-menu-separator { + background-color: #ccc; + height: 1px; + margin: .3em 0; +} + +.pure-menu-horizontal .pure-menu-separator { + width: 1px; + height: 1.3em; + margin: 0 .3em ; +} + +/* Need to reset the separator since submenu is vertical */ +.pure-menu-horizontal .pure-menu-children .pure-menu-separator { + display: block; + width: auto; +} + +.pure-menu-heading { + text-transform: uppercase; + color: #565d64; +} + +.pure-menu-link { + color: #777; +} + +.pure-menu-children { + background-color: #fff; +} + +.pure-menu-link, +.pure-menu-disabled, +.pure-menu-heading { + padding: .5em 1em; +} + +.pure-menu-disabled { + opacity: .5; +} + +.pure-menu-disabled .pure-menu-link:hover { + background-color: transparent; +} + +.pure-menu-active > .pure-menu-link, +.pure-menu-link:hover, +.pure-menu-link:focus { + background-color: #eee; +} + +.pure-menu-selected .pure-menu-link, +.pure-menu-selected .pure-menu-link:visited { + color: #000; +} + +.pure-table { + /* Remove spacing between table cells (from Normalize.css) */ + border-collapse: collapse; + border-spacing: 0; + empty-cells: show; + border: 1px solid #cbcbcb; +} + +.pure-table caption { + color: #000; + font: italic 85%/1 arial, sans-serif; + padding: 1em 0; + text-align: center; +} + +.pure-table td, +.pure-table th { + border-left: 1px solid #cbcbcb;/* inner column border */ + border-width: 0 0 0 1px; + font-size: inherit; + margin: 0; + overflow: visible; /*to make ths where the title is really long work*/ + padding: 0.5em 1em; /* cell padding */ +} + +/* Consider removing this next declaration block, as it causes problems when +there's a rowspan on the first cell. Case added to the tests. issue#432 */ +.pure-table td:first-child, +.pure-table th:first-child { + border-left-width: 0; +} + +.pure-table thead { + background-color: #e0e0e0; + color: #000; + text-align: left; + vertical-align: bottom; +} + +/* +striping: + even - #fff (white) + odd - #f2f2f2 (light gray) +*/ +.pure-table td { + background-color: transparent; +} +.pure-table-odd td { + background-color: #f2f2f2; +} + +/* nth-child selector for modern browsers */ +.pure-table-striped tr:nth-child(2n-1) td { + background-color: #f2f2f2; +} + +/* BORDERED TABLES */ +.pure-table-bordered td { + border-bottom: 1px solid #cbcbcb; +} +.pure-table-bordered tbody > tr:last-child > td { + border-bottom-width: 0; +} + + +/* HORIZONTAL BORDERED TABLES */ + +.pure-table-horizontal td, +.pure-table-horizontal th { + border-width: 0 0 1px 0; + border-bottom: 1px solid #cbcbcb; +} +.pure-table-horizontal tbody > tr:last-child > td { + border-bottom-width: 0; +} DIR diff --git a/static/css/style.css b/static/css/style.css @@ -0,0 +1,17 @@ +/* =================================================================== */ + /* style.css for cl-yag */ +/* =================================================================== */ +@charset "utf-8"; + + +/* ~ PURE ~ */ +@import url("pure_r1.0.0/pure.css"); + + +/* ~ CLYM ~ */ +@import url("clym.css"); + + +/* ~ LAST ENTRY ~ */ +/* ~ use custom.css for overriding rules ~ */ +@import url("custom.css"); DIR diff --git a/templates/layout.tpl b/templates/layout.tpl @@ -5,7 +5,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="generator" content="cl-yag" /> <title>%%Title%%</title> - <link rel="stylesheet" type="text/css" href="static/css/style.css" /> + <link rel="stylesheet" type="text/css" href="static/css/style.css" media="screen" /> <link rel="alternate" type="application/rss+xml" title="%%Title%% RSS Feed" href="rss.xml" /> <!-- <link rel="alternate" type="application/atom+xml" title="%%Title%% Atom Feed" href="atom.xml" /> --> <link rel="icon" type="image/x-icon" href="static/img/clyagFav.ico" /> @@ -14,12 +14,12 @@ <body> <div id="wrapper"> <header> - <nav> - <!-- <a href="#">BRAND</a> --> - <ul> - <li><a href="index.html">Home</a></li> - <li><a href="index-titles.html">List of Articles</a></li> - <li><a href="rss.xml">RSS</a></li> + <nav class="pure-menu pure-menu-horizontal"> + <!--<a href="#"></a>--> + <ul class="pure-menu-list"> + <li class="pure-menu-item"><a href="index.html" class="pure-menu-link">Home</a></li> + <li class="pure-menu-item"><a href="index-titles.html" class="pure-menu-link">All Posts</a></li> + <li class="pure-menu-item"><a href="rss.xml" class="pure-menu-link">RSS</a></li> </ul> </nav> <div>All Tags: %%Tags%%</div> DIR diff --git a/templates/layout.tpl_original b/templates/layout.tpl_original @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> + <meta name="generator" content="cl-yag" /> + <title>%%Title%%</title> + <link rel="stylesheet" type="text/css" href="static/css/style.css" media="screen" /> + <link rel="alternate" type="application/rss+xml" title="%%Title%% RSS Feed" href="rss.xml" /> +<!-- <link rel="alternate" type="application/atom+xml" title="%%Title%% Atom Feed" href="atom.xml" /> --> + <link rel="icon" type="image/x-icon" href="static/img/clyagFav.ico" /> + </head> + + <body> + <div id="wrapper"> + <header> + <nav> + <!--<a href="#"></a>--> + <ul> + <li><a href="index.html">Home</a></li> + <li><a href="index-titles.html">All Posts</a></li> + <li><a href="rss.xml">RSS</a></li> + </ul> + </nav> + <div>All Tags: %%Tags%%</div> + </header> + + <main>%%Body%%</main> + + <footer><p>This blog is powered by cl-yag!<p></footer> + + </div><!-- #wrapper --> + </body> +</html>