Compare commits

..

167 Commits

Author SHA1 Message Date
Patrick Marsceill
96c053bb63 Merge branch 'master' into v0.2.3 2019-02-02 15:45:59 -08:00
Patrick Marsceill
d9a5bd0a19 lint 2019-02-02 17:43:14 -06:00
Patrick Marsceill
0ac8ec23bf Support for nesting ul in ol and vice versa 2019-02-02 17:38:36 -06:00
Patrick Marsceill
c40eec1c2f Merge pull request #87 from pmarsceill/feature-request
Update issue templates
2019-02-02 15:06:32 -08:00
Patrick Marsceill
de98c2b51b Update issue templates 2019-02-02 15:06:18 -08:00
Patrick Marsceill
c70f012eee Merge pull request #76 from pmarsceill/pmarsceill-patch-1
Add issue templates
2019-02-02 15:05:00 -08:00
Patrick Marsceill
aee6d1fb8c Use analytics.js instead of tag manager 2019-02-02 13:59:41 -08:00
Patrick Marsceill
f5d6cf6222 Add site url to config 2019-02-02 13:59:20 -08:00
Patrick Marsceill
f3fc9d9dd3 Update copyright date 2019-02-02 12:32:56 -08:00
Patrick Marsceill
a8c282ae5a Add docs for GA tracking 2019-02-02 12:32:33 -08:00
Patrick Marsceill
e12408d07b Add hook for GA tracking 2019-02-02 12:32:04 -08:00
Patrick Marsceill
a44d3a8652 Bump version numbers and description 2019-02-02 11:59:34 -08:00
Patrick Marsceill
ad867e37c0 move js class top parent div to fix page offset 2019-02-02 11:52:31 -08:00
Patrick Marsceill
01b500b1b3 Dont unesape this or it wont read the content var 2019-02-02 11:46:46 -08:00
Patrick Marsceill
84f8f003ac Merge pull request #73 from pmarsceill/dependabot/npm_and_yarn/stylelint-9.10.1
Bump stylelint from 9.9.0 to 9.10.1
2019-02-02 11:35:25 -08:00
Patrick Marsceill
ab20833d17 Merge pull request #77 from woernfl/patch-1
Just fixing a typo in the layout example
2019-02-02 11:33:23 -08:00
Patrick Marsceill
b77d22cf2e Merge pull request #81 from ilivewithian/patch-1
Bug: Can now show single search result.
2019-02-02 11:31:37 -08:00
Patrick Marsceill
35d7864874 Merge pull request #84 from novelistparty/master
fix #80 - escape the single quotes in the string
2019-02-02 11:27:01 -08:00
Patrick Marsceill
c9e4284754 Merge pull request #65 from stephenedmondson/master
search-data path fix
2019-02-02 11:22:53 -08:00
John Boyle
da0762007d escape the single quotes in the string 2019-01-31 10:02:06 -08:00
Rob White
5b8ff78bb6 Bug: Can now show single search result. 2019-01-29 13:39:20 +00:00
Florian Woerner
04e81c7158 Just fixing a typo in the layout example 2019-01-26 16:28:26 +01:00
Patrick Marsceill
b7913ec5a5 Update bug_report.md 2019-01-25 16:11:12 -05:00
Patrick Marsceill
25250db5e0 Add issue templates 2019-01-25 16:08:27 -05:00
dependabot[bot]
75f0ef57e2 Bump stylelint from 9.9.0 to 9.10.1
Bumps [stylelint](https://github.com/stylelint/stylelint) from 9.9.0 to 9.10.1.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/9.9.0...9.10.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-23 19:07:26 +00:00
Patrick Marsceill
eaafeee675 Merge pull request #74 from pmarsceill/v0.2.2
v0.2.2
2019-01-23 14:04:51 -05:00
Patrick Marsceill
10c0f95b40 Update just-the-docs.gemspec 2019-01-23 13:56:56 -05:00
Patrick Marsceill
8da9b82d66 Update package.json 2019-01-23 13:56:15 -05:00
Patrick Marsceill
b0e1c64a5a v0.2.2 release
v0.2.2 release branch
2019-01-23 13:54:12 -05:00
Patrick Marsceill
e1d226f192 Merge pull request #69 from bmann/patch-1
page layout also used out of the box by Jekyll
2019-01-23 13:51:26 -05:00
Patrick Marsceill
2de780bb4b Merge pull request #70 from EricFromCanada/improve-search
Improve search data generation
2019-01-23 13:19:08 -05:00
EricFromCanada
60c82cb518 Allow for ampersand in title or URL
Because `page.title` (and `page.url`) is already escaped and page titles served by lunrjs do not need escaping, ampersands need to be unescaped to display properly in search results.
2019-01-16 00:31:30 -05:00
EricFromCanada
9a4ea76957 Improve search content generator 2019-01-15 22:54:30 -05:00
EricFromCanada
793ea356c3 Use unless loop for comma
and mention `search_exclude`
2019-01-15 20:48:52 -05:00
EricFromCanada
71ba32e131 Additional text fixes 2019-01-15 20:48:48 -05:00
Boris Mann
37d54f5bf2 page layout also used out of the box by Jekyll
Suggesting page, since `about.md` uses it for new Jekyll installs as well.
2019-01-15 10:52:32 -08:00
Patrick Marsceill
ce947ae543 Merge pull request #67 from EricFromCanada/doc-cleanup
Documentation cleanup
2019-01-15 10:49:04 -05:00
EricFromCanada
2218e6e565 Fix links and syntax
For pages in utilities/, reorder `nav_order` to follow `parent`.
2019-01-14 14:43:33 -05:00
EricFromCanada
ae5bcfe361 Fix grammar and capitalization 2019-01-14 14:43:29 -05:00
EricFromCanada
ff49d02f83 Make spacing consistent 2019-01-14 14:43:16 -05:00
Stephen Edmondson
d7b1adb8c7 search-data path fix 2019-01-11 12:41:00 -06:00
Patrick Marsceill
b3fb5ebd87 Merge pull request #61 from pmarsceill/dependabot/bundler/bundler-tw-2.0.1
Update bundler requirement from ~> 1.17.1 to ~> 2.0.1
2019-01-07 10:44:05 -05:00
Patrick Marsceill
79a8cda356 Merge pull request #44 from pmarsceill/dependabot/npm_and_yarn/stylelint-config-primer-3.0.1
Bump stylelint-config-primer from 3.0.0 to 3.0.1
2019-01-07 10:43:34 -05:00
Patrick Marsceill
ae3f570370 Fix some styling bugs 2019-01-06 15:51:30 -05:00
Patrick Marsceill
f17700afe3 Better search index 2019-01-06 15:51:17 -05:00
Patrick Marsceill
269271a8d7 Add a page description 2019-01-06 15:50:57 -05:00
Patrick Marsceill
09cc61c25f Moar A11y updates 2019-01-06 15:50:31 -05:00
Patrick Marsceill
06c8acc06b Lol we forgot the body tag 2019-01-06 15:50:01 -05:00
Patrick Marsceill
a3ae6ad74e A11y updates 2019-01-06 15:49:26 -05:00
Patrick Marsceill
f264034999 If page has a description use that for meta data 2019-01-06 15:48:58 -05:00
dependabot[bot]
2b0ff701fa Update bundler requirement from ~> 1.17.1 to ~> 2.0.1
Updates the requirements on [bundler](https://github.com/bundler/bundler) to permit the latest version.
- [Release notes](https://github.com/bundler/bundler/releases)
- [Changelog](https://github.com/bundler/bundler/blob/v2.0.1/CHANGELOG.md)
- [Commits](https://github.com/bundler/bundler/commits/v2.0.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-04 10:18:33 +00:00
Patrick Marsceill
4a9b4fd5b1 lint 2018-12-16 15:29:06 -05:00
Patrick Marsceill
d5d1ddbd92 Docs update 2018-12-16 15:27:25 -05:00
Patrick Marsceill
39828f0775 A nicer 404 2018-12-16 15:24:00 -05:00
Patrick Marsceill
954e8941bb Accidental reversal 2018-12-16 15:23:33 -05:00
Patrick Marsceill
20970ca9e6 Better code scrolling for touch 2018-12-16 15:23:18 -05:00
Patrick Marsceill
eaf1247911 Auto focus main content for keyboard scrolling 2018-12-16 15:22:51 -05:00
Patrick Marsceill
eb0a6c328f Allow pages to be excluded from search 2018-12-16 14:47:41 -05:00
Patrick Marsceill
ed33ab18ac Exclude package-lock.json from jekyll build 2018-12-16 14:29:35 -05:00
Patrick Marsceill
555dfae410 Make TOC on parent pages optional 2018-12-16 14:27:44 -05:00
Patrick Marsceill
309b238400 Merge pull request #51 from flut1/master
Fix charset for list item content in scss
2018-12-13 11:16:27 -05:00
Floris Bernard
2caefa4e9e Fix charset for list item content in scss 2018-12-12 14:33:02 +01:00
dependabot[bot]
e4dd35083a Bump stylelint-config-primer from 3.0.0 to 3.0.1
Bumps [stylelint-config-primer](https://github.com/primer/primer) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/primer/primer/releases)
- [Changelog](https://github.com/primer/primer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/primer/primer/compare/v3.0.0...v3.0.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-30 10:25:20 +00:00
Patrick Marsceill
80bbdb7be8 Merge pull request #43 from pmarsceill/v0.2.1
v0.2.1 release
2018-11-29 11:43:28 -05:00
Patrick Marsceill
c5a9be9298 Bump JTD version numbers 2018-11-29 11:33:43 -05:00
dependabot[bot]
5b9cde1dc4 Bump stylelint-config-primer from 2.2.11 to 3.0.0
Bumps [stylelint-config-primer](https://github.com/primer/primer) from 2.2.11 to 3.0.0.
- [Release notes](https://github.com/primer/primer/releases)
- [Changelog](https://github.com/primer/primer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/primer/primer/commits/v3.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-29 11:32:19 -05:00
Patrick Marsceill
1064d50f8c Merge branch 'dependabot/npm_and_yarn/stylelint-9.9.0' into v0.2.1 2018-11-29 11:28:25 -05:00
dependabot[bot]
b35b697dc2 Bump stylelint from 7.13.0 to 9.9.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 7.13.0 to 9.9.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/7.13.0...9.9.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-29 16:19:16 +00:00
dependabot[bot]
f6003ec47d [Security] Bump lodash from 4.17.4 to 4.17.11
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.4 to 4.17.11. **This update includes security fixes.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Changelog](https://github.com/lodash/lodash/blob/master/CHANGELOG)
- [Commits](https://github.com/lodash/lodash/compare/4.17.4...4.17.11)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-29 11:09:46 -05:00
Patrick Marsceill
dc47cec4aa Merge pull request #29 from folbert/aux-link-documentation-fix
Indented the title for aux_link
2018-11-26 11:29:59 -05:00
Patrick Marsceill
6b213c2da0 Additional ident 2018-11-26 11:26:44 -05:00
Björn Folbert
860207d13c Indented the title for aux_link
The indent is required for the aux links to work.
2018-11-24 00:21:57 +01:00
Patrick Marsceill
21990474d0 Merge pull request #23 from pmarsceill/v0.2.0
v0.2.0 release
2018-11-19 16:34:46 -05:00
Patrick Marsceill
cd55ce0089 Bumb version numbers 2018-11-19 16:33:25 -05:00
Patrick Marsceill
c20129c32c update docs for nav / page strucutre 2018-11-19 16:26:22 -05:00
Patrick Marsceill
dac6e45451 Update docs 2018-11-19 13:50:54 -05:00
Patrick Marsceill
3ecef3be5c jk 2018-11-19 13:37:49 -05:00
Patrick Marsceill
74b468058a Better breadcrumb alignment 2018-11-19 13:29:17 -05:00
Patrick Marsceill
960d347f68 Support 3 levels of pages 2018-11-19 13:28:59 -05:00
Patrick Marsceill
3573db5d34 Merge pull request #24 from pmarsceill/dark-mode
Dark mode
2018-11-19 10:32:12 -05:00
Patrick Marsceill
dc29db592f Update bundler version 2018-11-19 10:29:30 -05:00
Patrick Marsceill
805eadb4bb exclude dark mode manifest 2018-11-18 11:09:18 -05:00
Patrick Marsceill
f0bb38e1b8 Clean up colors and docs 2018-11-18 11:07:45 -05:00
Patrick Marsceill
b52f66a2ee Turn off dark by default 2018-11-18 11:06:59 -05:00
Patrick Marsceill
100b7277b3 Merge branch 'v0.2.0' of github.com:pmarsceill/just-the-docs into dark-mode 2018-11-17 16:25:58 -05:00
Patrick Marsceill
28bafabd72 lint 2018-11-17 16:25:26 -05:00
Patrick Marsceill
559e210503 Lint 2018-11-16 15:04:31 -05:00
Patrick Marsceill
4814fbce64 Content cleanup 2018-11-16 14:55:20 -05:00
Patrick Marsceill
2568b05fe7 Don't break links in body 2018-11-16 14:54:46 -05:00
Patrick Marsceill
7c24af0745 Add remote-theme docs 2018-11-16 14:37:28 -05:00
Patrick Marsceill
410085dd28 Content cleanup 2018-11-16 14:37:00 -05:00
Patrick Marsceill
bfce0f57d3 Fix bug on code snippets causing double padding. 2018-11-16 14:36:26 -05:00
Patrick Marsceill
379a976387 Add docs for nav exclude 2018-11-16 13:57:49 -05:00
Patrick Marsceill
6540493df2 Add condition for nav exclude 2018-11-16 13:57:32 -05:00
Patrick Marsceill
6ecde7eeec Remove this as it was taken out in 0.1.6 2018-11-16 13:41:26 -05:00
Patrick Marsceill
8f6f4b761a Merge branch 'master' of github.com:pmarsceill/just-the-docs into dark-mode 2018-11-16 12:40:35 -05:00
Patrick Marsceill
fa40528acd Merge pull request #20 from pmarsceill/v0.1.6
v0.1.6 release
2018-11-16 12:01:17 -05:00
Patrick Marsceill
0a5edea9d8 Merge pull request #19 from pmarsceill/task-lists
Task lists
2018-11-16 11:54:02 -05:00
Patrick Marsceill
32b708cb58 whitespace 2018-11-16 11:49:29 -05:00
Patrick Marsceill
b98cac8620 Add new configuration docs 2018-11-16 11:47:46 -05:00
Patrick Marsceill
c6ca6f61ab Update docs for search config 2018-11-16 11:47:30 -05:00
Patrick Marsceill
e41c1701a5 Bump nav order for new docs 2018-11-16 11:47:14 -05:00
Patrick Marsceill
d11e332dc6 Create condition for no search and add config/css 2018-11-16 11:46:43 -05:00
Patrick Marsceill
45eea0efb6 Add docs for lists 2018-11-16 10:57:07 -05:00
Patrick Marsceill
3730de18ea Add support for task lists 2018-11-16 10:56:50 -05:00
Patrick Marsceill
4b8e051303 Merge pull request #18 from pmarsceill/pull-in-normalize
Fix normalize dependency
2018-11-16 10:34:41 -05:00
Patrick Marsceill
3418332411 Forgot the slash 😬 2018-11-16 10:28:47 -05:00
Patrick Marsceill
bde21167f4 Move normalize folder to vendor 2018-11-16 10:25:45 -05:00
Patrick Marsceill
5ac39f75a1 move this to vendor so stylelint shuts up 2018-11-16 10:25:18 -05:00
Patrick Marsceill
1ef94683df package lock 2018-11-15 16:18:48 -05:00
Patrick Marsceill
35c98605d7 Bump versions 2018-11-15 16:18:19 -05:00
Patrick Marsceill
11a4269d1c Ignore normalize.scss 2018-11-15 16:18:07 -05:00
Patrick Marsceill
2f7d0f18a5 Remove node_modules files 2018-11-15 16:17:52 -05:00
Patrick Marsceill
8968860b4b Ignore node modules 2018-11-15 16:17:29 -05:00
Patrick Marsceill
aa5a4e529c Linting rule 2018-11-15 15:59:23 -05:00
Patrick Marsceill
a0251b32d1 update linting rules 2018-11-15 15:56:00 -05:00
Patrick Marsceill
8d144f1530 fix style bug 2018-11-15 15:51:10 -05:00
Patrick Marsceill
af3e9f07c7 No longer need this build process 2018-11-15 15:49:41 -05:00
Patrick Marsceill
aa4ec995cd Remove this as normalize is now in the _sass dir 2018-11-15 15:49:14 -05:00
Patrick Marsceill
657ce6b750 add-in-normalize 2018-11-15 15:35:46 -05:00
Patrick Marsceill
ee4759c772 Rip out hard-coded color 2018-11-15 15:13:16 -05:00
Patrick Marsceill
3acf927eb7 Add dark mode theme 2018-11-15 15:13:02 -05:00
Patrick Marsceill
b7db5e73a3 Bump version and deps 2018-11-15 15:12:33 -05:00
Patrick Marsceill
9c70c7f081 Convert colors to vars 2018-11-15 15:12:12 -05:00
Patrick Marsceill
d5ef35c5a4 Merge pull request #14 from joesb/patch-1
Search documentation - snippet is missing `relUrl`
2018-11-15 14:53:25 -05:00
Joe Baker
aa9a68b1be Search documentation - snippet is missing relUrl
The code snippet on the search documentation is missing the `relUrl` parameter in each search result, and the `url` parameter is not an absolute URL.
This updates to match the formatted output of `search.rake`
2018-11-06 16:50:32 +00:00
Patrick Marsceill
94d640b80e Update README.md 2018-10-26 11:31:38 -04:00
Patrick Marsceill
f92fd09a12 Update README.md 2018-10-26 11:27:56 -04:00
Patrick Marsceill
d8a90f70c1 Update README.md 2018-10-26 11:05:46 -04:00
Patrick Marsceill
11ee5e7762 Update README.md 2018-10-26 11:04:36 -04:00
Patrick Marsceill
74693a0b2a Merge pull request #13 from pmarsceill/add-ci
Add CI for testing
2018-10-25 12:43:05 -04:00
Patrick Marsceill
6400e79e02 Update README.md 2018-10-25 11:22:11 -04:00
Patrick Marsceill
6a6efba27a fix linting / rules 2018-10-25 11:17:10 -04:00
Patrick Marsceill
d554236ba3 Update .travis.yml 2018-10-25 11:00:40 -04:00
Patrick Marsceill
6d14c454f1 Update package.json 2018-10-25 10:54:17 -04:00
Patrick Marsceill
9d51b4601c Update .travis.yml 2018-10-25 10:53:28 -04:00
Patrick Marsceill
62fc067441 Update .travis.yml 2018-10-25 10:53:03 -04:00
Patrick Marsceill
ea61589b12 Add travis yaml 2018-10-25 10:48:35 -04:00
Patrick Marsceill
89f9c5f38c Merge pull request #12 from jakebresnehan/patch-1
Update README.md
2018-10-25 10:41:21 -04:00
Jake Bresnehan
caf5311feb Update README.md 2018-10-25 18:40:36 +11:00
Patrick Marsceill
3a32d20f18 Merge pull request #11 from pmarsceill/rake-mkdir
rake search:init fails if dirs don't exist
2018-10-24 16:45:43 -04:00
Patrick Marsceill
651ed922b0 Just the Docs build packaging cleanup 2018-10-24 16:39:13 -04:00
Patrick Marsceill
64ed5ef369 Just the Docs build packaging 2018-10-24 16:39:13 -04:00
Patrick Marsceill
82e1873460 bump version number 2018-10-24 16:39:03 -04:00
Patrick Marsceill
46782d9352 Rake fails when dirs dont exist 2018-10-24 16:34:11 -04:00
Patrick Marsceill
d558234885 Merge pull request #10 from pmarsceill/rake-runtime
Rake runtime
2018-10-24 14:25:11 -04:00
Patrick Marsceill
b6ed3643f1 Just the Docs build packaging cleanup 2018-10-24 14:23:00 -04:00
Patrick Marsceill
6ebfb5c77e Just the Docs build packaging 2018-10-24 14:22:59 -04:00
Patrick Marsceill
86402106e7 Merge branch 'master' of github.com:pmarsceill/just-the-docs into rake-runtime 2018-10-24 14:21:43 -04:00
Patrick Marsceill
53b093474f Just the Docs build packaging cleanup 2018-10-24 14:21:38 -04:00
Patrick Marsceill
c8a93a9a3c Just the Docs build packaging 2018-10-24 14:21:38 -04:00
Patrick Marsceill
8bffcd06cd Merge pull request #9 from daviddarnes/patch-1
Improve presentation of Description Lists
2018-10-24 14:16:51 -04:00
Patrick Marsceill
dc0d4a0c84 White space 2018-10-24 14:15:29 -04:00
Patrick Marsceill
886654d86d Add these for a better default jekyll experience 2018-10-24 14:07:02 -04:00
Patrick Marsceill
4177f965df Content updates 2018-10-24 14:06:41 -04:00
Patrick Marsceill
f97f504284 Better layout for when nav is long and scrolls 2018-10-24 14:06:12 -04:00
Patrick Marsceill
45abf03b48 Annoying bug that 404s on local dev 2018-10-24 14:05:42 -04:00
Patrick Marsceill
debc7d3310 Fix up search bar on mobile 2018-10-24 14:05:29 -04:00
Patrick Marsceill
ea23134560 Fix path for home 2018-10-24 14:03:50 -04:00
Patrick Marsceill
2ad43933cf Just the Docs build packaging cleanup 2018-10-24 12:56:42 -04:00
Patrick Marsceill
1afc26cc33 Just the Docs build packaging 2018-10-24 12:56:41 -04:00
Patrick Marsceill
b64368873c Make Rake a runtime dep 2018-10-24 12:56:33 -04:00
David Darnes
89a3e86ebf Remove whitespace 2018-10-24 13:52:27 +01:00
David Darnes
952a016807 Improve presentation of Description Lists
Thought the description list could benefit from some CSS Grid powers
2018-10-24 13:50:07 +01:00
Patrick Marsceill
6c05ef8b9d Merge pull request #8 from pmarsceill/more-path-problems
Fix breadcrumb path
2018-10-23 17:59:36 -04:00
Patrick Marsceill
3752c58af2 Fix breadcrumb path 2018-10-23 17:55:59 -04:00
Patrick Marsceill
6e534b63c2 Merge pull request #7 from pmarsceill/bump-version
Bump version
2018-10-23 17:11:40 -04:00
4163 changed files with 8333 additions and 399586 deletions

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@
.sass-cache .sass-cache
_site _site
Gemfile.lock Gemfile.lock
node_modules

View File

@@ -1,4 +1,9 @@
{ {
"ignoreFiles" : [
"assets/css/just-the-docs.scss",
"assets/css/dark-mode-preview.scss",
"_sass/vendor/**/*.scss"
],
"extends": [ "extends": [
"stylelint-config-primer" "stylelint-config-primer"
] ]

14
.travis.yml Normal file
View File

@@ -0,0 +1,14 @@
language: ruby
rvm:
- 2.3.0
env:
- TRAVIS_NODE_VERSION="9.3.0"
install:
- npm install
- gem install bundler --version '>=1.17.1'
- bundle install
script:
- npm run test
- bundle exec jekyll build

11
404.html Normal file
View File

@@ -0,0 +1,11 @@
---
layout: default
title: Page not found
permalink: /404
nav_exclude: true
search_exclude: true
---
<h1>Page not found</h1>
<p>The page you requested could not be found. Try using the navigation {% if site.search_enabled %}or search {% endif %}to find what you're looking for or go to this <a href="{{ site.url }}{{ site.baseurl }}">site's home page</a>.</p>

View File

@@ -1,10 +1,16 @@
# Just the Docs <p align="right">
<a href="https://badge.fury.io/rb/just-the-docs"><img src="https://badge.fury.io/rb/just-the-docs.svg" alt="Gem version"></a> <a href="https://travis-ci.com/pmarsceill/just-the-docs"><img src="https://travis-ci.com/pmarsceill/just-the-docs.svg?branch=master" alt="Build status"></a>
A nice looking, high customizable, responsive Jekyll theme for documention with built-in search. Easily hosted on GitHub pages. </p>
<br><br>
<p align="center">
<h1 align="center">Just the Docs</h1>
<p align="center">A modern, high customizable, responsive Jekyll theme for documentation with built-in search.<br>Easily hosted on GitHub Pages with few dependencies.</p>
<p align="center"><strong><a href="https://pmarsceill.github.io/just-the-docs/">See it in action!</a></strong></p>
<br><br><br>
</p>
![jtd](https://user-images.githubusercontent.com/896475/47384541-89053c80-d6d5-11e8-98dc-dba16e192de9.gif) ![jtd](https://user-images.githubusercontent.com/896475/47384541-89053c80-d6d5-11e8-98dc-dba16e192de9.gif)
## Installation ## Installation
Add this line to your Jekyll site's Gemfile: Add this line to your Jekyll site's Gemfile:
@@ -35,24 +41,28 @@ Or install it yourself as:
Bug reports and pull requests are welcome on GitHub at https://github.com/pmarsceill/just-the-docs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. Bug reports and pull requests are welcome on GitHub at https://github.com/pmarsceill/just-the-docs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
### Submitting code changes:
- Open a [Pull Request](https://github.com/pmarsceill/just-the-docs/pulls)
- Ensure all CI tests pass
- Await code review
- Bump the version number in `just-the-docs.gemspec` and `package.json` according to [semantic versioning](https://semver.org/).
### Design and development principles of this theme:
1. As few dependencies as possible
2. No build script needed
3. First class mobile experience
4. Make the content shine
## Development ## Development
To set up your environment to develop this theme, run `bundle install`. To set up your environment to develop this theme, run `bundle install`.
Your theme is setup just like a normal Jekyll site! To test your theme, run `bundle exec jekyll serve` and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme. Add pages, documents, data, etc. like normal to test your theme's contents. As you make modifications to your theme and to your content, your site will regenerate and you should see the changes in the browser after a refresh, just like normal. Your theme is set up just like a normal Jekyll site! To test your theme, run `bundle exec jekyll serve` and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme. Add pages, documents, data, etc. like normal to test your theme's contents. As you make modifications to your theme and to your content, your site will regenerate and you should see the changes in the browser after a refresh, just like normal.
When the theme is released, only the files in `_layouts`, `_includes`, and `_sass` tracked with Git will be released. When the theme is released, only the files in `_layouts`, `_includes`, and `_sass` tracked with Git will be released.
### When your changes are ready:
- Open a [Pull Request](https://github.com/pmarsceill/just-the-docs/pulls)
- Await code review
- Bump the version number in `just-the-docs.gemspec`
- Run `script/build` to package the gem
- Run `gem push just-the-docs-<version>.gem` to publish the gem to Rubygems.org
## License ## License
The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).

View File

@@ -15,18 +15,23 @@
# in the templates via {{ site.myvariable }}. # in the templates via {{ site.myvariable }}.
title: Just the Docs title: Just the Docs
description: A Jekyll theme for documentation description: A Jekyll theme for documentation
baseurl: "/just-the-docs" # the subpath of your site, e.g. /blog baseurl: "/just-the-docs/" # the subpath of your site, e.g. /blog
# url: "" # the base hostname & protocol for your site, e.g. http://example.com url: "https://pmarsceill.github.io" # the base hostname & protocol for your site, e.g. http://example.com
sass:
# Load dependancies
load_paths:
- node_modules/
permalink: pretty permalink: pretty
exclude: ["node_modules/", "*.gemspec", "*.gem", "Gemfile", "Gemfile.lock", "package.json", "script/", "LICENSE.txt", "lib/", "bin/", "README.md", "Rakefile"] exclude: ["node_modules/", "*.gemspec", "*.gem", "Gemfile", "Gemfile.lock", "package.json", "package-lock.json", "script/", "LICENSE.txt", "lib/", "bin/", "README.md", "Rakefile"]
# Enable or disable the site search
search_enabled: true
# Aux links for the upper right navigation # Aux links for the upper right navigation
aux_links: aux_links:
"Just the Docs on GitHub": "Just the Docs on GitHub":
- "//github.com/pmarsceill/just-the-docs" - "//github.com/pmarsceill/just-the-docs"
# Color scheme currently only supports "dark" or nil (default)
color_scheme: nil
# Google Analytics Tracking (optional)
# e.g, UA-1234567-89
ga_tracking: UA-2709176-10

View File

@@ -1,10 +1,25 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta http-equiv="X-UA-Compatible" content="IE=Edge">
{% if page.description %}
<meta name="Description" content="{{ page.description }}">
{% endif %}
<title>{{ page.title }} - {{ site.title }}</title> <title>{{ page.title }} - {{ site.title }}</title>
<link rel="stylesheet" href="{{ "/assets/css/just-the-docs.css" | absolute_url }}"> <link rel="stylesheet" href="{{ "/assets/css/just-the-docs.css" | absolute_url }}">
<script type="text/javascript" src="{{ "/assets/js/vendor/lunr.min.js" | absolute_url }}"></script>
{% if site.ga_tracking != nil %}
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', '{{ site.ga_tracking }}', '{{ site.url }}');
ga('send', 'pageview');
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
{% endif %}
{% if site.search_enabled != nil %}
<script type="text/javascript" src="{{ "/assets/js/vendor/lunr.min.js" | absolute_url }}"></script>
{% endif %}
<script type="text/javascript" src="{{ "/assets/js/just-the-docs.js" | absolute_url }}"></script> <script type="text/javascript" src="{{ "/assets/js/just-the-docs.js" | absolute_url }}"></script>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">

View File

@@ -1,24 +1,44 @@
<nav> <nav role="navigation" aria-label="Main navigation">
<ul class="navigation-list"> <ul class="navigation-list">
{% assign pages_list = site.html_pages | sort:"nav_order" %} {% assign pages_list = site.html_pages | sort:"nav_order" %}
{% for node in pages_list %} {% for node in pages_list %}
<li class="navigation-list-item{% if page.url == node.url %} active{% endif %} js-side-nav-item"> {% unless node.nav_exclude %}
{% if node.parent == nil or node.has_children == true %} {% if node.parent == nil %}
<a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url or (page.parent != nil and page.parent == node.parent) %} active{% endif %}">{{ node.title }}</a> <li class="navigation-list-item{% if page.url == node.url or page.parent == node.title or page.grand_parent == node.title %} active{% endif %}">
{% if (node.has_children == true and node.parent == page.parent) %} {% if page.parent == node.title or page.grand_parent == node.title %}
{% assign children_list = site.html_pages | sort:"nav_order" %} {% assign first_level_url = node.url | absolute_url %}
<ul class="navigation-list-child-list"> {% endif %}
{% for child in children_list %} <a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a>
{% if child.parent == node.parent and child.title != node.title %} {% if node.has_children %}
<li class="navigation-list-item {% if page.url == child.url %} active{% endif %}"> {% assign children_list = site.html_pages | sort:"nav_order" %}
<a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a> <ul class="navigation-list-child-list ">
</li> {% for child in children_list %}
{% endif %} {% if child.parent == node.title %}
{% endfor %} <li class="navigation-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}">
</ul> {% if page.url == child.url or page.parent == child.title %}
{% endif %} {% assign second_level_url = child.url | absolute_url %}
{% endif %}
<a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
{% if child.has_children %}
{% assign grand_children_list = site.html_pages | sort:"nav_order" %}
<ul class="navigation-list-child-list">
{% for grand_child in grand_children_list %}
{% if grand_child.parent == child.title %}
<li class="navigation-list-item {% if page.url == grand_child.url %} active{% endif %}">
<a href="{{ grand_child.url | absolute_url }}" class="navigation-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</li>
{% endif %} {% endif %}
</li> {% endunless %}
{% endfor %} {% endfor %}
</ul> </ul>
</nav> </nav>

5
_layouts/about.html Normal file
View File

@@ -0,0 +1,5 @@
---
layout: default
---
{{ content }}

View File

@@ -2,10 +2,11 @@
<html lang="en-us"> <html lang="en-us">
{% include head.html %} {% include head.html %}
<body>
<div class="page-wrap"> <div class="page-wrap">
<div class="side-bar"> <div class="side-bar">
<a href="{{ site.baseurl }}" class="site-title fs-6 text-grey-dk-300 lh-tight">{{ site.title }}</a> <a href="{{ site.url }}{{ site.baseurl }}" class="site-title fs-6 lh-tight">{{ site.title }}</a>
<span class="fs-3"><button class="js-main-nav-trigger navigation-list-toggle btn btn-outline" type="button" data-text-toggle="Hide">Menu</button></span> <span class="fs-3"><button class="js-main-nav-trigger navigation-list-toggle btn btn-outline" type="button" data-text-toggle="Hide">Menu</button></span>
<div class="navigation main-nav js-main-nav"> <div class="navigation main-nav js-main-nav">
{% include nav.html %} {% include nav.html %}
@@ -14,18 +15,20 @@
<p class="text-small text-grey-dk-000 mb-0">This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.</p> <p class="text-small text-grey-dk-000 mb-0">This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.</p>
</footer> </footer>
</div> </div>
<div class="main-content-wrap"> <div class="main-content-wrap js-main-content" tabindex="0">
<div class="page-header"> <div class="page-header">
<div class="main-content pb-0"> <div class="main-content">
{% if site.search_enabled != nil %}
<div class="search js-search"> <div class="search js-search">
<div class="search-input-wrap"> <div class="search-input-wrap">
<input type="text" class="js-search-input search-input fs-2" placeholder="Search {{ site.title }}" aria-label="Search {{ site.title }}" autocomplete="off"> <input type="text" class="js-search-input search-input" tabindex="0" placeholder="Search {{ site.title }}" aria-label="Search {{ site.title }}" autocomplete="off">
<svg width="14" height="14" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg" class="search-icon"><title>Search</title><g fill-rule="nonzero"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg> <svg width="14" height="14" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg" class="search-icon"><title>Search</title><g fill-rule="nonzero"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg>
</div> </div>
<div class="js-search-results search-results-wrap"></div> <div class="js-search-results search-results-wrap"></div>
</div> </div>
{% endif %}
{% if site.aux_links != nil %} {% if site.aux_links != nil %}
<ul class="list-style-none text-small mt-md-2 pb-4 pb-md-0 js-aux-nav aux-nav"> <ul class="list-style-none text-small mt-md-1 mb-md-1 pb-4 pb-md-0 js-aux-nav aux-nav">
{% for link in site.aux_links %} {% for link in site.aux_links %}
<li class="d-inline-block my-0{% unless forloop.last %} mr-2{% endunless %}"><a href="{{ link.last }}">{{ link.first }}</a></li> <li class="d-inline-block my-0{% unless forloop.last %} mr-2{% endunless %}"><a href="{{ link.last }}">{{ link.first }}</a></li>
{% endfor %} {% endfor %}
@@ -35,19 +38,24 @@
</div> </div>
<div class="main-content"> <div class="main-content">
{% unless page.url == "/" %} {% unless page.url == "/" %}
{% if page.parent != nil and page.parent != page.title %} {% if page.parent %}
<nav class="breadcrumb-nav"> <nav class="breadcrumb-nav">
<ol class="breadcrumb-nav-list"> <ol class="breadcrumb-nav-list">
<li class="breadcrumb-nav-list-item"><a href="{{ site.url }}{{ site.baseurl }}{{ page.parent | slugify }}">{{ page.parent }}</a></li> {% if page.grand_parent %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
<li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
{% else %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
{% endif %}
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li> <li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol> </ol>
</nav> </nav>
{% endif %} {% endif %}
{% endunless %} {% endunless %}
<div class="page-content"> <div id="main-content" class="page-content" role="main">
{{ content }} {{ content }}
{% if page.has_children == true %} {% if page.has_children == true and page.has_toc != false %}
<hr> <hr>
<h2 class="text-delta">Table of contents</h2> <h2 class="text-delta">Table of contents</h2>
{% assign children_list = site.pages | sort:"nav_order" %} {% assign children_list = site.pages | sort:"nav_order" %}
@@ -65,4 +73,6 @@
</div> </div>
</div> </div>
</div> </div>
</body>
</html> </html>

5
_layouts/home.html Normal file
View File

@@ -0,0 +1,5 @@
---
layout: default
---
{{ content }}

5
_layouts/page.html Normal file
View File

@@ -0,0 +1,5 @@
---
layout: default
---
{{ content }}

View File

@@ -1,12 +1,17 @@
// //
// Base element style overrides // Base element style overrides
// //
// stylelint-disable selector-no-type // stylelint-disable selector-no-type, selector-max-type
* { * {
box-sizing: border-box; box-sizing: border-box;
} }
::selection {
color: $white;
background: $link-color;
}
html { html {
@include fs-4; @include fs-4;
} }
@@ -16,6 +21,7 @@ body {
font-size: inherit; font-size: inherit;
line-height: $body-line-height; line-height: $body-line-height;
color: $body-text-color; color: $body-text-color;
background-color: $body-background-color;
} }
p, p,
@@ -64,7 +70,7 @@ a {
a:not([class]) { a:not([class]) {
text-decoration: none; text-decoration: none;
background-image: linear-gradient($grey-lt-100 0%, $grey-lt-100 100%); background-image: linear-gradient($border-color 0%, $border-color 100%);
background-repeat: repeat-x; background-repeat: repeat-x;
background-position: 0 100%; background-position: 0 100%;
background-size: 1px 1px; background-size: 1px 1px;
@@ -99,6 +105,6 @@ hr {
height: 1px; height: 1px;
padding: 0; padding: 0;
margin: $sp-6 0; margin: $sp-6 0;
background-color: $grey-lt-100; background-color: $border-color;
border: 0; border: 0;
} }

View File

@@ -15,11 +15,11 @@
font-size: inherit; font-size: inherit;
font-weight: 500; font-weight: 500;
line-height: 1.5; line-height: 1.5;
color: $purple-200; color: $link-color;
text-decoration: none; text-decoration: none;
vertical-align: baseline; vertical-align: baseline;
cursor: pointer; cursor: pointer;
background-color: #f7f7f7; background-color: $base-button-color;
border-width: 0; border-width: 0;
border-radius: 3px; border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
@@ -38,7 +38,7 @@
&:hover, &:hover,
&.zeroclipboard-is-hover { &.zeroclipboard-is-hover {
color: $purple-300; color: darken($link-color, 2%);
} }
&:hover, &:hover,
@@ -46,13 +46,13 @@
&.zeroclipboard-is-hover, &.zeroclipboard-is-hover,
&.zeroclipboard-is-active { &.zeroclipboard-is-active {
text-decoration: none; text-decoration: none;
background-color: #f4f4f4; background-color: darken($base-button-color, 1%);
} }
&:active, &:active,
&.selected, &.selected,
&.zeroclipboard-is-active { &.zeroclipboard-is-active {
background-color: #ededed; background-color: darken($base-button-color, 3%);
background-image: none; background-image: none;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
} }
@@ -75,7 +75,7 @@
} }
.btn-outline { .btn-outline {
color: $blue-100; color: $link-color;
background: transparent; background: transparent;
box-shadow: inset 0 0 0 2px $grey-lt-300; box-shadow: inset 0 0 0 2px $grey-lt-300;
@@ -83,7 +83,7 @@
&:active, &:active,
&.zeroclipboard-is-hover, &.zeroclipboard-is-hover,
&.zeroclipboard-is-active { &.zeroclipboard-is-active {
color: $grey-dk-100; color: darken($link-color, 4%);
text-decoration: none; text-decoration: none;
background-color: transparent; background-color: transparent;
box-shadow: inset 0 0 0 3px $grey-lt-300; box-shadow: inset 0 0 0 3px $grey-lt-300;
@@ -101,6 +101,10 @@
} }
} }
.btn-primary {
@include btn-color($white, $btn-primary-color);
}
.btn-purple { .btn-purple {
@include btn-color($white, $purple-100); @include btn-color($white, $purple-100);
} }

View File

@@ -1,20 +1,21 @@
// //
// Code and syntax highlighting // Code and syntax highlighting
// //
// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type // stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type
code { code {
padding: 0.2em 0.15em; padding: 0.2em 0.15em;
font-weight: 400; font-weight: 400;
background-color: $grey-lt-000; background-color: $code-background-color;
border: $border $border-color; border: $border $border-color;
border-radius: $border-radius; border-radius: $border-radius;
} }
.highlight { pre.highlight {
padding: $sp-3; padding: $sp-3;
margin-bottom: 0; margin-bottom: 0;
background-color: $grey-lt-000; -webkit-overflow-scrolling: touch;
background-color: $code-background-color;
code { code {
padding: 0; padding: 0;
@@ -104,7 +105,7 @@ code {
.code-example { .code-example {
padding: $sp-3; padding: $sp-3;
margin-bottom: $sp-3; margin-bottom: $sp-3;
overflow: scroll; overflow: auto;
border: 1px solid $border-color; border: 1px solid $border-color;
border-radius: $border-radius; border-radius: $border-radius;

View File

@@ -0,0 +1,14 @@
$body-background-color: $grey-dk-300;
$sidebar-color: $grey-dk-300;
$border-color: $grey-dk-200;
$body-text-color: $grey-lt-300;
$body-heading-color: $grey-lt-000;
$nav-child-link-color: $grey-dk-000;
$link-color: $blue-000;
$btn-primary-color: $blue-200;
$base-button-color: $grey-dk-250;
$code-background-color: $grey-dk-250;

View File

@@ -1,12 +1,19 @@
@charset "UTF-8";
// //
// Styles for rendered markdown in the .main-content container // Styles for rendered markdown in the .main-content container
// //
// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors // stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type
.page-content { .page-content {
a {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
ul, ul,
ol, ol {
dl {
padding-left: 1.5em; padding-left: 1.5em;
} }
@@ -14,13 +21,13 @@
list-style-type: none; list-style-type: none;
counter-reset: step-counter; counter-reset: step-counter;
li { > li {
position: relative; position: relative;
&::before { &::before {
position: absolute; position: absolute;
top: 0.2em; top: 0.2em;
left: -1.5em; left: -1.6em;
color: $grey-dk-000; color: $grey-dk-000;
content: counter(step-counter); content: counter(step-counter);
counter-increment: step-counter; counter-increment: step-counter;
@@ -47,16 +54,33 @@
ul { ul {
list-style: none; list-style: none;
li { > li {
&::before { &::before {
position: absolute; position: absolute;
margin-left: -1.5em; margin-left: -1.4em;
color: $grey-dk-000; color: $grey-dk-000;
content: ""; content: "";
} }
} }
} }
.task-list {
padding-left: 0;
}
.task-list-item {
display: flex;
align-items: center;
&::before {
content: "";
}
}
.task-list-item-checkbox {
margin-right: 0.6em;
}
hr + * { hr + * {
margin-top: 0; margin-top: 0;
} }
@@ -64,4 +88,27 @@
h1:first-of-type { h1:first-of-type {
margin-top: 0.5em; margin-top: 0.5em;
} }
dl {
display: grid;
grid-template-columns: max-content 1fr;
}
dt,
dd {
margin: 0.25em 0;
}
dt {
text-align: right;
&::after {
content: ":";
}
}
dd {
margin-left: 1em;
font-weight: 500;
}
} }

View File

@@ -17,6 +17,7 @@
// $grey-dk-000: #959396; // $grey-dk-000: #959396;
// $grey-dk-100: #5c5962; // $grey-dk-100: #5c5962;
// $grey-dk-200: #44434d; // $grey-dk-200: #44434d;
// $grey-dk-250: #302d36 !default;
// $grey-dk-300: #27262b; // $grey-dk-300: #27262b;
// //
// $grey-lt-000: #f5f6fa; // $grey-lt-000: #f5f6fa;
@@ -39,9 +40,16 @@
// $green-200: #009c7b; // $green-200: #009c7b;
// $green-300: #026e57; // $green-300: #026e57;
// //
// $body-text-color: $grey-dk-100; // $body-background-color: $white !default;
// $body-heading-color: $grey-dk-300; // $sidebar-color: $grey-lt-000 !default;
// $link-color: $purple-000; // $code-background-color: $grey-lt-000 !default;
// $body-text-color: $grey-dk-100 !default;
// $body-heading-color: $grey-dk-300 !default;
// $nav-child-link-color: $grey-dk-100 !default;
// $link-color: $purple-000 !default;
// $btn-primary-color: $purple-100 !default;
// $base-button-color: #f7f7f7 !default;
// //
// // // //
// // Media queries in pixels // // Media queries in pixels

View File

@@ -12,9 +12,9 @@
margin-right: $sp-1; margin-right: $sp-1;
margin-left: $sp-1; margin-left: $sp-1;
color: $white; color: $white;
text-transform: uppercase;
vertical-align: middle; vertical-align: middle;
background-color: $blue-100; background-color: $blue-100;
text-transform: uppercase;
@include fs-2; @include fs-2;
} }

View File

@@ -17,13 +17,15 @@
.side-bar { .side-bar {
z-index: 100; z-index: 100;
display: flex;
flex-wrap: wrap;
padding-top: $gutter-spacing-sm; padding-top: $gutter-spacing-sm;
padding-bottom: $gutter-spacing-sm; padding-bottom: $gutter-spacing-sm;
background-color: $grey-lt-000; background-color: $sidebar-color;
@include mq(md) { @include mq(md) {
flex-wrap: nowrap;
position: absolute; position: absolute;
display: flex;
width: $nav-width + 16px; width: $nav-width + 16px;
height: 100%; height: 100%;
padding-top: $gutter-spacing * 2; padding-top: $gutter-spacing * 2;
@@ -72,13 +74,15 @@
} }
} }
.js-main-content:focus {
outline: none;
}
.page-header { .page-header {
background-color: $grey-lt-000; background-color: $sidebar-color;
@include mq(md) { @include mq(md) {
background-color: $white; background-color: $body-background-color;
border-bottom: $border $border-color;
} }
.main-content { .main-content {
@@ -86,8 +90,11 @@
@include mq(md) { @include mq(md) {
display: flex; display: flex;
justify-content: space-between; justify-content: flex-end;
height: 60px;
padding-top: $sp-4; padding-top: $sp-4;
padding-bottom: $sp-4;
border-bottom: $border $border-color;
} }
} }
} }
@@ -107,14 +114,13 @@
.navigation { .navigation {
@include mq(md) { @include mq(md) {
position: absolute;
top: 0;
right: 0;
height: 100%;
padding-top: $sp-8; padding-top: $sp-8;
overflow-y: auto;
flex: 1 1 auto;
} }
} }
// stylelint-disable selector-no-type
body { body {
position: relative; position: relative;
padding-bottom: $sp-10; padding-bottom: $sp-10;
@@ -124,12 +130,18 @@ body {
padding-bottom: 0; padding-bottom: 0;
} }
} }
// stylelint-enable selector-no-type
.site-footer { .site-footer {
position: absolute; position: absolute;
bottom: $sp-3; bottom: 0;
padding-top: $sp-4;
padding-bottom: $sp-4;
@include mq(md) { @include mq(md) {
right: 0; position: static;
align-self: flex-end;
justify-self: end;
background-color: $sidebar-color;
} }
} }

View File

@@ -4,19 +4,18 @@
.site-title { .site-title {
display: block; display: block;
flex-grow: 1; flex: 1 1 auto;
flex-shrink: 1; color: $body-heading-color;
flex-basis: auto; background-color: $sidebar-color;
background-color: $grey-lt-000;
@include mq(md) { @include mq(md) {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
z-index: 101;
height: 60px; height: 60px;
padding-top: $sp-4; padding-top: $sp-4;
z-index: 101; border-bottom: $border $border-color;
box-shadow: inset 0 -1px 0 $border-color;
} }
} }
@@ -27,7 +26,7 @@
list-style: none; list-style: none;
@include mq(md) { @include mq(md) {
margin-top: $sp-10; margin-top: 0;
} }
} }
@@ -36,21 +35,23 @@
list-style: none; list-style: none;
.navigation-list-link { .navigation-list-link {
color: $grey-dk-100; color: $nav-child-link-color;
} }
.navigation-list-item { .navigation-list-item {
position: relative;
&::before { &::before {
position: absolute; position: absolute;
margin-top: 0.3em; margin-top: 0.3em;
margin-left: -0.8em; margin-left: -0.8em;
color: $grey-dk-000; color: rgba($body-text-color, 0.3);
content: "- "; content: "- ";
} }
&.active { &.active {
&::before { &::before {
color: $grey-dk-100; color: $body-text-color;
} }
} }
} }
@@ -63,6 +64,16 @@
@include mq(md) { @include mq(md) {
@include fs-3; @include fs-3;
} }
.navigation-list-child-list {
display: none;
}
&.active {
.navigation-list-child-list {
display: block;
}
}
} }
.navigation-list-link { .navigation-list-link {
@@ -72,7 +83,7 @@
&.active { &.active {
font-weight: 600; font-weight: 600;
color: $grey-dk-200; color: $body-heading-color;
text-decoration: none; text-decoration: none;
} }
} }
@@ -91,16 +102,6 @@
} }
} }
.side-bar {
display: flex;
flex-wrap: wrap;
@include mq(md) {
display: block;
overflow-y: auto;
}
}
.navigation-list-toggle { .navigation-list-toggle {
position: absolute; position: absolute;
right: $sp-4; right: $sp-4;
@@ -111,6 +112,11 @@
} }
// Breadcrumb nav // Breadcrumb nav
.breadcrumb-nav {
@include mq(md) {
margin-top: -$sp-4;
}
}
.breadcrumb-nav-list { .breadcrumb-nav-list {
padding-left: 0; padding-left: 0;

View File

@@ -7,19 +7,21 @@
z-index: 99; z-index: 99;
display: none; display: none;
flex-grow: 1; flex-grow: 1;
padding-bottom: $gutter-spacing / 2;
background-color: $white;
padding: $sp-2; padding: $sp-2;
margin-bottom: $sp-3; margin-bottom: $sp-3;
background-color: $white;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07), 0 3px 10px rgba(0, 0, 0, 0.05);
@include mq(md) { @include mq(md) {
display: block; display: block;
padding-top: $sp-1; padding-top: $sp-1;
padding-right: 0; padding-right: 0;
padding-bottom: $sp-4; padding-bottom: 0;
padding-left: 0; padding-left: 0;
margin-bottom: 0; margin-bottom: 0;
background-color: transparent; background-color: transparent;
box-shadow: none;
} }
&.nav-open { &.nav-open {
@@ -37,20 +39,21 @@
display: block; display: block;
width: 300px; width: 300px;
margin-top: $gutter-spacing; margin-top: $gutter-spacing;
background: $white; background: lighten($body-background-color, 1%);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05);
} }
} }
.search-input-wrap { .search-input-wrap {
display: flex; display: flex;
background-color: $white; background-color: $body-background-color;
} }
.search-input { .search-input {
width: 100%; width: 100%;
padding-top: $sp-1; padding-top: $sp-1;
padding-bottom: $sp-1; padding-bottom: $sp-1;
background-color: $body-background-color;
border-top: 0; border-top: 0;
border-right: 0; border-right: 0;
border-bottom: 0; border-bottom: 0;
@@ -62,9 +65,19 @@
box-shadow: none; box-shadow: none;
+ .search-icon { + .search-icon {
fill: $purple-000; fill: $link-color;
} }
} }
@include fs-5;
@include mq(sm) {
@include fs-3;
}
@include mq(md) {
@include fs-2;
}
} }
.search-icon { .search-icon {
@@ -95,6 +108,7 @@
padding-left: $sp-3; padding-left: $sp-3;
&:hover { &:hover {
background-color: $grey-lt-000; color: $body-heading-color;
background-color: darken($body-background-color, 2%);
} }
} }

View File

@@ -17,6 +17,7 @@ $white: #fff !default;
$grey-dk-000: #959396 !default; $grey-dk-000: #959396 !default;
$grey-dk-100: #5c5962 !default; $grey-dk-100: #5c5962 !default;
$grey-dk-200: #44434d !default; $grey-dk-200: #44434d !default;
$grey-dk-250: #302d36 !default;
$grey-dk-300: #27262b !default; $grey-dk-300: #27262b !default;
$grey-lt-000: #f5f6fa !default; $grey-lt-000: #f5f6fa !default;
@@ -49,9 +50,16 @@ $red-100: #f96e65 !default;
$red-200: #e94c4c !default; $red-200: #e94c4c !default;
$red-300: #dd2e2e !default; $red-300: #dd2e2e !default;
$body-background-color: $white !default;
$sidebar-color: $grey-lt-000 !default;
$code-background-color: $grey-lt-000 !default;
$body-text-color: $grey-dk-100 !default; $body-text-color: $grey-dk-100 !default;
$body-heading-color: $grey-dk-300 !default; $body-heading-color: $grey-dk-300 !default;
$nav-child-link-color: $grey-dk-100 !default;
$link-color: $purple-000 !default; $link-color: $purple-000 !default;
$btn-primary-color: $purple-100 !default;
$base-button-color: #f7f7f7 !default;
// //
// Media queries in pixels // Media queries in pixels

View File

@@ -15,20 +15,22 @@
@media (min-width: rem($value)) { @media (min-width: rem($value)) {
@content; @content;
} }
} @else { }
@else {
@warn "No value could be retrieved from `#{$media-query}`. " @warn "No value could be retrieved from `#{$media-query}`. "
+ "Please make sure it is defined in `$media-queries` map."; + "Please make sure it is defined in `$media-queries` map.";
} }
} }
// Responsive container // Responsive container
@mixin container { @mixin container {
padding-left: $gutter-spacing-sm;
padding-right: $gutter-spacing-sm; padding-right: $gutter-spacing-sm;
padding-left: $gutter-spacing-sm;
@include mq(md) { @include mq(md) {
padding-left: $gutter-spacing;
padding-right: $gutter-spacing; padding-right: $gutter-spacing;
padding-left: $gutter-spacing;
} }
} }

View File

@@ -1,7 +1,7 @@
// //
// Tables // Tables
// //
// stylelint-disable max-nesting-depth, selector-no-type // stylelint-disable max-nesting-depth, selector-no-type, selector-max-type
table { table {
display: block; display: block;
@@ -25,7 +25,8 @@ td {
padding-right: $sp-3; padding-right: $sp-3;
padding-bottom: $sp-2; padding-bottom: $sp-2;
padding-left: $sp-3; padding-left: $sp-3;
border-bottom: $border $grey-lt-000; background-color: lighten($body-background-color, 2%);
border-bottom: $border rgba($border-color, 0.5);
border-left: $border $border-color; border-left: $border $border-color;
&:first-of-type { &:first-of-type {

View File

@@ -1,7 +1,7 @@
// //
// Typography // Typography
// //
// stylelint-disable primer/selector-no-utility, selector-no-type // stylelint-disable primer/selector-no-utility, selector-no-type, selector-max-type
h1, h1,
.text-alpha { .text-alpha {

View File

@@ -16,6 +16,10 @@
color: $grey-dk-200 !important; color: $grey-dk-200 !important;
} }
.text-grey-dk-250 {
color: $grey-dk-250 !important;
}
.text-grey-dk-300 { .text-grey-dk-300 {
color: $grey-dk-300 !important; color: $grey-dk-300 !important;
} }
@@ -130,6 +134,10 @@
background-color: $grey-dk-200 !important; background-color: $grey-dk-200 !important;
} }
.bg-grey-dk-250 {
background-color: $grey-dk-250 !important;
}
.bg-grey-dk-300 { .bg-grey-dk-300 {
background-color: $grey-dk-300 !important; background-color: $grey-dk-300 !important;
} }

View File

@@ -0,0 +1,41 @@
---
# this ensures Jekyll reads the file to be transformed into CSS later
# only Main files contain this front matter, not partials.
---
//
// Import external dependencies
//
@import "./vendor/normalize.scss/normalize.scss";
//
// Import Just the Docs scss
//
// Support
@import "./support/support";
//
// Import custom color scheme scss
//
@import "./color_schemes/dark.scss";
// Modules
@import "./base";
@import "./layout";
@import "./content";
@import "./navigation";
@import "./typography";
@import "./labels";
@import "./buttons";
@import "./search";
@import "./tables";
@import "./code";
@import "./utilities/utilities";
//
// Import custom overrides
//
@import "./custom/custom";

View File

@@ -4,20 +4,25 @@
--- ---
// //
// Import dependancies // Import external dependencies
// //
@import "./normalize.scss/normalize.scss"; @import "./vendor/normalize.scss/normalize.scss";
// //
// Import Just the docs scss // Import Just the Docs scss
// //
// Support // Support
@import "./support/support"; @import "./support/support";
// Custom overrides //
@import "./custom/custom"; // Import custom color scheme scss
//
{% if site.color_scheme == "dark" %}
@import "./color_schemes/dark.scss";
{% endif %}
// Modules // Modules
@import "./base"; @import "./base";
@@ -31,3 +36,8 @@
@import "./tables"; @import "./tables";
@import "./code"; @import "./code";
@import "./utilities/utilities"; @import "./utilities/utilities";
//
// Import custom overrides
//
@import "./custom/custom";

View File

@@ -54,7 +54,7 @@ function initSearch() {
jsPath = source.replace('just-the-docs.js', ''); jsPath = source.replace('just-the-docs.js', '');
jsonPath = jsPath + '/search-data.json'; jsonPath = jsPath + 'search-data.json';
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();
request.open('GET', jsonPath, true); request.open('GET', jsonPath, true);
@@ -108,7 +108,7 @@ function initSearch() {
} else { } else {
var results = index.search(query); var results = index.search(query);
if (results.length > 1) { if (results.length > 0) {
searchResults.classList.add('active'); searchResults.classList.add('active');
var resultsList = document.createElement('ul'); var resultsList = document.createElement('ul');
searchResults.appendChild(resultsList); searchResults.appendChild(resultsList);
@@ -150,12 +150,21 @@ function initSearch() {
} }
} }
function pageFocus() {
var mainContent = document.querySelector('.js-main-content');
mainContent.focus();
console.log(mainContent)
}
// Document ready // Document ready
function ready(){ function ready(){
toggleNav(); toggleNav();
initSearch(); pageFocus();
if (typeof lunr !== 'undefined') {
initSearch();
}
} }
// in case the document is already rendered // in case the document is already rendered

View File

@@ -1,12 +1,12 @@
--- ---
--- ---
{ {
{% for page in site.html_pages %}"{{ forloop.index0 }}": { {% for page in site.html_pages %}{% if page.search_exclude != true %}"{{ forloop.index0 }}": {
"id": "{{ forloop.index0 }}", "id": "{{ forloop.index0 }}",
"title": "{{ page.title | xml_escape }}", "title": "{{ page.title | replace: '&amp;', '&' }}",
"content": "{{ page.content | markdownify | strip_html | xml_escape | remove: 'Table of contents' | strip_newlines | replace: '\', ' ' }}", "content": "{{ page.content | markdownify | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\', ' ' | normalize_whitespace }}",
"url": "{{ page.url | absolute_url | xml_escape }}", "url": "{{ page.url | absolute_url }}",
"relUrl": "{{ page.url | xml_escape }}" "relUrl": "{{ page.url }}"
}{% if forloop.last %}{% else %}, }{% unless forloop.last %},{% endunless %}
{% endif %}{% endfor %} {% endif %}{% endfor %}
} }

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
gem_dir = File.expand_path("..",File.dirname(__FILE__)) gem_dir = File.expand_path("..",File.dirname(__FILE__))
$LOAD_PATH.unshift gem_dir# Look in gem directory for resources first. $LOAD_PATH.unshift gem_dir # Look in gem directory for resources first.
exec_type = ARGV[0] exec_type = ARGV[0]
if exec_type == 'rake' then if exec_type == 'rake' then

72
docs/configuration.md Normal file
View File

@@ -0,0 +1,72 @@
---
layout: default
title: Configuration
nav_order: 2
---
# Configuration
{: .no_toc }
Just the Docs has some specific configuration parameters that can be defined in your Jekyll site's _config.yml file.
{: .fs-6 .fw-300 }
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
View this site's [_config.yml](https://github.com/pmarsceill/just-the-docs/tree/master/_config.yml) file as an example.
## Search enabled
```yaml
# Enable or disable the site search
search_enabled: true
```
## Aux links
```yaml
# Aux links for the upper right navigation
aux_links:
"Just the Docs on GitHub":
- "//github.com/pmarsceill/just-the-docs"
```
## Color scheme
```yaml
# Color scheme currently only supports "dark" or nil (default)
color_scheme: "dark"
```
<button class="btn js-toggle-dark-mode">Preview dark color scheme</button>
<script>
const toggleDarkMode = document.querySelector('.js-toggle-dark-mode')
const cssFile = document.querySelector('[rel="stylesheet"]')
const originalCssRef = cssFile.getAttribute('href')
const darkModeCssRef = originalCssRef.replace('just-the-docs.css', 'dark-mode-preview.css')
addEvent(toggleDarkMode, 'click', function(){
if (cssFile.getAttribute('href') === originalCssRef) {
cssFile.setAttribute('href', darkModeCssRef)
} else {
cssFile.setAttribute('href', originalCssRef)
}
})
</script>
See [Customization]({{ site.baseurl }}{% link docs/customization.md %}) for more information.
## Google Analytics
```yaml
# Google Analytics Tracking (optional)
# e.g, UA-1234567-89
ga_tracking: UA-5555555-55
```

View File

@@ -1,11 +1,11 @@
--- ---
layout: default layout: default
title: Customization title: Customization
nav_order: 5 nav_order: 6
--- ---
# Customization # Customization
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -15,11 +15,48 @@ nav_order: 5
--- ---
## Visual customization ## Color schemes
{: .d-inline-block }
To customize your sites aesthetic, open `_sass/custom/custom.scss` in your editor to see if there is a variable that you can override. Most styles like fonts, colors, spacing, etc.. are derived from these variables. To override a specific variable, uncomment out its line and change its value. New
{: .label .label-green }
For example, to change the link color from the purple default to blue, open `_sass/custom/custom.css` and find the link color variable on line `44`. Uncomment it out, and change it's value to our `$blue-000` variable, or another shade of your choosing. Just the Docs supports two color schemes: light (default), and dark.
To enable a color scheme, set the `color_scheme` parameter in your site's `_config.yml` file:
#### Example
{: .no_toc }
```yaml
# Color scheme currently only supports "dark" or nil (default)
color_scheme: "dark"
```
<button class="btn js-toggle-dark-mode">Preview dark color scheme</button>
<script>
const toggleDarkMode = document.querySelector('.js-toggle-dark-mode')
const cssFile = document.querySelector('[rel="stylesheet"]')
const originalCssRef = cssFile.getAttribute('href')
const darkModeCssRef = originalCssRef.replace('just-the-docs.css', 'dark-mode-preview.css')
addEvent(toggleDarkMode, 'click', function(){
if (cssFile.getAttribute('href') === originalCssRef) {
cssFile.setAttribute('href', darkModeCssRef)
} else {
cssFile.setAttribute('href', originalCssRef)
}
})
</script>
## Specific visual customization
To customize your sites aesthetic, open `_sass/custom/custom.scss` in your editor to see if there is a variable that you can override. Most styles like fonts, colors, spacing, etc. are derived from these variables. To override a specific variable, uncomment its line and change its value.
For example, to change the link color from the purple default to blue, open `_sass/custom/custom.css` and find the `$link-color` variable on line `50`. Uncomment it, and change its value to our `$blue-000` variable, or another shade of your choosing.
#### Example
{: .no_toc }
```scss ```scss
// ... // ...
@@ -31,14 +68,6 @@ $link-color: $blue-000;
// ... // ...
``` ```
_Note:_ Editing the variables directly in `_sass/support/variables.scss` is not recommended and can cause other dependancies to fail. _Note:_ Editing the variables directly in `_sass/support/variables.scss` is not recommended and can cause other dependencies to fail.
--- ---
## Themes
{: .d-inline-block :}
Coming soon
{: .label .label-yellow :}
Hard at work on a dark theme, and more.

View File

@@ -94,6 +94,30 @@ end
- level 2 item - level 2 item
- level 1 item - level 1 item
### Nesting an ol in ul in an ol
- level 1 item (ul)
1. level 2 item (ol)
1. level 2 item (ol)
- level 3 item (ul)
- level 3 item (ul)
- level 1 item (ul)
1. level 2 item (ol)
1. level 2 item (ol)
- level 3 item (ul)
- level 3 item (ul)
1. level 4 item (ol)
1. level 4 item (ol)
- level 3 item (ul)
- level 3 item (ul)
- level 1 item (ul)
### And a task list
- [ ] Hello, this is a TODO item
- [ ] Hello, this is another TODO item
- [x] Goodbye, this item is done
### Small image ### Small image
![](https://assets-cdn.github.com/images/icons/emoji/octocat.png) ![](https://assets-cdn.github.com/images/icons/emoji/octocat.png)

View File

@@ -1,7 +1,7 @@
--- ---
layout: default layout: default
title: Navigation Structure title: Navigation Structure
nav_order: 4 nav_order: 5
--- ---
# Navigation Structure # Navigation Structure
@@ -17,15 +17,18 @@ nav_order: 4
## Main navigation ## Main navigation
The main navigation for your Just the Docs site is on the left side of the page at large screens and on the top (behind a tap) on small screens. The main navigation can be structured to accommodate a multi-level menu system (parent pages with children). The main navigation for your Just the Docs site is on the left side of the page at large screens and on the top (behind a tap) on small screens. The main navigation can be structured to accommodate a multi-level menu system (pages with children and grandchildren).
### Top level pages By default, all pages will appear as top level pages in the main nav unless a parent page is defined (see [Pages with Children](#pages-with-children)).
By default, all pages will appear as top level pages in the main nav. ---
### Ordering pages ## Ordering pages
To specify a page order, use the `nav_order` variable in your pages' YAML front matter. To specify a page order, use the `nav_order` parameter in your pages' YAML front matter.
#### Example
{: .no_toc }
```yaml ```yaml
--- ---
@@ -35,9 +38,28 @@ nav_order: 4
--- ---
``` ```
### Pages with children ---
Sometimes you will want to create a page with many children (a section). To accomplish this you need to a few things. First, it is recommended that you keep pages that are related in a directory together... For example, in these docs, we keep all of the written documentation in the `./docs` directory and each of the sections in subdirectories like `./docs/ui-components` and `./docs/utilities`. This gives is an organization like: ## Excluding pages
For specific pages that you do not wish to include in the main navigation, e.g. a 404 page or a landing page, use the `nav_exclude: true` parameter in the YAML front matter for that page.
#### Example
{: .no_toc }
```yaml
---
layout: default
title: 404
nav_exclude: true
---
```
---
## Pages with children
Sometimes you will want to create a page with many children (a section). First, it is recommended that you keep pages that are related in a directory together... For example, in these docs, we keep all of the written documentation in the `./docs` directory and each of the sections in subdirectories like `./docs/ui-components` and `./docs/utilities`. This gives us an organization like:
``` ```
+-- .. +-- ..
@@ -53,7 +75,7 @@ Sometimes you will want to create a page with many children (a section). To acco
| | +-- typography.md | | +-- typography.md
| | | |
| |-- utilities | |-- utilities
| | |-- utilities.md (parent page) | | |-- utilities.md (parent page)
| | |-- color.md | | |-- color.md
| | |-- layout.md | | |-- layout.md
| | |-- responsive-modifiers.md | | |-- responsive-modifiers.md
@@ -66,51 +88,130 @@ Sometimes you will want to create a page with many children (a section). To acco
+-- .. +-- ..
``` ```
On the parent pages, add 3 YAML front matter variables: On the parent pages, add 2 YAML front matter parameters:
- `has_children: true` (tells us that this a parent page) - `has_children: true` (tells us that this is a parent page)
- `parent: ` set this to the title of the parent page (in this case, it's this page's title) - `permalink:` set this to the site directory that contains the child pages
- `permalink: ` set this to the directory that the contains the pages
#### Example #### Example
{: .no_toc } {: .no_toc }
```yaml ```yaml
---
layout: default layout: default
title: UI Components title: UI Components
nav_order: 2 nav_order: 2
has_children: true has_children: true
parent: UI Components permalink: /docs/ui-components
permalink: /ui-components ---
``` ```
Here we're setting up the UI Components landing page that is available at `/ui-components`, has children and is ordered second in the main nav. Here we're setting up the UI Components landing page that is available at `/docs/ui-components`, which has children and is ordered second in the main nav.
### Child pages ### Child pages
{: .text-gamma }
On child pages, simply set the `parent:` YAML front matter to whatever the parent's page title is and set a nav order (this number is now scoped within the section). On child pages, simply set the `parent:` YAML front matter to whatever the parent's page title is and set a nav order (this number is now scoped within the section).
#### Example #### Example
{: .no_toc } {: .no_toc }
```yaml ```yaml
---
layout: default layout: default
title: Buttons title: Buttons
parent: UI Components parent: UI Components
nav_order: 2 nav_order: 2
---
``` ```
The Buttons page appears a child of UI Components and appears second in the UI Components section. The Buttons page appears as a child of UI Components and appears second in the UI Components section.
### Auto-generating Table of Contents
By default, all pages with children will automatically append a Table of Contents which lists the child pages after the parent page's content. To disable this auto Table of Contents, set `has_toc: false` in the parent page's YAML front matter.
#### Example
{: .no_toc }
```yaml
---
layout: default
title: UI Components
nav_order: 2
has_children: true
has_toc: false
permalink: /docs/ui-components
---
```
### Children with children
{: .text-gamma }
Child pages can also have children (grandchildren). This is achieved by using a similar pattern on the child and grandchild pages.
1. Add the `has_children` attribute to the child
1. Add the `parent` and `grand_parent` attribute to the grandchild
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Buttons
parent: UI Components
nav_order: 2
has_children: true
---
```
```yaml
---
layout: default
title: Buttons Child Page
parent: Buttons
grand_parent: UI Components
nav_order: 1
---
```
This would create the following navigation structure:
```
+-- ..
|
|-- UI Components
| |-- ..
| |
| |-- Buttons
| | |-- Button Child Page
| |
| |-- ..
|
+-- ..
```
--- ---
## Breadcrumbs ## Auxiliary Navigation
Breadcrumbs are auto generated based on the parent/child structure and the directory structure for the site. In order for breadcrumbs to work correctly for pages children, the URL structure must be the slugified version of the parent page's title. For example, the page UI Components, must use the `/ui-components` directory to house its descendant pages. To add a auxiliary navigation item to your site (in the upper right on all pages), add it to the `aux_nav` [configuration option]({{ site.baseurl }}{% link docs/configuration.md %}#aux-nav) in your site's `_config.yml` file.
#### Example
{: .no_toc }
```yaml
# Aux links for the upper right navigation
aux_links:
"Just the Docs on GitHub":
- "//github.com/pmarsceill/just-the-docs"
```
--- ---
## In-page navigation with Table of Contents ## In-page navigation with Table of Contents
To generate a Table of Contents on your docs pages, you can use the `{:toc}` method from Kramdown, immediately after an `<ol>` in markdown. This will automatically generate an ordered list of anchor links to various sections of page based on headings and heading levels. There may be occasions where you're using a heading and you don't want it to show up in the TOC, to skip a particular heading use the `{: .no_toc }` CSS class. To generate a Table of Contents on your docs pages, you can use the `{:toc}` method from Kramdown, immediately after an `<ol>` in Markdown. This will automatically generate an ordered list of anchor links to various sections of the page based on headings and heading levels. There may be occasions where you're using a heading and you don't want it to show up in the TOC, so to skip a particular heading use the `{: .no_toc }` CSS class.
#### Example #### Example
{: .no_toc } {: .no_toc }

View File

@@ -1,42 +1,76 @@
--- ---
layout: default layout: default
title: Search title: Search
nav_order: 6 nav_order: 7
--- ---
# Search # Search
{: .no_toc }
Just the docs uses [lunr.js](http://lunrjs.com) to add a client-side search interface powered by a JSON index that Jekyll generates. All search results are shown in an auto-complete style interface (there is no search results page). By default, all generated html pages are indexed using the following data points: ## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Just the Docs uses [lunr.js](http://lunrjs.com) to add a client-side search interface powered by a JSON index that Jekyll generates. All search results are shown in an auto-complete style interface (there is no search results page). By default, all generated HTML pages are indexed using the following data points:
- Page title - Page title
- Page content - Page content
- Page URL - Page URL
## Setup search ## Set up search
Before you can use search, you must initialize the feature by running this ### Generate search index
rake command that comes with the `just-the-docs`
Before you can use search, you must initialize the feature by running this `rake` command that comes with `just-the-docs`:
```bash ```bash
$ bundle exec just-the-docs rake search:init $ bundle exec just-the-docs rake search:init
``` ```
This command creates the `search-data.json` file that Jekyll uses to create This command creates the `search-data.json` file that Jekyll uses to create your search index. Alternatively, you can create the file manually in the `assets/js/` directory of your Jekyll site with this content:
your search index. Alternatively, you can create the file manually in the
root of your Jekyll site with this content:
```{% raw %} ```liquid
--- {% raw %}---
--- ---
{ {
{% for page in site.html_pages %}"{{ forloop.index0 }}": { {% for page in site.html_pages %}{% if page.search_exclude != true %}"{{ forloop.index0 }}": {
"id": "{{ forloop.index0 }}", "id": "{{ forloop.index0 }}",
"title": "{{ page.title | xml_escape }}", "title": "{{ page.title | replace: '&amp;', '&' }}",
"content": "{{ page.content | markdownify | strip_html | xml_escape | remove: 'Table of contents' | remove: page.title | strip_newlines | replace: '\', ' '}}", "content": "{{ page.content | markdownify | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\', ' ' | normalize_whitespace }}",
"url": "{{ page.url | xml_escape }}" "url": "{{ page.url | absolute_url }}",
}{% if forloop.last %}{% else %}, "relUrl": "{{ page.url }}"
}{% unless forloop.last %},{% endunless %}
{% endif %}{% endfor %} {% endif %}{% endfor %}
}{% endraw %} }{% endraw %}
``` ```
You can modify this by modifying the forloop in `search-data.json` and the javascript in `just-the-docs.js` on line 30. _Note: If you don't run this rake command or create this file manually, search will not work (or it will use the search index data from this docs site, not your site's content)._
### Enable search in configuration
In your site's `_config.yml`, enable search:
```yaml
# Enable or disable the site search
search_enabled: true
```
## Hiding pages from search
Sometimes you might have a page that you don't want to be indexed for the search nor to show up in search results, e.g, a 404 page. To exclude a page from search, add the `search_exclude: true` parameter to the page's YAML front matter:
#### Example
{: .no_toc }
```yaml
---
layout: default
title: Page not found
nav_exclude: true
search_exclude: true
---
```

View File

@@ -6,7 +6,7 @@ nav_order: 2
--- ---
# Buttons # Buttons
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -21,7 +21,6 @@ nav_order: 2
### Links that look like buttons ### Links that look like buttons
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
[Link button](http://example.com/){: .btn } [Link button](http://example.com/){: .btn }
[Link button](http://example.com/){: .btn .btn-purple } [Link button](http://example.com/){: .btn .btn-purple }
@@ -29,10 +28,8 @@ nav_order: 2
[Link button](http://example.com/){: .btn .btn-green } [Link button](http://example.com/){: .btn .btn-green }
[Link button](http://example.com/){: .btn .btn-outline } [Link button](http://example.com/){: .btn .btn-outline }
</div> </div>
```markdown ```markdown
[Link button](http://example.com/){: .btn } [Link button](http://example.com/){: .btn }
[Link button](http://example.com/){: .btn .btn-purple } [Link button](http://example.com/){: .btn .btn-purple }
@@ -44,13 +41,10 @@ nav_order: 2
### Button element ### Button element
GitHub flavored markdown does not support the `button` element, so you'll have to use inline HTML for this: GitHub Flavored Markdown does not support the `button` element, so you'll have to use inline HTML for this:
<div class="code-example"> <div class="code-example">
<button type="button" name="button" class="btn">Button element</button> <button type="button" name="button" class="btn">Button element</button>
</div> </div>
```html ```html
<button type="button" name="button" class="btn">Button element</button> <button type="button" name="button" class="btn">Button element</button>
@@ -62,11 +56,9 @@ GitHub flavored markdown does not support the `button` element, so you'll have t
### Button size ### Button size
Wrap the button in container that uses the [font-size utility classes]({{ Wrap the button in a container that uses the [font-size utility classes]({{ site.baseurl }}{% link docs/utilities/typography.md %}) to scale buttons:
site.baseurl }}{% link docs/utilities/typography.md %}) to scale buttons:
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
<span class="fs-6"> <span class="fs-6">
[Big ass button](http://example.com/){: .btn } [Big ass button](http://example.com/){: .btn }
</span> </span>
@@ -74,7 +66,6 @@ site.baseurl }}{% link docs/utilities/typography.md %}) to scale buttons:
<span class="fs-3"> <span class="fs-3">
[Tiny ass button](http://example.com/){: .btn } [Tiny ass button](http://example.com/){: .btn }
</span> </span>
</div> </div>
```markdown ```markdown
<span class="fs-8"> <span class="fs-8">
@@ -88,20 +79,19 @@ site.baseurl }}{% link docs/utilities/typography.md %}) to scale buttons:
### Spacing between buttons ### Spacing between buttons
Use the [margin utility classes]({{ site.baseurl }}{% link docs/utilities/utilities.md %}#spacing) to add spacing between two buttons in the same block. Use the [margin utility classes]({{ site.baseurl }}{% link docs/utilities/layout.md %}#spacing) to add spacing between two buttons in the same block.
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
[Button with space](http://example.com/){: .btn .btn-purple .mr-2 }
[Button ](http://example.com/){: .btn .btn-blue .mr-2 }
[Button with space](http://example.com/){: .btn .btn-purple .mr-2} [Button with more space](http://example.com/){: .btn .btn-green .mr-4 }
[Button ](http://example.com/){: .btn .btn-blue .mr-2}
[Button with more space](http://example.com/){: .btn .btn-green .mr-4}
[Button ](http://example.com/){: .btn .btn-blue } [Button ](http://example.com/){: .btn .btn-blue }
</div> </div>
```markdown ```markdown
[Button with space](http://example.com/){: .btn .btn-purple .mr-2} [Button with space](http://example.com/){: .btn .btn-purple .mr-2 }
[Button ](http://example.com/){: .btn .btn-blue } [Button ](http://example.com/){: .btn .btn-blue }
[Button with more space](http://example.com/){: .btn .btn-green .mr-4} [Button with more space](http://example.com/){: .btn .btn-green .mr-4 }
[Button ](http://example.com/){: .btn .btn-blue } [Button ](http://example.com/){: .btn .btn-blue }
``` ```

View File

@@ -2,11 +2,11 @@
layout: default layout: default
title: Code title: Code
parent: UI Components parent: UI Components
nav_order: 5 nav_order: 6
--- ---
# Code # Code
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -18,12 +18,10 @@ nav_order: 5
## Inline code ## Inline code
Code can be rendered inline using single ticks by wrapping your code in single back ticks. Code can be rendered inline by wrapping it in single back ticks.
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
Lorem ipsum dolor sit amet, `<inline code snippet>` adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, `<inline code snippet>` adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div> </div>
```markdown ```markdown
Lorem ipsum dolor sit amet, `<inline code snippet>` adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, `<inline code snippet>` adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
@@ -33,7 +31,7 @@ Lorem ipsum dolor sit amet, `<inline code snippet>` adipisicing elit, sed do eiu
## Syntax highlighted code blocks ## Syntax highlighted code blocks
Use Jekyll's built in syntax highlighting with Rouge for code blocks by using three backticks, followed by the language name: Use Jekyll's built-in syntax highlighting with Rouge for code blocks by using three backticks, followed by the language name:
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
```js ```js
@@ -58,7 +56,7 @@ var fun = function lang(l) {
## Code blocks with rendered examples ## Code blocks with rendered examples
To demonstrate front end code, sometimes it useful to show a rendered example of that code. After including the styles from your project that you'll need to show the rendering, you can use a div with the `code-example` class, followed by the code block syntax. If you want to render your output with Markdown instead of HTML, use the `markdown="1"` attribute to tell Jekyll that the code you are rendering will be in Markdown format... This is about to get meta... To demonstrate front end code, sometimes it's useful to show a rendered example of that code. After including the styles from your project that you'll need to show the rendering, you can use a `<div>` with the `code-example` class, followed by the code block syntax. If you want to render your output with Markdown instead of HTML, use the `markdown="1"` attribute to tell Jekyll that the code you are rendering will be in Markdown format... This is about to get meta...
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">

View File

@@ -10,44 +10,40 @@ nav_order: 3
Use labels as a way to add an additional mark to a section of your docs. Labels come in a few colors. By default, labels will be blue. Use labels as a way to add an additional mark to a section of your docs. Labels come in a few colors. By default, labels will be blue.
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
Default label Default label
{: .label } {: .label }
Blue label Blue label
{: .label .label-blue} {: .label .label-blue }
Stable Stable
{: .label .label-green} {: .label .label-green }
New release New release
{: .label .label-purple} {: .label .label-purple }
Coming soon Coming soon
{: .label .label-yellow} {: .label .label-yellow }
Deprecated Deprecated
{: .label .label-red} {: .label .label-red }
</div> </div>
```markdown ```markdown
Default label Default label
{: .label } {: .label }
Blue label Blue label
{: .label .label-blue} {: .label .label-blue }
Stable Stable
{: .label .label-green} {: .label .label-green }
New release New release
{: .label .label-purple} {: .label .label-purple }
Coming soon Coming soon
{: .label .label-yellow} {: .label .label-yellow }
Deprecated Deprecated
{: .label .label-red} {: .label .label-red }
``` ```

View File

@@ -0,0 +1,99 @@
---
layout: default
title: Lists
parent: UI Components
nav_order: 5
---
# Lists
{: .no_toc }
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Most lists can be rendered with pure Markdown.
## Unordered list
<div class="code-example" markdown="1">
- Item 1
- Item 2
- Item 3
_or_
* Item 1
* Item 2
* Item 3
</div>
```markdown
- Item 1
- Item 2
- Item 3
_or_
* Item 1
* Item 2
* Item 3
```
## Ordered list
<div class="code-example" markdown="1">
1. Item 1
1. Item 2
1. Item 3
</div>
```markdown
1. Item 1
1. Item 2
1. Item 3
```
## Task list
<div class="code-example" markdown="1">
- [ ] hello, this is a todo item
- [ ] hello, this is another todo item
- [x] goodbye, this item is done
</div>
```markdown
- [ ] hello, this is a todo item
- [ ] hello, this is another todo item
- [x] goodbye, this item is done
```
## Definition list
Definition lists require HTML syntax and aren't supported with the GitHub Flavored Markdown compiler.
<div class="code-example" markdown="1">
<dl>
<dt>Name</dt>
<dd>Godzilla</dd>
<dt>Born</dt>
<dd>1952</dd>
<dt>Birthplace</dt>
<dd>Japan</dd>
<dt>Color</dt>
<dd>Green</dd>
</dl>
</div>
```html
<dl>
<dt>Name</dt>
<dd>Godzilla</dd>
<dt>Born</dt>
<dd>1952</dd>
<dt>Birthplace</dt>
<dd>Japan</dd>
<dt>Color</dt>
<dd>Green</dd>
</dl>
```

View File

@@ -6,7 +6,7 @@ nav_order: 1
--- ---
# Typography # Typography
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -24,17 +24,17 @@ By default, Just the Docs uses a native system font stack for sans-serif fonts:
-apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif
``` ```
ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
{: .fs-5 .ls-10 .code-example } {: .fs-5 .ls-10 .code-example }
For monospace type, like code snippets or the pre `<pre>` element, Just the Docs uses a native system font stack for monospace fonts: For monospace type, like code snippets or the `<pre>` element, Just the Docs uses a native system font stack for monospace fonts:
```scss ```scss
"SFMono-Regular", Menlo, Consolas, Monospace "SFMono-Regular", Menlo, Consolas, Monospace
``` ```
ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
{: .fs-5 .ls-10 .text-mono .code-example } {: .fs-5 .ls-10 .text-mono .code-example }
@@ -42,7 +42,7 @@ abcdefghijklmnopqrstuvwxyz
## Responsive type scale ## Responsive type scale
Just the docs uses a responsive type scale that shifts depending on the viewport size. Common elements text elements rendered from markdown use a Just the Docs uses a responsive type scale that shifts depending on the viewport size.
| Selector | Small screen size `font-size` | Large screen size `font-size` | | Selector | Small screen size `font-size` | Large screen size `font-size` |
|:----------------------|:---------------------------------|:------------------------------| |:----------------------|:---------------------------------|:------------------------------|
@@ -51,7 +51,7 @@ Just the docs uses a responsive type scale that shifts depending on the viewport
| `h3`, `.text-gamma` | 16px | 18px | | `h3`, `.text-gamma` | 16px | 18px |
| `h4`, `.text-delta` | 14px | 16px | | `h4`, `.text-delta` | 14px | 16px |
| `h5`, `.text-epsilon` | 16px | 18px | | `h5`, `.text-epsilon` | 16px | 18px |
| `h6`, `.text-zeta ` | 18px | 24px | | `h6`, `.text-zeta` | 18px | 24px |
| `body` | 14px | 16px | | `body` | 14px | 16px |
--- ---
@@ -109,6 +109,6 @@ Text can be **bold**, _italic_, or ~~strikethrough~~.
## Typographic Utilities ## Typographic Utilities
There are a number of specific typographic CSS classes that allow you to do override default styling for font size, font-weight, line height, and capitalization. There are a number of specific typographic CSS classes that allow you to override default styling for font size, font weight, line height, and capitalization.
[View typography utilities]({{ site.baseurl }}{% link docs/utilities/utilities.md %}#typography){: .btn .btn-outline } [View typography utilities]({{ site.baseurl }}{% link docs/utilities/utilities.md %}#typography){: .btn .btn-outline }

View File

@@ -1,10 +1,9 @@
--- ---
layout: default layout: default
title: UI Components title: UI Components
nav_order: 2 nav_order: 3
has_children: true has_children: true
parent: UI Components permalink: /docs/ui-components
permalink: /ui-components
--- ---
# UI Components # UI Components

View File

@@ -1,12 +1,12 @@
--- ---
layout: default layout: default
title: Color title: Color
nav_order: 3
parent: Utilities parent: Utilities
nav_order: 3
--- ---
# Color Utilities # Color Utilities
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -16,7 +16,7 @@ parent: Utilities
--- ---
All the colors used in Just the Docs have been systemsized into a series of variables that have been extended to both font color and background color utility classes. All the colors used in Just the Docs have been systematized into a series of variables that have been extended to both font color and background color utility classes.
## Light Greys ## Light Greys
@@ -34,6 +34,7 @@ All the colors used in Just the Docs have been systemsized into a series of vari
| <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-000"></span> `grey-dk-000` | `.text-grey-dk-000` | `.bg-grey-dk-000` | | <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-000"></span> `grey-dk-000` | `.text-grey-dk-000` | `.bg-grey-dk-000` |
| <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-100"></span> `grey-dk-100` | `.text-grey-dk-100` | `.bg-grey-dk-100` | | <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-100"></span> `grey-dk-100` | `.text-grey-dk-100` | `.bg-grey-dk-100` |
| <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-200"></span> `grey-dk-200` | `.text-grey-dk-200` | `.bg-grey-dk-200` | | <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-200"></span> `grey-dk-200` | `.text-grey-dk-200` | `.bg-grey-dk-200` |
| <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-250"></span> `grey-dk-250` | `.text-grey-dk-250` | `.bg-grey-dk-250` |
| <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-300"></span> `grey-dk-300` | `.text-grey-dk-300` | `.bg-grey-dk-300` | | <span class="d-inline-block p-2 mr-1 v-align-middle bg-grey-dk-300"></span> `grey-dk-300` | `.text-grey-dk-300` | `.bg-grey-dk-300` |
## Purples ## Purples

View File

@@ -1,12 +1,12 @@
--- ---
layout: default layout: default
title: Layout title: Layout
nav_order: 2
parent: Utilities parent: Utilities
nav_order: 2
--- ---
# Layout Utilities # Layout Utilities
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -56,15 +56,14 @@ Spacing values are based on a `1rem = 16px` spacing scale, broken down into thes
#### Examples #### Examples
{: .no_toc } {: .no_toc }
```markdown
In Markdown, use the `{: }` wrapper to apply custom classes: In Markdown, use the `{: }` wrapper to apply custom classes:
```markdown
This paragraph will have a margin bottom of 1rem/16px at large screens. This paragraph will have a margin bottom of 1rem/16px at large screens.
{: .mb-lg-4 } {: .mb-lg-4 }
This paragraph will have 2rem/32px of padding on the right and left at all screen sizes. This paragraph will have 2rem/32px of padding on the right and left at all screen sizes.
{: .px-6 } {: .px-6 }
``` ```
## Vertical Alignment ## Vertical Alignment
@@ -95,9 +94,9 @@ Use these classes in conjunction with the responsive modifiers.
#### Examples #### Examples
{: .no_toc } {: .no_toc }
```markdown
In Markdown, use the `{: }` wrapper to apply custom classes: In Markdown, use the `{: }` wrapper to apply custom classes:
```markdown
This button will be hidden until medium screen sizes: This button will be hidden until medium screen sizes:
[ A button ](#url) [ A button ](#url)
@@ -106,9 +105,8 @@ This button will be hidden until medium screen sizes:
These headings will be `inline-block`: These headings will be `inline-block`:
### heading 3 ### heading 3
{ .d-inline-block } {: .d-inline-block }
### heading 3 ### heading 3
{ .d-inline-block } {: .d-inline-block }
``` ```

View File

@@ -1,8 +1,8 @@
--- ---
layout: default layout: default
title: Responsive Modifiers title: Responsive Modifiers
nav_order: 1
parent: Utilities parent: Utilities
nav_order: 1
--- ---
# Responsive modifiers # Responsive modifiers

View File

@@ -1,12 +1,12 @@
--- ---
layout: default layout: default
title: Typography title: Typography
nav_order: 3
parent: Utilities parent: Utilities
nav_order: 4
--- ---
# Typography Utilities # Typography Utilities
{:.no_toc} {: .no_toc }
## Table of contents ## Table of contents
{: .no_toc .text-delta } {: .no_toc .text-delta }
@@ -117,33 +117,31 @@ Use the `lh-` classes to explicitly apply line height to text.
| `.lh-tight` | 1.1 | Default for headings | | `.lh-tight` | 1.1 | Default for headings |
| `.lh-default` | 1.4 | Default for body (paragraphs) | | `.lh-default` | 1.4 | Default for body (paragraphs) |
<div class="code-example" markdown="1"> <div class="code-example" markdown="1">
No Line height No Line height
No Line height No Line height
{: .lh-0 } {: .lh-0 }
Tight line height Tight line height
Tight line height Tight line height
{: .lh-tight } {: .lh-tight }
Default line height Default line height
Default line height Default line height
{: .fh-default } {: .fh-default }
</div> </div>
```markdown ```markdown
In Markdown, use the `{: }` wrapper to apply custom classes: In Markdown, use the `{: }` wrapper to apply custom classes:
No Line height No Line height
No Line height No Line height
{: .lh-0 } {: .lh-0 }
Tight line height Tight line height
Tight line height Tight line height
{: .lh-tight } {: .lh-tight }
Default line height Default line height
Default line height Default line height
{: .fh-default } {: .fh-default }
``` ```

View File

@@ -1,14 +1,13 @@
--- ---
layout: default layout: default
title: Utilities title: Utilities
nav_order: 3 nav_order: 4
parent: Utilities
has_children: true has_children: true
permalink: /utilities permalink: docs/utilities
--- ---
# Utilities # Utilities
{:.no_toc} {: .no_toc }
CSS utility classes come in handy when you to want to override default styles to give create additional whitespace (margins/padding), unexpected shifts in font-size or weight, add color, or to hide (or show) something a specific screen size. CSS utility classes come in handy when you to want to override default styles to create additional whitespace (margins/padding), correct unexpected shifts in font size or weight, add color, or hide (or show) something at a specific screen size.
{: .fs-6 .fw-300 } {: .fs-6 .fw-300 }

View File

@@ -2,24 +2,36 @@
layout: default layout: default
title: Home title: Home
nav_order: 1 nav_order: 1
description: "Just the Docs is a responsive Jekyll theme with built-in search that is easily customizable and hosted on GitHub Pages."
permalink: /
--- ---
# Focus on writing good documentation # Focus on writing good documentation
{: .fs-9 } {: .fs-9 }
Just the Docs gives your documentation a jumpstart with a responsive Jekyll theme that is easily customizable and hosted on GitHub pages. Just the Docs gives your documentation a jumpstart with a responsive Jekyll theme that is easily customizable and hosted on GitHub Pages.
{: .fs-6 .fw-300 } {: .fs-6 .fw-300 }
[Get started now](#getting-started){: .btn .btn-purple .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/pmarsceill/just-the-docs){: .btn .fs-5 } [Get started now](#getting-started){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/pmarsceill/just-the-docs){: .btn .fs-5 .mb-4 .mb-md-0 }
--- ---
## Getting started ## Getting started
### Dependencies
Just the Docs is built for [Jekyll](https://jekyllrb.com), a static site generator. View the [quick start guide](https://jekyllrb.com/docs/quickstart/) for more information. Just the Docs requires no special Jekyll plugins and can run on GitHub Pages standard Jekyll compiler.
### Installation ### Dependencies
Just the Docs is built for [Jekyll](https://jekyllrb.com), a static site generator. View the [quick start guide](https://jekyllrb.com/docs/) for more information. Just the Docs requires no special Jekyll plugins and can run on GitHub Pages' standard Jekyll compiler.
### Quick start: Use as a GitHub Pages remote theme
1. Add Just the Docs to your Jekyll site's `_config.yml` as a [remote theme](https://blog.github.com/2017-11-29-use-any-theme-with-github-pages/)
```yaml
remote_theme: pmarsceill/just-the-docs
```
<small>You must have GitHub Pages enabled on your repo, one or more Markdown files, and a `_config.yml` file. [See an example repository](https://github.com/pmarsceill/jtd-remote)</small>
### Local installation: Use the gem-based theme
1. Install the Ruby Gem 1. Install the Ruby Gem
```bash ```bash
$ gem install just-the-docs $ gem install just-the-docs
@@ -28,7 +40,7 @@ $ gem install just-the-docs
# .. or add it to your your Jekyll sites Gemfile # .. or add it to your your Jekyll sites Gemfile
gem "just-the-docs" gem "just-the-docs"
``` ```
2. Add Just the Docs to your Jekyll sites `config.yml` 2. Add Just the Docs to your Jekyll sites `_config.yml`
```yaml ```yaml
theme: "just-the-docs" theme: "just-the-docs"
``` ```
@@ -46,11 +58,15 @@ $ bundle exec jekyll serve
``` ```
4. Point your web browser to [http://localhost:4000](http://localhost:4000) 4. Point your web browser to [http://localhost:4000](http://localhost:4000)
### Configure Just the Docs
- [See configuration options]({{ site.baseurl }}{% link docs/configuration.md %})
--- ---
## About the project ## About the project
Just the Docs is &copy; 2017 by [Patrick Marsceill](http://patrickmarsceill.com). Just the Docs is &copy; 2017-2019 by [Patrick Marsceill](http://patrickmarsceill.com).
### License ### License
@@ -61,7 +77,6 @@ Just the Docs is distributed by an [MIT license](https://github.com/pmarsceill/j
When contributing to this repository, please first discuss the change you wish to make via issue, When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change. Read more about becoming a contributor in [our GitHub repo](https://github.com/pmarsceill/just-the-docs#contributing). email, or any other method with the owners of this repository before making a change. Read more about becoming a contributor in [our GitHub repo](https://github.com/pmarsceill/just-the-docs#contributing).
### Code of Conduct ### Code of Conduct
Just the Docs is committed to fostering a welcoming community. Just the Docs is committed to fostering a welcoming community.

View File

@@ -2,19 +2,19 @@
Gem::Specification.new do |spec| Gem::Specification.new do |spec|
spec.name = "just-the-docs" spec.name = "just-the-docs"
spec.version = "0.1.3" spec.version = "0.2.3"
spec.authors = ["Patrick Marsceill"] spec.authors = ["Patrick Marsceill"]
spec.email = ["patrick.marsceill@gmail.com"] spec.email = ["patrick.marsceill@gmail.com"]
spec.summary = %q{A nice looking, high customizable, responsive Jekyll theme for documention with built-in search.} spec.summary = %q{A modern, high customizable, responsive Jekyll theme for documention with built-in search.}
spec.homepage = "https://github.com/pmarsceill/just-the-docs" spec.homepage = "https://github.com/pmarsceill/just-the-docs"
spec.license = "MIT" spec.license = "MIT"
spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{^(assets|bin|_layouts|_includes|lib|Rakefile|_sass|LICENSE|README)}i) } spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{^(assets|bin|_layouts|_includes|lib|Rakefile|_sass|LICENSE|README)}i) }
spec.executables << 'just-the-docs' spec.executables << 'just-the-docs'
spec.add_runtime_dependency "jekyll", "~> 3.3" spec.add_runtime_dependency "jekyll", "~> 3.8.5"
spec.add_runtime_dependency "rake", "~> 12.3.1"
spec.add_development_dependency "bundler", "~> 1.12" spec.add_development_dependency "bundler", "~> 2.0.1"
spec.add_development_dependency "rake", "~> 10.0"
end end

View File

@@ -2,8 +2,9 @@ namespace :search do
desc 'Generate the files needed for search functionality' desc 'Generate the files needed for search functionality'
task :init do task :init do
puts 'Creating search data json file...' puts 'Creating search data json file...'
mkdir_p 'assets/js'
touch 'assets/js/search-data.json' touch 'assets/js/search-data.json'
content = %Q[{{ page.content | markdownify | strip_html | xml_escape | remove: 'Table of contents' | strip_newlines | replace: '\\', ' ' }}] content = %Q[{{ page.content | markdownify | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\\', ' ' | normalize_whitespace }}]
puts 'Done.' puts 'Done.'
puts 'Generating content...' puts 'Generating content...'
@@ -11,12 +12,13 @@ namespace :search do
f.puts '--- f.puts '---
--- ---
{ {
{% for page in site.html_pages %}"{{ forloop.index0 }}": { {% for page in site.html_pages %}{% if page.search_exclude != true %}"{{ forloop.index0 }}": {
"id": "{{ forloop.index0 }}", "id": "{{ forloop.index0 }}",
"title": "{{ page.title | xml_escape }}", "title": "{{ page.title | replace: \'&amp;\', \'&\' }}",
"content": "'+content+'", "content": "'+content+'",
"url": "{{ page.url | xml_escape }}" "url": "{{ page.url | absolute_url }}",
}{% if forloop.last %}{% else %}, "relUrl": "{{ page.url }}"
}{% unless forloop.last %},{% endunless %}
{% endif %}{% endfor %} {% endif %}{% endfor %}
}' }'
end end

1
node_modules/.bin/JSONStream generated vendored
View File

@@ -1 +0,0 @@
../JSONStream/index.js

1
node_modules/.bin/browserslist generated vendored
View File

@@ -1 +0,0 @@
../browserslist/cli.js

1
node_modules/.bin/colorguard generated vendored
View File

@@ -1 +0,0 @@
../colorguard/bin/colorguard

1
node_modules/.bin/css-rule-stream generated vendored
View File

@@ -1 +0,0 @@
../css-rule-stream/index.js

1
node_modules/.bin/doiuse generated vendored
View File

@@ -1 +0,0 @@
../doiuse/cli.js

1
node_modules/.bin/esparse generated vendored
View File

@@ -1 +0,0 @@
../esprima/bin/esparse.js

1
node_modules/.bin/esvalidate generated vendored
View File

@@ -1 +0,0 @@
../esprima/bin/esvalidate.js

1
node_modules/.bin/js-yaml generated vendored
View File

@@ -1 +0,0 @@
../js-yaml/bin/js-yaml.js

1
node_modules/.bin/jsonfilter generated vendored
View File

@@ -1 +0,0 @@
../jsonfilter/cli.js

1
node_modules/.bin/semver generated vendored
View File

@@ -1 +0,0 @@
../semver/bin/semver

1
node_modules/.bin/specificity generated vendored
View File

@@ -1 +0,0 @@
../specificity/bin/specificity

1
node_modules/.bin/strip-indent generated vendored
View File

@@ -1 +0,0 @@
../strip-indent/cli.js

1
node_modules/.bin/stylehacks generated vendored
View File

@@ -1 +0,0 @@
../stylehacks/dist/cli.js

1
node_modules/.bin/stylelint generated vendored
View File

@@ -1 +0,0 @@
../stylelint/bin/stylelint.js

1
node_modules/.bin/window-size generated vendored
View File

@@ -1 +0,0 @@
../window-size/cli.js

2
node_modules/JSONStream/.npmignore generated vendored
View File

@@ -1,2 +0,0 @@
node_modules/*
node_modules

View File

@@ -1,4 +0,0 @@
language: node_js
node_js:
- "0.8"
- "0.10"

View File

@@ -1,15 +0,0 @@
Apache License, Version 2.0
Copyright (c) 2011 Dominic Tarr
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

24
node_modules/JSONStream/LICENSE.MIT generated vendored
View File

@@ -1,24 +0,0 @@
The MIT License
Copyright (c) 2011 Dominic Tarr
Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and
associated documentation files (the "Software"), to
deal in the Software without restriction, including
without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom
the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice
shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,13 +0,0 @@
var request = require('request')
, JSONStream = require('JSONStream')
, es = require('event-stream')
var parser = JSONStream.parse(['rows', true]) //emit parts that match this path (any element of the rows array)
, req = request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
, logger = es.mapSync(function (data) { //create a stream that logs to stderr,
console.error(data)
return data
})
req.pipe(parser)
parser.pipe(logger)

192
node_modules/JSONStream/index.js generated vendored
View File

@@ -1,192 +0,0 @@
#! /usr/bin/env node
var Parser = require('jsonparse')
, through = require('through')
/*
the value of this.stack that creationix's jsonparse has is weird.
it makes this code ugly, but his problem is way harder that mine,
so i'll forgive him.
*/
exports.parse = function (path, map) {
var parser = new Parser()
var stream = through(function (chunk) {
if('string' === typeof chunk)
chunk = new Buffer(chunk)
parser.write(chunk)
},
function (data) {
if(data)
stream.write(data)
stream.queue(null)
})
if('string' === typeof path)
path = path.split('.').map(function (e) {
if (e === '*')
return true
else if (e === '') // '..'.split('.') returns an empty string
return {recurse: true}
else
return e
})
var count = 0, _key
if(!path || !path.length)
path = null
parser.onValue = function () {
if (!this.root && this.stack.length == 1)
stream.root = this.value
if(! path) return
var i = 0 // iterates on path
var j = 0 // iterates on stack
while (i < path.length) {
var key = path[i]
var c
j++
if (key && !key.recurse) {
c = (j === this.stack.length) ? this : this.stack[j]
if (!c) return
if (! check(key, c.key)) return
i++
} else {
i++
var nextKey = path[i]
if (! nextKey) return
while (true) {
c = (j === this.stack.length) ? this : this.stack[j]
if (!c) return
if (check(nextKey, c.key)) { i++; break}
j++
}
}
}
if (j !== this.stack.length) return
count ++
var data = this.value[this.key]
if(null != data)
if(null != (data = map ? map(data) : data))
stream.queue(data)
delete this.value[this.key]
}
parser._onToken = parser.onToken;
parser.onToken = function (token, value) {
parser._onToken(token, value);
if (this.stack.length === 0) {
if (stream.root) {
if(!path)
stream.queue(stream.root)
stream.emit('root', stream.root, count)
count = 0;
stream.root = null;
}
}
}
parser.onError = function (err) {
stream.emit('error', err)
}
return stream
}
function check (x, y) {
if ('string' === typeof x)
return y == x
else if (x && 'function' === typeof x.exec)
return x.exec(y)
else if ('boolean' === typeof x)
return x
else if ('function' === typeof x)
return x(y)
return false
}
exports.stringify = function (op, sep, cl, indent) {
indent = indent || 0
if (op === false){
op = ''
sep = '\n'
cl = ''
} else if (op == null) {
op = '[\n'
sep = '\n,\n'
cl = '\n]\n'
}
//else, what ever you like
var stream
, first = true
, anyData = false
stream = through(function (data) {
anyData = true
var json = JSON.stringify(data, null, indent)
if(first) { first = false ; stream.queue(op + json)}
else stream.queue(sep + json)
},
function (data) {
if(!anyData)
stream.queue(op)
stream.queue(cl)
stream.queue(null)
})
return stream
}
exports.stringifyObject = function (op, sep, cl, indent) {
indent = indent || 0
if (op === false){
op = ''
sep = '\n'
cl = ''
} else if (op == null) {
op = '{\n'
sep = '\n,\n'
cl = '\n}\n'
}
//else, what ever you like
var first = true
, anyData = false
stream = through(function (data) {
anyData = true
var json = JSON.stringify(data[0]) + ':' + JSON.stringify(data[1], null, indent)
if(first) { first = false ; this.queue(op + json)}
else this.queue(sep + json)
},
function (data) {
if(!anyData) this.queue(op)
this.queue(cl)
this.queue(null)
})
return stream
}
if(!module.parent && process.title !== 'browser') {
process.stdin
.pipe(exports.parse(process.argv[2]))
.pipe(exports.stringify('[', ',\n', ']\n', 2))
.pipe(process.stdout)
}

93
node_modules/JSONStream/package.json generated vendored
View File

@@ -1,93 +0,0 @@
{
"_args": [
[
"JSONStream@^0.8.4",
"/Users/pmarsceill/_projects/just-the-docs/node_modules/jsonfilter"
]
],
"_from": "JSONStream@>=0.8.4 <0.9.0",
"_id": "JSONStream@0.8.4",
"_inCache": true,
"_installable": true,
"_location": "/JSONStream",
"_npmUser": {
"email": "dominic.tarr@gmail.com",
"name": "dominictarr"
},
"_npmVersion": "1.4.9",
"_phantomChildren": {},
"_requested": {
"name": "JSONStream",
"raw": "JSONStream@^0.8.4",
"rawSpec": "^0.8.4",
"scope": null,
"spec": ">=0.8.4 <0.9.0",
"type": "range"
},
"_requiredBy": [
"/jsonfilter"
],
"_resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
"_shasum": "91657dfe6ff857483066132b4618b62e8f4887bd",
"_shrinkwrap": null,
"_spec": "JSONStream@^0.8.4",
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/jsonfilter",
"author": {
"email": "dominic.tarr@gmail.com",
"name": "Dominic Tarr",
"url": "http://bit.ly/dominictarr"
},
"bin": {
"JSONStream": "./index.js"
},
"bugs": {
"url": "https://github.com/dominictarr/JSONStream/issues"
},
"dependencies": {
"jsonparse": "0.0.5",
"through": ">=2.2.7 <3"
},
"description": "rawStream.pipe(JSONStream.parse()).pipe(streamOfObjects)",
"devDependencies": {
"assertions": "~2.2.2",
"event-stream": "~0.7.0",
"it-is": "~1",
"render": "~0.1.1",
"tape": "~2.12.3",
"trees": "~0.0.3"
},
"directories": {},
"dist": {
"shasum": "91657dfe6ff857483066132b4618b62e8f4887bd",
"tarball": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz"
},
"engines": {
"node": "*"
},
"homepage": "http://github.com/dominictarr/JSONStream",
"keywords": [
"async",
"json",
"parser",
"parsing",
"stream",
"streaming"
],
"maintainers": [
{
"name": "dominictarr",
"email": "dominic.tarr@gmail.com"
}
],
"name": "JSONStream",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/dominictarr/JSONStream.git"
},
"scripts": {
"test": "set -e; for t in test/*.js; do echo '***' $t '***'; node $t; done"
},
"version": "0.8.4"
}

View File

@@ -1,178 +0,0 @@
# JSONStream
streaming JSON.parse and stringify
<img src=https://secure.travis-ci.org/dominictarr/JSONStream.png?branch=master>
## example
``` js
var request = require('request')
, JSONStream = require('JSONStream')
, es = require('event-stream')
request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
.pipe(JSONStream.parse('rows.*'))
.pipe(es.mapSync(function (data) {
console.error(data)
return data
}))
```
## JSONStream.parse(path)
parse stream of values that match a path
``` js
JSONStream.parse('rows.*.doc')
```
The `..` operator is the recursive descent operator from [JSONPath](http://goessner.net/articles/JsonPath/), which will match a child at any depth (see examples below).
If your keys have keys that include `.` or `*` etc, use an array instead.
`['row', true, /^doc/]`.
If you use an array, `RegExp`s, booleans, and/or functions. The `..` operator is also available in array representation, using `{recurse: true}`.
any object that matches the path will be emitted as 'data' (and `pipe`d down stream)
If `path` is empty or null, no 'data' events are emitted.
### Examples
query a couchdb view:
``` bash
curl -sS localhost:5984/tests/_all_docs&include_docs=true
```
you will get something like this:
``` js
{"total_rows":129,"offset":0,"rows":[
{ "id":"change1_0.6995461115147918"
, "key":"change1_0.6995461115147918"
, "value":{"rev":"1-e240bae28c7bb3667f02760f6398d508"}
, "doc":{
"_id": "change1_0.6995461115147918"
, "_rev": "1-e240bae28c7bb3667f02760f6398d508","hello":1}
},
{ "id":"change2_0.6995461115147918"
, "key":"change2_0.6995461115147918"
, "value":{"rev":"1-13677d36b98c0c075145bb8975105153"}
, "doc":{
"_id":"change2_0.6995461115147918"
, "_rev":"1-13677d36b98c0c075145bb8975105153"
, "hello":2
}
},
]}
```
we are probably most interested in the `rows.*.docs`
create a `Stream` that parses the documents from the feed like this:
``` js
var stream = JSONStream.parse(['rows', true, 'doc']) //rows, ANYTHING, doc
stream.on('data', function(data) {
console.log('received:', data);
});
stream.on('root', function(root, count) {
if (!count) {
console.log('no matches found:', root);
}
});
```
awesome!
### recursive patterns (..)
`JSONStream.parser('docs..value')`
(or `JSONStream.parser(['docs', {recurse: true}, 'value'])` using an array)
will emit every `value` object that is a child, grand-child, etc. of the
`docs` object. In this example, it will match exactly 5 times at various depth
levels, emitting 0, 1, 2, 3 and 4 as results.
```js
{
"total": 5,
"docs": [
{
"key": {
"value": 0,
"some": "property"
}
},
{"value": 1},
{"value": 2},
{"blbl": [{}, {"a":0, "b":1, "value":3}, 10]},
{"value": 4}
]
}
```
## JSONStream.parse(pattern, map)
provide a function that can be used to map or filter
the json output. `map` is passed the value at that node of the pattern,
if `map` return non-nullish (anything but `null` or `undefined`)
that value will be emitted in the stream. If it returns a nullish value,
nothing will be emitted.
## JSONStream.stringify(open, sep, close)
Create a writable stream.
you may pass in custom `open`, `close`, and `seperator` strings.
But, by default, `JSONStream.stringify()` will create an array,
(with default options `open='[\n', sep='\n,\n', close='\n]\n'`)
If you call `JSONStream.stringify(false)`
the elements will only be seperated by a newline.
If you only write one item this will be valid JSON.
If you write many items,
you can use a `RegExp` to split it into valid chunks.
## JSONStream.stringifyObject(open, sep, close)
Very much like `JSONStream.stringify`,
but creates a writable stream for objects instead of arrays.
Accordingly, `open='{\n', sep='\n,\n', close='\n}\n'`.
When you `.write()` to the stream you must supply an array with `[ key, data ]`
as the first argument.
## unix tool
query npm to see all the modules that browserify has ever depended on.
``` bash
curl https://registry.npmjs.org/browserify | JSONStream 'versions.*.dependencies'
```
## numbers
There are occasional problems parsing and unparsing very precise numbers.
I have opened an issue here:
https://github.com/creationix/jsonparse/issues/2
+1
## Acknowlegements
this module depends on https://github.com/creationix/jsonparse
by Tim Caswell
and also thanks to Florent Jaby for teaching me about parsing with:
https://github.com/Floby/node-json-streams
## license
MIT / APACHE2

41
node_modules/JSONStream/test/bool.js generated vendored
View File

@@ -1,41 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is').style('colour')
function randomObj () {
return (
Math.random () < 0.4
? {hello: 'eonuhckmqjk',
whatever: 236515,
lies: true,
nothing: [null],
// stuff: [Math.random(),Math.random(),Math.random()]
}
: ['AOREC', 'reoubaor', {ouec: 62642}, [[[], {}, 53]]]
)
}
var expected = []
, stringify = JSONStream.stringify()
, es = require('event-stream')
, stringified = ''
, called = 0
, count = 10
, ended = false
while (count --)
expected.push(randomObj())
es.connect(
es.readArray(expected),
stringify,
JSONStream.parse([true]),
es.writeArray(function (err, lines) {
it(lines).has(expected)
console.error('PASSED')
})
)

View File

@@ -1,18 +0,0 @@
var test = require('tape')
var JSONStream = require('../')
var testData = '{"rows":[{"hello":"world"}, {"foo": "bar"}]}'
test('basic parsing', function (t) {
t.plan(2)
var parsed = JSONStream.parse("rows.*")
var parsedKeys = {}
parsed.on('data', function(match) {
parsedKeys[Object.keys(match)[0]] = true
})
parsed.on('end', function() {
t.equal(!!parsedKeys['hello'], true)
t.equal(!!parsedKeys['foo'], true)
})
parsed.write(testData)
parsed.end()
})

View File

@@ -1,27 +0,0 @@
var fs = require ('fs');
var net = require('net');
var join = require('path').join;
var file = join(__dirname, 'fixtures','all_npm.json');
var JSONStream = require('../');
var server = net.createServer(function(client) {
var parser = JSONStream.parse([]);
parser.on('end', function() {
console.log('close')
console.error('PASSED');
server.close();
});
client.pipe(parser);
var n = 4
client.on('data', function () {
if(--n) return
client.end();
})
});
server.listen(9999);
var client = net.connect({ port : 9999 }, function() {
fs.createReadStream(file).pipe(client).on('data', console.log) //.resume();
});

View File

@@ -1,29 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is')
var expected = JSON.parse(fs.readFileSync(file))
, parser = JSONStream.parse('rows..rev')
, called = 0
, ended = false
, parsed = []
fs.createReadStream(file).pipe(parser)
parser.on('data', function (data) {
called ++
parsed.push(data)
})
parser.on('end', function () {
ended = true
})
process.on('exit', function () {
it(called).equal(expected.rows.length)
for (var i = 0 ; i < expected.rows.length ; i++)
it(parsed[i]).deepEqual(expected.rows[i].value.rev)
console.error('PASSED')
})

View File

@@ -1,29 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','depth.json')
, JSONStream = require('../')
, it = require('it-is')
var expected = JSON.parse(fs.readFileSync(file))
, parser = JSONStream.parse(['docs', {recurse: true}, 'value'])
, called = 0
, ended = false
, parsed = []
fs.createReadStream(file).pipe(parser)
parser.on('data', function (data) {
called ++
parsed.push(data)
})
parser.on('end', function () {
ended = true
})
process.on('exit', function () {
it(called).equal(5)
for (var i = 0 ; i < 5 ; i++)
it(parsed[i]).deepEqual(i)
console.error('PASSED')
})

View File

@@ -1,44 +0,0 @@
var JSONStream = require('../')
, stream = require('stream')
, it = require('it-is')
var output = [ [], [] ]
var parser1 = JSONStream.parse(['docs', /./])
parser1.on('data', function(data) {
output[0].push(data)
})
var parser2 = JSONStream.parse(['docs', /./])
parser2.on('data', function(data) {
output[1].push(data)
})
var pending = 2
function onend () {
if (--pending > 0) return
it(output).deepEqual([
[], [{hello: 'world'}]
])
console.error('PASSED')
}
parser1.on('end', onend)
parser2.on('end', onend)
function makeReadableStream() {
var readStream = new stream.Stream()
readStream.readable = true
readStream.write = function (data) { this.emit('data', data) }
readStream.end = function (data) { this.emit('end') }
return readStream
}
var emptyArray = makeReadableStream()
emptyArray.pipe(parser1)
emptyArray.write('{"docs":[]}')
emptyArray.end()
var objectArray = makeReadableStream()
objectArray.pipe(parser2)
objectArray.write('{"docs":[{"hello":"world"}]}')
objectArray.end()

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +0,0 @@
{
"total": 5,
"docs": [
{
"key": {
"value": 0,
"some": "property"
}
},
{"value": 1},
{"value": 2},
{"blbl": [{}, {"a":0, "b":1, "value":3}, 10]},
{"value": 4}
]
}

39
node_modules/JSONStream/test/fn.js generated vendored
View File

@@ -1,39 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is')
function fn (s) {
return !isNaN(parseInt(s, 10))
}
var expected = JSON.parse(fs.readFileSync(file))
, parser = JSONStream.parse(['rows', fn])
, called = 0
, ended = false
, parsed = []
fs.createReadStream(file).pipe(parser)
parser.on('data', function (data) {
called ++
it.has({
id: it.typeof('string'),
value: {rev: it.typeof('string')},
key:it.typeof('string')
})
parsed.push(data)
})
parser.on('end', function () {
ended = true
})
process.on('exit', function () {
it(called).equal(expected.rows.length)
it(parsed).deepEqual(expected.rows)
console.error('PASSED')
})

135
node_modules/JSONStream/test/gen.js generated vendored
View File

@@ -1,135 +0,0 @@
return // dont run this test for now since tape is weird and broken on 0.10
var fs = require('fs')
var JSONStream = require('../')
var file = process.argv[2] || '/tmp/JSONStream-test-large.json'
var size = Number(process.argv[3] || 100000)
var tape = require('tape')
// if (process.title !== 'browser') {
tape('out of mem', function (t) {
t.plan(1)
//////////////////////////////////////////////////////
// Produces a random number between arg1 and arg2
//////////////////////////////////////////////////////
var randomNumber = function (min, max) {
var number = Math.floor(Math.random() * (max - min + 1) + min);
return number;
};
//////////////////////////////////////////////////////
// Produces a random string of a length between arg1 and arg2
//////////////////////////////////////////////////////
var randomString = function (min, max) {
// add several spaces to increase chanses of creating 'words'
var chars = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var result = '';
var randomLength = randomNumber(min, max);
for (var i = randomLength; i > 0; --i) {
result += chars[Math.round(Math.random() * (chars.length - 1))];
}
return result;
};
//////////////////////////////////////////////////////
// Produces a random JSON document, as a string
//////////////////////////////////////////////////////
var randomJsonDoc = function () {
var doc = {
"CrashOccurenceID": randomNumber(10000, 50000),
"CrashID": randomNumber(1000, 10000),
"SiteName": randomString(10, 25),
"MachineName": randomString(10, 25),
"Date": randomString(26, 26),
"ProcessDuration": randomString(18, 18),
"ThreadIdentityName": null,
"WindowsIdentityName": randomString(15, 40),
"OperatingSystemName": randomString(35, 65),
"DetailedExceptionInformation": randomString(100, 800)
};
doc = JSON.stringify(doc);
doc = doc.replace(/\,/g, ',\n'); // add new lines after each attribute
return doc;
};
//////////////////////////////////////////////////////
// generates test data
//////////////////////////////////////////////////////
var generateTestData = function (cb) {
console.log('generating large data file...');
var stream = fs.createWriteStream(file, {
encoding: 'utf8'
});
var i = 0;
var max = size;
var writing = false
var split = ',\n';
var doc = randomJsonDoc();
stream.write('[');
function write () {
if(writing) return
writing = true
while(++i < max) {
if(Math.random() < 0.001)
console.log('generate..', i + ' / ' + size)
if(!stream.write(doc + split)) {
writing = false
return stream.once('drain', write)
}
}
stream.write(doc + ']')
stream.end();
console.log('END')
}
write()
stream.on('close', cb)
};
//////////////////////////////////////////////////////
// Shows that parsing 100000 instances using JSONStream fails
//
// After several seconds, you will get this crash
// FATAL ERROR: JS Allocation failed - process out of memory
//////////////////////////////////////////////////////
var testJSONStreamParse_causesOutOfMem = function (done) {
var items = 0
console.log('parsing data files using JSONStream...');
var parser = JSONStream.parse([true]);
var stream = fs.createReadStream(file);
stream.pipe(parser);
parser.on('data', function (data) {
items++
if(Math.random() < 0.01) console.log(items, '...')
});
parser.on('end', function () {
t.equal(items, size)
});
};
//////////////////////////////////////////////////////
// main
//////////////////////////////////////////////////////
fs.stat(file, function (err, stat) {
console.log(stat)
if(err)
generateTestData(testJSONStreamParse_causesOutOfMem);
else
testJSONStreamParse_causesOutOfMem()
})
})
// }

40
node_modules/JSONStream/test/map.js generated vendored
View File

@@ -1,40 +0,0 @@
var test = require('tape')
var JSONStream = require('../')
test('map function', function (t) {
var actual = []
stream = JSONStream.parse([true], function (e) { return e*10 })
stream.on('data', function (v) { actual.push(v)})
stream.on('end', function () {
t.deepEqual(actual, [10,20,30,40,50,60])
t.end()
})
stream.write(JSON.stringify([1,2,3,4,5,6], null, 2))
stream.end()
})
test('filter function', function (t) {
var actual = []
stream = JSONStream
.parse([true], function (e) { return e%2 ? e : null})
.on('data', function (v) { actual.push(v)})
.on('end', function () {
t.deepEqual(actual, [1,3,5])
t.end()
})
stream.write(JSON.stringify([1,2,3,4,5,6], null, 2))
stream.end()
})

View File

@@ -1,42 +0,0 @@
var fs = require ('fs');
var net = require('net');
var join = require('path').join;
var file = join(__dirname, 'fixtures','all_npm.json');
var it = require('it-is');
var JSONStream = require('../');
var str = fs.readFileSync(file);
var datas = {}
var server = net.createServer(function(client) {
var root_calls = 0;
var data_calls = 0;
var parser = JSONStream.parse(['rows', true, 'key']);
parser.on('root', function(root, count) {
++ root_calls;
});
parser.on('data', function(data) {
++ data_calls;
datas[data] = (datas[data] || 0) + 1
it(data).typeof('string')
});
parser.on('end', function() {
console.log('END')
var min = Infinity
for (var d in datas)
min = min > datas[d] ? datas[d] : min
it(root_calls).equal(3);
it(min).equal(3);
server.close();
});
client.pipe(parser);
});
server.listen(9999);
var client = net.connect({ port : 9999 }, function() {
var msgs = str + ' ' + str + '\n\n' + str
client.end(msgs);
});

View File

@@ -1,35 +0,0 @@
var fs = require ('fs');
var net = require('net');
var join = require('path').join;
var file = join(__dirname, 'fixtures','all_npm.json');
var it = require('it-is');
var JSONStream = require('../');
var str = fs.readFileSync(file);
var server = net.createServer(function(client) {
var root_calls = 0;
var data_calls = 0;
var parser = JSONStream.parse();
parser.on('root', function(root, count) {
++ root_calls;
it(root_calls).notEqual(2);
});
parser.on('error', function(err) {
console.log(err);
server.close();
});
parser.on('end', function() {
console.log('END');
server.close();
});
client.pipe(parser);
});
server.listen(9999);
var client = net.connect({ port : 9999 }, function() {
var msgs = str + '}';
client.end(msgs);
});

28
node_modules/JSONStream/test/null.js generated vendored
View File

@@ -1,28 +0,0 @@
var JSONStream = require('../')
var data = [
{ID: 1, optional: null},
{ID: 2, optional: null},
{ID: 3, optional: 20},
{ID: 4, optional: null},
{ID: 5, optional: 'hello'},
{ID: 6, optional: null}
]
var test = require('tape')
test ('null properties', function (t) {
var actual = []
var stream =
JSONStream.parse('*.optional')
.on('data', function (v) { actual.push(v) })
.on('end', function () {
t.deepEqual(actual, [20, 'hello'])
t.end()
})
stream.write(JSON.stringify(data, null, 2))
stream.end()
})

View File

@@ -1,28 +0,0 @@
/*
sometimes jsonparse changes numbers slightly.
*/
var r = Math.random()
, Parser = require('jsonparse')
, p = new Parser()
, assert = require('assert')
, times = 20
while (times --) {
assert.equal(JSON.parse(JSON.stringify(r)), r, 'core JSON')
p.onValue = function (v) {
console.error('parsed', v)
assert.equal(
String(v).slice(0,12),
String(r).slice(0,12)
)
}
console.error('correct', r)
p.write (new Buffer(JSON.stringify([r])))
}

View File

@@ -1,41 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is').style('colour')
function randomObj () {
return (
Math.random () < 0.4
? {hello: 'eonuhckmqjk',
whatever: 236515,
lies: true,
nothing: [null],
stuff: [Math.random(),Math.random(),Math.random()]
}
: ['AOREC', 'reoubaor', {ouec: 62642}, [[[], {}, 53]]]
)
}
var expected = []
, stringify = JSONStream.stringify()
, es = require('event-stream')
, stringified = ''
, called = 0
, count = 10
, ended = false
while (count --)
expected.push(randomObj())
es.connect(
es.readArray(expected),
stringify,
//JSONStream.parse([/./]),
es.writeArray(function (err, lines) {
it(JSON.parse(lines.join(''))).deepEqual(expected)
console.error('PASSED')
})
)

View File

@@ -1,47 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is').style('colour')
, es = require('event-stream')
, pending = 10
, passed = true
function randomObj () {
return (
Math.random () < 0.4
? {hello: 'eonuhckmqjk',
whatever: 236515,
lies: true,
nothing: [null],
stuff: [Math.random(),Math.random(),Math.random()]
}
: ['AOREC', 'reoubaor', {ouec: 62642}, [[[], {}, 53]]]
)
}
for (var ix = 0; ix < pending; ix++) (function (count) {
var expected = {}
, stringify = JSONStream.stringifyObject()
es.connect(
stringify,
es.writeArray(function (err, lines) {
it(JSON.parse(lines.join(''))).deepEqual(expected)
if (--pending === 0) {
console.error('PASSED')
}
})
)
while (count --) {
var key = Math.random().toString(16).slice(2)
expected[key] = randomObj()
stringify.write([ key, expected[key] ])
}
process.nextTick(function () {
stringify.end()
})
})(ix)

35
node_modules/JSONStream/test/test.js generated vendored
View File

@@ -1,35 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is')
var expected = JSON.parse(fs.readFileSync(file))
, parser = JSONStream.parse(['rows', /\d+/ /*, 'value'*/])
, called = 0
, ended = false
, parsed = []
fs.createReadStream(file).pipe(parser)
parser.on('data', function (data) {
called ++
it.has({
id: it.typeof('string'),
value: {rev: it.typeof('string')},
key:it.typeof('string')
})
parsed.push(data)
})
parser.on('end', function () {
ended = true
})
process.on('exit', function () {
it(called).equal(expected.rows.length)
it(parsed).deepEqual(expected.rows)
console.error('PASSED')
})

View File

@@ -1,29 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, '..','package.json')
, JSONStream = require('../')
, it = require('it-is')
var expected = JSON.parse(fs.readFileSync(file))
, parser = JSONStream.parse([])
, called = 0
, ended = false
, parsed = []
fs.createReadStream(file).pipe(parser)
parser.on('data', function (data) {
called ++
it(data).deepEqual(expected)
})
parser.on('end', function () {
ended = true
})
process.on('exit', function () {
it(called).equal(1)
console.error('PASSED')
})

View File

@@ -1,41 +0,0 @@
var fs = require ('fs')
, join = require('path').join
, file = join(__dirname, 'fixtures','all_npm.json')
, JSONStream = require('../')
, it = require('it-is').style('colour')
function randomObj () {
return (
Math.random () < 0.4
? {hello: 'eonuhckmqjk',
whatever: 236515,
lies: true,
nothing: [null],
// stuff: [Math.random(),Math.random(),Math.random()]
}
: ['AOREC', 'reoubaor', {ouec: 62642}, [[[], {}, 53]]]
)
}
var expected = []
, stringify = JSONStream.stringify()
, es = require('event-stream')
, stringified = ''
, called = 0
, count = 10
, ended = false
while (count --)
expected.push(randomObj())
es.connect(
es.readArray(expected),
stringify,
JSONStream.parse([/./]),
es.writeArray(function (err, lines) {
it(lines).has(expected)
console.error('PASSED')
})
)

21
node_modules/ajv-keywords/LICENSE generated vendored
View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2016 Evgeny Poberezkin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Some files were not shown because too many files have changed in this diff Show More