├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .travis.yml
├── Dockerfile
├── LICENSE
├── README.md
├── mocha.conf.js
├── package-lock.json
├── package.json
├── resume.html
├── resume.pdf
├── src
├── cli.js
├── markdown-resume.js
└── pdf.js
├── standard.html
├── standard.pdf
├── templates
├── common.css
├── default
│ ├── assets
│ │ └── less
│ │ │ ├── _partials
│ │ │ ├── _mixins.less
│ │ │ ├── _normalize.less
│ │ │ ├── _pdf.less
│ │ │ └── _variables.less
│ │ │ └── resume.less
│ └── index.html
├── roboto
│ ├── assets
│ │ └── less
│ │ │ ├── elements.less
│ │ │ ├── normalize.css
│ │ │ ├── pdf.less
│ │ │ ├── resume.less
│ │ │ └── screen.less
│ └── index.html
├── standard
│ ├── assets
│ │ └── less
│ │ │ ├── new.less
│ │ │ └── resume.less
│ ├── index.html
│ └── pdf.json
└── swissen
│ ├── assets
│ └── less
│ │ ├── elements.less
│ │ ├── normalize.css
│ │ ├── pdf.less
│ │ ├── resume.less
│ │ └── screen.less
│ └── index.html
└── test
├── fixtures
├── empty.md
├── other.html
├── resume.md
├── standard.md
└── with_image.md
├── md2resume.spec.js
└── mocha.opts
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 |
5 | # Change these settings to your own preference
6 | indent_style = space
7 | indent_size = 2
8 |
9 | # We recommend you to keep these unchanged
10 | end_of_line = lf
11 | charset = utf-8
12 | trim_trailing_whitespace = true
13 | insert_final_newline = true
14 |
15 | [*.md]
16 | insert_final_newline = false
17 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: 'airbnb-base',
3 | env: {
4 | node: true,
5 | mocha: true
6 | },
7 | globals: {
8 | expect: false
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
63 | # Test files
64 | ./*.html
65 | ./*,.pdf
66 |
67 | .tmp/
68 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 9
4 | - 8
5 | - 6
6 | after_success: npm run coverage
7 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mkenney/npm
2 |
3 | WORKDIR /src
4 | COPY . /src
5 |
6 | # extracted from https://github.com/LoicMahieu/alpine-wkhtmltopdf/blob/master/Dockerfile
7 | RUN apk add --no-cache \
8 | xvfb \
9 | # Additionnal dependencies for better rendering
10 | ttf-freefont \
11 | fontconfig \
12 | dbus \
13 | && \
14 |
15 | # Install wkhtmltopdf from `testing` repository
16 | apk add qt5-qtbase-dev \
17 | wkhtmltopdf \
18 | --no-cache \
19 | --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ \
20 | --allow-untrusted \
21 | && \
22 |
23 | # Wrapper for xvfb
24 | mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf-origin && \
25 | echo $'#!/usr/bin/env sh\n\
26 | Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset & \n\
27 | DISPLAY=:0.0 wkhtmltopdf-origin $@ \n\
28 | killall Xvfb\
29 | ' > /usr/bin/wkhtmltopdf && \
30 | chmod +x /usr/bin/wkhtmltopdf
31 |
32 | RUN npm install -g markdown-resume && rm -rf /src/*
33 |
34 | ENTRYPOINT ["md2resume"]
35 | CMD -h
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Brian Hann
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.js [](https://travis-ci.org/c0bra/markdown-resume-js) [](https://coveralls.io/github/c0bra/markdown-resume-js?branch=master)
2 | ==================
3 |
4 | Turn a simple markdown document into a resume in HTML and PDF.
5 |
6 | ## Features
7 |
8 | * PDF generation via wkhtmltopdf
9 | * Responsive design for multiple device viewport sizes
10 | * Simple Markdown formatting
11 |
12 | ## Quickstart
13 |
14 | The generated files will be put in the same directory as your source file.
15 |
16 | # For usage on the command line
17 | npm install -g markdown-resume
18 |
19 | # Generate HTML file
20 | md2resume my-resume-file.md
21 |
22 | # Generate PDF file
23 | md2resume --pdf my-resume-file.md
24 |
25 | ## Running with docker
26 |
27 | # Build a docker image
28 | docker build -t md2resume .
29 |
30 | # In the directory where your resume is, run the container
31 | docker run -v $PWD:/src md2resume resume.md
32 |
33 | # You can also generate the pdf format
34 | docker run -v $PWD:/src md2resume -pdf resume.md
35 |
36 | ## Run in Watch Mode w/ Live Reload
37 |
38 | npm install -g light-server
39 | light-server -s . -w "your_resume.md # md2resume your_resume.md"
40 |
41 | Open http://localhost:4000/your_resume.html in a browser and see changes live.
42 |
43 | ## Use as a node module
44 |
45 | var md2resume = require('markdown-resume')
46 |
47 | # Generate HTML
48 | md2resume('my-resume-file.md', 'default')
49 | .then(html)
50 | # ... do something with html
51 | });
52 |
53 | ## Acknowledgments
54 |
55 | As above, this library steals pretty much everything from [markdown-resume](https://github.com/there4/markdown-resume).
56 |
--------------------------------------------------------------------------------
/mocha.conf.js:
--------------------------------------------------------------------------------
1 | const chai = require('chai');
2 |
3 | global.expect = chai.expect;
4 |
5 | global.sinon = require('sinon');
6 |
7 | chai.use(require('sinon-chai'));
8 | chai.use(require('chai-things'));
9 | chai.use(require('chai-as-promised'));
10 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "markdown-resume",
3 | "version": "2.1.4",
4 | "description": "Turn a simple markdown document into a resume in HTML and PDF",
5 | "keywords": [
6 | "markdown",
7 | "html",
8 | "pdf",
9 | "resume",
10 | "cv",
11 | "node",
12 | "js"
13 | ],
14 | "repository": {
15 | "type": "git",
16 | "url": "git://github.com/c0bra/markdown-resume-js.git"
17 | },
18 | "bugs": {
19 | "url": "https://github.com/c0bra/markdown-resume-js/issues"
20 | },
21 | "main": "src/markdown-resume.js",
22 | "bin": {
23 | "md2resume": "src/cli.js"
24 | },
25 | "files": [
26 | "templates",
27 | "src"
28 | ],
29 | "scripts": {
30 | "dev": "mocha --watch",
31 | "lint": "eslint ./src/ --fix",
32 | "prepublish": "npm run test",
33 | "pretest": "rimraf coverage/",
34 | "test": "nyc --reporter=html --reporter=text mocha",
35 | "coverage": "nyc report --reporter=text-lcov | coveralls"
36 | },
37 | "author": "Brian Hann",
38 | "license": "MIT",
39 | "dependencies": {
40 | "bluebird": "^3.3.4",
41 | "chalk": "^2.3.0",
42 | "cheerio": "^1.0.0-rc.2",
43 | "clean-css": "^4.1.9",
44 | "commander": "^2.9.0",
45 | "html-minifier": "^3.5.8",
46 | "html-pdf": "^2.0.1",
47 | "inliner": "^1.13.1",
48 | "less": "^2.6.1",
49 | "marked": "^0.3.12",
50 | "meow": "^4.0.0",
51 | "mustache": "^2.2.1",
52 | "nyc": "^11.4.1",
53 | "read-pkg": "^3.0.0"
54 | },
55 | "devDependencies": {
56 | "chai": "^4.1.2",
57 | "chai-as-promised": "^7.1.1",
58 | "chai-things": "^0.2.0",
59 | "coveralls": "^3.0.0",
60 | "eslint": "^4.15.0",
61 | "eslint-config-airbnb-base": "^12.1.0",
62 | "eslint-plugin-import": "^2.8.0",
63 | "istanbul": "^0.4.2",
64 | "juice": "^4.2.2",
65 | "mocha": "^4.1.0",
66 | "rimraf": "^2.5.2",
67 | "sinon": "^4.1.4",
68 | "sinon-chai": "^2.8.0"
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/resume.html:
--------------------------------------------------------------------------------
1 |
Brian Hann | Senior Web Developer, Data Nerd Brian Hann
Senior Web Developer, Data Nerd
Download PDF
me@mysite.com
(999) 888-7777
Profile
Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
Skills
Web Design
Assertively exploit wireless initiatives rather than synergistic core competencies.
Interface Design
Credibly streamline mission-critical value with multifunctional functionalities.
Project Direction
Proven ability to lead and manage a wide variety of design and development projects in team and independent situations.
Technical
- XHTML
- CSS
- Javascript
- Jquery
- PHP
- CVS / Subversion
- OS X
- Windows XP/Vista
- Linux
Experience
Microsoft : Principal and Creative Lead 2004-2005
Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
International Business Machines (IBM) : Lead Web Designer 2001-2004
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.
--------------------------------------------------------------------------------
/resume.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/c0bra/markdown-resume-js/d43da4946c45fe3d6898672fe8b61b2d5ccaa8a9/resume.pdf
--------------------------------------------------------------------------------
/src/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /* eslint no-console: 0 */
4 |
5 | /*
6 | * decaffeinate suggestions:
7 | * DS102: Remove unnecessary code created because of implicit returns
8 | * DS207: Consider shorter variations of null checks
9 | * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
10 | */
11 |
12 | const fs = require('fs');
13 | const path = require('path');
14 | const chalk = require('chalk');
15 | const meow = require('meow');
16 | const generatePdf = require('./pdf');
17 | const md2resume = require('./markdown-resume');
18 |
19 | const cli = meow(`
20 | Usage
21 | $ md2resume resume.md
22 |
23 | Options
24 | --template, -t Template to use
25 | --list, -l List available templates
26 | --pdf, -p Generate PDF resume
27 |
28 | Examples
29 | $ md2resume resume.md
30 | $ md2resume path/to/your_resume.md
31 | $ md2resume -t blocks resume.md
32 | $ md2resume --pdf resume.md
33 | `, {
34 | flags: {
35 | template: {
36 | default: 'default',
37 | alias: 't',
38 | },
39 | pdf: { type: 'boolean', alias: 'p' },
40 | list: { type: 'boolean', alias: 'l' },
41 | },
42 | });
43 |
44 | if (cli.flags.list) {
45 | console.log('Available templates:');
46 | const templateDir = path.join(__dirname, '..', 'templates');
47 | const templates = fs.readdirSync(templateDir)
48 | .filter(p => fs.lstatSync(path.join(templateDir, p)).isDirectory())
49 | .join('\n ');
50 | console.log(` ${templates}`);
51 | process.exit(0);
52 | }
53 |
54 | const sourceFile = cli.input[0];
55 | if ((sourceFile == null)) {
56 | console.warn('Error: No source file specified.');
57 | console.log(cli.help);
58 | process.exit();
59 | }
60 |
61 | md2resume(sourceFile, cli.flags.template)
62 | .then((htmlContents) => {
63 | const sourceFileBasename = path.basename(sourceFile, path.extname(sourceFile));
64 |
65 | if (cli.flags.pdf) {
66 | const pdfOutputFileName = `${sourceFileBasename}.pdf`;
67 | return generatePdf(htmlContents).then((stream) => {
68 | stream.pipe(fs.createWriteStream(pdfOutputFileName));
69 | console.log(`Successfully wrote pdf file: ${pdfOutputFileName}`);
70 | });
71 | }
72 |
73 | const outputFileName = `${sourceFileBasename}.html`;
74 | return fs.writeFile(outputFileName, htmlContents, (error) => {
75 | if (error) { throw error; }
76 | return console.log(`Successfully wrote html: ${process.cwd()}/${outputFileName}`);
77 | });
78 | }).catch((error) => {
79 | console.log(chalk.red(error.message));
80 | return process.exit(1);
81 | });
82 |
--------------------------------------------------------------------------------
/src/markdown-resume.js:
--------------------------------------------------------------------------------
1 | /* eslint arrow-body-style: 0, arrow-parens: 0, no-shadow: 0 */
2 |
3 | /*
4 | * decaffeinate suggestions:
5 | * DS102: Remove unnecessary code created because of implicit returns
6 | * DS207: Consider shorter variations of null checks
7 | * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
8 | */
9 |
10 |
11 | const { promisify } = require('bluebird');
12 | const CleanCSS = require('clean-css');
13 | const cheerio = require('cheerio');
14 | const Inliner = require('inliner');
15 | const less = require('less');
16 | const marked = promisify(require('marked'));
17 | const { minify } = require('html-minifier');
18 | const mustache = require('mustache');
19 | const path = require('path');
20 | const readFile = promisify(require('fs').readFile);
21 |
22 | const installDir = path.join(__dirname, '..');
23 |
24 | // Use Github-flavored-markdown (GFM) which uses linebreaks differently
25 | marked.setOptions({ breaks: true });
26 |
27 | const isMarkdown = file => ['.md', '.markdown'].indexOf(path.extname(file)) >= 0;
28 | const getCommonStyles = () => readFile(path.join(installDir, 'templates', 'common.css'), 'utf-8');
29 | const getTemplateHtml = template => readFile(path.join(installDir, 'templates', template, 'index.html'), 'utf-8');
30 |
31 | function getTemplateStyles(template = 'default') {
32 | const lessDir = path.join(installDir, 'templates', template, 'assets', 'less');
33 | const lessOptions = {
34 | relativeUrls: true,
35 | paths: [lessDir],
36 | filename: 'resume.less',
37 | };
38 | return readFile(path.join(lessDir, 'resume.less'), 'utf-8')
39 | .then(lessInput => Promise.all([
40 | less.render(lessInput, lessOptions),
41 | getCommonStyles(),
42 | ]))
43 | .spread((output, common) => new CleanCSS().minify(common + output.css).styles);
44 | }
45 |
46 | module.exports = (fileName, template = 'default') => {
47 | if (!isMarkdown(fileName)) return Promise.reject(new Error('Only markdown files are supported'));
48 |
49 | return readFile(path.resolve('./', fileName), 'utf-8')
50 | .then((sourceContents) => {
51 | if ((sourceContents == null) || (sourceContents.trim() === '')) {
52 | throw new Error('Source file is empty');
53 | }
54 |
55 | return Promise.all([
56 | marked(sourceContents, {
57 | gfm: true,
58 | sanitize: false,
59 | }),
60 | getTemplateStyles(template),
61 | getTemplateHtml(template),
62 | ]);
63 | })
64 | .then(([resume, css, tmpl]) => {
65 | const $ = cheerio.load(resume);
66 | const title = `${$('h1').first().text()} | ${$('h2').first().text()}`;
67 |
68 | return minify(mustache.render(tmpl, {
69 | title,
70 | style: css,
71 | resume,
72 | }));
73 | })
74 | .then((html) => new Promise((resolve, reject) => {
75 | const i = new Inliner(html, (err, inlined) => { /* eslint no-unused-vars: 0 */
76 | if (err) return reject(err);
77 |
78 | return resolve(inlined);
79 | });
80 | }));
81 | };
82 |
--------------------------------------------------------------------------------
/src/pdf.js:
--------------------------------------------------------------------------------
1 | const pdf = require('html-pdf');
2 |
3 | module.exports = function generate(html) {
4 | const generated = pdf.create(html);
5 |
6 | return new Promise((resolve, reject) => {
7 | generated.toStream((err, stream) => {
8 | if (err) return reject(err);
9 |
10 | return resolve(stream);
11 | });
12 | });
13 | };
14 |
--------------------------------------------------------------------------------
/standard.html:
--------------------------------------------------------------------------------
1 | Brian Hann | Senior Developer Brian Hann
me@mysite.com
(888) 555-7777
Senior Developer
Kansas City, MO
Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
Experience
Corp, Inc
Principal and Creative Lead | 2004 - Current
Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items.
Assertively incentivize sticky platforms without synergistic materials.
Globocom LLC
Lead Web Designer | 2001 - 2004
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.
Education
UNIVERSITY OF SOMEWHERE
MBA - Global Domination | 1999 – 2001
UNIVERSITY OF SOMEWHERE
Bachelor of Science - Future Tech | 1995 – 1998
Skills
- XHTML
- CSS
- Javascript
- Jquery
- PHP
- CVS / Subversion
- OS X
- Windows XP/Vista
- Linux
--------------------------------------------------------------------------------
/standard.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/c0bra/markdown-resume-js/d43da4946c45fe3d6898672fe8b61b2d5ccaa8a9/standard.pdf
--------------------------------------------------------------------------------
/templates/common.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | .no-print { display: none; }
3 | }
4 |
--------------------------------------------------------------------------------
/templates/default/assets/less/_partials/_mixins.less:
--------------------------------------------------------------------------------
1 | /* ================================================ */
2 | /* ! Mixins */
3 | /* ================================================ */
4 |
5 | // Transitions
6 | .transition(@transition) {
7 | -webkit-transition: @transition;
8 | -moz-transition: @transition;
9 | -ms-transition: @transition;
10 | -o-transition: @transition;
11 | transition: @transition;
12 | }
13 |
14 | // Global Transition
15 | .transition-all (@duration: 0.3s) {
16 | transition: ease-in-out all @duration;
17 | -moz-transition: ease-in-out all @duration;
18 | -webkit-transition: ease-in-out all @duration;
19 | }
20 |
21 | // Box Shadow
22 | .box-shadow (@boxshadow: 0 1px 3px rgba(0,0,0,0.5)) {
23 | box-shadow: @boxshadow;
24 | -o-box-shadow: @boxshadow;
25 | -moz-box-shadow: @boxshadow;
26 | -webkit-box-shadow: @boxshadow;
27 | }
28 |
29 | // Background clip to allow borders to blend properly with the background
30 | .background-clip {
31 | -moz-background-clip: padding;
32 | -webkit-background-clip:padding-box;
33 | background-clip: padding-box;
34 | }
35 |
36 | .border-box () {
37 | -webkit-box-sizing: border-box;
38 | -moz-box-sizing: border-box;
39 | box-sizing: border-box;
40 | }
41 |
42 | .border-radius(@borderradius: 3px) {
43 | border-radius: @borderradius;
44 | -moz-border-radius: @borderradius;
45 | -webkit-border-radius: @borderradius;
46 | }
47 |
48 | .text-overflow () {
49 | white-space: nowrap;
50 | overflow: hidden;
51 | -o-text-overflow: ellipsis;
52 | -ms-text-overflow: ellipsis;
53 | text-overflow: ellipsis; /* or "clip" */
54 | }
55 |
56 | // Opacity
57 | .opacity(@alpha: 50) {
58 | opacity: @alpha/100;
59 | filter: e("Alpha(Opacity=")@alpha e(")");
60 | -ms-filter: e("progid:DXImageTransform.Microsoft.Alpha(Opacity=")@alpha e(")");
61 | }
62 |
63 | // Font Stacks
64 | #font {
65 | .shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
66 | font-size: @size;
67 | font-weight: @weight;
68 | line-height: @lineHeight;
69 | }
70 | .sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
71 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
72 | font-size: @size;
73 | font-weight: @weight;
74 | line-height: @lineHeight;
75 | }
76 | .serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
77 | font-family: "Georgia", Times New Roman, Times, serif;
78 | font-size: @size;
79 | font-weight: @weight;
80 | line-height: @lineHeight;
81 | }
82 | .monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
83 | font-family: "Monaco", Courier New, monospace;
84 | font-size: @size;
85 | font-weight: @weight;
86 | line-height: @lineHeight;
87 | }
88 | }
89 | .font-size(@sizeValue){
90 | @remValue: @sizeValue;
91 | @pxValue: (@sizeValue * 10);
92 | font-size: ~"@{pxValue}px";
93 | font-size: ~"@{remValue}rem";
94 | }
95 |
96 | // Gradient Bar Colors for buttons and allerts
97 | .gradientBar(@primaryColor, @secondaryColor) {
98 | #gradient > .vertical(@primaryColor, @secondaryColor);
99 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
100 | border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
101 | border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
102 |
103 | &:hover {
104 | border-color: darken(@secondaryColor, 10%) darken(@secondaryColor, 10%) darken(@secondaryColor, 20%);
105 | border-color: rgba(0,0,0,.2) rgba(0,0,0,.2) fadein(rgba(0,0,0,.2), 15%);
106 | }
107 | &:active {
108 | #gradient > .vertical(darken(@primaryColor, 20%), @secondaryColor);
109 | }
110 | }
111 |
112 | // Gradients
113 | #gradient {
114 | .horizontal (@startColor: #555, @endColor: #333) {
115 | background-color: @endColor;
116 | background-repeat: repeat-x;
117 | background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
118 | background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
119 | background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
120 | background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
121 | background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
122 | background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
123 | background-image: linear-gradient(left, @startColor, @endColor); // Le standard
124 | //filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
125 | }
126 | .vertical (@startColor: #555, @endColor: #333) {
127 | background-color: @endColor;
128 | background-repeat: repeat-x;
129 | background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
130 | background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
131 | background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
132 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
133 | background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
134 | background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
135 | background-image: linear-gradient(top, @startColor, @endColor); // The standard
136 | //filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
137 | }
138 | .directional (@startColor: #555, @endColor: #333, @deg: 45deg) {
139 | background-color: @endColor;
140 | background-repeat: repeat-x;
141 | background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
142 | background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
143 | background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
144 | background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
145 | background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
146 | }
147 | .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
148 | background-color: @endColor;
149 | background-repeat: no-repeat;
150 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
151 | background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
152 | background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
153 | background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
154 | background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
155 | background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
156 | //filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
157 | }
158 | }
159 |
160 | // Reset filters for IE
161 | .reset-filter() {
162 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
163 | }
164 |
--------------------------------------------------------------------------------
/templates/default/assets/less/_partials/_normalize.less:
--------------------------------------------------------------------------------
1 | /*! normalize.css v1.0.0 | MIT License | git.io/normalize */
2 |
3 | /* =============================================================================
4 | HTML5 display definitions
5 | ========================================================================== */
6 |
7 | article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
8 | audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
9 | audio:not([controls]) { display: none; }
10 | [hidden] { display: none; }
11 |
12 |
13 | /* =============================================================================
14 | Base
15 | ========================================================================== */
16 |
17 | /*
18 | * 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
19 | * 2. Force vertical scrollbar in non-IE
20 | * 3. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
21 | */
22 |
23 | html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
24 |
25 | body { margin: 0; font-size: 1em; line-height: 1.4; }
26 |
27 | body, button, input, select, textarea { font-family: sans-serif; }
28 |
29 | /*
30 | * Remove text-shadow in selection highlight: h5bp.com/i
31 | * These selection declarations have to be separate
32 | * Also: hot pink! (or customize the background color to match your design)
33 | */
34 |
35 | ::-moz-selection { background: @linkColor; color: #fff; text-shadow: none; }
36 | ::selection { background: @linkColor; color: #fff; text-shadow: none; }
37 |
38 |
39 | /* =============================================================================
40 | Links
41 | ========================================================================== */
42 |
43 | a { color: #00e; }
44 | a:visited { color: #551a8b; }
45 | a:hover { color: #06e; }
46 | a:focus { outline: thin dotted; }
47 |
48 | /* Improve readability when focused and hovered in all browsers: h5bp.com/h */
49 | a:hover, a:active { outline: 0; }
50 |
51 |
52 | /* =============================================================================
53 | Typography
54 | ========================================================================== */
55 |
56 | abbr[title] { border-bottom: 1px dotted; }
57 |
58 | b, strong { font-weight: bold; }
59 |
60 | blockquote { margin: 1em 40px; }
61 |
62 | dfn { font-style: italic; }
63 |
64 | hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
65 |
66 | ins { background: #ff9; color: #000; text-decoration: none; }
67 |
68 | mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
69 |
70 | /* Redeclare monospace font family: en.wikipedia.org/wiki/User:Davidgothberg/Test59 */
71 | pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
72 |
73 | /* Improve readability of pre-formatted text in all browsers */
74 | pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
75 |
76 | q { quotes: none; }
77 | q:before, q:after { content: ""; content: none; }
78 |
79 | small { font-size: 85%; }
80 |
81 | /* Position subscript and superscript content without affecting line-height: gist.github.com/413930 */
82 | sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
83 | sup { top: -0.5em; }
84 | sub { bottom: -0.25em; }
85 |
86 |
87 | /* =============================================================================
88 | Lists
89 | ========================================================================== */
90 |
91 | ul, ol { margin: 0 0 1em 0; padding: 0 0 0 40px; }
92 | dd { margin: 0 0 0 40px; }
93 | nav ul, nav ol { list-style: none; margin: 0; padding: 0; }
94 |
95 |
96 | /* =============================================================================
97 | Embedded content
98 | ========================================================================== */
99 |
100 | /*
101 | * Improve image quality when scaled in IE7
102 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
103 | */
104 |
105 | img { border: 0; -ms-interpolation-mode: bicubic; }
106 |
107 | /*
108 | * Correct overflow displayed oddly in IE9
109 | */
110 |
111 | svg:not(:root) { overflow: hidden; }
112 |
113 |
114 | /* =============================================================================
115 | Figures
116 | ========================================================================== */
117 |
118 | figure { margin: 0; }
119 |
120 |
121 | /* =============================================================================
122 | Forms
123 | ========================================================================== */
124 |
125 | form { margin: 0; }
126 | fieldset { border: 0; margin: 0; padding: 0; }
127 |
128 | /* Indicate that 'label' will shift focus to the associated form element */
129 | label { cursor: pointer; }
130 |
131 | /*
132 | * 1. Correct color not inheriting in IE6/7/8/9
133 | * 2. Correct alignment displayed oddly in IE6/7
134 | */
135 |
136 | legend { border: 0; *margin-left: -7px; padding: 0; }
137 |
138 | /*
139 | * 1. Correct font-size not inheriting in all browsers
140 | * 2. Remove margins in FF3/4 S5 Chrome
141 | * 3. Define consistent vertical alignment display in all browsers
142 | */
143 |
144 | button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
145 |
146 | /*
147 | * 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
148 | */
149 |
150 | button, input { line-height: normal; }
151 |
152 | /*
153 | * 1. Display hand cursor for clickable form elements
154 | * 2. Allow styling of clickable form elements in iOS
155 | * 3. Correct inner spacing displayed oddly in IE7 (doesn't effect IE6)
156 | */
157 |
158 | button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }
159 |
160 | /*
161 | * Consistent box sizing and appearance
162 | */
163 |
164 | input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; }
165 | input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
166 | input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
167 |
168 | /*
169 | * Remove inner padding and border in FF3/4: h5bp.com/l
170 | */
171 |
172 | button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
173 |
174 | /*
175 | * 1. Remove default vertical scrollbar in IE6/7/8/9
176 | * 2. Allow only vertical resizing
177 | */
178 |
179 | textarea { overflow: auto; vertical-align: top; resize: vertical; }
180 |
181 | /* Colors for form validity */
182 | input:valid, textarea:valid { }
183 | input:invalid, textarea:invalid { background-color: #f0dddd; }
184 |
185 |
186 | /* =============================================================================
187 | Tables
188 | ========================================================================== */
189 |
190 | table { border-collapse: collapse; border-spacing: 0; }
191 |
192 |
193 |
194 |
195 | /* =============================================================================
196 | Non-semantic helper classes
197 | Please define your styles before this section.
198 | ========================================================================== */
199 |
200 | /* For image replacement */
201 | .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; *line-height: 0; }
202 | .ir br { display: none; }
203 |
204 | /* Hide from both screenreaders and browsers: h5bp.com/u */
205 | .hidden { display: none !important; visibility: hidden; }
206 |
207 | /* Hide only visually, but have it available for screenreaders: h5bp.com/v */
208 | .visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
209 |
210 | /* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
211 | .visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
212 |
213 | /* Hide visually and from screenreaders, but maintain layout */
214 | .invisible { visibility: hidden; }
215 |
216 | /* Contain floats: h5bp.com/q */
217 | .clearfix:before, .clearfix:after { content: ""; display: table; }
218 | .clearfix:after { clear: both; }
219 | .clearfix { *zoom: 1; }
220 |
221 | //Text modifiers
222 |
223 | //Included in style.less
224 | ///* Contain floats: nicolasgallagher.com/micro-clearfix-hack/ */
225 | //.cf:before, .cf:after { content: ""; display: table; }
226 | //.cf:after { clear: both; }
227 | //.cf { zoom: 1; }
228 |
--------------------------------------------------------------------------------
/templates/default/assets/less/_partials/_pdf.less:
--------------------------------------------------------------------------------
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 |
46 | h3~p {
47 | float: left;
48 | margin-left: 16%;
49 | }
50 |
51 | h3+p {
52 | margin-left: inherit;
53 | float: left;
54 | width: 84%;
55 | }
56 |
57 | blockquote {
58 | top: 40px;
59 | right: 50px;
60 | position: absolute;
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 |
--------------------------------------------------------------------------------
/templates/default/assets/less/_partials/_variables.less:
--------------------------------------------------------------------------------
1 | // Accent Colors
2 | @blue: #049CDB;
3 | @blueDark: #0064CD;
4 | @green: #46a546;
5 | @red: #9d261d;
6 | @yellow: #ffc40d;
7 | @orange: #f89406;
8 | @pink: #c3325f;
9 | @purple: #7a43b6;
10 |
11 | // Color Scheme
12 | @baseColor: @blue; // Set a base color
13 | @complement: spin(@baseColor, 180); // Determine a complementary color
14 | @linkColor: @blue;
15 | @split1: spin(@baseColor, 158); // Split complements
16 | @split2: spin(@baseColor, -158);
17 | @triad1: spin(@baseColor, 135); // Triads colors
18 | @triad2: spin(@baseColor, -135);
19 | @tetra1: spin(@baseColor, 90); // Tetra colors
20 | @tetra2: spin(@baseColor, -90);
21 | @analog1: spin(@baseColor, 22); // Analogs colors
22 | @analog2: spin(@baseColor, -22);
23 |
--------------------------------------------------------------------------------
/templates/default/assets/less/resume.less:
--------------------------------------------------------------------------------
1 | @import "_partials/_variables";
2 | @import "_partials/_normalize";
3 | @import "_partials/_mixins";
4 | @import "_partials/_pdf";
5 |
6 | /* clearfix */
7 | .container:before,
8 | .container:after {
9 | content:"";
10 | display:table;
11 | }
12 | .container:after {
13 | clear:both;
14 | }
15 | /* For IE 6/7 (trigger hasLayout) */
16 | .container {
17 | zoom:1;
18 | }
19 |
20 | body {
21 | font-family: 'Hoefler Text', Times New Roman, Times, serif;
22 | color: #444;
23 | }
24 | h1, h2, h3, h4, ul dl dt {
25 | font-family: Futura, "Century Gothic", AppleGothic, sans-serif;
26 | }
27 |
28 | .container {
29 | margin: 0 auto;
30 | padding: 0;
31 | background: whiteSmoke;
32 | border: solid #666;
33 | border-width: 8px 0 4px 0;
34 | text-align: left;
35 | }
36 |
37 | .resume {
38 | position:relative;
39 | padding: 10px 20px;
40 | }
41 |
42 | a {
43 | color: #990003;
44 | }
45 |
46 | a[href$='.pdf'] {
47 | display: inline-block;
48 | background: #666;
49 | color: white;
50 | padding: 6px 12px;
51 | margin-bottom: 6px;
52 | text-decoration: none;
53 | }
54 |
55 | blockquote {
56 | margin: 0;
57 | padding: 0;
58 | line-height: 1.4em;
59 | }
60 |
61 | hr:nth-of-type(1) {
62 | margin-top: 32px;
63 | }
64 |
65 | hr {
66 | display: block;
67 | position: relative;
68 | padding: 0;
69 | margin: 18px auto;
70 | width: 100%;
71 | clear: both;
72 | border: none;
73 | border-top: 1px solid #CCC;
74 | font-size: 1px;
75 | line-height: 0;
76 | overflow: visible;
77 | page-break-after: avoid;
78 | }
79 |
80 | h1 {
81 | margin: 0;
82 | padding: 0;
83 | font-size: 36px;
84 | letter-spacing: -1px;
85 | font-weight: normal;
86 | }
87 | h2 {
88 | margin: 0;
89 | padding: 0;
90 | font-size: 18px;
91 | font-style: italic;
92 | letter-spacing: -1px;
93 | font-weight: normal;
94 | }
95 |
96 | h3 {
97 | margin: 0;
98 | padding: 0 0 .5em;
99 | font-size: 150%;
100 | font-style: italic;
101 | font-weight: normal;
102 | }
103 |
104 | h3+p {
105 | margin: .6em 0 16px;
106 | padding: 0;
107 | display: block;
108 | font-size: 104%;
109 | line-height: 24px;
110 | }
111 |
112 |
113 | ul {
114 | margin: 0;
115 | padding: 0;
116 | list-style: none;
117 | }
118 | ul li {
119 | margin: 0;
120 | padding: 0;
121 | }
122 |
123 | ul li p {
124 | margin: 1em 0.5em;
125 | }
126 |
127 | ul dl {
128 | margin: .3em 0 0;
129 | padding: 0;
130 | width: 100%;
131 | dt {
132 | font-size: 100%;
133 | }
134 | dd {
135 | margin: 0 0 1em;
136 | padding: 0 2em 0 0;
137 | font-size: .8em;
138 | line-height: 1.5em;
139 | }
140 | }
141 |
142 | ol {
143 | margin: 0;
144 | padding: 0 0 .75em;
145 | width: 84%;
146 | display: inline-block;
147 | }
148 |
149 | ol li {
150 | margin: 0 0 0 1em;
151 | padding: 0;
152 | /*border-top: 1px solid #CCCCCC;*/
153 | width: 100%;
154 | float: left;
155 | list-style: none;
156 | line-height: 24px;
157 | font-size: 14px;
158 | }
159 | ol li:nth-child(1) {
160 | border-top: none;
161 | }
162 |
163 | dl {
164 | display: inline-block;
165 | width: 75%;
166 | margin: 0;
167 | padding: 0;
168 | dt {
169 | margin: 0;
170 | padding: 0;
171 | font-size: 140%;
172 | }
173 | dd {
174 | margin: 0 0 1.5em;
175 | padding: 0;
176 | font-size: 80%;
177 | line-height: 1.4em;
178 | }
179 | strong {
180 | display: block;
181 | }
182 | em {
183 | display: block;
184 | font-size: 110%;
185 | margin: .15em 0 .5em;
186 | font-style: bold;
187 | }
188 | }
189 |
190 | #footer {
191 | display: none;
192 | }
193 |
194 | #footer + p {
195 | width: 100%;
196 | font-size: 11px;
197 | text-align: center;
198 | }
199 |
--------------------------------------------------------------------------------
/templates/default/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 |
25 |
--------------------------------------------------------------------------------
/templates/roboto/assets/less/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 | }
--------------------------------------------------------------------------------
/templates/roboto/assets/less/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/assets/less/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 | }
--------------------------------------------------------------------------------
/templates/roboto/assets/less/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 | }
--------------------------------------------------------------------------------
/templates/roboto/assets/less/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/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 |
--------------------------------------------------------------------------------
/templates/standard/assets/less/new.less:
--------------------------------------------------------------------------------
1 | .standard-resume {
2 | position: relative;
3 | width: 580px;
4 | margin: 0 auto;
5 | display: block;
6 | font-size: 14px;
7 | font-weight: 300;
8 |
9 | blockquote {
10 | right: 50px;
11 | top: -18px;
12 | position: absolute;
13 | padding: 0;
14 | margin: 0;
15 | max-width: 200px;
16 | white-space: nowrap;
17 | }
18 |
19 | h2, h3 {
20 | font-weight: bold;
21 | }
22 |
23 | h2 {
24 | color: #323336;
25 | margin: 25px 0;
26 | text-transform: none;
27 | font-size: 20px;
28 | }
29 |
30 | h3 {
31 | margin: 20px 0;
32 | color: darken(#c9cccf, 60%);
33 | text-transform: uppercase;
34 | font-size: 16px;
35 | }
36 |
37 |
38 | h4 {
39 | color: darken(#c9cccf, 50%);
40 | font-size: 14px;
41 | & > a {
42 | color: inherit;
43 | }
44 | }
45 |
46 | p {
47 | color: #96999b;
48 | }
49 |
50 | hr {
51 | display: none;
52 | }
53 |
54 | ol, ul {
55 | padding: 0;
56 | margin: 0;
57 | list-style: none;
58 | zoom: 1;
59 | font-size: 0;
60 |
61 | &:after {
62 | content: "";
63 | display: block;
64 | clear: both;
65 | }
66 |
67 | li {
68 | display: inline-block;
69 | padding: 5px 18px;
70 | background-color: #f1f5f7;
71 | margin-right: 3px;
72 | margin-bottom: 5px;
73 | font-size: 14px;
74 | }
75 | }
76 |
77 | p + p {
78 | margin-top: 10px !important;
79 | }
80 |
81 | h3 ~ p {
82 | color: #323336;
83 | line-height: 1.66em;
84 | margin-top: 15px;
85 |
86 | strong {
87 | text-transform: uppercase;
88 | font-size: 18px;
89 | font-weight: 600;
90 | padding-bottom: 12px;
91 | }
92 |
93 | em {
94 | color: #96999b;
95 | font-style: normal;
96 | }
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/templates/standard/assets/less/resume.less:
--------------------------------------------------------------------------------
1 | @import "new";
2 |
3 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
4 |
5 | @linkcolor: black;
6 |
7 | html {
8 | font-family: sans-serif;
9 | -ms-text-size-adjust: 100%;
10 | -webkit-text-size-adjust: 100%
11 | }
12 |
13 | body {
14 | margin: 0
15 | }
16 |
17 | article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {
18 | display: block
19 | }
20 |
21 | audio, canvas, progress, video {
22 | display: inline-block;
23 | vertical-align: baseline
24 | }
25 |
26 | audio:not([controls]) {
27 | display: none;
28 | height: 0
29 | }
30 |
31 | [hidden], template {
32 | display: none
33 | }
34 |
35 | a {
36 | background-color: transparent
37 | }
38 |
39 | a:active, a:hover {
40 | outline: 0
41 | }
42 |
43 | abbr[title] {
44 | border-bottom: 1px dotted
45 | }
46 |
47 | b, strong {
48 | font-weight: 700
49 | }
50 |
51 | dfn {
52 | font-style: italic
53 | }
54 |
55 | h1 {
56 | font-size: 2em;
57 | margin: .67em 0
58 | }
59 |
60 | mark {
61 | background: #ff0;
62 | color: #000
63 | }
64 |
65 | small {
66 | font-size: 80%
67 | }
68 |
69 | sub, sup {
70 | font-size: 75%;
71 | line-height: 0;
72 | position: relative;
73 | vertical-align: baseline
74 | }
75 |
76 | sup {
77 | top: -.5em
78 | }
79 |
80 | sub {
81 | bottom: -.25em
82 | }
83 |
84 | img {
85 | border: 0
86 | }
87 |
88 | svg:not(:root) {
89 | overflow: hidden
90 | }
91 |
92 | figure {
93 | margin: 1em 40px
94 | }
95 |
96 | hr {
97 | box-sizing: content-box;
98 | height: 0
99 | }
100 |
101 | pre {
102 | overflow: auto
103 | }
104 |
105 | code, kbd, pre, samp {
106 | font-family: monospace, monospace;
107 | font-size: 1em
108 | }
109 |
110 | button, input, optgroup, select, textarea {
111 | color: inherit;
112 | font: inherit;
113 | margin: 0
114 | }
115 |
116 | button {
117 | overflow: visible
118 | }
119 |
120 | button, select {
121 | text-transform: none
122 | }
123 |
124 | button, html input[type=button], input[type=reset], input[type=submit] {
125 | -webkit-appearance: button;
126 | cursor: pointer
127 | }
128 |
129 | button[disabled], html input[disabled] {
130 | cursor: default
131 | }
132 |
133 | button::-moz-focus-inner, input::-moz-focus-inner {
134 | border: 0;
135 | padding: 0
136 | }
137 |
138 | input {
139 | line-height: normal
140 | }
141 |
142 | input[type=checkbox], input[type=radio] {
143 | box-sizing: border-box;
144 | padding: 0
145 | }
146 |
147 | input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button {
148 | height: auto
149 | }
150 |
151 | input[type=search] {
152 | -webkit-appearance: textfield;
153 | box-sizing: content-box
154 | }
155 |
156 | input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
157 | -webkit-appearance: none
158 | }
159 |
160 | fieldset {
161 | border: 1px solid silver;
162 | margin: 0 2px;
163 | padding: .35em .625em .75em
164 | }
165 |
166 | legend {
167 | border: 0;
168 | padding: 0
169 | }
170 |
171 | textarea {
172 | overflow: auto
173 | }
174 |
175 | optgroup {
176 | font-weight: 700
177 | }
178 |
179 | table {
180 | border-collapse: collapse;
181 | border-spacing: 0
182 | }
183 |
184 | td, th {
185 | padding: 0
186 | }
187 |
188 | html {
189 | box-sizing: border-box;
190 | overflow-y: scroll
191 | }
192 |
193 | *, :after, :before {
194 | box-sizing: inherit
195 | }
196 |
197 | body {
198 | font-family: sans-serif;
199 | font-weight: 300;
200 | color: #323336;
201 | font-size: 16px;
202 | line-height: 1.5
203 | }
204 |
205 | body, html {
206 | height: 100%
207 | }
208 |
209 | h1, h2, h3 {
210 | font-weight: 600;
211 | line-height: 1;
212 | margin: 0
213 | }
214 |
215 | h1 {
216 | font-size: 30px;
217 | letter-spacing: 1.3px
218 | }
219 |
220 | h1, h2 {
221 | text-transform: uppercase
222 | }
223 |
224 | h2 {
225 | font-size: 12px
226 | }
227 |
228 | h2, h3 {
229 | letter-spacing: 1.2px
230 | }
231 |
232 | h3 {
233 | font-size: 24px;
234 | font-weight: 300
235 | }
236 |
237 | p.small, span.small {
238 | font-size: 12px
239 | }
240 |
241 | ul {
242 | list-style: disc
243 | }
244 |
245 | ul.basic {
246 | margin: 0;
247 | padding: 0;
248 | list-style: none
249 | }
250 |
251 | a {
252 | color: @linkcolor;
253 | text-decoration: none
254 | }
255 |
256 | input, textarea {
257 | -webkit-appearance: none;
258 | border-radius: 0
259 | }
260 |
261 | input[type=checkbox] {
262 | -webkit-appearance: checkbox
263 | }
264 |
265 | .standard-resume {
266 | margin-top: 20px;
267 | margin-bottom: 160px
268 | }
269 |
270 | @media (min-width:900px) {
271 | .standard-resume {
272 | margin-top: 50px
273 | }
274 | }
275 |
--------------------------------------------------------------------------------
/templates/standard/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{#reload}}
6 |
7 | {{/reload}}
8 |
9 | {{ title }}
10 |
39 |
42 |
43 |
44 |
45 |
46 |
47 | {{{resume}}}
48 |
49 |
50 |
51 |
52 |
170 |
171 |
172 |
--------------------------------------------------------------------------------
/templates/standard/pdf.json:
--------------------------------------------------------------------------------
1 | {
2 | "border": "0.5in"
3 | }
4 |
--------------------------------------------------------------------------------
/templates/swissen/assets/less/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 | More info at: http://lesselements.com
11 | -----------------------------------------------------*/
12 |
13 | .gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) {
14 | background: @color;
15 | background: -webkit-gradient(linear,
16 | left bottom,
17 | left top,
18 | color-stop(0, @start),
19 | color-stop(1, @stop));
20 | background: -ms-linear-gradient(bottom,
21 | @start,
22 | @stop);
23 | background: -moz-linear-gradient(center bottom,
24 | @start 0%,
25 | @stop 100%);
26 | }
27 | .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) {
28 | background: @color;
29 | background: -webkit-gradient(linear,
30 | left bottom,
31 | left top,
32 | color-stop(0, rgb(@start,@start,@start)),
33 | color-stop(1, rgb(@stop,@stop,@stop)));
34 | background: -ms-linear-gradient(bottom,
35 | rgb(@start,@start,@start) 0%,
36 | rgb(@start,@start,@start) 100%);
37 | background: -moz-linear-gradient(center bottom,
38 | rgb(@start,@start,@start) 0%,
39 | rgb(@stop,@stop,@stop) 100%);
40 | }
41 | .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) {
42 | border-top: solid 1px @top-color;
43 | border-left: solid 1px @left-color;
44 | border-right: solid 1px @right-color;
45 | border-bottom: solid 1px @bottom-color;
46 | }
47 | .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) {
48 | -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
49 | -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
50 | box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
51 | }
52 | .rounded(@radius: 2px) {
53 | -webkit-border-radius: @radius;
54 | -moz-border-radius: @radius;
55 | border-radius: @radius;
56 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
57 | }
58 | .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) {
59 | -webkit-border-top-right-radius: @topright;
60 | -webkit-border-bottom-right-radius: @bottomright;
61 | -webkit-border-bottom-left-radius: @bottomleft;
62 | -webkit-border-top-left-radius: @topleft;
63 | -moz-border-radius-topright: @topright;
64 | -moz-border-radius-bottomright: @bottomright;
65 | -moz-border-radius-bottomleft: @bottomleft;
66 | -moz-border-radius-topleft: @topleft;
67 | border-top-right-radius: @topright;
68 | border-bottom-right-radius: @bottomright;
69 | border-bottom-left-radius: @bottomleft;
70 | border-top-left-radius: @topleft;
71 | -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
72 | }
73 | .opacity(@opacity: 0.5) {
74 | -moz-opacity: @opacity;
75 | -khtml-opacity: @opacity;
76 | -webkit-opacity: @opacity;
77 | opacity: @opacity;
78 | }
79 | .transition-duration(@duration: 0.2s) {
80 | -moz-transition-duration: @duration;
81 | -webkit-transition-duration: @duration;
82 | transition-duration: @duration;
83 | }
84 | .rotation(@deg:5deg){
85 | -webkit-transform: rotate(@deg);
86 | -moz-transform: rotate(@deg);
87 | transform: rotate(@deg);
88 | }
89 | .scale(@ratio:1.5){
90 | -webkit-transform:scale(@ratio);
91 | -moz-transform:scale(@ratio);
92 | transform:scale(@ratio);
93 | }
94 | .transition(@duration:0.2s, @ease:ease-out) {
95 | -webkit-transition: all @duration @ease;
96 | -moz-transition: all @duration @ease;
97 | transition: all @duration @ease;
98 | }
99 | .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) {
100 | -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
101 | -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
102 | box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha);
103 | }
104 | .box-shadow(@arguments) {
105 | -webkit-box-shadow: @arguments;
106 | -moz-box-shadow: @arguments;
107 | box-shadow: @arguments;
108 | }
109 | .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) {
110 | -moz-column-width: @colwidth;
111 | -moz-column-count: @colcount;
112 | -moz-column-gap: @colgap;
113 | -moz-column-rule-color: @columnRuleColor;
114 | -moz-column-rule-style: @columnRuleStyle;
115 | -moz-column-rule-width: @columnRuleWidth;
116 | -webkit-column-width: @colwidth;
117 | -webkit-column-count: @colcount;
118 | -webkit-column-gap: @colgap;
119 | -webkit-column-rule-color: @columnRuleColor;
120 | -webkit-column-rule-style: @columnRuleStyle;
121 | -webkit-column-rule-width: @columnRuleWidth;
122 | column-width: @colwidth;
123 | column-count: @colcount;
124 | column-gap: @colgap;
125 | column-rule-color: @columnRuleColor;
126 | column-rule-style: @columnRuleStyle;
127 | column-rule-width: @columnRuleWidth;
128 | }
129 | .translate(@x:0, @y:0) {
130 | -moz-transform: translate(@x, @y);
131 | -webkit-transform: translate(@x, @y);
132 | -o-transform: translate(@x, @y);
133 | -ms-transform: translate(@x, @y);
134 | transform: translate(@x, @y);
135 | }
--------------------------------------------------------------------------------
/templates/swissen/assets/less/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/assets/less/pdf.less:
--------------------------------------------------------------------------------
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 li {
55 | width: 33.33%;
56 | float: left;
57 | }
58 | ul dl {
59 | margin: 0;
60 | padding: 0.3em 0 0;
61 | dt {
62 | font-size: 122%;
63 | font-weight: normal;
64 | margin: 0 0 .75em;
65 | }
66 | dd {
67 | padding: 0 4em 0 0;
68 | }
69 | }
70 |
71 | ol {
72 | float: left;
73 | width: 80%;
74 | margin: .7em 0 0;
75 | }
76 |
77 | ol li {
78 | width: 33%;
79 | margin: 0;
80 | }
81 | ol li:nth-child(3n) {
82 | width: 34%;
83 | }
84 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
85 | border-top: none;
86 | }
87 |
88 | dl {
89 | margin: .7em 0 0;
90 | page-break-inside: avoid !important;
91 | display: block;
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 | }
--------------------------------------------------------------------------------
/templates/swissen/assets/less/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-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: table;
113 | }
114 | ul li {
115 | margin: 0;
116 | padding: 0;
117 | }
118 |
119 | ul dl {
120 | margin: .3em 0 0;
121 | padding: 0;
122 | width: 100%;
123 | dt {
124 | font-size: 100%;
125 | }
126 | dd {
127 | margin: 0 0 1em;
128 | padding: 0 2em 0 0;
129 | font-size: .8em;
130 | line-height: 1.5em;
131 | }
132 | }
133 |
134 | ol {
135 | margin: 0;
136 | padding: 0 0 .75em;
137 | width: 80%;
138 | display: inline-block;
139 | }
140 |
141 | ol li {
142 | margin: 0 0 0 1em;
143 | padding: 0;
144 | border-top: 1px solid #CCCCCC;
145 | width: 100%;
146 | float: left;
147 | list-style: none;
148 | line-height: 24px;
149 | font-size: 14px;
150 | }
151 | ol li:nth-child(1) {
152 | border-top: none;
153 | }
154 |
155 | dl {
156 | float:left;
157 | display: block;
158 | /*display: inline-block;*/
159 | width: 75%;
160 | margin: 0;
161 | padding: 0;
162 | dt {
163 | margin: 0;
164 | padding: 0;
165 | font-size: 140%;
166 | }
167 | dd {
168 | margin: 0 0 1.5em;
169 | padding: 0;
170 | font-size: 80%;
171 | line-height: 1.4em;
172 | }
173 | strong {
174 | display: block;
175 | }
176 | em {
177 | display: block;
178 | font-size: 110%;
179 | margin: .15em 0 .5em;
180 | font-style: bold;
181 | }
182 | }
183 |
184 | dl dd li{width: 100%; margin: 0 1em 1em; list-style-type: square;}
185 | dl dt{display: block; clear: both;}
186 | dl dt{border-top: 1px solid #ccc; padding-top: 1em;}
187 | h3 + dl dt:first-child{border: 0;padding-top: 0;}
188 | dl dd p:first-child{font-weight: bold; text-transform: uppercase; font-size: 1.2em;}
189 |
190 | ul li dt{border: 0; padding-top: 0;}
191 |
192 | #footer {
193 | display: none;
194 | }
195 |
196 | #footer + p {
197 | width: 100%;
198 | font-size: 11px;
199 | text-align: center;
200 | }
--------------------------------------------------------------------------------
/templates/swissen/assets/less/screen.less:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | Mobile layout
4 | 240–479 px
5 | Zoomed out below 320 px
6 | */
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 |
18 | @media screen and (min-width: 30em) {
19 | }
20 |
21 |
22 | /*
23 | Tablet layout
24 | 600-911 px
25 | Zoomed in above 600 px
26 | */
27 |
28 | @media screen and (min-width: 37.5em) {
29 | body {
30 | padding: 2em 0;
31 | }
32 | blockquote {
33 | top: 10px;
34 | right: 50px;
35 | position: absolute;
36 | }
37 | h1 { /* Open up the top section height so we don't collapse on the blockquote */
38 | margin-top: .5em;
39 | }
40 | ol {
41 | margin: 0 0 0 1em;
42 | }
43 | ol li {
44 | width: 50%;
45 | margin: 0;
46 | }
47 | ol li:nth-child(1), ol li:nth-child(2) {
48 | border-top: none;
49 | }
50 | }
51 |
52 |
53 | /*
54 | Widescreen layout
55 | 912-1887 px
56 | Zoomed in above 912 px
57 | */
58 |
59 | @media screen and (min-width: 57em) {
60 | .container {
61 | width: 912px;
62 | }
63 | .resume {
64 | position:relative;
65 | padding: 40px 50px;
66 | }
67 | blockquote {
68 | top: 40px;
69 | right: 50px;
70 | position: absolute;
71 | }
72 | h1 {
73 | margin-top: 0;
74 | font-size: 48px;
75 | letter-spacing: -1px;
76 | }
77 | h2 {
78 | text-transform: uppercase;
79 | letter-spacing: 3px;
80 | }
81 |
82 | h3 {
83 | float: left;
84 | width: 20%;
85 | }
86 |
87 | h3+p {
88 | float: left;
89 | width: 80%;
90 | }
91 |
92 | ul li {
93 | width: 33.33%;
94 | float: left;
95 | }
96 | ul dl {
97 | dt {
98 | font-size: 122%;
99 | font-weight: normal;
100 | margin-bottom: .75em;
101 | }
102 | dd {
103 | padding: 0 4em 0 0;
104 | }
105 | }
106 |
107 | ol {
108 | float: left;
109 | width: 80%;
110 | margin: .6em 0 0;
111 | }
112 |
113 | ol li {
114 | width: 33%;
115 | margin: 0;
116 | }
117 | ol li:nth-child(3n) {
118 | width: 34%;
119 | }
120 | ol li:nth-child(1), ol li:nth-child(2), ol li:nth-child(3) {
121 | border-top: none;
122 | }
123 |
124 | dl {
125 | /*margin: .5em 0 0;*/
126 | dt {
127 | }
128 | dd {
129 | }
130 | strong {
131 | float: right;
132 | margin-top: -2em;
133 | }
134 | em {
135 | font-size: 130%;
136 | font-style: normal;
137 | }
138 |
139 | }
140 |
141 |
142 | }
143 |
144 |
145 | /*
146 | Huge-screen layout
147 | 1888-2520 px
148 | Zoomed in above 1920 px
149 | */
150 |
151 | @media screen and (min-width: 118em) {
152 |
153 |
154 | }
--------------------------------------------------------------------------------
/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 |
25 |
--------------------------------------------------------------------------------
/test/fixtures/empty.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/c0bra/markdown-resume-js/d43da4946c45fe3d6898672fe8b61b2d5ccaa8a9/test/fixtures/empty.md
--------------------------------------------------------------------------------
/test/fixtures/other.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Not a markdown file!
9 |
10 |
11 |
--------------------------------------------------------------------------------
/test/fixtures/resume.md:
--------------------------------------------------------------------------------
1 | # Brian Hann
2 | ## Senior Web Developer, Data Nerd
3 |
4 | > [Download PDF](resume.pdf)
5 | > [me@mysite.com](me@mysite.com)
6 | > (999) 888-7777
7 |
8 | ---
9 |
10 | ### 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
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
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
44 |
45 | **Microsoft** : *Principal and Creative Lead* __2004-2005__
46 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
47 |
48 | **International Business Machines (IBM)** : *Lead Web Designer* __2001-2004__
49 | 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.
50 |
--------------------------------------------------------------------------------
/test/fixtures/standard.md:
--------------------------------------------------------------------------------
1 | # Brian Hann
2 |
3 | > [me@mysite.com](me@mysite.com)
4 | > (888) 555-7777
5 |
6 | ## Senior Developer
7 |
8 | Kansas City, MO
9 |
10 | Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
11 |
12 |
13 | ### Experience
14 |
15 | **Corp, Inc**
16 | *Principal and Creative Lead | 2004 - Current*
17 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items.
18 |
19 | Assertively incentivize sticky platforms without synergistic materials.
20 |
21 | **Globocom LLC**
22 | *Lead Web Designer | 2001 - 2004*
23 | 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.
24 |
25 |
26 | ### Education
27 |
28 | **UNIVERSITY OF SOMEWHERE**
29 | *MBA - Global Domination | 1999 – 2001*
30 |
31 | **UNIVERSITY OF SOMEWHERE**
32 | *Bachelor of Science - Future Tech | 1995 – 1998*
33 |
34 | ### Skills
35 |
36 | 1. XHTML
37 | 1. CSS
38 | 1. Javascript
39 | 1. Jquery
40 | 1. PHP
41 | 1. CVS / Subversion
42 | 1. OS X
43 | 1. Windows XP/Vista
44 | 1. Linux
45 |
--------------------------------------------------------------------------------
/test/fixtures/with_image.md:
--------------------------------------------------------------------------------
1 | # Brian Hann
2 | ## Senior Web Developer, Data Nerd
3 |
4 | > 
5 |
6 | ---
7 |
8 | ### Profile
9 |
10 | Progressively evolve cross-platform ideas before impactful infomediaries. Energistically visualize tactical initiatives before cross-media catalysts for change.
11 |
12 | ---
13 |
14 | ### Skills
15 |
16 | * **Web Design**
17 | Assertively exploit wireless initiatives rather than synergistic core competencies.
18 |
19 | * **Interface Design**
20 | Credibly streamline mission-critical value with multifunctional functionalities.
21 |
22 | * **Project Direction**
23 | Proven ability to lead and manage a wide variety of design and development projects in team and independent situations.
24 |
25 | ---
26 |
27 | ### Technical
28 |
29 | 1. XHTML
30 | 1. CSS
31 | 1. Javascript
32 | 1. Jquery
33 | 1. PHP
34 | 1. CVS / Subversion
35 | 1. OS X
36 | 1. Windows XP/Vista
37 | 1. Linux
38 |
39 | ---
40 |
41 | ### Experience
42 |
43 | **Microsoft** : *Principal and Creative Lead* __2004-2005__
44 | Intrinsicly transform flexible manufactured products without excellent intellectual capital. Energistically evisculate orthogonal architectures through covalent action items. Assertively incentivize sticky platforms without synergistic materials.
45 |
46 | **International Business Machines (IBM)** : *Lead Web Designer* __2001-2004__
47 | 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.
48 |
--------------------------------------------------------------------------------
/test/md2resume.spec.js:
--------------------------------------------------------------------------------
1 | /*
2 | * decaffeinate suggestions:
3 | * DS102: Remove unnecessary code created because of implicit returns
4 | * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
5 | */
6 | const md2resume = require('../src/markdown-resume');
7 | const cheerio = require('cheerio');
8 | const juice = require('juice');
9 |
10 | describe('markdown-resume-js', () => {
11 | context('Reading non-markdown files', () => {
12 | it('should reject the promise when given a non-markdown file', () => {
13 | const readNonMarkdownFile = Promise.resolve(md2resume('test/fixtures/other.html'));
14 | return expect(readNonMarkdownFile)
15 | .to.be.rejectedWith(/Only markdown files are supported/);
16 | });
17 | });
18 |
19 | context('Reading missing markdown', () => {
20 | it('should reject the promise when the markdown file is missing', () => {
21 | const readMissingFilePromise = Promise.resolve(md2resume('missing-file.md'));
22 | return expect(readMissingFilePromise).to.be.rejectedWith(/no such file/);
23 | });
24 |
25 | return it('should reject the promise with an error when the file is empty', () => {
26 | const readEmptyFilePromise = Promise.resolve(md2resume('test/fixtures/empty.md'));
27 | return expect(readEmptyFilePromise).to.be.rejectedWith(/Source file is empty/);
28 | });
29 | });
30 |
31 | context('Writing html', () => {
32 | // FIXME - this is a roundabout kind of way to test that the styles are being
33 | // applied correctly.
34 | it('should produce valid html with the right styles applied', () => {
35 | const contentChecks = (resume) => {
36 | const resumeClassStyles = {
37 | position: 'relative',
38 | padding: '10px 20px',
39 | };
40 |
41 | const $ = cheerio.load(juice(resume));
42 | expect($('.resume').css()).to.deep.equal(resumeClassStyles);
43 | expect($('ol li').get().length).to.equal(9);
44 | return expect($('title').text())
45 | .to.equal('Brian Hann | Senior Web Developer, Data Nerd');
46 | };
47 |
48 | const renderResumePromise = Promise.resolve(md2resume('test/fixtures/resume.md'));
49 | return expect(renderResumePromise).to.be.fulfilled
50 | .and.eventually.satisfy(contentChecks);
51 | });
52 | });
53 |
54 | return context('Writing pdf', () => {});
55 | });
56 |
--------------------------------------------------------------------------------
/test/mocha.opts:
--------------------------------------------------------------------------------
1 | --require mocha.conf.js
2 |
--------------------------------------------------------------------------------