├── .gitignore
├── .gitmodules
├── .travis.yml
├── LICENSE
├── README.md
├── example
├── README.md
├── project.clj
├── src
│ └── example
│ │ └── core.clj
└── test
│ ├── documentation
│ ├── example
│ │ ├── component.clj
│ │ ├── home.clj
│ │ ├── quickstart.clj
│ │ ├── scheduler.clj
│ │ └── watch.clj
│ ├── logic_tut
│ │ └── index.clj
│ ├── on_lisp
│ │ ├── book.clj
│ │ ├── ch1_the_extensible_language.clj
│ │ └── ch2_functions.clj
│ └── short
│ │ ├── t1_global.clj
│ │ ├── t2_article.clj
│ │ ├── t3_namespaces.clj
│ │ ├── t4_numbers.clj
│ │ ├── t5_references.clj
│ │ ├── t6_stencil.clj
│ │ ├── t7_pluggable.clj
│ │ └── t8_citation.clj
│ └── example
│ └── core_test.clj
├── hydrox.graffle
├── lein
├── .gitignore
├── LICENSE
├── docs
│ ├── css
│ │ ├── rdash.min.css
│ │ └── scrollspy.css
│ ├── img
│ │ ├── favicon.png
│ │ ├── logo-white.png
│ │ └── logo.png
│ ├── js
│ │ └── angular-highlightjs.min.js
│ └── sample-document.html
├── project.clj
├── resources
│ └── hydrox
│ │ ├── sample.edn
│ │ ├── template
│ │ ├── article.html
│ │ ├── assets
│ │ │ ├── css
│ │ │ │ ├── rdash.min.css
│ │ │ │ └── scrollspy.css
│ │ │ ├── img
│ │ │ │ ├── favicon.png
│ │ │ │ ├── logo-white.png
│ │ │ │ └── logo.png
│ │ │ └── js
│ │ │ │ └── angular-highlightjs.min.js
│ │ └── partials
│ │ │ ├── deps-web.html
│ │ │ └── navbar.html
│ │ └── test
│ │ └── documentation
│ │ └── sample_document.clj
├── src
│ └── leiningen
│ │ ├── hydrox.clj
│ │ └── hydrox
│ │ ├── init.clj
│ │ └── setup.clj
├── template
│ ├── article.html
│ ├── assets
│ │ ├── css
│ │ │ ├── rdash.min.css
│ │ │ └── scrollspy.css
│ │ ├── img
│ │ │ ├── favicon.png
│ │ │ ├── logo-white.png
│ │ │ └── logo.png
│ │ └── js
│ │ │ └── angular-highlightjs.min.js
│ └── partials
│ │ ├── deps-web.html
│ │ └── navbar.html
└── test
│ └── documentation
│ └── sample_document.clj
├── project.clj
├── src
└── hydrox
│ ├── analyse.clj
│ ├── analyse
│ ├── common.clj
│ ├── source.clj
│ ├── test.clj
│ └── test
│ │ ├── clojure.clj
│ │ ├── common.clj
│ │ └── midje.clj
│ ├── common
│ ├── data.clj
│ └── util.clj
│ ├── core.clj
│ ├── core
│ ├── patch.clj
│ └── regulator.clj
│ ├── doc.clj
│ ├── doc
│ ├── checks.clj
│ ├── collect.clj
│ ├── link.clj
│ ├── link
│ │ ├── anchors.clj
│ │ ├── namespaces.clj
│ │ ├── numbers.clj
│ │ ├── references.clj
│ │ ├── stencil.clj
│ │ └── tags.clj
│ ├── parse.clj
│ ├── render.clj
│ ├── render
│ │ ├── article.clj
│ │ ├── navigation.clj
│ │ ├── toc.clj
│ │ └── util.clj
│ └── structure.clj
│ ├── meta.clj
│ └── meta
│ └── util.clj
├── template
├── article.html
├── assets
│ ├── css
│ │ ├── rdash.min.css
│ │ └── scrollspy.css
│ ├── img
│ │ ├── big.png
│ │ ├── favicon.png
│ │ ├── hydrox-overview.png
│ │ ├── hydrox.png
│ │ ├── logo-white.png
│ │ └── logo.png
│ └── js
│ │ └── angular-highlightjs.min.js
└── partials
│ ├── deps-web.html
│ └── navbar.html
└── test
├── documentation
├── hydrox_guide.clj
├── hydrox_guide
│ ├── api.clj
│ └── bug_example.clj
└── sample_document.clj
└── hydrox
├── analyse
├── source_test.clj
├── test
│ ├── clojure_test.clj
│ ├── common_test.clj
│ └── midje_test.clj
└── test_test.clj
├── analyse_test.clj
├── common
├── data_test.clj
└── util_test.clj
├── core
└── regulator_test.clj
├── core_test.clj
├── doc
├── checks_test.clj
├── collect_test.clj
├── link
│ ├── anchors_test.clj
│ ├── namespaces_test.clj
│ ├── numbers_test.clj
│ ├── references_test.clj
│ ├── stencil_test.clj
│ └── tags_test.clj
├── parse_test.clj
├── render
│ └── util_test.clj
├── render_test.clj
└── structure_test.clj
├── doc_test.clj
├── meta
└── util_test.clj
└── meta_test.clj
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | /classes
3 | /checkouts
4 | pom.xml
5 | pom.xml.asc
6 | *.jar
7 | *.class
8 | /.lein-*
9 | /.nrepl-port
10 | .hgignore
11 | .hg/
12 | *.*#
13 | .#*
14 | .DS_folio
15 | ./*.html
16 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "docs"]
2 | path = docs
3 | url = https://github.com/helpshift/hydrox.git
4 | branch = gh-pages
5 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: clojure
2 | lein: lein2
3 | script:
4 | - lein2 midje
5 | notifications:
6 | email:
7 | recipients:
8 | - chris@helpshift.com
9 | - bg@helpshift.com
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hydrox
2 |
3 | [](https://travis-ci.org/helpshift/hydrox)
4 |
5 | dive deeper into your code
6 |
7 | [](http://helpshift.github.io/hydrox)
8 |
9 | ## Installation
10 |
11 | In your `project.clj`, add hydrox to the `[:profiles :dev :dependencies]` entry:
12 |
13 | ```clojure
14 | (defproject ...
15 | ...
16 | :plugins ["lein-hydrox" "0.1.15"]
17 | :profiles {:dev {:dependencies [...
18 | [helpshift/hydrox "0.1.15"]
19 | ...]}}
20 | ...)
21 | ```
22 |
23 | ## Leiningen
24 |
25 | To initialise a project:
26 |
27 | ```shell
28 | lein hydrox init
29 | ```
30 |
31 | To generate documentation (watches project for changes and updates documentation accordingly):
32 |
33 | ```shell
34 | lein hydrox
35 | ```
36 |
37 | ## Tutorials
38 |
39 | - [0 - Introduction](https://youtu.be/3MIaucjfJcE)
40 | - [1 - Getting Started](https://youtu.be/p93LmHOzy6Q)
41 |
42 | ## Overview
43 |
44 | [hydrox](https://www.github.com/helpshift/hydrox) assists in the transmission of knowledge around a clojure project, providing in-repl management of documentation, docstrings and metadata through the reuse/repurposing of test code. The tool allows for a design-orientated workflow for the programming process, blurring the boundaries between design, development, testing and documentation.
45 |
46 | 
47 |
48 | Please see the [docs](http://helpshift.github.io/hydrox) for more information (generated using itself).
49 |
50 | ## Links and References:
51 |
52 | - the generated website for [hara](https://www.github.com/zcaudate/hara) can be seen [here](http://docs.caudate.me/hara)
53 |
54 | - the `.html` [output](http://helpshift.github.io/hydrox/sample-document.html) can be seen for a sample `.clj` [input](https://github.com/helpshift/hydrox/blob/master/test/documentation/sample_document.clj)
55 |
56 | ## License
57 |
58 | Copyright © 2015 [Helpshift](https://www.helpshift.com/)
59 |
60 | Distributed under the Eclipse Public License either version 1.0 or (at
61 | your option) any later version.
62 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | This is an example README
2 |
--------------------------------------------------------------------------------
/example/project.clj:
--------------------------------------------------------------------------------
1 | (defproject example "0.1.0"
2 | :description "FIXME: write description"
3 | :url "http://example.com/FIXME"
4 | :license {:name "Eclipse Public License"
5 | :url "http://www.eclipse.org/legal/epl-v10.html"}
6 | :dependencies [[org.clojure/clojure "1.6.0"]
7 | [hara "2.2.0-SNAPSHOT"]]
8 | :documentation {:type :portfolio
9 | :name "example"
10 | :output "doc"
11 | :description "code patterns and utilities"
12 | :tracking "UA-31320512-2"
13 | :owners [{:name "Chris Zheng"
14 | :email "z@caudate.me"
15 | :website "http://z.caudate.me"}]
16 | :paths ["test/documentation"]
17 | :files {"home"
18 | {:input "test/documentation/example/home.clj"}
19 | "logic"
20 | {:input "test/documentation/logic_tut/index.clj"
21 | :title "Relational and Logic Programming"}
22 | "on-lisp"
23 | {:input "test/documentation/on_lisp/book.clj"}
24 | "quickstart"
25 | {:input "test/documentation/example/quickstart.clj"}
26 | "component"
27 | {:input "test/documentation/example/component.clj"}
28 | "watch"
29 | {:input "test/documentation/example/watch.clj"}
30 | "scheduler"
31 | {:input "test/documentation/example/scheduler.clj"}}
32 | :html {:logo "hara.png"
33 | :theme "clean"
34 | :home "home"
35 | :navigation ["quickstart"
36 | "on-lisp"
37 | ["guides" ["component"
38 | "ova"
39 | "watch"
40 | "scheduler"]]
41 | {:link "api", :text "api"}
42 | {:link "https://gitter.im/zcaudate/hara",
43 | :text "support"}
44 | {:link "https://www.github.com/zcaudate/hara",
45 | :text "source"}]}
46 | :link {:auto-tag true
47 | :auto-number true}})
48 |
--------------------------------------------------------------------------------
/example/src/example/core.clj:
--------------------------------------------------------------------------------
1 | (ns example.core)
2 |
3 | (defn foo
4 | "I don't do a whole lot."
5 | [x]
6 | (println x "Hello, World!"))
7 |
--------------------------------------------------------------------------------
/example/test/documentation/example/component.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.example.component
2 | (:use midje.sweet))
3 |
--------------------------------------------------------------------------------
/example/test/documentation/example/quickstart.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.example.quickstart
2 | (:use midje.sweet))
3 |
--------------------------------------------------------------------------------
/example/test/documentation/example/scheduler.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.example.scheduler
2 | (:use midje.sweet))
3 |
--------------------------------------------------------------------------------
/example/test/documentation/example/watch.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.example.watch
2 | (:use midje.sweet))
3 |
--------------------------------------------------------------------------------
/example/test/documentation/logic_tut/index.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.logic-tut.index
2 | (:use midje.sweet))
3 |
4 | [[:chapter {:title "Introduction"}]]
5 |
6 | "This tutorial will guide you through the magic and fun of combining relational programming
7 | (also known as logic programming) with functional programming. This tutorial does not assume
8 | that you have any knowledge of Lisp, Clojure, Java, or even functional programming. The only
9 | thing this tutorial assumes is that you are not afraid of using the command line and you have
10 | used at least one programming language before in your life."
11 |
12 | [[:section {:title "Why Logic Programming?"}]]
13 |
14 | "What's the point of writing programs in the relational paradigm?
15 |
16 | First off, aesthetics dammit.
17 |
18 | Logic programs are simply beautiful as they often have a declarative nature which trumps
19 | even the gems found in functional programming languages. Logic programs use search, and thus
20 | they are often not muddied up by algorithmic details. If you haven't tried Prolog before,
21 | relational programming will at times seem almost magical. However, I admit, the most important
22 | reason to learn the relational paradigm is because it's FUN."
23 |
24 | [[:section {:title "Getting Started"}]]
25 |
26 | "
27 | 1. Install `lein` following [instructions here](http://leiningen.org/#install)
28 | - `git clone https://github.com/swannodette/logic-tutorial && cd logic-tutorial`
29 |
30 | Ok, we're ready to begin. Type `lein repl`, which will drop you into the Clojure prompt.
31 | First let's double check that everything went ok. Enter the following at the Clojure REPL:
32 | "
33 |
34 | (require 'clojure.core.logic)
35 |
36 | "
37 | The REPL should print `nil` and it should return control to you. If it doesn't file an
38 | issue for this tutorial and I'll look into it. If all goes well run the following:
39 | "
40 |
41 | (load "logic_tutorial/tut1")
42 |
43 | "
44 | You'll see some harmless warnings, then run the following:
45 | "
46 |
47 | (in-ns 'logic-tutorial.tut1)
48 |
49 | "Your prompt will change and you're now working in a place that has the magic of relational
50 | programming available to you. The REPL prompt will show `logic-tutorial.tut1`, we're going
51 | show `tut1` to keep things concise."
52 |
53 | [[:chapter {:title "Exploration"}]]
54 |
55 | "Unlike most programming systems, with relational programming we can actually ask the
56 | computer questions. But before we ask the computer questions, we need define some facts! The
57 | first thing we want the computer to know about is that there are men:"
58 |
59 | (fact
60 | (db-rel man x)
61 | => #'man)
62 |
63 | "And then we want to define some men:"
64 |
65 | (def men
66 | (db [man 'Bob]
67 | [man 'John]))
68 |
69 | [[:section {:title "Question and Answer"}]]
70 |
71 | "Now we can ask who are men. Questions are always asked with `run` or `run*`. By convention
72 | we'll declare a logic variable `q` and ask the computer to give use the possible values for
73 | `q`. Here's an example:"
74 |
75 | (fact
76 | (with-db men
77 | (run 1 [q] (man q)))
78 | => '(John))
79 |
80 | [[:subsection {:title "Multiple Results"}]]
81 |
82 | "We're asking the computer to give us at least one answer to the question - Who is a man?.
83 | We can ask for more than one answer:"
84 |
85 | (fact
86 | (with-db men
87 | (run 2 [q] (man q)))
88 | => '(John Bob))
89 |
90 | "Now that is pretty cool. What happens if we ask for even more answers?"
91 |
92 | (fact
93 | (with-db men
94 | (run 3 [q] (man q)))
95 | => '(John Bob))
96 |
97 | "The same result. That's because we’ve only told the computer that two men exist in the
98 | world. It can't give results for things it doesn't know about."
99 |
100 | [[:section {:title "Fun People"}]]
101 |
102 | "Let's define another kind of relationship and a fact:"
103 |
104 | (fact
105 | (db-rel fun x)
106 | => #'fun)
107 |
108 | (def fun-people
109 | (db [fun 'Bob]))
110 |
111 | "Let's ask a new kind of question:"
112 |
113 | (fact
114 | (with-dbs [men fun-people]
115 | (run* [q]
116 | (man q)
117 | (fun q)))
118 | => '(Bob))
119 |
--------------------------------------------------------------------------------
/example/test/documentation/on_lisp/book.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.on-lisp.book
2 | (:use midje.sweet))
3 |
4 | [[:chapter {:title "The Extensible language"}]]
5 |
6 | [[:file {:src "test/documentation/on_lisp/ch1_the_extensible_language.clj"}]]
7 |
8 | [[:chapter {:title "Functions"}]]
9 |
10 | [[:file {:src "test/documentation/on_lisp/ch2_functions.clj"}]]
11 |
--------------------------------------------------------------------------------
/example/test/documentation/on_lisp/ch2_functions.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.on-lisp.ch2-functions
2 | (:use midje.sweet))
3 |
4 | "Functions are the building-blocks of Lisp programs. They are also the building-blocks of Lisp. In most
5 | languages the + operator is something quite different from user-defined functions. But Lisp has a single model,
6 | function application, to describe all the computation done by a program. The Lisp + operator is a function,
7 | just like the ones you can define yourself.
8 |
9 | In fact, except for a small number of operators called special forms, the core of Lisp is a collection of Lisp
10 | functions. What's to stop you from adding to this collection? Nothing at all: if you think of something you
11 | wish Lisp could do, you can write it yourself, and your new function will be treated just like the built-in ones.
12 |
13 | This fact has important consequences for the programmer. It means that any new function could be considered
14 | either as an addition to Lisp, or as part of a specific application. Typically, an experienced Lisp programmer
15 | will write some of each, adjusting the boundary between language and application until the two fit one another
16 | perfectly. This book is about how to achieve a good fit between language and application. Since everything we
17 | do toward this end ultimately depends on functions, functions are the natural place to begin."
18 |
19 | [[:section {:title "Functions as Data"}]]
20 |
21 | "Two things make Lisp functions different. One, mentioned above, is that Lisp itself is a collection of
22 | functions. This means that we can add to Lisp new operators of our own. Another important thing to know about
23 | functions is that they are Lisp objects.
24 |
25 | Lisp offers most of the data types one finds in other languages. We get integers and floating-point numbers,
26 | strings, arrays, structures, and so on. But Lisp supports one data type which may at first seem surprising: the
27 | function. Nearly all programming languages provide some form of function or procedure. What does it mean to say
28 | that Lisp provides them as a data type? It means that in Lisp we can do with functions all the things we expect
29 | to do with more familiar data types, like integers: create new ones at runtime, store them in variables and in
30 | structures, pass them as arguments to other functions, and return them as results.
31 |
32 | The ability to create and return functions at runtime is particularly useful. This might sound at first like a
33 | dubious sort of advantage, like the self-modifying machine language programs one can run on some computers. But
34 | creating new functions at runtime turns out to be a routinely used Lisp programming technique."
35 |
36 | [[:section {:title "Definding Functions"}]]
37 |
38 | "Most people first learn how to make functions with `defun`. The following expression defines a function called
39 | double which returns twice its argument."
40 |
41 | (defn double [x] (* x 2))
42 |
43 | "Having fed this to Lisp, we can call double in other functions, or from the toplevel:"
44 |
45 | (fact
46 |
47 | > (double 1)
48 | 2
49 |
50 | (+ 1 2)
51 | => 3)
52 |
53 | "A file of Lisp code usually consists mainly of such defuns, and so resembles a file of procedure definitions
54 | in a language like C or Pascal. But something quite different is going on. Those defuns are not just procedure
55 | definitions, they're Lisp calls. This distinction will become clearer when we see what's going on underneath
56 | defun.
57 |
58 | Functions are objects in their own right. What defun really does is build one, and store it under the name
59 | given as the first argument. So as well as calling double, we can get hold of the function which implements it.
60 | The usual way to do so is by using the #' (sharp-quote) operator. This operator can be understood as mapping
61 | names to actual function objects. By affixing it to the name of double"
62 |
63 | (fact
64 |
65 | > (type #'double)
66 | clojure.lang.Var
67 |
68 |
69 |
70 | > ((fn [x] (* x 2)) 1)
71 | 2)
72 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t1_global.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t1-global)
2 |
3 | [[:global {:link {:auto-tag true}
4 | :tracking "UA-31320512-2"}]]
5 |
6 | [[:global {:link {:auto-number true}}]]
7 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t2_article.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t2-article)
2 |
3 | [[:article {:link {:auto-number true}
4 | :tracking "UA-31320512-2"}]]
5 |
6 | [[:article {:link {:auto-tag true}}]]
7 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t3_namespaces.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t3-namespaces)
2 |
3 | [[:ns {:refer documentation.short.t3-namespaces}]]
4 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t4_numbers.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t4-numbers)
2 |
3 | [[:chapter {:title "An Unexpected Party"}]]
4 |
5 | [[:section {:title "In a hole in the ground there lived a hobbit"}]]
6 |
7 | [[:section {:title "What on earth did I ask him to tea for"}]]
8 |
9 | [[:section {:title "I see they have begun to arrive already"}]]
10 |
11 | [[:section {:title "Now for some music"}]]
12 |
13 | [[:chapter {:title "Roast Mutton"}]]
14 |
15 | [[:chapter {:title "A Short Rest"}]]
16 |
17 | [[:chapter {:title "Over Hill And Under Hill"}]]
18 |
19 | [[:chapter {:title "Riddles In The Dark"}]]
20 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t5_references.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t5-references
2 | (:require [example.core]))
3 |
4 | [[:reference {:refer example.core/foo}]]
5 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t6_stencil.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t6-stencil
2 | (:require [example.core]))
3 |
4 | [[:chapter {:title "Hello There" :tag "hello"}]]
5 |
6 | [[:section {:title "Hello World" :tag "world"}]]
7 |
8 | "{{hello}} {{stencil/world}} {{PROJECT.version}}"
9 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t7_pluggable.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t7-pluggable
2 | (:require [example.core]))
3 |
4 | [[:random {:title "Hello There" :tag "hello"}]]
5 |
--------------------------------------------------------------------------------
/example/test/documentation/short/t8_citation.clj:
--------------------------------------------------------------------------------
1 | (ns documentation.short.t8-citation)
2 |
3 | "This is a case of [[2004-bower-thompson]]"
4 |
5 | [[:citation {:mode :url :tag "2012-bower-thompson"}]]
6 |
7 | [[:citation {:mode :url :tag "2004-bower-thompson"}]]
8 |
9 | [[:bibliography {:mode :full}]]
10 |
--------------------------------------------------------------------------------
/example/test/example/core_test.clj:
--------------------------------------------------------------------------------
1 | (ns example.core-test
2 | (:use clojure.test)
3 | (:require [example.core :refer :all]))
4 |
5 | ^{:refer example.core/foo :added "0.1"}
6 | (deftest foo-test
7 | (is (= 1 1)))
8 |
--------------------------------------------------------------------------------
/hydrox.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helpshift/hydrox/2beb3c56fad43bbf16f07db7ee72c5862978350c/hydrox.graffle
--------------------------------------------------------------------------------
/lein/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | /classes
3 | /checkouts
4 | pom.xml
5 | pom.xml.asc
6 | *.jar
7 | *.class
8 | /.lein-*
9 | /.nrepl-port
10 | .hgignore
11 | .hg/
12 | /test/documentation
13 | /template
14 | /docs
15 |
--------------------------------------------------------------------------------
/lein/docs/css/rdash.min.css:
--------------------------------------------------------------------------------
1 | #content-wrapper{padding-left:0;margin-left:0;width:100%;height:auto}@media only screen and (min-width:561px){#page-wrapper.open{padding-left:250px}}@media only screen and (max-width:560px){#page-wrapper.open{padding-left:70px}}#page-wrapper.open #sidebar-wrapper{left:150px}@media only screen and (max-width:560px){body.hamburg #page-wrapper{padding-left:0}body.hamburg #page-wrapper:not(.open) #sidebar-wrapper{position:absolute;left:-100px}body.hamburg #page-wrapper:not(.open) ul.sidebar .sidebar-title.separator{display:none}body.hamburg #page-wrapper.open #sidebar-wrapper{position:fixed}body.hamburg #page-wrapper.open #sidebar-wrapper ul.sidebar li.sidebar-main{margin-left:0}body.hamburg #sidebar-wrapper ul.sidebar li.sidebar-main,body.hamburg .row.header .meta{margin-left:70px}body.hamburg #page-wrapper.open #sidebar-wrapper ul.sidebar li.sidebar-main,body.hamburg #sidebar-wrapper ul.sidebar li.sidebar-main{transition:margin-left .4s ease 0s}}.row.header{height:60px;background:#fff;margin-bottom:15px}.row.header>div:last-child{padding-right:0}.row.header .meta .page{font-size:17px;padding-top:11px}.row.header .meta .breadcrumb-links{font-size:10px}.row.header .meta div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row.header .login a{padding:18px;display:block}.row.header .user{min-width:130px}.row.header .user>.item{width:65px;height:60px;float:right;display:inline-block;text-align:center;vertical-align:middle}.row.header .user>.item a{color:#919191;display:block}.row.header .user>.item i{font-size:20px;line-height:55px}.row.header .user>.item img{width:40px;height:40px;margin-top:10px;border-radius:2px}.row.header .user>.item ul.dropdown-menu{border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.05);box-shadow:0 6px 12px rgba(0,0,0,.05)}.row.header .user>.item ul.dropdown-menu .dropdown-header{text-align:center}.row.header .user>.item ul.dropdown-menu li.link{text-align:left}.row.header .user>.item ul.dropdown-menu li.link a{padding-left:7px;padding-right:7px}.row.header .user>.item ul.dropdown-menu:before{position:absolute;top:-7px;right:23px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;content:''}.row.header .user>.item ul.dropdown-menu:after{position:absolute;top:-6px;right:24px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.loading{width:40px;height:40px;position:relative;margin:100px auto}.double-bounce1,.double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#333;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:bounce 2s infinite ease-in-out;animation:bounce 2s infinite ease-in-out}.double-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes bounce{0%,100%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes bounce{0%,100%{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}@font-face{font-family:Montserrat;src:url(../fonts/montserrat-regular-webfont.eot);src:url(../fonts/montserrat-regular-webfont.eot?#iefix) format('embedded-opentype'),url(../fonts/montserrat-regular-webfont.woff) format('woff'),url(../fonts/montserrat-regular-webfont.ttf) format('truetype'),url(../fonts/montserrat-regular-webfont.svg#montserratregular) format('svg');font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:Montserrat;src:url(../fonts/montserrat-regular-webfont.svg) format('svg')}select{font-family:Arial,Helvetica,sans-serif}}html{overflow-y:scroll}body{background:#f3f3f3;font-family:Montserrat;color:#333!important}.row{margin-left:0!important;margin-right:0!important}.row>div{margin-bottom:15px}.alerts-container .alert:last-child{margin-bottom:0}#page-wrapper{padding-left:70px;height:100%}#sidebar-wrapper{margin-left:-150px;left:-30px;width:250px;position:fixed;height:100%;z-index:999}#page-wrapper,#sidebar-wrapper{transition:all .4s ease 0s}.green{background:#23ae89!important}.blue{background:#2361ae!important}.orange{background:#d3a938!important}.red{background:#ae2323!important}.form-group .help-block.form-group-inline-message{padding-top:5px}div.input-mask{padding-top:7px}#sidebar-wrapper{background:#30426a}#page-wrapper:not(.open) ul.sidebar .sidebar-title.separator,.sidebar-footer,ul.sidebar .sidebar-list a:hover,ul.sidebar .sidebar-main a{background:#2d3e63}ul.sidebar{position:absolute;top:0;bottom:0;padding:0;margin:0;list-style:none;text-indent:20px;overflow-x:hidden;overflow-y:auto}ul.sidebar li a{color:#fff;display:block;float:left;text-decoration:none;width:250px}ul.sidebar .sidebar-main{height:65px}ul.sidebar .sidebar-main a{font-size:18px;line-height:60px}ul.sidebar .sidebar-main .menu-icon{float:right;font-size:18px;padding-right:28px;line-height:60px}ul.sidebar .sidebar-title{color:#738bc0;font-size:12px;height:35px;line-height:40px;text-transform:uppercase;transition:all .6s ease 0s}ul.sidebar .sidebar-list{height:40px}ul.sidebar .sidebar-list a{text-indent:25px;font-size:15px;color:#b2bfdc;line-height:40px}ul.sidebar .sidebar-list a:hover{color:#fff;border-left:3px solid #e99d1a;text-indent:22px}ul.sidebar .sidebar-list a:hover .menu-icon{text-indent:25px}ul.sidebar .sidebar-list .menu-icon{float:right;padding-right:29px;line-height:40px;width:70px}#page-wrapper:not(.open) ul.sidebar{bottom:0}#page-wrapper:not(.open) ul.sidebar .sidebar-title{display:none;height:0;text-indent:-100px}#page-wrapper:not(.open) ul.sidebar .sidebar-title.separator{display:block;height:2px;margin:13px 0}#page-wrapper:not(.open) ul.sidebar .sidebar-list a:hover span{border-left:3px solid #e99d1a;text-indent:22px}#page-wrapper:not(.open) .sidebar-footer{display:none}.sidebar-footer{position:absolute;height:40px;bottom:0;width:100%;padding:0;margin:0;transition:all .6s ease 0s;text-align:center}.sidebar-footer div a{color:#b2bfdc;font-size:12px;line-height:43px}.sidebar-footer div a:hover{color:#fff;text-decoration:none}.widget{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);background:#fff;border:1px solid transparent;border-radius:2px;border-color:#e9e9e9}.widget .widget-footer .pagination,.widget .widget-header .pagination{margin:0}.widget .widget-header{color:#767676;background-color:#f6f6f6;padding:10px 15px;border-bottom:1px solid #e9e9e9;line-height:30px}.widget .widget-header i{margin-right:5px}.widget .widget-body{padding:20px}.widget .widget-body table thead{background:#fafafa}.widget .widget-body table thead *{font-size:14px!important}.widget .widget-body table tbody *{font-size:13px!important}.widget .widget-body .error{color:red}.widget .widget-body button{margin-left:5px}.widget .widget-body div.alert{margin-bottom:10px}.widget .widget-body.large{height:350px;overflow-y:auto}.widget .widget-body.medium{height:250px;overflow-y:auto}.widget .widget-body.small{height:150px;overflow-y:auto}.widget .widget-body.no-padding{padding:0}.widget .widget-body.no-padding .error,.widget .widget-body.no-padding .message{padding:20px}.widget .widget-icon{background:#30426a;width:65px;height:65px;border-radius:50%;text-align:center;vertical-align:middle;margin-right:15px}.widget .widget-icon i{line-height:66px;color:#fff;font-size:30px}.widget .widget-footer{border-top:1px solid #e9e9e9;padding:10px}.widget .widget-footer .pagination,.widget .widget-title .pagination{margin:0}.widget .widget-content .title{font-size:28px;display:block}
--------------------------------------------------------------------------------
/lein/docs/css/scrollspy.css:
--------------------------------------------------------------------------------
1 |
2 | body {
3 | background: #f8f8f8;
4 | position: relative;
5 | line-height: 1.5;
6 | font-family: 'Raleway', sans-serif;
7 | }
8 |
9 | h1, h2 {
10 | font-weight: 700;
11 | }
12 |
13 | h2.chapter{
14 | font-weight: 900;
15 | margin-top: 50px;
16 | }
17 |
18 | h3 span {
19 | color: #286090;
20 | }
21 |
22 | .jumbotron {
23 | border-radius: 0px;
24 | background: #ffffff;
25 | margin-bottom: 0;
26 | text-align: center;
27 | border: 1px solid transparent;
28 | background: #ffffff;
29 | border: 1px solid;
30 | border-radius: 2px;
31 | border-color: #e9e9e9;
32 | }
33 |
34 | .jumbotron button {
35 | margin-top: 10px;
36 | }
37 |
38 | .chapter > div{
39 | margin-top: 30px;
40 | margin-bottom: 10px;
41 | padding: 20px;
42 | /*-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
43 | -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
44 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);*/
45 | background: #ffffff;
46 | border: 1px solid;
47 | border-radius: 2px;
48 | border-color: #e9e9e9;
49 |
50 | }
51 |
52 | section.section {
53 | margin-top: 30px;
54 | margin-bottom: 10px;
55 | padding: 20px;
56 | /*-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
57 | -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
58 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);*/
59 | background: #ffffff;
60 | border: 1px solid transparent;
61 | border-radius: 2px;
62 | border-color: #e9e9e9;
63 | }
64 |
65 | section.subsection {
66 | margin-top: 30px;
67 | }
68 |
69 | section:last-child {
70 | border-bottom: none;
71 | }
72 |
73 | #content{
74 | margin-top: 30px;
75 | }
76 |
77 | #nav{
78 | margin-top: 50px;
79 | }
80 |
81 |
82 | .nav {
83 | background: #30426a;
84 | }
85 |
86 | .nav .contents{
87 | color: white;
88 | padding: 18px 0px 15px 30px;
89 | background: #2d3e63;
90 | }
91 |
92 | .nav a {
93 | color: #b2bfdc;
94 | font-style: italic;
95 | }
96 |
97 | .nav li a:hover,
98 | .nav li a:focus {
99 | background: #2d3e63;
100 | }
101 |
102 | .nav .active {
103 | font-weight: bold;
104 | /*background: #72bcd4;*/
105 | }
106 |
107 | .nav .nav {
108 | display: none;
109 | }
110 |
111 | .nav .active .nav {
112 | display: block;
113 | }
114 |
115 | .nav>li>a {
116 | padding-top: 5px;
117 | padding-left: 30px;
118 | }
119 | .nav .nav a {
120 | font-weight: normal;
121 | text-decoration: none;
122 | font-size: .85em;
123 | padding-left: 40px;
124 | }
125 |
126 | .nav .nav span {
127 | margin: 0 5px 0 2px;
128 | }
129 |
130 | .nav .nav .active a,
131 | .nav .nav .active:hover a,
132 | .nav .nav .active:focus a {
133 | text-decoration: underline;
134 | /*padding-left: 30px;
135 | border-left: 5px solid black;*/
136 | }
137 |
138 | .nav .nav .active span,
139 | .nav .nav .active:hover span,
140 | .nav .nav .active:focus span {
141 | display: none;
142 | }
143 |
144 | .application {
145 | border-top: 1px solid #c1e1ec;
146 | }
147 |
148 | .affix-top {
149 | position: relative;
150 | }
151 |
152 | .affix {
153 | top: 0px;
154 | }
155 |
156 | .affix,
157 | .affix-bottom {
158 | /*width: 213px;*/
159 | }
160 |
161 | .affix-bottom {
162 | position: absolute;
163 | }
164 |
165 | footer {
166 | border-top: 1px solid #c1e1ec;
167 | height: 50px;
168 | }
169 |
170 | footer p {
171 | line-height: 50px;
172 | margin-bottom: 0;
173 | }
174 |
175 | @media (min-width:1200px) {
176 | .affix,
177 | .affix-bottom {
178 | width: 263px;
179 | }
180 | }
181 |
182 | .img img {
183 | display: block;
184 | margin-top: 10px;
185 | margin-right: auto;
186 | margin-left: auto;
187 | }
188 |
189 | .figure {
190 | border: solid 1px #ccc;
191 | padding: 10px;
192 | margin-bottom: 10px;
193 | }
194 |
195 | .figure h4{
196 | text-align: center;
197 | margin-top:30px
198 | }
199 |
200 | .code h5{
201 | font-weight: 900;
202 | margin-top: 20px;
203 | margin-bottom: 3px;
204 | }
205 |
206 |
207 | ul.sidebar .submenu-item {
208 | margin-left: 10px;
209 | }
210 |
211 | nav {
212 | background-color: #30426A;
213 | border-color: #30426A;
214 | }
215 |
216 | .navbar-brand img{
217 | height: 45px;
218 | margin-top: -10px;
219 | }
220 |
221 | .navbar-nav {
222 | margin-top: 12px;
223 | }
224 |
225 | .nav .open>a, .nav .open>a:focus, .nav .open>a:hover {
226 | background-color: #30426A;
227 | }
228 |
229 | .dropdown-menu>li>a:hover {
230 | color: white;
231 | }
232 |
--------------------------------------------------------------------------------
/lein/docs/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helpshift/hydrox/2beb3c56fad43bbf16f07db7ee72c5862978350c/lein/docs/img/favicon.png
--------------------------------------------------------------------------------
/lein/docs/img/logo-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helpshift/hydrox/2beb3c56fad43bbf16f07db7ee72c5862978350c/lein/docs/img/logo-white.png
--------------------------------------------------------------------------------
/lein/docs/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helpshift/hydrox/2beb3c56fad43bbf16f07db7ee72c5862978350c/lein/docs/img/logo.png
--------------------------------------------------------------------------------
/lein/docs/js/angular-highlightjs.min.js:
--------------------------------------------------------------------------------
1 | /*! angular-highlightjs
2 | version: 0.4.1
3 | build date: 2015-02-03
4 | author: Chih-Hsuan Fan
5 | https://github.com/pc035860/angular-highlightjs.git */
6 | "undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="hljs"),function(a,b){function c(a){var c=!0;return b.forEach(["source","include"],function(b){a[b]&&(c=!1)}),c}var d=b.module("hljs",[]);d.provider("hljsService",function(){var a={};return{setOptions:function(c){b.extend(a,c)},getOptions:function(){return b.copy(a)},$get:["$window",function(c){return(c.hljs.configure||b.noop)(a),c.hljs}]}}),d.factory("hljsCache",["$cacheFactory",function(a){return a("hljsCache")}]),d.controller("HljsCtrl",["hljsCache","hljsService",function(a,c){var d=this,e=null,f=null,g=null,h=null;d.init=function(a){e=a},d.setLanguage=function(a){f=a,g&&d.highlight(g)},d.highlightCallback=function(a){h=a},d.highlight=function(i){if(e){var j,k;g=i,f?(k=d._cacheKey(f,g),j=a.get(k),j||(j=c.highlight(f,c.fixMarkup(g),!0),a.put(k,j))):(k=d._cacheKey(g),j=a.get(k),j||(j=c.highlightAuto(c.fixMarkup(g)),a.put(k,j))),e.html(j.value),e.addClass(j.language),null!==h&&b.isFunction(h)&&h()}},d.clear=function(){e&&(g=null,e.text(""))},d.release=function(){e=null},d._cacheKey=function(){var a=Array.prototype.slice.call(arguments),b="!angular-highlightjs!";return a.join(b)}}]);var e,f,g,h;e=["$compile","$parse",function(a,d){return{restrict:"EA",controller:"HljsCtrl",compile:function(e){var f=e[0].innerHTML.replace(/^(\r\n|\r|\n)/m,""),g=e[0].textContent.replace(/^(\r\n|\r|\n)/m,"");return e.html('
'),function(e,h,i,j){var k,l;if(b.isDefined(i.compile)&&(k=d(i.compile)),b.isDefined(i.escape)?l=d(i.escape):b.isDefined(i.noEscape)&&(l=d("false")),j.init(h.find("code")),i.onhighlight&&j.highlightCallback(function(){e.$eval(i.onhighlight)}),(f||g)&&c(i)){var m;m=l&&!l(e)?g:f,j.highlight(m),k&&k(e)&&a(h.find("code").contents())(e)}e.$on("$destroy",function(){j.release()})}}}}],f=function(a){return[function(){return{require:"?hljs",restrict:"A",link:function(c,d,e,f){f&&e.$observe(a,function(a){b.isDefined(a)&&f.setLanguage(a)})}}}]},g=function(a){return["$compile","$parse",function(c,d){return{require:"?hljs",restrict:"A",link:function(e,f,g,h){var i;h&&(b.isDefined(g.compile)&&(i=d(g.compile)),e.$watch(g[a],function(a){a?(h.highlight(a),i&&i(e)&&c(f.find("code").contents())(e)):h.clear()}))}}}]},h=function(a){return["$http","$templateCache","$q","$compile","$parse",function(c,d,e,f,g){return{require:"?hljs",restrict:"A",compile:function(h,i){var j=i[a];return function(a,h,i,k){var l,m=0;k&&(b.isDefined(i.compile)&&(l=g(i.compile)),a.$watch(j,function(g){var i=++m;if(g&&b.isString(g)){var j,n;j=d.get(g),j||(n=e.defer(),c.get(g,{cache:d,transformResponse:function(a){return a}}).success(function(a){i===m&&n.resolve(a)}).error(function(){i===m&&k.clear(),n.resolve()}),j=n.promise),e.when(j).then(function(c){c&&(b.isArray(c)?c=c[1]:b.isObject(c)&&(c=c.data),c=c.replace(/^(\r\n|\r|\n)/m,""),k.highlight(c),l&&l(a)&&f(h.find("code").contents())(a))})}else k.clear()}))}}}}]},d.directive("hljs",e).directive("language",f("language")).directive("source",g("source")).directive("include",h("include"))}(window,window.angular);
--------------------------------------------------------------------------------
/lein/docs/sample-document.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | a sample document
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
41 |
42 |
43 |
44 |
45 |
64 |
65 |
66 |
67 |
72 |
73 |
74 |
75 |
a sample document
76 | generating a document from code
77 |
78 |
79 |
1 Introduction
This is an introduction to the exciting library
1.1 Defining a function
(defn add-5 [x]
80 | (+ x 5))
1.2 Testing a function
add-5
outputs the following results seen in e.1.2 and e.1.3:
e.1.1
(+ 1 0) => 1
81 | (+ 1 3) => 4
(+ 1 1) => 2
82 | (+ 1 3) => 2
e.1.2 - 1 add 5 equals 6
(add-5 1) => 6
e.1.3 - 10 add 5 equals 15
(add-5 10) => 15
2 Walkthrough
Here is a walkthrough for the library
83 |
84 |
85 |
86 |
87 |
88 |
95 |
96 |
97 |
102 |
103 |