├── .gitignore ├── .nojekyll ├── LICENSE ├── README.md ├── example ├── as-gulp-plugin │ ├── .gitignore │ ├── custommethod.techy.js │ ├── dest │ │ ├── A │ │ │ └── lorem.html │ │ ├── B │ │ │ └── lipsum.html │ │ ├── feed.xml │ │ └── index.html │ ├── gulpfile.js │ ├── package.json │ ├── src │ │ ├── A │ │ │ └── lorem.md │ │ ├── B │ │ │ └── lipsum.md │ │ ├── feed.xml.rss │ │ └── index.md │ └── themes │ │ ├── default │ │ ├── css │ │ │ ├── basic.js │ │ │ ├── common │ │ │ │ ├── base.js │ │ │ │ ├── code.js │ │ │ │ ├── grids.js │ │ │ │ ├── list.js │ │ │ │ ├── scroller.js │ │ │ │ └── titles.js │ │ │ └── styles.js │ │ ├── js │ │ │ └── scripts.js │ │ ├── public │ │ │ ├── absurd.min.js │ │ │ ├── absurd.organic.min.js │ │ │ ├── font-awesome-4.0.3 │ │ │ │ ├── css │ │ │ │ │ ├── font-awesome.css │ │ │ │ │ └── font-awesome.min.css │ │ │ │ ├── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ │ ├── less │ │ │ │ │ ├── bordered-pulled.less │ │ │ │ │ ├── core.less │ │ │ │ │ ├── fixed-width.less │ │ │ │ │ ├── font-awesome.less │ │ │ │ │ ├── icons.less │ │ │ │ │ ├── larger.less │ │ │ │ │ ├── list.less │ │ │ │ │ ├── mixins.less │ │ │ │ │ ├── path.less │ │ │ │ │ ├── rotated-flipped.less │ │ │ │ │ ├── spinning.less │ │ │ │ │ ├── stacked.less │ │ │ │ │ └── variables.less │ │ │ │ └── scss │ │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ │ ├── _core.scss │ │ │ │ │ ├── _fixed-width.scss │ │ │ │ │ ├── _icons.scss │ │ │ │ │ ├── _larger.scss │ │ │ │ │ ├── _list.scss │ │ │ │ │ ├── _mixins.scss │ │ │ │ │ ├── _path.scss │ │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ │ ├── _spinning.scss │ │ │ │ │ ├── _stacked.scss │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── font-awesome.scss │ │ │ ├── prism │ │ │ │ ├── prism.css │ │ │ │ └── prism.js │ │ │ ├── scripts.js │ │ │ └── styles.css │ │ └── tpl │ │ │ └── layouts │ │ │ └── basic.html │ │ └── empty │ │ ├── css │ │ ├── basic.js │ │ └── styles.js │ │ ├── js │ │ └── scripts.js │ │ ├── public │ │ ├── scripts.js │ │ └── styles.css │ │ └── tpl │ │ └── layouts │ │ └── basic.html └── trivial │ ├── _tpl │ └── layout.html │ ├── index.md │ ├── inner │ ├── A │ │ └── A.md │ ├── B │ │ └── B.md │ ├── _filewithundescore.txt │ ├── _markdown.md │ └── _underscore │ │ └── test.txt │ └── public │ ├── absurd.min.js │ ├── absurd.organic.min.js │ ├── css │ └── styles.css │ ├── font-awesome-4.0.3 │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── spinning.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _spinning.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ ├── img │ └── favicon.png │ ├── js │ └── scripts.js │ └── prism │ ├── prism.css │ └── prism.js ├── lib ├── Factory.js ├── GulpEnd.js ├── Page.js ├── api │ ├── linkto.techy.js │ ├── numofpages.techy.js │ ├── page.techy.js │ ├── pages.techy.js │ └── template.techy.js ├── helpers │ ├── extend.js │ └── queue.js ├── index.js └── themes │ └── default │ ├── _tpl │ └── layout.html │ └── public │ ├── absurd.min.js │ ├── absurd.organic.min.js │ ├── css │ └── styles.css │ ├── font-awesome-4.0.3 │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── spinning.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _spinning.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ ├── img │ └── favicon.png │ ├── js │ └── scripts.js │ └── prism │ ├── prism.css │ └── prism.js ├── package.json ├── tests ├── access-page-by-name │ ├── A │ │ └── index.md │ ├── B │ │ └── index.md │ ├── expected.html │ └── page.md ├── basic │ ├── _donttouch │ │ └── file.txt │ ├── _expects │ │ ├── A.html │ │ └── page.html │ ├── _lib │ │ └── awesome.techy.js │ ├── _tpl │ │ └── layout.html │ ├── css │ │ └── styles.css │ ├── inner │ │ └── A.md │ ├── js │ │ └── scripts.js │ └── page.md ├── copy-non-underscore │ ├── _file.md │ ├── _file.txt │ ├── _folder │ │ └── file.txt │ ├── copythis │ │ ├── _butnotthis │ │ │ └── file.txt │ │ ├── _copyme.md │ │ └── somefile.txt │ └── page.md ├── css_absurd │ ├── TechyFile.js │ ├── _absurd │ │ └── styles.js │ └── expected_styles.css ├── css_css │ ├── TechyFile.js │ ├── _css │ │ ├── a.css │ │ ├── b.css │ │ └── custom │ │ │ └── c.css │ └── expected_styles.css ├── css_less │ ├── TechyFile.js │ ├── _less │ │ └── styling.less │ └── expected_styles.css ├── css_less_watch_dir │ ├── TechyFile.js │ ├── _less │ │ ├── include │ │ │ └── other.less │ │ ├── other.less │ │ └── style.less │ ├── expected_style.css │ └── expected_style_changed.css ├── custom-layout │ ├── _my-templates │ │ ├── footer.html │ │ └── layout.html │ ├── expected.html │ └── page.md ├── custom-master-config │ ├── expected.html │ ├── options.js │ └── page.md ├── custom-method │ ├── _libs │ │ └── myown.techy.js │ ├── expected.html │ └── page.md ├── custom-templates │ ├── _data │ │ └── custom │ │ │ └── part.html │ ├── expected.html │ └── page.md ├── draft-pages │ ├── A.md │ ├── B.md │ ├── C.md │ ├── expected.html │ └── page.md ├── get-pages-from-dir │ ├── D.md │ ├── articles │ │ ├── C.md │ │ ├── awesome.article.300.md │ │ └── today │ │ │ ├── A.html │ │ │ ├── A.md │ │ │ ├── B.html │ │ │ └── B.md │ ├── expected.html │ └── page.md ├── html-usage │ ├── expected.html │ └── page.md ├── js │ ├── TechyFile.js │ ├── _src │ │ ├── A.js │ │ └── B.js │ └── expected.js ├── linkto │ ├── A │ │ └── B │ │ │ ├── custom-page.html │ │ │ └── custom-page.md │ ├── C │ │ └── D │ │ │ ├── d-page.html │ │ │ └── d-page.md │ ├── expected.html │ └── page.md ├── markdown-partials │ ├── A.md │ ├── B.md │ ├── C.md │ ├── expected.html │ └── page.md ├── master-config-with-dest-folder │ ├── .gitignore │ ├── TechyFile.js │ ├── _in │ │ └── page.md │ └── _out │ │ └── page.html ├── master-config │ ├── TechyFile.js │ ├── expected.html │ └── page.md ├── md-to-html │ ├── expected.html │ └── page.md ├── num-of-pages │ ├── expected.html │ ├── page.md │ └── posts │ │ └── article99.md ├── process-other-files │ ├── A │ │ ├── C │ │ │ ├── noprocess.css │ │ │ ├── styles.css.expected │ │ │ └── styles.css.ttt │ │ ├── custom.html.expected │ │ └── custom.html.techy │ ├── B │ │ └── log.txt.blah │ ├── TechyFile.js │ └── rss.xml.techy ├── set-get │ ├── .gitignore │ ├── expected.html │ └── page.md ├── should-use-src-dest │ ├── .gitignore │ ├── _out │ │ ├── A.html │ │ └── page.html │ ├── _pages │ │ └── src │ │ │ ├── A.md │ │ │ └── page.md │ └── expected.html ├── sort-by │ ├── D.md │ ├── articles │ │ ├── C.html │ │ ├── C.md │ │ ├── awesome.article.300.html │ │ ├── awesome.article.300.md │ │ └── today │ │ │ ├── A.html │ │ │ ├── A.md │ │ │ ├── B.html │ │ │ └── B.md │ ├── expected.html │ ├── page.md │ └── showsorting.techy.js ├── tests.js ├── using-path │ ├── expected.html │ ├── inner │ │ ├── A │ │ │ └── index.md │ │ └── index.md │ └── page.md ├── using-theme │ ├── TechyFile.js │ ├── _tpl │ │ └── layout.html │ ├── expected.html │ ├── page.md │ └── public │ │ ├── absurd.min.js │ │ ├── absurd.organic.min.js │ │ ├── css │ │ └── styles.css │ │ ├── font-awesome-4.0.3 │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── spinning.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _spinning.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ ├── img │ │ └── favicon.png │ │ ├── js │ │ └── scripts.js │ │ └── prism │ │ ├── prism.css │ │ └── prism.js ├── using-yaml │ ├── A │ │ └── a.md │ ├── expected.html │ └── page.md └── with-layout │ ├── custom-layout.html │ ├── expected.html │ └── page.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | examples/ 3 | _dist 4 | *.swp 5 | -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/.nojekyll -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Krasimir Tsonev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | 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, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hello, I'm Techy
The geeky way of writing 2 | 3 | I'm a super simple Flat CMS based on [Node.js](http://nodejs.org) ([Gulp.js](http://gulpjs.com/) and [AbsurdJS](http://absurdjs.com/)). If you don't want to use a database to store your content I could help you. Write everything in [Markdown](https://daringfireball.net/projects/markdown/) format and I'll convert it to HTML. 4 | 5 | ## The concept 6 | 7 | In the content driven web site (like a blog for example) the writing should be really easy. Markdown language gives us the simplicity which we need. However, sometimes converting *.md* files to *.html* files is not enough. Techy is an instrument which uses Markdown as a base but also makes your pages programmable. For example: 8 | 9 | <% set('name', 'Big Joe') %> 10 | 11 | # Article title 12 | 13 | > author: <% get('name') %> 14 | 15 | Hello, my name is <% get('name') %>. I'm a web developer. 16 | 17 | is transformed to: 18 | ``` html 19 |

Article title

20 |
21 |

author: Big Joe

22 |
23 |

Hello, my name is Big Joe. I'm a web developer.

24 | ``` 25 | 26 | In other words, there are JavaScript expressions which you may write between `<%` and `%>` and basically fetch information based on other files in your codebase. For example generating a site map or showing the latest added Markdowns. 27 | 28 | ## Simple usage 29 | 30 | Install Techy from the command line onto your system by running the following command: 31 | 32 | npm install -g techy 33 | 34 | Aaaand ... that's it. Create an empty directory and put your Markdown files inside. If you type `techy` and press *Enter* in the same folder you will see all the materials converted to HTML. 35 | 36 | Techy is not only generating HTML markup. It puts your writings into a nicely formatted layout. 37 | 38 | --- 39 | 40 | Checkout the full documentation [here](http://krasimir.github.io/techy/docs). 41 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /example/as-gulp-plugin/custommethod.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return 'The title of page B is ' + this.page('B').get('title'); 3 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/dest/A/lorem.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Techy 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

Lorem

17 |

Hello friend, how are you.

18 | Lipsum text 19 |
20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/dest/B/lipsum.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Lipsum text 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

Lipsum

17 |
18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/dest/feed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 3 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/dest/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Techy 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

Hello world

17 |

/ The title of page B is Lipsum text /

18 |
19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var Techy = require(__dirname + '/../../lib/index.js').gulp({ 3 | customVar: 'friend' 4 | }); 5 | 6 | gulp.task('compile', function() { 7 | gulp.src('./src/**/*.*') 8 | .pipe(Techy()) 9 | .pipe(gulp.dest('./dest')); 10 | }); 11 | 12 | gulp.task('watchers', function() { 13 | gulp.watch(['src/**/*.*', 'themes/default/css/**/*.js'], ['compile']); 14 | }); 15 | 16 | gulp.task('default', ['compile', 'watchers']); 17 | 18 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "techy-test", 3 | "version": "0.0.1", 4 | "dependencies": { 5 | "techy": "*", 6 | "gulp": "3.6.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/src/A/lorem.md: -------------------------------------------------------------------------------- 1 | # Lorem 2 | 3 | Hello <% customVar %>, how are you. 4 | 5 | <% page('B').get('title') %> -------------------------------------------------------------------------------- /example/as-gulp-plugin/src/B/lipsum.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: B 3 | title: Lipsum text 4 | --- 5 | 6 | # Lipsum -------------------------------------------------------------------------------- /example/as-gulp-plugin/src/feed.xml.rss: -------------------------------------------------------------------------------- 1 | 2 | <% numofpages() %> 3 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/src/index.md: -------------------------------------------------------------------------------- 1 | # Hello world 2 | 3 | / <% custommethod() %> / -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/css/basic.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.add({ 3 | '.content': { 4 | maw: '650px', 5 | mar: '40px auto' 6 | } 7 | }); 8 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/css/common/base.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.add({ 3 | 'body, html': { 4 | wid: '100%', 5 | hei: '100%', 6 | pad: 0, 7 | mar: 0, 8 | fz: api.settings.fontSize, 9 | lh: api.settings.lineHeight, 10 | ff: api.settings.font, 11 | color: api.settings.textColor, 12 | bg: api.settings.bgColor 13 | }, 14 | a: { 15 | fw: 'b', 16 | color: api.settings.textColor, 17 | bdb: 'dotted 1px ' + api.lighten(api.settings.borderColor, 30), 18 | ted: 'n', 19 | '&:hover': { 20 | color: api.settings.brandColor1, 21 | bdb: 'dotted 1px ' + api.settings.borderColor 22 | } 23 | }, 24 | p: { 25 | fz: api.settings.fontSize, 26 | lh: api.settings.lineHeight, 27 | '@media all and (max-width: 600px)': { 28 | fz: api.settings.lowFontSize, 29 | lh: api.settings.lowLineHeight 30 | } 31 | }, 32 | hr: { 33 | bdb: 'n', 34 | bdt: 'solid 4px ' + api.lighten(api.settings.borderColor, 50) 35 | }, 36 | blockquote: { 37 | bdl: 'solid 4px #999', 38 | pad: ' 0 0 0 20px', 39 | mar: 0, 40 | p: { 41 | color: '#999' 42 | } 43 | }, 44 | table: { 45 | bdsp: 0, 46 | td: { 47 | bdt: 'solid 1px #B3B3B3', 48 | bdl: 'solid 1px #B3B3B3', 49 | pad: '6px', 50 | 'word-wrap': 'break-word' 51 | } 52 | }, 53 | '.left': { fl: 'l' }, 54 | '.right': { fl: 'r' } 55 | }); 56 | 57 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/css/common/code.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.add({ 3 | 'code[class*="language-"], pre[class*="language-"]': { 4 | fz: '14px', 5 | lh: '20px', 6 | 'p &': { 7 | fz: '18px', 8 | bd: 'solid 1px #D8D8D8', 9 | d: 'ib', 10 | pad: '0 10px 0 10px' 11 | } 12 | }, 13 | 'pre': { 14 | '-wm-bxsh': '0 0 2px 1px #ccc' 15 | }, 16 | }); 17 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/css/common/grids.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | var settings = api.settings.layouts.techy; 3 | var grids = [ 4 | { breakpoint: 600, cols: 2 }, 5 | { breakpoint: 670, cols: 3 }, 6 | { breakpoint: 700, cols: 4 } 7 | ]; 8 | for(var i=0; i li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/font-awesome-4.0.3/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/prism/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js default theme for JavaScript, CSS and HTML 3 | * Based on dabblet (http://dabblet.com) 4 | * @author Lea Verou 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: black; 10 | text-shadow: 0 1px white; 11 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 12 | direction: ltr; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | } 28 | 29 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 30 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 31 | text-shadow: none; 32 | background: #b3d4fc; 33 | } 34 | 35 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 36 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 37 | text-shadow: none; 38 | background: #b3d4fc; 39 | } 40 | 41 | @media print { 42 | code[class*="language-"], 43 | pre[class*="language-"] { 44 | text-shadow: none; 45 | } 46 | } 47 | 48 | /* Code blocks */ 49 | pre[class*="language-"] { 50 | padding: 1em; 51 | margin: .5em 0; 52 | overflow: auto; 53 | } 54 | 55 | :not(pre) > code[class*="language-"], 56 | pre[class*="language-"] { 57 | background: #f5f2f0; 58 | } 59 | 60 | /* Inline code */ 61 | :not(pre) > code[class*="language-"] { 62 | padding: .1em; 63 | border-radius: .3em; 64 | } 65 | 66 | .token.comment, 67 | .token.prolog, 68 | .token.doctype, 69 | .token.cdata { 70 | color: slategray; 71 | } 72 | 73 | .token.punctuation { 74 | color: #999; 75 | } 76 | 77 | .namespace { 78 | opacity: .7; 79 | } 80 | 81 | .token.property, 82 | .token.tag, 83 | .token.boolean, 84 | .token.number, 85 | .token.constant, 86 | .token.symbol { 87 | color: #905; 88 | } 89 | 90 | .token.selector, 91 | .token.attr-name, 92 | .token.string, 93 | .token.builtin { 94 | color: #690; 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: #a67f59; 104 | background: hsla(0,0%,100%,.5); 105 | } 106 | 107 | .token.atrule, 108 | .token.attr-value, 109 | .token.keyword { 110 | color: #07a; 111 | } 112 | 113 | 114 | .token.regex, 115 | .token.important { 116 | color: #e90; 117 | } 118 | 119 | .token.important { 120 | font-weight: bold; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/prism/prism.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Prism: Lightweight, robust, elegant syntax highlighting 3 | * MIT license http://www.opensource.org/licenses/mit-license.php/ 4 | * @author Lea Verou http://lea.verou.me 5 | */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 6 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 7 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 8 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 9 | ; 10 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); 11 | ; 12 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/scripts.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/as-gulp-plugin/themes/default/public/scripts.js -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/public/styles.css: -------------------------------------------------------------------------------- 1 | body{width: 100%;height: 100%;padding: 0;margin: 0;font-size: 20px;line-height: 34px;font-family: 'Average Sans',sans-serif;background: #FFF;color: #313131;}html{width: 100%;height: 100%;padding: 0;margin: 0;font-size: 20px;line-height: 34px;font-family: 'Average Sans',sans-serif;background: #FFF;color: #313131;}a{font-weight: bold;border-bottom: dotted 1px #c7c7c7;text-decoration: none;color: #313131;}a:hover{border-bottom: dotted 1px #999;color: #DC4141;}p{font-size: 20px;line-height: 34px;}hr{border-bottom: none;border-top: solid 4px #e6e6e6;}blockquote{border-left: solid 4px #999;padding: 0 0 0 20px;margin: 0;}blockquote p{color: #999;}table{border-spacing: 0;}table td{border-top: solid 1px #B3B3B3;border-left: solid 1px #B3B3B3;padding: 6px;word-wrap: break-word;}.left{float: left;}.right{float: right;}h1{font-size: 60px;line-height: 70px;padding: 0 0 40px 0;margin: 50px 0 30px 0;}h2{font-size: 36px;line-height: 40px;}h3{font-size: 36px;line-height: 40px;font-weight: normal;}h4{font-size: 30px;line-height: 34px;font-weight: normal;}h5{font-size: 24px;line-height: 28px;font-weight: normal;}h6{font-size: 20px;line-height: 24px;}::-webkit-scrollbar{width: 8px;}::-webkit-scrollbar-track{webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);border-radius: 2px;-webkit-border-radius: 2px;}::-webkit-scrollbar-thumb{background: rgba(150,150,150,0.8);border-radius: 2px;-webkit-border-radius: 2px;webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);}::-webkit-scrollbar-thumb:window-inactive{background: rgba(150,150,150,0.4);}ul{margin: 30px 0 30px 22px;padding: 0;list-style-type: circle;}ul li{margin: 0;padding: 0;}ol{margin: 30px 0 30px 22px;padding: 0;list-style-type: circle;}ol li{margin: 0;padding: 0;}code[class*="language-"]{font-size: 14px;line-height: 20px;}p code[class*="language-"]{font-size: 18px;border: solid 1px #D8D8D8;display: inline-block;padding: 0 10px 0 10px;}pre[class*="language-"]{font-size: 14px;line-height: 20px;}p pre[class*="language-"]{font-size: 18px;border: solid 1px #D8D8D8;display: inline-block;padding: 0 10px 0 10px;}pre{box-shadow: 0 0 2px 1px #ccc;-webkit-box-shadow: 0 0 2px 1px #ccc;-moz-box-shadow: 0 0 2px 1px #ccc;}.grid-2:before{content: " ";display: table;clear: both;}.grid-2:after{content: " ";display: table;clear: both;}.grid-2 .grid-column{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 50.00%;}.grid-2 .grid-column p{padding-left: 0;pd: 0;}.grid-3:before{content: " ";display: table;clear: both;}.grid-3:after{content: " ";display: table;clear: both;}.grid-3 .grid-column{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 33.33%;}.grid-3 .grid-column p{padding-left: 0;pd: 0;}.grid-4:before{content: " ";display: table;clear: both;}.grid-4:after{content: " ";display: table;clear: both;}.grid-4 .grid-column{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 25.00%;}.grid-4 .grid-column p{padding-left: 0;pd: 0;}.content{max-width: 650px;margin: 40px auto;}@media all and (max-width: 600px){p{font-size: 18px;line-height: 28px;}h1{font-size: 40px;line-height: 40px;margin: 20px 0 10px 0;padding: 0 0 20px 0;}h2{font-size: 30px;line-height: 30px;}h3{font-size: 26px;line-height: 26px;}h4{font-size: 22px;line-height: 22px;}h5{font-size: 18px;line-height: 18px;}h6{font-size: 18px;line-height: 18px;}.grid-2 .grid-column{float: none;width: 100%;}}@media all and (max-width: 670px){.grid-3 .grid-column{float: none;width: 100%;}}@media all and (max-width: 700px){.grid-4 .grid-column{float: none;width: 100%;}} -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/default/tpl/layouts/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <% this.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | <% get('content') %> 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/css/basic.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.add({ 3 | 4 | }); 5 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/css/styles.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | 3 | } -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/js/scripts.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/as-gulp-plugin/themes/empty/js/scripts.js -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/public/scripts.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/as-gulp-plugin/themes/empty/public/scripts.js -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/public/styles.css: -------------------------------------------------------------------------------- 1 | body{width: 100%;height: 100%;padding: 0;margin: 0;font-size: 20px;line-height: 34px;font-family: 'Average Sans',sans-serif;background: #FFF;color: #313131;}html{width: 100%;height: 100%;padding: 0;margin: 0;font-size: 20px;line-height: 34px;font-family: 'Average Sans',sans-serif;background: #FFF;color: #313131;}a{font-weight: bold;border-bottom: dotted 1px #c7c7c7;text-decoration: none;color: #313131;}a:hover{border-bottom: dotted 1px #999;color: #DC4141;}p{font-size: 20px;line-height: 34px;}hr{border-bottom: none;border-top: solid 4px #e6e6e6;}blockquote{border-left: solid 4px #999;padding: 0 0 0 20px;margin: 0;}blockquote p{color: #999;}table{border-spacing: 0;}table td{border-top: solid 1px #B3B3B3;border-left: solid 1px #B3B3B3;padding: 6px;word-wrap: break-word;}.left{float: left;}.right{float: right;}h1{font-size: 60px;line-height: 70px;padding: 0 0 40px 0;margin: 50px 0 30px 0;}h2{font-size: 36px;line-height: 40px;}h3{font-size: 36px;line-height: 40px;font-weight: normal;}h4{font-size: 30px;line-height: 34px;font-weight: normal;}h5{font-size: 24px;line-height: 28px;font-weight: normal;}h6{font-size: 20px;line-height: 24px;}::-webkit-scrollbar{width: 8px;}::-webkit-scrollbar-track{webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);-o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);border-radius: 2px;-webkit-border-radius: 2px;}::-webkit-scrollbar-thumb{background: rgba(150,150,150,0.8);border-radius: 2px;-webkit-border-radius: 2px;webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);-o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);}::-webkit-scrollbar-thumb:window-inactive{background: rgba(150,150,150,0.4);}ul{margin: 30px 0 30px 22px;padding: 0;list-style-type: circle;}ul li{margin: 0;padding: 0;}ol{margin: 30px 0 30px 22px;padding: 0;list-style-type: circle;}ol li{margin: 0;padding: 0;}code[class*="language-"]{font-size: 14px;line-height: 20px;}p code[class*="language-"]{font-size: 18px;border: solid 1px #D8D8D8;display: inline-block;padding: 0 10px 0 10px;}pre[class*="language-"]{font-size: 14px;line-height: 20px;}p pre[class*="language-"]{font-size: 18px;border: solid 1px #D8D8D8;display: inline-block;padding: 0 10px 0 10px;}pre{box-shadow: 0 0 2px 1px #ccc;-webkit-box-shadow: 0 0 2px 1px #ccc;-moz-box-shadow: 0 0 2px 1px #ccc;}.grid-2:before{content: " ";display: table;clear: both;}.grid-2:after{content: " ";display: table;clear: both;}.grid-2 p{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 50.00%;}.grid-3:before{content: " ";display: table;clear: both;}.grid-3:after{content: " ";display: table;clear: both;}.grid-3 p{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 33.33%;}.grid-4:before{content: " ";display: table;clear: both;}.grid-4:after{content: " ";display: table;clear: both;}.grid-4 p{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 25.00%;}.grid-5:before{content: " ";display: table;clear: both;}.grid-5:after{content: " ";display: table;clear: both;}.grid-5 p{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 20.00%;}.grid-6:before{content: " ";display: table;clear: both;}.grid-6:after{content: " ";display: table;clear: both;}.grid-6 p{float: left;box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;width: 16.67%;}@media all and (max-width: 600px){p{font-size: 18px;line-height: 28px;}h1{font-size: 40px;line-height: 40px;margin: 20px 0 10px 0;padding: 0 0 20px 0;}h2{font-size: 30px;line-height: 30px;}h3{font-size: 26px;line-height: 26px;}h4{font-size: 22px;line-height: 22px;}h5{font-size: 18px;line-height: 18px;}h6{font-size: 18px;line-height: 18px;}} -------------------------------------------------------------------------------- /example/as-gulp-plugin/themes/empty/tpl/layouts/basic.html: -------------------------------------------------------------------------------- 1 | <% get('content') %> -------------------------------------------------------------------------------- /example/trivial/_tpl/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <% this.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | <% get('content') %> 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /example/trivial/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: home 3 | desc: A home page 4 | layout: _tpl/layout 5 | --- 6 | 7 | # That's a page title 8 | 9 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, pariatur, tenetur facere dolore numquam reiciendis itaque labore sequi animi laboriosam quisquam fugit sint dolores cupiditate minus quos dolorem iure fugiat. 10 | 11 | // some code here 12 | function blah() { 13 | console.log('function'); 14 | } 15 | 16 | [ Go to inner page](inner/A/A.html) -------------------------------------------------------------------------------- /example/trivial/inner/A/A.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: _tpl/layout 3 | --- 4 | # That's an inner page AAAA 5 | 6 | Go to home page.
7 | Go to B page. -------------------------------------------------------------------------------- /example/trivial/inner/B/B.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: _tpl/layout 3 | --- 4 | # That's an inner page B 5 | 6 | Go to home page.
7 | Go to A page. 8 | 9 | ## <% page('home').get('desc') %> -------------------------------------------------------------------------------- /example/trivial/inner/_filewithundescore.txt: -------------------------------------------------------------------------------- 1 | test -------------------------------------------------------------------------------- /example/trivial/inner/_markdown.md: -------------------------------------------------------------------------------- 1 | # Hello world -------------------------------------------------------------------------------- /example/trivial/inner/_underscore/test.txt: -------------------------------------------------------------------------------- 1 | test -------------------------------------------------------------------------------- /example/trivial/public/css/styles.css: -------------------------------------------------------------------------------- 1 | /* misc */ 2 | 3 | body, html { 4 | width: 100%; 5 | height: 100%; 6 | padding: 0; 7 | margin: 0; 8 | font-size: 20px; 9 | line-height: 34px; 10 | font-family: 'Average Sans', sans-serif; 11 | background: #FFF; 12 | color: #313131; 13 | } 14 | a { 15 | font-weight: bold; 16 | border-bottom: dotted 1px #c7c7c7; 17 | text-decoration: none; 18 | color: #313131; 19 | } 20 | a:hover { 21 | border-bottom: dotted 1px #999; 22 | color: #DC4141; 23 | } 24 | p { 25 | font-size: 20px; 26 | line-height: 34px; 27 | } 28 | hr { 29 | border-bottom: none; 30 | border-top: solid 4px #e6e6e6; 31 | } 32 | blockquote { 33 | border-left: solid 4px #999; 34 | padding: 0 0 0 20px; 35 | margin: 0; 36 | } 37 | blockquote p { 38 | color: #999; 39 | } 40 | table { 41 | border-spacing: 0; 42 | } 43 | table td { 44 | border-top: solid 1px #B3B3B3; 45 | border-left: solid 1px #B3B3B3; 46 | padding: 6px; 47 | word-wrap: break-word; 48 | } 49 | .left { 50 | float: left; 51 | } 52 | .right { 53 | float: right; 54 | } 55 | 56 | /* headings */ 57 | 58 | h1 { 59 | font-size: 60px; 60 | line-height: 70px; 61 | padding: 0 0 40px 0; 62 | margin: 50px 0 30px 0; 63 | } 64 | h2 { 65 | font-size: 36px; 66 | line-height: 40px; 67 | } 68 | h3 { 69 | font-size: 36px; 70 | line-height: 40px; 71 | font-weight: normal; 72 | } 73 | h4 { 74 | font-size: 30px; 75 | line-height: 34px; 76 | font-weight: normal; 77 | } 78 | h5 { 79 | font-size: 24px; 80 | line-height: 28px; 81 | font-weight: normal; 82 | } 83 | h6 { 84 | font-size: 20px; 85 | line-height: 24px; 86 | } 87 | 88 | /* scroller */ 89 | 90 | ::-webkit-scrollbar { 91 | width: 8px; 92 | } 93 | ::-webkit-scrollbar-track { 94 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 95 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 96 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 97 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 98 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 99 | border-radius: 2px; 100 | -webkit-border-radius: 2px; 101 | } 102 | ::-webkit-scrollbar-thumb { 103 | background: rgba(150,150,150,0.8); 104 | border-radius: 2px; 105 | -webkit-border-radius: 2px; 106 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 107 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 108 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 109 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 110 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 111 | } 112 | ::-webkit-scrollbar-thumb:window-inactive { 113 | background: rgba(150,150,150,0.4); 114 | } 115 | 116 | /* lists */ 117 | 118 | ul { 119 | margin: 30px 0 30px 22px; 120 | padding: 0; 121 | list-style-type: circle; 122 | } 123 | ul li { 124 | margin: 0; 125 | padding: 0; 126 | } 127 | ol { 128 | margin: 30px 0 30px 22px; 129 | padding: 0; 130 | list-style-type: circle; 131 | } 132 | ol li { 133 | margin: 0; 134 | padding: 0; 135 | } 136 | 137 | /* code */ 138 | 139 | code[class*="language-"] { 140 | font-size: 14px; 141 | line-height: 20px; 142 | } 143 | p code[class*="language-"] { 144 | font-size: 18px; 145 | border: solid 1px #D8D8D8; 146 | display: inline-block; 147 | padding: 0 10px 0 10px; 148 | } 149 | pre[class*="language-"] { 150 | font-size: 14px; 151 | line-height: 20px; 152 | } 153 | p pre[class*="language-"] { 154 | font-size: 18px; 155 | border: solid 1px #D8D8D8; 156 | display: inline-block; 157 | padding: 0 10px 0 10px; 158 | } 159 | pre { 160 | box-shadow: 0 0 2px 1px #ccc; 161 | -webkit-box-shadow: 0 0 2px 1px #ccc; 162 | -moz-box-shadow: 0 0 2px 1px #ccc; 163 | } 164 | 165 | /* grids */ 166 | 167 | .grid-2:before { 168 | content: " "; 169 | display: table; 170 | clear: both; 171 | } 172 | .grid-2:after { 173 | content: " "; 174 | display: table; 175 | clear: both; 176 | } 177 | .grid-2 .grid-column { 178 | float: left; 179 | box-sizing: border-box; 180 | -webkit-box-sizing: border-box; 181 | -moz-box-sizing: border-box; 182 | width: 50.00%; 183 | } 184 | .grid-2 .grid-column p { 185 | padding-left: 0; 186 | pd: 0; 187 | } 188 | .grid-3:before { 189 | content: " "; 190 | display: table; 191 | clear: both; 192 | } 193 | .grid-3:after { 194 | content: " "; 195 | display: table; 196 | clear: both; 197 | } 198 | .grid-3 .grid-column { 199 | float: left; 200 | box-sizing: border-box; 201 | -webkit-box-sizing: border-box; 202 | -moz-box-sizing: border-box; 203 | width: 33.33%; 204 | } 205 | .grid-3 .grid-column p { 206 | padding-left: 0; 207 | pd: 0; 208 | } 209 | .grid-4:before { 210 | content: " "; 211 | display: table; 212 | clear: both; 213 | } 214 | .grid-4:after { 215 | content: " "; 216 | display: table; 217 | clear: both; 218 | } 219 | .grid-4 .grid-column { 220 | float: left; 221 | box-sizing: border-box; 222 | -webkit-box-sizing: border-box; 223 | -moz-box-sizing: border-box; 224 | width: 25.00%; 225 | } 226 | .grid-4 .grid-column p { 227 | padding-left: 0; 228 | pd: 0; 229 | } 230 | 231 | /* main container */ 232 | 233 | .content { 234 | max-width: 650px; 235 | margin: 40px auto; 236 | } 237 | 238 | /* responsive */ 239 | 240 | @media all and (max-width: 600px) { 241 | p { 242 | font-size: 18px; 243 | line-height: 28px; 244 | } 245 | h1 { 246 | font-size: 40px; 247 | line-height: 40px; 248 | margin: 20px 0 10px 0; 249 | padding: 0 0 20px 0; 250 | } 251 | h2 { 252 | font-size: 30px; 253 | line-height: 30px; 254 | } 255 | h3 { 256 | font-size: 26px; 257 | line-height: 26px; 258 | } 259 | h4 { 260 | font-size: 22px; 261 | line-height: 22px; 262 | } 263 | h5 { 264 | font-size: 18px; 265 | line-height: 18px; 266 | } 267 | h6 { 268 | font-size: 18px; 269 | line-height: 18px; 270 | } 271 | .grid-2 .grid-column { 272 | float: none; 273 | width: 100%; 274 | } 275 | } 276 | @media all and (max-width: 670px) { 277 | .grid-3 .grid-column { 278 | float: none; 279 | width: 100%; 280 | } 281 | } 282 | @media all and (max-width: 700px) { 283 | .grid-4 .grid-column { 284 | float: none; 285 | width: 100%; 286 | } 287 | } 288 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/trivial/public/font-awesome-4.0.3/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/trivial/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /example/trivial/public/font-awesome-4.0.3/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /example/trivial/public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/example/trivial/public/img/favicon.png -------------------------------------------------------------------------------- /example/trivial/public/js/scripts.js: -------------------------------------------------------------------------------- 1 | var a = 6223; -------------------------------------------------------------------------------- /example/trivial/public/prism/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js default theme for JavaScript, CSS and HTML 3 | * Based on dabblet (http://dabblet.com) 4 | * @author Lea Verou 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: black; 10 | text-shadow: 0 1px white; 11 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 12 | direction: ltr; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | } 28 | 29 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 30 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 31 | text-shadow: none; 32 | background: #b3d4fc; 33 | } 34 | 35 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 36 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 37 | text-shadow: none; 38 | background: #b3d4fc; 39 | } 40 | 41 | @media print { 42 | code[class*="language-"], 43 | pre[class*="language-"] { 44 | text-shadow: none; 45 | } 46 | } 47 | 48 | /* Code blocks */ 49 | pre[class*="language-"] { 50 | padding: 1em; 51 | margin: .5em 0; 52 | overflow: auto; 53 | } 54 | 55 | :not(pre) > code[class*="language-"], 56 | pre[class*="language-"] { 57 | background: #f5f2f0; 58 | } 59 | 60 | /* Inline code */ 61 | :not(pre) > code[class*="language-"] { 62 | padding: .1em; 63 | border-radius: .3em; 64 | } 65 | 66 | .token.comment, 67 | .token.prolog, 68 | .token.doctype, 69 | .token.cdata { 70 | color: slategray; 71 | } 72 | 73 | .token.punctuation { 74 | color: #999; 75 | } 76 | 77 | .namespace { 78 | opacity: .7; 79 | } 80 | 81 | .token.property, 82 | .token.tag, 83 | .token.boolean, 84 | .token.number, 85 | .token.constant, 86 | .token.symbol { 87 | color: #905; 88 | } 89 | 90 | .token.selector, 91 | .token.attr-name, 92 | .token.string, 93 | .token.builtin { 94 | color: #690; 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: #a67f59; 104 | background: hsla(0,0%,100%,.5); 105 | } 106 | 107 | .token.atrule, 108 | .token.attr-value, 109 | .token.keyword { 110 | color: #07a; 111 | } 112 | 113 | 114 | .token.regex, 115 | .token.important { 116 | color: #e90; 117 | } 118 | 119 | .token.important { 120 | font-weight: bold; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | -------------------------------------------------------------------------------- /example/trivial/public/prism/prism.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Prism: Lightweight, robust, elegant syntax highlighting 3 | * MIT license http://www.opensource.org/licenses/mit-license.php/ 4 | * @author Lea Verou http://lea.verou.me 5 | */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 6 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 7 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 8 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 9 | ; 10 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); 11 | ; 12 | -------------------------------------------------------------------------------- /lib/Factory.js: -------------------------------------------------------------------------------- 1 | var through2 = require('through2'); 2 | var gutil = require('gulp-util'); 3 | var path = require('path'); 4 | var glob = require('glob-expand'); 5 | var Page = require('./Page'); 6 | var PluginError = gutil.PluginError; 7 | var yamlFront = require('yaml-front-matter'); 8 | 9 | module.exports = function(api) { 10 | 11 | var extend = function() { 12 | var process = function(destination, source) { 13 | for (var key in source) { 14 | if (hasOwnProperty.call(source, key)) { 15 | destination[key] = source[key]; 16 | } 17 | } 18 | return destination; 19 | }; 20 | var result = arguments[0]; 21 | for(var i=1; i 0) { 80 | process(infoFiles); 81 | } else { 82 | infoFiles = process(glob({}, [ 83 | api.config.src + '/**/*.md', 84 | '!' + api.config.src + '/node_modules/**/*.md', 85 | '!' + api.config.dest + '/**/*.md' 86 | ])); 87 | } 88 | return info; 89 | } 90 | 91 | var applyYamlConfig = function(page, config) { 92 | if(page && config) { 93 | for(var prop in config) { 94 | if(prop != '__content') { 95 | page.set(prop, config[prop]); 96 | } 97 | } 98 | } 99 | } 100 | var getYamlFront = function(file) { 101 | return yamlFront.loadFront(fs.readFileSync(file).toString('utf8')); 102 | } 103 | 104 | // collecting techy methods 105 | var techyFiles = [].concat( 106 | glob({}, [ 107 | api.rootTechy + '/api/**/*.techy.js', 108 | api.root + '/**/*.techy.js' 109 | ]) 110 | ); 111 | var infoFiles = [], info = {}, cache = { yaml: {}, pagePaths: {} }; 112 | 113 | var createPage = function() { 114 | var page = extend(Page(), api.config); 115 | page.set('root', api.root); 116 | page.set('rootTechy', api.rootTechy); 117 | page.set('theme', api.theme); 118 | page.set('themeDir', api.themeDir); 119 | page.set('techyFiles', techyFiles); 120 | page.set('info', info); 121 | return page; 122 | } 123 | 124 | var processFile = function(file, next, noSave, pageData) { 125 | 126 | if(!next) { next = function() {} }; 127 | 128 | var page = createPage(); 129 | 130 | page.set('paths', getPagePaths(file.path)); 131 | page.parseMarkdownFile = processFile; 132 | 133 | if(pageData) { 134 | for(var prop in pageData) { 135 | page.set(prop, pageData[prop]); 136 | } 137 | } 138 | 139 | var fileRoot = path.dirname(file.path), 140 | endFile = '', 141 | ext = file.path.split('.').pop().toLowerCase(); 142 | infoPass = false, 143 | noMarkdown = false, 144 | noLayout = false; 145 | 146 | if(ext == 'md') { 147 | endFile = path.basename(file.path).replace('.md', '.html'); 148 | } else { 149 | noMarkdown = noLayout = true; 150 | endFile = path.basename(file.path).replace('.' + ext, ''); 151 | } 152 | var yamlConfig = getYamlFront(file.path); 153 | applyYamlConfig(page, yamlConfig); 154 | var content = page.parser(yamlConfig.__content, infoPass, noMarkdown).build(noLayout); 155 | 156 | if(!noSave && page.get('noSave') !== true) { 157 | file.contents = new Buffer(content); 158 | file.path = fileRoot + '/' + endFile; 159 | this.push(file); 160 | return next(); 161 | } else { 162 | next(); 163 | return content; 164 | } 165 | 166 | } 167 | 168 | function transform (file, enc, next) { 169 | if(file.isNull()) { 170 | this.push(file); // pass along 171 | return next(); 172 | } 173 | if(path.normalize(file.path.toString()).replace(/\\/g, '/').indexOf('/node_modules/') >= 0) { 174 | this.push(file); // pass along 175 | return next(); 176 | } 177 | if(file.isStream()) { 178 | this.emit('error', new PluginError('page', 'Streaming not supported')); 179 | return next(); 180 | } 181 | processFile.apply(this, [file, next]); 182 | } 183 | 184 | return { 185 | gulp: function() { 186 | info = getInfo(); 187 | return through2.obj(transform); 188 | }, 189 | create: createPage 190 | } 191 | 192 | } -------------------------------------------------------------------------------- /lib/GulpEnd.js: -------------------------------------------------------------------------------- 1 | var through2 = require('through2'); 2 | var gutil = require('gulp-util'); 3 | module.exports = function(cb) { 4 | function transform (file, enc, next) { 5 | return next(); 6 | } 7 | return through2.obj(transform, cb); 8 | } -------------------------------------------------------------------------------- /lib/Page.js: -------------------------------------------------------------------------------- 1 | var Entities = require('html-entities').XmlEntities; 2 | var glob = require('glob'); 3 | var path = require('path'); 4 | var colors = require('colors'); 5 | var absurd = require('absurd')(); 6 | var path = require('path'); 7 | var fs = require("fs"); 8 | var marked = require('marked'); 9 | 10 | var entities = new Entities(); 11 | 12 | var Page = function() { 13 | 14 | var api = { 15 | infoPass: false, // true if the page is creating during the info pass 16 | root: '', // file system roote path 17 | rootTechy: '', // file system roote path of the Techy 18 | theme: '', // the name of the current theme 19 | themeDir: '', // the path of the current theme 20 | info: { 21 | pages: [] 22 | }, 23 | paths: { 24 | root: '', // the path to the main route 25 | self: '', // the path of the current file to main route 26 | file: '', // the name of the markdown file 27 | url: '' // URL suitable for page linking 28 | }, 29 | name: '', 30 | date: '', 31 | title: 'Techy', 32 | layout: 'none', 33 | content: '' 34 | }; 35 | api.set = function(key, value) { 36 | this[key] = value; 37 | return this; 38 | }; 39 | api.get = function(key) { 40 | return this[key]; 41 | }; 42 | api.build = function(noLayout) { 43 | api.registerMethods(); 44 | var file = this.get('layout').toString(); 45 | if(!noLayout && file != 'none') { 46 | return this.template(file, this); 47 | } else { 48 | return this.get('content'); 49 | } 50 | }; 51 | api.registerMethods = function() { 52 | var techyFiles = this.get('techyFiles'); 53 | for(var i=0; i/g, ''); 71 | // html tags 72 | content = content.replace(/

\.(.+)<\/p>/g, '

'); 73 | content = content.replace(/

\.<\/p>/g, '

'); 74 | 75 | content = entities.decode(content); 76 | 77 | var re = /<%( )?([^%>]*)%>/g, str = content; 78 | while(match = re.exec(content)) { 79 | var code = match[0], src = match[0], result = '', allowedMethods = /(set|get)\(('|")/g; 80 | code = code.replace('

', '').replace('

', '').replace('@techy', 'techy').replace(/<% ?/g, '').replace(/ ?%>/g, ''); 81 | code = 'with(techy) { return ' + code + '; }'; 82 | if(!noMarkdown) { 83 | code = code.replace(/(\t|\r|\n| )/g, ''); 84 | } 85 | if(infoPass && code.indexOf(allowedMethods) >= 0) { 86 | console.log('skipped', code); 87 | // skipping the code execution if the method is not allowed during the info pass phase 88 | } else { 89 | try { 90 | var codeResult = (new Function('techy', code)).apply(this, [this]); 91 | result = typeof codeResult === 'string' || typeof codeResult === 'number' ? codeResult : ''; 92 | } catch(e) { 93 | if(!infoPass) { 94 | console.log('\n\n', e, '\nCode: ', code, '\n\n'); 95 | } 96 | result = src; 97 | } 98 | } 99 | str = str.replace('

' + src + '

', result || '').replace(src, result || ''); 100 | } 101 | // console.log('\n\n', page.build(str)); 102 | this.set('content', str); 103 | return this; 104 | } 105 | 106 | return api; 107 | } 108 | 109 | module.exports = Page; -------------------------------------------------------------------------------- /lib/api/linkto.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function(name) { 2 | var page, paths, result; 3 | if(typeof name == 'object') { 4 | page = name; 5 | } else { 6 | page = this.page(name); 7 | } 8 | paths = page.get('paths'); 9 | result = this.get('paths').root + paths.self + (paths.self == '' ? '' : '/') + paths.file.replace(/.md/, '.html'); 10 | return result; 11 | } -------------------------------------------------------------------------------- /lib/api/numofpages.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | var info = this.get('info'); 3 | if(info && info.pages) { 4 | return info.pages.length; 5 | } else { 6 | return ''; 7 | } 8 | } -------------------------------------------------------------------------------- /lib/api/page.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function(name) { 2 | var info = this.get('info'); 3 | if(info && info.pages) { 4 | for(var i=0; i= 0) || pageFile.match(path)) { 15 | add = true; 16 | } 17 | } else { 18 | add = true; 19 | } 20 | 21 | // filtering by draft 22 | if(add && typeof draft !== 'undefined' && draft === 'yes') { 23 | add = false; 24 | } 25 | 26 | if(add) { 27 | pages.push(page); 28 | } 29 | } 30 | 31 | // sorting 32 | if(sortby) { 33 | var strToDate = function(str) { 34 | var d = new Date(str); 35 | return isNaN(d) ? false : d; 36 | } 37 | var tmp, a, b; 38 | for(var i=0; i strToDate(b.get(sortby))) { 44 | tmp = a; 45 | pages[i] = b; 46 | pages[j] = tmp; 47 | } 48 | } else { 49 | if((a.get(sortby) > b.get(sortby)) || (typeof a.get(sortby) == 'undefined' || typeof b.get(sortby) == 'undefined')) { 50 | tmp = a; 51 | pages[i] = b; 52 | pages[j] = tmp; 53 | } 54 | } 55 | } 56 | } 57 | pages = pages.reverse(); 58 | } 59 | 60 | return pages; 61 | } -------------------------------------------------------------------------------- /lib/api/template.techy.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var absurd = require('absurd')(); 3 | module.exports = function(file, data) { 4 | file = file.indexOf('.html') > 0 || file.indexOf('.md') > 0 || file.indexOf('.markdown') > 0 ? file : file + '.html'; 5 | var process = function(template) { 6 | var ext = template.split('.').pop().toLowerCase(); 7 | if(ext == 'md' || ext == 'markdown') { 8 | data = data || {}; 9 | data.paths = this.get('paths'); 10 | if(this.parseMarkdownFile) { 11 | return this.parseMarkdownFile({ 12 | path: template 13 | }, null, true, data); 14 | } 15 | return ''; 16 | } else { 17 | template = fs.readFileSync(template).toString(); 18 | var result = ''; 19 | absurd.flush().morph('html').add(template).compile(function(err, html) { 20 | result = html; 21 | }, data); 22 | return result; 23 | } 24 | }.bind(this); 25 | var src = this.get('src'); 26 | if(fs.existsSync(this.root + '/_tpl/' + file)) { 27 | return process(this.root + '/_tpl/' + file); 28 | } else if(fs.existsSync(this.root + '/' + file)) { 29 | return process(this.root + '/' + file); 30 | } else if(src && fs.existsSync(src + '/' + file)) { 31 | return process(src + '/' + file); 32 | } else { 33 | throw new Error('There is no \'' + file + '\' in \'' + this.root + '/_tpl/\' directory.'); 34 | } 35 | } -------------------------------------------------------------------------------- /lib/helpers/extend.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | var process = function(destination, source) { 3 | for (var key in source) { 4 | if (hasOwnProperty.call(source, key)) { 5 | destination[key] = source[key]; 6 | } 7 | } 8 | return destination; 9 | }; 10 | var result = arguments[0]; 11 | for(var i=1; i 0) { 4 | funcs.shift().apply(scope || {}, [next].concat(Array.prototype.slice.call(arguments, 0))); 5 | } 6 | })(); 7 | }; -------------------------------------------------------------------------------- /lib/themes/default/_tpl/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <% this.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | <% get('content') %> 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /lib/themes/default/public/css/styles.css: -------------------------------------------------------------------------------- 1 | /* misc */ 2 | 3 | body, html { 4 | width: 100%; 5 | height: 100%; 6 | padding: 0; 7 | margin: 0; 8 | font-size: 20px; 9 | line-height: 34px; 10 | font-family: 'Average Sans', sans-serif; 11 | background: #FFF; 12 | color: #313131; 13 | } 14 | a { 15 | font-weight: bold; 16 | border-bottom: dotted 1px #c7c7c7; 17 | text-decoration: none; 18 | color: #313131; 19 | } 20 | a:hover { 21 | border-bottom: dotted 1px #999; 22 | color: #DC4141; 23 | } 24 | p { 25 | font-size: 20px; 26 | line-height: 34px; 27 | } 28 | hr { 29 | border-bottom: none; 30 | border-top: solid 4px #e6e6e6; 31 | } 32 | blockquote { 33 | border-left: solid 4px #999; 34 | padding: 0 0 0 20px; 35 | margin: 0; 36 | } 37 | blockquote p { 38 | color: #999; 39 | } 40 | table { 41 | border-spacing: 0; 42 | } 43 | table td { 44 | border-top: solid 1px #B3B3B3; 45 | border-left: solid 1px #B3B3B3; 46 | padding: 6px; 47 | word-wrap: break-word; 48 | } 49 | .left { 50 | float: left; 51 | } 52 | .right { 53 | float: right; 54 | } 55 | 56 | /* headings */ 57 | 58 | h1 { 59 | font-size: 60px; 60 | line-height: 70px; 61 | padding: 0 0 40px 0; 62 | margin: 50px 0 30px 0; 63 | } 64 | h2 { 65 | font-size: 36px; 66 | line-height: 40px; 67 | } 68 | h3 { 69 | font-size: 36px; 70 | line-height: 40px; 71 | font-weight: normal; 72 | } 73 | h4 { 74 | font-size: 30px; 75 | line-height: 34px; 76 | font-weight: normal; 77 | } 78 | h5 { 79 | font-size: 24px; 80 | line-height: 28px; 81 | font-weight: normal; 82 | } 83 | h6 { 84 | font-size: 20px; 85 | line-height: 24px; 86 | } 87 | 88 | /* scroller */ 89 | 90 | ::-webkit-scrollbar { 91 | width: 8px; 92 | } 93 | ::-webkit-scrollbar-track { 94 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 95 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 96 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 97 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 98 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 99 | border-radius: 2px; 100 | -webkit-border-radius: 2px; 101 | } 102 | ::-webkit-scrollbar-thumb { 103 | background: rgba(150,150,150,0.8); 104 | border-radius: 2px; 105 | -webkit-border-radius: 2px; 106 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 107 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 108 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 109 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 110 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 111 | } 112 | ::-webkit-scrollbar-thumb:window-inactive { 113 | background: rgba(150,150,150,0.4); 114 | } 115 | 116 | /* lists */ 117 | 118 | ul { 119 | margin: 30px 0 30px 22px; 120 | padding: 0; 121 | list-style-type: circle; 122 | } 123 | ul li { 124 | margin: 0; 125 | padding: 0; 126 | } 127 | ol { 128 | margin: 30px 0 30px 22px; 129 | padding: 0; 130 | list-style-type: circle; 131 | } 132 | ol li { 133 | margin: 0; 134 | padding: 0; 135 | } 136 | 137 | /* code */ 138 | 139 | code[class*="language-"] { 140 | font-size: 14px; 141 | line-height: 20px; 142 | } 143 | p code[class*="language-"] { 144 | font-size: 18px; 145 | border: solid 1px #D8D8D8; 146 | display: inline-block; 147 | padding: 0 10px 0 10px; 148 | } 149 | pre[class*="language-"] { 150 | font-size: 14px; 151 | line-height: 20px; 152 | } 153 | p pre[class*="language-"] { 154 | font-size: 18px; 155 | border: solid 1px #D8D8D8; 156 | display: inline-block; 157 | padding: 0 10px 0 10px; 158 | } 159 | pre { 160 | box-shadow: 0 0 2px 1px #ccc; 161 | -webkit-box-shadow: 0 0 2px 1px #ccc; 162 | -moz-box-shadow: 0 0 2px 1px #ccc; 163 | } 164 | 165 | /* grids */ 166 | 167 | .grid-2:before { 168 | content: " "; 169 | display: table; 170 | clear: both; 171 | } 172 | .grid-2:after { 173 | content: " "; 174 | display: table; 175 | clear: both; 176 | } 177 | .grid-2 .grid-column { 178 | float: left; 179 | box-sizing: border-box; 180 | -webkit-box-sizing: border-box; 181 | -moz-box-sizing: border-box; 182 | width: 50.00%; 183 | } 184 | .grid-2 .grid-column p { 185 | padding-left: 0; 186 | pd: 0; 187 | } 188 | .grid-3:before { 189 | content: " "; 190 | display: table; 191 | clear: both; 192 | } 193 | .grid-3:after { 194 | content: " "; 195 | display: table; 196 | clear: both; 197 | } 198 | .grid-3 .grid-column { 199 | float: left; 200 | box-sizing: border-box; 201 | -webkit-box-sizing: border-box; 202 | -moz-box-sizing: border-box; 203 | width: 33.33%; 204 | } 205 | .grid-3 .grid-column p { 206 | padding-left: 0; 207 | pd: 0; 208 | } 209 | .grid-4:before { 210 | content: " "; 211 | display: table; 212 | clear: both; 213 | } 214 | .grid-4:after { 215 | content: " "; 216 | display: table; 217 | clear: both; 218 | } 219 | .grid-4 .grid-column { 220 | float: left; 221 | box-sizing: border-box; 222 | -webkit-box-sizing: border-box; 223 | -moz-box-sizing: border-box; 224 | width: 25.00%; 225 | } 226 | .grid-4 .grid-column p { 227 | padding-left: 0; 228 | pd: 0; 229 | } 230 | 231 | /* main container */ 232 | 233 | .content { 234 | max-width: 650px; 235 | margin: 40px auto; 236 | } 237 | 238 | /* responsive */ 239 | 240 | @media all and (max-width: 600px) { 241 | p { 242 | font-size: 18px; 243 | line-height: 28px; 244 | } 245 | h1 { 246 | font-size: 40px; 247 | line-height: 40px; 248 | margin: 20px 0 10px 0; 249 | padding: 0 0 20px 0; 250 | } 251 | h2 { 252 | font-size: 30px; 253 | line-height: 30px; 254 | } 255 | h3 { 256 | font-size: 26px; 257 | line-height: 26px; 258 | } 259 | h4 { 260 | font-size: 22px; 261 | line-height: 22px; 262 | } 263 | h5 { 264 | font-size: 18px; 265 | line-height: 18px; 266 | } 267 | h6 { 268 | font-size: 18px; 269 | line-height: 18px; 270 | } 271 | .grid-2 .grid-column { 272 | float: none; 273 | width: 100%; 274 | } 275 | } 276 | @media all and (max-width: 670px) { 277 | .grid-3 .grid-column { 278 | float: none; 279 | width: 100%; 280 | } 281 | } 282 | @media all and (max-width: 700px) { 283 | .grid-4 .grid-column { 284 | float: none; 285 | width: 100%; 286 | } 287 | } 288 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/font-awesome-4.0.3/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /lib/themes/default/public/font-awesome-4.0.3/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /lib/themes/default/public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/img/favicon.png -------------------------------------------------------------------------------- /lib/themes/default/public/js/scripts.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/lib/themes/default/public/js/scripts.js -------------------------------------------------------------------------------- /lib/themes/default/public/prism/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js default theme for JavaScript, CSS and HTML 3 | * Based on dabblet (http://dabblet.com) 4 | * @author Lea Verou 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: black; 10 | text-shadow: 0 1px white; 11 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 12 | direction: ltr; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | } 28 | 29 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 30 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 31 | text-shadow: none; 32 | background: #b3d4fc; 33 | } 34 | 35 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 36 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 37 | text-shadow: none; 38 | background: #b3d4fc; 39 | } 40 | 41 | @media print { 42 | code[class*="language-"], 43 | pre[class*="language-"] { 44 | text-shadow: none; 45 | } 46 | } 47 | 48 | /* Code blocks */ 49 | pre[class*="language-"] { 50 | padding: 1em; 51 | margin: .5em 0; 52 | overflow: auto; 53 | } 54 | 55 | :not(pre) > code[class*="language-"], 56 | pre[class*="language-"] { 57 | background: #f5f2f0; 58 | } 59 | 60 | /* Inline code */ 61 | :not(pre) > code[class*="language-"] { 62 | padding: .1em; 63 | border-radius: .3em; 64 | } 65 | 66 | .token.comment, 67 | .token.prolog, 68 | .token.doctype, 69 | .token.cdata { 70 | color: slategray; 71 | } 72 | 73 | .token.punctuation { 74 | color: #999; 75 | } 76 | 77 | .namespace { 78 | opacity: .7; 79 | } 80 | 81 | .token.property, 82 | .token.tag, 83 | .token.boolean, 84 | .token.number, 85 | .token.constant, 86 | .token.symbol { 87 | color: #905; 88 | } 89 | 90 | .token.selector, 91 | .token.attr-name, 92 | .token.string, 93 | .token.builtin { 94 | color: #690; 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: #a67f59; 104 | background: hsla(0,0%,100%,.5); 105 | } 106 | 107 | .token.atrule, 108 | .token.attr-value, 109 | .token.keyword { 110 | color: #07a; 111 | } 112 | 113 | 114 | .token.regex, 115 | .token.important { 116 | color: #e90; 117 | } 118 | 119 | .token.important { 120 | font-weight: bold; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | -------------------------------------------------------------------------------- /lib/themes/default/public/prism/prism.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Prism: Lightweight, robust, elegant syntax highlighting 3 | * MIT license http://www.opensource.org/licenses/mit-license.php/ 4 | * @author Lea Verou http://lea.verou.me 5 | */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 6 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 7 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 8 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 9 | ; 10 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); 11 | ; 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "techy", 3 | "version": "1.2.5", 4 | "homepage": "http://krasimir.github.io/techy", 5 | "description": "Flat CMS based on Gulp and AbsurdJS", 6 | "main": "./lib/index.js", 7 | "author": { 8 | "name": "Krasimir Tsonev", 9 | "email": "info@krasimirtsonev.com", 10 | "url": "http://krasimirtsonev.com" 11 | }, 12 | "license": "MIT", 13 | "dependencies": { 14 | "absurd": "~0.3.146", 15 | "gulp": "3.6.0", 16 | "gulp-absurd": "0.0.1", 17 | "gulp-concat": "2.2.0", 18 | "gulp-jshint": "1.5.3", 19 | "gulp-uglify": "0.2.1", 20 | "through2": "0.4.1", 21 | "gulp-util": "2.2.14", 22 | "marked": "0.3.1", 23 | "minimist": "0.0.8", 24 | "html-entities": "1.0.10", 25 | "glob": "3.2.9", 26 | "glob-expand": "*", 27 | "ncp": "0.5.0", 28 | "colors": "0.6.2", 29 | "yaml-front-matter": "3.0.1" 30 | }, 31 | "devDependencies": { 32 | "expect.js": "0.3.1", 33 | "gulp-less": "1.2.3" 34 | }, 35 | "keywords": [ 36 | "flat", 37 | "cms", 38 | "gulp", 39 | "absurdjs" 40 | ], 41 | "repository": { 42 | "type": "git", 43 | "url": "https://github.com/krasimir/techy.git" 44 | }, 45 | "bin": { 46 | "techy": "./lib/index.js" 47 | }, 48 | "scripts": { 49 | "test": "mocha ./tests --reporter spec" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /tests/access-page-by-name/A/index.md: -------------------------------------------------------------------------------- 1 | # I'm a page A 2 | 3 | <% set('name', 'pageA') %> -------------------------------------------------------------------------------- /tests/access-page-by-name/B/index.md: -------------------------------------------------------------------------------- 1 | # I'm a page B 2 | 3 | <% set('name', 'pageB') %> 4 | <% set('wow', 'What\'s up! (from page B)') %> -------------------------------------------------------------------------------- /tests/access-page-by-name/expected.html: -------------------------------------------------------------------------------- 1 |

There are 3 pages.

2 |

Page A's self path is A.

3 |

Here is a message from page B: What's up! (from page B)

4 | -------------------------------------------------------------------------------- /tests/access-page-by-name/page.md: -------------------------------------------------------------------------------- 1 | There are <% numofpages() %> pages. 2 | 3 | Page A's self path is <% page('pageA').get('paths').self %>. 4 | 5 | Here is a message from page B: <% page('pageB').get('wow') %> -------------------------------------------------------------------------------- /tests/basic/_donttouch/file.txt: -------------------------------------------------------------------------------- 1 | test -------------------------------------------------------------------------------- /tests/basic/_expects/A.html: -------------------------------------------------------------------------------- 1 |

That's a simple web page

2 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, dolorem, dolore adipisci consectetur expedita numquam necessitatibus distinctio maxime architecto doloribus ipsa sed consequuntur odit vel nisi repellat cum asperiores voluptatum.

3 | -------------------------------------------------------------------------------- /tests/basic/_expects/page.html: -------------------------------------------------------------------------------- 1 |
2 |

This is a title

3 |

There are 2 pages in the site. That's AWESOME.

4 |
-------------------------------------------------------------------------------- /tests/basic/_lib/awesome.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return 'AWESOME'; 3 | } -------------------------------------------------------------------------------- /tests/basic/_tpl/layout.html: -------------------------------------------------------------------------------- 1 |
2 | <% content %> 3 |
-------------------------------------------------------------------------------- /tests/basic/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | width: 100%; 3 | } -------------------------------------------------------------------------------- /tests/basic/inner/A.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: A 3 | title: That's a simple web page 4 | --- 5 | 6 | # <% title %> 7 | 8 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, dolorem, dolore adipisci consectetur expedita numquam necessitatibus distinctio maxime architecto doloribus ipsa sed consequuntur odit vel nisi repellat cum asperiores voluptatum. -------------------------------------------------------------------------------- /tests/basic/js/scripts.js: -------------------------------------------------------------------------------- 1 | var App = {}; -------------------------------------------------------------------------------- /tests/basic/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: home 3 | layout: _tpl/layout.html 4 | --- 5 | 6 | ## This is a title 7 | 8 | There are <% numofpages() %> pages in the site. That's <% awesome() %>. -------------------------------------------------------------------------------- /tests/copy-non-underscore/_file.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/copy-non-underscore/_file.md -------------------------------------------------------------------------------- /tests/copy-non-underscore/_file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/copy-non-underscore/_file.txt -------------------------------------------------------------------------------- /tests/copy-non-underscore/_folder/file.txt: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /tests/copy-non-underscore/copythis/_butnotthis/file.txt: -------------------------------------------------------------------------------- 1 | B -------------------------------------------------------------------------------- /tests/copy-non-underscore/copythis/_copyme.md: -------------------------------------------------------------------------------- 1 | # Copy me -------------------------------------------------------------------------------- /tests/copy-non-underscore/copythis/somefile.txt: -------------------------------------------------------------------------------- 1 | blah -------------------------------------------------------------------------------- /tests/copy-non-underscore/page.md: -------------------------------------------------------------------------------- 1 | # Hello world -------------------------------------------------------------------------------- /tests/css_absurd/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | css: { 4 | preprocessor: 'absurd', 5 | index: '_absurd/styles.js' 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /tests/css_absurd/_absurd/styles.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.add({ 3 | body: { 4 | fz: '42em' 5 | } 6 | }) 7 | } -------------------------------------------------------------------------------- /tests/css_absurd/expected_styles.css: -------------------------------------------------------------------------------- 1 | body{font-size: 42em;} -------------------------------------------------------------------------------- /tests/css_css/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | css: { 4 | preprocessor: 'none', 5 | index: '_css/**/*.css' 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /tests/css_css/_css/a.css: -------------------------------------------------------------------------------- 1 | .content-site { 2 | margin: 0; 3 | } -------------------------------------------------------------------------------- /tests/css_css/_css/b.css: -------------------------------------------------------------------------------- 1 | a:hover { 2 | line-height: 20px; 3 | } -------------------------------------------------------------------------------- /tests/css_css/_css/custom/c.css: -------------------------------------------------------------------------------- 1 | p { test: 10; } -------------------------------------------------------------------------------- /tests/css_css/expected_styles.css: -------------------------------------------------------------------------------- 1 | .content-site { 2 | margin: 0; 3 | } 4 | a:hover { 5 | line-height: 20px; 6 | } 7 | p { test: 10; } -------------------------------------------------------------------------------- /tests/css_less/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | css: { 4 | preprocessor: 'less', 5 | index: '_less/styling.less' 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /tests/css_less/_less/styling.less: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | box-shadow: @style @c; 6 | } 7 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 8 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 9 | } 10 | .box { 11 | color: saturate(@base, 5%); 12 | border-color: lighten(@base, 30%); 13 | div { .box-shadow(0 0 5px, 30%) } 14 | } -------------------------------------------------------------------------------- /tests/css_less/expected_styles.css: -------------------------------------------------------------------------------- 1 | .box { 2 | color: #fe33ac; 3 | border-color: #fdcdea; 4 | } 5 | .box div { 6 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); 7 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); 8 | } 9 | -------------------------------------------------------------------------------- /tests/css_less_watch_dir/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | css: { 4 | preprocessor: 'less', 5 | index: '_less/style.less', 6 | out: '_dist/css/', 7 | watch: '_less/**/*.less' 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /tests/css_less_watch_dir/_less/include/other.less: -------------------------------------------------------------------------------- 1 | @color1: #ff00ff; -------------------------------------------------------------------------------- /tests/css_less_watch_dir/_less/other.less: -------------------------------------------------------------------------------- 1 | @color2: #00ff00; -------------------------------------------------------------------------------- /tests/css_less_watch_dir/_less/style.less: -------------------------------------------------------------------------------- 1 | @import "include/other.less"; 2 | @import "other.less"; 3 | 4 | .box { 5 | background-color: @color1; 6 | border-color: @color2; 7 | } -------------------------------------------------------------------------------- /tests/css_less_watch_dir/expected_style.css: -------------------------------------------------------------------------------- 1 | .box { 2 | background-color: #ff00ff; 3 | border-color: #00ff00; 4 | } 5 | -------------------------------------------------------------------------------- /tests/css_less_watch_dir/expected_style_changed.css: -------------------------------------------------------------------------------- 1 | .box { 2 | background-color: #000000; 3 | border-color: #ffffff; 4 | } 5 | -------------------------------------------------------------------------------- /tests/custom-layout/_my-templates/footer.html: -------------------------------------------------------------------------------- 1 |
Footer
-------------------------------------------------------------------------------- /tests/custom-layout/_my-templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <% title %> 6 | 7 | 8 | <% content %> 9 | <% template('_my-templates/footer') %> 10 | 11 | -------------------------------------------------------------------------------- /tests/custom-layout/expected.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Page with custom layout 7 | 8 | 9 | 10 |

11 |

12 |

Hello!

13 |
Footer
14 | 15 | 16 | -------------------------------------------------------------------------------- /tests/custom-layout/page.md: -------------------------------------------------------------------------------- 1 | <% set('layout', '_my-templates/layout') %> 2 | <% set('title', 'Page with custom layout') %> 3 | 4 | Hello! -------------------------------------------------------------------------------- /tests/custom-master-config/expected.html: -------------------------------------------------------------------------------- 1 |

The value of the global setting is I'm a global.

2 | -------------------------------------------------------------------------------- /tests/custom-master-config/options.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | globalSetting: 'I\'m a global' 4 | } 5 | } -------------------------------------------------------------------------------- /tests/custom-master-config/page.md: -------------------------------------------------------------------------------- 1 | The value of the global setting is `<% globalSetting %>`. -------------------------------------------------------------------------------- /tests/custom-method/_libs/myown.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return 'My Name'; 3 | } -------------------------------------------------------------------------------- /tests/custom-method/expected.html: -------------------------------------------------------------------------------- 1 |

Hi, how are you My Name!

2 | -------------------------------------------------------------------------------- /tests/custom-method/page.md: -------------------------------------------------------------------------------- 1 | # Hi, how are you <% myown() %>! -------------------------------------------------------------------------------- /tests/custom-templates/_data/custom/part.html: -------------------------------------------------------------------------------- 1 | I'm a custom template. -------------------------------------------------------------------------------- /tests/custom-templates/expected.html: -------------------------------------------------------------------------------- 1 |

Hello, how are you!

2 |

Here is a custom template:

3 | I'm a custom template. 4 | -------------------------------------------------------------------------------- /tests/custom-templates/page.md: -------------------------------------------------------------------------------- 1 | # Hello, how are you! 2 | 3 | Here is a custom template: 4 | 5 | <% template('_data/custom/part') %> -------------------------------------------------------------------------------- /tests/draft-pages/A.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A page 3 | --- 4 | 5 | # A page -------------------------------------------------------------------------------- /tests/draft-pages/B.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: B page 3 | draft: no 4 | --- 5 | 6 | # B page -------------------------------------------------------------------------------- /tests/draft-pages/C.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: C page 3 | draft: yes 4 | --- 5 | 6 | # C page -------------------------------------------------------------------------------- /tests/draft-pages/expected.html: -------------------------------------------------------------------------------- 1 |

There are 3 pages.

2 | -------------------------------------------------------------------------------- /tests/draft-pages/page.md: -------------------------------------------------------------------------------- 1 | There are <% pages().length %> pages. -------------------------------------------------------------------------------- /tests/get-pages-from-dir/D.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/D.md -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/C.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/C.md -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/awesome.article.300.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/awesome.article.300.md -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/today/A.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/today/A.html -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/today/A.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/today/A.md -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/today/B.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/today/B.html -------------------------------------------------------------------------------- /tests/get-pages-from-dir/articles/today/B.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/get-pages-from-dir/articles/today/B.md -------------------------------------------------------------------------------- /tests/get-pages-from-dir/expected.html: -------------------------------------------------------------------------------- 1 |

Num of today pages: 2 2 | Num of pages matching pattern: 1

3 | -------------------------------------------------------------------------------- /tests/get-pages-from-dir/page.md: -------------------------------------------------------------------------------- 1 | Num of today pages: <% pages('articles/today').length %> 2 | Num of pages matching pattern: <% pages(/article\.300/).length %> -------------------------------------------------------------------------------- /tests/html-usage/expected.html: -------------------------------------------------------------------------------- 1 |

Title

2 |
3 |

This is a markdown

4 |
5 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. In, ab, nobis dolorum molestias blanditiis debitis iure earum sed vel illo voluptatibus possimus placeat doloremque non totam nihil ut nisi ratione!

6 |
7 |
8 | -------------------------------------------------------------------------------- /tests/html-usage/page.md: -------------------------------------------------------------------------------- 1 | # Title 2 | 3 | .custom-class and another one 4 | 5 | ## This is a markdown 6 | 7 | > Lorem ipsum dolor sit amet, consectetur adipisicing elit. In, ab, nobis dolorum molestias blanditiis debitis iure earum sed vel illo voluptatibus possimus placeat doloremque non totam nihil ut nisi ratione! 8 | 9 | . -------------------------------------------------------------------------------- /tests/js/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | js: { 4 | src: '_src/**/*.js', 5 | dest: '_dist/public/js/file.js' 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /tests/js/_src/A.js: -------------------------------------------------------------------------------- 1 | var a = 10; -------------------------------------------------------------------------------- /tests/js/_src/B.js: -------------------------------------------------------------------------------- 1 | var b = 20; -------------------------------------------------------------------------------- /tests/js/expected.js: -------------------------------------------------------------------------------- 1 | var a = 10; 2 | var b = 20; -------------------------------------------------------------------------------- /tests/linkto/A/B/custom-page.html: -------------------------------------------------------------------------------- 1 | 2 |

Hello world

3 |

Link to D page. 4 | to home 5 |

6 | -------------------------------------------------------------------------------- /tests/linkto/A/B/custom-page.md: -------------------------------------------------------------------------------- 1 | <% set('name', 'custom-page') %> 2 | 3 | # Hello world 4 | 5 | Link to D page. 6 | to home -------------------------------------------------------------------------------- /tests/linkto/C/D/d-page.html: -------------------------------------------------------------------------------- 1 | 2 |

D page

3 |

Link to B page. 4 | to home 5 |

6 | -------------------------------------------------------------------------------- /tests/linkto/C/D/d-page.md: -------------------------------------------------------------------------------- 1 | <% set('name', 'd-page') %> 2 | 3 | # D page 4 | 5 | Link to B page. 6 | to home -------------------------------------------------------------------------------- /tests/linkto/expected.html: -------------------------------------------------------------------------------- 1 | 2 |

B page. 3 | D page. 4 | D page.

5 | -------------------------------------------------------------------------------- /tests/linkto/page.md: -------------------------------------------------------------------------------- 1 | <% set('name', 'home') %> 2 | 3 | B page. 4 | D page. 5 | D page. -------------------------------------------------------------------------------- /tests/markdown-partials/A.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: A 3 | aValue: 1 4 | noSave: true 5 | --- 6 | # I'm page A 7 | 8 | value: <% page('C').cValue %>. -------------------------------------------------------------------------------- /tests/markdown-partials/B.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: B 3 | bValue: 2 4 | noSave: true 5 | --- 6 | # I'm page B 7 | 8 | value: <% page('A').aValue %>. 9 | 10 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque, eveniet, voluptates, cum voluptatem tenetur assumenda sit repellat illo tempore amet deleniti a itaque quos corrupti quasi maiores ea distinctio reiciendis? 11 | 12 | <% get('customvar') %> 13 | 14 | <% get('inner') %> -------------------------------------------------------------------------------- /tests/markdown-partials/C.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: C 3 | cValue: 3 4 | --- 5 | # I'm page C 6 | 7 | value: <% page('B').bValue %>. 8 | 9 | <% template('A.md') %> -------------------------------------------------------------------------------- /tests/markdown-partials/expected.html: -------------------------------------------------------------------------------- 1 |

The value of B:

2 |

I'm page B

3 |

value: 1.

4 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque, eveniet, voluptates, cum voluptatem tenetur assumenda sit repellat illo tempore amet deleniti a itaque quos corrupti quasi maiores ea distinctio reiciendis?

5 | 42 6 | 52 7 | 8 | -------------------------------------------------------------------------------- /tests/markdown-partials/page.md: -------------------------------------------------------------------------------- 1 | The value of B: 2 | 3 | <% template('B.md', { customvar: 42, inner: 52}) %> -------------------------------------------------------------------------------- /tests/master-config-with-dest-folder/.gitignore: -------------------------------------------------------------------------------- 1 | public/ 2 | themes/ -------------------------------------------------------------------------------- /tests/master-config-with-dest-folder/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | src: './_in', 4 | dest: './_out' 5 | } 6 | } -------------------------------------------------------------------------------- /tests/master-config-with-dest-folder/_in/page.md: -------------------------------------------------------------------------------- 1 | # Hello world -------------------------------------------------------------------------------- /tests/master-config-with-dest-folder/_out/page.html: -------------------------------------------------------------------------------- 1 |

Hello world

2 | -------------------------------------------------------------------------------- /tests/master-config/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | globalSetting: 'I\'m a global' 4 | } 5 | } -------------------------------------------------------------------------------- /tests/master-config/expected.html: -------------------------------------------------------------------------------- 1 |

The value of the global setting is I'm a global.

2 | -------------------------------------------------------------------------------- /tests/master-config/page.md: -------------------------------------------------------------------------------- 1 | The value of the global setting is `<% globalSetting %>`. -------------------------------------------------------------------------------- /tests/md-to-html/expected.html: -------------------------------------------------------------------------------- 1 |

A title here

2 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id, nulla, alias rerum et odio dolores sequi pariatur fuga error suscipit facilis fugit non ducimus numquam voluptas porro doloremque beatae modi.

3 |

Second title

4 |
    5 |
  • bullet 1
  • 6 |
  • bullet 2
  • 7 |
  • bullet 3
  • 8 |
  • bullet 4
  • 9 |
10 |
11 |
12 |

quote

13 |
14 | -------------------------------------------------------------------------------- /tests/md-to-html/page.md: -------------------------------------------------------------------------------- 1 | # A title here 2 | 3 | Lorem ipsum dolor [sit amet](github.com), consectetur adipisicing elit. Id, nulla, alias rerum et odio dolores sequi pariatur fuga error suscipit facilis fugit non ducimus numquam voluptas porro doloremque beatae modi. 4 | 5 | ## Second title 6 | 7 | * bullet 1 8 | * bullet 2 9 | * bullet 3 10 | * bullet 4 11 | 12 | - - - 13 | 14 | > quote -------------------------------------------------------------------------------- /tests/num-of-pages/expected.html: -------------------------------------------------------------------------------- 1 |

My blog post

2 |

This blog contains 2 pages.

3 | -------------------------------------------------------------------------------- /tests/num-of-pages/page.md: -------------------------------------------------------------------------------- 1 | # My blog post 2 | 3 | This blog contains <% numofpages() == 1 ? '1 page' : numofpages() + ' pages' %>. -------------------------------------------------------------------------------- /tests/num-of-pages/posts/article99.md: -------------------------------------------------------------------------------- 1 | # That's my article -------------------------------------------------------------------------------- /tests/process-other-files/A/C/noprocess.css: -------------------------------------------------------------------------------- 1 | header { 2 | font-size: 20px; 3 | } -------------------------------------------------------------------------------- /tests/process-other-files/A/C/styles.css.expected: -------------------------------------------------------------------------------- 1 | .content { 2 | width: 240px; 3 | } -------------------------------------------------------------------------------- /tests/process-other-files/A/C/styles.css.ttt: -------------------------------------------------------------------------------- 1 | .content { 2 | width: 240px; 3 | } -------------------------------------------------------------------------------- /tests/process-other-files/A/custom.html.expected: -------------------------------------------------------------------------------- 1 | 2 | # Custom page 3 | 4 | which is not a Markdown. 5 | 6 | Lorem ipsum 7 | -------------------------------------------------------------------------------- /tests/process-other-files/A/custom.html.techy: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown 3 | text: Lorem ipsum 4 | --- 5 | # Custom page 6 | 7 | which is not a <% get('title') %>. 8 | 9 | <% get('text') %> 10 | -------------------------------------------------------------------------------- /tests/process-other-files/B/log.txt.blah: -------------------------------------------------------------------------------- 1 | This is a log file 2 | This is a log file 3 | This is a log file 4 | This is a log file -------------------------------------------------------------------------------- /tests/process-other-files/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | process: [ 4 | '**/*.techy', 5 | '**/*.blah', 6 | '**/styles.css.ttt' 7 | ] 8 | } 9 | } -------------------------------------------------------------------------------- /tests/process-other-files/rss.xml.techy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Example Channel 5 | http://example.com/ 6 | My example channel 7 | 8 | News for September the Second 9 | http://example.com/2002/09/01 10 | other things happened today 11 | 12 | 13 | News for September the First 14 | http://example.com/2002/09/02 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/set-get/.gitignore: -------------------------------------------------------------------------------- 1 | public/ 2 | themes/ -------------------------------------------------------------------------------- /tests/set-get/expected.html: -------------------------------------------------------------------------------- 1 |

2 | 3 | Hello. My title is "This is my title" and the value is 42.

4 | -------------------------------------------------------------------------------- /tests/set-get/page.md: -------------------------------------------------------------------------------- 1 | <% set('title', 'This is my title') %> 2 | <%set('num', 42) %> 3 | Hello. My title is "<% get('title')%>" and the value is <%get('num')%>. -------------------------------------------------------------------------------- /tests/should-use-src-dest/.gitignore: -------------------------------------------------------------------------------- 1 | public/ 2 | themes/ -------------------------------------------------------------------------------- /tests/should-use-src-dest/_out/A.html: -------------------------------------------------------------------------------- 1 |

Hello World

2 | -------------------------------------------------------------------------------- /tests/should-use-src-dest/_out/page.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/should-use-src-dest/_out/page.html -------------------------------------------------------------------------------- /tests/should-use-src-dest/_pages/src/A.md: -------------------------------------------------------------------------------- 1 | # Hello World -------------------------------------------------------------------------------- /tests/should-use-src-dest/_pages/src/page.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/should-use-src-dest/_pages/src/page.md -------------------------------------------------------------------------------- /tests/should-use-src-dest/expected.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/should-use-src-dest/expected.html -------------------------------------------------------------------------------- /tests/sort-by/D.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 02-01-2014 3 | value: 20 4 | --- -------------------------------------------------------------------------------- /tests/sort-by/articles/C.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/sort-by/articles/C.html -------------------------------------------------------------------------------- /tests/sort-by/articles/C.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 8-04-2014 3 | value: 5 4 | --- -------------------------------------------------------------------------------- /tests/sort-by/articles/awesome.article.300.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/sort-by/articles/awesome.article.300.html -------------------------------------------------------------------------------- /tests/sort-by/articles/awesome.article.300.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 01-07-2014 3 | value: 2 4 | --- -------------------------------------------------------------------------------- /tests/sort-by/articles/today/A.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/sort-by/articles/today/A.html -------------------------------------------------------------------------------- /tests/sort-by/articles/today/A.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 06-03-2014 3 | value: 335 4 | --- -------------------------------------------------------------------------------- /tests/sort-by/articles/today/B.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/sort-by/articles/today/B.html -------------------------------------------------------------------------------- /tests/sort-by/articles/today/B.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 08-09-2014 3 | value: 325 4 | --- -------------------------------------------------------------------------------- /tests/sort-by/expected.html: -------------------------------------------------------------------------------- 1 |

Num of today pages: 2 2 | Num of pages matching pattern: 1

3 |

Sorting:

4 |

By date

5 |
6 | date=12-01-2014 value=undefined page.md
7 | date=08-09-2014 value=325 B.md
8 | date=8-04-2014 value=5 C.md
9 | date=06-03-2014 value=335 A.md
10 | date=02-01-2014 value=20 D.md
11 | date=01-07-2014 value=2 awesome.article.300.md

By value

12 |
13 | date=06-03-2014 value=335 A.md
14 | date=08-09-2014 value=325 B.md
15 | date=02-01-2014 value=20 D.md
16 | date=8-04-2014 value=5 C.md
17 | date=01-07-2014 value=2 awesome.article.300.md
18 | date=12-01-2014 value=undefined page.md

today by value

19 |
20 | date=06-03-2014 value=335 A.md
21 | date=08-09-2014 value=325 B.md

articles by date

22 |
23 | date=08-09-2014 value=325 B.md
24 | date=8-04-2014 value=5 C.md
25 | date=06-03-2014 value=335 A.md
26 | date=01-07-2014 value=2 awesome.article.300.md

27 | -------------------------------------------------------------------------------- /tests/sort-by/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 12-01-2014 3 | --- 4 | Num of today pages: <% pages('articles/today').length %> 5 | Num of pages matching pattern: <% pages(/article\.300/).length %> 6 | 7 | Sorting: 8 | 9 | <% showsorting() %> -------------------------------------------------------------------------------- /tests/sort-by/showsorting.techy.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | var appendStr = function(pages, title) { 3 | var str = '

' + title + '

\n'; 4 | for(var i=0; iHello World\n'); 111 | done(); 112 | }, { noLogging: true, src: __dirname + '/should-use-src-dest/_pages/src', dest: __dirname + '/should-use-src-dest/_out'}); 113 | run(__dirname + "/master-config-with-dest-folder", "should put the public folder properly", function(done) { 114 | expect(fs.readFileSync(__dirname + '/master-config-with-dest-folder/_out/page.html').toString('utf8')).to.equal('

Hello world

\n'); 115 | done(); 116 | }, { noLogging: true }); 117 | run(__dirname + "/js", "should concatenates JavaScript", function(done) { 118 | compareFileContent(__dirname + "/js/expected.js", __dirname + "/js/_dist/public/js/file.js"); 119 | done(); 120 | }, { noLogging: true }); 121 | run(__dirname + "/copy-non-underscore", "should copy only non-underscore folders", function(done) { 122 | var path = __dirname + "/copy-non-underscore/"; 123 | expect(fs.existsSync(path + '_dist/copythis/somefile.txt')).to.equal(true); 124 | expect(fs.existsSync(path + '_dist/copythis/_copyme.html')).to.equal(true); 125 | expect(fs.existsSync(path + '_dist/copythis/_butnotthis')).to.equal(false); 126 | expect(fs.existsSync(path + '_dist/page.html')).to.equal(true); 127 | done(); 128 | }, { noLogging: true }); 129 | 130 | context("Watch files", function() 131 | { 132 | this.timeout(5000); // need to use some setTimeouts 133 | var lessWatchCb = function(){}; 134 | after(function() 135 | { 136 | lessWatchCb(); 137 | }); 138 | 139 | run(__dirname + "/css_less_watch_dir", "should watch LESS directory", function(done) 140 | { 141 | // first: test imports 142 | compareFileContent(__dirname + '/css_less_watch_dir/expected_style.css', __dirname + '/css_less_watch_dir/_dist/css/style.css'); 143 | // second: test watch changes 144 | setTimeout(function() 145 | { 146 | var imported1File = __dirname + '/css_less_watch_dir/_less/include/other.less', 147 | imported2File = __dirname + '/css_less_watch_dir/_less/other.less', 148 | imported1Contents = fs.readFileSync( imported1File ).toString('utf8').replace(/(\r|\n)/g, ''), 149 | imported2Contents = fs.readFileSync( imported2File ).toString('utf8').replace(/(\r|\n)/g, ''), 150 | imported1 = fs.openSync( imported1File, 'w+'), 151 | imported2 = fs.openSync( imported2File, 'w+'); 152 | 153 | // set files back to original contents; 154 | lessWatchCb = function() 155 | { 156 | fs.writeSync(imported1, imported1Contents, 0); 157 | fs.writeSync(imported2, imported2Contents, 0); 158 | }; 159 | // write new values in the included files 160 | fs.writeSync(imported1, "@color1: #000000;"); 161 | fs.writeSync(imported2, "@color2: #ffffff;"); 162 | // check new values applied to new compiled style 163 | setTimeout(function() 164 | { 165 | compareFileContent(__dirname + '/css_less_watch_dir/expected_style_changed.css', __dirname + '/css_less_watch_dir/_dist/css/style.css'); 166 | done(); 167 | }, 200); 168 | }, 100); 169 | }, { noLogging: true }, function(){ this.watchFiles(); }); 170 | }); 171 | }); -------------------------------------------------------------------------------- /tests/using-path/expected.html: -------------------------------------------------------------------------------- 1 |

The paths object:

2 |
    3 |
  • root: ./
  • 4 |
  • self:
  • 5 |
  • file: page.md
  • 6 |
7 |

The paths object:

8 |
    9 |
  • root: ./
  • 10 |
  • self:
  • 11 |
  • file: page.md
  • 12 |
13 | 14 | -------------------------------------------------------------------------------- /tests/using-path/inner/A/index.md: -------------------------------------------------------------------------------- 1 | The `paths` object: 2 | 3 | * root: `<% get('paths').root %>` 4 | * self: `<% get('paths').self %>` 5 | * file: `<% get('paths').file %>` -------------------------------------------------------------------------------- /tests/using-path/inner/index.md: -------------------------------------------------------------------------------- 1 | The `paths` object: 2 | 3 | * root: `<% get('paths').root %>` 4 | * self: `<% get('paths').self %>` 5 | * file: `<% get('paths').file %>` -------------------------------------------------------------------------------- /tests/using-path/page.md: -------------------------------------------------------------------------------- 1 | The `paths` object: 2 | 3 | * root: `<% get('paths').root %>` 4 | * self: `<% get('paths').self %>` 5 | * file: `<% get('paths').file %>` 6 | 7 | <% template('inner/index.md') %> -------------------------------------------------------------------------------- /tests/using-theme/TechyFile.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | theme: 'default' 4 | } 5 | } -------------------------------------------------------------------------------- /tests/using-theme/_tpl/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <% this.title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | <% get('content') %> 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /tests/using-theme/expected.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/expected.html -------------------------------------------------------------------------------- /tests/using-theme/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: _tpl/layout.html 3 | --- 4 | # Hello world 5 | 6 | // that's a code 7 | function test() { 8 | alert(42); 9 | } 10 | 11 | Lorem ipsum dolor sit amet, `consectetur adipisicing` elit. Delectus, aliquid, eius dicta fuga nobis sequi reprehenderit earum sed debitis maxime nemo ratione aspernatur aperiam tenetur culpa rem dolore placeat. Magnam. 12 | 13 | --- 14 | 15 | blah blah -------------------------------------------------------------------------------- /tests/using-theme/public/css/styles.css: -------------------------------------------------------------------------------- 1 | /* misc */ 2 | 3 | body, html { 4 | width: 100%; 5 | height: 100%; 6 | padding: 0; 7 | margin: 0; 8 | font-size: 20px; 9 | line-height: 34px; 10 | font-family: 'Average Sans', sans-serif; 11 | background: #FFF; 12 | color: #313131; 13 | } 14 | a { 15 | font-weight: bold; 16 | border-bottom: dotted 1px #c7c7c7; 17 | text-decoration: none; 18 | color: #313131; 19 | } 20 | a:hover { 21 | border-bottom: dotted 1px #999; 22 | color: #DC4141; 23 | } 24 | p { 25 | font-size: 20px; 26 | line-height: 34px; 27 | } 28 | hr { 29 | border-bottom: none; 30 | border-top: solid 4px #e6e6e6; 31 | } 32 | blockquote { 33 | border-left: solid 4px #999; 34 | padding: 0 0 0 20px; 35 | margin: 0; 36 | } 37 | blockquote p { 38 | color: #999; 39 | } 40 | table { 41 | border-spacing: 0; 42 | } 43 | table td { 44 | border-top: solid 1px #B3B3B3; 45 | border-left: solid 1px #B3B3B3; 46 | padding: 6px; 47 | word-wrap: break-word; 48 | } 49 | .left { 50 | float: left; 51 | } 52 | .right { 53 | float: right; 54 | } 55 | 56 | /* headings */ 57 | 58 | h1 { 59 | font-size: 60px; 60 | line-height: 70px; 61 | padding: 0 0 40px 0; 62 | margin: 50px 0 30px 0; 63 | } 64 | h2 { 65 | font-size: 36px; 66 | line-height: 40px; 67 | } 68 | h3 { 69 | font-size: 36px; 70 | line-height: 40px; 71 | font-weight: normal; 72 | } 73 | h4 { 74 | font-size: 30px; 75 | line-height: 34px; 76 | font-weight: normal; 77 | } 78 | h5 { 79 | font-size: 24px; 80 | line-height: 28px; 81 | font-weight: normal; 82 | } 83 | h6 { 84 | font-size: 20px; 85 | line-height: 24px; 86 | } 87 | 88 | /* scroller */ 89 | 90 | ::-webkit-scrollbar { 91 | width: 8px; 92 | } 93 | ::-webkit-scrollbar-track { 94 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 95 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 96 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 97 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 98 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 99 | border-radius: 2px; 100 | -webkit-border-radius: 2px; 101 | } 102 | ::-webkit-scrollbar-thumb { 103 | background: rgba(150,150,150,0.8); 104 | border-radius: 2px; 105 | -webkit-border-radius: 2px; 106 | webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 107 | -webkit-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 108 | -moz-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 109 | -ms-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 110 | -o-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 111 | } 112 | ::-webkit-scrollbar-thumb:window-inactive { 113 | background: rgba(150,150,150,0.4); 114 | } 115 | 116 | /* lists */ 117 | 118 | ul { 119 | margin: 30px 0 30px 22px; 120 | padding: 0; 121 | list-style-type: circle; 122 | } 123 | ul li { 124 | margin: 0; 125 | padding: 0; 126 | } 127 | ol { 128 | margin: 30px 0 30px 22px; 129 | padding: 0; 130 | list-style-type: circle; 131 | } 132 | ol li { 133 | margin: 0; 134 | padding: 0; 135 | } 136 | 137 | /* code */ 138 | 139 | code[class*="language-"] { 140 | font-size: 14px; 141 | line-height: 20px; 142 | } 143 | p code[class*="language-"] { 144 | font-size: 18px; 145 | border: solid 1px #D8D8D8; 146 | display: inline-block; 147 | padding: 0 10px 0 10px; 148 | } 149 | pre[class*="language-"] { 150 | font-size: 14px; 151 | line-height: 20px; 152 | } 153 | p pre[class*="language-"] { 154 | font-size: 18px; 155 | border: solid 1px #D8D8D8; 156 | display: inline-block; 157 | padding: 0 10px 0 10px; 158 | } 159 | pre { 160 | box-shadow: 0 0 2px 1px #ccc; 161 | -webkit-box-shadow: 0 0 2px 1px #ccc; 162 | -moz-box-shadow: 0 0 2px 1px #ccc; 163 | } 164 | 165 | /* grids */ 166 | 167 | .grid-2:before { 168 | content: " "; 169 | display: table; 170 | clear: both; 171 | } 172 | .grid-2:after { 173 | content: " "; 174 | display: table; 175 | clear: both; 176 | } 177 | .grid-2 .grid-column { 178 | float: left; 179 | box-sizing: border-box; 180 | -webkit-box-sizing: border-box; 181 | -moz-box-sizing: border-box; 182 | width: 50.00%; 183 | } 184 | .grid-2 .grid-column p { 185 | padding-left: 0; 186 | pd: 0; 187 | } 188 | .grid-3:before { 189 | content: " "; 190 | display: table; 191 | clear: both; 192 | } 193 | .grid-3:after { 194 | content: " "; 195 | display: table; 196 | clear: both; 197 | } 198 | .grid-3 .grid-column { 199 | float: left; 200 | box-sizing: border-box; 201 | -webkit-box-sizing: border-box; 202 | -moz-box-sizing: border-box; 203 | width: 33.33%; 204 | } 205 | .grid-3 .grid-column p { 206 | padding-left: 0; 207 | pd: 0; 208 | } 209 | .grid-4:before { 210 | content: " "; 211 | display: table; 212 | clear: both; 213 | } 214 | .grid-4:after { 215 | content: " "; 216 | display: table; 217 | clear: both; 218 | } 219 | .grid-4 .grid-column { 220 | float: left; 221 | box-sizing: border-box; 222 | -webkit-box-sizing: border-box; 223 | -moz-box-sizing: border-box; 224 | width: 25.00%; 225 | } 226 | .grid-4 .grid-column p { 227 | padding-left: 0; 228 | pd: 0; 229 | } 230 | 231 | /* main container */ 232 | 233 | .content { 234 | max-width: 650px; 235 | margin: 40px auto; 236 | } 237 | 238 | /* responsive */ 239 | 240 | @media all and (max-width: 600px) { 241 | p { 242 | font-size: 18px; 243 | line-height: 28px; 244 | } 245 | h1 { 246 | font-size: 40px; 247 | line-height: 40px; 248 | margin: 20px 0 10px 0; 249 | padding: 0 0 20px 0; 250 | } 251 | h2 { 252 | font-size: 30px; 253 | line-height: 30px; 254 | } 255 | h3 { 256 | font-size: 26px; 257 | line-height: 26px; 258 | } 259 | h4 { 260 | font-size: 22px; 261 | line-height: 22px; 262 | } 263 | h5 { 264 | font-size: 18px; 265 | line-height: 18px; 266 | } 267 | h6 { 268 | font-size: 18px; 269 | line-height: 18px; 270 | } 271 | .grid-2 .grid-column { 272 | float: none; 273 | width: 100%; 274 | } 275 | } 276 | @media all and (max-width: 670px) { 277 | .grid-3 .grid-column { 278 | float: none; 279 | width: 100%; 280 | } 281 | } 282 | @media all and (max-width: 700px) { 283 | .grid-4 .grid-column { 284 | float: none; 285 | width: 100%; 286 | } 287 | } 288 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/font-awesome-4.0.3/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/font-awesome-4.0.3/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /tests/using-theme/public/font-awesome-4.0.3/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /tests/using-theme/public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/img/favicon.png -------------------------------------------------------------------------------- /tests/using-theme/public/js/scripts.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krasimir/techy/ed1869a342f273eb01a1edeb075572387bdb7bb0/tests/using-theme/public/js/scripts.js -------------------------------------------------------------------------------- /tests/using-theme/public/prism/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js default theme for JavaScript, CSS and HTML 3 | * Based on dabblet (http://dabblet.com) 4 | * @author Lea Verou 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: black; 10 | text-shadow: 0 1px white; 11 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 12 | direction: ltr; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | } 28 | 29 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 30 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 31 | text-shadow: none; 32 | background: #b3d4fc; 33 | } 34 | 35 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 36 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 37 | text-shadow: none; 38 | background: #b3d4fc; 39 | } 40 | 41 | @media print { 42 | code[class*="language-"], 43 | pre[class*="language-"] { 44 | text-shadow: none; 45 | } 46 | } 47 | 48 | /* Code blocks */ 49 | pre[class*="language-"] { 50 | padding: 1em; 51 | margin: .5em 0; 52 | overflow: auto; 53 | } 54 | 55 | :not(pre) > code[class*="language-"], 56 | pre[class*="language-"] { 57 | background: #f5f2f0; 58 | } 59 | 60 | /* Inline code */ 61 | :not(pre) > code[class*="language-"] { 62 | padding: .1em; 63 | border-radius: .3em; 64 | } 65 | 66 | .token.comment, 67 | .token.prolog, 68 | .token.doctype, 69 | .token.cdata { 70 | color: slategray; 71 | } 72 | 73 | .token.punctuation { 74 | color: #999; 75 | } 76 | 77 | .namespace { 78 | opacity: .7; 79 | } 80 | 81 | .token.property, 82 | .token.tag, 83 | .token.boolean, 84 | .token.number, 85 | .token.constant, 86 | .token.symbol { 87 | color: #905; 88 | } 89 | 90 | .token.selector, 91 | .token.attr-name, 92 | .token.string, 93 | .token.builtin { 94 | color: #690; 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: #a67f59; 104 | background: hsla(0,0%,100%,.5); 105 | } 106 | 107 | .token.atrule, 108 | .token.attr-value, 109 | .token.keyword { 110 | color: #07a; 111 | } 112 | 113 | 114 | .token.regex, 115 | .token.important { 116 | color: #e90; 117 | } 118 | 119 | .token.important { 120 | font-weight: bold; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | -------------------------------------------------------------------------------- /tests/using-theme/public/prism/prism.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Prism: Lightweight, robust, elegant syntax highlighting 3 | * MIT license http://www.opensource.org/licenses/mit-license.php/ 4 | * @author Lea Verou http://lea.verou.me 5 | */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 6 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 7 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 8 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 9 | ; 10 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}}); 11 | ; 12 | -------------------------------------------------------------------------------- /tests/using-yaml/A/a.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: another page 3 | itworks: indeed 4 | --- 5 | 6 | # A page -------------------------------------------------------------------------------- /tests/using-yaml/expected.html: -------------------------------------------------------------------------------- 1 |

Hello world

2 |

Hello, my name is Derek Worthen. My address is some location. I love DOG. And here is a data from another page: indeed.

3 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. In, voluptatem eveniet corrupti eum vero consequatur veniam iusto facere ab amet quisquam distinctio maxime minus. Porro, aliquam illum facere obcaecati voluptatum.

4 | -------------------------------------------------------------------------------- /tests/using-yaml/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | username: Derek Worthen 3 | age: young 4 | contact: 5 | email: email@domain.com 6 | address: some location 7 | pets: 8 | - cat 9 | - dog 10 | - bat 11 | match: !!js/regexp /pattern/gim 12 | run: !!js/function function(a) { return a.toUpperCase(); } 13 | --- 14 | 15 | # Hello world 16 | 17 | Hello, my name is <% get('username') %>. My address is <% get('contact').address %>. I love <% get('run')(get('pets')[1]) %>. And here is a data from another page: <% page('another page').get('itworks') %>. 18 | 19 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. In, voluptatem eveniet corrupti eum vero consequatur veniam iusto facere ab amet quisquam distinctio maxime minus. Porro, aliquam illum facere obcaecati voluptatum. -------------------------------------------------------------------------------- /tests/with-layout/custom-layout.html: -------------------------------------------------------------------------------- 1 |
2 | <% get('content') %> 3 |
-------------------------------------------------------------------------------- /tests/with-layout/expected.html: -------------------------------------------------------------------------------- 1 |
2 |

My title

3 |
-------------------------------------------------------------------------------- /tests/with-layout/page.md: -------------------------------------------------------------------------------- 1 | <% set('layout', 'custom-layout') %> 2 | 3 | # My title --------------------------------------------------------------------------------