├── .gitignore ├── .travis.yml ├── CNAME ├── Gemfile ├── Gemfile.lock ├── README.md ├── bin └── specljs_runner.js ├── config.rb ├── css ├── sass │ ├── _helpers.sass │ ├── _static.sass │ └── style.sass └── style.css ├── epl-v10.html ├── images ├── paper.jpg └── zencircle.png ├── index.html ├── project.clj ├── script ├── build └── deploy ├── spec ├── features │ └── koans_spec.rb ├── koans │ └── meditations_spec.cljs └── spec_helper.rb ├── src └── koans │ ├── core.cljs │ ├── meditations.cljs │ ├── meditations │ ├── 01_equality.cljs │ ├── 02_lists.cljs │ ├── 03_vectors.cljs │ ├── 04_sets.cljs │ ├── 05_maps.cljs │ ├── 06_functions.cljs │ ├── 07_conditionals.cljs │ ├── 08_higher_order_functions.cljs │ ├── 09_runtime_polymorphism.cljs │ ├── 10_lazy_sequences.cljs │ ├── 11_sequence_comprehensions.cljs │ ├── 12_creating_functions.cljs │ ├── 13_recursion.cljs │ ├── 14_destructuring.cljs │ ├── 15_atoms.cljs │ ├── 15_refs.cljs │ ├── 16_datatypes.cljs │ └── 17_partition.cljs │ └── utils.cljs └── vendor ├── highlight.pack.js └── styles ├── arta.css ├── ascetic.css ├── brown_paper.css ├── brown_papersq.png ├── dark.css ├── default.css ├── docco.css ├── far.css ├── foundation.css ├── github.css ├── googlecode.css ├── idea.css ├── ir_black.css ├── magula.css ├── mono-blue.css ├── monokai.css ├── monokai_sublime.css ├── obsidian.css ├── pojoaque.css ├── pojoaque.jpg ├── railscasts.css ├── rainbow.css ├── school_book.css ├── school_book.png ├── solarized_dark.css ├── solarized_light.css ├── sunburst.css ├── tomorrow-night-blue.css ├── tomorrow-night-bright.css ├── tomorrow-night-eighties.css ├── tomorrow-night.css ├── tomorrow.css ├── vs.css ├── xcode.css └── zenburn.css /.gitignore: -------------------------------------------------------------------------------- 1 | out/* 2 | repl.out/* 3 | target/* 4 | .lein-repl-history 5 | koans.sublime* 6 | .sass-cache 7 | koans.js 8 | webrepl.js 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: clojure 2 | lein: lein2 3 | script: lein2 cljsbuild test -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | clojurescriptkoans.com -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem 'capybara' 4 | gem 'capybara-webkit' 5 | gem 'rack' 6 | gem 'rspec' 7 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | capybara (2.1.0) 5 | mime-types (>= 1.16) 6 | nokogiri (>= 1.3.3) 7 | rack (>= 1.0.0) 8 | rack-test (>= 0.5.4) 9 | xpath (~> 2.0) 10 | capybara-webkit (1.0.0) 11 | capybara (~> 2.0, >= 2.0.2) 12 | json 13 | diff-lcs (1.2.5) 14 | json (1.8.1) 15 | mime-types (2.0) 16 | mini_portile (0.5.2) 17 | nokogiri (1.6.0) 18 | mini_portile (~> 0.5.0) 19 | rack (1.5.2) 20 | rack-test (0.6.2) 21 | rack (>= 1.0) 22 | rspec (2.14.1) 23 | rspec-core (~> 2.14.0) 24 | rspec-expectations (~> 2.14.0) 25 | rspec-mocks (~> 2.14.0) 26 | rspec-core (2.14.7) 27 | rspec-expectations (2.14.4) 28 | diff-lcs (>= 1.1.3, < 2.0) 29 | rspec-mocks (2.14.4) 30 | xpath (2.0.0) 31 | nokogiri (~> 1.3) 32 | 33 | PLATFORMS 34 | ruby 35 | 36 | DEPENDENCIES 37 | capybara 38 | capybara-webkit 39 | rack 40 | rspec 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ClojureScript Koans Online 2 | ========================== 3 | http://clojurescriptkoans.com 4 | 5 | The ClojureScript Koans are a fun and easy way to get started with ClojureScript. No experience with Clojure or ClojureScript is assumed or required, and since they're run in-browser they don't require a functioning Clojure development environment. 6 | 7 | They are adapted from the [Clojure Koans](http://clojurekoans.com), with some minor changes to accommodate the differences between Clojure and ClojureScript. 8 | 9 | 10 | Development 11 | ----------- 12 | You will need [Leiningen](http://leiningen.org). 13 | 14 | If you wish to edit the project's stylesheets, you will need to have [Sass](http://sass-lang.com) and [Compass](http://compass-style.org) installed. The project contains a Compass `config.rb` file. 15 | 16 | ### Editing the Koans 17 | The koans themselves live in the `src/koans/meditations` folder. For a given set, the `koans` variable should contain a sequence of description strings and their matching S-expressions. Within the S-expressions, any instances of `:__` will be replaced by an input box. There are instances where ClojureScript's `pr-str` function will alter the displayed form of an expression (e.g. replacing quote characters with a `(quote)` expression); if this happens, you can quote the entire S-expression to have it displayed exactly as written. 18 | 19 | If you need to define new functions for a section, add them to the `fns` vector. Like the koans, a function may either be a quoted S-expression or a string, and any instances of the symbol `:__` will be replaced with an input field. If you wish to specify proper indentation, whitespace is maintained in the string form. In either case, syntax highlighting will automatically be applied. 20 | 21 | If you want to create a new category of koans, you will also need to add your category to the structure in `meditations.cljs`. 22 | 23 | 24 | ### Helper Scripts 25 | The `script` folder contains a number of helpful scripts. All are designed to be run from the root project directory. 26 | 27 | `build`: Does a clean recompile of the application code. 28 | 29 | `deploy`: If you're hosting the site on GitHub Pages, this will deploy the latest version of your code. It merges your current branch into the `gh-pages` branch, generates a static copy with compiled JS/CSS, and then pushes the `gh-pages` branch to your default remote. See the script's source for caveats. 30 | 31 | 32 | Related Projects 33 | ---------------- 34 | * [Russian translation](https://clojurescript.ru/koans/) by [Roman Liutikov](https://github.com/roman01la) 35 | 36 | 37 | Contributing 38 | ------------ 39 | Pull requests are encouraged! 40 | 41 | 42 | License 43 | ------- 44 | The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html at the root of this distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. 45 | -------------------------------------------------------------------------------- /bin/specljs_runner.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env phantomjs 2 | 3 | var fs = require("fs"); 4 | var p = require('webpage').create(); 5 | var sys = require('system'); 6 | 7 | p.onConsoleMessage = function (x) { 8 | fs.write("/dev/stdout", x, "w"); 9 | }; 10 | 11 | for (var i = 0; i < phantom.args.length; i++) { 12 | p.injectJs(phantom.args[i]); 13 | } 14 | 15 | var result = p.evaluate(function () { 16 | specljs.run.standard.armed = true; 17 | return specljs.run.standard.run_specs( 18 | cljs.core.keyword("color"), true 19 | ); 20 | }); 21 | 22 | phantom.exit(result); 23 | -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | # Require any additional compass plugins here. 2 | 3 | # Set this to the root of your project when deployed: 4 | http_path = "/" 5 | css_dir = "css" 6 | sass_dir = "css/sass" 7 | images_dir = "images" 8 | javascripts_dir = "javascripts" 9 | 10 | # You can select your preferred output style here (can be overridden via the command line): 11 | # output_style = :expanded or :nested or :compact or :compressed 12 | 13 | # To enable relative paths to assets via compass helper functions. Uncomment: 14 | # relative_assets = true 15 | 16 | # To disable debugging comments that display the original location of your selectors. Uncomment: 17 | # line_comments = false 18 | 19 | preferred_syntax = :sass 20 | -------------------------------------------------------------------------------- /css/sass/_helpers.sass: -------------------------------------------------------------------------------- 1 | @import "compass/css3/transition" 2 | 3 | @mixin code-font 4 | font: 5 | size: 24px 6 | family: Monaco, Inconsolata, Menlo, Courier 7 | 8 | @mixin header-font 9 | font: 10 | family: Optima, PT Sans, Lucida Grande, sans-serif 11 | weight: 100 12 | 13 | 14 | @mixin fadeable 15 | display: none -------------------------------------------------------------------------------- /css/sass/_static.sass: -------------------------------------------------------------------------------- 1 | .static 2 | +fadeable 3 | font-size: 20px 4 | line-height: 1.5em 5 | margin: auto 6 | text-align: justify 7 | width: 100% 8 | 9 | h1 10 | +header-font 11 | line-height: 1.5em 12 | 13 | .about 14 | clear: both 15 | 16 | .start 17 | background: lighten(#42733C, 20%) 18 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.1) 19 | color: rgba(255, 255, 255, 0.9) 20 | float: right 21 | font-size: 25px 22 | +header-font 23 | margin-top: 20px 24 | margin-bottom: 50px 25 | padding: 10px 26 | text-align: center 27 | text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1) 28 | 29 | 30 | .content 31 | margin: auto 32 | width: 650px 33 | 34 | #the-end 35 | .share 36 | margin: auto 37 | vertical-align: top 38 | width: 100px 39 | 40 | iframe 41 | width: 200px 42 | height: 200px 43 | 44 | ul 45 | margin-left: 60px 46 | margin-bottom: 40px 47 | a 48 | +header-font -------------------------------------------------------------------------------- /css/sass/style.sass: -------------------------------------------------------------------------------- 1 | @import "helpers" 2 | @import "static" 3 | 4 | $input-blue: #0088DA 5 | body 6 | background-color: #F0E8E1 7 | backgound: url("../images/paper.jpg") 8 | color: #555 9 | font: 10 | family: 'Sorts Mill Goudy', serif 11 | size: 28px 12 | overflow-x: hidden 13 | text-shadow: 0px 0px 10px rgba(255, 255, 255, 0.8) 14 | 15 | a 16 | color: darken($input-blue, 5%) 17 | text-decoration: none 18 | 19 | .category 20 | +fadeable 21 | +header-font 22 | font-weight: 200 23 | left: 40px 24 | position: absolute 25 | text: 26 | shadow: 0px 0px 10px rgba(255, 255, 255, 0.5) 27 | transform: capitalize 28 | top: 20px 29 | 30 | &.unfaded 31 | opacity: 0.7 32 | 33 | .circle 34 | bottom: 20px 35 | height: 50% 36 | opacity: 0.1 37 | position: fixed 38 | right: 20px 39 | z-index: -1 40 | 41 | .error 42 | color: #D33 43 | font-size: 18px 44 | padding-top: 10px 45 | +fadeable 46 | 47 | .functions 48 | margin: 20px 49 | padding-top: 30px 50 | text-align: center 51 | 52 | .function 53 | background-color: rgba(0, 0, 0, 0.05) 54 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.2) 55 | display: inline-block 56 | margin: 10px 57 | max-width: 860px 58 | padding: 59 | top: 10px 60 | bottom: 10px 61 | left: 18px 62 | right: 18px 63 | text-align: left 64 | vertical-align: top 65 | 66 | pre, input 67 | +code-font 68 | display: inline-block 69 | font-size: 16px 70 | 71 | input 72 | border-bottom: 1px dashed #AAA 73 | margin-right: 6px 74 | 75 | 76 | .koan 77 | +fadeable 78 | max-width: 900px 79 | margin: auto 80 | padding-top: 15% 81 | text-align: center 82 | 83 | &.has-functions 84 | padding-top: 8% 85 | 86 | .description 87 | margin: 20px 88 | width: 100% 89 | 90 | .code-box 91 | background: rgba(255, 255, 255, 0.7) 92 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.1) 93 | display: inline-block 94 | +code-font 95 | text-shadow: none 96 | +transition(background-color 1s) 97 | 98 | &.incorrect 99 | background-color: rgba(255, 0, 0, 0.2) 100 | 101 | padding: 102 | left: 20px 103 | right: 20px 104 | top: 10px 105 | bottom: 10px 106 | 107 | .shadow 108 | position: absolute 109 | visibility: hidden 110 | 111 | .parentheses-0 112 | color: #097ACC 113 | 114 | .parentheses-1 115 | color: #FF7E64 116 | 117 | .parentheses-2 118 | color: #25FFE7 119 | 120 | .parentheses-3 121 | color: #CC0D09 122 | 123 | .parentheses-4 124 | color: #4C7899 125 | 126 | .parentheses-5 127 | color: #55CC09 128 | 129 | .parentheses-6 130 | color: #99614C 131 | 132 | input 133 | background-color: transparent 134 | border: none 135 | border-bottom: 1px dashed #AAA 136 | +code-font 137 | color: darken($input-blue, 10%) 138 | text-align: center 139 | +transition(width 0.2s ease-in-out) 140 | width: 56px 141 | 142 | -webkit-appearance: none 143 | &:focus 144 | outline: none -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | /* line 1, sass/_static.sass */ 2 | .static { 3 | display: none; 4 | font-size: 20px; 5 | line-height: 1.5em; 6 | margin: auto; 7 | text-align: justify; 8 | width: 100%; 9 | } 10 | /* line 9, sass/_static.sass */ 11 | .static h1 { 12 | font-family: Optima, PT Sans, Lucida Grande, sans-serif; 13 | font-weight: 100; 14 | line-height: 1.5em; 15 | } 16 | /* line 13, sass/_static.sass */ 17 | .static .about { 18 | clear: both; 19 | } 20 | /* line 16, sass/_static.sass */ 21 | .static .start { 22 | background: #6eaf66; 23 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.1); 24 | color: rgba(255, 255, 255, 0.9); 25 | float: right; 26 | font-size: 25px; 27 | font-family: Optima, PT Sans, Lucida Grande, sans-serif; 28 | font-weight: 100; 29 | margin-top: 20px; 30 | margin-bottom: 50px; 31 | padding: 10px; 32 | text-align: center; 33 | text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); 34 | } 35 | /* line 30, sass/_static.sass */ 36 | .static .content { 37 | margin: auto; 38 | width: 650px; 39 | } 40 | 41 | /* line 35, sass/_static.sass */ 42 | #the-end .share { 43 | margin: auto; 44 | vertical-align: top; 45 | width: 100px; 46 | } 47 | /* line 40, sass/_static.sass */ 48 | #the-end .share iframe { 49 | width: 200px; 50 | height: 200px; 51 | } 52 | /* line 44, sass/_static.sass */ 53 | #the-end ul { 54 | margin-left: 60px; 55 | margin-bottom: 40px; 56 | } 57 | /* line 47, sass/_static.sass */ 58 | #the-end a { 59 | font-family: Optima, PT Sans, Lucida Grande, sans-serif; 60 | font-weight: 100; 61 | } 62 | 63 | /* line 5, sass/style.sass */ 64 | body { 65 | background-color: #F0E8E1; 66 | backgound: url("../images/paper.jpg"); 67 | color: #555; 68 | font-family: "Sorts Mill Goudy", serif; 69 | font-size: 28px; 70 | overflow-x: hidden; 71 | text-shadow: 0px 0px 10px rgba(255, 255, 255, 0.8); 72 | } 73 | 74 | /* line 15, sass/style.sass */ 75 | a { 76 | color: #0078c1; 77 | text-decoration: none; 78 | } 79 | 80 | /* line 19, sass/style.sass */ 81 | .category { 82 | display: none; 83 | font-family: Optima, PT Sans, Lucida Grande, sans-serif; 84 | font-weight: 100; 85 | font-weight: 200; 86 | left: 40px; 87 | position: absolute; 88 | text-shadow: 0px 0px 10px rgba(255, 255, 255, 0.5); 89 | text-transform: capitalize; 90 | top: 20px; 91 | } 92 | /* line 30, sass/style.sass */ 93 | .category.unfaded { 94 | opacity: 0.7; 95 | } 96 | 97 | /* line 33, sass/style.sass */ 98 | .circle { 99 | bottom: 20px; 100 | height: 50%; 101 | opacity: 0.1; 102 | position: fixed; 103 | right: 20px; 104 | z-index: -1; 105 | } 106 | 107 | /* line 41, sass/style.sass */ 108 | .error { 109 | color: #D33; 110 | font-size: 18px; 111 | padding-top: 10px; 112 | display: none; 113 | } 114 | 115 | /* line 47, sass/style.sass */ 116 | .functions { 117 | margin: 20px; 118 | padding-top: 30px; 119 | text-align: center; 120 | } 121 | /* line 52, sass/style.sass */ 122 | .functions .function { 123 | background-color: rgba(0, 0, 0, 0.05); 124 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.2); 125 | display: inline-block; 126 | margin: 10px; 127 | max-width: 860px; 128 | padding-top: 10px; 129 | padding-bottom: 10px; 130 | padding-left: 18px; 131 | padding-right: 18px; 132 | text-align: left; 133 | vertical-align: top; 134 | } 135 | /* line 66, sass/style.sass */ 136 | .functions .function pre, .functions .function input { 137 | font-size: 24px; 138 | font-family: Monaco, Inconsolata, Menlo, Courier; 139 | display: inline-block; 140 | font-size: 16px; 141 | } 142 | /* line 71, sass/style.sass */ 143 | .functions .function input { 144 | border-bottom: 1px dashed #AAA; 145 | margin-right: 6px; 146 | } 147 | 148 | /* line 76, sass/style.sass */ 149 | .koan { 150 | display: none; 151 | max-width: 900px; 152 | margin: auto; 153 | padding-top: 15%; 154 | text-align: center; 155 | } 156 | /* line 83, sass/style.sass */ 157 | .koan.has-functions { 158 | padding-top: 8%; 159 | } 160 | /* line 86, sass/style.sass */ 161 | .koan .description { 162 | margin: 20px; 163 | width: 100%; 164 | } 165 | /* line 90, sass/style.sass */ 166 | .koan .code-box { 167 | background: rgba(255, 255, 255, 0.7); 168 | box-shadow: 0px 0px 5px 0.5px rgba(0, 0, 0, 0.1); 169 | display: inline-block; 170 | font-size: 24px; 171 | font-family: Monaco, Inconsolata, Menlo, Courier; 172 | text-shadow: none; 173 | -moz-transition: background-color 1s; 174 | -o-transition: background-color 1s; 175 | -webkit-transition: background-color 1s; 176 | transition: background-color 1s; 177 | padding-left: 20px; 178 | padding-right: 20px; 179 | padding-top: 10px; 180 | padding-bottom: 10px; 181 | } 182 | /* line 98, sass/style.sass */ 183 | .koan .code-box.incorrect { 184 | background-color: rgba(255, 0, 0, 0.2); 185 | } 186 | /* line 107, sass/style.sass */ 187 | .koan .shadow { 188 | position: absolute; 189 | visibility: hidden; 190 | } 191 | /* line 111, sass/style.sass */ 192 | .koan .parentheses-0 { 193 | color: #097ACC; 194 | } 195 | /* line 114, sass/style.sass */ 196 | .koan .parentheses-1 { 197 | color: #FF7E64; 198 | } 199 | /* line 117, sass/style.sass */ 200 | .koan .parentheses-2 { 201 | color: #25FFE7; 202 | } 203 | /* line 120, sass/style.sass */ 204 | .koan .parentheses-3 { 205 | color: #CC0D09; 206 | } 207 | /* line 123, sass/style.sass */ 208 | .koan .parentheses-4 { 209 | color: #4C7899; 210 | } 211 | /* line 126, sass/style.sass */ 212 | .koan .parentheses-5 { 213 | color: #55CC09; 214 | } 215 | /* line 129, sass/style.sass */ 216 | .koan .parentheses-6 { 217 | color: #99614C; 218 | } 219 | /* line 132, sass/style.sass */ 220 | .koan input { 221 | background-color: transparent; 222 | border: none; 223 | border-bottom: 1px dashed #AAA; 224 | font-size: 24px; 225 | font-family: Monaco, Inconsolata, Menlo, Courier; 226 | color: #0068a7; 227 | text-align: center; 228 | -moz-transition: width 0.2s ease-in-out; 229 | -o-transition: width 0.2s ease-in-out; 230 | -webkit-transition: width 0.2s ease-in-out; 231 | transition: width 0.2s ease-in-out; 232 | width: 56px; 233 | -webkit-appearance: none; 234 | } 235 | /* line 143, sass/style.sass */ 236 | .koan input:focus { 237 | outline: none; 238 | } 239 | -------------------------------------------------------------------------------- /epl-v10.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Eclipse Public License - Version 1.0 9 | 26 | 27 | 28 | 29 | 30 | 31 |

Eclipse Public License - v 1.0

32 | 33 |

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE 34 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR 35 | DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS 36 | AGREEMENT.

37 | 38 |

1. DEFINITIONS

39 | 40 |

"Contribution" means:

41 | 42 |

a) in the case of the initial Contributor, the initial 43 | code and documentation distributed under this Agreement, and

44 |

b) in the case of each subsequent Contributor:

45 |

i) changes to the Program, and

46 |

ii) additions to the Program;

47 |

where such changes and/or additions to the Program 48 | originate from and are distributed by that particular Contributor. A 49 | Contribution 'originates' from a Contributor if it was added to the 50 | Program by such Contributor itself or anyone acting on such 51 | Contributor's behalf. Contributions do not include additions to the 52 | Program which: (i) are separate modules of software distributed in 53 | conjunction with the Program under their own license agreement, and (ii) 54 | are not derivative works of the Program.

55 | 56 |

"Contributor" means any person or entity that distributes 57 | the Program.

58 | 59 |

"Licensed Patents" mean patent claims licensable by a 60 | Contributor which are necessarily infringed by the use or sale of its 61 | Contribution alone or when combined with the Program.

62 | 63 |

"Program" means the Contributions distributed in accordance 64 | with this Agreement.

65 | 66 |

"Recipient" means anyone who receives the Program under 67 | this Agreement, including all Contributors.

68 | 69 |

2. GRANT OF RIGHTS

70 | 71 |

a) Subject to the terms of this Agreement, each 72 | Contributor hereby grants Recipient a non-exclusive, worldwide, 73 | royalty-free copyright license to reproduce, prepare derivative works 74 | of, publicly display, publicly perform, distribute and sublicense the 75 | Contribution of such Contributor, if any, and such derivative works, in 76 | source code and object code form.

77 | 78 |

b) Subject to the terms of this Agreement, each 79 | Contributor hereby grants Recipient a non-exclusive, worldwide, 80 | royalty-free patent license under Licensed Patents to make, use, sell, 81 | offer to sell, import and otherwise transfer the Contribution of such 82 | Contributor, if any, in source code and object code form. This patent 83 | license shall apply to the combination of the Contribution and the 84 | Program if, at the time the Contribution is added by the Contributor, 85 | such addition of the Contribution causes such combination to be covered 86 | by the Licensed Patents. The patent license shall not apply to any other 87 | combinations which include the Contribution. No hardware per se is 88 | licensed hereunder.

89 | 90 |

c) Recipient understands that although each Contributor 91 | grants the licenses to its Contributions set forth herein, no assurances 92 | are provided by any Contributor that the Program does not infringe the 93 | patent or other intellectual property rights of any other entity. Each 94 | Contributor disclaims any liability to Recipient for claims brought by 95 | any other entity based on infringement of intellectual property rights 96 | or otherwise. As a condition to exercising the rights and licenses 97 | granted hereunder, each Recipient hereby assumes sole responsibility to 98 | secure any other intellectual property rights needed, if any. For 99 | example, if a third party patent license is required to allow Recipient 100 | to distribute the Program, it is Recipient's responsibility to acquire 101 | that license before distributing the Program.

102 | 103 |

d) Each Contributor represents that to its knowledge it 104 | has sufficient copyright rights in its Contribution, if any, to grant 105 | the copyright license set forth in this Agreement.

106 | 107 |

3. REQUIREMENTS

108 | 109 |

A Contributor may choose to distribute the Program in object code 110 | form under its own license agreement, provided that:

111 | 112 |

a) it complies with the terms and conditions of this 113 | Agreement; and

114 | 115 |

b) its license agreement:

116 | 117 |

i) effectively disclaims on behalf of all Contributors 118 | all warranties and conditions, express and implied, including warranties 119 | or conditions of title and non-infringement, and implied warranties or 120 | conditions of merchantability and fitness for a particular purpose;

121 | 122 |

ii) effectively excludes on behalf of all Contributors 123 | all liability for damages, including direct, indirect, special, 124 | incidental and consequential damages, such as lost profits;

125 | 126 |

iii) states that any provisions which differ from this 127 | Agreement are offered by that Contributor alone and not by any other 128 | party; and

129 | 130 |

iv) states that source code for the Program is available 131 | from such Contributor, and informs licensees how to obtain it in a 132 | reasonable manner on or through a medium customarily used for software 133 | exchange.

134 | 135 |

When the Program is made available in source code form:

136 | 137 |

a) it must be made available under this Agreement; and

138 | 139 |

b) a copy of this Agreement must be included with each 140 | copy of the Program.

141 | 142 |

Contributors may not remove or alter any copyright notices contained 143 | within the Program.

144 | 145 |

Each Contributor must identify itself as the originator of its 146 | Contribution, if any, in a manner that reasonably allows subsequent 147 | Recipients to identify the originator of the Contribution.

148 | 149 |

4. COMMERCIAL DISTRIBUTION

150 | 151 |

Commercial distributors of software may accept certain 152 | responsibilities with respect to end users, business partners and the 153 | like. While this license is intended to facilitate the commercial use of 154 | the Program, the Contributor who includes the Program in a commercial 155 | product offering should do so in a manner which does not create 156 | potential liability for other Contributors. Therefore, if a Contributor 157 | includes the Program in a commercial product offering, such Contributor 158 | ("Commercial Contributor") hereby agrees to defend and 159 | indemnify every other Contributor ("Indemnified Contributor") 160 | against any losses, damages and costs (collectively "Losses") 161 | arising from claims, lawsuits and other legal actions brought by a third 162 | party against the Indemnified Contributor to the extent caused by the 163 | acts or omissions of such Commercial Contributor in connection with its 164 | distribution of the Program in a commercial product offering. The 165 | obligations in this section do not apply to any claims or Losses 166 | relating to any actual or alleged intellectual property infringement. In 167 | order to qualify, an Indemnified Contributor must: a) promptly notify 168 | the Commercial Contributor in writing of such claim, and b) allow the 169 | Commercial Contributor to control, and cooperate with the Commercial 170 | Contributor in, the defense and any related settlement negotiations. The 171 | Indemnified Contributor may participate in any such claim at its own 172 | expense.

173 | 174 |

For example, a Contributor might include the Program in a commercial 175 | product offering, Product X. That Contributor is then a Commercial 176 | Contributor. If that Commercial Contributor then makes performance 177 | claims, or offers warranties related to Product X, those performance 178 | claims and warranties are such Commercial Contributor's responsibility 179 | alone. Under this section, the Commercial Contributor would have to 180 | defend claims against the other Contributors related to those 181 | performance claims and warranties, and if a court requires any other 182 | Contributor to pay any damages as a result, the Commercial Contributor 183 | must pay those damages.

184 | 185 |

5. NO WARRANTY

186 | 187 |

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS 188 | PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 189 | OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, 190 | ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY 191 | OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely 192 | responsible for determining the appropriateness of using and 193 | distributing the Program and assumes all risks associated with its 194 | exercise of rights under this Agreement , including but not limited to 195 | the risks and costs of program errors, compliance with applicable laws, 196 | damage to or loss of data, programs or equipment, and unavailability or 197 | interruption of operations.

198 | 199 |

6. DISCLAIMER OF LIABILITY

200 | 201 |

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT 202 | NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, 203 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING 204 | WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF 205 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 206 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR 207 | DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED 208 | HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

209 | 210 |

7. GENERAL

211 | 212 |

If any provision of this Agreement is invalid or unenforceable under 213 | applicable law, it shall not affect the validity or enforceability of 214 | the remainder of the terms of this Agreement, and without further action 215 | by the parties hereto, such provision shall be reformed to the minimum 216 | extent necessary to make such provision valid and enforceable.

217 | 218 |

If Recipient institutes patent litigation against any entity 219 | (including a cross-claim or counterclaim in a lawsuit) alleging that the 220 | Program itself (excluding combinations of the Program with other 221 | software or hardware) infringes such Recipient's patent(s), then such 222 | Recipient's rights granted under Section 2(b) shall terminate as of the 223 | date such litigation is filed.

224 | 225 |

All Recipient's rights under this Agreement shall terminate if it 226 | fails to comply with any of the material terms or conditions of this 227 | Agreement and does not cure such failure in a reasonable period of time 228 | after becoming aware of such noncompliance. If all Recipient's rights 229 | under this Agreement terminate, Recipient agrees to cease use and 230 | distribution of the Program as soon as reasonably practicable. However, 231 | Recipient's obligations under this Agreement and any licenses granted by 232 | Recipient relating to the Program shall continue and survive.

233 | 234 |

Everyone is permitted to copy and distribute copies of this 235 | Agreement, but in order to avoid inconsistency the Agreement is 236 | copyrighted and may only be modified in the following manner. The 237 | Agreement Steward reserves the right to publish new versions (including 238 | revisions) of this Agreement from time to time. No one other than the 239 | Agreement Steward has the right to modify this Agreement. The Eclipse 240 | Foundation is the initial Agreement Steward. The Eclipse Foundation may 241 | assign the responsibility to serve as the Agreement Steward to a 242 | suitable separate entity. Each new version of the Agreement will be 243 | given a distinguishing version number. The Program (including 244 | Contributions) may always be distributed subject to the version of the 245 | Agreement under which it was received. In addition, after a new version 246 | of the Agreement is published, Contributor may elect to distribute the 247 | Program (including its Contributions) under the new version. Except as 248 | expressly stated in Sections 2(a) and 2(b) above, Recipient receives no 249 | rights or licenses to the intellectual property of any Contributor under 250 | this Agreement, whether expressly, by implication, estoppel or 251 | otherwise. All rights in the Program not expressly granted under this 252 | Agreement are reserved.

253 | 254 |

This Agreement is governed by the laws of the State of New York and 255 | the intellectual property laws of the United States of America. No party 256 | to this Agreement will bring a legal action under this Agreement more 257 | than one year after the cause of action arose. Each party waives its 258 | rights to a jury trial in any resulting litigation.

259 | 260 | 261 | 262 | -------------------------------------------------------------------------------- /images/paper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazerwalker/clojurescript-koans/c4713e3ccafad2229c5eae038d8bbf433d0d026e/images/paper.jpg -------------------------------------------------------------------------------- /images/zencircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazerwalker/clojurescript-koans/c4713e3ccafad2229c5eae038d8bbf433d0d026e/images/zencircle.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ClojureScript Koans 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 |
17 |
18 |

ClojureScript Koans

19 | 20 |

The ClojureScript koans walk you along the path of enlightenment to learning ClojureScript. You will explore the mysteries of the ClojureScript language through a series of interactive exercises in your web browser.

21 | 22 |

You don't need any experience with Clojure or ClojureScript. The koans will expose you to the fundamentals of ClojureScript, from basic concepts and syntax through more advanced techniques.

23 | 24 |

If you become vexed, do not be afraid to seek help. You may find it particularly useful to keep a ClojureScript REPL handy as you proceed.

25 | 26 | 29 | 30 | Let us begin  › 31 | 32 |

The ClojureScript Koans were built by Em Lazer-Walker, and are based on the Clojure Koans. The source code is available on GitHub.

33 |
34 |
35 | 36 | 57 | 58 | 59 |
60 | 67 | 68 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject koans "0.1.0-SNAPSHOT" 2 | :description "FIXME: write this!" 3 | :url "http://example.com/FIXME" 4 | 5 | :profiles {:dev 6 | {:dependencies [[specljs "2.9.1"]]}} 7 | 8 | :dependencies [[org.clojure/clojure "1.7.0"] 9 | [org.clojure/clojurescript "1.7.228"] 10 | [prismatic/dommy "0.1.2"] 11 | [jayq "2.5.4"]] 12 | 13 | :plugins [[lein-cljsbuild "1.1.2"] 14 | [specljs "2.9.1"]] 15 | 16 | :source-paths ["src"] 17 | :test-paths ["spec"] 18 | 19 | :cljsbuild ~(let [run-specs ["phantomjs" "bin/specljs_runner.js" "out/koans_spec.js"]] 20 | { :builds { 21 | :prod { 22 | :source-paths ["src"] 23 | :compiler { 24 | :main 'koans.core 25 | :output-to "koans.js" 26 | :output-dir "out" 27 | :optimizations :none 28 | :source-map true}}} 29 | :test-commands {"test" run-specs}})) 30 | -------------------------------------------------------------------------------- /script/build: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm koans.js 4 | rm -r out/ 5 | lein cljsbuild once 6 | -------------------------------------------------------------------------------- /script/deploy: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ### WARNING: This script makes some very dangerous assumptions: 4 | # 1. merging master into gh-pages will succeed without conflict 5 | # (it'll try to commit and push despite the dirty state) 6 | # 2. You have no files that are unversioned and not in your .gitignore 7 | # (they'll get added on gh-pages as part of the merge commit) 8 | ### 9 | 10 | git checkout gh-pages 11 | git merge master --no-edit 12 | 13 | script/build && git add -A && git commit --amend -CHEAD && git push origin gh-pages 14 | 15 | git checkout - -------------------------------------------------------------------------------- /spec/features/koans_spec.rb: -------------------------------------------------------------------------------- 1 | require_relative "../spec_helper.rb" 2 | 3 | describe "koans", js: true do 4 | before do 5 | visit '/index.html' 6 | end 7 | 8 | it "should load the first koan on pageload" do 9 | page.should have_content "We shall contemplate truth by testing reality, via equality" 10 | page.should have_selector "input.user-input" 11 | end 12 | 13 | describe "handling user input" do 14 | context "when the right answer has been entered" do 15 | it "should load a new koan" do 16 | fill_in "code", :with => "true\r" 17 | 18 | page.should have_content "To understand reality, we must compare our expectations against reality" 19 | page.should_not have_content "We shall contemplate truth by testing reality, via equality" 20 | end 21 | end 22 | 23 | context "when the wrong answer has been entered" do 24 | before do 25 | fill_in "code", :with => "false\r" 26 | end 27 | 28 | it "should do nothing" do 29 | page.should have_content "We shall contemplate truth by testing reality, via equality" 30 | end 31 | 32 | it "should show an error message" do 33 | page.should have_content "You have not yet attained enlightenment" 34 | end 35 | 36 | it "should make the input angry" do 37 | page.should have_selector ".code.incorrect" 38 | end 39 | end 40 | end 41 | end -------------------------------------------------------------------------------- /spec/koans/meditations_spec.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations-spec 2 | (:require-macros [specljs.core :refer [describe context it should should-not 3 | should= should-not-be-same]]) 4 | (:require [specljs.core] 5 | [koans.meditations :as meditations])) 6 | 7 | (describe "next-koan-index" 8 | (context "when there are remaining items in the category" 9 | (it "should return the next index" 10 | (def original-koan-index (meditations/KoanIndex. "equality" 0)) 11 | (def expected-koan-index (meditations/KoanIndex. "equality" 1)) 12 | (should= expected-koan-index (meditations/next-koan-index original-koan-index)))) 13 | 14 | (context "when the category is completed") 15 | (it "should return the first koan in the next category")) 16 | 17 | #_(describe "nth-koan" 18 | (it "should return a valid Koan object" 19 | (def koan (meditations/nth-koan 0)) 20 | (should (string? (:description koan))) 21 | (should (string? (:before koan))) 22 | (should (string? (:after koan)))) 23 | 24 | (it "should return different koans for different indices" 25 | (def koan-0 (meditations/nth-koan 0)) 26 | (def koan-1 (meditations/nth-koan 1)) 27 | (should-not-be-same koan-0 koan-1))) -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require 'rack' 2 | require 'capybara' 3 | require 'capybara-webkit' 4 | require 'capybara/dsl' 5 | require 'capybara/session' 6 | require 'capybara/rspec' 7 | 8 | include Capybara::DSL 9 | 10 | Capybara.app = Rack::File.new File.join(File.dirname(__FILE__), "..") 11 | 12 | Capybara.default_driver = :webkit 13 | Capybara.javascript_driver = :webkit 14 | -------------------------------------------------------------------------------- /src/koans/core.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.core 2 | (:use [jayq.core :only [$]] 3 | [jayq.util :only [log wait]]) 4 | (:require 5 | [cljs.js :as cljs] 6 | [cljs.tools.reader :refer [read-string]] 7 | [clojure.set] 8 | [clojure.string] 9 | [koans.meditations :as meditations] 10 | [jayq.core :as $] 11 | [dommy.core :as dommy]) 12 | (:use-macros 13 | [dommy.macros :only [deftemplate]])) 14 | 15 | (defonce transitioning? (volatile! false)) 16 | 17 | (defn hash-objects [] (clojure.string/split (.-hash js/location) "/" )) 18 | 19 | (defn current-koan-index [] (meditations/KoanIndex. 20 | (subs (first (hash-objects)) 1) 21 | (dec (last (hash-objects))))) 22 | 23 | (defn update-location-hash [] 24 | (let [koan (meditations/next-koan-index (current-koan-index))] 25 | (set! (.-hash js/location) (str (:category koan) "/" (inc (:index koan)))))) 26 | 27 | (def fadeout-time 600) 28 | (def char-width 14) 29 | (def enter-key 13) 30 | (def parentheses-classes-count 7) 31 | 32 | (defn parentheses-class-name [index] 33 | (str "parentheses-" (mod index parentheses-classes-count))) 34 | 35 | (defn input-with-code-block [parts] 36 | (for [part parts] 37 | (cond 38 | (= part :input) 39 | [:span {:class "code"} 40 | [:span {:class "shadow"}] 41 | [:input {:name "code" :autocorrect "off" :autocapitalize "off"}]] 42 | (vector? part) 43 | [:span {:class (str "text " (parentheses-class-name (second part)))} 44 | (first part)] 45 | :else 46 | [:span {:class "text"} 47 | part]))) 48 | 49 | (deftemplate input-with-code [koan] 50 | [:div {:class (str "koan koan-" (:index (current-koan-index)))} 51 | [:div {:class "description"} (:description koan)] 52 | [:div {:class "code-box"} 53 | (input-with-code-block (:code-parts koan))] 54 | (if-not (nil? (:fn-strings koan)) 55 | [:div {:class "functions"} 56 | (for [function (:fn-strings koan)] 57 | [:div {:class "function"} 58 | [:pre 59 | (input-with-code-block function)]])])]) 60 | 61 | (deftemplate error-message [] 62 | [:div {:class "error"} "You have not yet attained enlightenment."]) 63 | 64 | (defn input-with-element-content [el] 65 | (->> ($/children ($ el)) 66 | (map #(let [$el ($ %)] 67 | (cond ($/has-class $el "text") ($/text $el) 68 | ($/has-class $el "code") ($/val ($ "input" $el))))) 69 | (clojure.string/join ""))) 70 | 71 | (defn valid-input? [el] 72 | ;; ensure input string contains at least one valid Clojure form 73 | (let [input ($/val ($ el))] 74 | (or (some? (try (read-string input) (catch :default _ nil))) 75 | (= (subs input 0 3) "nil")))) 76 | 77 | (defn input-string [] 78 | (if (not-every? valid-input? ($ ".code-box input")) 79 | "" 80 | (->> (concat ($ ".function pre") 81 | ($ ".code-box")) 82 | (map input-with-element-content) 83 | (clojure.string/join " ")))) 84 | 85 | (defn load-next-koan [] 86 | (update-location-hash)) 87 | 88 | (defn remove-active-koan [] 89 | (let [$el ($ :.koan)] 90 | ($/fade-out $el 91 | #($/remove $el)))) 92 | 93 | (defn remove-static-pages [] 94 | ($/fade-out ($ :.static))) 95 | 96 | (defn category-name [koan-index] 97 | (let [category (:category koan-index)] 98 | (clojure.string/replace category "-" " "))) 99 | 100 | (defn render-koan [koan] 101 | (remove-active-koan) 102 | (remove-static-pages) 103 | (let [$elem ($ (input-with-code koan)) 104 | $category ($ :.category) 105 | current-category (category-name (current-koan-index))] 106 | (when-not (empty? (:fn-strings koan)) 107 | ($/add-class $elem "has-functions")) 108 | (when (not (= ($/text $category) current-category)) 109 | ($/fade-out $category)) 110 | (wait fadeout-time (fn [] 111 | ($/text $category current-category) 112 | ($/prepend ($ :body) $elem) 113 | ($/fade-in $elem) 114 | ($/fade-in $category) 115 | (.focus (first ($/find $elem :input))) 116 | (vreset! transitioning? false))))) 117 | 118 | (defn render-static-page [selector] 119 | (remove-active-koan) 120 | (let [$el ($ selector) 121 | $other ($ (first (clojure.set/difference #{"#welcome" "#the-end"} #{selector})))] 122 | ($/fade-out $other) 123 | (wait fadeout-time (fn [] 124 | ($/fade-out ($ :.category)) 125 | ($/fade-in $el) 126 | (vreset! transitioning? false))))) 127 | 128 | (defn render-current-koan [] 129 | (cond 130 | (clojure.string/blank? (.-hash js/location)) 131 | (render-static-page "#welcome") 132 | (= (:category (current-koan-index)) "complete") 133 | (render-static-page "#the-end") 134 | (meditations/koan-exists? (current-koan-index)) 135 | (let [current-koan (meditations/koan-for-index (current-koan-index))] 136 | (render-koan current-koan)) 137 | :else 138 | (update-location-hash))) 139 | 140 | (defn resize-input [input] 141 | (let [$input ($ input) 142 | remove-spaces (fn [text] (clojure.string/replace text " " "_")) 143 | $parent ($/parent $input) 144 | $shadow ($/find $parent :.shadow)] 145 | ($/text $shadow (remove-spaces ($/val $input))) 146 | (let [shadow-width ($/width $shadow) 147 | input-width ($/width $input)] 148 | (cond 149 | (>= shadow-width input-width) 150 | ($/width $input (+ shadow-width (* 4 char-width))) 151 | (>= (- input-width (* 4 char-width)) shadow-width) 152 | ($/width $input (+ shadow-width (* 4 char-width))))))) 153 | 154 | (defn show-error-message [] 155 | (let [$code-box ($ :.code-box)] 156 | (if ($/has-class $code-box "incorrect") 157 | (let [$error ($ :.error)] 158 | ($/remove-class $code-box "incorrect") 159 | ($/fade-out $error) 160 | (wait 300 #( 161 | ($/add-class $code-box "incorrect") 162 | ($/fade-in $error) 163 | (vreset! transitioning? false)))) 164 | (let [$error ($ (error-message))] 165 | ($/add-class $code-box "incorrect") 166 | ($/after ($ :.code-box) $error) 167 | ($/fade-in $error) 168 | (vreset! transitioning? false))))) 169 | 170 | (defonce compiler-state 171 | (cljs/empty-state)) 172 | 173 | (defn evaluate-koan [] 174 | (when (not @transitioning?) 175 | (let [input (input-string)] 176 | (vreset! transitioning? true) 177 | (log "Evaluating " input) 178 | (cljs/eval-str compiler-state input nil 179 | {:eval cljs/js-eval} 180 | (fn [result] 181 | (log (clj->js result)) 182 | (if (or (:error result) (not= (:value result) true)) 183 | (show-error-message) 184 | (load-next-koan))))))) 185 | 186 | (defn handle-document-ready [] 187 | (let [$doc ($ js/document)] 188 | ($/on $doc :click :.text #(.focus (first ($ :input)))) 189 | ($/on $doc :keypress :input #(when (= (.-which %) enter-key) (evaluate-koan))) 190 | ($/on $doc :input :input #(resize-input (.-target %)))) 191 | (render-current-koan)) 192 | 193 | (defn handle-hashchange [] 194 | (render-current-koan) 195 | (js/ga "pageview" (subs (.-hash js/location) 1))) 196 | 197 | (defn init [] 198 | ($/document-ready handle-document-ready) 199 | (set! (.-onhashchange js/window) handle-hashchange) 200 | ;; initialize the cljs.user namespace so that def will actually work 201 | (cljs/eval compiler-state '(ns cljs.user) {:eval cljs/js-eval} identity)) 202 | 203 | (init) 204 | -------------------------------------------------------------------------------- /src/koans/meditations.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations 2 | (:require 3 | [clojure.string] 4 | [koans.utils :as utils] 5 | [koans.meditations.equality :as equality] 6 | [koans.meditations.lists :as lists] 7 | [koans.meditations.vectors :as vectors] 8 | [koans.meditations.sets :as sets] 9 | [koans.meditations.maps :as maps] 10 | [koans.meditations.functions :as functions] 11 | [koans.meditations.conditionals :as conditionals] 12 | [koans.meditations.higher-order-functions :as higher-order-functions] 13 | [koans.meditations.runtime-polymorphism :as runtime-polymorphism] 14 | [koans.meditations.lazy-sequences :as lazy-sequences] 15 | [koans.meditations.sequence-comprehensions :as sequence-comprehensions] 16 | [koans.meditations.creating-functions :as creating-functions] 17 | ;[koans.meditations.recursion :as recursion] 18 | [koans.meditations.destructuring :as destructuring] 19 | [koans.meditations.atoms :as atoms] 20 | [koans.meditations.datatypes :as datatypes] 21 | [koans.meditations.partition :as partition])) 22 | 23 | (defrecord Koan [description code-parts fn-strings]) 24 | (defrecord KoanIndex [category index]) 25 | (defrecord Category [name koans fns]) 26 | 27 | (def categories [ 28 | (Category. "equality" equality/koans) 29 | (Category. "lists" lists/koans) 30 | (Category. "vectors" vectors/koans) 31 | (Category. "sets" sets/koans) 32 | (Category. "maps" maps/koans) 33 | (Category. "functions" functions/koans functions/fns) 34 | (Category. "conditionals" conditionals/koans conditionals/fns) 35 | (Category. "higher-order-functions" higher-order-functions/koans) 36 | (Category. "runtime-polymorphism" runtime-polymorphism/koans runtime-polymorphism/fns) 37 | (Category. "lazy-sequences" lazy-sequences/koans) 38 | (Category. "sequence-comprehensions" sequence-comprehensions/koans) 39 | (Category. "creating-functions" creating-functions/koans creating-functions/fns) 40 | (Category. "destructuring" destructuring/koans destructuring/fns) 41 | (Category. "atoms" atoms/koans atoms/fns) 42 | ;(Category. "datatypes" datatypes/koans datatypes/fns) 43 | (Category. "partition" partition/koans) 44 | (Category. "complete" '(:the :end)) 45 | ]) 46 | 47 | (defn category-from-koan-index [koan-index] 48 | (first (filter #(= (:name %) (:category koan-index)) categories))) 49 | 50 | (defn koan-exists? [koan-index] 51 | (< (:index koan-index) (count (partition 2 (:koans (category-from-koan-index koan-index)))))) 52 | 53 | (defn next-category [koan-index] 54 | (let [index (inc (utils/index-of (category-from-koan-index koan-index) categories))] 55 | (:name (nth categories index)))) 56 | 57 | (defn expr-to-string [expr] 58 | (if (string? expr) 59 | expr 60 | (clojure.string/replace (pr-str expr) #"\(quote (.*?)\)" #(str "'" (%1 1))))) 61 | 62 | (defn next-koan-index [koan] 63 | (let [next-in-category (KoanIndex. (:category koan) (inc (:index koan)))] 64 | (cond 65 | (koan-exists? next-in-category) 66 | next-in-category 67 | (nil? (category-from-koan-index koan)) 68 | (KoanIndex. "equality" 0) 69 | (js/isNaN (:index next-in-category)) 70 | (KoanIndex. (:category koan) 0) 71 | :else 72 | (KoanIndex. (next-category koan) 0)))) 73 | 74 | (defn expr-to-array [expr] 75 | (->> (clojure.string/replace (expr-to-string expr) #":__" "$") 76 | (reduce (fn [{:keys [index result change]} c] 77 | (condp = c 78 | "(" {:index (inc index) 79 | :change true 80 | :result (conj result [c index])} 81 | ")" {:index (dec index) 82 | :change true 83 | :result (conj result [c (dec index)])} 84 | "$" {:index index 85 | :change true 86 | :result (conj result :input)} 87 | {:index index 88 | :result (if change 89 | (conj result c) 90 | (update result (dec (count result)) #(str % c))) 91 | :change false})) 92 | {:index 0 93 | :change false 94 | :result []}) 95 | :result)) 96 | 97 | (defn koan-for-index [koan-index] 98 | (let [category (category-from-koan-index koan-index) 99 | category-list (partition 2 (:koans category)) 100 | item (try 101 | (nth category-list (:index koan-index)) 102 | (catch js/Object _ (first category-list))) 103 | description (first item) 104 | code-parts (expr-to-array (last item)) 105 | fn-strings (map expr-to-array (:fns category))] 106 | (Koan. description code-parts fn-strings))) 107 | -------------------------------------------------------------------------------- /src/koans/meditations/01_equality.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.equality) 2 | 3 | (def koans '( 4 | "We shall contemplate truth by testing reality, via equality" 5 | (= :__ true) 6 | 7 | "To understand reality, we must compare our expectations against reality" 8 | (= :__ (+ 1 1)) 9 | 10 | "You can test equality of many things" 11 | (= (+ 3 4) 7 (+ 2 :__)) 12 | 13 | "But you may not string yourself along" 14 | (= :__ (= 2 "2")) 15 | 16 | "Something is not equal to nothing" 17 | (= :__ (not (= 1 nil))) 18 | 19 | "Strings, and keywords, and symbols: oh my!" 20 | (= :__ (= "foo" :foo 'foo)) 21 | 22 | "Make a keyword with your keyboard" 23 | (= :foo (keyword :__)) 24 | 25 | "Symbolism is all around us" 26 | (= 'foo (symbol :__)) 27 | 28 | "When things cannot be equal, they must be different" 29 | (not= :fill-in-the-blank :__) 30 | )) -------------------------------------------------------------------------------- /src/koans/meditations/02_lists.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.lists) 2 | 3 | (def koans '( 4 | "Lists can be expressed by function or a quoted form" 5 | (= '(:__) (list 1 2 3 4 5)) 6 | 7 | "They are Clojure seqs (sequences), so they allow access to the first" 8 | (= :__ (first '(1 2 3 4 5))) 9 | ; 10 | "As well as the rest" 11 | (= :__ (rest '(1 2 3 4 5))) 12 | 13 | "Count your blessings" 14 | (= :__ (count '(dracula dooku chocula))) 15 | 16 | "Before they are gone" 17 | (= :__ (count '())) 18 | 19 | "The rest, when nothing is left, is empty" 20 | (= :__ (rest '(100))) 21 | 22 | "Construction by adding an element to the front is easy" 23 | (= :__ (cons :a '(:b :c :d :e))) 24 | 25 | "Conjoining an element to a list is strikingly similar" 26 | (= :__ (conj '(:b :c :d :e) :a)) 27 | 28 | "You can use a list like a stack to get the first element" 29 | (= :__ (peek '(:a :b :c :d :e))) 30 | 31 | "Or the others" 32 | (= :__ (pop '(:a :b :c :d :e))) 33 | 34 | ;; --- 35 | ;"But watch out if you try to pop nothing" 36 | ;(= :__ (try 37 | ; (pop '()) 38 | ; (catch IllegalStateException e 39 | ; "No dice!"))) 40 | 41 | ;"The rest of nothing isn't so strict" 42 | ;(= :__ (try 43 | ; (rest '()) 44 | ; (catch IllegalStateException e 45 | ; "No dice!"))) 46 | ;)) 47 | )) -------------------------------------------------------------------------------- /src/koans/meditations/03_vectors.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.vectors) 2 | 3 | (def koans '( 4 | "You can use vectors in clojure as array-like structures" 5 | (= :__ (count [42])) 6 | 7 | "You can create a vector from a list" 8 | (= :__ (vec '(1))) 9 | 10 | "Or from some elements" 11 | (= :__ (vector nil nil)) 12 | 13 | "But you can populate it with any number of elements at once" 14 | (= [1 :__] (vec '(1 2))) 15 | 16 | "Conjoining to a vector is different than to a list" 17 | (= :__ (conj [111 222] 333)) 18 | 19 | "You can get the first element of a vector like so" 20 | (= :__ (first [:peanut :butter :and :jelly])) 21 | 22 | "And the last in a similar fashion" 23 | (= :__ (last [:peanut :butter :and :jelly])) 24 | 25 | "Or any index if you wish" 26 | (= :__ (nth [:peanut :butter :and :jelly] 3)) 27 | 28 | "You can also slice a vector" 29 | (= :__ (subvec [:peanut :butter :and :jelly] 1 3)) 30 | 31 | "Equality with collections is in terms of values" 32 | (= (list 1 2 3) (vector 1 2 :__)) 33 | )) -------------------------------------------------------------------------------- /src/koans/meditations/04_sets.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.sets) 2 | 3 | (def koans '( 4 | "You can create a set by converting another collection" 5 | (= #{3} (set :__)) 6 | 7 | "Counting them is like counting other collections" 8 | (= :__ (count #{1 2 3})) 9 | 10 | "Remember that a set is a *mathematical* set" 11 | (= :__ (set '(1 1 2 2 3 3 4 4 5 5))) 12 | 13 | #_( 14 | "You can ask clojure for the union of two sets" 15 | (= :__ (clojoure.set/union #{1 2 3 4} #{2 3 5})) 16 | 17 | "And also the intersection" 18 | (= :__ (clojure.set/intersection #{1 2 3 4} #{2 3 5})) 19 | 20 | "But don't forget about the difference" 21 | (= :__ (clojure.set/difference #{1 2 3 4 5} #{2 3 5})) 22 | ) 23 | )) -------------------------------------------------------------------------------- /src/koans/meditations/05_maps.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.maps) 2 | 3 | (def koans '( 4 | "Don't get lost when creating a map" 5 | (= {:a 1 :b 2} (hash-map :a 1 :__)) 6 | 7 | "A value must be supplied for each key" 8 | (= {:a 1} (hash-map :a :__)) 9 | 10 | "The size is the number of entries" 11 | (= :__ (count {:a 1 :b 2})) 12 | 13 | "You can look up the value for a given key" 14 | (= :__ (get {:a 1 :b 2} :b)) 15 | 16 | "Maps can be used as functions to do lookups" 17 | (= :__ ({:a 1 :b 2} :a)) 18 | 19 | "And so can keywords" 20 | (= :__ (:a {:a 1 :b 2})) 21 | 22 | "But map keys need not be keywords" 23 | (= :__ ({2006 "Torino" 2010 "Vancouver" 2014 "Sochi"} 2010)) 24 | 25 | "You may not be able to find an entry for a key" 26 | (= :__ (get {:a 1 :b 2} :c)) 27 | 28 | "But you can provide your own default" 29 | (= :__ (get {:a 1 :b 2} :c :key-not-found)) 30 | 31 | "You can find out if a key is present" 32 | (= :__ (contains? {:a nil :b nil} :b)) 33 | 34 | "Or if it is missing" 35 | (= :__ (contains? {:a nil :b nil} :c)) 36 | 37 | "Maps are immutable, but you can create a new and improved version" 38 | (= {1 "January" 2 :__} (assoc {1 "January" } 2 "February")) 39 | 40 | "You can also create a new version with an entry removed" 41 | (= :__ (dissoc {1 "January" 2 "February"} 2)) 42 | 43 | "Often you will need to get the keys, but the order is undependable" 44 | (= (list :__ ) 45 | (sort (keys {2010 "Vancouver" 2014 "Sochi" 2006 "Torino"}))) 46 | 47 | "You can get the values in a similar way" 48 | (= (list :__) 49 | (sort (vals {2006 "Torino" 2010 "Vancouver" 2014 "Sochi"}))) 50 | )) -------------------------------------------------------------------------------- /src/koans/meditations/06_functions.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.functions) 2 | 3 | (def koans '( 4 | "Calling a function is like giving it a hug with parentheses" 5 | (= :__ (square 9)) 6 | 7 | "Functions are usually defined before they are used" 8 | (= :__ (multiply-by-ten 2)) 9 | 10 | "But they can also be defined inline" 11 | (= :__ ((fn [n] (* 5 n)) 2)) 12 | 13 | "Or using an even shorter syntax" 14 | "(= :__ (#(* 15 %) 4))" 15 | 16 | "Even anonymous functions may take multiple arguments" 17 | "(= :__ (#(+ %1 %2 %3) 4 5 6))" 18 | 19 | "Arguments can also be skipped" 20 | "(= :__ (#(* 15 %2) 1 2))" 21 | 22 | "One function can beget another" 23 | (= 9 (((fn [] :__)) 4 5)) 24 | 25 | "Functions can also take other functions as input" 26 | (= 20 ((fn [f] (f 4 5)) 27 | :__)) 28 | 29 | "Higher-order functions take function arguments" 30 | (= 25 (:__ 31 | (fn [n] (* n n)))) 32 | 33 | "But they are often better written using the names of functions" 34 | (= 25 (:__ square)) 35 | )) 36 | 37 | (def fns [ 38 | "(defn multiply-by-ten [n] 39 | (* 10 n))" 40 | '(defn square [n] (* n n))]) -------------------------------------------------------------------------------- /src/koans/meditations/07_conditionals.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.conditionals) 2 | 3 | (def koans '( 4 | "You will face many decisions" 5 | (= :__ (if (false? (= 4 5)) 6 | :a 7 | :b)) 8 | 9 | "Some of them leave you no alternative" 10 | (= :__ (if (> 4 3) 11 | [])) 12 | 13 | "And in such a situation you may have nothing" 14 | (= :__ (if (nil? 0) 15 | [:a :b :c])) 16 | 17 | "In others your alternative may be interesting" 18 | (= :glory (if (not (empty? ())) 19 | :doom 20 | :__)) 21 | 22 | "You may have a multitude of possible paths" 23 | (let [x 5] 24 | (= :your-road (cond (= x :__) :road-not-taken 25 | (= x :__) :another-road-not-taken 26 | :else :__))) 27 | 28 | "Or your fate may be sealed" 29 | (= :__ (if-not (zero? :__) 30 | 'doom 31 | 'doom)) 32 | 33 | "In case of emergency, sound the alarms" 34 | (= :sirens 35 | (explain-defcon-level :__)) 36 | 37 | "But admit it when you don't know what to do" 38 | (= :__ 39 | (explain-defcon-level :yo-mama)) 40 | )) 41 | 42 | (def fns [ 43 | "(defn explain-defcon-level [exercise-term] 44 | (case exercise-term 45 | :fade-out :you-and-what-army 46 | :double-take :call-me-when-its-important 47 | :round-house :o-rly 48 | :fast-pace :thats-pretty-bad 49 | :cocked-pistol :sirens 50 | :say-what?))" 51 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/08_higher_order_functions.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.higher-order-functions) 2 | 3 | (def koans '( 4 | "The map function relates a sequence to another" 5 | (= '(:__) (map (fn [x] (* 4 x)) [1 2 3])) 6 | 7 | "You may create that mapping" 8 | (= '(1 4 9 16 25) (map (fn [x] :__) [1 2 3 4 5])) 9 | 10 | "Or use the names of existing functions" 11 | (= :__ (map nil? [:a :b nil :c :d])) 12 | 13 | "A filter can be strong" 14 | (= :__ (filter (fn [x] false) '(:anything :goes :here))) 15 | 16 | "Or very weak" 17 | (= :__ (filter (fn [x] true) '(:anything :goes :here))) 18 | 19 | "Or somewhere in between" 20 | (= [10 20 30] (filter (fn [x] :__) [10 20 30 40 50 60 70 80])) 21 | 22 | "Maps and filters may be combined" 23 | (= [10 20 30] (map (fn [x] :__) (filter (fn [x] :__) [1 2 3 4 5 6 7 8]))) 24 | 25 | "Reducing can increase the result" 26 | (= :__ (reduce (fn [a b] (* a b)) [1 2 3 4])) 27 | 28 | "You can start somewhere else" 29 | (= 2400 (reduce (fn [a b] (* a b)) :__ [1 2 3 4])) 30 | 31 | "Numbers are not the only things one can reduce" 32 | (= "longest" (reduce (fn [a b] 33 | (if (< :__) b a)) 34 | ["which" "is" "the" "longest" "word"])) 35 | )) -------------------------------------------------------------------------------- /src/koans/meditations/09_runtime_polymorphism.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.runtime-polymorphism) 2 | 3 | (def koans '( 4 | "Some functions can be used in different ways - with no arguments" 5 | (= :__ (hello)) 6 | 7 | "With one argument" 8 | (= :__ (hello "world")) 9 | 10 | "Or with many arguments" 11 | (= :__ 12 | (hello "Peter" "Paul" "Mary")) 13 | 14 | "Multimethods allow more complex dispatching" 15 | (= "Bambi eats veggies." 16 | (diet {:species "deer" :name "Bambi" :age 1 :eater :herbivore})) 17 | 18 | "Different methods are used depending on the dispatch function result" 19 | (= "Simba eats animals." 20 | (diet {:species "lion" :name "Simba" :age 1 :eater :carnivore})) 21 | 22 | "You may use a default method when no others match" 23 | (= "I don't know what Rich Hickey eats." 24 | (diet {:name "Rich Hickey"})) 25 | )) 26 | 27 | (def fns [ 28 | "(defn hello 29 | ([] \"Hello World!\") 30 | ([a] (str \"Hello, you silly \" a \".\")) 31 | ([a & more] (str \"Hello to this group: \" 32 | (apply str 33 | (interpose \", \" (concat (list a) more))) 34 | \"!\")))" 35 | "(defmulti diet (fn [x] (:eater x)))" 36 | "(defmethod diet :herbivore [a] :__)" 37 | "(defmethod diet :carnivore [a] :__)" 38 | "(defmethod diet :default [a] :__)" 39 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/10_lazy_sequences.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.lazy-sequences) 2 | 3 | (def koans '( 4 | "There are many ways to generate a sequence" 5 | (= :__ (range 1 5)) 6 | 7 | "The range starts at the beginning by default" 8 | (= :__ (range 5)) 9 | 10 | "Only take what you need when the sequence is large" 11 | (= [0 1 2 3 4 5 6 7 8 9] 12 | (take :__ (range 100))) 13 | 14 | "Or limit results by dropping what you don't need" 15 | (= [95 96 97 98 99] 16 | (drop :__ (range 100))) 17 | 18 | "Iteration provides an infinite lazy sequence" 19 | (= :__ (take 20 (iterate inc 0))) 20 | 21 | "Repetition is key" 22 | (= [:a :a :a :a :a :a :a :a :a :a ] 23 | (repeat 10 :__)) 24 | 25 | "Iteration can be used for repetition" 26 | (= (repeat 100 :foo) 27 | (take 100 (iterate :__ :foo))) 28 | )) -------------------------------------------------------------------------------- /src/koans/meditations/11_sequence_comprehensions.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.sequence-comprehensions) 2 | 3 | (def koans '( 4 | "Sequence comprehensions can bind each element in turn to a symbol" 5 | (= :__ 6 | (for [index (range 6)] 7 | index)) 8 | 9 | "They can easily emulate mapping" 10 | (= '(0 1 4 9 16 25) 11 | (map (fn [index] (* index index)) 12 | (range 6)) 13 | (for [index (range 6)] 14 | :__)) 15 | 16 | "And also filtering" 17 | (= '(1 3 5 7 9) 18 | (filter odd? (range 10)) 19 | (for [index :__ :when (odd? index)] 20 | index)) 21 | 22 | "Combinations of these transformations is trivial" 23 | (= '(1 9 25 49 81) 24 | (map (fn [index] (* index index)) 25 | (filter odd? (range 10))) 26 | (for [index (range 10) :when :__] 27 | :__)) 28 | 29 | "More complex transformations simply take multiple binding forms" 30 | (= [[:top :left] [:top :middle] [:top :right] 31 | [:middle :left] [:middle :middle] [:middle :right] 32 | [:bottom :left] [:bottom :middle] [:bottom :right]] 33 | (for [row [:top :middle :bottom] 34 | column [:left :middle :right]] 35 | :__)) 36 | )) -------------------------------------------------------------------------------- /src/koans/meditations/12_creating_functions.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.creating-functions) 2 | 3 | (def koans '( 4 | "One may know what they seek by knowing what they do not seek" 5 | (= [:__] (let [not-a-symbol? (complement symbol?)] 6 | (map not-a-symbol? [:a 'b "c"]))) 7 | 8 | "Praise and 'complement' may help you separate the wheat from the chaff" 9 | (= [:wheat "wheat" 'wheat] 10 | (let [not-nil? :__] 11 | (filter not-nil? [nil :wheat nil "wheat" nil 'wheat nil]))) 12 | 13 | "Partial functions allow procrastination" 14 | (= 20 (let [multiply-by-5 (partial * 5)] 15 | (:__))) 16 | 17 | "Don't forget: first things first" 18 | (= [:__] 19 | (let [ab-adder (partial concat [:a :b])] 20 | (ab-adder [:__]))) 21 | 22 | "Functions can join forces as one 'composed' function" 23 | (= 25 (let [inc-and-square (comp square inc)] 24 | (inc-and-square :__))) 25 | 26 | "Have a go on a double dec-er" 27 | (= :__ (let [double-dec (comp dec dec)] 28 | (double-dec 10))) 29 | 30 | "Be careful about the order in which you mix your functions" 31 | (= 99 (let [square-and-dec :__] 32 | (square-and-dec 10))) 33 | )) 34 | 35 | (def fns [ 36 | '(defn square [x] (* x x)) 37 | ]) 38 | -------------------------------------------------------------------------------- /src/koans/meditations/13_recursion.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.recursion) 2 | 3 | #_(def koans '( 4 | "Recursion ends with a base case" 5 | (= true (is-even? 0)) 6 | 7 | "And starts by moving toward that base case" 8 | (= false (is-even? 1)) 9 | 10 | #_( 11 | "Having too many stack frames requires explicit tail calls with recur" 12 | (= false (is-even-bigint? 100003N)) 13 | ) 14 | 15 | "Reversing directions is easy when you have not gone far" 16 | (= '(1) (recursive-reverse [1])) 17 | 18 | "Yet it becomes more difficult the more steps you take" 19 | (= '(5 4 3 2 1) (recursive-reverse [1 2 3 4 5])) 20 | 21 | "Simple things may appear simple." 22 | (= 1 (factorial 1)) 23 | 24 | "They may require other simple steps." 25 | (= 2 (factorial 2)) 26 | 27 | "Sometimes a slightly bigger step is necessary" 28 | (= 6 (factorial 3)) 29 | 30 | "And eventually you must think harder" 31 | (= 24 (factorial 4)) 32 | 33 | #(_ 34 | "You can even deal with very large numbers" 35 | (< 1000000000000000000000000N (factorial 1000N)) 36 | 37 | "But what happens when the machine limits you?" 38 | (< 1000000000000000000000000N (factorial 100003N)) 39 | ) 40 | )) 41 | 42 | #_(def fns [ 43 | '(defn is-even? [n] 44 | (if (= n 0) 45 | :__ 46 | (:___ (is-even? (dec n))))) 47 | 48 | '(defn is-even-bigint? [n] 49 | (loop [n n 50 | acc true] 51 | (if (= n 0) 52 | :__ 53 | (recur (dec n) (not acc))))) 54 | 55 | '(defn recursive-reverse [coll] 56 | :__) 57 | 58 | '(defn factorial [n] 59 | :__) 60 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/14_destructuring.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.destructuring) 2 | 3 | (def koans '( 4 | "Destructuring is an arbiter: it breaks up arguments" 5 | (= :__ ((fn [[a b]] (str b a)) 6 | [:foo :bar])) 7 | 8 | "Whether in function definitions" 9 | (= (str "First comes love, " 10 | "then comes marriage, " 11 | "then comes Clojure with the baby carriage") 12 | ((fn [[a b c]] :__) 13 | ["love" "marriage" "Clojure"])) 14 | 15 | "Or in let expressions" 16 | (= "Rich Hickey aka The Clojurer aka Go Time aka Macro Killah" 17 | (let [[first-name last-name & aliases] 18 | (list "Rich" "Hickey" "The Clojurer" "Go Time" "Macro Killah")] 19 | :__)) 20 | 21 | "You can regain the full argument if you like arguing" 22 | (= {:original-parts ["Stephen" "Hawking"] :named-parts {:first "Stephen" :last "Hawking"}} 23 | (let [[first-name last-name :as full-name] ["Stephen" "Hawking"]] 24 | :__)) 25 | 26 | "Break up maps by key" 27 | (= "123 Test Lane, Testerville, TX" 28 | (let [{street-address :street-address, city :city, state :state} test-address] 29 | :__)) 30 | 31 | "Or more succinctly" 32 | (= "123 Test Lane, Testerville, TX" 33 | (let [{:keys [street-address :__]} test-address] 34 | :__)) 35 | 36 | "All together now!" 37 | (= "Test Testerson, 123 Test Lane, Testerville, TX" 38 | (:__ ["Test" "Testerson"] test-address)) 39 | )) 40 | 41 | (def fns [ 42 | "(def test-address 43 | {:street-address \"123 Test Lane\" 44 | :city \"Testerville\" 45 | :state \"TX\"})" 46 | ]) 47 | -------------------------------------------------------------------------------- /src/koans/meditations/15_atoms.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.atoms) 2 | 3 | (def koans '( 4 | "Atoms are references to values" 5 | "(= :__ (deref atomic-clock))" 6 | 7 | "You can get its value more succintly" 8 | "(= :__ @atomic-clock)" 9 | 10 | "You can even change at the swap meet" 11 | "(= :__ (do 12 | (swap! atomic-clock inc) 13 | @atomic-clock))" 14 | 15 | "Keep taxes out of this: swapping requires no transaction" 16 | "(= 5 (do 17 | :__ 18 | @atomic-clock))" 19 | 20 | "Any number of arguments might happen during a swap" 21 | "(= :__ (do 22 | (swap! atomic-clock + 1 2 3 4 5) 23 | @atomic-clock))" 24 | 25 | "Atomic atoms are atomic" 26 | "(= :__ (do 27 | (compare-and-set! atomic-clock 100 :fin) 28 | @atomic-clock))" 29 | 30 | "When your expectations are aligned with reality things, proceed that way" 31 | "(= :fin (do 32 | (compare-and-set! :__) 33 | @atomic-clock))" 34 | )) 35 | 36 | (def fns [ 37 | '(def atomic-clock (atom 0)) 38 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/15_refs.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.refs) 2 | 3 | (def koans '( 4 | "In the beginning, there was a word" 5 | (= :__ (deref the-world)) 6 | 7 | "You can get the word more succinctly, but it's the same" 8 | (= :__ @the-world) 9 | 10 | "You can be the change you wish to see in the world." 11 | (= :__ (do 12 | (dosync (ref-set the-world "better")) 13 | @the-world)) 14 | 15 | "Alter where you need not replace" 16 | (= :__ (let [exclamator (fn [x] (str x "!"))] 17 | (dosync 18 | (alter the-world exclamator) 19 | (alter the-world exclamator) 20 | (alter the-world exclamator)) 21 | @the-world)) 22 | 23 | "Don't forget to do your work in a transaction!" 24 | (= 0 (do :__ 25 | @the-world)) 26 | 27 | "Functions passed to alter may depend on the data in the ref" 28 | (= 20 (do 29 | (dosync (alter the-world :___)))) 30 | 31 | "Two worlds are better than one" 32 | (= ["Real Jerry" "Bizarro Jerry"] 33 | (do 34 | (dosync 35 | (ref-set the-world {}) 36 | (alter the-world assoc :jerry "Real Jerry") 37 | (alter bizarro-world assoc :jerry "Bizarro Jerry") 38 | :__))) 39 | )) 40 | 41 | (def fns [ 42 | '(def the-world (ref "hello")) 43 | '(def bizarro-world (ref {})) 44 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/16_datatypes.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.datatypes) 2 | 3 | (def koans '( 4 | "Holding records is meaningful only when the record is worthy of you" 5 | (= :__ (:prize (Nobel. "peace"))) 6 | 7 | "Types are quite similar" 8 | (= :__ (.prize (Pulitzer. "literature"))) 9 | 10 | "Records may be treated like maps" 11 | (= :__ (:prize (Nobel. "physics"))) 12 | 13 | "While types may not" 14 | (= :__ (:prize (Pulitzer. "poetry"))) 15 | 16 | "Further study reveals why" 17 | (= :__ 18 | (map map? [(Nobel. "chemistry") 19 | (Pulitzer. "music")])) 20 | 21 | "Either sort of datatype can define methods in a protocol" 22 | (= :__ 23 | (with-out-str (present (Oscar. "Best Picture") "Evil Alien Conquerors"))) 24 | 25 | #_( 26 | "Surely we can implement our own by now" 27 | (= "You're really the Worst Picture, Final Destination 5... sorry." 28 | (with-out-str (present (Razzie. "Worst Picture") "Final Destination 5"))) 29 | ) 30 | )) 31 | 32 | (def fns [ 33 | '(defrecord Nobel [prize]) 34 | '(deftype Pulitzer [prize]) 35 | 36 | "(defprotocol Award 37 | (present [this recipient]))" 38 | 39 | "(defrecord Oscar [category] 40 | Award 41 | (present [this recipient] 42 | (print (str \"Congratulations on your \" 43 | (:category this) \" Oscar, \" 44 | recipient 45 | \"!\"))))" 46 | 47 | "(deftype Razzie [category] 48 | Award 49 | (present [this recipient] 50 | :__))" 51 | ]) -------------------------------------------------------------------------------- /src/koans/meditations/17_partition.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.meditations.partition) 2 | 3 | (def koans '( 4 | "To split a collection you can use the partition function" 5 | "(= '((0 1) (2 3)) (:__ 2 (range 4)))" 6 | 7 | "But watch out if there are not enough elements to form n sequences" 8 | (= '(:__) (partition 3 [:a :b :c :d :e])) 9 | 10 | "You can use partition-all to also get partitions with less than n elements" 11 | (= :__ (partition-all 3 (range 5))) 12 | 13 | "If you need to, you can start each sequence with an offset" 14 | "(= '((0 1 2) (5 6 7) (10 11 12)) (partition 3 :__ (range 13)))" 15 | 16 | "Consider padding the last sequence with some default values.." 17 | "(= '((0 1 2) (3 4 5) (6 :hello)) (partition 3 3 [:__] (range 7)))" 18 | 19 | ".. but notice that they will only pad up to given sequence length" 20 | "(= '( (0 1 2) (3 4 5) :__) (partition 3 3 [:this :are \"my\" \"words\"] (range 7)))" 21 | )) -------------------------------------------------------------------------------- /src/koans/utils.cljs: -------------------------------------------------------------------------------- 1 | (ns koans.utils) 2 | 3 | (defn index-of [item coll] 4 | (first (keep-indexed #(if (= item %2) %1) coll))) -------------------------------------------------------------------------------- /vendor/highlight.pack.js: -------------------------------------------------------------------------------- 1 | var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(//gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName.toUpperCase()=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName.toUpperCase()=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+(q.parentNode?q.parentNode.className:"")).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o"}function x(z){y+=""}function o(z){(z.event=="start"?t:x)(z.node)}while(p.length||r.length){var w=u();y+=l(v.substr(q,w[0].offset-q));q=w[0].offset;if(w==p){s.reverse().forEach(x);do{o(w.splice(0,1)[0]);w=u()}while(w==p&&w.length&&w[0].offset==q);s.reverse().forEach(t)}else{if(w[0].event=="start"){s.push(w[0].node)}else{s.pop()}o(w.splice(0,1)[0])}}return y+l(v.substr(q))}function f(r){function o(s){return(s&&s.source)||s}function p(t,s){return RegExp(o(t),"m"+(r.cI?"i":"")+(s?"g":""))}function q(z,x){if(z.compiled){return}z.compiled=true;var u=[];if(z.k){var s={};function A(B,t){if(r.cI){t=t.toLowerCase()}t.split(" ").forEach(function(C){var D=C.split("|");s[D[0]]=[B,D[1]?Number(D[1]):1];u.push(D[0])})}z.lR=p(z.l||"\\b"+hljs.IR+"\\b(?!\\.)",true);if(typeof z.k=="string"){A("keyword",z.k)}else{for(var y in z.k){if(!z.k.hasOwnProperty(y)){continue}A(y,z.k[y])}}z.k=s}if(x){if(z.bWK){z.b="\\b("+u.join("|")+")\\b(?!\\.)\\s*"}z.bR=p(z.b?z.b:"\\B|\\b");if(!z.e&&!z.eW){z.e="\\B|\\b"}if(z.e){z.eR=p(z.e)}z.tE=o(z.e)||"";if(z.eW&&x.tE){z.tE+=(z.e?"|":"")+x.tE}}if(z.i){z.iR=p(z.i)}if(z.r===undefined){z.r=1}if(!z.c){z.c=[]}for(var w=0;w'+O[0]+""}else{r+=O[0]}Q=B.lR.lastIndex;O=B.lR.exec(N)}return r+N.substr(Q)}function z(){if(B.sL&&!e[B.sL]){return l(w)}var N=B.subLanguageMode=="continuous"?B.top:undefined;var r=B.sL?d(B.sL,w,true,N):g(w);if(B.r>0){v+=r.keyword_count;A+=r.r}B.top=r.top;return''+r.value+""}function L(){return B.sL!==undefined?z():I()}function K(O,r){var N=O.cN?'':"";if(O.rB){x+=N;w=""}else{if(O.eB){x+=l(r)+N;w=""}else{x+=N;w=r}}B=Object.create(O,{parent:{value:B}})}function D(N,r){w+=N;if(r===undefined){x+=L();return 0}var P=o(r,B);if(P){x+=L();K(P,r);return P.rB?0:r.length}var Q=s(B,r);if(Q){var O=B;if(!(O.rE||O.eE)){w+=r}x+=L();do{if(B.cN){x+=""}A+=B.r;B=B.parent}while(B!=Q.parent);if(O.eE){x+=l(r)}w="";if(Q.starts){K(Q.starts,"")}return O.rE?0:r.length}if(t(r,B)){throw new Error('Illegal lexem "'+r+'" for mode "'+(B.cN||"")+'"')}w+=r;return r.length||1}var H=e[E];if(!H){throw new Error('Unknown language: "'+E+'"')}f(H);var B=M||H;var x="";for(var F=B;F!=H;F=F.parent){if(F.cN){x=''+x}}var w="";var A=0;var v=0;try{var u,q,p=0;while(true){B.t.lastIndex=p;u=B.t.exec(G);if(!u){break}q=D(G.substr(p,u.index-p),u[0]);p=u.index+q}D(G.substr(p));for(var F=B;F.parent;F=F.parent){if(F.cN){x+=""}}return{r:A,keyword_count:v,value:x,language:E,top:B}}catch(J){if(J.message.indexOf("Illegal")!=-1){return{r:0,keyword_count:0,value:l(G)}}else{throw J}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s,false);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"
")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v,true):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElementNS("http://www.w3.org/1999/xhtml","pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml","pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.clojure=function(l){var e={built_in:"def cond apply if-not if-let if not not= = < < > <= <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for doseq dosync dotimes and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import intern refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! import use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if throw printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time ns assert re-find re-groups rand-int rand mod locking assert-valid-fdecl alias namespace resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! memfn to-array future future-call into-array aset gen-class reduce merge map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"};var f="[a-zA-Z_0-9\\!\\.\\?\\-\\+\\*\\/\\<\\=\\>\\&\\#\\$';]+";var a="[\\s:\\(\\{]+\\d+(\\.\\d+)?";var d={cN:"number",b:a,r:0};var j={cN:"string",b:'"',e:'"',c:[l.BE],r:0};var o={cN:"comment",b:";",e:"$",r:0};var n={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"};var c={cN:"comment",b:"\\^"+f};var b={cN:"comment",b:"\\^\\{",e:"\\}"};var h={cN:"attribute",b:"[:]"+f};var m={cN:"list",b:"\\(",e:"\\)"};var g={eW:true,k:{literal:"true false nil"},r:0};var i={k:e,l:f,cN:"title",b:f,starts:g};m.c=[{cN:"comment",b:"comment"},i,g];g.c=[m,j,c,b,o,h,n,d];n.c=[m,j,c,o,h,n,d];return{i:/\S/,c:[o,m]}}(hljs); -------------------------------------------------------------------------------- /vendor/styles/arta.css: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 17.V.2011 3 | Author: pumbur 4 | */ 5 | 6 | pre code 7 | { 8 | display: block; padding: 0.5em; 9 | background: #222; 10 | } 11 | 12 | pre .profile .header *, 13 | pre .ini .title, 14 | pre .nginx .title 15 | { 16 | color: #fff; 17 | } 18 | 19 | pre .comment, 20 | pre .javadoc, 21 | pre .preprocessor, 22 | pre .preprocessor .title, 23 | pre .pragma, 24 | pre .shebang, 25 | pre .profile .summary, 26 | pre .diff, 27 | pre .pi, 28 | pre .doctype, 29 | pre .tag, 30 | pre .template_comment, 31 | pre .css .rules, 32 | pre .tex .special 33 | { 34 | color: #444; 35 | } 36 | 37 | pre .string, 38 | pre .symbol, 39 | pre .diff .change, 40 | pre .regexp, 41 | pre .xml .attribute, 42 | pre .smalltalk .char, 43 | pre .xml .value, 44 | pre .ini .value, 45 | pre .clojure .attribute, 46 | pre .coffeescript .attribute 47 | { 48 | color: #ffcc33; 49 | } 50 | 51 | pre .number, 52 | pre .addition 53 | { 54 | color: #00cc66; 55 | } 56 | 57 | pre .built_in, 58 | pre .literal, 59 | pre .vhdl .typename, 60 | pre .go .constant, 61 | pre .go .typename, 62 | pre .ini .keyword, 63 | pre .lua .title, 64 | pre .perl .variable, 65 | pre .php .variable, 66 | pre .mel .variable, 67 | pre .django .variable, 68 | pre .css .funtion, 69 | pre .smalltalk .method, 70 | pre .hexcolor, 71 | pre .important, 72 | pre .flow, 73 | pre .inheritance, 74 | pre .parser3 .variable 75 | { 76 | color: #32AAEE; 77 | } 78 | 79 | pre .keyword, 80 | pre .tag .title, 81 | pre .css .tag, 82 | pre .css .class, 83 | pre .css .id, 84 | pre .css .pseudo, 85 | pre .css .attr_selector, 86 | pre .lisp .title, 87 | pre .clojure .built_in, 88 | pre .winutils, 89 | pre .tex .command, 90 | pre .request, 91 | pre .status 92 | { 93 | color: #6644aa; 94 | } 95 | 96 | pre .title, 97 | pre .ruby .constant, 98 | pre .vala .constant, 99 | pre .parent, 100 | pre .deletion, 101 | pre .template_tag, 102 | pre .css .keyword, 103 | pre .objectivec .class .id, 104 | pre .smalltalk .class, 105 | pre .lisp .keyword, 106 | pre .apache .tag, 107 | pre .nginx .variable, 108 | pre .envvar, 109 | pre .bash .variable, 110 | pre .go .built_in, 111 | pre .vbscript .built_in, 112 | pre .lua .built_in, 113 | pre .rsl .built_in, 114 | pre .tail, 115 | pre .avrasm .label, 116 | pre .tex .formula, 117 | pre .tex .formula * 118 | { 119 | color: #bb1166; 120 | } 121 | 122 | pre .yardoctag, 123 | pre .phpdoc, 124 | pre .profile .header, 125 | pre .ini .title, 126 | pre .apache .tag, 127 | pre .parser3 .title 128 | { 129 | font-weight: bold; 130 | } 131 | 132 | pre .coffeescript .javascript, 133 | pre .javascript .xml, 134 | pre .tex .formula, 135 | pre .xml .javascript, 136 | pre .xml .vbscript, 137 | pre .xml .css, 138 | pre .xml .cdata 139 | { 140 | opacity: 0.6; 141 | } 142 | 143 | pre code, 144 | pre .javascript, 145 | pre .css, 146 | pre .xml, 147 | pre .subst, 148 | pre .diff .chunk, 149 | pre .css .value, 150 | pre .css .attribute, 151 | pre .lisp .string, 152 | pre .lisp .number, 153 | pre .tail .params, 154 | pre .container, 155 | pre .haskell *, 156 | pre .erlang *, 157 | pre .erlang_repl * 158 | { 159 | color: #aaa; 160 | } 161 | -------------------------------------------------------------------------------- /vendor/styles/ascetic.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: white; color: black; 10 | } 11 | 12 | pre .string, 13 | pre .tag .value, 14 | pre .filter .argument, 15 | pre .addition, 16 | pre .change, 17 | pre .apache .tag, 18 | pre .apache .cbracket, 19 | pre .nginx .built_in, 20 | pre .tex .formula { 21 | color: #888; 22 | } 23 | 24 | pre .comment, 25 | pre .template_comment, 26 | pre .shebang, 27 | pre .doctype, 28 | pre .pi, 29 | pre .javadoc, 30 | pre .deletion, 31 | pre .apache .sqbracket { 32 | color: #CCC; 33 | } 34 | 35 | pre .keyword, 36 | pre .tag .title, 37 | pre .ini .title, 38 | pre .lisp .title, 39 | pre .clojure .title, 40 | pre .http .title, 41 | pre .nginx .title, 42 | pre .css .tag, 43 | pre .winutils, 44 | pre .flow, 45 | pre .apache .tag, 46 | pre .tex .command, 47 | pre .request, 48 | pre .status { 49 | font-weight: bold; 50 | } 51 | -------------------------------------------------------------------------------- /vendor/styles/brown_paper.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background:#b7a68e url(./brown_papersq.png); 10 | } 11 | 12 | pre .keyword, 13 | pre .literal, 14 | pre .change, 15 | pre .winutils, 16 | pre .flow, 17 | pre .lisp .title, 18 | pre .clojure .built_in, 19 | pre .nginx .title, 20 | pre .tex .special, 21 | pre .request, 22 | pre .status { 23 | color:#005599; 24 | font-weight:bold; 25 | } 26 | 27 | pre code, 28 | pre .subst, 29 | pre .tag .keyword { 30 | color: #363C69; 31 | } 32 | 33 | pre .string, 34 | pre .title, 35 | pre .haskell .type, 36 | pre .tag .value, 37 | pre .css .rules .value, 38 | pre .preprocessor, 39 | pre .pragma, 40 | pre .ruby .symbol, 41 | pre .ruby .symbol .string, 42 | pre .ruby .class .parent, 43 | pre .built_in, 44 | pre .sql .aggregate, 45 | pre .django .template_tag, 46 | pre .django .variable, 47 | pre .smalltalk .class, 48 | pre .javadoc, 49 | pre .ruby .string, 50 | pre .django .filter .argument, 51 | pre .smalltalk .localvars, 52 | pre .smalltalk .array, 53 | pre .attr_selector, 54 | pre .pseudo, 55 | pre .addition, 56 | pre .stream, 57 | pre .envvar, 58 | pre .apache .tag, 59 | pre .apache .cbracket, 60 | pre .tex .number { 61 | color: #2C009F; 62 | } 63 | 64 | pre .comment, 65 | pre .java .annotation, 66 | pre .python .decorator, 67 | pre .template_comment, 68 | pre .pi, 69 | pre .doctype, 70 | pre .deletion, 71 | pre .shebang, 72 | pre .apache .sqbracket, 73 | pre .nginx .built_in, 74 | pre .tex .formula { 75 | color: #802022; 76 | } 77 | 78 | pre .keyword, 79 | pre .literal, 80 | pre .css .id, 81 | pre .phpdoc, 82 | pre .title, 83 | pre .haskell .type, 84 | pre .vbscript .built_in, 85 | pre .sql .aggregate, 86 | pre .rsl .built_in, 87 | pre .smalltalk .class, 88 | pre .diff .header, 89 | pre .chunk, 90 | pre .winutils, 91 | pre .bash .variable, 92 | pre .apache .tag, 93 | pre .tex .command { 94 | font-weight: bold; 95 | } 96 | 97 | pre .coffeescript .javascript, 98 | pre .javascript .xml, 99 | pre .tex .formula, 100 | pre .xml .javascript, 101 | pre .xml .vbscript, 102 | pre .xml .css, 103 | pre .xml .cdata { 104 | opacity: 0.8; 105 | } 106 | -------------------------------------------------------------------------------- /vendor/styles/brown_papersq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazerwalker/clojurescript-koans/c4713e3ccafad2229c5eae038d8bbf433d0d026e/vendor/styles/brown_papersq.png -------------------------------------------------------------------------------- /vendor/styles/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #444; 10 | } 11 | 12 | pre .keyword, 13 | pre .literal, 14 | pre .change, 15 | pre .winutils, 16 | pre .flow, 17 | pre .lisp .title, 18 | pre .clojure .built_in, 19 | pre .nginx .title, 20 | pre .tex .special { 21 | color: white; 22 | } 23 | 24 | pre code, 25 | pre .subst { 26 | color: #DDD; 27 | } 28 | 29 | pre .string, 30 | pre .title, 31 | pre .haskell .type, 32 | pre .ini .title, 33 | pre .tag .value, 34 | pre .css .rules .value, 35 | pre .preprocessor, 36 | pre .pragma, 37 | pre .ruby .symbol, 38 | pre .ruby .symbol .string, 39 | pre .ruby .class .parent, 40 | pre .built_in, 41 | pre .sql .aggregate, 42 | pre .django .template_tag, 43 | pre .django .variable, 44 | pre .smalltalk .class, 45 | pre .javadoc, 46 | pre .ruby .string, 47 | pre .django .filter .argument, 48 | pre .smalltalk .localvars, 49 | pre .smalltalk .array, 50 | pre .attr_selector, 51 | pre .pseudo, 52 | pre .addition, 53 | pre .stream, 54 | pre .envvar, 55 | pre .apache .tag, 56 | pre .apache .cbracket, 57 | pre .tex .command, 58 | pre .prompt, 59 | pre .coffeescript .attribute { 60 | color: #D88; 61 | } 62 | 63 | pre .comment, 64 | pre .java .annotation, 65 | pre .python .decorator, 66 | pre .template_comment, 67 | pre .pi, 68 | pre .doctype, 69 | pre .deletion, 70 | pre .shebang, 71 | pre .apache .sqbracket, 72 | pre .tex .formula { 73 | color: #777; 74 | } 75 | 76 | pre .keyword, 77 | pre .literal, 78 | pre .title, 79 | pre .css .id, 80 | pre .phpdoc, 81 | pre .haskell .type, 82 | pre .vbscript .built_in, 83 | pre .sql .aggregate, 84 | pre .rsl .built_in, 85 | pre .smalltalk .class, 86 | pre .diff .header, 87 | pre .chunk, 88 | pre .winutils, 89 | pre .bash .variable, 90 | pre .apache .tag, 91 | pre .tex .special, 92 | pre .request, 93 | pre .status { 94 | font-weight: bold; 95 | } 96 | 97 | pre .coffeescript .javascript, 98 | pre .javascript .xml, 99 | pre .tex .formula, 100 | pre .xml .javascript, 101 | pre .xml .vbscript, 102 | pre .xml .css, 103 | pre .xml .cdata { 104 | opacity: 0.5; 105 | } 106 | -------------------------------------------------------------------------------- /vendor/styles/default.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #F0F0F0; 10 | } 11 | 12 | pre code, 13 | pre .subst, 14 | pre .tag .title, 15 | pre .lisp .title, 16 | pre .clojure .built_in, 17 | pre .nginx .title { 18 | color: black; 19 | } 20 | 21 | pre .string, 22 | pre .title, 23 | pre .constant, 24 | pre .parent, 25 | pre .tag .value, 26 | pre .rules .value, 27 | pre .rules .value .number, 28 | pre .preprocessor, 29 | pre .pragma, 30 | pre .haml .symbol, 31 | pre .ruby .symbol, 32 | pre .ruby .symbol .string, 33 | pre .aggregate, 34 | pre .template_tag, 35 | pre .django .variable, 36 | pre .smalltalk .class, 37 | pre .addition, 38 | pre .flow, 39 | pre .stream, 40 | pre .bash .variable, 41 | pre .apache .tag, 42 | pre .apache .cbracket, 43 | pre .tex .command, 44 | pre .tex .special, 45 | pre .erlang_repl .function_or_atom, 46 | pre .asciidoc .header, 47 | pre .markdown .header, 48 | pre .coffeescript .attribute { 49 | color: #800; 50 | } 51 | 52 | pre .smartquote, 53 | pre .comment, 54 | pre .annotation, 55 | pre .template_comment, 56 | pre .diff .header, 57 | pre .chunk, 58 | pre .asciidoc .blockquote, 59 | pre .markdown .blockquote { 60 | color: #888; 61 | } 62 | 63 | pre .number, 64 | pre .date, 65 | pre .regexp, 66 | pre .literal, 67 | pre .hexcolor, 68 | pre .smalltalk .symbol, 69 | pre .smalltalk .char, 70 | pre .go .constant, 71 | pre .change, 72 | pre .lasso .variable, 73 | pre .makefile .variable, 74 | pre .asciidoc .bullet, 75 | pre .markdown .bullet, 76 | pre .asciidoc .link_url, 77 | pre .markdown .link_url { 78 | color: #080; 79 | } 80 | 81 | pre .label, 82 | pre .javadoc, 83 | pre .ruby .string, 84 | pre .decorator, 85 | pre .filter .argument, 86 | pre .localvars, 87 | pre .array, 88 | pre .attr_selector, 89 | pre .important, 90 | pre .pseudo, 91 | pre .pi, 92 | pre .haml .bullet, 93 | pre .doctype, 94 | pre .deletion, 95 | pre .envvar, 96 | pre .shebang, 97 | pre .apache .sqbracket, 98 | pre .nginx .built_in, 99 | pre .tex .formula, 100 | pre .erlang_repl .reserved, 101 | pre .prompt, 102 | pre .asciidoc .link_label, 103 | pre .markdown .link_label, 104 | pre .vhdl .attribute, 105 | pre .clojure .attribute, 106 | pre .asciidoc .attribute, 107 | pre .lasso .attribute, 108 | pre .coffeescript .property, 109 | pre .makefile .phony { 110 | color: #88F 111 | } 112 | 113 | pre .keyword, 114 | pre .id, 115 | pre .title, 116 | pre .built_in, 117 | pre .aggregate, 118 | pre .css .tag, 119 | pre .javadoctag, 120 | pre .phpdoc, 121 | pre .yardoctag, 122 | pre .smalltalk .class, 123 | pre .winutils, 124 | pre .bash .variable, 125 | pre .apache .tag, 126 | pre .go .typename, 127 | pre .tex .command, 128 | pre .asciidoc .strong, 129 | pre .markdown .strong, 130 | pre .request, 131 | pre .status { 132 | font-weight: bold; 133 | } 134 | 135 | pre .asciidoc .emphasis, 136 | pre .markdown .emphasis { 137 | font-style: italic; 138 | } 139 | 140 | pre .nginx .built_in { 141 | font-weight: normal; 142 | } 143 | 144 | pre .coffeescript .javascript, 145 | pre .javascript .xml, 146 | pre .lasso .markup, 147 | pre .tex .formula, 148 | pre .xml .javascript, 149 | pre .xml .vbscript, 150 | pre .xml .css, 151 | pre .xml .cdata { 152 | opacity: 0.5; 153 | } 154 | -------------------------------------------------------------------------------- /vendor/styles/docco.css: -------------------------------------------------------------------------------- 1 | /* 2 | Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) 3 | */ 4 | 5 | pre code { 6 | display: block; padding: 0.5em; 7 | color: #000; 8 | background: #f8f8ff 9 | } 10 | 11 | pre .comment, 12 | pre .template_comment, 13 | pre .diff .header, 14 | pre .javadoc { 15 | color: #408080; 16 | font-style: italic 17 | } 18 | 19 | pre .keyword, 20 | pre .assignment, 21 | pre .literal, 22 | pre .css .rule .keyword, 23 | pre .winutils, 24 | pre .javascript .title, 25 | pre .lisp .title, 26 | pre .subst { 27 | color: #954121; 28 | } 29 | 30 | pre .number, 31 | pre .hexcolor { 32 | color: #40a070 33 | } 34 | 35 | pre .string, 36 | pre .tag .value, 37 | pre .phpdoc, 38 | pre .tex .formula { 39 | color: #219161; 40 | } 41 | 42 | pre .title, 43 | pre .id { 44 | color: #19469D; 45 | } 46 | pre .params { 47 | color: #00F; 48 | } 49 | 50 | pre .javascript .title, 51 | pre .lisp .title, 52 | pre .subst { 53 | font-weight: normal 54 | } 55 | 56 | pre .class .title, 57 | pre .haskell .label, 58 | pre .tex .command { 59 | color: #458; 60 | font-weight: bold 61 | } 62 | 63 | pre .tag, 64 | pre .tag .title, 65 | pre .rules .property, 66 | pre .django .tag .keyword { 67 | color: #000080; 68 | font-weight: normal 69 | } 70 | 71 | pre .attribute, 72 | pre .variable, 73 | pre .instancevar, 74 | pre .lisp .body { 75 | color: #008080 76 | } 77 | 78 | pre .regexp { 79 | color: #B68 80 | } 81 | 82 | pre .class { 83 | color: #458; 84 | font-weight: bold 85 | } 86 | 87 | pre .symbol, 88 | pre .ruby .symbol .string, 89 | pre .ruby .symbol .keyword, 90 | pre .ruby .symbol .keymethods, 91 | pre .lisp .keyword, 92 | pre .tex .special, 93 | pre .input_number { 94 | color: #990073 95 | } 96 | 97 | pre .builtin, 98 | pre .constructor, 99 | pre .built_in, 100 | pre .lisp .title { 101 | color: #0086b3 102 | } 103 | 104 | pre .preprocessor, 105 | pre .pragma, 106 | pre .pi, 107 | pre .doctype, 108 | pre .shebang, 109 | pre .cdata { 110 | color: #999; 111 | font-weight: bold 112 | } 113 | 114 | pre .deletion { 115 | background: #fdd 116 | } 117 | 118 | pre .addition { 119 | background: #dfd 120 | } 121 | 122 | pre .diff .change { 123 | background: #0086b3 124 | } 125 | 126 | pre .chunk { 127 | color: #aaa 128 | } 129 | 130 | pre .tex .formula { 131 | opacity: 0.5; 132 | } 133 | -------------------------------------------------------------------------------- /vendor/styles/far.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | FAR Style (c) MajestiC 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #000080; 10 | } 11 | 12 | pre code, 13 | pre .subst { 14 | color: #0FF; 15 | } 16 | 17 | pre .string, 18 | pre .ruby .string, 19 | pre .haskell .type, 20 | pre .tag .value, 21 | pre .css .rules .value, 22 | pre .css .rules .value .number, 23 | pre .preprocessor, 24 | pre .pragma, 25 | pre .ruby .symbol, 26 | pre .ruby .symbol .string, 27 | pre .built_in, 28 | pre .sql .aggregate, 29 | pre .django .template_tag, 30 | pre .django .variable, 31 | pre .smalltalk .class, 32 | pre .addition, 33 | pre .apache .tag, 34 | pre .apache .cbracket, 35 | pre .tex .command, 36 | pre .clojure .title, 37 | pre .coffeescript .attribute { 38 | color: #FF0; 39 | } 40 | 41 | pre .keyword, 42 | pre .css .id, 43 | pre .title, 44 | pre .haskell .type, 45 | pre .vbscript .built_in, 46 | pre .sql .aggregate, 47 | pre .rsl .built_in, 48 | pre .smalltalk .class, 49 | pre .xml .tag .title, 50 | pre .winutils, 51 | pre .flow, 52 | pre .change, 53 | pre .envvar, 54 | pre .bash .variable, 55 | pre .tex .special, 56 | pre .clojure .built_in { 57 | color: #FFF; 58 | } 59 | 60 | pre .comment, 61 | pre .phpdoc, 62 | pre .javadoc, 63 | pre .java .annotation, 64 | pre .template_comment, 65 | pre .deletion, 66 | pre .apache .sqbracket, 67 | pre .tex .formula { 68 | color: #888; 69 | } 70 | 71 | pre .number, 72 | pre .date, 73 | pre .regexp, 74 | pre .literal, 75 | pre .smalltalk .symbol, 76 | pre .smalltalk .char, 77 | pre .clojure .attribute { 78 | color: #0F0; 79 | } 80 | 81 | pre .python .decorator, 82 | pre .django .filter .argument, 83 | pre .smalltalk .localvars, 84 | pre .smalltalk .array, 85 | pre .attr_selector, 86 | pre .pseudo, 87 | pre .xml .pi, 88 | pre .diff .header, 89 | pre .chunk, 90 | pre .shebang, 91 | pre .nginx .built_in, 92 | pre .prompt { 93 | color: #008080; 94 | } 95 | 96 | pre .keyword, 97 | pre .css .id, 98 | pre .title, 99 | pre .haskell .type, 100 | pre .vbscript .built_in, 101 | pre .sql .aggregate, 102 | pre .rsl .built_in, 103 | pre .smalltalk .class, 104 | pre .winutils, 105 | pre .flow, 106 | pre .apache .tag, 107 | pre .nginx .built_in, 108 | pre .tex .command, 109 | pre .tex .special, 110 | pre .request, 111 | pre .status { 112 | font-weight: bold; 113 | } 114 | -------------------------------------------------------------------------------- /vendor/styles/foundation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Foundation 4 docs style for highlight.js 3 | Author: Dan Allen 4 | Website: http://foundation.zurb.com/docs/ 5 | Version: 1.0 6 | Date: 2013-04-02 7 | */ 8 | 9 | pre code { 10 | display: block; padding: 0.5em; 11 | background: #eee; 12 | } 13 | 14 | pre .header, 15 | pre .decorator, 16 | pre .annotation { 17 | color: #000077; 18 | } 19 | 20 | pre .horizontal_rule, 21 | pre .link_url, 22 | pre .emphasis, 23 | pre .attribute { 24 | color: #070; 25 | } 26 | 27 | pre .emphasis { 28 | font-style: italic; 29 | } 30 | 31 | pre .link_label, 32 | pre .strong, 33 | pre .value, 34 | pre .string, 35 | pre .scss .value .string { 36 | color: #d14; 37 | } 38 | 39 | pre .strong { 40 | font-weight: bold; 41 | } 42 | 43 | pre .blockquote, 44 | pre .comment { 45 | color: #998; 46 | font-style: italic; 47 | } 48 | 49 | pre .asciidoc .title, 50 | pre .function .title { 51 | color: #900; 52 | } 53 | 54 | pre .class { 55 | color: #458; 56 | } 57 | 58 | pre .id, 59 | pre .pseudo, 60 | pre .constant, 61 | pre .hexcolor { 62 | color: teal; 63 | } 64 | 65 | pre .variable { 66 | color: #336699; 67 | } 68 | 69 | pre .bullet, 70 | pre .javadoc { 71 | color: #997700; 72 | } 73 | 74 | pre .pi, 75 | pre .doctype { 76 | color: #3344bb; 77 | } 78 | 79 | pre .code, 80 | pre .number { 81 | color: #099; 82 | } 83 | 84 | pre .important { 85 | color: #f00; 86 | } 87 | 88 | pre .smartquote, 89 | pre .label { 90 | color: #970; 91 | } 92 | 93 | pre .preprocessor, 94 | pre .pragma { 95 | color: #579; 96 | } 97 | 98 | pre .reserved, 99 | pre .keyword, 100 | pre .scss .value { 101 | color: #000; 102 | } 103 | 104 | pre .regexp { 105 | background-color: #fff0ff; 106 | color: #880088; 107 | } 108 | 109 | pre .symbol { 110 | color: #990073; 111 | } 112 | 113 | pre .symbol .string { 114 | color: #a60; 115 | } 116 | 117 | pre .tag { 118 | color: #007700; 119 | } 120 | 121 | pre .at_rule, 122 | pre .at_rule .keyword { 123 | color: #088; 124 | } 125 | 126 | pre .at_rule .preprocessor { 127 | color: #808; 128 | } 129 | 130 | pre .scss .tag, 131 | pre .scss .attribute { 132 | color: #339; 133 | } 134 | -------------------------------------------------------------------------------- /vendor/styles/github.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | github.com style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | color: #333; 10 | background: #f8f8ff 11 | } 12 | 13 | pre .comment, 14 | pre .template_comment, 15 | pre .diff .header, 16 | pre .javadoc { 17 | color: #998; 18 | font-style: italic 19 | } 20 | 21 | pre .keyword, 22 | pre .css .rule .keyword, 23 | pre .winutils, 24 | pre .javascript .title, 25 | pre .nginx .title, 26 | pre .subst, 27 | pre .request, 28 | pre .status { 29 | color: #333; 30 | font-weight: bold 31 | } 32 | 33 | pre .number, 34 | pre .hexcolor, 35 | pre .ruby .constant { 36 | color: #099; 37 | } 38 | 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula { 43 | color: #d14 44 | } 45 | 46 | pre .title, 47 | pre .id, 48 | pre .coffeescript .params, 49 | pre .scss .preprocessor { 50 | color: #900; 51 | font-weight: bold 52 | } 53 | 54 | pre .javascript .title, 55 | pre .lisp .title, 56 | pre .clojure .title, 57 | pre .subst { 58 | font-weight: normal 59 | } 60 | 61 | pre .class .title, 62 | pre .haskell .type, 63 | pre .vhdl .literal, 64 | pre .tex .command { 65 | color: #458; 66 | font-weight: bold 67 | } 68 | 69 | pre .tag, 70 | pre .tag .title, 71 | pre .rules .property, 72 | pre .django .tag .keyword { 73 | color: #000080; 74 | font-weight: normal 75 | } 76 | 77 | pre .attribute, 78 | pre .variable, 79 | pre .lisp .body { 80 | color: #008080 81 | } 82 | 83 | pre .regexp { 84 | color: #009926 85 | } 86 | 87 | pre .class { 88 | color: #458; 89 | font-weight: bold 90 | } 91 | 92 | pre .symbol, 93 | pre .ruby .symbol .string, 94 | pre .lisp .keyword, 95 | pre .tex .special, 96 | pre .prompt { 97 | color: #990073 98 | } 99 | 100 | pre .built_in, 101 | pre .lisp .title, 102 | pre .clojure .built_in { 103 | color: #0086b3 104 | } 105 | 106 | pre .preprocessor, 107 | pre .pragma, 108 | pre .pi, 109 | pre .doctype, 110 | pre .shebang, 111 | pre .cdata { 112 | color: #999; 113 | font-weight: bold 114 | } 115 | 116 | pre .deletion { 117 | background: #fdd 118 | } 119 | 120 | pre .addition { 121 | background: #dfd 122 | } 123 | 124 | pre .diff .change { 125 | background: #0086b3 126 | } 127 | 128 | pre .chunk { 129 | color: #aaa 130 | } 131 | -------------------------------------------------------------------------------- /vendor/styles/googlecode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Google Code style (c) Aahan Krish 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: white; color: black; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc, 15 | pre .comment * { 16 | color: #800; 17 | } 18 | 19 | pre .keyword, 20 | pre .method, 21 | pre .list .title, 22 | pre .clojure .built_in, 23 | pre .nginx .title, 24 | pre .tag .title, 25 | pre .setting .value, 26 | pre .winutils, 27 | pre .tex .command, 28 | pre .http .title, 29 | pre .request, 30 | pre .status { 31 | color: #008; 32 | } 33 | 34 | pre .envvar, 35 | pre .tex .special { 36 | color: #660; 37 | } 38 | 39 | pre .string, 40 | pre .tag .value, 41 | pre .cdata, 42 | pre .filter .argument, 43 | pre .attr_selector, 44 | pre .apache .cbracket, 45 | pre .date, 46 | pre .regexp, 47 | pre .coffeescript .attribute { 48 | color: #080; 49 | } 50 | 51 | pre .sub .identifier, 52 | pre .pi, 53 | pre .tag, 54 | pre .tag .keyword, 55 | pre .decorator, 56 | pre .ini .title, 57 | pre .shebang, 58 | pre .prompt, 59 | pre .hexcolor, 60 | pre .rules .value, 61 | pre .css .value .number, 62 | pre .literal, 63 | pre .symbol, 64 | pre .ruby .symbol .string, 65 | pre .number, 66 | pre .css .function, 67 | pre .clojure .attribute { 68 | color: #066; 69 | } 70 | 71 | pre .class .title, 72 | pre .haskell .type, 73 | pre .smalltalk .class, 74 | pre .javadoctag, 75 | pre .yardoctag, 76 | pre .phpdoc, 77 | pre .typename, 78 | pre .tag .attribute, 79 | pre .doctype, 80 | pre .class .id, 81 | pre .built_in, 82 | pre .setting, 83 | pre .params, 84 | pre .variable, 85 | pre .clojure .title { 86 | color: #606; 87 | } 88 | 89 | pre .css .tag, 90 | pre .rules .property, 91 | pre .pseudo, 92 | pre .subst { 93 | color: #000; 94 | } 95 | 96 | pre .css .class, pre .css .id { 97 | color: #9B703F; 98 | } 99 | 100 | pre .value .important { 101 | color: #ff7700; 102 | font-weight: bold; 103 | } 104 | 105 | pre .rules .keyword { 106 | color: #C5AF75; 107 | } 108 | 109 | pre .annotation, 110 | pre .apache .sqbracket, 111 | pre .nginx .built_in { 112 | color: #9B859D; 113 | } 114 | 115 | pre .preprocessor, 116 | pre .preprocessor *, 117 | pre .pragma { 118 | color: #444; 119 | } 120 | 121 | pre .tex .formula { 122 | background-color: #EEE; 123 | font-style: italic; 124 | } 125 | 126 | pre .diff .header, 127 | pre .chunk { 128 | color: #808080; 129 | font-weight: bold; 130 | } 131 | 132 | pre .diff .change { 133 | background-color: #BCCFF9; 134 | } 135 | 136 | pre .addition { 137 | background-color: #BAEEBA; 138 | } 139 | 140 | pre .deletion { 141 | background-color: #FFC8BD; 142 | } 143 | 144 | pre .comment .yardoctag { 145 | font-weight: bold; 146 | } 147 | -------------------------------------------------------------------------------- /vendor/styles/idea.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Intellij Idea-like styling (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | color: #000; 10 | background: #fff; 11 | } 12 | 13 | pre .subst, 14 | pre .title { 15 | font-weight: normal; 16 | color: #000; 17 | } 18 | 19 | pre .comment, 20 | pre .template_comment, 21 | pre .javadoc, 22 | pre .diff .header { 23 | color: #808080; 24 | font-style: italic; 25 | } 26 | 27 | pre .annotation, 28 | pre .decorator, 29 | pre .preprocessor, 30 | pre .pragma, 31 | pre .doctype, 32 | pre .pi, 33 | pre .chunk, 34 | pre .shebang, 35 | pre .apache .cbracket, 36 | pre .prompt, 37 | pre .http .title { 38 | color: #808000; 39 | } 40 | 41 | pre .tag, 42 | pre .pi { 43 | background: #efefef; 44 | } 45 | 46 | pre .tag .title, 47 | pre .id, 48 | pre .attr_selector, 49 | pre .pseudo, 50 | pre .literal, 51 | pre .keyword, 52 | pre .hexcolor, 53 | pre .css .function, 54 | pre .ini .title, 55 | pre .css .class, 56 | pre .list .title, 57 | pre .clojure .title, 58 | pre .nginx .title, 59 | pre .tex .command, 60 | pre .request, 61 | pre .status { 62 | font-weight: bold; 63 | color: #000080; 64 | } 65 | 66 | pre .attribute, 67 | pre .rules .keyword, 68 | pre .number, 69 | pre .date, 70 | pre .regexp, 71 | pre .tex .special { 72 | font-weight: bold; 73 | color: #0000ff; 74 | } 75 | 76 | pre .number, 77 | pre .regexp { 78 | font-weight: normal; 79 | } 80 | 81 | pre .string, 82 | pre .value, 83 | pre .filter .argument, 84 | pre .css .function .params, 85 | pre .apache .tag { 86 | color: #008000; 87 | font-weight: bold; 88 | } 89 | 90 | pre .symbol, 91 | pre .ruby .symbol .string, 92 | pre .char, 93 | pre .tex .formula { 94 | color: #000; 95 | background: #d0eded; 96 | font-style: italic; 97 | } 98 | 99 | pre .phpdoc, 100 | pre .yardoctag, 101 | pre .javadoctag { 102 | text-decoration: underline; 103 | } 104 | 105 | pre .variable, 106 | pre .envvar, 107 | pre .apache .sqbracket, 108 | pre .nginx .built_in { 109 | color: #660e7a; 110 | } 111 | 112 | pre .addition { 113 | background: #baeeba; 114 | } 115 | 116 | pre .deletion { 117 | background: #ffc8bd; 118 | } 119 | 120 | pre .diff .change { 121 | background: #bccff9; 122 | } 123 | -------------------------------------------------------------------------------- /vendor/styles/ir_black.css: -------------------------------------------------------------------------------- 1 | /* 2 | IR_Black style (c) Vasily Mikhailitchenko 3 | */ 4 | 5 | pre code { 6 | display: block; padding: 0.5em; 7 | background: #000; color: #f8f8f8; 8 | } 9 | 10 | pre .shebang, 11 | pre .comment, 12 | pre .template_comment, 13 | pre .javadoc { 14 | color: #7c7c7c; 15 | } 16 | 17 | pre .keyword, 18 | pre .tag, 19 | pre .tex .command, 20 | pre .request, 21 | pre .status, 22 | pre .clojure .attribute { 23 | color: #96CBFE; 24 | } 25 | 26 | pre .sub .keyword, 27 | pre .method, 28 | pre .list .title, 29 | pre .nginx .title { 30 | color: #FFFFB6; 31 | } 32 | 33 | pre .string, 34 | pre .tag .value, 35 | pre .cdata, 36 | pre .filter .argument, 37 | pre .attr_selector, 38 | pre .apache .cbracket, 39 | pre .date, 40 | pre .coffeescript .attribute { 41 | color: #A8FF60; 42 | } 43 | 44 | pre .subst { 45 | color: #DAEFA3; 46 | } 47 | 48 | pre .regexp { 49 | color: #E9C062; 50 | } 51 | 52 | pre .title, 53 | pre .sub .identifier, 54 | pre .pi, 55 | pre .decorator, 56 | pre .tex .special, 57 | pre .haskell .type, 58 | pre .constant, 59 | pre .smalltalk .class, 60 | pre .javadoctag, 61 | pre .yardoctag, 62 | pre .phpdoc, 63 | pre .nginx .built_in { 64 | color: #FFFFB6; 65 | } 66 | 67 | pre .symbol, 68 | pre .ruby .symbol .string, 69 | pre .number, 70 | pre .variable, 71 | pre .vbscript, 72 | pre .literal { 73 | color: #C6C5FE; 74 | } 75 | 76 | pre .css .tag { 77 | color: #96CBFE; 78 | } 79 | 80 | pre .css .rules .property, 81 | pre .css .id { 82 | color: #FFFFB6; 83 | } 84 | 85 | pre .css .class { 86 | color: #FFF; 87 | } 88 | 89 | pre .hexcolor { 90 | color: #C6C5FE; 91 | } 92 | 93 | pre .number { 94 | color:#FF73FD; 95 | } 96 | 97 | pre .coffeescript .javascript, 98 | pre .javascript .xml, 99 | pre .tex .formula, 100 | pre .xml .javascript, 101 | pre .xml .vbscript, 102 | pre .xml .css, 103 | pre .xml .cdata { 104 | opacity: 0.7; 105 | } 106 | -------------------------------------------------------------------------------- /vendor/styles/magula.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Magula style for highligh.js 3 | Author: Ruslan Keba 4 | Website: http://rukeba.com/ 5 | Version: 1.0 6 | Date: 2009-01-03 7 | Music: Aphex Twin / Xtal 8 | */ 9 | 10 | pre code { 11 | display: block; padding: 0.5em; 12 | background-color: #f4f4f4; 13 | } 14 | 15 | pre code, 16 | pre .subst, 17 | pre .lisp .title, 18 | pre .clojure .built_in { 19 | color: black; 20 | } 21 | 22 | pre .string, 23 | pre .title, 24 | pre .parent, 25 | pre .tag .value, 26 | pre .rules .value, 27 | pre .rules .value .number, 28 | pre .preprocessor, 29 | pre .pragma, 30 | pre .ruby .symbol, 31 | pre .ruby .symbol .string, 32 | pre .aggregate, 33 | pre .template_tag, 34 | pre .django .variable, 35 | pre .smalltalk .class, 36 | pre .addition, 37 | pre .flow, 38 | pre .stream, 39 | pre .bash .variable, 40 | pre .apache .cbracket, 41 | pre .coffeescript .attribute { 42 | color: #050; 43 | } 44 | 45 | pre .comment, 46 | pre .annotation, 47 | pre .template_comment, 48 | pre .diff .header, 49 | pre .chunk { 50 | color: #777; 51 | } 52 | 53 | pre .number, 54 | pre .date, 55 | pre .regexp, 56 | pre .literal, 57 | pre .smalltalk .symbol, 58 | pre .smalltalk .char, 59 | pre .change, 60 | pre .tex .special { 61 | color: #800; 62 | } 63 | 64 | pre .label, 65 | pre .javadoc, 66 | pre .ruby .string, 67 | pre .decorator, 68 | pre .filter .argument, 69 | pre .localvars, 70 | pre .array, 71 | pre .attr_selector, 72 | pre .pseudo, 73 | pre .pi, 74 | pre .doctype, 75 | pre .deletion, 76 | pre .envvar, 77 | pre .shebang, 78 | pre .apache .sqbracket, 79 | pre .nginx .built_in, 80 | pre .tex .formula, 81 | pre .prompt, 82 | pre .clojure .attribute { 83 | color: #00e; 84 | } 85 | 86 | pre .keyword, 87 | pre .id, 88 | pre .phpdoc, 89 | pre .title, 90 | pre .built_in, 91 | pre .aggregate, 92 | pre .smalltalk .class, 93 | pre .winutils, 94 | pre .bash .variable, 95 | pre .apache .tag, 96 | pre .xml .tag, 97 | pre .tex .command, 98 | pre .request, 99 | pre .status { 100 | font-weight: bold; 101 | color: navy; 102 | } 103 | 104 | pre .nginx .built_in { 105 | font-weight: normal; 106 | } 107 | 108 | pre .coffeescript .javascript, 109 | pre .javascript .xml, 110 | pre .tex .formula, 111 | pre .xml .javascript, 112 | pre .xml .vbscript, 113 | pre .xml .css, 114 | pre .xml .cdata { 115 | opacity: 0.5; 116 | } 117 | 118 | /* --- */ 119 | pre .apache .tag { 120 | font-weight: bold; 121 | color: blue; 122 | } 123 | 124 | -------------------------------------------------------------------------------- /vendor/styles/mono-blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | Five-color theme from a single blue hue. 3 | */ 4 | pre code { 5 | display: block; padding: 0.5em; 6 | background: #EAEEF3; color: #00193A; 7 | } 8 | 9 | pre .keyword, 10 | pre .title, 11 | pre .important, 12 | pre .request, 13 | pre .header, 14 | pre .javadoctag { 15 | font-weight: bold; 16 | } 17 | 18 | pre .comment, 19 | pre .chunk, 20 | pre .template_comment { 21 | color: #738191; 22 | } 23 | 24 | pre .string, 25 | pre .title, 26 | pre .parent, 27 | pre .built_in, 28 | pre .literal, 29 | pre .filename, 30 | pre .value, 31 | pre .addition, 32 | pre .tag, 33 | pre .argument, 34 | pre .link_label, 35 | pre .blockquote, 36 | pre .header { 37 | color: #0048AB; 38 | } 39 | 40 | pre .decorator, 41 | pre .prompt, 42 | pre .yardoctag, 43 | pre .subst, 44 | pre .symbol, 45 | pre .doctype, 46 | pre .regexp, 47 | pre .preprocessor, 48 | pre .pragma, 49 | pre .pi, 50 | pre .attribute, 51 | pre .attr_selector, 52 | pre .javadoc, 53 | pre .xmlDocTag, 54 | pre .deletion, 55 | pre .shebang, 56 | pre .string .variable, 57 | pre .link_url, 58 | pre .bullet, 59 | pre .sqbracket, 60 | pre .phony { 61 | color: #4C81C9; 62 | } 63 | -------------------------------------------------------------------------------- /vendor/styles/monokai.css: -------------------------------------------------------------------------------- 1 | /* 2 | Monokai style - ported by Luigi Maselli - http://grigio.org 3 | */ 4 | 5 | pre code { 6 | display: block; padding: 0.5em; 7 | background: #272822; 8 | } 9 | 10 | pre .tag, 11 | pre .tag .title, 12 | pre .keyword, 13 | pre .literal, 14 | pre .strong, 15 | pre .change, 16 | pre .winutils, 17 | pre .flow, 18 | pre .lisp .title, 19 | pre .clojure .built_in, 20 | pre .nginx .title, 21 | pre .tex .special { 22 | color: #F92672; 23 | } 24 | 25 | pre code { 26 | color: #DDD; 27 | } 28 | 29 | pre code .constant, 30 | pre .asciidoc .code { 31 | color: #66D9EF; 32 | } 33 | 34 | pre .code, 35 | pre .class .title, 36 | pre .header { 37 | color: white; 38 | } 39 | 40 | pre .link_label, 41 | pre .attribute, 42 | pre .symbol, 43 | pre .symbol .string, 44 | pre .value, 45 | pre .regexp { 46 | color: #BF79DB; 47 | } 48 | 49 | pre .link_url, 50 | pre .tag .value, 51 | pre .string, 52 | pre .bullet, 53 | pre .subst, 54 | pre .title, 55 | pre .emphasis, 56 | pre .haskell .type, 57 | pre .preprocessor, 58 | pre .pragma, 59 | pre .ruby .class .parent, 60 | pre .built_in, 61 | pre .sql .aggregate, 62 | pre .django .template_tag, 63 | pre .django .variable, 64 | pre .smalltalk .class, 65 | pre .javadoc, 66 | pre .django .filter .argument, 67 | pre .smalltalk .localvars, 68 | pre .smalltalk .array, 69 | pre .attr_selector, 70 | pre .pseudo, 71 | pre .addition, 72 | pre .stream, 73 | pre .envvar, 74 | pre .apache .tag, 75 | pre .apache .cbracket, 76 | pre .tex .command, 77 | pre .prompt { 78 | color: #A6E22E; 79 | } 80 | 81 | pre .comment, 82 | pre .java .annotation, 83 | pre .smartquote, 84 | pre .blockquote, 85 | pre .horizontal_rule, 86 | pre .python .decorator, 87 | pre .template_comment, 88 | pre .pi, 89 | pre .doctype, 90 | pre .deletion, 91 | pre .shebang, 92 | pre .apache .sqbracket, 93 | pre .tex .formula { 94 | color: #75715E; 95 | } 96 | 97 | pre .keyword, 98 | pre .literal, 99 | pre .css .id, 100 | pre .phpdoc, 101 | pre .title, 102 | pre .header, 103 | pre .haskell .type, 104 | pre .vbscript .built_in, 105 | pre .sql .aggregate, 106 | pre .rsl .built_in, 107 | pre .smalltalk .class, 108 | pre .diff .header, 109 | pre .chunk, 110 | pre .winutils, 111 | pre .bash .variable, 112 | pre .apache .tag, 113 | pre .tex .special, 114 | pre .request, 115 | pre .status { 116 | font-weight: bold; 117 | } 118 | 119 | pre .coffeescript .javascript, 120 | pre .javascript .xml, 121 | pre .tex .formula, 122 | pre .xml .javascript, 123 | pre .xml .vbscript, 124 | pre .xml .css, 125 | pre .xml .cdata { 126 | opacity: 0.5; 127 | } 128 | -------------------------------------------------------------------------------- /vendor/styles/monokai_sublime.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; 9 | padding: 0.5em; 10 | background: #23241f; 11 | } 12 | pre .tag, 13 | pre code { 14 | color: #f8f8f2; 15 | } 16 | pre .keyword, 17 | pre .function, 18 | pre .literal, 19 | pre .change, 20 | pre .winutils, 21 | pre .flow, 22 | pre .lisp .title, 23 | pre .clojure .built_in, 24 | pre .nginx .title, 25 | pre .tex .special { 26 | color: #66d9ef; 27 | } 28 | pre .variable, 29 | pre .params { 30 | color: #fd9720; 31 | } 32 | pre .constant { 33 | color: #66d9ef; 34 | } 35 | pre .title, 36 | pre .class .title, 37 | pre .css .class { 38 | color: #a6e22e; 39 | } 40 | pre .attribute, 41 | pre .symbol, 42 | pre .symbol .string, 43 | pre .tag .title, 44 | pre .value, 45 | pre .css .tag { 46 | color: #f92672; 47 | } 48 | pre .number, 49 | pre .preprocessor, 50 | pre .pragma, 51 | pre .regexp { 52 | color: #ae81ff; 53 | } 54 | pre .tag .value, 55 | pre .string, 56 | pre .css .id, 57 | pre .subst, 58 | pre .haskell .type, 59 | pre .ruby .class .parent, 60 | pre .built_in, 61 | pre .sql .aggregate, 62 | pre .django .template_tag, 63 | pre .django .variable, 64 | pre .smalltalk .class, 65 | pre .django .filter .argument, 66 | pre .smalltalk .localvars, 67 | pre .smalltalk .array, 68 | pre .attr_selector, 69 | pre .pseudo, 70 | pre .addition, 71 | pre .stream, 72 | pre .envvar, 73 | pre .apache .tag, 74 | pre .apache .cbracket, 75 | pre .tex .command, 76 | pre .prompt { 77 | color: #e6db74; 78 | } 79 | pre .comment, 80 | pre .javadoc, 81 | pre .java .annotation, 82 | pre .python .decorator, 83 | pre .template_comment, 84 | pre .pi, 85 | pre .doctype, 86 | pre .deletion, 87 | pre .shebang, 88 | pre .apache .sqbracket, 89 | pre .tex .formula { 90 | color: #75715e; 91 | } 92 | pre .coffeescript .javascript, 93 | pre .javascript .xml, 94 | pre .tex .formula { 95 | opacity: 0.5; 96 | } 97 | pre .xml .javascript, 98 | pre .xml .vbscript, 99 | pre .xml .css, 100 | pre .xml .cdata { 101 | opacity: 0.5; 102 | } 103 | -------------------------------------------------------------------------------- /vendor/styles/obsidian.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Obsidian style 3 | * ported by Alexander Marenin (http://github.com/ioncreature) 4 | */ 5 | 6 | pre code { 7 | display: block; padding: 0.5em; 8 | background: #282B2E; 9 | } 10 | 11 | pre .keyword, 12 | pre .literal, 13 | pre .change, 14 | pre .winutils, 15 | pre .flow, 16 | pre .lisp .title, 17 | pre .clojure .built_in, 18 | pre .nginx .title, 19 | pre .css .id, 20 | pre .tex .special { 21 | color: #93C763; 22 | } 23 | 24 | pre .number { 25 | color: #FFCD22; 26 | } 27 | 28 | pre code { 29 | color: #E0E2E4; 30 | } 31 | 32 | pre .css .tag, 33 | pre .css .pseudo { 34 | color: #D0D2B5; 35 | } 36 | 37 | pre .attribute, 38 | pre code .constant { 39 | color: #668BB0; 40 | } 41 | 42 | pre .xml .attribute { 43 | color: #B3B689; 44 | } 45 | 46 | pre .xml .tag .value { 47 | color: #E8E2B7; 48 | } 49 | 50 | pre .code, 51 | pre .class .title, 52 | pre .header { 53 | color: white; 54 | } 55 | 56 | pre .class, 57 | pre .hexcolor { 58 | color: #93C763; 59 | } 60 | 61 | pre .regexp { 62 | color: #D39745; 63 | } 64 | 65 | pre .at_rule, 66 | pre .at_rule .keyword { 67 | color: #A082BD; 68 | } 69 | 70 | pre .doctype { 71 | color: #557182; 72 | } 73 | 74 | pre .link_url, 75 | pre .tag, 76 | pre .tag .title, 77 | pre .bullet, 78 | pre .subst, 79 | pre .emphasis, 80 | pre .haskell .type, 81 | pre .preprocessor, 82 | pre .pragma, 83 | pre .ruby .class .parent, 84 | pre .built_in, 85 | pre .sql .aggregate, 86 | pre .django .template_tag, 87 | pre .django .variable, 88 | pre .smalltalk .class, 89 | pre .javadoc, 90 | pre .django .filter .argument, 91 | pre .smalltalk .localvars, 92 | pre .smalltalk .array, 93 | pre .attr_selector, 94 | pre .pseudo, 95 | pre .addition, 96 | pre .stream, 97 | pre .envvar, 98 | pre .apache .tag, 99 | pre .apache .cbracket, 100 | pre .tex .command, 101 | pre .prompt { 102 | color: #8CBBAD; 103 | } 104 | 105 | pre .string { 106 | color: #EC7600; 107 | } 108 | 109 | pre .comment, 110 | pre .java .annotation, 111 | pre .blockquote, 112 | pre .horizontal_rule, 113 | pre .python .decorator, 114 | pre .template_comment, 115 | pre .pi, 116 | pre .deletion, 117 | pre .shebang, 118 | pre .apache .sqbracket, 119 | pre .tex .formula { 120 | color: #818E96; 121 | } 122 | 123 | pre .keyword, 124 | pre .literal, 125 | pre .css .id, 126 | pre .phpdoc, 127 | pre .title, 128 | pre .header, 129 | pre .haskell .type, 130 | pre .vbscript .built_in, 131 | pre .sql .aggregate, 132 | pre .rsl .built_in, 133 | pre .smalltalk .class, 134 | pre .diff .header, 135 | pre .chunk, 136 | pre .winutils, 137 | pre .bash .variable, 138 | pre .apache .tag, 139 | pre .tex .special, 140 | pre .request, 141 | pre .at_rule .keyword, 142 | pre .status { 143 | font-weight: bold; 144 | } 145 | 146 | pre .coffeescript .javascript, 147 | pre .javascript .xml, 148 | pre .tex .formula, 149 | pre .xml .javascript, 150 | pre .xml .vbscript, 151 | pre .xml .css, 152 | pre .xml .cdata { 153 | opacity: 0.5; 154 | } 155 | -------------------------------------------------------------------------------- /vendor/styles/pojoaque.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Pojoaque Style by Jason Tate 4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 5 | Based on Solarized Style from http://ethanschoonover.com/solarized 6 | 7 | */ 8 | 9 | pre code { 10 | display: block; padding: 0.5em; 11 | color: #DCCF8F; 12 | background: url(./pojoaque.jpg) repeat scroll left top #181914; 13 | } 14 | 15 | pre .comment, 16 | pre .template_comment, 17 | pre .diff .header, 18 | pre .doctype, 19 | pre .lisp .string, 20 | pre .javadoc { 21 | color: #586e75; 22 | font-style: italic; 23 | } 24 | 25 | pre .keyword, 26 | pre .css .rule .keyword, 27 | pre .winutils, 28 | pre .javascript .title, 29 | pre .method, 30 | pre .addition, 31 | pre .css .tag, 32 | pre .clojure .title, 33 | pre .nginx .title { 34 | color: #B64926; 35 | } 36 | 37 | pre .number, 38 | pre .command, 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula, 43 | pre .regexp, 44 | pre .hexcolor { 45 | color: #468966; 46 | } 47 | 48 | pre .title, 49 | pre .localvars, 50 | pre .function .title, 51 | pre .chunk, 52 | pre .decorator, 53 | pre .built_in, 54 | pre .lisp .title, 55 | pre .clojure .built_in, 56 | pre .identifier, 57 | pre .id { 58 | color: #FFB03B; 59 | } 60 | 61 | pre .attribute, 62 | pre .variable, 63 | pre .lisp .body, 64 | pre .smalltalk .number, 65 | pre .constant, 66 | pre .class .title, 67 | pre .parent, 68 | pre .haskell .type { 69 | color: #b58900; 70 | } 71 | 72 | pre .css .attribute { 73 | color: #b89859; 74 | } 75 | 76 | pre .css .number,pre .css .hexcolor{ 77 | color: #DCCF8F; 78 | } 79 | 80 | pre .css .class { 81 | color: #d3a60c; 82 | } 83 | 84 | pre .preprocessor, 85 | pre .pragma, 86 | pre .pi, 87 | pre .shebang, 88 | pre .symbol, 89 | pre .symbol .string, 90 | pre .diff .change, 91 | pre .special, 92 | pre .attr_selector, 93 | pre .important, 94 | pre .subst, 95 | pre .cdata { 96 | color: #cb4b16; 97 | } 98 | 99 | pre .deletion { 100 | color: #dc322f; 101 | } 102 | 103 | pre .tex .formula { 104 | background: #073642; 105 | } 106 | -------------------------------------------------------------------------------- /vendor/styles/pojoaque.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazerwalker/clojurescript-koans/c4713e3ccafad2229c5eae038d8bbf433d0d026e/vendor/styles/pojoaque.jpg -------------------------------------------------------------------------------- /vendor/styles/railscasts.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Railscasts-like style (c) Visoft, Inc. (Damien White) 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; 9 | padding: 0.5em; 10 | background: #232323; 11 | color: #E6E1DC; 12 | } 13 | 14 | pre .comment, 15 | pre .template_comment, 16 | pre .javadoc, 17 | pre .shebang { 18 | color: #BC9458; 19 | font-style: italic; 20 | } 21 | 22 | pre .keyword, 23 | pre .ruby .function .keyword, 24 | pre .request, 25 | pre .status, 26 | pre .nginx .title, 27 | pre .method, 28 | pre .list .title { 29 | color: #C26230; 30 | } 31 | 32 | pre .string, 33 | pre .number, 34 | pre .regexp, 35 | pre .tag .value, 36 | pre .cdata, 37 | pre .filter .argument, 38 | pre .attr_selector, 39 | pre .apache .cbracket, 40 | pre .date, 41 | pre .tex .command, 42 | pre .markdown .link_label { 43 | color: #A5C261; 44 | } 45 | 46 | pre .subst { 47 | color: #519F50; 48 | } 49 | 50 | pre .tag, 51 | pre .tag .keyword, 52 | pre .tag .title, 53 | pre .doctype, 54 | pre .sub .identifier, 55 | pre .pi, 56 | pre .input_number { 57 | color: #E8BF6A; 58 | } 59 | 60 | pre .identifier { 61 | color: #D0D0FF; 62 | } 63 | 64 | pre .class .title, 65 | pre .haskell .type, 66 | pre .smalltalk .class, 67 | pre .javadoctag, 68 | pre .yardoctag, 69 | pre .phpdoc { 70 | text-decoration: none; 71 | } 72 | 73 | pre .constant { 74 | color: #DA4939; 75 | } 76 | 77 | 78 | pre .symbol, 79 | pre .built_in, 80 | pre .ruby .symbol .string, 81 | pre .ruby .symbol .identifier, 82 | pre .markdown .link_url, 83 | pre .attribute { 84 | color: #6D9CBE; 85 | } 86 | 87 | pre .markdown .link_url { 88 | text-decoration: underline; 89 | } 90 | 91 | 92 | 93 | pre .params, 94 | pre .variable, 95 | pre .clojure .attribute { 96 | color: #D0D0FF; 97 | } 98 | 99 | pre .css .tag, 100 | pre .rules .property, 101 | pre .pseudo, 102 | pre .tex .special { 103 | color: #CDA869; 104 | } 105 | 106 | pre .css .class { 107 | color: #9B703F; 108 | } 109 | 110 | pre .rules .keyword { 111 | color: #C5AF75; 112 | } 113 | 114 | pre .rules .value { 115 | color: #CF6A4C; 116 | } 117 | 118 | pre .css .id { 119 | color: #8B98AB; 120 | } 121 | 122 | pre .annotation, 123 | pre .apache .sqbracket, 124 | pre .nginx .built_in { 125 | color: #9B859D; 126 | } 127 | 128 | pre .preprocessor, 129 | pre .preprocessor * 130 | pre .pragma { 131 | color: #8996A8 !important; 132 | } 133 | 134 | pre .hexcolor, 135 | pre .css .value .number { 136 | color: #A5C261; 137 | } 138 | 139 | pre .title, 140 | pre .decorator, 141 | pre .css .function { 142 | color: #FFC66D; 143 | } 144 | 145 | pre .diff .header, 146 | pre .chunk { 147 | background-color: #2F33AB; 148 | color: #E6E1DC; 149 | display: inline-block; 150 | width: 100%; 151 | } 152 | 153 | pre .diff .change { 154 | background-color: #4A410D; 155 | color: #F8F8F8; 156 | display: inline-block; 157 | width: 100%; 158 | } 159 | 160 | pre .addition { 161 | background-color: #144212; 162 | color: #E6E1DC; 163 | display: inline-block; 164 | width: 100%; 165 | } 166 | 167 | pre .deletion { 168 | background-color: #600; 169 | color: #E6E1DC; 170 | display: inline-block; 171 | width: 100%; 172 | } 173 | 174 | pre .coffeescript .javascript, 175 | pre .javascript .xml, 176 | pre .tex .formula, 177 | pre .xml .javascript, 178 | pre .xml .vbscript, 179 | pre .xml .css, 180 | pre .xml .cdata { 181 | opacity: 0.7; 182 | } 183 | -------------------------------------------------------------------------------- /vendor/styles/rainbow.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Style with support for rainbow parens 4 | 5 | */ 6 | 7 | pre ::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; } 8 | pre ::selection { background:#FF5E99; color:#fff; text-shadow: none; } 9 | 10 | pre code { 11 | display: block; padding: 0.5em; 12 | background: #474949; color: #D1D9E1; 13 | } 14 | 15 | 16 | pre .body, 17 | pre .collection { 18 | color: #D1D9E1; 19 | } 20 | 21 | pre .comment, 22 | pre .template_comment, 23 | pre .diff .header, 24 | pre .doctype, 25 | pre .lisp .string, 26 | pre .javadoc { 27 | color: #969896; 28 | font-style: italic; 29 | } 30 | 31 | pre .keyword, 32 | pre .clojure .attribute, 33 | pre .winutils, 34 | pre .javascript .title, 35 | pre .addition, 36 | pre .css .tag { 37 | color: #cc99cc; 38 | } 39 | 40 | pre .number { color: #f99157; } 41 | 42 | pre .command, 43 | pre .string, 44 | pre .tag .value, 45 | pre .phpdoc, 46 | pre .tex .formula, 47 | pre .regexp, 48 | pre .hexcolor { 49 | color: #8abeb7; 50 | } 51 | 52 | pre .title, 53 | pre .localvars, 54 | pre .function .title, 55 | pre .chunk, 56 | pre .decorator, 57 | pre .built_in, 58 | pre .lisp .title, 59 | pre .identifier 60 | { 61 | color: #b5bd68; 62 | } 63 | 64 | pre .class .keyword 65 | { 66 | color: #f2777a; 67 | } 68 | 69 | pre .variable, 70 | pre .lisp .body, 71 | pre .smalltalk .number, 72 | pre .constant, 73 | pre .class .title, 74 | pre .parent, 75 | pre .haskell .label, 76 | pre .id, 77 | pre .lisp .title, 78 | pre .clojure .title .built_in { 79 | color: #ffcc66; 80 | } 81 | 82 | pre .tag .title, 83 | pre .rules .property, 84 | pre .django .tag .keyword, 85 | pre .clojure .title .built_in { 86 | font-weight: bold; 87 | } 88 | 89 | pre .attribute, 90 | pre .clojure .title { 91 | color: #81a2be; 92 | } 93 | 94 | pre .preprocessor, 95 | pre .pragma, 96 | pre .pi, 97 | pre .shebang, 98 | pre .symbol, 99 | pre .symbol .string, 100 | pre .diff .change, 101 | pre .special, 102 | pre .attr_selector, 103 | pre .important, 104 | pre .subst, 105 | pre .cdata { 106 | color: #f99157; 107 | } 108 | 109 | pre .deletion { 110 | color: #dc322f; 111 | } 112 | 113 | pre .tex .formula { 114 | background: #eee8d5; 115 | } 116 | -------------------------------------------------------------------------------- /vendor/styles/school_book.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | School Book style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 15px 0.5em 0.5em 30px; 9 | font-size: 11px !important; 10 | line-height:16px !important; 11 | } 12 | 13 | pre{ 14 | background:#f6f6ae url(./school_book.png); 15 | border-top: solid 2px #d2e8b9; 16 | border-bottom: solid 1px #d2e8b9; 17 | } 18 | 19 | pre .keyword, 20 | pre .literal, 21 | pre .change, 22 | pre .winutils, 23 | pre .flow, 24 | pre .lisp .title, 25 | pre .clojure .built_in, 26 | pre .nginx .title, 27 | pre .tex .special { 28 | color:#005599; 29 | font-weight:bold; 30 | } 31 | 32 | pre code, 33 | pre .subst, 34 | pre .tag .keyword { 35 | color: #3E5915; 36 | } 37 | 38 | pre .string, 39 | pre .title, 40 | pre .haskell .type, 41 | pre .tag .value, 42 | pre .css .rules .value, 43 | pre .preprocessor, 44 | pre .pragma, 45 | pre .ruby .symbol, 46 | pre .ruby .symbol .string, 47 | pre .ruby .class .parent, 48 | pre .built_in, 49 | pre .sql .aggregate, 50 | pre .django .template_tag, 51 | pre .django .variable, 52 | pre .smalltalk .class, 53 | pre .javadoc, 54 | pre .ruby .string, 55 | pre .django .filter .argument, 56 | pre .smalltalk .localvars, 57 | pre .smalltalk .array, 58 | pre .attr_selector, 59 | pre .pseudo, 60 | pre .addition, 61 | pre .stream, 62 | pre .envvar, 63 | pre .apache .tag, 64 | pre .apache .cbracket, 65 | pre .nginx .built_in, 66 | pre .tex .command, 67 | pre .coffeescript .attribute { 68 | color: #2C009F; 69 | } 70 | 71 | pre .comment, 72 | pre .java .annotation, 73 | pre .python .decorator, 74 | pre .template_comment, 75 | pre .pi, 76 | pre .doctype, 77 | pre .deletion, 78 | pre .shebang, 79 | pre .apache .sqbracket { 80 | color: #E60415; 81 | } 82 | 83 | pre .keyword, 84 | pre .literal, 85 | pre .css .id, 86 | pre .phpdoc, 87 | pre .title, 88 | pre .haskell .type, 89 | pre .vbscript .built_in, 90 | pre .sql .aggregate, 91 | pre .rsl .built_in, 92 | pre .smalltalk .class, 93 | pre .xml .tag .title, 94 | pre .diff .header, 95 | pre .chunk, 96 | pre .winutils, 97 | pre .bash .variable, 98 | pre .apache .tag, 99 | pre .tex .command, 100 | pre .request, 101 | pre .status { 102 | font-weight: bold; 103 | } 104 | 105 | pre .coffeescript .javascript, 106 | pre .javascript .xml, 107 | pre .tex .formula, 108 | pre .xml .javascript, 109 | pre .xml .vbscript, 110 | pre .xml .css, 111 | pre .xml .cdata { 112 | opacity: 0.5; 113 | } 114 | -------------------------------------------------------------------------------- /vendor/styles/school_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazerwalker/clojurescript-koans/c4713e3ccafad2229c5eae038d8bbf433d0d026e/vendor/styles/school_book.png -------------------------------------------------------------------------------- /vendor/styles/solarized_dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #002b36; color: #839496; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .diff .header, 15 | pre .doctype, 16 | pre .pi, 17 | pre .lisp .string, 18 | pre .javadoc { 19 | color: #586e75; 20 | font-style: italic; 21 | } 22 | 23 | pre .keyword, 24 | pre .winutils, 25 | pre .method, 26 | pre .addition, 27 | pre .css .tag, 28 | pre .request, 29 | pre .status, 30 | pre .nginx .title { 31 | color: #859900; 32 | } 33 | 34 | pre .number, 35 | pre .command, 36 | pre .string, 37 | pre .tag .value, 38 | pre .rules .value, 39 | pre .phpdoc, 40 | pre .tex .formula, 41 | pre .regexp, 42 | pre .hexcolor { 43 | color: #2aa198; 44 | } 45 | 46 | pre .title, 47 | pre .localvars, 48 | pre .chunk, 49 | pre .decorator, 50 | pre .built_in, 51 | pre .identifier, 52 | pre .vhdl .literal, 53 | pre .id, 54 | pre .css .function { 55 | color: #268bd2; 56 | } 57 | 58 | pre .attribute, 59 | pre .variable, 60 | pre .lisp .body, 61 | pre .smalltalk .number, 62 | pre .constant, 63 | pre .class .title, 64 | pre .parent, 65 | pre .haskell .type { 66 | color: #b58900; 67 | } 68 | 69 | pre .preprocessor, 70 | pre .preprocessor .keyword, 71 | pre .pragma, 72 | pre .shebang, 73 | pre .symbol, 74 | pre .symbol .string, 75 | pre .diff .change, 76 | pre .special, 77 | pre .attr_selector, 78 | pre .important, 79 | pre .subst, 80 | pre .cdata, 81 | pre .clojure .title, 82 | pre .css .pseudo { 83 | color: #cb4b16; 84 | } 85 | 86 | pre .deletion { 87 | color: #dc322f; 88 | } 89 | 90 | pre .tex .formula { 91 | background: #073642; 92 | } 93 | -------------------------------------------------------------------------------- /vendor/styles/solarized_light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | code { 8 | display: block; padding: 0.5em; 9 | background: #fdf6e3; color: #657b83; 10 | } 11 | 12 | .comment, 13 | .template_comment, 14 | .diff .header, 15 | .doctype, 16 | .pi, 17 | .lisp .string, 18 | .javadoc { 19 | color: #93a1a1; 20 | font-style: italic; 21 | } 22 | 23 | .keyword, 24 | .winutils, 25 | .method, 26 | .addition, 27 | .css .tag, 28 | .request, 29 | .status, 30 | .nginx .title { 31 | color: #859900; 32 | } 33 | 34 | .number, 35 | .command, 36 | .string, 37 | .tag .value, 38 | .rules .value, 39 | .phpdoc, 40 | .tex .formula, 41 | .regexp, 42 | .hexcolor { 43 | color: #2aa198; 44 | } 45 | 46 | .title, 47 | .localvars, 48 | .chunk, 49 | .decorator, 50 | .built_in, 51 | .identifier, 52 | .vhdl .literal, 53 | .id, 54 | .css .function { 55 | color: #268bd2; 56 | } 57 | 58 | .attribute, 59 | .variable, 60 | .lisp .body, 61 | .smalltalk .number, 62 | .constant, 63 | .class .title, 64 | .parent, 65 | .haskell .type { 66 | color: #b58900; 67 | } 68 | 69 | .preprocessor, 70 | .preprocessor .keyword, 71 | .pragma, 72 | .shebang, 73 | .symbol, 74 | .symbol .string, 75 | .diff .change, 76 | .special, 77 | .attr_selector, 78 | .important, 79 | .subst, 80 | .cdata, 81 | .clojure .title, 82 | .css .pseudo { 83 | color: #cb4b16; 84 | } 85 | 86 | .deletion { 87 | color: #dc322f; 88 | } 89 | 90 | .tex .formula { 91 | background: #eee8d5; 92 | } 93 | -------------------------------------------------------------------------------- /vendor/styles/sunburst.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sunburst-like style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #000; color: #f8f8f8; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc { 15 | color: #aeaeae; 16 | font-style: italic; 17 | } 18 | 19 | pre .keyword, 20 | pre .ruby .function .keyword, 21 | pre .request, 22 | pre .status, 23 | pre .nginx .title { 24 | color: #E28964; 25 | } 26 | 27 | pre .function .keyword, 28 | pre .sub .keyword, 29 | pre .method, 30 | pre .list .title { 31 | color: #99CF50; 32 | } 33 | 34 | pre .string, 35 | pre .tag .value, 36 | pre .cdata, 37 | pre .filter .argument, 38 | pre .attr_selector, 39 | pre .apache .cbracket, 40 | pre .date, 41 | pre .tex .command, 42 | pre .coffeescript .attribute { 43 | color: #65B042; 44 | } 45 | 46 | pre .subst { 47 | color: #DAEFA3; 48 | } 49 | 50 | pre .regexp { 51 | color: #E9C062; 52 | } 53 | 54 | pre .title, 55 | pre .sub .identifier, 56 | pre .pi, 57 | pre .tag, 58 | pre .tag .keyword, 59 | pre .decorator, 60 | pre .shebang, 61 | pre .prompt { 62 | color: #89BDFF; 63 | } 64 | 65 | pre .class .title, 66 | pre .haskell .type, 67 | pre .smalltalk .class, 68 | pre .javadoctag, 69 | pre .yardoctag, 70 | pre .phpdoc { 71 | text-decoration: underline; 72 | } 73 | 74 | pre .symbol, 75 | pre .ruby .symbol .string, 76 | pre .number { 77 | color: #3387CC; 78 | } 79 | 80 | pre .params, 81 | pre .variable, 82 | pre .clojure .attribute { 83 | color: #3E87E3; 84 | } 85 | 86 | pre .css .tag, 87 | pre .rules .property, 88 | pre .pseudo, 89 | pre .tex .special { 90 | color: #CDA869; 91 | } 92 | 93 | pre .css .class { 94 | color: #9B703F; 95 | } 96 | 97 | pre .rules .keyword { 98 | color: #C5AF75; 99 | } 100 | 101 | pre .rules .value { 102 | color: #CF6A4C; 103 | } 104 | 105 | pre .css .id { 106 | color: #8B98AB; 107 | } 108 | 109 | pre .annotation, 110 | pre .apache .sqbracket, 111 | pre .nginx .built_in { 112 | color: #9B859D; 113 | } 114 | 115 | pre .preprocessor, 116 | pre .pragma { 117 | color: #8996A8; 118 | } 119 | 120 | pre .hexcolor, 121 | pre .css .value .number { 122 | color: #DD7B3B; 123 | } 124 | 125 | pre .css .function { 126 | color: #DAD085; 127 | } 128 | 129 | pre .diff .header, 130 | pre .chunk, 131 | pre .tex .formula { 132 | background-color: #0E2231; 133 | color: #F8F8F8; 134 | font-style: italic; 135 | } 136 | 137 | pre .diff .change { 138 | background-color: #4A410D; 139 | color: #F8F8F8; 140 | } 141 | 142 | pre .addition { 143 | background-color: #253B22; 144 | color: #F8F8F8; 145 | } 146 | 147 | pre .deletion { 148 | background-color: #420E09; 149 | color: #F8F8F8; 150 | } 151 | 152 | pre .coffeescript .javascript, 153 | pre .javascript .xml, 154 | pre .tex .formula, 155 | pre .xml .javascript, 156 | pre .xml .vbscript, 157 | pre .xml .css, 158 | pre .xml .cdata { 159 | opacity: 0.5; 160 | } 161 | -------------------------------------------------------------------------------- /vendor/styles/tomorrow-night-blue.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Blue Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | .tomorrow-comment, pre .comment, pre .title { 6 | color: #7285b7; 7 | } 8 | 9 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 10 | color: #ff9da4; 11 | } 12 | 13 | .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant { 14 | color: #ffc58f; 15 | } 16 | 17 | .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute { 18 | color: #ffeead; 19 | } 20 | 21 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 22 | color: #d1f1a9; 23 | } 24 | 25 | .tomorrow-aqua, pre .css .hexcolor { 26 | color: #99ffff; 27 | } 28 | 29 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 30 | color: #bbdaff; 31 | } 32 | 33 | .tomorrow-purple, pre .keyword, pre .javascript .function { 34 | color: #ebbbff; 35 | } 36 | 37 | pre code { 38 | display: block; 39 | background: #002451; 40 | color: white; 41 | padding: 0.5em; 42 | } 43 | 44 | pre .coffeescript .javascript, 45 | pre .javascript .xml, 46 | pre .tex .formula, 47 | pre .xml .javascript, 48 | pre .xml .vbscript, 49 | pre .xml .css, 50 | pre .xml .cdata { 51 | opacity: 0.5; 52 | } 53 | -------------------------------------------------------------------------------- /vendor/styles/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Bright Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | .tomorrow-comment, pre .comment, pre .title { 5 | color: #969896; 6 | } 7 | 8 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 9 | color: #d54e53; 10 | } 11 | 12 | .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant { 13 | color: #e78c45; 14 | } 15 | 16 | .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute { 17 | color: #e7c547; 18 | } 19 | 20 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 21 | color: #b9ca4a; 22 | } 23 | 24 | .tomorrow-aqua, pre .css .hexcolor { 25 | color: #70c0b1; 26 | } 27 | 28 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 29 | color: #7aa6da; 30 | } 31 | 32 | .tomorrow-purple, pre .keyword, pre .javascript .function { 33 | color: #c397d8; 34 | } 35 | 36 | pre code { 37 | display: block; 38 | background: black; 39 | color: #eaeaea; 40 | padding: 0.5em; 41 | } 42 | 43 | pre .coffeescript .javascript, 44 | pre .javascript .xml, 45 | pre .tex .formula, 46 | pre .xml .javascript, 47 | pre .xml .vbscript, 48 | pre .xml .css, 49 | pre .xml .cdata { 50 | opacity: 0.5; 51 | } 52 | -------------------------------------------------------------------------------- /vendor/styles/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Eighties Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | .tomorrow-comment, pre .comment, pre .title { 5 | color: #999999; 6 | } 7 | 8 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 9 | color: #f2777a; 10 | } 11 | 12 | .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant { 13 | color: #f99157; 14 | } 15 | 16 | .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute { 17 | color: #ffcc66; 18 | } 19 | 20 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 21 | color: #99cc99; 22 | } 23 | 24 | .tomorrow-aqua, pre .css .hexcolor { 25 | color: #66cccc; 26 | } 27 | 28 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 29 | color: #6699cc; 30 | } 31 | 32 | .tomorrow-purple, pre .keyword, pre .javascript .function { 33 | color: #cc99cc; 34 | } 35 | 36 | pre code { 37 | display: block; 38 | background: #2d2d2d; 39 | color: #cccccc; 40 | padding: 0.5em; 41 | } 42 | 43 | pre .coffeescript .javascript, 44 | pre .javascript .xml, 45 | pre .tex .formula, 46 | pre .xml .javascript, 47 | pre .xml .vbscript, 48 | pre .xml .css, 49 | pre .xml .cdata { 50 | opacity: 0.5; 51 | } 52 | -------------------------------------------------------------------------------- /vendor/styles/tomorrow-night.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | .tomorrow-comment, pre .comment, pre .title { 6 | color: #969896; 7 | } 8 | 9 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 10 | color: #cc6666; 11 | } 12 | 13 | .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant { 14 | color: #de935f; 15 | } 16 | 17 | .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute { 18 | color: #f0c674; 19 | } 20 | 21 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 22 | color: #b5bd68; 23 | } 24 | 25 | .tomorrow-aqua, pre .css .hexcolor { 26 | color: #8abeb7; 27 | } 28 | 29 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 30 | color: #81a2be; 31 | } 32 | 33 | .tomorrow-purple, pre .keyword, pre .javascript .function { 34 | color: #b294bb; 35 | } 36 | 37 | pre code { 38 | display: block; 39 | background: #1d1f21; 40 | color: #c5c8c6; 41 | padding: 0.5em; 42 | } 43 | 44 | pre .coffeescript .javascript, 45 | pre .javascript .xml, 46 | pre .tex .formula, 47 | pre .xml .javascript, 48 | pre .xml .vbscript, 49 | pre .xml .css, 50 | pre .xml .cdata { 51 | opacity: 0.5; 52 | } 53 | -------------------------------------------------------------------------------- /vendor/styles/tomorrow.css: -------------------------------------------------------------------------------- 1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 2 | .tomorrow-comment, pre .comment, pre .title { 3 | color: #8e908c; 4 | } 5 | 6 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 7 | color: #c82829; 8 | } 9 | 10 | .tomorrow-orange, pre .number, pre .preprocessor, pre .pragma, pre .built_in, pre .literal, pre .params, pre .constant { 11 | color: #f5871f; 12 | } 13 | 14 | .tomorrow-yellow, pre .ruby .class .title, pre .css .rules .attribute { 15 | color: #eab700; 16 | } 17 | 18 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 19 | color: #718c00; 20 | } 21 | 22 | .tomorrow-aqua, pre .css .hexcolor { 23 | color: #3e999f; 24 | } 25 | 26 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 27 | color: #4271ae; 28 | } 29 | 30 | .tomorrow-purple, pre .keyword, pre .javascript .function { 31 | color: #8959a8; 32 | } 33 | 34 | pre code { 35 | display: block; 36 | background: white; 37 | color: #4d4d4c; 38 | padding: 0.5em; 39 | } 40 | 41 | pre .coffeescript .javascript, 42 | pre .javascript .xml, 43 | pre .tex .formula, 44 | pre .xml .javascript, 45 | pre .xml .vbscript, 46 | pre .xml .css, 47 | pre .xml .cdata { 48 | opacity: 0.5; 49 | } 50 | -------------------------------------------------------------------------------- /vendor/styles/vs.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | */ 6 | pre code { 7 | display: block; padding: 0.5em; 8 | background: white; color: black; 9 | } 10 | 11 | pre .comment, 12 | pre .annotation, 13 | pre .template_comment, 14 | pre .diff .header, 15 | pre .chunk, 16 | pre .apache .cbracket { 17 | color: rgb(0, 128, 0); 18 | } 19 | 20 | pre .keyword, 21 | pre .id, 22 | pre .built_in, 23 | pre .smalltalk .class, 24 | pre .winutils, 25 | pre .bash .variable, 26 | pre .tex .command, 27 | pre .request, 28 | pre .status, 29 | pre .nginx .title, 30 | pre .xml .tag, 31 | pre .xml .tag .value { 32 | color: rgb(0, 0, 255); 33 | } 34 | 35 | pre .string, 36 | pre .title, 37 | pre .parent, 38 | pre .tag .value, 39 | pre .rules .value, 40 | pre .rules .value .number, 41 | pre .ruby .symbol, 42 | pre .ruby .symbol .string, 43 | pre .aggregate, 44 | pre .template_tag, 45 | pre .django .variable, 46 | pre .addition, 47 | pre .flow, 48 | pre .stream, 49 | pre .apache .tag, 50 | pre .date, 51 | pre .tex .formula, 52 | pre .coffeescript .attribute { 53 | color: rgb(163, 21, 21); 54 | } 55 | 56 | pre .ruby .string, 57 | pre .decorator, 58 | pre .filter .argument, 59 | pre .localvars, 60 | pre .array, 61 | pre .attr_selector, 62 | pre .pseudo, 63 | pre .pi, 64 | pre .doctype, 65 | pre .deletion, 66 | pre .envvar, 67 | pre .shebang, 68 | pre .preprocessor, 69 | pre .pragma, 70 | pre .userType, 71 | pre .apache .sqbracket, 72 | pre .nginx .built_in, 73 | pre .tex .special, 74 | pre .prompt { 75 | color: rgb(43, 145, 175); 76 | } 77 | 78 | pre .phpdoc, 79 | pre .javadoc, 80 | pre .xmlDocTag { 81 | color: rgb(128, 128, 128); 82 | } 83 | 84 | pre .vhdl .typename { font-weight: bold; } 85 | pre .vhdl .string { color: #666666; } 86 | pre .vhdl .literal { color: rgb(163, 21, 21); } 87 | pre .vhdl .attribute { color: #00B0E8; } 88 | 89 | pre .xml .attribute { color: rgb(255, 0, 0); } 90 | -------------------------------------------------------------------------------- /vendor/styles/xcode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | XCode style (c) Angel Garcia 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #fff; color: black; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc, 15 | pre .comment * { 16 | color: rgb(0,106,0); 17 | } 18 | 19 | pre .keyword, 20 | pre .literal, 21 | pre .nginx .title { 22 | color: rgb(170,13,145); 23 | } 24 | pre .method, 25 | pre .list .title, 26 | pre .tag .title, 27 | pre .setting .value, 28 | pre .winutils, 29 | pre .tex .command, 30 | pre .http .title, 31 | pre .request, 32 | pre .status { 33 | color: #008; 34 | } 35 | 36 | pre .envvar, 37 | pre .tex .special { 38 | color: #660; 39 | } 40 | 41 | pre .string { 42 | color: rgb(196,26,22); 43 | } 44 | pre .tag .value, 45 | pre .cdata, 46 | pre .filter .argument, 47 | pre .attr_selector, 48 | pre .apache .cbracket, 49 | pre .date, 50 | pre .regexp { 51 | color: #080; 52 | } 53 | 54 | pre .sub .identifier, 55 | pre .pi, 56 | pre .tag, 57 | pre .tag .keyword, 58 | pre .decorator, 59 | pre .ini .title, 60 | pre .shebang, 61 | pre .prompt, 62 | pre .hexcolor, 63 | pre .rules .value, 64 | pre .css .value .number, 65 | pre .symbol, 66 | pre .symbol .string, 67 | pre .number, 68 | pre .css .function, 69 | pre .clojure .title, 70 | pre .clojure .built_in, 71 | pre .function .title, 72 | pre .coffeescript .attribute { 73 | color: rgb(28,0,207); 74 | } 75 | 76 | pre .class .title, 77 | pre .haskell .type, 78 | pre .smalltalk .class, 79 | pre .javadoctag, 80 | pre .yardoctag, 81 | pre .phpdoc, 82 | pre .typename, 83 | pre .tag .attribute, 84 | pre .doctype, 85 | pre .class .id, 86 | pre .built_in, 87 | pre .setting, 88 | pre .params, 89 | pre .clojure .attribute { 90 | color: rgb(92,38,153); 91 | } 92 | 93 | pre .variable { 94 | color: rgb(63,110,116); 95 | } 96 | pre .css .tag, 97 | pre .rules .property, 98 | pre .pseudo, 99 | pre .subst { 100 | color: #000; 101 | } 102 | 103 | pre .css .class, pre .css .id { 104 | color: #9B703F; 105 | } 106 | 107 | pre .value .important { 108 | color: #ff7700; 109 | font-weight: bold; 110 | } 111 | 112 | pre .rules .keyword { 113 | color: #C5AF75; 114 | } 115 | 116 | pre .annotation, 117 | pre .apache .sqbracket, 118 | pre .nginx .built_in { 119 | color: #9B859D; 120 | } 121 | 122 | pre .preprocessor, 123 | pre .preprocessor *, 124 | pre .pragma { 125 | color: rgb(100,56,32); 126 | } 127 | 128 | pre .tex .formula { 129 | background-color: #EEE; 130 | font-style: italic; 131 | } 132 | 133 | pre .diff .header, 134 | pre .chunk { 135 | color: #808080; 136 | font-weight: bold; 137 | } 138 | 139 | pre .diff .change { 140 | background-color: #BCCFF9; 141 | } 142 | 143 | pre .addition { 144 | background-color: #BAEEBA; 145 | } 146 | 147 | pre .deletion { 148 | background-color: #FFC8BD; 149 | } 150 | 151 | pre .comment .yardoctag { 152 | font-weight: bold; 153 | } 154 | 155 | pre .method .id { 156 | color: #000; 157 | } 158 | -------------------------------------------------------------------------------- /vendor/styles/zenburn.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov 4 | based on dark.css by Ivan Sagalaev 5 | 6 | */ 7 | 8 | pre code { 9 | display: block; padding: 0.5em; 10 | background: #3F3F3F; 11 | color: #DCDCDC; 12 | } 13 | 14 | pre .keyword, 15 | pre .tag, 16 | pre .css .class, 17 | pre .css .id, 18 | pre .lisp .title, 19 | pre .nginx .title, 20 | pre .request, 21 | pre .status, 22 | pre .clojure .attribute { 23 | color: #E3CEAB; 24 | } 25 | 26 | pre .django .template_tag, 27 | pre .django .variable, 28 | pre .django .filter .argument { 29 | color: #DCDCDC; 30 | } 31 | 32 | pre .number, 33 | pre .date { 34 | color: #8CD0D3; 35 | } 36 | 37 | pre .dos .envvar, 38 | pre .dos .stream, 39 | pre .variable, 40 | pre .apache .sqbracket { 41 | color: #EFDCBC; 42 | } 43 | 44 | pre .dos .flow, 45 | pre .diff .change, 46 | pre .python .exception, 47 | pre .python .built_in, 48 | pre .literal, 49 | pre .tex .special { 50 | color: #EFEFAF; 51 | } 52 | 53 | pre .diff .chunk, 54 | pre .subst { 55 | color: #8F8F8F; 56 | } 57 | 58 | pre .dos .keyword, 59 | pre .python .decorator, 60 | pre .title, 61 | pre .haskell .type, 62 | pre .diff .header, 63 | pre .ruby .class .parent, 64 | pre .apache .tag, 65 | pre .nginx .built_in, 66 | pre .tex .command, 67 | pre .prompt { 68 | color: #efef8f; 69 | } 70 | 71 | pre .dos .winutils, 72 | pre .ruby .symbol, 73 | pre .ruby .symbol .string, 74 | pre .ruby .string { 75 | color: #DCA3A3; 76 | } 77 | 78 | pre .diff .deletion, 79 | pre .string, 80 | pre .tag .value, 81 | pre .preprocessor, 82 | pre .pragma, 83 | pre .built_in, 84 | pre .sql .aggregate, 85 | pre .javadoc, 86 | pre .smalltalk .class, 87 | pre .smalltalk .localvars, 88 | pre .smalltalk .array, 89 | pre .css .rules .value, 90 | pre .attr_selector, 91 | pre .pseudo, 92 | pre .apache .cbracket, 93 | pre .tex .formula, 94 | pre .coffeescript .attribute { 95 | color: #CC9393; 96 | } 97 | 98 | pre .shebang, 99 | pre .diff .addition, 100 | pre .comment, 101 | pre .java .annotation, 102 | pre .template_comment, 103 | pre .pi, 104 | pre .doctype { 105 | color: #7F9F7F; 106 | } 107 | 108 | pre .coffeescript .javascript, 109 | pre .javascript .xml, 110 | pre .tex .formula, 111 | pre .xml .javascript, 112 | pre .xml .vbscript, 113 | pre .xml .css, 114 | pre .xml .cdata { 115 | opacity: 0.5; 116 | } 117 | 118 | --------------------------------------------------------------------------------