├── .gitignore
├── .travis.yml
├── Dockerfile
├── LICENSE
├── README.md
├── bin
└── md2resume
├── build
└── update_readme.php
├── composer.json
├── composer.lock
├── examples
├── output
│ ├── EMPTY
│ ├── blockish.pdf
│ ├── modern.pdf
│ ├── readable.pdf
│ ├── swissen.pdf
│ └── unstyled.pdf
└── source
│ ├── sample.md
│ ├── sample_long.md
│ └── zhsample.md
├── phpunit.xml
├── src
└── Resume
│ ├── Cli
│ ├── Resume.php
│ └── TwigFormatters.php
│ ├── Command
│ ├── HtmlCommand.php
│ ├── PdfCommand.php
│ ├── StatsCommand.php
│ ├── TemplatesCommand.php
│ └── VersionCommand.php
│ └── Templates
│ ├── frequency.twig
│ └── templates.twig
├── templates
├── blockish
│ ├── css
│ │ ├── elements.less
│ │ ├── normalize.css
│ │ ├── pdf.css
│ │ ├── resume.css
│ │ └── screen.css
│ ├── description.txt
│ └── index.html
├── modern
│ ├── css
│ │ ├── elements.less
│ │ ├── normalize.css
│ │ ├── pdf.css
│ │ ├── resume.css
│ │ └── screen.css
│ ├── description.txt
│ └── index.html
├── readable
│ ├── css
│ │ └── resume.css
│ ├── description.txt
│ ├── index.html
│ └── links
│ │ └── bootswatch
├── roboto
│ ├── css
│ │ ├── elements.less
│ │ ├── normalize.css
│ │ ├── pdf.less
│ │ ├── resume.less
│ │ └── screen.less
│ ├── description.txt
│ └── index.html
├── swissen
│ ├── css
│ │ ├── elements.less
│ │ ├── normalize.css
│ │ ├── pdf.css
│ │ ├── resume.css
│ │ └── screen.css
│ ├── description.txt
│ └── index.html
└── unstyled
│ ├── css
│ ├── elements.less
│ ├── normalize.css
│ ├── pdf.css
│ ├── resume.css
│ └── screen.css
│ ├── description.txt
│ └── index.html
└── tests
├── ListCommandTest.php
├── VersionCommandTest.php
└── bootstrap.php
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | vendor
3 | examples/resume/_*.md
4 | examples/output/*.html
5 | examples/output/*.pdf
6 | .tmp_pdf_source.html
7 |
8 | # OSX files
9 | .DS_Store
10 | .AppleDouble
11 | .LSOverride
12 | Icon
13 |
14 | # Thumbnails
15 | ._*
16 |
17 | # Files that might appear on external disk
18 | .Spotlight-V100
19 | .Trashes
20 | *.sublime*
21 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - '7.1'
5 | - '7.2'
6 |
7 | install:
8 | - travis_retry composer self-update
9 | - travis_retry composer install --prefer-source --no-interaction --dev
10 |
11 | script:
12 | - composer test
13 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # Utilize multi-stage build to keep image size down
2 | FROM composer:2.0.4 as composer
3 | COPY composer.* ./
4 | RUN composer install --no-dev --optimize-autoloader --no-progress --no-suggest
5 |
6 | # Build the actual image
7 | FROM php:7.1
8 |
9 | ENV LC_ALL C.UTF-8
10 | WORKDIR /resume
11 | CMD ["/bin/bash"]
12 |
13 | RUN apt-get update \
14 | && apt-get install -qqy --no-install-recommends \
15 | # This is for enabling the program to be run with watch
16 | procps \
17 | # Required to run PDF generation
18 | wget apt-utils libjpeg62-turbo libxrender1 xfonts-75dpi xfonts-base fontconfig libxext6 \
19 | && apt-get autoremove \
20 | && rm -rf /var/lib/apt/lists/*
21 |
22 | RUN cd /root \
23 | && wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.stretch_amd64.deb --no-verbose \
24 | && dpkg -i wkhtmltox_0.12.6-1.stretch_amd64.deb
25 |
26 | # Enables continously calling a command and piping the output to STDOUT, viewable via docker logs
27 | RUN printf '#!/bin/bash\nwhile sleep 1; do\n "$@"\ndone' >> /usr/bin/watch-docker \
28 | && chmod +x /usr/bin/watch-docker
29 |
30 | COPY --from=composer /app/vendor /app/vendor
31 | COPY . /app
32 |
33 | RUN ln -s /app/bin/md2resume /usr/bin/md2resume
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Craig Davis
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Markdown Resume Generator [](https://travis-ci.org/there4/markdown-resume)[](https://registry.hub.docker.com/u/there4/markdown-resume/)
2 |
3 | > Convert markdown to HTML and PDF resumes
4 |
5 | Turn a simple Markdown document into an elegant resume with both a perfect
6 | pdf printable format, and a responsive css3 html5 file. You can view a sample
7 | at the [blog post for the project][blog], or look in examples/output to see sample PDFs.
8 |
9 | ## Features
10 |
11 | * Multiple styles to choose from: `modern`, `blockish`, `unstyled`, `readable`, `swissen` _(Fork and add more!)_
12 | * PDF generation via [wkhtmltopdf][wkhtmltopdf]
13 | * Responsive design for multiple device viewport sizes
14 | * Simple Markdown formatting
15 | * Single file deployment (no external stylesheets)
16 | * You can now version control and branch your resume.
17 |
18 | ## Installation
19 |
20 | ### Docker
21 |
22 | Run those commands in the directory where you put your markdown resume.
23 |
24 | #### Oneshot command
25 |
26 | This is best suited for use in scripts or in CI environments:
27 |
28 | `docker run -v ${PWD}:/resume there4/markdown-resume md2resume [options] command [arguments]`
29 |
30 | #### Interactive console
31 |
32 | This allows you to enter an interactive console where you can easily experiment and run different commands:
33 |
34 | `docker run -it -v ${PWD}:/resume there4/markdown-resume`
35 |
36 | ### Local
37 |
38 | 1. Clone the repo `git clone git@github.com:there4/markdown-resume.git` or [Download ZIP](https://github.com/there4/markdown-resume/archive/master.zip)
39 | 2. **PHP 7** and **[composer](https://getcomposer.org/download/)** are installed and on your PATH
40 | 3. `composer install` inside of the project directory to install dependencies
41 |
42 | 4. For generating PDF files, you need to install `wkhtmltopdf`
43 | * OSX: `brew cask install wkhtmltopdf` via [Homebrew Cask](https://caskroom.github.io/)
44 | * Debian: `sudo apt install php7.0-mbstring wkhtmltopdf`
45 | * Fedora `sudo dnf install php-mbstring wkhtmltopdf`
46 |
47 | ## Usage
48 |
49 | The two most important commands are the following two. Run them
50 | inside the cloned directory
51 |
52 | ```bash
53 | ./bin/md2resume html examples/source/sample.md examples/output/
54 | ./bin/md2resume pdf examples/source/sample.md examples/output/
55 | ```
56 |
57 | ## Help
58 |
59 | ```
60 | Markdown Resume Generator version 2.3.0 by Craig Davis
61 |
62 | Usage:
63 | [options] command [arguments]
64 |
65 | Options:
66 | --help -h Display this help message.
67 | --quiet -q Do not output any message.
68 | --verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
69 | --version -V Display this application version.
70 | --ansi Force ANSI output.
71 | --no-ansi Disable ANSI output.
72 | --no-interaction -n Do not ask any interactive question.
73 |
74 | Available commands:
75 | help Displays help for a command
76 | html Generate an HTML resume from a markdown file
77 | list Lists commands
78 | pdf Generate a PDF from a markdown file
79 | stats Generate a word frequency analysis of your resume
80 | templates List available templates
81 | version Show current version information
82 |
83 | ```
84 |
85 | ## Examples
86 |
87 | Choose a template with the -t option.
88 |
89 | ```bash
90 | ./bin/md2resume html --template blockish examples/source/sample.md examples/output/
91 | ```
92 |
93 | If you want to edit your markdown resume in your editor while watching it
94 | update in your browser, run this command:
95 |
96 | ```bash
97 | watch ./bin/md2resume html --refresh yes --template modern examples/source/sample.md examples/output/
98 | ```
99 |
100 | This makes the build script run periodically, and html document will refresh
101 | every two seconds via a meta tag. Open the `./examples/ouput/sample.html` file
102 | in your browser, and then just save your markdown document when you want to see
103 | a fresh preview.
104 |
105 | ## Authoring Your Resume
106 |
107 | Markdown is limited to basic html markup. Follow the `examples/source/sample.md`
108 | file as a guideline. This file includes various headers and several nested
109 | elements. This allows us to construct a semantic HTML document for the resume,
110 | and then use CSS rules to display a nicely formatted resume. Note that because
111 | we have very few ways to nest or identify elements that many of the css rules
112 | are based on descendant and adjacent selectors.
113 |
114 | ## Feature Development
115 |
116 | In order to add new commands, you'll need to first install the dependencies via `composer install`
117 |
118 | After that, you can run the `md2resume_dev.php` file from the command line.
119 |
120 | ## Building a Release
121 |
122 | 1. Tag the repo with the new build number.
123 | 2. Run `composer build`.
124 | 3. Push both the tag and the code.
125 |
126 | ## Acknowledgments
127 |
128 | The initial inspiration is from the [Sample Resume Template][srt].
129 | However, no HTML from that project has been used in this. General layout has
130 | been reused, and media queries have been added. It's a nice template, and if you
131 | are a more comfortable with html than markdown, you should use it.
132 |
133 | ## Changelog
134 |
135 | * __2.3.1__ : Fix embedded images in PDF generation with Docker [@danielklim](https://github.com/danielklim)
136 | * __2.3.0__ : Add Docker support to ease the installation process [@spawnia](https://github.com/spawnia)
137 | * __2.2.0__ : Dropped phar file distribution, removed Pake and migrated to composer commands
138 | * __2.1.0__ : Dropped PHP5 support
139 | * __2.0.12__ : Added new `Roboto` template from [@ejwaibel](https://github.com/ejwaibel)
140 | * __2.0.10__ : Updated spacing in moder template with commites from [@501st-alpha1](https://github.com/501st-alpha1)
141 | * __2.0.9__ : Updated Modern template with improved spacing. Update parsing of
142 | `--template` option to close [issue #7](https://github.com/there4/markdown-resume/issues/7)
143 | * __2.0.8__ : New `readable` theme contributed by @ahmadnazir, minor refactor
144 | to support a /links directory
145 | * __2.0.7__ : Update composer to use `sunra/php-simple-html-dom-parser` this
146 | appears to be better maintained and more popular to [close #27](https://github.com/there4/markdown-resume/issues/27)
147 | * __2.0.6__ : Fix empty template list from phar file to [close #24](https://github.com/there4/markdown-resume/issues/24)
148 | * __2.0.5__ : Remove default value for the `--refresh` option to [close #22](https://github.com/there4/markdown-resume/issues/22)
149 | * __2.0.4__ : Fix path resolution problem with absolute paths to [close #16](https://github.com/there4/markdown-resume/issues/16)
150 | * __2.0.3__ : Add optional duration to the `--refresh` option to [close #15](https://github.com/there4/markdown-resume/issues/15)
151 | * __2.0.2__ : Add new dependency check for `mbstring` to [close #20](https://github.com/there4/markdown-resume/issues/20)
152 | * __2.0.1__ : Add new `swissen` template with Helvetica styling [@beautifulcode](https://github.com/beautifulcode)
153 | * __2.0.0__ : Complete rewrite with the [symfony console component][console].
154 | Deployment is now done with a compiled phar file, and development dependencies
155 | are managed with composer.
156 | * __0.9.0__ : Add composer and update README with new changelog
157 | * __0.8.8__ : Add Chinese text example [@ishitcno1](https://github.com/ishitcno1)
158 | * __0.8.7__ : Update pdf formatting of the modern template [@roleary](https://github.com/roleary)
159 | * __0.8.6__ : Fix output path [@abhikandoi2000](https://github.com/abhikandoi2000)
160 | * __0.8.5__ : Fix [issue #2](https://github.com/there4/markdown-resume/issues/2)
161 | * __0.8.4__ : Correct chmod and add parameter for output directory [@kevinxucs](https://github.com/kevinxucs)
162 | * __0.8.2__ : Update build script and add refresh command option
163 | * __0.8.1__ : Updating formatting of initial templates
164 | * __0.8__ : Initial Release to Public
165 |
166 | [srt]: http://sampleresumetemplate.net/ "A great starting point"
167 | [blog]: http://there4development.com/blog/2012/12/31/markdown-resume-builder/
168 | [pake]: https://github.com/indeyets/pake/wiki/Installing-Pake
169 | [wkhtmltopdf]: https://github.com/pdfkit/pdfkit/wiki/Installing-WKHTMLTOPDF
170 | [console]: http://symfony.com/doc/current/components/console/introduction.html
171 |
--------------------------------------------------------------------------------
/bin/md2resume:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | add('Resume', $baseDir . '/src');
25 |
26 | // Instantiate our Console application
27 | $console = new Resume\Cli\Resume();
28 |
29 | // Fetch the version
30 | chdir($baseDir);
31 | $versionCmd = 'git describe --abbrev=0 --tags 2>/dev/null';
32 | $version = trim(shell_exec($versionCmd));
33 | chdir($cwd);
34 |
35 | // Fetch the project name and description
36 | $project = json_decode(file_get_contents(__DIR__ . '/../composer.json'));
37 | $project->version = $version;
38 |
39 | // Init the app with these params
40 | $console->initialize($templatePath, $consoleTemplatePath, $project);
41 |
42 | // Execute the console app.
43 | $console->run();
44 |
45 | /* End of resume.php */
46 |
--------------------------------------------------------------------------------
/build/update_readme.php:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | =7.1",
52 | "kriswallsmith/assetic": "1.1.2",
53 | "leafo/lessphp": "v0.4.0",
54 | "michelf/php-markdown": "1.4.0",
55 | "michelf/php-smartypants": "^1.8",
56 | "mustache/mustache": "2.5.1",
57 | "sunra/php-simple-html-dom-parser": "v1.5.0",
58 | "symfony/config": "v2.3.4",
59 | "symfony/console": "v2.3.4",
60 | "symfony/yaml": "v2.3.4",
61 | "twig/twig": "v1.13.2",
62 | "symfony/event-dispatcher": "^4.0@dev",
63 | "leafo/scssphp": "dev-master"
64 | },
65 | "bin": [
66 | "bin/md2resume"
67 | ],
68 | "require-dev": {
69 | "phpunit/phpunit": "^6.2",
70 | "squizlabs/php_codesniffer": "^3.0@dev",
71 | "jakub-onderka/php-parallel-lint": "dev-master",
72 | "jakub-onderka/php-console-highlighter": "dev-master"
73 | },
74 | "scripts": {
75 | "build": [
76 | "@lint",
77 | "@format",
78 | "@sniff",
79 | "@test",
80 | "@readme"
81 | ],
82 | "lint": "vendor/bin/parallel-lint --exclude app --exclude vendor .",
83 | "sniff": "vendor/bin/phpcs --standard=PSR2 -n --extensions=php src",
84 | "format": "vendor/bin/phpcbf --standard=PSR2 --extensions=php src",
85 | "readme": "build/update_readme.php",
86 | "test": "vendor/bin/phpunit"
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/examples/output/EMPTY:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/EMPTY
--------------------------------------------------------------------------------
/examples/output/blockish.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/blockish.pdf
--------------------------------------------------------------------------------
/examples/output/modern.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/modern.pdf
--------------------------------------------------------------------------------
/examples/output/readable.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/readable.pdf
--------------------------------------------------------------------------------
/examples/output/swissen.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/swissen.pdf
--------------------------------------------------------------------------------
/examples/output/unstyled.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/there4/markdown-resume/317f33e33c584be56c6c48fcf2deb211a7278075/examples/output/unstyled.pdf
--------------------------------------------------------------------------------
/examples/source/sample.md:
--------------------------------------------------------------------------------
1 | # Craig Davis
2 | ## Senior PHP Developer, UX Director
3 |
4 | > [Download PDF](resume.pdf)
5 | > [craig@there4development.com](craig@there4development.com)
6 | > (999) 888-7777
7 |
8 | ------
9 |
10 | ### Profile {#profile}
11 |
12 | Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
13 |
14 | ------
15 |
16 | ### Skills {#skills}
17 |
18 | * Web Design
19 | : Assertively exploit wireless initiatives rather than synergistic core competencies.
20 |
21 | * Interface Design
22 | : Credibly streamline mission-critical value with multifunctional functionalities.
23 |
24 | * Project Direction
25 | : Proven ability to lead and manage a wide variety of design and development projects in team and independent situations.
26 |
27 | -------
28 |
29 | ### Technical {#technical}
30 |
31 | 1. XHTML
32 | 1. CSS
33 | 1. Javascript
34 | 1. Jquery
35 | 1. PHP
36 | 1. CVS / Subversion
37 | 1. OS X
38 | 1. Windows XP/Vista
39 | 1. Linux
40 |
41 | ------
42 |
43 | ### Experience {#experience}
44 |
45 | Initrode Conglomerated
46 | : *Principal and Creative Lead*
47 | __2004-2005__
48 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
49 |
50 | Gizmonic Institute Company (GIM)
51 | : *Lead Web Designer*
52 | __2001-2004__
53 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
54 |
55 | ------
56 |
57 | ### Footer {#footer}
58 |
59 | Craig Davis -- [craig@there4development.com](craig@there4development.com) -- (999) 888-7777
60 |
61 | ------
62 |
--------------------------------------------------------------------------------
/examples/source/sample_long.md:
--------------------------------------------------------------------------------
1 | # Craig Davis
2 | ## Senior PHP Developer, UX Director
3 |
4 | > [Download PDF](resume.pdf)
5 | > [craig@there4development.com](craig@there4development.com)
6 | > (999) 888-7777
7 |
8 | ------
9 |
10 | ### Profile {#profile}
11 |
12 | Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
13 |
14 | ------
15 |
16 | ### Skills {#skills}
17 |
18 | * Web Design
19 | : Assertively exploit wireless initiatives rather than synergistic core competencies.
20 |
21 | * Interface Design
22 | : Credibly streamline mission-critical value with multifunctional functionalities.
23 |
24 | * Project Direction
25 | : Proven ability to lead and manage a wide variety of design and development projects in team and independent situations.
26 |
27 | -------
28 |
29 | ### Technical {#technical}
30 |
31 | 1. XHTML
32 | 1. CSS
33 | 1. Javascript
34 | 1. Jquery
35 | 1. PHP
36 | 1. CVS / Subversion
37 | 1. OS X
38 | 1. Windows XP/Vista
39 | 1. Linux
40 |
41 | ------
42 |
43 | ### Experience {#experience}
44 |
45 | Initrode Conglomerated
46 | : *Principal and Creative Lead*
47 | __2004-2005__
48 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
49 |
50 | Gizmonic Institute Company (GIM)
51 | : *Lead Web Designer*
52 | __2001-2004__
53 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
54 |
55 |
56 | Initrode Conglomerated
57 | : *Principal and Creative Lead*
58 | __2004-2005__
59 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
60 |
61 | Gizmonic Institute Company (GIM)
62 | : *Lead Web Designer*
63 | __2001-2004__
64 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
65 |
66 |
67 | Initrode Conglomerated
68 | : *Principal and Creative Lead*
69 | __2004-2005__
70 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
71 |
72 | Gizmonic Institute Company (GIM)
73 | : *Lead Web Designer*
74 | __2001-2004__
75 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
76 |
77 |
78 | Initrode Conglomerated
79 | : *Principal and Creative Lead*
80 | __2004-2005__
81 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
82 |
83 | Gizmonic Institute Company (GIM)
84 | : *Lead Web Designer*
85 | __2001-2004__
86 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
87 |
88 |
89 | Initrode Conglomerated
90 | : *Principal and Creative Lead*
91 | __2004-2005__
92 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
93 |
94 | Gizmonic Institute Company (GIM)
95 | : *Lead Web Designer*
96 | __2001-2004__
97 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
98 |
99 |
100 | Initrode Conglomerated
101 | : *Principal and Creative Lead*
102 | __2004-2005__
103 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
104 |
105 | Gizmonic Institute Company (GIM)
106 | : *Lead Web Designer*
107 | __2001-2004__
108 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
109 |
110 |
111 | Initrode Conglomerated
112 | : *Principal and Creative Lead*
113 | __2004-2005__
114 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
115 |
116 | Gizmonic Institute Company (GIM)
117 | : *Lead Web Designer*
118 | __2001-2004__
119 | Globally re-engineer cross-media schemas through viral methods of empowerment. Proactively grow long-term high-impact human capital and highly efficient innovation. Intrinsicly iterate excellent e-tailers with timely e-markets.
120 |
121 | ------
122 |
123 | ### Footer {#footer}
124 |
125 | Craig Davis -- [craig@there4development.com](craig@there4development.com) -- (999) 888-7777
126 |
127 | ------
128 |
--------------------------------------------------------------------------------
/examples/source/zhsample.md:
--------------------------------------------------------------------------------
1 | # 杜少陵
2 | ## 高级Android工程师
3 |
4 | > 浙江杭州,男,1989年
5 | > [email@example.com](email@example.com)
6 | > (+86) 101-2345-6789
7 |
8 | ------
9 |
10 | ### 简介 {#profile}
11 |
12 | 扎实的Java基础,富有激情与创意。
13 |
14 | ------
15 |
16 | ### 技能 {#skills}
17 |
18 | * Android开发
19 | : 三年Android开发经验。
20 |
21 | * 服务器端开发
22 | : 一年服务器端开发经验。
23 |
24 | -------
25 |
26 | ### 技术 {#technical}
27 |
28 | 1. Android
29 | 1. Java
30 | 1. C
31 | 1. Node.js
32 | 1. MongoDB
33 | 1. Git
34 | 1. Linux
35 | 1. html5 CSS3
36 | 1. JQuery
37 |
38 | ------
39 |
40 | ### 工作经验 {#experience}
41 |
42 | BBB信息技术有限公司
43 | : *Android高级工程师*
44 | __2012年至今__
45 | 工作详情说明
46 |
47 | AAA信息技术有限公司
48 | : *Android工程师*
49 | __2010年至年2012年__
50 | 工作详情说明
51 |
52 | ------
53 |
54 | ### 学历 {#degree}
55 |
56 | 学位
57 | : *学校专业*
58 | __2006年至2010年__
59 | 学位与学校说明
60 |
61 | ------
62 |
63 | ### Footer {#footer}
64 |
65 | Github: [https://github.com/username](https://github.com/username)
66 | Stack Overflow: [http://stackoverflow.com/users/id/username](http://stackoverflow.com/users/id/username)
67 |
68 | ------
69 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ./tests/
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/Resume/Cli/Resume.php:
--------------------------------------------------------------------------------
1 | project = $project;
23 |
24 | // The absolute path to the html output templates
25 | $this->templatePath = $templatePath;
26 |
27 | // https://github.com/symfony/Console/blob/master/Output/Output.php
28 | // the alternative is OutputInterface::OUTPUT_PLAIN;
29 | $this->outputFormat = OutputInterface::OUTPUT_NORMAL;
30 |
31 | // Exits on missing dependencies
32 | $this->checkDependencies();
33 |
34 | // We do this now because we've loaded the project info from the composer file
35 | $this->setName($this->project->description);
36 | $this->setVersion($this->project->version);
37 |
38 | // Load our commands into the application
39 | $this->add(new Command\HtmlCommand());
40 | $this->add(new Command\PdfCommand());
41 | $this->add(new Command\StatsCommand());
42 | $this->add(new Command\TemplatesCommand());
43 | $this->add(new Command\VersionCommand());
44 |
45 | // We'll use [Twig](http://twig.sensiolabs.org/) for template output
46 | $loader = new \Twig_Loader_Filesystem($consoleTemplatePath);
47 | $this->twig = new \Twig_Environment(
48 | $loader,
49 | array(
50 | "cache" => false,
51 | "autoescape" => false,
52 | "strict_variables" => false // SET TO TRUE WHILE DEBUGGING
53 | )
54 | );
55 |
56 | // These are helpers that we use to format output on the cli: styling and padding and such
57 | $this->twig->addFilter('pad', new \Twig_Filter_Function("Resume\Cli\TwigFormatters::strpad"));
58 | $this->twig->addFilter('style', new \Twig_Filter_Function("Resume\Cli\TwigFormatters::style"));
59 | $this->twig->addFilter('repeat', new \Twig_Filter_Function("str_repeat"));
60 | $this->twig->addFilter('wrap', new \Twig_Filter_Function("wordwrap"));
61 | }
62 |
63 | public function getLongVersion()
64 | {
65 | return parent::getLongVersion().' by Craig Davis';
66 | }
67 |
68 | public function checkDependencies()
69 | {
70 | $output = new ConsoleOutput();
71 | if (!extension_loaded('mbstring')) {
72 | $output->writeln(
73 | "\nMissing Dependency: Please install the Multibyte String Functions.\n" .
74 | "More help: http://www.php.net/manual/en/mbstring.installation.php\n",
75 | $this->outputFormat
76 | );
77 | exit(1);
78 | }
79 | }
80 |
81 | public function registerStyles(&$output)
82 | {
83 | // https://github.com/symfony/Console/blob/master/Formatter/OutputFormatterStyle.php
84 | // http://symfony.com/doc/2.0/components/console/introduction.html#coloring-the-output
85 | //
86 | // * green
87 | // * yellow
88 | // * black text on a cyan background
89 | // * yellow
90 | // * white text on a red background
91 | // * red text on a yellow background
92 | // * blue
93 | // * black on white
94 |
95 | $style = new OutputFormatterStyle('red', 'yellow', array('bold'));
96 | $output->getFormatter()->setStyle('fire', $style);
97 |
98 | $style = new OutputFormatterStyle('blue', 'black', array());
99 | $output->getFormatter()->setStyle('notice', $style);
100 |
101 | $style = new OutputFormatterStyle('red', 'black', array('bold'));
102 | $output->getFormatter()->setStyle('alert', $style);
103 |
104 | $style = new OutputFormatterStyle('white', 'black', array('bold'));
105 | $output->getFormatter()->setStyle('bold', $style);
106 |
107 | $style = new OutputFormatterStyle('black', 'white', array());
108 | $output->getFormatter()->setStyle('heading', $style);
109 |
110 | $style = new OutputFormatterStyle('blue', 'black', array('bold'));
111 | $output->getFormatter()->setStyle('logo', $style);
112 |
113 | return $output;
114 | }
115 |
116 | public function statusStyle($status)
117 | {
118 | switch (true) {
119 | case (strpos(strtolower($status), 'closed') === 0):
120 | return 'alert';
121 | case (strpos(strtolower($status), 'open') === 0):
122 | case (strpos(strtolower($status), 'active') === 0):
123 | return 'logo';
124 | // fallthrough to final return
125 | }
126 |
127 | return "info";
128 | }
129 |
130 | public function run(InputInterface $input = null, OutputInterface $output = null)
131 | {
132 | if (null === $input) {
133 | $input = new ArgvInput();
134 | }
135 |
136 | if (null === $output) {
137 | $output = new ConsoleOutput();
138 | }
139 |
140 | $this->registerStyles($output);
141 |
142 | // Did they supply a command name?
143 | $name = $this->getCommandName($input);
144 | if ($name) {
145 | // Does the command exist and is not ambiguous?
146 | try {
147 | $command = $this->find($name);
148 | } catch (\Exception $e) {
149 | exit($e->getMessage() . "\n");
150 | }
151 | }
152 |
153 | return parent::run($input, $output);
154 | }
155 | }
156 |
157 | /* End of file Resume.php */
158 |
--------------------------------------------------------------------------------
/src/Resume/Cli/TwigFormatters.php:
--------------------------------------------------------------------------------
1 | this is a long title
22 | $total_length = strlen($string);
23 | $stripped_length = strlen(strip_tags($string));
24 |
25 | $length = $length + $total_length - $stripped_length;
26 |
27 | return str_pad(substr($string, 0, $length), $length, " ", $padding);
28 | }
29 |
30 | public static function style($string, $format)
31 | {
32 | return sprintf('<%2$s>%1$s%2$s>', $string, $format);
33 | }
34 | }
35 |
36 | /* End of file TwigFormatters */
37 |
--------------------------------------------------------------------------------
/src/Resume/Command/HtmlCommand.php:
--------------------------------------------------------------------------------
1 | setName('html')
23 | ->setDescription('Generate an HTML resume from a markdown file')
24 | ->addArgument(
25 | 'source',
26 | InputArgument::REQUIRED,
27 | 'Source markdown document'
28 | )
29 | ->addArgument(
30 | 'destination',
31 | InputArgument::REQUIRED,
32 | 'Output destination folder'
33 | )
34 | ->addOption(
35 | 'template',
36 | 't',
37 | InputOption::VALUE_REQUIRED,
38 | 'Which of the templates to use. Use an absolute path for a custom template.'
39 | )
40 | ->addOption(
41 | 'refresh',
42 | 'r',
43 | InputOption::VALUE_REQUIRED,
44 | 'Regenerate the html and include a meta command to refresh the ' .
45 | 'document every periodically. Measured in seconds.'
46 | )
47 | ->addOption(
48 | 'output',
49 | 'o',
50 | InputOption::VALUE_REQUIRED,
51 | 'The optional override of default filename to output to'
52 | );
53 | }
54 |
55 | protected function execute(InputInterface $input, OutputInterface $output)
56 | {
57 | $this->app = $this->getApplication();
58 | $source = $input->getArgument('source');
59 | $sourceName = pathinfo($source, PATHINFO_FILENAME);
60 | $destination = rtrim($input->getArgument('destination'), DIRECTORY_SEPARATOR);
61 | $template = $input->getOption('template');
62 | $refresh = $input->getOption('refresh');
63 | $optFilename = $input->getOption('output');
64 | $destFilename = "";
65 |
66 | if ($optFilename) {
67 | $destFilename = $destination . DIRECTORY_SEPARATOR . $optFilename . '.html';
68 | } else {
69 | $destFilename = $destination . DIRECTORY_SEPARATOR . $sourceName . '.html';
70 | }
71 |
72 | $rendered = $this->generateHtml($source, $template, $refresh);
73 | file_put_contents($destFilename, $rendered);
74 | $output->writeln(
75 | sprintf(
76 | 'Wrote resume to: %s',
77 | $destFilename
78 | ),
79 | $this->app->outputFormat
80 | );
81 |
82 | return true;
83 | }
84 |
85 | protected function generateContent($templatePath, $contentType)
86 | {
87 | // We build these into a single string so that we can deploy this resume as a
88 | // single file.
89 | $assetPath = join(DIRECTORY_SEPARATOR, array($templatePath, $contentType));
90 |
91 | if (!file_exists($assetPath)) {
92 | return '';
93 | }
94 |
95 | $assets = array();
96 |
97 | // Our PHAR deployment can't handle the GlobAsset typically used here
98 | foreach (new \DirectoryIterator($assetPath) as $fileInfo) {
99 | if ($fileInfo->isDot() || !$fileInfo->isFile()) {
100 | continue;
101 | }
102 | array_push($assets, new FileAsset($fileInfo->getPathname()));
103 | }
104 |
105 | usort($assets, function (FileAsset $a, FileAsset $b) {
106 | return strcmp($a->getSourcePath(), $b->getSourcePath());
107 | });
108 |
109 | $collection = new AssetCollection(
110 | $assets
111 | );
112 |
113 | switch ($contentType) {
114 | case 'css':
115 | $collection->ensureFilter(new Filter\LessphpFilter());
116 | break;
117 | }
118 |
119 | return $collection->dump();
120 | }
121 |
122 | protected function generateHtml($source, $template, $refresh)
123 | {
124 | // Check that the source file is sane
125 | if (!file_exists($source)) {
126 | throw new \Exception("Unable to open source file: $source");
127 | }
128 |
129 | // Check that our template is sane, or set to the default one
130 | if (!$template) {
131 | $template = $this->app->defaultTemplate;
132 | }
133 |
134 | if (strpos($template, DIRECTORY_SEPARATOR) !== false) {
135 | $templatePath = realpath($template);
136 | } else {
137 | $templatePath = join(DIRECTORY_SEPARATOR, array($this->app->templatePath, basename($template)));
138 | }
139 |
140 | $templateIndexPath = join(DIRECTORY_SEPARATOR, array($templatePath, 'index.html'));
141 |
142 | if (!file_exists($templateIndexPath)) {
143 | throw new \Exception("Unable to open template file: $templateIndexPath");
144 | }
145 |
146 | $style = $this->generateContent($templatePath, 'css');
147 |
148 | $links = $this->generateContent($templatePath, 'links');
149 |
150 | $templateContent = file_get_contents($templateIndexPath);
151 | $resumeContent = file_get_contents($source);
152 |
153 | // Process with Markdown, and then use SmartyPants to clean up punctuation.
154 | $resumeHtml = MarkdownExtra::defaultTransform($resumeContent);
155 | $resumeHtml = SmartyPants::defaultTransform($resumeHtml);
156 |
157 | // Construct the title for the html document from the h1 and h2 tags
158 | $simpleDom = HtmlDomParser::str_get_html($resumeHtml);
159 | $title = sprintf(
160 | '%s | %s',
161 | $simpleDom->find('h1', 0)->innertext,
162 | $simpleDom->find('h2', 0)->innertext
163 | );
164 |
165 | // Render the Markdown into an html file with Mustache Templates
166 | $m = new \Mustache_Engine;
167 | $rendered = $m->render($templateContent, array(
168 | 'title' => $title,
169 | 'style' => $style,
170 | 'links' => $links,
171 | 'resume' => $resumeHtml,
172 | 'reload' => (bool) $refresh,
173 | 'refresh_rate' => $refresh
174 | ));
175 |
176 | return $rendered;
177 | }
178 |
179 | protected function determineOutfile($outputFilename)
180 | {
181 | return join(DIRECTORY_SEPARATOR, array($destination, pathinfo($source, PATHINFO_FILENAME) . '.html'));
182 | }
183 | }
184 |
185 | /* End of file HtmlCommand.php */
186 |
--------------------------------------------------------------------------------
/src/Resume/Command/PdfCommand.php:
--------------------------------------------------------------------------------
1 | setName('pdf')
17 | ->setDescription('Generate a PDF from a markdown file')
18 | ->addArgument(
19 | 'source',
20 | InputArgument::REQUIRED,
21 | 'Source markdown document'
22 | )
23 | ->addArgument(
24 | 'destination',
25 | InputArgument::REQUIRED,
26 | 'Output destination folder'
27 | )
28 | ->addOption(
29 | 'template',
30 | 't',
31 | InputOption::VALUE_REQUIRED,
32 | 'Which of the templates to use'
33 | )
34 | ->addOption(
35 | 'htmlonly',
36 | 'H',
37 | InputOption::VALUE_NONE,
38 | 'Only render interim HTML (don\'t run wkhtmltopdf)'
39 | )
40 | ->addOption(
41 | 'keephtml',
42 | 'k',
43 | InputOption::VALUE_NONE,
44 | 'Keep interim HTML'
45 | )
46 | ->addOption(
47 | 'pdfargs',
48 | 'p',
49 | InputOption::VALUE_REQUIRED,
50 | 'Passthrough arguments for wkhtmltopdf',
51 | '--dpi 300 -s Letter'
52 | )
53 | ->addOption(
54 | 'output',
55 | 'o',
56 | InputOption::VALUE_REQUIRED,
57 | 'The optional override of default filename to output to'
58 | );
59 | }
60 |
61 | protected function execute(InputInterface $input, OutputInterface $output)
62 | {
63 | $this->app = $this->getApplication();
64 | $source = $input->getArgument('source');
65 | $sourceName = pathinfo($source, PATHINFO_FILENAME);
66 | $destination = rtrim($input->getArgument('destination'), DIRECTORY_SEPARATOR);
67 | $template = $input->getOption('template');
68 | $pdfSource = join(DIRECTORY_SEPARATOR, array($destination, '.tmp_pdf_source.html'));
69 | $optFilename = $input->getOption('output');
70 | $htmlonly = $input->getOption('htmlonly');
71 | $keephtml = $input->getOption('keephtml');
72 | $pdfargs = $input->getOption('pdfargs');
73 |
74 | $destFilename = join(DIRECTORY_SEPARATOR, array($destination, pathinfo($source, PATHINFO_FILENAME) . '.pdf'));
75 |
76 | if ($optFilename) {
77 | $destFilename = $destination . DIRECTORY_SEPARATOR . $optFilename . '.pdf';
78 | } else {
79 | $destFilename = $destination . DIRECTORY_SEPARATOR . $sourceName . '.pdf';
80 | }
81 | // Make sure we've got out converter available
82 | exec('wkhtmltopdf -V', $results, $returnVal);
83 | if ($returnVal) {
84 | $output->writeln(
85 | "\nError: Unable to locate wkhtmltopdf.\n" .
86 | " Please make sure that it is installed and available in " .
87 | "your path. \n For installation help, please read: " .
88 | "https://github.com/pdfkit/pdfkit/wiki/Installing-WKHTMLTOPDF \n\n",
89 | $this->app->outputFormat
90 | );
91 |
92 | return false;
93 | }
94 |
95 | $rendered = $this->generateHtml($source, $template, false);
96 |
97 | // The pdf needs some extra css rules, and so we'll add them here
98 | // to our html document
99 | $simpleDom = HtmlDomParser::str_get_html($rendered);
100 | $body = $simpleDom->find('body', 0);
101 | $body->class = $body->class . ' pdf';
102 | $rendered = (string) $simpleDom;
103 |
104 | // Save to a temp destination for the pdf renderer to use
105 | file_put_contents($pdfSource, $rendered);
106 |
107 | // command that will be invoked to convert html to pdf
108 | $cmd = "wkhtmltopdf $pdfargs $pdfSource $destFilename";
109 |
110 | // Process the document with wkhtmltopdf
111 | if(!$htmlonly)
112 | exec($cmd);
113 |
114 | // Unlink the temporary file
115 | if(!($htmlonly || $keephtml))
116 | unlink($pdfSource);
117 | else
118 | $output->writeln(
119 | sprintf(
120 | "Keeping interim HTML: %s",
121 | $pdfSource
122 | ),
123 | $this->app->outputFormat
124 | );
125 |
126 | $output->writeln(
127 | sprintf(
128 | "Wrote pdf resume to: %s",
129 | $destFilename
130 | ),
131 | $this->app->outputFormat
132 | );
133 |
134 | return true;
135 | }
136 | }
137 |
138 | /* End of file PdfCommand.php */
139 |
--------------------------------------------------------------------------------
/src/Resume/Command/StatsCommand.php:
--------------------------------------------------------------------------------
1 | setName('stats')
15 | ->setDescription('Generate a word frequency analysis of your resume')
16 | ->addArgument(
17 | 'source',
18 | InputArgument::REQUIRED,
19 | 'Source markdown document'
20 | );
21 | }
22 |
23 | protected function execute(InputInterface $input, OutputInterface $output)
24 | {
25 | $this->app = $this->getApplication();
26 | $source = $input->getArgument('source');
27 |
28 | $text = file_get_contents($source);
29 | $text = $this->stripCommon($text);
30 | $analysis = array(
31 | 'single' => $this->buildStats($text, 1),
32 | 'double' => $this->buildStats($text, 2),
33 | 'triple' => $this->buildStats($text, 3),
34 | );
35 |
36 | $template = $this->app->twig->loadTemplate('frequency.twig');
37 | $view = $template->render($analysis);
38 | $output->write($view, true, $this->app->outputFormat);
39 |
40 | return true;
41 | }
42 |
43 | private function stripCommon($content)
44 | {
45 | $content = preg_replace("/(,|\"|\.|\?|:|!|;|#|-|>|{|\*| - )/", " ", $content);
46 | $content = preg_replace("/\n/", " ", $content);
47 | $content = preg_replace("/\s\s+/", " ", $content);
48 | $content = explode(" ", $content);
49 |
50 | return $content;
51 | }
52 |
53 | // source: https://github.com/benbalter/Frequency-Analysis/blob/master/frequency-analysis.php
54 | private function buildStats($input, $num)
55 | {
56 | $results = array();
57 |
58 | foreach ($input as $key => $word) {
59 | $phrase = '';
60 |
61 | //look for every n-word pattern and tally counts in array
62 | for ($i=0; $i < $num; $i++) {
63 | if ($i != 0) {
64 | $phrase .= ' ';
65 | }
66 | if (!empty($input[$key+$i])) {
67 | $phrase .= strtolower($input[$key+$i]);
68 | }
69 | }
70 | if (!isset($results[$phrase])) {
71 | $results[$phrase] = 1;
72 | } else {
73 | $results[$phrase]++;
74 | }
75 | }
76 | if ($num == 1) {
77 | //clean boring words
78 | $a = explode(
79 | " ",
80 | "the of and to a in that it is was i for on you he be with as by " .
81 | "at have are this not but had his they from she which or we an there " .
82 | "her were one do been all their has would will what if can when so my"
83 | );
84 | foreach ($a as $banned) {
85 | unset($results[$banned]);
86 | }
87 | }
88 |
89 | //sort, clean, return
90 | array_multisort($results, SORT_DESC);
91 | unset($results[""]);
92 |
93 | return $results;
94 | }
95 | }
96 |
97 | /* End of file StatsCommand.php */
98 |
--------------------------------------------------------------------------------
/src/Resume/Command/TemplatesCommand.php:
--------------------------------------------------------------------------------
1 | setName('templates')
14 | ->setDescription('List available templates');
15 | }
16 |
17 | protected function execute(InputInterface $input, OutputInterface $output)
18 | {
19 | $this->app = $this->getApplication();
20 | $tplData = array('templates' => array());
21 | foreach (new \DirectoryIterator($this->app->templatePath) as $fileInfo) {
22 | if ($fileInfo->isDot() || !$fileInfo->isDir()) {
23 | continue;
24 | }
25 | $descriptionPath = $fileInfo->getPathname() . '/description.txt';
26 | print $descriptionPath . "\n";
27 | $tplData['templates'][] = (object) array(
28 | 'name' => $fileInfo->getBasename(),
29 | 'description' => file_exists($descriptionPath)
30 | ? trim(file_get_contents($descriptionPath))
31 | : 'No description available'
32 | );
33 | }
34 | $template = $this->app->twig->loadTemplate('templates.twig');
35 | $view = $template->render($tplData);
36 | $output->write($view, true, $this->app->outputFormat);
37 | }
38 | }
39 |
40 | /* End of file TemplatesCommand.php */
41 |
--------------------------------------------------------------------------------
/src/Resume/Command/VersionCommand.php:
--------------------------------------------------------------------------------
1 | setName('version')
14 | ->setDescription('Show current version information');
15 | }
16 |
17 | protected function execute(InputInterface $input, OutputInterface $output)
18 | {
19 | $this->app = $this->getApplication();
20 | $output->writeln($this->app->project->version, $this->app->outputFormat);
21 | }
22 | }
23 |
24 | /* End of file VersionCommand.php */
25 |
--------------------------------------------------------------------------------
/src/Resume/Templates/frequency.twig:
--------------------------------------------------------------------------------
1 | ————————————————————————————————————————————————————————————————————————————————
2 | Word Frequency Analysis
3 | ————————————————————————————————————————————————————————————————————————————————
4 |
5 | Triple Word Phrases:
6 | {% for phrase, frequency in triple %}
7 | {% if frequency > 1%}
8 | {{frequency|style("info")|pad(3, "right")}} {{phrase}}
9 | {% endif %}
10 | {% endfor %}
11 |
12 | Double Word Phrases:
13 | {% for phrase, frequency in double %}
14 | {% if frequency > 1%}
15 | {{frequency|style("info")|pad(3, "right")}} {{phrase}}
16 | {% endif %}
17 | {% endfor %}
18 |
19 | Single Words:
20 | {% for phrase, frequency in single %}
21 | {% if frequency > 1%}
22 | {{frequency|style("info")|pad(3, "right")}} {{phrase}}
23 | {% endif %}
24 | {% endfor %}
25 |
--------------------------------------------------------------------------------
/src/Resume/Templates/templates.twig:
--------------------------------------------------------------------------------
1 | ————————————————————————————————————————————————————————————————————————————————
2 | Available Templates
3 | ————————————————————————————————————————————————————————————————————————————————
4 | {% for template in templates %}
5 | {{template.name|style("info")|pad(15, "left")}}{{template.description}}
6 | {% endfor %}
7 | {% if templates|length == 0%}
8 | There are no templates available
9 | {% endif %}
10 |
--------------------------------------------------------------------------------
/templates/blockish/css/elements.less:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------
2 | LESS Elements 0.6
3 | ---------------------------------------------------
4 | A set of useful LESS mixins by Dmitry Fadeyev
5 | Special thanks for mixin suggestions to:
6 | Kris Van Herzeele,
7 | Benoit Adam,
8 | Portenart Emile-Victor,
9 | Ryan Faerman
10 |
11 | More info at: http://lesselements.com
12 | -----------------------------------------------------*/
13 |
14 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
15 | background: @color;
16 | background: -webkit-gradient(linear,
17 | left bottom,
18 | left top,
19 | color-stop(0, @start),
20 | color-stop(1, @stop));
21 | background: -ms-linear-gradient(bottom,
22 | @start,
23 | @stop);
24 | background: -moz-linear-gradient(center bottom,
25 | @start 0%,
26 | @stop 100%);
27 | }
28 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
29 | background: @color;
30 | background: -webkit-gradient(linear,
31 | left bottom,
32 | left top,
33 | color-stop(0, rgb(@start,@start,@start)),
34 | color-stop(1, rgb(@stop,@stop,@stop)));
35 | background: -ms-linear-gradient(bottom,
36 | rgb(@start,@start,@start) 0%,
37 | rgb(@start,@start,@start) 100%);
38 | background: -moz-linear-gradient(center bottom,
39 | rgb(@start,@start,@start) 0%,
40 | rgb(@stop,@stop,@stop) 100%);
41 | }
42 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43 | border-top: solid 1px @top-color;
44 | border-left: solid 1px @left-color;
45 | border-right: solid 1px @right-color;
46 | border-bottom: solid 1px @bottom-color;
47 | }
48 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52 | }
53 | .rounded(@radius: 2px) {
54 | -webkit-border-radius: @radius;
55 | -moz-border-radius: @radius;
56 | border-radius: @radius;
57 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
58 | }
59 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
60 | -webkit-border-top-right-radius: @topright;
61 | -webkit-border-bottom-right-radius: @bottomright;
62 | -webkit-border-bottom-left-radius: @bottomleft;
63 | -webkit-border-top-left-radius: @topleft;
64 | -moz-border-radius-topright: @topright;
65 | -moz-border-radius-bottomright: @bottomright;
66 | -moz-border-radius-bottomleft: @bottomleft;
67 | -moz-border-radius-topleft: @topleft;
68 | border-top-right-radius: @topright;
69 | border-bottom-right-radius: @bottomright;
70 | border-bottom-left-radius: @bottomleft;
71 | border-top-left-radius: @topleft;
72 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
73 | }
74 | .opacity(@opacity: 0.5) {
75 | -moz-opacity: @opacity;
76 | -khtml-opacity: @opacity;
77 | -webkit-opacity: @opacity;
78 | opacity: @opacity;
79 | }
80 | .transition-duration(@duration: 0.2s) {
81 | -moz-transition-duration: @duration;
82 | -webkit-transition-duration: @duration;
83 | transition-duration: @duration;
84 | }
85 | .rotation(@deg:5deg){
86 | -webkit-transform: rotate(@deg);
87 | -moz-transform: rotate(@deg);
88 | transform: rotate(@deg);
89 | }
90 | .scale(@ratio:1.5){
91 | -webkit-transform:scale(@ratio);
92 | -moz-transform:scale(@ratio);
93 | transform:scale(@ratio);
94 | }
95 | .transition(@duration:0.2s, @ease:ease-out) {
96 | -webkit-transition: all @duration @ease;
97 | -moz-transition: all @duration @ease;
98 | transition: all @duration @ease;
99 | }
100 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
101 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
104 | }
105 | .box-shadow(@arguments) {
106 | -webkit-box-shadow: @arguments;
107 | -moz-box-shadow: @arguments;
108 | box-shadow: @arguments;
109 | }
110 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
111 | -moz-column-width: @colwidth;
112 | -moz-column-count: @colcount;
113 | -moz-column-gap: @colgap;
114 | -moz-column-rule-color: @columnRuleColor;
115 | -moz-column-rule-style: @columnRuleStyle;
116 | -moz-column-rule-width: @columnRuleWidth;
117 | -webkit-column-width: @colwidth;
118 | -webkit-column-count: @colcount;
119 | -webkit-column-gap: @colgap;
120 | -webkit-column-rule-color: @columnRuleColor;
121 | -webkit-column-rule-style: @columnRuleStyle;
122 | -webkit-column-rule-width: @columnRuleWidth;
123 | column-width: @colwidth;
124 | column-count: @colcount;
125 | column-gap: @colgap;
126 | column-rule-color: @columnRuleColor;
127 | column-rule-style: @columnRuleStyle;
128 | column-rule-width: @columnRuleWidth;
129 | }
130 | .translate(@x:0, @y:0) {
131 | -moz-transform: translate(@x, @y);
132 | -webkit-transform: translate(@x, @y);
133 | -o-transform: translate(@x, @y);
134 | -ms-transform: translate(@x, @y);
135 | transform: translate(@x, @y);
136 | }
137 |
--------------------------------------------------------------------------------
/templates/blockish/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | /*
8 | * Corrects block display not defined in IE6/7/8/9 & FF3
9 | */
10 |
11 | article,
12 | aside,
13 | details,
14 | figcaption,
15 | figure,
16 | footer,
17 | header,
18 | hgroup,
19 | nav,
20 | section,
21 | summary {
22 | display: block;
23 | }
24 |
25 | /*
26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
27 | */
28 |
29 | audio,
30 | canvas,
31 | video {
32 | display: inline-block;
33 | *display: inline;
34 | *zoom: 1;
35 | }
36 |
37 | /*
38 | * Prevents modern browsers from displaying 'audio' without controls
39 | */
40 |
41 | audio:not([controls]) {
42 | display: none;
43 | }
44 |
45 | /*
46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
47 | * Known issue: no IE6 support
48 | */
49 |
50 | [hidden] {
51 | display: none;
52 | }
53 |
54 |
55 | /* =============================================================================
56 | Base
57 | ========================================================================== */
58 |
59 | /*
60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
61 | * http://clagnut.com/blog/348/#c790
62 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
63 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
64 | */
65 |
66 | html {
67 | font-size: 100%; /* 1 */
68 | -webkit-text-size-adjust: 100%; /* 2 */
69 | -ms-text-size-adjust: 100%; /* 2 */
70 | }
71 |
72 | /*
73 | * Addresses font-family inconsistency between 'textarea' and other form elements.
74 | */
75 |
76 | html,
77 | button,
78 | input,
79 | select,
80 | textarea {
81 | font-family: sans-serif;
82 | }
83 |
84 | /*
85 | * Addresses margins handled incorrectly in IE6/7
86 | */
87 |
88 | body {
89 | margin: 0;
90 | }
91 |
92 |
93 | /* =============================================================================
94 | Links
95 | ========================================================================== */
96 |
97 | /*
98 | * Addresses outline displayed oddly in Chrome
99 | */
100 |
101 | a:focus {
102 | outline: thin dotted;
103 | }
104 |
105 | /*
106 | * Improves readability when focused and also mouse hovered in all browsers
107 | * people.opera.com/patrickl/experiments/keyboard/test
108 | */
109 |
110 | a:hover,
111 | a:active {
112 | outline: 0;
113 | }
114 |
115 |
116 | /* =============================================================================
117 | Typography
118 | ========================================================================== */
119 |
120 | /*
121 | * Addresses font sizes and margins set differently in IE6/7
122 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
123 | */
124 |
125 | h1 {
126 | font-size: 2em;
127 | margin: 0.67em 0;
128 | }
129 |
130 | h2 {
131 | font-size: 1.5em;
132 | margin: 0.83em 0;
133 | }
134 |
135 | h3 {
136 | font-size: 1.17em;
137 | margin: 1em 0;
138 | }
139 |
140 | h4 {
141 | font-size: 1em;
142 | margin: 1.33em 0;
143 | }
144 |
145 | h5 {
146 | font-size: 0.83em;
147 | margin: 1.67em 0;
148 | }
149 |
150 | h6 {
151 | font-size: 0.75em;
152 | margin: 2.33em 0;
153 | }
154 |
155 | /*
156 | * Addresses styling not present in IE7/8/9, S5, Chrome
157 | */
158 |
159 | abbr[title] {
160 | border-bottom: 1px dotted;
161 | }
162 |
163 | /*
164 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
165 | */
166 |
167 | b,
168 | strong {
169 | font-weight: bold;
170 | }
171 |
172 | blockquote {
173 | margin: 1em 40px;
174 | }
175 |
176 | /*
177 | * Addresses styling not present in S5, Chrome
178 | */
179 |
180 | dfn {
181 | font-style: italic;
182 | }
183 |
184 | /*
185 | * Addresses styling not present in IE6/7/8/9
186 | */
187 |
188 | mark {
189 | background: #ff0;
190 | color: #000;
191 | }
192 |
193 | /*
194 | * Addresses margins set differently in IE6/7
195 | */
196 |
197 | p,
198 | pre {
199 | margin: 1em 0;
200 | }
201 |
202 | /*
203 | * Corrects font family set oddly in IE6, S4/5, Chrome
204 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
205 | */
206 |
207 | pre,
208 | code,
209 | kbd,
210 | samp {
211 | font-family: monospace, serif;
212 | _font-family: 'courier new', monospace;
213 | font-size: 1em;
214 | }
215 |
216 | /*
217 | * Improves readability of pre-formatted text in all browsers
218 | */
219 |
220 | pre {
221 | white-space: pre;
222 | white-space: pre-wrap;
223 | word-wrap: break-word;
224 | }
225 |
226 | /*
227 | * 1. Addresses CSS quotes not supported in IE6/7
228 | * 2. Addresses quote property not supported in S4
229 | */
230 |
231 | /* 1 */
232 |
233 | q {
234 | quotes: none;
235 | }
236 |
237 | /* 2 */
238 |
239 | q:before,
240 | q:after {
241 | content: '';
242 | content: none;
243 | }
244 |
245 | small {
246 | font-size: 75%;
247 | }
248 |
249 | /*
250 | * Prevents sub and sup affecting line-height in all browsers
251 | * gist.github.com/413930
252 | */
253 |
254 | sub,
255 | sup {
256 | font-size: 75%;
257 | line-height: 0;
258 | position: relative;
259 | vertical-align: baseline;
260 | }
261 |
262 | sup {
263 | top: -0.5em;
264 | }
265 |
266 | sub {
267 | bottom: -0.25em;
268 | }
269 |
270 |
271 | /* =============================================================================
272 | Lists
273 | ========================================================================== */
274 |
275 | /*
276 | * Addresses margins set differently in IE6/7
277 | */
278 |
279 | dl,
280 | menu,
281 | ol,
282 | ul {
283 | margin: 1em 0;
284 | }
285 |
286 | dd {
287 | margin: 0 0 0 40px;
288 | }
289 |
290 | /*
291 | * Addresses paddings set differently in IE6/7
292 | */
293 |
294 | menu,
295 | ol,
296 | ul {
297 | padding: 0 0 0 40px;
298 | }
299 |
300 | /*
301 | * Corrects list images handled incorrectly in IE7
302 | */
303 |
304 | nav ul,
305 | nav ol {
306 | list-style: none;
307 | list-style-image: none;
308 | }
309 |
310 |
311 | /* =============================================================================
312 | Embedded content
313 | ========================================================================== */
314 |
315 | /*
316 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
317 | * 2. Improves image quality when scaled in IE7
318 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
319 | */
320 |
321 | img {
322 | border: 0; /* 1 */
323 | -ms-interpolation-mode: bicubic; /* 2 */
324 | }
325 |
326 | /*
327 | * Corrects overflow displayed oddly in IE9
328 | */
329 |
330 | svg:not(:root) {
331 | overflow: hidden;
332 | }
333 |
334 |
335 | /* =============================================================================
336 | Figures
337 | ========================================================================== */
338 |
339 | /*
340 | * Addresses margin not present in IE6/7/8/9, S5, O11
341 | */
342 |
343 | figure {
344 | margin: 0;
345 | }
346 |
347 |
348 | /* =============================================================================
349 | Forms
350 | ========================================================================== */
351 |
352 | /*
353 | * Corrects margin displayed oddly in IE6/7
354 | */
355 |
356 | form {
357 | margin: 0;
358 | }
359 |
360 | /*
361 | * Define consistent border, margin, and padding
362 | */
363 |
364 | fieldset {
365 | border: 1px solid #c0c0c0;
366 | margin: 0 2px;
367 | padding: 0.35em 0.625em 0.75em;
368 | }
369 |
370 | /*
371 | * 1. Corrects color not being inherited in IE6/7/8/9
372 | * 2. Corrects text not wrapping in FF3
373 | * 3. Corrects alignment displayed oddly in IE6/7
374 | */
375 |
376 | legend {
377 | border: 0; /* 1 */
378 | padding: 0;
379 | white-space: normal; /* 2 */
380 | *margin-left: -7px; /* 3 */
381 | }
382 |
383 | /*
384 | * 1. Corrects font size not being inherited in all browsers
385 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
386 | * 3. Improves appearance and consistency in all browsers
387 | */
388 |
389 | button,
390 | input,
391 | select,
392 | textarea {
393 | font-size: 100%; /* 1 */
394 | margin: 0; /* 2 */
395 | vertical-align: baseline; /* 3 */
396 | *vertical-align: middle; /* 3 */
397 | }
398 |
399 | /*
400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
401 | */
402 |
403 | button,
404 | input {
405 | line-height: normal; /* 1 */
406 | }
407 |
408 | /*
409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
410 | * 2. Corrects inability to style clickable 'input' types in iOS
411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
412 | * Known issue: inner spacing remains in IE6
413 | */
414 |
415 | button,
416 | input[type="button"],
417 | input[type="reset"],
418 | input[type="submit"] {
419 | cursor: pointer; /* 1 */
420 | -webkit-appearance: button; /* 2 */
421 | *overflow: visible; /* 3 */
422 | }
423 |
424 | /*
425 | * Re-set default cursor for disabled elements
426 | */
427 |
428 | button[disabled],
429 | input[disabled] {
430 | cursor: default;
431 | }
432 |
433 | /*
434 | * 1. Addresses box sizing set to content-box in IE8/9
435 | * 2. Removes excess padding in IE8/9
436 | * 3. Removes excess padding in IE7
437 | Known issue: excess padding remains in IE6
438 | */
439 |
440 | input[type="checkbox"],
441 | input[type="radio"] {
442 | box-sizing: border-box; /* 1 */
443 | padding: 0; /* 2 */
444 | *height: 13px; /* 3 */
445 | *width: 13px; /* 3 */
446 | }
447 |
448 | /*
449 | * 1. Addresses appearance set to searchfield in S5, Chrome
450 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
451 | */
452 |
453 | input[type="search"] {
454 | -webkit-appearance: textfield; /* 1 */
455 | -moz-box-sizing: content-box;
456 | -webkit-box-sizing: content-box; /* 2 */
457 | box-sizing: content-box;
458 | }
459 |
460 | /*
461 | * Removes inner padding and search cancel button in S5, Chrome on OS X
462 | */
463 |
464 | input[type="search"]::-webkit-search-decoration,
465 | input[type="search"]::-webkit-search-cancel-button {
466 | -webkit-appearance: none;
467 | }
468 |
469 | /*
470 | * Removes inner padding and border in FF3+
471 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
472 | */
473 |
474 | button::-moz-focus-inner,
475 | input::-moz-focus-inner {
476 | border: 0;
477 | padding: 0;
478 | }
479 |
480 | /*
481 | * 1. Removes default vertical scrollbar in IE6/7/8/9
482 | * 2. Improves readability and alignment in all browsers
483 | */
484 |
485 | textarea {
486 | overflow: auto; /* 1 */
487 | vertical-align: top; /* 2 */
488 | }
489 |
490 |
491 | /* =============================================================================
492 | Tables
493 | ========================================================================== */
494 |
495 | /*
496 | * Remove most spacing between table cells
497 | */
498 |
499 | table {
500 | border-collapse: collapse;
501 | border-spacing: 0;
502 | }
--------------------------------------------------------------------------------
/templates/blockish/css/pdf.css:
--------------------------------------------------------------------------------
1 | body.pdf {
2 | color: black;
3 | background: none;
4 |
5 | a {
6 | text-decoration: none;
7 | color: black;
8 | }
9 | .container {
10 | width: 1000px;
11 | margin: 0 auto;
12 | padding: 0;
13 | background: none;
14 | border: none;
15 | border-width: 8px 0 2px 0;
16 | text-align: left;
17 | }
18 |
19 | .resume {
20 | position:relative;
21 | padding: 40px 80px;
22 |
23 | -webkit-box-shadow: none;
24 | box-shadow: none;
25 | }
26 |
27 | a[href$='.pdf'] {
28 | display: none;
29 | }
30 |
31 | h1 {
32 | letter-spacing: 0;
33 | margin-top: 0;
34 | font-size: 48px;
35 | text-transform: uppercase;
36 | font-weight: normal;
37 | }
38 | h2 {
39 | letter-spacing: 0;
40 | text-transform: uppercase;
41 | font-style: italic;
42 | font-weight: normal;
43 | }
44 | h3 {
45 | float: left;
46 | width: 16%;
47 | font-style: normal;
48 | }
49 | h3+p {
50 | float: left;
51 | width: 84%;
52 | }
53 |
54 | blockquote {
55 | top: 45px;
56 | right: 50px;
57 | position: absolute;
58 | }
59 | blockquote a {
60 | color: #F7F2C7;
61 | }
62 |
63 | ul li {
64 | width: 28%;
65 | float: left;
66 | }
67 | ul dl {
68 | margin: 0;
69 | padding: 0.3em 0 0;
70 | dt {
71 | font-size: 122%;
72 | font-weight: normal;
73 | margin: 0 0 .75em;
74 | }
75 | dd {
76 | padding: 0 4em 0 0;
77 | }
78 | }
79 |
80 | ol {
81 | float: left;
82 | width: 84%;
83 | margin: .7em 0 0;
84 | }
85 |
86 | ol li {
87 | width: 33%;
88 | margin: 0;
89 | }
90 | ol li:nth-child(3n) {
91 | width: 34%;
92 | }
93 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
94 | border-top: none;
95 | }
96 |
97 | dl {
98 | margin: .7em 0 0;
99 | dt {
100 | }
101 | dd {
102 | }
103 | strong {
104 | float: right;
105 | margin-top: -2em;
106 | }
107 | em {
108 | font-size: 130%;
109 | font-style: normal;
110 | }
111 |
112 | }
113 |
114 | }
--------------------------------------------------------------------------------
/templates/blockish/css/resume.css:
--------------------------------------------------------------------------------
1 | @headerBackground: #2D6FC7;
2 | @headerColor: #F7F2C7;
3 |
4 | .clearfix {
5 | zoom: 1;
6 | &:after {
7 | display: block;
8 | visibility: hidden;
9 | height: 0;
10 | clear: both;
11 | content: ".";
12 | }
13 | }
14 |
15 | body {
16 | font-family: Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif;
17 | color: #444;
18 | background: #fff url(data:image/png;base64,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);
19 | }
20 |
21 | h1, h2, h3, h4 {
22 | font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
23 | color: @headerBackground;
24 | }
25 |
26 | .container {
27 | margin: 0 auto;
28 | padding: 0;
29 | background: #ffffff;
30 | text-align: left;
31 | }
32 |
33 | .resume {
34 | position:relative;
35 | padding: 10px 20px;
36 |
37 | -webkit-box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, .2);
38 | box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, .2);
39 | }
40 |
41 | a {
42 | color: #375AC5;
43 | }
44 |
45 | blockquote, blockquote a {
46 | color: @headerColor;
47 | background: @headerBackground;
48 | }
49 |
50 | a[href$='.pdf'] {
51 | display: inline-block;
52 | background: #F79A1D;
53 | border: 1px solid #BE7D1D;
54 | color: white;
55 | padding: 6px 12px;
56 | margin-bottom: 6px;
57 | text-decoration: none;
58 | -webkit-box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, .2);
59 | box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, .2);
60 | -webkit-border-radius: 3px;
61 | -moz-border-radius: 3px;
62 | border-radius: 3px;
63 | }
64 |
65 | blockquote {
66 | margin: 0;
67 | padding: 0;
68 | line-height: 1.4em;
69 | }
70 |
71 | hr {
72 | display: block;
73 | position: relative;
74 | padding: 0;
75 | margin: 18px auto;
76 | width: 100%;
77 | clear: both;
78 | border: none;
79 | font-size: 1px;
80 | line-height: 0;
81 | overflow: visible;
82 | page-break-after: avoid;
83 | }
84 |
85 | h1 {
86 | margin: -40px -50px 0;
87 | padding: 40px 0 0 30px;
88 | font-size: 36px;
89 | letter-spacing: -1px;
90 | font-weight: 900;
91 | text-transform: uppercase;
92 | background: @headerBackground;
93 | border-top: 5px solid #333333;
94 | color: #FFFFFF;
95 |
96 | -webkit-border-top-left-radius: 5px;
97 | -webkit-border-top-right-radius: 5px;
98 | -moz-border-radius-topleft: 5px;
99 | -moz-border-radius-topright: 5px;
100 | border-top-left-radius: 5px;
101 | border-top-right-radius: 5px;
102 |
103 | }
104 | h2 {
105 | background: @headerBackground;
106 | margin: -10px -50px 0;
107 | padding: 0 0 40px 33px;
108 | font-size: 18px;
109 | letter-spacing: -1px;
110 | font-weight: normal;
111 | color: #F7F2C7;
112 | }
113 |
114 | h3 {
115 | margin: 0;
116 | padding: 0 0 .5em;
117 | font-size: 150%;
118 | font-style: italic;
119 | font-weight: normal;
120 | }
121 |
122 | blockquote+hr {
123 | display: none;
124 | }
125 |
126 | h3+p {
127 | margin: .6em 0 16px;
128 | padding: 0;
129 | display: block;
130 | font-size: 104%;
131 | line-height: 24px;
132 | }
133 |
134 | ul {
135 | margin: 0;
136 | padding: 0;
137 | list-style: none;
138 | }
139 | ul li {
140 | margin: 0;
141 | padding: 0;
142 | }
143 |
144 | ul dl {
145 | margin: .3em 0 0;
146 | padding: 0;
147 | width: 100%;
148 | dt {
149 | font-size: 100%;
150 | }
151 | dd {
152 | margin: 0 0 1em;
153 | padding: 0 2em 0 0;
154 | font-size: .8em;
155 | line-height: 1.5em;
156 | }
157 | }
158 |
159 | ol {
160 | margin: 0;
161 | padding: 0 0 .75em;
162 | width: 84%;
163 | display: inline-block;
164 | }
165 |
166 | ol li {
167 | margin: 0 0 0 1em;
168 | padding: 0;
169 | border-top: 1px solid #CCCCCC;
170 | width: 100%;
171 | float: left;
172 | list-style: none;
173 | line-height: 24px;
174 | font-size: 14px;
175 | }
176 | ol li:nth-child(1) {
177 | border-top: none;
178 | }
179 |
180 | dl {
181 | display: inline-block;
182 | width: 75%;
183 | margin: 0;
184 | padding: 0;
185 | dt {
186 | margin: 0;
187 | padding: 0;
188 | font-size: 140%;
189 | }
190 | dd {
191 | margin: 0 0 1.5em;
192 | padding: 0;
193 | font-size: 80%;
194 | line-height: 1.4em;
195 | }
196 | strong {
197 | display: block;
198 | }
199 | em {
200 | display: block;
201 | font-size: 110%;
202 | margin: .15em 0 .5em;
203 | font-style: bold;
204 | }
205 |
206 | }
207 |
208 |
209 | #footer {
210 | display: none;
211 | }
212 |
213 | #footer + p {
214 | width: 100%;
215 | font-size: 11px;
216 | text-align: center;
217 | }
218 |
--------------------------------------------------------------------------------
/templates/blockish/css/screen.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | Mobile layout
5 | 240–479 px
6 | Zoomed out below 320 px
7 | */
8 |
9 | @media screen and (min-width: 15em) {
10 | h1 {
11 | padding: 40px 0 0 40px;
12 | }
13 | h2 {
14 | padding: 0 30px 0 43px;
15 | }
16 | blockquote {
17 | margin: -20px -20px 10px;
18 | padding: 10px 20px 10px;
19 | }
20 | #profile+p {
21 | width: 100%;
22 | margin: 0 -10px;
23 | padding: 10px;
24 | }
25 | }
26 |
27 |
28 | /*
29 | Wide mobile layout
30 | 480-767 px
31 | Zoomed in above 480 px
32 | */
33 |
34 | @media screen and (min-width: 30em) {
35 |
36 | h1 {
37 | margin: -40px -50px 0;
38 | padding: 40px 0 0 40px;
39 | font-size: 36px;
40 | letter-spacing: -1px;
41 | font-weight: 900;
42 | text-transform: uppercase;
43 | background: @headerBackground;
44 | border-top: 5px solid #333333;
45 | color: #FFFFFF;
46 | }
47 | h2 {
48 | background: @headerBackground;
49 | margin: -10px -50px 0;
50 | padding: 0 0 40px 43px;
51 | font-size: 18px;
52 | letter-spacing: -1px;
53 | font-weight: normal;
54 | color: #F7F2C7;
55 | }
56 | blockquote {
57 | margin-top: -50px;
58 | }
59 | }
60 |
61 |
62 | /*
63 | Tablet layout
64 | 600-911 px
65 | Zoomed in above 600 px
66 | */
67 |
68 | @media screen and (min-width: 37.5em) {
69 | body {
70 | padding: 20px 0;
71 | }
72 | blockquote {
73 | top: 10px;
74 | right: 50px;
75 | position: absolute;
76 | padding-bottom: 0;
77 | }
78 | h1 { /* Open up the top section height so we don't collapse on the blockquote */
79 | margin-top: -30px;
80 | padding-left: 40px;
81 | }
82 | h2 {
83 | padding-bottom: 55px;
84 | padding-left: 43px;
85 | }
86 | ol {
87 | margin: 0 0 0 1em;
88 | }
89 | ol li {
90 | width: 50%;
91 | margin: 0;
92 | }
93 | ol li:nth-child(1), ol li:nth-child(2) {
94 | border-top: none;
95 | }
96 |
97 | blockquote {
98 | margin-top: -10px;
99 | }
100 | }
101 |
102 |
103 | /*
104 | Widescreen layout
105 | 912-1887 px
106 | Zoomed in above 912 px
107 | */
108 |
109 | @media screen and (min-width: 57em) {
110 | .container {
111 | width: 912px;
112 | }
113 | .resume {
114 | position:relative;
115 | padding: 40px 50px;
116 | }
117 | blockquote {
118 | top: 40px;
119 | right: 50px;
120 | position: absolute;
121 | }
122 | h1 {
123 | font-size: 48px;
124 | margin-top: -45px;
125 | }
126 | h2 {
127 | text-transform: uppercase;
128 | letter-spacing: 1px;
129 | font-weight: normal;
130 | }
131 |
132 | h3 {
133 | float: left;
134 | width: 16%;
135 | }
136 |
137 | h3+p {
138 | float: left;
139 | width: 84%;
140 | }
141 |
142 |
143 |
144 | ul li {
145 | width: 28%;
146 | float: left;
147 | }
148 | ul dl {
149 | dt {
150 | font-size: 122%;
151 | font-weight: normal;
152 | margin-bottom: .75em;
153 | }
154 | dd {
155 | padding: 0 4em 0 0;
156 | }
157 | }
158 |
159 | ol {
160 | float: left;
161 | width: 84%;
162 | margin: .6em 0 0;
163 | }
164 |
165 | ol li {
166 | width: 33%;
167 | margin: 0;
168 | }
169 | ol li:nth-child(3n) {
170 | width: 34%;
171 | }
172 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
173 | border-top: none;
174 | }
175 |
176 | dl {
177 | margin: .5em 0 0;
178 | dt {
179 | }
180 | dd {
181 | }
182 | strong {
183 | float: right;
184 | margin-top: -2em;
185 | }
186 | em {
187 | font-size: 130%;
188 | font-style: normal;
189 | }
190 |
191 | }
192 |
193 |
194 | #profile {
195 | display: none;
196 | }
197 |
198 | #profile+p {
199 | padding: 5px 300px 20px 33px;
200 | margin: -30px -50px 20px;
201 | width: (912px - 300px - 33px);
202 | float: none;
203 | background: #2D6FC7;
204 | color: #F7F2C7;
205 | font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
206 | font-weight: 100;
207 | }
208 |
209 | }
210 |
211 |
212 | /*
213 | Huge-screen layout
214 | 1888-2520 px
215 | Zoomed in above 1920 px
216 | */
217 |
218 | @media screen and (min-width: 118em) {
219 |
220 |
221 | }
--------------------------------------------------------------------------------
/templates/blockish/description.txt:
--------------------------------------------------------------------------------
1 | Blocky and bold colors
2 |
--------------------------------------------------------------------------------
/templates/blockish/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{title}}
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{{resume}}}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/templates/modern/css/elements.less:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------
2 | LESS Elements 0.6
3 | ---------------------------------------------------
4 | A set of useful LESS mixins by Dmitry Fadeyev
5 | Special thanks for mixin suggestions to:
6 | Kris Van Herzeele,
7 | Benoit Adam,
8 | Portenart Emile-Victor,
9 | Ryan Faerman
10 |
11 | More info at: http://lesselements.com
12 | -----------------------------------------------------*/
13 |
14 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
15 | background: @color;
16 | background: -webkit-gradient(linear,
17 | left bottom,
18 | left top,
19 | color-stop(0, @start),
20 | color-stop(1, @stop));
21 | background: -ms-linear-gradient(bottom,
22 | @start,
23 | @stop);
24 | background: -moz-linear-gradient(center bottom,
25 | @start 0%,
26 | @stop 100%);
27 | }
28 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
29 | background: @color;
30 | background: -webkit-gradient(linear,
31 | left bottom,
32 | left top,
33 | color-stop(0, rgb(@start,@start,@start)),
34 | color-stop(1, rgb(@stop,@stop,@stop)));
35 | background: -ms-linear-gradient(bottom,
36 | rgb(@start,@start,@start) 0%,
37 | rgb(@start,@start,@start) 100%);
38 | background: -moz-linear-gradient(center bottom,
39 | rgb(@start,@start,@start) 0%,
40 | rgb(@stop,@stop,@stop) 100%);
41 | }
42 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43 | border-top: solid 1px @top-color;
44 | border-left: solid 1px @left-color;
45 | border-right: solid 1px @right-color;
46 | border-bottom: solid 1px @bottom-color;
47 | }
48 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52 | }
53 | .rounded(@radius: 2px) {
54 | -webkit-border-radius: @radius;
55 | -moz-border-radius: @radius;
56 | border-radius: @radius;
57 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
58 | }
59 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
60 | -webkit-border-top-right-radius: @topright;
61 | -webkit-border-bottom-right-radius: @bottomright;
62 | -webkit-border-bottom-left-radius: @bottomleft;
63 | -webkit-border-top-left-radius: @topleft;
64 | -moz-border-radius-topright: @topright;
65 | -moz-border-radius-bottomright: @bottomright;
66 | -moz-border-radius-bottomleft: @bottomleft;
67 | -moz-border-radius-topleft: @topleft;
68 | border-top-right-radius: @topright;
69 | border-bottom-right-radius: @bottomright;
70 | border-bottom-left-radius: @bottomleft;
71 | border-top-left-radius: @topleft;
72 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
73 | }
74 | .opacity(@opacity: 0.5) {
75 | -moz-opacity: @opacity;
76 | -khtml-opacity: @opacity;
77 | -webkit-opacity: @opacity;
78 | opacity: @opacity;
79 | }
80 | .transition-duration(@duration: 0.2s) {
81 | -moz-transition-duration: @duration;
82 | -webkit-transition-duration: @duration;
83 | transition-duration: @duration;
84 | }
85 | .rotation(@deg:5deg){
86 | -webkit-transform: rotate(@deg);
87 | -moz-transform: rotate(@deg);
88 | transform: rotate(@deg);
89 | }
90 | .scale(@ratio:1.5){
91 | -webkit-transform:scale(@ratio);
92 | -moz-transform:scale(@ratio);
93 | transform:scale(@ratio);
94 | }
95 | .transition(@duration:0.2s, @ease:ease-out) {
96 | -webkit-transition: all @duration @ease;
97 | -moz-transition: all @duration @ease;
98 | transition: all @duration @ease;
99 | }
100 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
101 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
104 | }
105 | .box-shadow(@arguments) {
106 | -webkit-box-shadow: @arguments;
107 | -moz-box-shadow: @arguments;
108 | box-shadow: @arguments;
109 | }
110 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
111 | -moz-column-width: @colwidth;
112 | -moz-column-count: @colcount;
113 | -moz-column-gap: @colgap;
114 | -moz-column-rule-color: @columnRuleColor;
115 | -moz-column-rule-style: @columnRuleStyle;
116 | -moz-column-rule-width: @columnRuleWidth;
117 | -webkit-column-width: @colwidth;
118 | -webkit-column-count: @colcount;
119 | -webkit-column-gap: @colgap;
120 | -webkit-column-rule-color: @columnRuleColor;
121 | -webkit-column-rule-style: @columnRuleStyle;
122 | -webkit-column-rule-width: @columnRuleWidth;
123 | column-width: @colwidth;
124 | column-count: @colcount;
125 | column-gap: @colgap;
126 | column-rule-color: @columnRuleColor;
127 | column-rule-style: @columnRuleStyle;
128 | column-rule-width: @columnRuleWidth;
129 | }
130 | .translate(@x:0, @y:0) {
131 | -moz-transform: translate(@x, @y);
132 | -webkit-transform: translate(@x, @y);
133 | -o-transform: translate(@x, @y);
134 | -ms-transform: translate(@x, @y);
135 | transform: translate(@x, @y);
136 | }
137 |
--------------------------------------------------------------------------------
/templates/modern/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | /*
8 | * Corrects block display not defined in IE6/7/8/9 & FF3
9 | */
10 |
11 | article,
12 | aside,
13 | details,
14 | figcaption,
15 | figure,
16 | footer,
17 | header,
18 | hgroup,
19 | nav,
20 | section,
21 | summary {
22 | display: block;
23 | }
24 |
25 | /*
26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
27 | */
28 |
29 | audio,
30 | canvas,
31 | video {
32 | display: inline-block;
33 | *display: inline;
34 | *zoom: 1;
35 | }
36 |
37 | /*
38 | * Prevents modern browsers from displaying 'audio' without controls
39 | */
40 |
41 | audio:not([controls]) {
42 | display: none;
43 | }
44 |
45 | /*
46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
47 | * Known issue: no IE6 support
48 | */
49 |
50 | [hidden] {
51 | display: none;
52 | }
53 |
54 |
55 | /* =============================================================================
56 | Base
57 | ========================================================================== */
58 |
59 | /*
60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
61 | * http://clagnut.com/blog/348/#c790
62 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
63 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
64 | */
65 |
66 | html {
67 | font-size: 100%; /* 1 */
68 | -webkit-text-size-adjust: 100%; /* 2 */
69 | -ms-text-size-adjust: 100%; /* 2 */
70 | }
71 |
72 | /*
73 | * Addresses font-family inconsistency between 'textarea' and other form elements.
74 | */
75 |
76 | html,
77 | button,
78 | input,
79 | select,
80 | textarea {
81 | font-family: sans-serif;
82 | }
83 |
84 | /*
85 | * Addresses margins handled incorrectly in IE6/7
86 | */
87 |
88 | body {
89 | margin: 0;
90 | }
91 |
92 |
93 | /* =============================================================================
94 | Links
95 | ========================================================================== */
96 |
97 | /*
98 | * Addresses outline displayed oddly in Chrome
99 | */
100 |
101 | a:focus {
102 | outline: thin dotted;
103 | }
104 |
105 | /*
106 | * Improves readability when focused and also mouse hovered in all browsers
107 | * people.opera.com/patrickl/experiments/keyboard/test
108 | */
109 |
110 | a:hover,
111 | a:active {
112 | outline: 0;
113 | }
114 |
115 |
116 | /* =============================================================================
117 | Typography
118 | ========================================================================== */
119 |
120 | /*
121 | * Addresses font sizes and margins set differently in IE6/7
122 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
123 | */
124 |
125 | h1 {
126 | font-size: 2em;
127 | margin: 0.67em 0;
128 | }
129 |
130 | h2 {
131 | font-size: 1.5em;
132 | margin: 0.83em 0;
133 | }
134 |
135 | h3 {
136 | font-size: 1.17em;
137 | margin: 1em 0;
138 | }
139 |
140 | h4 {
141 | font-size: 1em;
142 | margin: 1.33em 0;
143 | }
144 |
145 | h5 {
146 | font-size: 0.83em;
147 | margin: 1.67em 0;
148 | }
149 |
150 | h6 {
151 | font-size: 0.75em;
152 | margin: 2.33em 0;
153 | }
154 |
155 | /*
156 | * Addresses styling not present in IE7/8/9, S5, Chrome
157 | */
158 |
159 | abbr[title] {
160 | border-bottom: 1px dotted;
161 | }
162 |
163 | /*
164 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
165 | */
166 |
167 | b,
168 | strong {
169 | font-weight: bold;
170 | }
171 |
172 | blockquote {
173 | margin: 1em 40px;
174 | }
175 |
176 | /*
177 | * Addresses styling not present in S5, Chrome
178 | */
179 |
180 | dfn {
181 | font-style: italic;
182 | }
183 |
184 | /*
185 | * Addresses styling not present in IE6/7/8/9
186 | */
187 |
188 | mark {
189 | background: #ff0;
190 | color: #000;
191 | }
192 |
193 | /*
194 | * Addresses margins set differently in IE6/7
195 | */
196 |
197 | p,
198 | pre {
199 | margin: 1em 0;
200 | }
201 |
202 | /*
203 | * Corrects font family set oddly in IE6, S4/5, Chrome
204 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
205 | */
206 |
207 | pre,
208 | code,
209 | kbd,
210 | samp {
211 | font-family: monospace, serif;
212 | _font-family: 'courier new', monospace;
213 | font-size: 1em;
214 | }
215 |
216 | /*
217 | * Improves readability of pre-formatted text in all browsers
218 | */
219 |
220 | pre {
221 | white-space: pre;
222 | white-space: pre-wrap;
223 | word-wrap: break-word;
224 | }
225 |
226 | /*
227 | * 1. Addresses CSS quotes not supported in IE6/7
228 | * 2. Addresses quote property not supported in S4
229 | */
230 |
231 | /* 1 */
232 |
233 | q {
234 | quotes: none;
235 | }
236 |
237 | /* 2 */
238 |
239 | q:before,
240 | q:after {
241 | content: '';
242 | content: none;
243 | }
244 |
245 | small {
246 | font-size: 75%;
247 | }
248 |
249 | /*
250 | * Prevents sub and sup affecting line-height in all browsers
251 | * gist.github.com/413930
252 | */
253 |
254 | sub,
255 | sup {
256 | font-size: 75%;
257 | line-height: 0;
258 | position: relative;
259 | vertical-align: baseline;
260 | }
261 |
262 | sup {
263 | top: -0.5em;
264 | }
265 |
266 | sub {
267 | bottom: -0.25em;
268 | }
269 |
270 |
271 | /* =============================================================================
272 | Lists
273 | ========================================================================== */
274 |
275 | /*
276 | * Addresses margins set differently in IE6/7
277 | */
278 |
279 | dl,
280 | menu,
281 | ol,
282 | ul {
283 | margin: 1em 0;
284 | }
285 |
286 | dd {
287 | margin: 0 0 0 40px;
288 | }
289 |
290 | /*
291 | * Addresses paddings set differently in IE6/7
292 | */
293 |
294 | menu,
295 | ol,
296 | ul {
297 | padding: 0 0 0 40px;
298 | }
299 |
300 | /*
301 | * Corrects list images handled incorrectly in IE7
302 | */
303 |
304 | nav ul,
305 | nav ol {
306 | list-style: none;
307 | list-style-image: none;
308 | }
309 |
310 |
311 | /* =============================================================================
312 | Embedded content
313 | ========================================================================== */
314 |
315 | /*
316 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
317 | * 2. Improves image quality when scaled in IE7
318 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
319 | */
320 |
321 | img {
322 | border: 0; /* 1 */
323 | -ms-interpolation-mode: bicubic; /* 2 */
324 | }
325 |
326 | /*
327 | * Corrects overflow displayed oddly in IE9
328 | */
329 |
330 | svg:not(:root) {
331 | overflow: hidden;
332 | }
333 |
334 |
335 | /* =============================================================================
336 | Figures
337 | ========================================================================== */
338 |
339 | /*
340 | * Addresses margin not present in IE6/7/8/9, S5, O11
341 | */
342 |
343 | figure {
344 | margin: 0;
345 | }
346 |
347 |
348 | /* =============================================================================
349 | Forms
350 | ========================================================================== */
351 |
352 | /*
353 | * Corrects margin displayed oddly in IE6/7
354 | */
355 |
356 | form {
357 | margin: 0;
358 | }
359 |
360 | /*
361 | * Define consistent border, margin, and padding
362 | */
363 |
364 | fieldset {
365 | border: 1px solid #c0c0c0;
366 | margin: 0 2px;
367 | padding: 0.35em 0.625em 0.75em;
368 | }
369 |
370 | /*
371 | * 1. Corrects color not being inherited in IE6/7/8/9
372 | * 2. Corrects text not wrapping in FF3
373 | * 3. Corrects alignment displayed oddly in IE6/7
374 | */
375 |
376 | legend {
377 | border: 0; /* 1 */
378 | padding: 0;
379 | white-space: normal; /* 2 */
380 | *margin-left: -7px; /* 3 */
381 | }
382 |
383 | /*
384 | * 1. Corrects font size not being inherited in all browsers
385 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
386 | * 3. Improves appearance and consistency in all browsers
387 | */
388 |
389 | button,
390 | input,
391 | select,
392 | textarea {
393 | font-size: 100%; /* 1 */
394 | margin: 0; /* 2 */
395 | vertical-align: baseline; /* 3 */
396 | *vertical-align: middle; /* 3 */
397 | }
398 |
399 | /*
400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
401 | */
402 |
403 | button,
404 | input {
405 | line-height: normal; /* 1 */
406 | }
407 |
408 | /*
409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
410 | * 2. Corrects inability to style clickable 'input' types in iOS
411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
412 | * Known issue: inner spacing remains in IE6
413 | */
414 |
415 | button,
416 | input[type="button"],
417 | input[type="reset"],
418 | input[type="submit"] {
419 | cursor: pointer; /* 1 */
420 | -webkit-appearance: button; /* 2 */
421 | *overflow: visible; /* 3 */
422 | }
423 |
424 | /*
425 | * Re-set default cursor for disabled elements
426 | */
427 |
428 | button[disabled],
429 | input[disabled] {
430 | cursor: default;
431 | }
432 |
433 | /*
434 | * 1. Addresses box sizing set to content-box in IE8/9
435 | * 2. Removes excess padding in IE8/9
436 | * 3. Removes excess padding in IE7
437 | Known issue: excess padding remains in IE6
438 | */
439 |
440 | input[type="checkbox"],
441 | input[type="radio"] {
442 | box-sizing: border-box; /* 1 */
443 | padding: 0; /* 2 */
444 | *height: 13px; /* 3 */
445 | *width: 13px; /* 3 */
446 | }
447 |
448 | /*
449 | * 1. Addresses appearance set to searchfield in S5, Chrome
450 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
451 | */
452 |
453 | input[type="search"] {
454 | -webkit-appearance: textfield; /* 1 */
455 | -moz-box-sizing: content-box;
456 | -webkit-box-sizing: content-box; /* 2 */
457 | box-sizing: content-box;
458 | }
459 |
460 | /*
461 | * Removes inner padding and search cancel button in S5, Chrome on OS X
462 | */
463 |
464 | input[type="search"]::-webkit-search-decoration,
465 | input[type="search"]::-webkit-search-cancel-button {
466 | -webkit-appearance: none;
467 | }
468 |
469 | /*
470 | * Removes inner padding and border in FF3+
471 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
472 | */
473 |
474 | button::-moz-focus-inner,
475 | input::-moz-focus-inner {
476 | border: 0;
477 | padding: 0;
478 | }
479 |
480 | /*
481 | * 1. Removes default vertical scrollbar in IE6/7/8/9
482 | * 2. Improves readability and alignment in all browsers
483 | */
484 |
485 | textarea {
486 | overflow: auto; /* 1 */
487 | vertical-align: top; /* 2 */
488 | }
489 |
490 |
491 | /* =============================================================================
492 | Tables
493 | ========================================================================== */
494 |
495 | /*
496 | * Remove most spacing between table cells
497 | */
498 |
499 | table {
500 | border-collapse: collapse;
501 | border-spacing: 0;
502 | }
--------------------------------------------------------------------------------
/templates/modern/css/pdf.css:
--------------------------------------------------------------------------------
1 | body.pdf {
2 | color: black;
3 |
4 | a {
5 | text-decoration: none;
6 | color: black;
7 | }
8 | .container {
9 | width: 1000px;
10 | margin: 0 auto;
11 | padding: 0;
12 | background: none;
13 | border: none;
14 | border-width: 8px 0 2px 0;
15 | text-align: left;
16 | }
17 |
18 | .resume {
19 | position:relative;
20 | padding: 40px 80px;
21 | }
22 |
23 | a[href$='.pdf'] {
24 | display: none;
25 | }
26 |
27 | h1 {
28 | letter-spacing: 0;
29 | margin-top: 0;
30 | font-size: 48px;
31 | text-transform: uppercase;
32 | font-weight: normal;
33 | }
34 | h2 {
35 | letter-spacing: 0;
36 | text-transform: uppercase;
37 | font-style: italic;
38 | font-weight: normal;
39 | }
40 | h3 {
41 | float: left;
42 | width: 16%;
43 | font-style: normal;
44 | }
45 | h3+p {
46 | float: left;
47 | width: 78%;
48 | }
49 |
50 | blockquote {
51 | top: 40px;
52 | right: 50px;
53 | position: absolute;
54 | }
55 |
56 | ul dl {
57 | margin: 0;
58 | padding: 0.3em 0 0;
59 | dt {
60 | font-size: 122%;
61 | font-weight: normal;
62 | margin: 0 0 .75em;
63 | }
64 | dd {
65 | padding: 0 2em 0 0;
66 | }
67 | }
68 |
69 | ol {
70 | float: left;
71 | width: 79%;
72 | margin: .7em 0 0;
73 | }
74 |
75 | ol li {
76 | width: 33%;
77 | margin: 0;
78 | }
79 | ol li:nth-child(3n) {
80 | width: 34%;
81 | }
82 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
83 | border-top: none;
84 | }
85 |
86 | dl {
87 | margin: .7em 0 0;
88 | page-break-inside: avoid !important;
89 | display: block;
90 | width:79%;
91 | float: left;
92 | dt {}
93 | dd {
94 | }
95 | strong {
96 | float: right;
97 | margin-top: -2em;
98 | }
99 | em {
100 | font-size: 130%;
101 | font-style: normal;
102 | }
103 |
104 | }
105 |
106 | }
107 |
--------------------------------------------------------------------------------
/templates/modern/css/resume.css:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | zoom: 1;
3 | &:after {
4 | display: block;
5 | visibility: hidden;
6 | height: 0;
7 | clear: both;
8 | content: ".";
9 | }
10 | }
11 |
12 | body {
13 | font-family: 'Hoefler Text', Times New Roman, Times, serif;
14 | color: #444;
15 | }
16 | h1, h2, h3, h4, ul dl dt {
17 | font-family: Futura, "Century Gothic", AppleGothic, sans-serif;
18 | }
19 |
20 | .container {
21 | margin: 0 auto;
22 | padding: 0;
23 | background: whiteSmoke;
24 | border: solid #666;
25 | border-width: 8px 0 2px 0;
26 | text-align: left;
27 | }
28 |
29 | .resume {
30 | position:relative;
31 | padding: 10px 20px;
32 | }
33 |
34 | a {
35 | color: #990003;
36 | }
37 |
38 | a[href$='.pdf'] {
39 | display: inline-block;
40 | background: #666;
41 | color: white;
42 | padding: 6px 12px;
43 | margin-bottom: 6px;
44 | text-decoration: none;
45 | }
46 |
47 | blockquote {
48 | margin: 0;
49 | padding: 0;
50 | line-height: 1.4em;
51 | }
52 |
53 | hr {
54 | display: block;
55 | position: relative;
56 | padding: 0;
57 | margin: 18px auto;
58 | width: 100%;
59 | clear: both;
60 | border: none;
61 | border-top: 1px solid #CCC;
62 | font-size: 1px;
63 | line-height: 0;
64 | overflow: visible;
65 | page-break-after: avoid;
66 | }
67 |
68 | h1 {
69 | margin: 0;
70 | padding: 0;
71 | font-size: 36px;
72 | letter-spacing: -1px;
73 | font-weight: normal;
74 | }
75 | h2 {
76 | margin: 0;
77 | padding: 0;
78 | font-size: 18px;
79 | font-style: italic;
80 | letter-spacing: -1px;
81 | font-weight: normal;
82 | }
83 |
84 | h3 {
85 | margin: 0px 20px;
86 | padding: 0 0 .5em;
87 | font-size: 150%;
88 | font-style: italic;
89 | font-weight: normal;
90 | }
91 |
92 | h3+p {
93 | margin: .6em 0 16px;
94 | padding: 0;
95 | display: block;
96 | font-size: 104%;
97 | line-height: 24px;
98 | }
99 |
100 |
101 | ul {
102 | margin: 0;
103 | padding: 0;
104 | list-style: none;
105 | display: flex;
106 | flex-wrap: wrap
107 | }
108 | ul li {
109 | margin: 0;
110 | padding: 0;
111 | flex-basis: 33%;
112 | }
113 |
114 | ul dl {
115 | margin: .3em 0 0;
116 | padding: 0;
117 | width: 100%;
118 | dt {
119 | font-size: 100%;
120 | }
121 | dd {
122 | margin: 0 0 1em;
123 | padding: 0 2em 0 0;
124 | font-size: .8em;
125 | line-height: 1.5em;
126 | }
127 | }
128 |
129 | ol {
130 | margin: 0;
131 | padding: 0 0 .75em;
132 | width: 84%;
133 | display: inline-block;
134 | }
135 |
136 | ol li {
137 | margin: 0 0 0 1em;
138 | padding: 0;
139 | border-top: 1px solid #CCCCCC;
140 | width: 100%;
141 | float: left;
142 | list-style: none;
143 | line-height: 24px;
144 | font-size: 14px;
145 | }
146 | ol li:nth-child(1) {
147 | border-top: none;
148 | }
149 |
150 | dl {
151 | display: inline-block;
152 | width: 78%;
153 | margin: 0;
154 | padding: 0;
155 | dt {
156 | margin: 0;
157 | padding: 0;
158 | font-size: 140%;
159 | }
160 | dd {
161 | margin: 0 0 1.5em;
162 | padding: 0;
163 | font-size: 80%;
164 | line-height: 1.4em;
165 | }
166 | strong {
167 | display: block;
168 | }
169 | em {
170 | display: block;
171 | font-size: 110%;
172 | margin: .15em 0 .5em;
173 | font-style: bold;
174 | }
175 |
176 | }
177 |
178 |
179 | #footer {
180 | display: none;
181 | }
182 |
183 | #footer + p {
184 | width: 100%;
185 | font-size: 11px;
186 | text-align: center;
187 | }
188 |
--------------------------------------------------------------------------------
/templates/modern/css/screen.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | Mobile layout
5 | 240–479 px
6 | Zoomed out below 320 px
7 | */
8 |
9 | @media screen and (min-width: 15em) {
10 | }
11 |
12 |
13 | /*
14 | Wide mobile layout
15 | 480-767 px
16 | Zoomed in above 480 px
17 | */
18 |
19 | @media screen and (min-width: 30em) {
20 | }
21 |
22 |
23 | /*
24 | Tablet layout
25 | 600-911 px
26 | Zoomed in above 600 px
27 | */
28 |
29 | @media screen and (min-width: 37.5em) {
30 | body {
31 | padding: 2em 0;
32 | }
33 | blockquote {
34 | top: 10px;
35 | right: 50px;
36 | position: absolute;
37 | }
38 | h1 { /* Open up the top section height so we don't collapse on the blockquote */
39 | margin-top: .5em;
40 | }
41 | ol {
42 | margin: 0 0 0 1em;
43 | }
44 | ol li {
45 | width: 50%;
46 | margin: 0;
47 | }
48 | ol li:nth-child(1), ol li:nth-child(2) {
49 | border-top: none;
50 | }
51 | }
52 |
53 |
54 | /*
55 | Widescreen layout
56 | 912-1887 px
57 | Zoomed in above 912 px
58 | */
59 |
60 | @media screen and (min-width: 57em) {
61 | .container {
62 | width: 912px;
63 | }
64 | .resume {
65 | position:relative;
66 | padding: 40px 50px;
67 | }
68 | blockquote {
69 | top: 40px;
70 | right: 50px;
71 | position: absolute;
72 | }
73 | h1 {
74 | margin-top: 0;
75 | font-size: 48px;
76 | text-transform: uppercase;
77 | letter-spacing: 3px;
78 | font-weight: normal;
79 | }
80 | h2 {
81 | text-transform: uppercase;
82 | font-style: italic;
83 | letter-spacing: 2px;
84 | font-weight: normal;
85 | }
86 |
87 | h3 {
88 | float: left;
89 | width: 16%;
90 | }
91 |
92 | h3+p {
93 | float: left;
94 | width: 78%;
95 | }
96 |
97 | ul dl {
98 | dt {
99 | font-size: 122%;
100 | font-weight: normal;
101 | margin-bottom: .75em;
102 | }
103 | dd {
104 | padding: 0 2em 0 0;
105 | }
106 | }
107 |
108 | ol {
109 | float: left;
110 | width: 79%;
111 | margin: .6em 0 0;
112 | }
113 |
114 | ol li {
115 | width: 33%;
116 | margin: 0;
117 | }
118 | ol li:nth-child(3n) {
119 | width: 34%;
120 | }
121 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
122 | border-top: none;
123 | }
124 |
125 | dl {
126 | margin: .5em 0 0;
127 | dt {
128 | }
129 | dd {
130 | }
131 | strong {
132 | float: right;
133 | margin-top: -2em;
134 | }
135 | em {
136 | font-size: 130%;
137 | font-style: normal;
138 | }
139 |
140 | }
141 |
142 |
143 | }
144 |
145 |
146 | /*
147 | Huge-screen layout
148 | 1888-2520 px
149 | Zoomed in above 1920 px
150 | */
151 |
152 | @media screen and (min-width: 118em) {
153 |
154 |
155 | }
156 |
--------------------------------------------------------------------------------
/templates/modern/description.txt:
--------------------------------------------------------------------------------
1 | Modern and clean layout (default)
2 |
--------------------------------------------------------------------------------
/templates/modern/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{title}}
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{{resume}}}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/templates/readable/css/resume.css:
--------------------------------------------------------------------------------
1 | #footer {
2 | display: none;
3 | }
4 |
5 | #footer + p {
6 | width: 100%;
7 | font-size: 11px;
8 | }
9 |
--------------------------------------------------------------------------------
/templates/readable/description.txt:
--------------------------------------------------------------------------------
1 | Bootswatch 'readable' theme
2 |
--------------------------------------------------------------------------------
/templates/readable/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 | {{title}}
9 | {{{links}}}
10 |
13 |
14 |
15 |
16 | {{{resume}}}
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/templates/readable/links/bootswatch:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/templates/roboto/css/elements.less:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------
2 | LESS Elements 0.6
3 | ---------------------------------------------------
4 | A set of useful LESS mixins by Dmitry Fadeyev
5 | Special thanks for mixin suggestions to:
6 | Kris Van Herzeele,
7 | Benoit Adam,
8 | Portenart Emile-Victor,
9 | Ryan Faerman
10 |
11 | More info at: http://lesselements.com
12 | -----------------------------------------------------*/
13 |
14 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
15 | background: @color;
16 | background: -webkit-gradient(linear,
17 | left bottom,
18 | left top,
19 | color-stop(0, @start),
20 | color-stop(1, @stop));
21 | background: -ms-linear-gradient(bottom,
22 | @start,
23 | @stop);
24 | background: -moz-linear-gradient(center bottom,
25 | @start 0%,
26 | @stop 100%);
27 | }
28 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
29 | background: @color;
30 | background: -webkit-gradient(linear,
31 | left bottom,
32 | left top,
33 | color-stop(0, rgb(@start,@start,@start)),
34 | color-stop(1, rgb(@stop,@stop,@stop)));
35 | background: -ms-linear-gradient(bottom,
36 | rgb(@start,@start,@start) 0%,
37 | rgb(@start,@start,@start) 100%);
38 | background: -moz-linear-gradient(center bottom,
39 | rgb(@start,@start,@start) 0%,
40 | rgb(@stop,@stop,@stop) 100%);
41 | }
42 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43 | border-top: solid 1px @top-color;
44 | border-left: solid 1px @left-color;
45 | border-right: solid 1px @right-color;
46 | border-bottom: solid 1px @bottom-color;
47 | }
48 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52 | }
53 | .rounded(@radius: 2px) {
54 | -webkit-border-radius: @radius;
55 | -moz-border-radius: @radius;
56 | border-radius: @radius;
57 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
58 | }
59 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
60 | -webkit-border-top-right-radius: @topright;
61 | -webkit-border-bottom-right-radius: @bottomright;
62 | -webkit-border-bottom-left-radius: @bottomleft;
63 | -webkit-border-top-left-radius: @topleft;
64 | -moz-border-radius-topright: @topright;
65 | -moz-border-radius-bottomright: @bottomright;
66 | -moz-border-radius-bottomleft: @bottomleft;
67 | -moz-border-radius-topleft: @topleft;
68 | border-top-right-radius: @topright;
69 | border-bottom-right-radius: @bottomright;
70 | border-bottom-left-radius: @bottomleft;
71 | border-top-left-radius: @topleft;
72 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
73 | }
74 | .opacity(@opacity: 0.5) {
75 | -moz-opacity: @opacity;
76 | -khtml-opacity: @opacity;
77 | -webkit-opacity: @opacity;
78 | opacity: @opacity;
79 | }
80 | .transition-duration(@duration: 0.2s) {
81 | -moz-transition-duration: @duration;
82 | -webkit-transition-duration: @duration;
83 | transition-duration: @duration;
84 | }
85 | .rotation(@deg:5deg){
86 | -webkit-transform: rotate(@deg);
87 | -moz-transform: rotate(@deg);
88 | transform: rotate(@deg);
89 | }
90 | .scale(@ratio:1.5){
91 | -webkit-transform:scale(@ratio);
92 | -moz-transform:scale(@ratio);
93 | transform:scale(@ratio);
94 | }
95 | .transition(@duration:0.2s, @ease:ease-out) {
96 | -webkit-transition: all @duration @ease;
97 | -moz-transition: all @duration @ease;
98 | transition: all @duration @ease;
99 | }
100 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
101 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
104 | }
105 | .box-shadow(@arguments) {
106 | -webkit-box-shadow: @arguments;
107 | -moz-box-shadow: @arguments;
108 | box-shadow: @arguments;
109 | }
110 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
111 | -moz-column-width: @colwidth;
112 | -moz-column-count: @colcount;
113 | -moz-column-gap: @colgap;
114 | -moz-column-rule-color: @columnRuleColor;
115 | -moz-column-rule-style: @columnRuleStyle;
116 | -moz-column-rule-width: @columnRuleWidth;
117 | -webkit-column-width: @colwidth;
118 | -webkit-column-count: @colcount;
119 | -webkit-column-gap: @colgap;
120 | -webkit-column-rule-color: @columnRuleColor;
121 | -webkit-column-rule-style: @columnRuleStyle;
122 | -webkit-column-rule-width: @columnRuleWidth;
123 | column-width: @colwidth;
124 | column-count: @colcount;
125 | column-gap: @colgap;
126 | column-rule-color: @columnRuleColor;
127 | column-rule-style: @columnRuleStyle;
128 | column-rule-width: @columnRuleWidth;
129 | }
130 | .translate(@x:0, @y:0) {
131 | -moz-transform: translate(@x, @y);
132 | -webkit-transform: translate(@x, @y);
133 | -o-transform: translate(@x, @y);
134 | -ms-transform: translate(@x, @y);
135 | transform: translate(@x, @y);
136 | }
137 |
--------------------------------------------------------------------------------
/templates/roboto/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | /*
8 | * Corrects block display not defined in IE6/7/8/9 & FF3
9 | */
10 |
11 | article,
12 | aside,
13 | details,
14 | figcaption,
15 | figure,
16 | footer,
17 | header,
18 | hgroup,
19 | nav,
20 | section,
21 | summary {
22 | display: block;
23 | }
24 |
25 | /*
26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
27 | */
28 |
29 | audio,
30 | canvas,
31 | video {
32 | display: inline-block;
33 | *display: inline;
34 | *zoom: 1;
35 | }
36 |
37 | /*
38 | * Prevents modern browsers from displaying 'audio' without controls
39 | */
40 |
41 | audio:not([controls]) {
42 | display: none;
43 | }
44 |
45 | /*
46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
47 | * Known issue: no IE6 support
48 | */
49 |
50 | [hidden] {
51 | display: none;
52 | }
53 |
54 |
55 | /* =============================================================================
56 | Base
57 | ========================================================================== */
58 |
59 | /*
60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
61 | * http://clagnut.com/blog/348/#c790
62 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
63 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
64 | */
65 |
66 | html {
67 | font-size: 100%; /* 1 */
68 | -webkit-text-size-adjust: 100%; /* 2 */
69 | -ms-text-size-adjust: 100%; /* 2 */
70 | }
71 |
72 | /*
73 | * Addresses font-family inconsistency between 'textarea' and other form elements.
74 | */
75 |
76 | html,
77 | button,
78 | input,
79 | select,
80 | textarea {
81 | font-family: sans-serif;
82 | }
83 |
84 | /*
85 | * Addresses margins handled incorrectly in IE6/7
86 | */
87 |
88 | body {
89 | margin: 0;
90 | }
91 |
92 |
93 | /* =============================================================================
94 | Links
95 | ========================================================================== */
96 |
97 | /*
98 | * Addresses outline displayed oddly in Chrome
99 | */
100 |
101 | a:focus {
102 | outline: thin dotted;
103 | }
104 |
105 | /*
106 | * Improves readability when focused and also mouse hovered in all browsers
107 | * people.opera.com/patrickl/experiments/keyboard/test
108 | */
109 |
110 | a:hover,
111 | a:active {
112 | outline: 0;
113 | }
114 |
115 |
116 | /* =============================================================================
117 | Typography
118 | ========================================================================== */
119 |
120 | /*
121 | * Addresses font sizes and margins set differently in IE6/7
122 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
123 | */
124 |
125 | h1 {
126 | font-size: 2em;
127 | margin: 0.67em 0;
128 | }
129 |
130 | h2 {
131 | font-size: 1.5em;
132 | margin: 0.83em 0;
133 | }
134 |
135 | h3 {
136 | font-size: 1.17em;
137 | margin: 1em 0;
138 | }
139 |
140 | h4 {
141 | font-size: 1em;
142 | margin: 1.33em 0;
143 | }
144 |
145 | h5 {
146 | font-size: 0.83em;
147 | margin: 1.67em 0;
148 | }
149 |
150 | h6 {
151 | font-size: 0.75em;
152 | margin: 2.33em 0;
153 | }
154 |
155 | /*
156 | * Addresses styling not present in IE7/8/9, S5, Chrome
157 | */
158 |
159 | abbr[title] {
160 | border-bottom: 1px dotted;
161 | }
162 |
163 | /*
164 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
165 | */
166 |
167 | b,
168 | strong {
169 | font-weight: bold;
170 | }
171 |
172 | blockquote {
173 | margin: 1em 40px;
174 | }
175 |
176 | /*
177 | * Addresses styling not present in S5, Chrome
178 | */
179 |
180 | dfn {
181 | font-style: italic;
182 | }
183 |
184 | /*
185 | * Addresses styling not present in IE6/7/8/9
186 | */
187 |
188 | mark {
189 | background: #ff0;
190 | color: #000;
191 | }
192 |
193 | /*
194 | * Addresses margins set differently in IE6/7
195 | */
196 |
197 | p,
198 | pre {
199 | margin: 1em 0;
200 | }
201 |
202 | /*
203 | * Corrects font family set oddly in IE6, S4/5, Chrome
204 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
205 | */
206 |
207 | pre,
208 | code,
209 | kbd,
210 | samp {
211 | font-family: monospace, serif;
212 | _font-family: 'courier new', monospace;
213 | font-size: 1em;
214 | }
215 |
216 | /*
217 | * Improves readability of pre-formatted text in all browsers
218 | */
219 |
220 | pre {
221 | white-space: pre;
222 | white-space: pre-wrap;
223 | word-wrap: break-word;
224 | }
225 |
226 | /*
227 | * 1. Addresses CSS quotes not supported in IE6/7
228 | * 2. Addresses quote property not supported in S4
229 | */
230 |
231 | /* 1 */
232 |
233 | q {
234 | quotes: none;
235 | }
236 |
237 | /* 2 */
238 |
239 | q:before,
240 | q:after {
241 | content: '';
242 | content: none;
243 | }
244 |
245 | small {
246 | font-size: 75%;
247 | }
248 |
249 | /*
250 | * Prevents sub and sup affecting line-height in all browsers
251 | * gist.github.com/413930
252 | */
253 |
254 | sub,
255 | sup {
256 | font-size: 75%;
257 | line-height: 0;
258 | position: relative;
259 | vertical-align: baseline;
260 | }
261 |
262 | sup {
263 | top: -0.5em;
264 | }
265 |
266 | sub {
267 | bottom: -0.25em;
268 | }
269 |
270 |
271 | /* =============================================================================
272 | Lists
273 | ========================================================================== */
274 |
275 | /*
276 | * Addresses margins set differently in IE6/7
277 | */
278 |
279 | dl,
280 | menu,
281 | ol,
282 | ul {
283 | margin: 1em 0;
284 | }
285 |
286 | dd {
287 | margin: 0 0 0 40px;
288 | }
289 |
290 | /*
291 | * Addresses paddings set differently in IE6/7
292 | */
293 |
294 | menu,
295 | ol,
296 | ul {
297 | padding: 0 0 0 40px;
298 | }
299 |
300 | /*
301 | * Corrects list images handled incorrectly in IE7
302 | */
303 |
304 | nav ul,
305 | nav ol {
306 | list-style: none;
307 | list-style-image: none;
308 | }
309 |
310 |
311 | /* =============================================================================
312 | Embedded content
313 | ========================================================================== */
314 |
315 | /*
316 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
317 | * 2. Improves image quality when scaled in IE7
318 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
319 | */
320 |
321 | img {
322 | border: 0; /* 1 */
323 | -ms-interpolation-mode: bicubic; /* 2 */
324 | }
325 |
326 | /*
327 | * Corrects overflow displayed oddly in IE9
328 | */
329 |
330 | svg:not(:root) {
331 | overflow: hidden;
332 | }
333 |
334 |
335 | /* =============================================================================
336 | Figures
337 | ========================================================================== */
338 |
339 | /*
340 | * Addresses margin not present in IE6/7/8/9, S5, O11
341 | */
342 |
343 | figure {
344 | margin: 0;
345 | }
346 |
347 |
348 | /* =============================================================================
349 | Forms
350 | ========================================================================== */
351 |
352 | /*
353 | * Corrects margin displayed oddly in IE6/7
354 | */
355 |
356 | form {
357 | margin: 0;
358 | }
359 |
360 | /*
361 | * Define consistent border, margin, and padding
362 | */
363 |
364 | fieldset {
365 | border: 1px solid #c0c0c0;
366 | margin: 0 2px;
367 | padding: 0.35em 0.625em 0.75em;
368 | }
369 |
370 | /*
371 | * 1. Corrects color not being inherited in IE6/7/8/9
372 | * 2. Corrects text not wrapping in FF3
373 | * 3. Corrects alignment displayed oddly in IE6/7
374 | */
375 |
376 | legend {
377 | border: 0; /* 1 */
378 | padding: 0;
379 | white-space: normal; /* 2 */
380 | *margin-left: -7px; /* 3 */
381 | }
382 |
383 | /*
384 | * 1. Corrects font size not being inherited in all browsers
385 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
386 | * 3. Improves appearance and consistency in all browsers
387 | */
388 |
389 | button,
390 | input,
391 | select,
392 | textarea {
393 | font-size: 100%; /* 1 */
394 | margin: 0; /* 2 */
395 | vertical-align: baseline; /* 3 */
396 | *vertical-align: middle; /* 3 */
397 | }
398 |
399 | /*
400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
401 | */
402 |
403 | button,
404 | input {
405 | line-height: normal; /* 1 */
406 | }
407 |
408 | /*
409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
410 | * 2. Corrects inability to style clickable 'input' types in iOS
411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
412 | * Known issue: inner spacing remains in IE6
413 | */
414 |
415 | button,
416 | input[type="button"],
417 | input[type="reset"],
418 | input[type="submit"] {
419 | cursor: pointer; /* 1 */
420 | -webkit-appearance: button; /* 2 */
421 | *overflow: visible; /* 3 */
422 | }
423 |
424 | /*
425 | * Re-set default cursor for disabled elements
426 | */
427 |
428 | button[disabled],
429 | input[disabled] {
430 | cursor: default;
431 | }
432 |
433 | /*
434 | * 1. Addresses box sizing set to content-box in IE8/9
435 | * 2. Removes excess padding in IE8/9
436 | * 3. Removes excess padding in IE7
437 | Known issue: excess padding remains in IE6
438 | */
439 |
440 | input[type="checkbox"],
441 | input[type="radio"] {
442 | box-sizing: border-box; /* 1 */
443 | padding: 0; /* 2 */
444 | *height: 13px; /* 3 */
445 | *width: 13px; /* 3 */
446 | }
447 |
448 | /*
449 | * 1. Addresses appearance set to searchfield in S5, Chrome
450 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
451 | */
452 |
453 | input[type="search"] {
454 | -webkit-appearance: textfield; /* 1 */
455 | -moz-box-sizing: content-box;
456 | -webkit-box-sizing: content-box; /* 2 */
457 | box-sizing: content-box;
458 | }
459 |
460 | /*
461 | * Removes inner padding and search cancel button in S5, Chrome on OS X
462 | */
463 |
464 | input[type="search"]::-webkit-search-decoration,
465 | input[type="search"]::-webkit-search-cancel-button {
466 | -webkit-appearance: none;
467 | }
468 |
469 | /*
470 | * Removes inner padding and border in FF3+
471 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
472 | */
473 |
474 | button::-moz-focus-inner,
475 | input::-moz-focus-inner {
476 | border: 0;
477 | padding: 0;
478 | }
479 |
480 | /*
481 | * 1. Removes default vertical scrollbar in IE6/7/8/9
482 | * 2. Improves readability and alignment in all browsers
483 | */
484 |
485 | textarea {
486 | overflow: auto; /* 1 */
487 | vertical-align: top; /* 2 */
488 | }
489 |
490 |
491 | /* =============================================================================
492 | Tables
493 | ========================================================================== */
494 |
495 | /*
496 | * Remove most spacing between table cells
497 | */
498 |
499 | table {
500 | border-collapse: collapse;
501 | border-spacing: 0;
502 | }
--------------------------------------------------------------------------------
/templates/roboto/css/pdf.less:
--------------------------------------------------------------------------------
1 | body.pdf {
2 | color: black;
3 |
4 | a {
5 | text-decoration: none;
6 | color: black;
7 |
8 | &[href$='.pdf'],
9 | &[href*='github'] {
10 | display: none;
11 | }
12 | }
13 |
14 | .container {
15 | width: 1080px;
16 | margin: 0 auto;
17 | padding: 0;
18 | background: none;
19 | border: 0;
20 | text-align: left;
21 | }
22 |
23 | .resume {
24 | position:relative;
25 | padding: 40px 80px;
26 | }
27 |
28 | h1 {
29 | letter-spacing: 0;
30 | margin-top: 0;
31 | text-transform: uppercase;
32 | font-weight: normal;
33 | }
34 |
35 | h2 {
36 | letter-spacing: 0;
37 | text-transform: uppercase;
38 | font-style: italic;
39 | font-weight: normal;
40 | }
41 |
42 | h3 {
43 | font-style: normal;
44 |
45 | + p {
46 |
47 | }
48 | }
49 |
50 | blockquote {
51 | top: 40px;
52 | right: 50px;
53 | position: absolute;
54 | }
55 |
56 | ul {
57 | }
58 |
59 | ul li {
60 | }
61 |
62 | // ul dl {
63 | // margin: 0;
64 | // padding: 0.3em 0 0;
65 |
66 | // dt {
67 | // font-size: 122%;
68 | // font-weight: normal;
69 | // margin: 0 0 .75em;
70 | // }
71 |
72 | // dd {
73 | // padding: 0 4em 0 0;
74 | // }
75 | // }
76 |
77 | // ol {
78 | // margin: .7em 0 0;
79 | // }
80 |
81 | // ol li {
82 | // margin: 0;
83 | // }
84 |
85 | // dl {
86 | // margin: .7em 0 0;
87 | // page-break-inside: avoid !important;
88 | // display: block;
89 | // // width:90%;
90 |
91 | // em {
92 | // font-size: 130%;
93 | // font-style: normal;
94 | // }
95 | // }
96 | }
97 |
--------------------------------------------------------------------------------
/templates/roboto/css/resume.less:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | zoom: 1;
3 | &:after {
4 | display: block;
5 | visibility: hidden;
6 | height: 0;
7 | clear: both;
8 | content: ".";
9 | }
10 | }
11 |
12 | body {
13 | /*font: 12px normal 'Hoefler Text', Times New Roman, Times, serif;*/
14 | /*font-family: 'Roboto', sans-serif;*/
15 | color: #444;
16 | }
17 | h1, h2, h3, h4, ul dl dt {
18 | /*font-family: Futura, "Century Gothic", AppleGothic, sans-serif;*/
19 | }
20 |
21 | .container {
22 | margin: 0 auto;
23 | padding: 0;
24 | background: whiteSmoke;
25 | border: solid #666;
26 | border-width: 8px 0 2px 0;
27 | text-align: left;
28 | }
29 |
30 | .resume {
31 | position:relative;
32 | padding: 10px 20px;
33 | }
34 |
35 | a[href$='.pdf'] {
36 | background: #666;
37 | color: white;
38 | padding: 6px 12px;
39 | margin-bottom: 6px;
40 | text-decoration: none;
41 | position: absolute;
42 | top: 15px;
43 | right: 25px;
44 | }
45 | a[href*='github'] {
46 | background: #000;
47 | color: white;
48 | padding: 6px 12px;
49 | margin-bottom: 6px;
50 | text-decoration: none;
51 | position: absolute;
52 | top: 45px;
53 | right: 25px;
54 |
55 | &:hover {
56 | background: white;
57 | color: #000;
58 | }
59 | }
60 |
61 | /*p {
62 | font-size: 1em;
63 | }*/
64 |
65 | blockquote {
66 | margin: 0;
67 | padding: 0;
68 | line-height: 1.4em;
69 | }
70 |
71 | blockquote a {
72 | color: #990003;
73 | display: block;
74 | }
75 |
76 | hr {
77 | display: block;
78 | position: relative;
79 | padding: 0;
80 | margin: 18px auto;
81 | width: 100%;
82 | clear: both;
83 | border: 0;
84 | border-top: 1px solid #CCC;
85 | font-size: 1px;
86 | line-height: 0;
87 | overflow: visible;
88 | page-break-after: avoid;
89 | }
90 |
91 | ul {
92 | margin: 0;
93 | padding: 0;
94 | }
95 |
96 | h1 {
97 | margin: 0;
98 | padding: 0;
99 | font-size: 3em;
100 | letter-spacing: -1px;
101 | font-weight: normal;
102 | }
103 | h2 {
104 | margin: 0;
105 | padding: 0;
106 | font-size: 2em;
107 | font-style: italic;
108 | letter-spacing: -1px;
109 | font-weight: normal;
110 | }
111 |
112 | h3 {
113 | border-bottom: 5px solid #000;
114 | margin: 0;
115 | padding: .25em 0 .25em .3em;
116 | font-size: 2em;
117 | font-style: italic;
118 | font-weight: normal;
119 | }
120 |
121 | h3+p,
122 | h3~ul {
123 | margin: .2em 0 1.2em;
124 | padding: 0;
125 | display: block;
126 | font-size: 1em;
127 | line-height: 1.5;
128 | }
129 | h3~ul {
130 | padding-left: 1.5em;
131 | }
132 |
133 | h4 {
134 | font-size: 1.5em;
135 | margin: 0;
136 | }
137 |
138 | ul li {
139 | margin: 0;
140 | padding: 0;
141 | /*font-size: 1.2em;*/
142 | }
143 |
144 | ul,
145 | ol {
146 | li ul li {
147 | font-style: italic;
148 | margin: 0 0 0 1.5em;
149 | width: 80%;
150 | }
151 | }
152 |
153 | ul dl {
154 | margin: .3em 0 0;
155 | padding: 0;
156 | width: 100%;
157 | dt {
158 | /*font-size: 1em;*/
159 | }
160 | dd {
161 | margin: 0 0 1em;
162 | padding: 0 2em 0 0;
163 | font-size: .8em;
164 | line-height: 1.5em;
165 | }
166 | }
167 |
168 | ol {
169 | margin: 0;
170 | margin-left: 1em;
171 | padding: 0 0 .75em;
172 | width: 84%;
173 | display: inline-block;
174 | }
175 |
176 | ol li {
177 | margin: 0 0 0 .5em;
178 | padding: 0;
179 | border-top: 1px solid #CCCCCC;
180 | width: 100%;
181 | /*float: left;*/
182 | /*list-style: none;*/
183 | line-height: 1.5em;
184 | font-size: 1em;
185 | }
186 | ol li:nth-child(1) {
187 | border-top: 0;
188 | }
189 |
190 | dl {
191 | display: inline-block;
192 | width: 95%;
193 | margin: 0;
194 | padding: 0;
195 | dt {
196 | margin: 0;
197 | padding: 0;
198 | /*font-size: 1.4em;*/
199 | }
200 | dd {
201 | padding: 0;
202 | font-size: 0.8em;
203 | }
204 | strong {
205 | display: block;
206 | font-size: 1.2em;
207 | }
208 | em {
209 | display: block;
210 | font-size: 1.2em;
211 | margin: .15em 0 .5em;
212 | }
213 | }
214 |
215 | #experience {
216 | ~ dl {
217 | dt {
218 | float: left;
219 | margin-top: 1em;
220 | }
221 | dd {
222 | float: right;
223 | text-align: right;
224 | width: 45%;
225 | }
226 | }
227 |
228 | ~ p {
229 | width: 85%;
230 | }
231 |
232 | ~ ul {
233 | width: 85%;
234 | }
235 |
236 | ~ ol li {
237 | border: 0;
238 | font-size: 1em;
239 | }
240 | }
241 |
242 | #footer {
243 | display: none;
244 |
245 | + p {
246 | width: 100%;
247 | font-size: 0.8em;
248 | text-align: center;
249 | }
250 | }
251 |
--------------------------------------------------------------------------------
/templates/roboto/css/screen.less:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | Mobile layout
5 | 240–479 px
6 | Zoomed out below 320 px
7 | */
8 |
9 | @media screen and (min-width: 15em) {
10 | }
11 |
12 |
13 | /*
14 | Wide mobile layout
15 | 480-767 px
16 | Zoomed in above 480 px
17 | */
18 |
19 | @media screen and (min-width: 30em) {
20 | }
21 |
22 |
23 | /*
24 | Tablet layout
25 | 600-911 px
26 | Zoomed in above 600 px
27 | */
28 |
29 | @media screen and (min-width: 37.5em) {
30 | body {
31 | padding: 2em 0;
32 | }
33 | blockquote {
34 | top: 10px;
35 | right: 50px;
36 | position: absolute;
37 | }
38 | h1 { /* Open up the top section height so we don't collapse on the blockquote */
39 | margin-top: .5em;
40 | }
41 | ol {
42 | margin: 0 0 0 1em;
43 | }
44 | ol li {
45 | width: 50%;
46 | margin: 0;
47 | }
48 | ol li:nth-child(1), ol li:nth-child(2) {
49 | border-top: none;
50 | }
51 | }
52 |
53 |
54 | /*
55 | Widescreen layout
56 | 912-1887 px
57 | Zoomed in above 912 px
58 | */
59 |
60 | /*@media screen and (min-width: 57em) {
61 | .container {
62 | width: 912px;
63 | }
64 | .resume {
65 | position:relative;
66 | padding: 40px 50px;
67 | }
68 | blockquote {
69 | top: 40px;
70 | right: 50px;
71 | position: absolute;
72 | }
73 | h1 {
74 | margin-top: 0;
75 | font-size: 48px;
76 | text-transform: uppercase;
77 | letter-spacing: 3px;
78 | font-weight: normal;
79 | }
80 | h2 {
81 | text-transform: uppercase;
82 | font-style: italic;
83 | letter-spacing: 2px;
84 | font-weight: normal;
85 | }
86 |
87 | h3 {
88 | float: left;
89 | width: 16%;
90 | }
91 |
92 | h3+p {
93 | float: left;
94 | width: 84%;
95 | }
96 |
97 | ul li {
98 | width: 28%;
99 | float: left;
100 | }
101 | ul dl {
102 | dt {
103 | font-size: 122%;
104 | font-weight: normal;
105 | margin-bottom: .75em;
106 | }
107 | dd {
108 | padding: 0 4em 0 0;
109 | }
110 | }
111 |
112 | ol {
113 | float: left;
114 | width: 84%;
115 | margin: .6em 0 0;
116 | }
117 |
118 | ol li {
119 | width: 33%;
120 | margin: 0;
121 | }
122 | ol li:nth-child(3n) {
123 | width: 34%;
124 | }
125 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
126 | border-top: none;
127 | }
128 |
129 | dl {
130 | margin: .5em 0 0;
131 | dt {
132 | }
133 | dd {
134 | }
135 | strong {
136 | float: right;
137 | margin-top: -2em;
138 | }
139 | em {
140 | font-size: 130%;
141 | font-style: normal;
142 | }
143 |
144 | }
145 |
146 |
147 | }*/
148 |
149 |
150 | /*
151 | Huge-screen layout
152 | 1888-2520 px
153 | Zoomed in above 1920 px
154 | */
155 |
156 | @media screen and (min-width: 118em) {
157 |
158 |
159 | }
--------------------------------------------------------------------------------
/templates/roboto/description.txt:
--------------------------------------------------------------------------------
1 | Layout with static header, format for GitHub link, and Google Roboto font.
2 |
--------------------------------------------------------------------------------
/templates/roboto/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{title}}
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {{{resume}}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/templates/swissen/css/elements.less:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------
2 | LESS Elements 0.6
3 | ---------------------------------------------------
4 | A set of useful LESS mixins by Dmitry Fadeyev
5 | Special thanks for mixin suggestions to:
6 | Kris Van Herzeele,
7 | Benoit Adam,
8 | Portenart Emile-Victor,
9 | Ryan Faerman
10 |
11 | More info at: http://lesselements.com
12 | -----------------------------------------------------*/
13 |
14 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
15 | background: @color;
16 | background: -webkit-gradient(linear,
17 | left bottom,
18 | left top,
19 | color-stop(0, @start),
20 | color-stop(1, @stop));
21 | background: -ms-linear-gradient(bottom,
22 | @start,
23 | @stop);
24 | background: -moz-linear-gradient(center bottom,
25 | @start 0%,
26 | @stop 100%);
27 | }
28 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
29 | background: @color;
30 | background: -webkit-gradient(linear,
31 | left bottom,
32 | left top,
33 | color-stop(0, rgb(@start,@start,@start)),
34 | color-stop(1, rgb(@stop,@stop,@stop)));
35 | background: -ms-linear-gradient(bottom,
36 | rgb(@start,@start,@start) 0%,
37 | rgb(@start,@start,@start) 100%);
38 | background: -moz-linear-gradient(center bottom,
39 | rgb(@start,@start,@start) 0%,
40 | rgb(@stop,@stop,@stop) 100%);
41 | }
42 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43 | border-top: solid 1px @top-color;
44 | border-left: solid 1px @left-color;
45 | border-right: solid 1px @right-color;
46 | border-bottom: solid 1px @bottom-color;
47 | }
48 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52 | }
53 | .rounded(@radius: 2px) {
54 | -webkit-border-radius: @radius;
55 | -moz-border-radius: @radius;
56 | border-radius: @radius;
57 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
58 | }
59 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
60 | -webkit-border-top-right-radius: @topright;
61 | -webkit-border-bottom-right-radius: @bottomright;
62 | -webkit-border-bottom-left-radius: @bottomleft;
63 | -webkit-border-top-left-radius: @topleft;
64 | -moz-border-radius-topright: @topright;
65 | -moz-border-radius-bottomright: @bottomright;
66 | -moz-border-radius-bottomleft: @bottomleft;
67 | -moz-border-radius-topleft: @topleft;
68 | border-top-right-radius: @topright;
69 | border-bottom-right-radius: @bottomright;
70 | border-bottom-left-radius: @bottomleft;
71 | border-top-left-radius: @topleft;
72 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
73 | }
74 | .opacity(@opacity: 0.5) {
75 | -moz-opacity: @opacity;
76 | -khtml-opacity: @opacity;
77 | -webkit-opacity: @opacity;
78 | opacity: @opacity;
79 | }
80 | .transition-duration(@duration: 0.2s) {
81 | -moz-transition-duration: @duration;
82 | -webkit-transition-duration: @duration;
83 | transition-duration: @duration;
84 | }
85 | .rotation(@deg:5deg){
86 | -webkit-transform: rotate(@deg);
87 | -moz-transform: rotate(@deg);
88 | transform: rotate(@deg);
89 | }
90 | .scale(@ratio:1.5){
91 | -webkit-transform:scale(@ratio);
92 | -moz-transform:scale(@ratio);
93 | transform:scale(@ratio);
94 | }
95 | .transition(@duration:0.2s, @ease:ease-out) {
96 | -webkit-transition: all @duration @ease;
97 | -moz-transition: all @duration @ease;
98 | transition: all @duration @ease;
99 | }
100 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
101 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
104 | }
105 | .box-shadow(@arguments) {
106 | -webkit-box-shadow: @arguments;
107 | -moz-box-shadow: @arguments;
108 | box-shadow: @arguments;
109 | }
110 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
111 | -moz-column-width: @colwidth;
112 | -moz-column-count: @colcount;
113 | -moz-column-gap: @colgap;
114 | -moz-column-rule-color: @columnRuleColor;
115 | -moz-column-rule-style: @columnRuleStyle;
116 | -moz-column-rule-width: @columnRuleWidth;
117 | -webkit-column-width: @colwidth;
118 | -webkit-column-count: @colcount;
119 | -webkit-column-gap: @colgap;
120 | -webkit-column-rule-color: @columnRuleColor;
121 | -webkit-column-rule-style: @columnRuleStyle;
122 | -webkit-column-rule-width: @columnRuleWidth;
123 | column-width: @colwidth;
124 | column-count: @colcount;
125 | column-gap: @colgap;
126 | column-rule-color: @columnRuleColor;
127 | column-rule-style: @columnRuleStyle;
128 | column-rule-width: @columnRuleWidth;
129 | }
130 | .translate(@x:0, @y:0) {
131 | -moz-transform: translate(@x, @y);
132 | -webkit-transform: translate(@x, @y);
133 | -o-transform: translate(@x, @y);
134 | -ms-transform: translate(@x, @y);
135 | transform: translate(@x, @y);
136 | }
137 |
--------------------------------------------------------------------------------
/templates/swissen/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | /*
8 | * Corrects block display not defined in IE6/7/8/9 & FF3
9 | */
10 |
11 | article,
12 | aside,
13 | details,
14 | figcaption,
15 | figure,
16 | footer,
17 | header,
18 | hgroup,
19 | nav,
20 | section,
21 | summary {
22 | display: block;
23 | }
24 |
25 | /*
26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
27 | */
28 |
29 | audio,
30 | canvas,
31 | video {
32 | display: inline-block;
33 | *display: inline;
34 | *zoom: 1;
35 | }
36 |
37 | /*
38 | * Prevents modern browsers from displaying 'audio' without controls
39 | */
40 |
41 | audio:not([controls]) {
42 | display: none;
43 | }
44 |
45 | /*
46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
47 | * Known issue: no IE6 support
48 | */
49 |
50 | [hidden] {
51 | display: none;
52 | }
53 |
54 |
55 | /* =============================================================================
56 | Base
57 | ========================================================================== */
58 |
59 | /*
60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
61 | * http://clagnut.com/blog/348/#c790
62 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
63 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
64 | */
65 |
66 | html {
67 | font-size: 100%; /* 1 */
68 | -webkit-text-size-adjust: 100%; /* 2 */
69 | -ms-text-size-adjust: 100%; /* 2 */
70 | }
71 |
72 | /*
73 | * Addresses font-family inconsistency between 'textarea' and other form elements.
74 | */
75 |
76 | html,
77 | button,
78 | input,
79 | select,
80 | textarea {
81 | font-family: sans-serif;
82 | }
83 |
84 | /*
85 | * Addresses margins handled incorrectly in IE6/7
86 | */
87 |
88 | body {
89 | margin: 0;
90 | }
91 |
92 |
93 | /* =============================================================================
94 | Links
95 | ========================================================================== */
96 |
97 | /*
98 | * Addresses outline displayed oddly in Chrome
99 | */
100 |
101 | a:focus {
102 | outline: thin dotted;
103 | }
104 |
105 | /*
106 | * Improves readability when focused and also mouse hovered in all browsers
107 | * people.opera.com/patrickl/experiments/keyboard/test
108 | */
109 |
110 | a:hover,
111 | a:active {
112 | outline: 0;
113 | }
114 |
115 |
116 | /* =============================================================================
117 | Typography
118 | ========================================================================== */
119 |
120 | /*
121 | * Addresses font sizes and margins set differently in IE6/7
122 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
123 | */
124 |
125 | h1 {
126 | font-size: 2em;
127 | margin: 0.67em 0;
128 | }
129 |
130 | h2 {
131 | font-size: 1.5em;
132 | margin: 0.83em 0;
133 | }
134 |
135 | h3 {
136 | font-size: 1.17em;
137 | margin: 1em 0;
138 | }
139 |
140 | h4 {
141 | font-size: 1em;
142 | margin: 1.33em 0;
143 | }
144 |
145 | h5 {
146 | font-size: 0.83em;
147 | margin: 1.67em 0;
148 | }
149 |
150 | h6 {
151 | font-size: 0.75em;
152 | margin: 2.33em 0;
153 | }
154 |
155 | /*
156 | * Addresses styling not present in IE7/8/9, S5, Chrome
157 | */
158 |
159 | abbr[title] {
160 | border-bottom: 1px dotted;
161 | }
162 |
163 | /*
164 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
165 | */
166 |
167 | b,
168 | strong {
169 | font-weight: bold;
170 | }
171 |
172 | blockquote {
173 | margin: 1em 40px;
174 | }
175 |
176 | /*
177 | * Addresses styling not present in S5, Chrome
178 | */
179 |
180 | dfn {
181 | font-style: italic;
182 | }
183 |
184 | /*
185 | * Addresses styling not present in IE6/7/8/9
186 | */
187 |
188 | mark {
189 | background: #ff0;
190 | color: #000;
191 | }
192 |
193 | /*
194 | * Addresses margins set differently in IE6/7
195 | */
196 |
197 | p,
198 | pre {
199 | margin: 1em 0;
200 | }
201 |
202 | /*
203 | * Corrects font family set oddly in IE6, S4/5, Chrome
204 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
205 | */
206 |
207 | pre,
208 | code,
209 | kbd,
210 | samp {
211 | font-family: monospace, serif;
212 | _font-family: 'courier new', monospace;
213 | font-size: 1em;
214 | }
215 |
216 | /*
217 | * Improves readability of pre-formatted text in all browsers
218 | */
219 |
220 | pre {
221 | white-space: pre;
222 | white-space: pre-wrap;
223 | word-wrap: break-word;
224 | }
225 |
226 | /*
227 | * 1. Addresses CSS quotes not supported in IE6/7
228 | * 2. Addresses quote property not supported in S4
229 | */
230 |
231 | /* 1 */
232 |
233 | q {
234 | quotes: none;
235 | }
236 |
237 | /* 2 */
238 |
239 | q:before,
240 | q:after {
241 | content: '';
242 | content: none;
243 | }
244 |
245 | small {
246 | font-size: 75%;
247 | }
248 |
249 | /*
250 | * Prevents sub and sup affecting line-height in all browsers
251 | * gist.github.com/413930
252 | */
253 |
254 | sub,
255 | sup {
256 | font-size: 75%;
257 | line-height: 0;
258 | position: relative;
259 | vertical-align: baseline;
260 | }
261 |
262 | sup {
263 | top: -0.5em;
264 | }
265 |
266 | sub {
267 | bottom: -0.25em;
268 | }
269 |
270 |
271 | /* =============================================================================
272 | Lists
273 | ========================================================================== */
274 |
275 | /*
276 | * Addresses margins set differently in IE6/7
277 | */
278 |
279 | dl,
280 | menu,
281 | ol,
282 | ul {
283 | margin: 1em 0;
284 | }
285 |
286 | dd {
287 | margin: 0 0 0 40px;
288 | }
289 |
290 | /*
291 | * Addresses paddings set differently in IE6/7
292 | */
293 |
294 | menu,
295 | ol,
296 | ul {
297 | padding: 0 0 0 40px;
298 | }
299 |
300 | /*
301 | * Corrects list images handled incorrectly in IE7
302 | */
303 |
304 | nav ul,
305 | nav ol {
306 | list-style: none;
307 | list-style-image: none;
308 | }
309 |
310 |
311 | /* =============================================================================
312 | Embedded content
313 | ========================================================================== */
314 |
315 | /*
316 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
317 | * 2. Improves image quality when scaled in IE7
318 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
319 | */
320 |
321 | img {
322 | border: 0; /* 1 */
323 | -ms-interpolation-mode: bicubic; /* 2 */
324 | }
325 |
326 | /*
327 | * Corrects overflow displayed oddly in IE9
328 | */
329 |
330 | svg:not(:root) {
331 | overflow: hidden;
332 | }
333 |
334 |
335 | /* =============================================================================
336 | Figures
337 | ========================================================================== */
338 |
339 | /*
340 | * Addresses margin not present in IE6/7/8/9, S5, O11
341 | */
342 |
343 | figure {
344 | margin: 0;
345 | }
346 |
347 |
348 | /* =============================================================================
349 | Forms
350 | ========================================================================== */
351 |
352 | /*
353 | * Corrects margin displayed oddly in IE6/7
354 | */
355 |
356 | form {
357 | margin: 0;
358 | }
359 |
360 | /*
361 | * Define consistent border, margin, and padding
362 | */
363 |
364 | fieldset {
365 | border: 1px solid #c0c0c0;
366 | margin: 0 2px;
367 | padding: 0.35em 0.625em 0.75em;
368 | }
369 |
370 | /*
371 | * 1. Corrects color not being inherited in IE6/7/8/9
372 | * 2. Corrects text not wrapping in FF3
373 | * 3. Corrects alignment displayed oddly in IE6/7
374 | */
375 |
376 | legend {
377 | border: 0; /* 1 */
378 | padding: 0;
379 | white-space: normal; /* 2 */
380 | *margin-left: -7px; /* 3 */
381 | }
382 |
383 | /*
384 | * 1. Corrects font size not being inherited in all browsers
385 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
386 | * 3. Improves appearance and consistency in all browsers
387 | */
388 |
389 | button,
390 | input,
391 | select,
392 | textarea {
393 | font-size: 100%; /* 1 */
394 | margin: 0; /* 2 */
395 | vertical-align: baseline; /* 3 */
396 | *vertical-align: middle; /* 3 */
397 | }
398 |
399 | /*
400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
401 | */
402 |
403 | button,
404 | input {
405 | line-height: normal; /* 1 */
406 | }
407 |
408 | /*
409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
410 | * 2. Corrects inability to style clickable 'input' types in iOS
411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
412 | * Known issue: inner spacing remains in IE6
413 | */
414 |
415 | button,
416 | input[type="button"],
417 | input[type="reset"],
418 | input[type="submit"] {
419 | cursor: pointer; /* 1 */
420 | -webkit-appearance: button; /* 2 */
421 | *overflow: visible; /* 3 */
422 | }
423 |
424 | /*
425 | * Re-set default cursor for disabled elements
426 | */
427 |
428 | button[disabled],
429 | input[disabled] {
430 | cursor: default;
431 | }
432 |
433 | /*
434 | * 1. Addresses box sizing set to content-box in IE8/9
435 | * 2. Removes excess padding in IE8/9
436 | * 3. Removes excess padding in IE7
437 | Known issue: excess padding remains in IE6
438 | */
439 |
440 | input[type="checkbox"],
441 | input[type="radio"] {
442 | box-sizing: border-box; /* 1 */
443 | padding: 0; /* 2 */
444 | *height: 13px; /* 3 */
445 | *width: 13px; /* 3 */
446 | }
447 |
448 | /*
449 | * 1. Addresses appearance set to searchfield in S5, Chrome
450 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
451 | */
452 |
453 | input[type="search"] {
454 | -webkit-appearance: textfield; /* 1 */
455 | -moz-box-sizing: content-box;
456 | -webkit-box-sizing: content-box; /* 2 */
457 | box-sizing: content-box;
458 | }
459 |
460 | /*
461 | * Removes inner padding and search cancel button in S5, Chrome on OS X
462 | */
463 |
464 | input[type="search"]::-webkit-search-decoration,
465 | input[type="search"]::-webkit-search-cancel-button {
466 | -webkit-appearance: none;
467 | }
468 |
469 | /*
470 | * Removes inner padding and border in FF3+
471 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
472 | */
473 |
474 | button::-moz-focus-inner,
475 | input::-moz-focus-inner {
476 | border: 0;
477 | padding: 0;
478 | }
479 |
480 | /*
481 | * 1. Removes default vertical scrollbar in IE6/7/8/9
482 | * 2. Improves readability and alignment in all browsers
483 | */
484 |
485 | textarea {
486 | overflow: auto; /* 1 */
487 | vertical-align: top; /* 2 */
488 | }
489 |
490 |
491 | /* =============================================================================
492 | Tables
493 | ========================================================================== */
494 |
495 | /*
496 | * Remove most spacing between table cells
497 | */
498 |
499 | table {
500 | border-collapse: collapse;
501 | border-spacing: 0;
502 | }
--------------------------------------------------------------------------------
/templates/swissen/css/pdf.css:
--------------------------------------------------------------------------------
1 | body.pdf {
2 | color: black;
3 |
4 | a {
5 | text-decoration: none;
6 | color: black;
7 | }
8 | .container {
9 | width: 1000px;
10 | margin: 0 auto;
11 | padding: 0;
12 | background: none;
13 | border: none;
14 | border-width: 8px 0 2px 0;
15 | text-align: left;
16 | }
17 |
18 | .resume {
19 | position:relative;
20 | padding: 40px 80px;
21 | }
22 |
23 | a[href$='.pdf'] {
24 | display: none;
25 | }
26 |
27 | h1 {
28 | letter-spacing: 0;
29 | margin-top: 0;
30 | font-size: 48px;
31 | text-transform: none;
32 | }
33 | h2 {
34 | letter-spacing: 0;
35 | text-transform: uppercase;
36 | font-weight: normal;
37 | }
38 | h3 {
39 | float: left;
40 | width: 20%;
41 | font-style: normal;
42 | }
43 | h3+p {
44 | float: left;
45 | width: 80%;
46 | }
47 |
48 | blockquote {
49 | top: 40px;
50 | right: 50px;
51 | position: absolute;
52 | }
53 |
54 | ul dl {
55 | margin: 0;
56 | padding: 0.3em 0 0;
57 | dt {
58 | font-size: 122%;
59 | font-weight: normal;
60 | margin: 0 0 .75em;
61 | }
62 | dd {
63 | padding: 0 4em 0 0;
64 | }
65 | }
66 |
67 | ol {
68 | float: left;
69 | width: 80%;
70 | margin: .7em 0 0;
71 | }
72 |
73 | ol li {
74 | width: 33%;
75 | margin: 0;
76 | }
77 | ol li:nth-child(3n) {
78 | width: 34%;
79 | }
80 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
81 | border-top: none;
82 | }
83 |
84 | dl {
85 | margin: .7em 0 0;
86 | page-break-inside: avoid !important;
87 | display: block;
88 | dt {}
89 | dd {
90 | }
91 | strong {
92 | float: right;
93 | margin-top: -2em;
94 | }
95 | em {
96 | font-size: 130%;
97 | font-style: normal;
98 | }
99 |
100 | }
101 |
102 | }
103 |
--------------------------------------------------------------------------------
/templates/swissen/css/resume.css:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | zoom: 1;
3 | &:after {
4 | display: block;
5 | visibility: hidden;
6 | height: 0;
7 | clear: both;
8 | content: ".";
9 | }
10 | }
11 |
12 | body {
13 | font-family: 'Helvetica Neue', 'Helvetica', Arial, serif;
14 | color: #444;
15 | }
16 | h1, h2, h3, h4, ul dl dt {
17 | font-family: 'Helvetica Neue Light', 'Helvetica', Arial, serif;
18 | }
19 |
20 | h1:before{
21 | content: "+";
22 | font-weight: bold;
23 | color: orange;
24 | margin: -1em 0 0 -0.5em;
25 | position: relative;
26 | top: -0.4em;
27 | }
28 |
29 | .container {
30 | margin: 0 auto;
31 | padding: 0;
32 | background: whiteSmoke;
33 | border: solid #666;
34 | border-width: 8px 0 2px 0;
35 | text-align: left;
36 | }
37 |
38 | .resume {
39 | position:relative;
40 | padding: 10px 20px;
41 | }
42 |
43 | a {
44 | color: #990003;
45 | }
46 |
47 | a[href$='.pdf'] {
48 | display: inline-block;
49 | background: #666;
50 | color: white;
51 | padding: 6px 12px;
52 | margin-bottom: 6px;
53 | text-decoration: none;
54 | }
55 |
56 | blockquote {
57 | margin: 0;
58 | padding: 0;
59 | line-height: 1.4em;
60 | }
61 |
62 | hr {
63 | display: block;
64 | position: relative;
65 | padding: 0;
66 | margin: 18px auto;
67 | width: 100%;
68 | clear: both;
69 | border: none;
70 | border-top: 1px solid #CCC;
71 | font-size: 1px;
72 | line-height: 0;
73 | overflow: visible;
74 | page-break-after: avoid;
75 | }
76 |
77 | h1 {
78 | margin: 0;
79 | padding: 0;
80 | font-size: 36px;
81 | letter-spacing: -1px;
82 | font-weight: bold;
83 | }
84 | h2 {
85 | margin: 0;
86 | padding: 0;
87 | font-size: 18px;
88 | letter-spacing: -1px;
89 | font-weight: bold;
90 | }
91 |
92 | h3 {
93 | margin: 0;
94 | padding: 0 0 .5em;
95 | font-size: 150%;
96 | font-weight: bold;
97 | }
98 |
99 | h3+p {
100 | margin: 0 0 16px;
101 | padding: 0;
102 | display: block;
103 | font-size: 104%;
104 | line-height: 24px;
105 | }
106 |
107 |
108 | ul {
109 | margin: 0;
110 | padding: 0;
111 | list-style: none;
112 | display: flex;
113 | flex-wrap: wrap;
114 | }
115 | ul li {
116 | margin: 0;
117 | padding: 0;
118 | flex-basis: 33%;
119 | }
120 |
121 | ul dl {
122 | margin: .3em 0 0;
123 | padding: 0;
124 | width: 100%;
125 | dt {
126 | font-size: 100%;
127 | }
128 | dd {
129 | margin: 0 0 1em;
130 | padding: 0 2em 0 0;
131 | font-size: .8em;
132 | line-height: 1.5em;
133 | }
134 | }
135 |
136 | ol {
137 | margin: 0;
138 | padding: 0 0 .75em;
139 | width: 80%;
140 | display: inline-block;
141 | }
142 |
143 | ol li {
144 | margin: 0 0 0 1em;
145 | padding: 0;
146 | border-top: 1px solid #CCCCCC;
147 | width: 100%;
148 | float: left;
149 | list-style: none;
150 | line-height: 24px;
151 | font-size: 14px;
152 | }
153 | ol li:nth-child(1) {
154 | border-top: none;
155 | }
156 |
157 | dl {
158 | float:left;
159 | display: block;
160 | /*display: inline-block;*/
161 | width: 75%;
162 | margin: 0;
163 | padding: 0;
164 | dt {
165 | margin: 0;
166 | padding: 0;
167 | font-size: 140%;
168 | }
169 | dd {
170 | margin: 0 0 1.5em;
171 | padding: 0;
172 | font-size: 80%;
173 | line-height: 1.4em;
174 | }
175 | strong {
176 | display: block;
177 | }
178 | em {
179 | display: block;
180 | font-size: 110%;
181 | margin: .15em 0 .5em;
182 | font-style: bold;
183 | }
184 |
185 | }
186 |
187 | dl dd li{width: 100%; margin: 0 1em 1em; list-style-type: square;}
188 | dl dt{display: block; clear: both;}
189 | dl dt{border-top: 1px solid #ccc; padding-top: 1em;}
190 | h3 + dl dt:first-child{border: 0;padding-top: 0;}
191 | dl dd p:first-child{font-weight: bold; text-transform: uppercase; font-size: 1.2em;}
192 |
193 | ul li dt{border: 0; padding-top: 0;}
194 |
195 | #footer {
196 | display: none;
197 | }
198 |
199 | #footer + p {
200 | width: 100%;
201 | font-size: 11px;
202 | text-align: center;
203 | }
204 |
--------------------------------------------------------------------------------
/templates/swissen/css/screen.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | Mobile layout
5 | 240–479 px
6 | Zoomed out below 320 px
7 | */
8 |
9 | @media screen and (min-width: 15em) {
10 | }
11 |
12 |
13 | /*
14 | Wide mobile layout
15 | 480-767 px
16 | Zoomed in above 480 px
17 | */
18 |
19 | @media screen and (min-width: 30em) {
20 | }
21 |
22 |
23 | /*
24 | Tablet layout
25 | 600-911 px
26 | Zoomed in above 600 px
27 | */
28 |
29 | @media screen and (min-width: 37.5em) {
30 | body {
31 | padding: 2em 0;
32 | }
33 | blockquote {
34 | top: 10px;
35 | right: 50px;
36 | position: absolute;
37 | }
38 | h1 { /* Open up the top section height so we don't collapse on the blockquote */
39 | margin-top: .5em;
40 | }
41 | ol {
42 | margin: 0 0 0 1em;
43 | }
44 | ol li {
45 | width: 50%;
46 | margin: 0;
47 | }
48 | ol li:nth-child(1), ol li:nth-child(2) {
49 | border-top: none;
50 | }
51 | }
52 |
53 |
54 | /*
55 | Widescreen layout
56 | 912-1887 px
57 | Zoomed in above 912 px
58 | */
59 |
60 | @media screen and (min-width: 57em) {
61 | .container {
62 | width: 912px;
63 | }
64 | .resume {
65 | position:relative;
66 | padding: 40px 50px;
67 | }
68 | blockquote {
69 | top: 40px;
70 | right: 50px;
71 | position: absolute;
72 | }
73 | h1 {
74 | margin-top: 0;
75 | font-size: 48px;
76 | letter-spacing: -1px;
77 | }
78 | h2 {
79 | text-transform: uppercase;
80 | letter-spacing: 3px;
81 | }
82 |
83 | h3 {
84 | float: left;
85 | width: 20%;
86 | }
87 |
88 | h3+p {
89 | float: left;
90 | width: 80%;
91 | }
92 | ul dl {
93 | dt {
94 | font-size: 122%;
95 | font-weight: normal;
96 | margin-bottom: .75em;
97 | }
98 | dd {
99 | padding: 0 4em 0 0;
100 | }
101 | }
102 |
103 | ol {
104 | float: left;
105 | width: 80%;
106 | margin: .6em 0 0;
107 | }
108 |
109 | ol li {
110 | width: 33%;
111 | margin: 0;
112 | }
113 | ol li:nth-child(3n) {
114 | width: 34%;
115 | }
116 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
117 | border-top: none;
118 | }
119 |
120 | dl {
121 | /*margin: .5em 0 0;*/
122 | dt {
123 | }
124 | dd {
125 | }
126 | strong {
127 | float: right;
128 | margin-top: -2em;
129 | }
130 | em {
131 | font-size: 130%;
132 | font-style: normal;
133 | }
134 |
135 | }
136 |
137 |
138 | }
139 |
140 |
141 | /*
142 | Huge-screen layout
143 | 1888-2520 px
144 | Zoomed in above 1920 px
145 | */
146 |
147 | @media screen and (min-width: 118em) {
148 |
149 |
150 | }
151 |
--------------------------------------------------------------------------------
/templates/swissen/description.txt:
--------------------------------------------------------------------------------
1 | Simple Helvetica based layout from Aaron Glenn
--------------------------------------------------------------------------------
/templates/swissen/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{title}}
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{{resume}}}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/templates/unstyled/css/elements.less:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------
2 | LESS Elements 0.6
3 | ---------------------------------------------------
4 | A set of useful LESS mixins by Dmitry Fadeyev
5 | Special thanks for mixin suggestions to:
6 | Kris Van Herzeele,
7 | Benoit Adam,
8 | Portenart Emile-Victor,
9 | Ryan Faerman
10 |
11 | More info at: http://lesselements.com
12 | -----------------------------------------------------*/
13 |
14 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
15 | background: @color;
16 | background: -webkit-gradient(linear,
17 | left bottom,
18 | left top,
19 | color-stop(0, @start),
20 | color-stop(1, @stop));
21 | background: -ms-linear-gradient(bottom,
22 | @start,
23 | @stop);
24 | background: -moz-linear-gradient(center bottom,
25 | @start 0%,
26 | @stop 100%);
27 | }
28 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
29 | background: @color;
30 | background: -webkit-gradient(linear,
31 | left bottom,
32 | left top,
33 | color-stop(0, rgb(@start,@start,@start)),
34 | color-stop(1, rgb(@stop,@stop,@stop)));
35 | background: -ms-linear-gradient(bottom,
36 | rgb(@start,@start,@start) 0%,
37 | rgb(@start,@start,@start) 100%);
38 | background: -moz-linear-gradient(center bottom,
39 | rgb(@start,@start,@start) 0%,
40 | rgb(@stop,@stop,@stop) 100%);
41 | }
42 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
43 | border-top: solid 1px @top-color;
44 | border-left: solid 1px @left-color;
45 | border-right: solid 1px @right-color;
46 | border-bottom: solid 1px @bottom-color;
47 | }
48 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
49 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
52 | }
53 | .rounded(@radius: 2px) {
54 | -webkit-border-radius: @radius;
55 | -moz-border-radius: @radius;
56 | border-radius: @radius;
57 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
58 | }
59 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
60 | -webkit-border-top-right-radius: @topright;
61 | -webkit-border-bottom-right-radius: @bottomright;
62 | -webkit-border-bottom-left-radius: @bottomleft;
63 | -webkit-border-top-left-radius: @topleft;
64 | -moz-border-radius-topright: @topright;
65 | -moz-border-radius-bottomright: @bottomright;
66 | -moz-border-radius-bottomleft: @bottomleft;
67 | -moz-border-radius-topleft: @topleft;
68 | border-top-right-radius: @topright;
69 | border-bottom-right-radius: @bottomright;
70 | border-bottom-left-radius: @bottomleft;
71 | border-top-left-radius: @topleft;
72 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
73 | }
74 | .opacity(@opacity: 0.5) {
75 | -moz-opacity: @opacity;
76 | -khtml-opacity: @opacity;
77 | -webkit-opacity: @opacity;
78 | opacity: @opacity;
79 | }
80 | .transition-duration(@duration: 0.2s) {
81 | -moz-transition-duration: @duration;
82 | -webkit-transition-duration: @duration;
83 | transition-duration: @duration;
84 | }
85 | .rotation(@deg:5deg){
86 | -webkit-transform: rotate(@deg);
87 | -moz-transform: rotate(@deg);
88 | transform: rotate(@deg);
89 | }
90 | .scale(@ratio:1.5){
91 | -webkit-transform:scale(@ratio);
92 | -moz-transform:scale(@ratio);
93 | transform:scale(@ratio);
94 | }
95 | .transition(@duration:0.2s, @ease:ease-out) {
96 | -webkit-transition: all @duration @ease;
97 | -moz-transition: all @duration @ease;
98 | transition: all @duration @ease;
99 | }
100 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
101 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
104 | }
105 | .box-shadow(@arguments) {
106 | -webkit-box-shadow: @arguments;
107 | -moz-box-shadow: @arguments;
108 | box-shadow: @arguments;
109 | }
110 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
111 | -moz-column-width: @colwidth;
112 | -moz-column-count: @colcount;
113 | -moz-column-gap: @colgap;
114 | -moz-column-rule-color: @columnRuleColor;
115 | -moz-column-rule-style: @columnRuleStyle;
116 | -moz-column-rule-width: @columnRuleWidth;
117 | -webkit-column-width: @colwidth;
118 | -webkit-column-count: @colcount;
119 | -webkit-column-gap: @colgap;
120 | -webkit-column-rule-color: @columnRuleColor;
121 | -webkit-column-rule-style: @columnRuleStyle;
122 | -webkit-column-rule-width: @columnRuleWidth;
123 | column-width: @colwidth;
124 | column-count: @colcount;
125 | column-gap: @colgap;
126 | column-rule-color: @columnRuleColor;
127 | column-rule-style: @columnRuleStyle;
128 | column-rule-width: @columnRuleWidth;
129 | }
130 | .translate(@x:0, @y:0) {
131 | -moz-transform: translate(@x, @y);
132 | -webkit-transform: translate(@x, @y);
133 | -o-transform: translate(@x, @y);
134 | -ms-transform: translate(@x, @y);
135 | transform: translate(@x, @y);
136 | }
137 |
--------------------------------------------------------------------------------
/templates/unstyled/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css 2012-02-07T12:37 UTC - http://github.com/necolas/normalize.css */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | /*
8 | * Corrects block display not defined in IE6/7/8/9 & FF3
9 | */
10 |
11 | article,
12 | aside,
13 | details,
14 | figcaption,
15 | figure,
16 | footer,
17 | header,
18 | hgroup,
19 | nav,
20 | section,
21 | summary {
22 | display: block;
23 | }
24 |
25 | /*
26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3
27 | */
28 |
29 | audio,
30 | canvas,
31 | video {
32 | display: inline-block;
33 | *display: inline;
34 | *zoom: 1;
35 | }
36 |
37 | /*
38 | * Prevents modern browsers from displaying 'audio' without controls
39 | */
40 |
41 | audio:not([controls]) {
42 | display: none;
43 | }
44 |
45 | /*
46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
47 | * Known issue: no IE6 support
48 | */
49 |
50 | [hidden] {
51 | display: none;
52 | }
53 |
54 |
55 | /* =============================================================================
56 | Base
57 | ========================================================================== */
58 |
59 | /*
60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
61 | * http://clagnut.com/blog/348/#c790
62 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
63 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
64 | */
65 |
66 | html {
67 | font-size: 100%; /* 1 */
68 | -webkit-text-size-adjust: 100%; /* 2 */
69 | -ms-text-size-adjust: 100%; /* 2 */
70 | }
71 |
72 | /*
73 | * Addresses font-family inconsistency between 'textarea' and other form elements.
74 | */
75 |
76 | html,
77 | button,
78 | input,
79 | select,
80 | textarea {
81 | font-family: sans-serif;
82 | }
83 |
84 | /*
85 | * Addresses margins handled incorrectly in IE6/7
86 | */
87 |
88 | body {
89 | margin: 0;
90 | }
91 |
92 |
93 | /* =============================================================================
94 | Links
95 | ========================================================================== */
96 |
97 | /*
98 | * Addresses outline displayed oddly in Chrome
99 | */
100 |
101 | a:focus {
102 | outline: thin dotted;
103 | }
104 |
105 | /*
106 | * Improves readability when focused and also mouse hovered in all browsers
107 | * people.opera.com/patrickl/experiments/keyboard/test
108 | */
109 |
110 | a:hover,
111 | a:active {
112 | outline: 0;
113 | }
114 |
115 |
116 | /* =============================================================================
117 | Typography
118 | ========================================================================== */
119 |
120 | /*
121 | * Addresses font sizes and margins set differently in IE6/7
122 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
123 | */
124 |
125 | h1 {
126 | font-size: 2em;
127 | margin: 0.67em 0;
128 | }
129 |
130 | h2 {
131 | font-size: 1.5em;
132 | margin: 0.83em 0;
133 | }
134 |
135 | h3 {
136 | font-size: 1.17em;
137 | margin: 1em 0;
138 | }
139 |
140 | h4 {
141 | font-size: 1em;
142 | margin: 1.33em 0;
143 | }
144 |
145 | h5 {
146 | font-size: 0.83em;
147 | margin: 1.67em 0;
148 | }
149 |
150 | h6 {
151 | font-size: 0.75em;
152 | margin: 2.33em 0;
153 | }
154 |
155 | /*
156 | * Addresses styling not present in IE7/8/9, S5, Chrome
157 | */
158 |
159 | abbr[title] {
160 | border-bottom: 1px dotted;
161 | }
162 |
163 | /*
164 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
165 | */
166 |
167 | b,
168 | strong {
169 | font-weight: bold;
170 | }
171 |
172 | blockquote {
173 | margin: 1em 40px;
174 | }
175 |
176 | /*
177 | * Addresses styling not present in S5, Chrome
178 | */
179 |
180 | dfn {
181 | font-style: italic;
182 | }
183 |
184 | /*
185 | * Addresses styling not present in IE6/7/8/9
186 | */
187 |
188 | mark {
189 | background: #ff0;
190 | color: #000;
191 | }
192 |
193 | /*
194 | * Addresses margins set differently in IE6/7
195 | */
196 |
197 | p,
198 | pre {
199 | margin: 1em 0;
200 | }
201 |
202 | /*
203 | * Corrects font family set oddly in IE6, S4/5, Chrome
204 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59
205 | */
206 |
207 | pre,
208 | code,
209 | kbd,
210 | samp {
211 | font-family: monospace, serif;
212 | _font-family: 'courier new', monospace;
213 | font-size: 1em;
214 | }
215 |
216 | /*
217 | * Improves readability of pre-formatted text in all browsers
218 | */
219 |
220 | pre {
221 | white-space: pre;
222 | white-space: pre-wrap;
223 | word-wrap: break-word;
224 | }
225 |
226 | /*
227 | * 1. Addresses CSS quotes not supported in IE6/7
228 | * 2. Addresses quote property not supported in S4
229 | */
230 |
231 | /* 1 */
232 |
233 | q {
234 | quotes: none;
235 | }
236 |
237 | /* 2 */
238 |
239 | q:before,
240 | q:after {
241 | content: '';
242 | content: none;
243 | }
244 |
245 | small {
246 | font-size: 75%;
247 | }
248 |
249 | /*
250 | * Prevents sub and sup affecting line-height in all browsers
251 | * gist.github.com/413930
252 | */
253 |
254 | sub,
255 | sup {
256 | font-size: 75%;
257 | line-height: 0;
258 | position: relative;
259 | vertical-align: baseline;
260 | }
261 |
262 | sup {
263 | top: -0.5em;
264 | }
265 |
266 | sub {
267 | bottom: -0.25em;
268 | }
269 |
270 |
271 | /* =============================================================================
272 | Lists
273 | ========================================================================== */
274 |
275 | /*
276 | * Addresses margins set differently in IE6/7
277 | */
278 |
279 | dl,
280 | menu,
281 | ol,
282 | ul {
283 | margin: 1em 0;
284 | }
285 |
286 | dd {
287 | margin: 0 0 0 40px;
288 | }
289 |
290 | /*
291 | * Addresses paddings set differently in IE6/7
292 | */
293 |
294 | menu,
295 | ol,
296 | ul {
297 | padding: 0 0 0 40px;
298 | }
299 |
300 | /*
301 | * Corrects list images handled incorrectly in IE7
302 | */
303 |
304 | nav ul,
305 | nav ol {
306 | list-style: none;
307 | list-style-image: none;
308 | }
309 |
310 |
311 | /* =============================================================================
312 | Embedded content
313 | ========================================================================== */
314 |
315 | /*
316 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
317 | * 2. Improves image quality when scaled in IE7
318 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
319 | */
320 |
321 | img {
322 | border: 0; /* 1 */
323 | -ms-interpolation-mode: bicubic; /* 2 */
324 | }
325 |
326 | /*
327 | * Corrects overflow displayed oddly in IE9
328 | */
329 |
330 | svg:not(:root) {
331 | overflow: hidden;
332 | }
333 |
334 |
335 | /* =============================================================================
336 | Figures
337 | ========================================================================== */
338 |
339 | /*
340 | * Addresses margin not present in IE6/7/8/9, S5, O11
341 | */
342 |
343 | figure {
344 | margin: 0;
345 | }
346 |
347 |
348 | /* =============================================================================
349 | Forms
350 | ========================================================================== */
351 |
352 | /*
353 | * Corrects margin displayed oddly in IE6/7
354 | */
355 |
356 | form {
357 | margin: 0;
358 | }
359 |
360 | /*
361 | * Define consistent border, margin, and padding
362 | */
363 |
364 | fieldset {
365 | border: 1px solid #c0c0c0;
366 | margin: 0 2px;
367 | padding: 0.35em 0.625em 0.75em;
368 | }
369 |
370 | /*
371 | * 1. Corrects color not being inherited in IE6/7/8/9
372 | * 2. Corrects text not wrapping in FF3
373 | * 3. Corrects alignment displayed oddly in IE6/7
374 | */
375 |
376 | legend {
377 | border: 0; /* 1 */
378 | padding: 0;
379 | white-space: normal; /* 2 */
380 | *margin-left: -7px; /* 3 */
381 | }
382 |
383 | /*
384 | * 1. Corrects font size not being inherited in all browsers
385 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
386 | * 3. Improves appearance and consistency in all browsers
387 | */
388 |
389 | button,
390 | input,
391 | select,
392 | textarea {
393 | font-size: 100%; /* 1 */
394 | margin: 0; /* 2 */
395 | vertical-align: baseline; /* 3 */
396 | *vertical-align: middle; /* 3 */
397 | }
398 |
399 | /*
400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
401 | */
402 |
403 | button,
404 | input {
405 | line-height: normal; /* 1 */
406 | }
407 |
408 | /*
409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others
410 | * 2. Corrects inability to style clickable 'input' types in iOS
411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs
412 | * Known issue: inner spacing remains in IE6
413 | */
414 |
415 | button,
416 | input[type="button"],
417 | input[type="reset"],
418 | input[type="submit"] {
419 | cursor: pointer; /* 1 */
420 | -webkit-appearance: button; /* 2 */
421 | *overflow: visible; /* 3 */
422 | }
423 |
424 | /*
425 | * Re-set default cursor for disabled elements
426 | */
427 |
428 | button[disabled],
429 | input[disabled] {
430 | cursor: default;
431 | }
432 |
433 | /*
434 | * 1. Addresses box sizing set to content-box in IE8/9
435 | * 2. Removes excess padding in IE8/9
436 | * 3. Removes excess padding in IE7
437 | Known issue: excess padding remains in IE6
438 | */
439 |
440 | input[type="checkbox"],
441 | input[type="radio"] {
442 | box-sizing: border-box; /* 1 */
443 | padding: 0; /* 2 */
444 | *height: 13px; /* 3 */
445 | *width: 13px; /* 3 */
446 | }
447 |
448 | /*
449 | * 1. Addresses appearance set to searchfield in S5, Chrome
450 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
451 | */
452 |
453 | input[type="search"] {
454 | -webkit-appearance: textfield; /* 1 */
455 | -moz-box-sizing: content-box;
456 | -webkit-box-sizing: content-box; /* 2 */
457 | box-sizing: content-box;
458 | }
459 |
460 | /*
461 | * Removes inner padding and search cancel button in S5, Chrome on OS X
462 | */
463 |
464 | input[type="search"]::-webkit-search-decoration,
465 | input[type="search"]::-webkit-search-cancel-button {
466 | -webkit-appearance: none;
467 | }
468 |
469 | /*
470 | * Removes inner padding and border in FF3+
471 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
472 | */
473 |
474 | button::-moz-focus-inner,
475 | input::-moz-focus-inner {
476 | border: 0;
477 | padding: 0;
478 | }
479 |
480 | /*
481 | * 1. Removes default vertical scrollbar in IE6/7/8/9
482 | * 2. Improves readability and alignment in all browsers
483 | */
484 |
485 | textarea {
486 | overflow: auto; /* 1 */
487 | vertical-align: top; /* 2 */
488 | }
489 |
490 |
491 | /* =============================================================================
492 | Tables
493 | ========================================================================== */
494 |
495 | /*
496 | * Remove most spacing between table cells
497 | */
498 |
499 | table {
500 | border-collapse: collapse;
501 | border-spacing: 0;
502 | }
--------------------------------------------------------------------------------
/templates/unstyled/css/pdf.css:
--------------------------------------------------------------------------------
1 | body.pdf {
2 | color: black;
3 |
4 | a {
5 | text-decoration: none;
6 | color: black;
7 | }
8 | .container {
9 | width: 1000px;
10 | margin: 0 auto;
11 | padding: 0;
12 | background: none;
13 | border: none;
14 | text-align: left;
15 | }
16 |
17 | a[href$='.pdf'] {
18 | display: none;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/templates/unstyled/css/resume.css:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | zoom: 1;
3 | &:after {
4 | display: block;
5 | visibility: hidden;
6 | height: 0;
7 | clear: both;
8 | content: ".";
9 | }
10 | }
11 |
12 | body {
13 | color: #222;
14 | margin: 1em;
15 | }
16 |
17 | #footer {
18 | display: none;
19 | }
20 | #footer + p {
21 | font-size: 13px;
22 | font-style: italic;
23 | color: #444;
24 | }
--------------------------------------------------------------------------------
/templates/unstyled/css/screen.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /*
4 | Mobile layout
5 | 240–479 px
6 | Zoomed out below 320 px
7 | */
8 | @media screen and (min-width: 15em) {
9 | }
10 |
11 |
12 | /*
13 | Wide mobile layout
14 | 480-767 px
15 | Zoomed in above 480 px
16 | */
17 | @media screen and (min-width: 30em) {
18 | }
19 |
20 |
21 | /*
22 | Tablet layout
23 | 600-911 px
24 | Zoomed in above 600 px
25 | */
26 | @media screen and (min-width: 37.5em) {
27 |
28 | }
29 |
30 |
31 | /*
32 | Widescreen layout
33 | 912-1887 px
34 | Zoomed in above 912 px
35 | */
36 | @media screen and (min-width: 57em) {
37 |
38 | }
39 |
40 |
41 | /*
42 | Huge-screen layout
43 | 1888-2520 px
44 | Zoomed in above 1920 px
45 | */
46 | @media screen and (min-width: 118em) {
47 |
48 |
49 | }
--------------------------------------------------------------------------------
/templates/unstyled/description.txt:
--------------------------------------------------------------------------------
1 | Unstyled, useful as a base for your own templates
2 |
--------------------------------------------------------------------------------
/templates/unstyled/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{title}}
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{{resume}}}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/tests/ListCommandTest.php:
--------------------------------------------------------------------------------
1 | console->find('list');
11 | $commandTester = new CommandTester($command);
12 | $commandTester->execute(array(
13 | 'command' => $command->getName()
14 | ));
15 | $this->assertRegExp('/Available commands/', $commandTester->getDisplay());
16 | $this->assertRegExp('/Options/', $commandTester->getDisplay());
17 | $this->assertRegExp('/list/', $commandTester->getDisplay());
18 | }
19 | }
20 |
21 |
22 | /* End of file ListCommandTest.php */
23 |
--------------------------------------------------------------------------------
/tests/VersionCommandTest.php:
--------------------------------------------------------------------------------
1 | console->find('version');
11 | $commandTester = new CommandTester($command);
12 | $commandTester->execute(array(
13 | 'command' => $command->getName()
14 | ));
15 | $this->assertEquals($this->console->project->version, trim($commandTester->getDisplay()));
16 | }
17 | }
18 |
19 |
20 | /* End of file VersionCommandTest.php */
21 |
--------------------------------------------------------------------------------
/tests/bootstrap.php:
--------------------------------------------------------------------------------
1 | add('Resume', __DIR__ . '/../src');
5 |
6 | use PHPUnit\Framework\TestCase;
7 | use Resume\Cli\Resume;
8 |
9 | class ResumeTest extends TestCase
10 | {
11 | public $console;
12 |
13 | public function setUp()
14 | {
15 | $templatePath = realpath(__DIR__ . '/../templates/');
16 | $consoleTemplatePath = realpath(__DIR__ . '/../src/Resume/Templates');
17 | $project = json_decode(file_get_contents(__DIR__ . '/../composer.json'));
18 | $project->version = 0;
19 |
20 | $this->console = new Resume();
21 | $this->console->initialize($templatePath, $consoleTemplatePath, $project);
22 | }
23 | }
24 |
25 | /* End file bootstrap.php */
26 |
--------------------------------------------------------------------------------