mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
Merge pull request #43 from ShyftNetwork/docs
Move documentation into main repo
This commit is contained in:
commit
c17880e21e
45 changed files with 15153 additions and 0 deletions
15
shyft_documentation/.editorconfig
Normal file
15
shyft_documentation/.editorconfig
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# EditorConfig is awesome: http://EditorConfig.org
|
||||||
|
|
||||||
|
# Top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# Unix-style newlines with a newline ending every file
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.rb]
|
||||||
|
charset = utf-8
|
||||||
18
shyft_documentation/.github/ISSUE_TEMPLATE.md
vendored
Normal file
18
shyft_documentation/.github/ISSUE_TEMPLATE.md
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<!--
|
||||||
|
⚠️ READ THIS BEFORE SUBMITTING ⚠️
|
||||||
|
|
||||||
|
Thanks for submitting a bug to Slate! If you've got a question about how to implement some feature, are encountering some unusual behavior in your fork of Slate, or if you want to chat, please start a new thread in our Spectrum community here! I monitor it for new threads, and it makes it easy for knowledgeable members of the community to help solve problems.
|
||||||
|
|
||||||
|
-> https://spectrum.chat/slate <-
|
||||||
|
|
||||||
|
If you've found a bug with Slate upstream that you're still encountering even in a lightly modified Slate, you're in the right place! Please fill out the form below with the issue you're having and we'll take a look. :)
|
||||||
|
-->
|
||||||
|
|
||||||
|
Operating system: ✍️ TODO
|
||||||
|
Last upstream commit (run `git log --author="Robert Lord" | head -n 1`): ✍️ TODO
|
||||||
|
Browser version(s): ✍️ TODO
|
||||||
|
Ruby version (run `ruby -v`): ✍️ TODO
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
✍️ TODO write your issue here
|
||||||
5
shyft_documentation/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
5
shyft_documentation/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
<!--
|
||||||
|
⚠️ 🚨 ⚠️ STOP AND READ THIS ⚠️ 🚨 ⚠️
|
||||||
|
|
||||||
|
👆👆 see that 'base fork' dropdown above? You should change it! The default value of "lord/slate" submits your change to ALL USERS OF SLATE, not just your company. This is PROBABLY NOT WHAT YOU WANT.
|
||||||
|
-->
|
||||||
24
shyft_documentation/.gitignore
vendored
Normal file
24
shyft_documentation/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
*.gem
|
||||||
|
*.rbc
|
||||||
|
.bundle
|
||||||
|
.config
|
||||||
|
coverage
|
||||||
|
InstalledFiles
|
||||||
|
lib/bundler/man
|
||||||
|
pkg
|
||||||
|
rdoc
|
||||||
|
spec/reports
|
||||||
|
test/tmp
|
||||||
|
test/version_tmp
|
||||||
|
tmp
|
||||||
|
*.DS_STORE
|
||||||
|
build/
|
||||||
|
.cache
|
||||||
|
.vagrant
|
||||||
|
.sass-cache
|
||||||
|
|
||||||
|
# YARD artifacts
|
||||||
|
.yardoc
|
||||||
|
_yardoc
|
||||||
|
doc/
|
||||||
|
.idea/
|
||||||
10
shyft_documentation/.travis.yml
Normal file
10
shyft_documentation/.travis.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
language: ruby
|
||||||
|
|
||||||
|
rvm:
|
||||||
|
- 2.3.3
|
||||||
|
- 2.4.0
|
||||||
|
|
||||||
|
cache: bundler
|
||||||
|
script: bundle exec middleman build
|
||||||
137
shyft_documentation/CHANGELOG.md
Normal file
137
shyft_documentation/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,137 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## Version 2.2
|
||||||
|
|
||||||
|
*January 19, 2018*
|
||||||
|
|
||||||
|
- Fixes bugs with some non-roman languages not generating unique headers
|
||||||
|
- Adds editorconfig, thanks to [Jay Thomas](https://github.com/jaythomas)
|
||||||
|
- Adds optional `NestingUniqueHeadCounter`, thanks to [Vladimir Morozov](https://github.com/greenhost87)
|
||||||
|
- Small fixes to typos and language, thx [Emir Ribić](https://github.com/ribice), [Gregor Martynus](https://github.com/gr2m), and [Martius](https://github.com/martiuslim)!
|
||||||
|
- Adds links to Spectrum chat for questions in README and ISSUE_TEMPLATE
|
||||||
|
|
||||||
|
## Version 2.1
|
||||||
|
|
||||||
|
*October 30, 2017*
|
||||||
|
|
||||||
|
- Right-to-left text stylesheet option, thanks to [Mohammad Hossein Rabiee](https://github.com/mhrabiee)
|
||||||
|
- Fix for HTML5 history state bug, thanks to [Zach Toolson](https://github.com/ztoolson)
|
||||||
|
- Small styling changes, typo fixes, small bug fixes from [Marian Friedmann](https://github.com/rnarian), [Ben Wilhelm](https://github.com/benwilhelm), [Fouad Matin](https://github.com/fouad), [Nicolas Bonduel](https://github.com/NicolasBonduel), [Christian Oliff](https://github.com/coliff)
|
||||||
|
|
||||||
|
Thanks to everyone who submitted PRs for this version!
|
||||||
|
|
||||||
|
## Version 2.0
|
||||||
|
|
||||||
|
*July 17, 2017*
|
||||||
|
|
||||||
|
- All-new statically generated table of contents
|
||||||
|
- Should be much faster loading and scrolling for large pages
|
||||||
|
- Smaller Javascript file sizes
|
||||||
|
- Avoids the problem with the last link in the ToC not ever highlighting if the section was shorter than the page
|
||||||
|
- Fixes control-click not opening in a new page
|
||||||
|
- Automatically updates the HTML title as you scroll
|
||||||
|
- Updated design
|
||||||
|
- New default colors!
|
||||||
|
- New spacings and sizes!
|
||||||
|
- System-default typefaces, just like GitHub
|
||||||
|
- Added search input delay on large corpuses to reduce lag
|
||||||
|
- We even bumped the major version cause hey, why not?
|
||||||
|
- Various small bug fixes
|
||||||
|
|
||||||
|
Thanks to everyone who helped debug or wrote code for this version! It was a serious community effort, and I couldn't have done it alone.
|
||||||
|
|
||||||
|
## Version 1.5
|
||||||
|
|
||||||
|
*February 23, 2017*
|
||||||
|
|
||||||
|
- Add [multiple tabs per programming language](https://github.com/lord/slate/wiki/Multiple-language-tabs-per-programming-language) feature
|
||||||
|
- Upgrade Middleman to add Ruby 1.4.0 compatibility
|
||||||
|
- Switch default code highlighting color scheme to better highlight JSON
|
||||||
|
- Various small typo and bug fixes
|
||||||
|
|
||||||
|
## Version 1.4
|
||||||
|
|
||||||
|
*November 24, 2016*
|
||||||
|
|
||||||
|
- Upgrade Middleman and Rouge gems, should hopefully solve a number of bugs
|
||||||
|
- Update some links in README
|
||||||
|
- Fix broken Vagrant startup script
|
||||||
|
- Fix some problems with deploy.sh help message
|
||||||
|
- Fix bug with language tabs not hiding properly if no error
|
||||||
|
- Add `!default` to SASS variables
|
||||||
|
- Fix bug with logo margin
|
||||||
|
- Bump tested Ruby versions in .travis.yml
|
||||||
|
|
||||||
|
## Version 1.3.3
|
||||||
|
|
||||||
|
*June 11, 2016*
|
||||||
|
|
||||||
|
Documentation and example changes.
|
||||||
|
|
||||||
|
## Version 1.3.2
|
||||||
|
|
||||||
|
*February 3, 2016*
|
||||||
|
|
||||||
|
A small bugfix for slightly incorrect background colors on code samples in some cases.
|
||||||
|
|
||||||
|
## Version 1.3.1
|
||||||
|
|
||||||
|
*January 31, 2016*
|
||||||
|
|
||||||
|
A small bugfix for incorrect whitespace in code blocks.
|
||||||
|
|
||||||
|
## Version 1.3
|
||||||
|
|
||||||
|
*January 27, 2016*
|
||||||
|
|
||||||
|
We've upgraded Middleman and a number of other dependencies, which should fix quite a few bugs.
|
||||||
|
|
||||||
|
Instead of `rake build` and `rake deploy`, you should now run `bundle exec middleman build --clean` to build your server, and `./deploy.sh` to deploy it to Github Pages.
|
||||||
|
|
||||||
|
## Version 1.2
|
||||||
|
|
||||||
|
*June 20, 2015*
|
||||||
|
|
||||||
|
**Fixes:**
|
||||||
|
|
||||||
|
- Remove crash on invalid languages
|
||||||
|
- Update Tocify to scroll to the highlighted header in the Table of Contents
|
||||||
|
- Fix variable leak and update search algorithms
|
||||||
|
- Update Python examples to be valid Python
|
||||||
|
- Update gems
|
||||||
|
- More misc. bugfixes of Javascript errors
|
||||||
|
- Add Dockerfile
|
||||||
|
- Remove unused gems
|
||||||
|
- Optimize images, fonts, and generated asset files
|
||||||
|
- Add chinese font support
|
||||||
|
- Remove RedCarpet header ID patch
|
||||||
|
- Update language tabs to not disturb existing query strings
|
||||||
|
|
||||||
|
## Version 1.1
|
||||||
|
|
||||||
|
*July 27, 2014*
|
||||||
|
|
||||||
|
**Fixes:**
|
||||||
|
|
||||||
|
- Finally, a fix for the redcarpet upgrade bug
|
||||||
|
|
||||||
|
## Version 1.0
|
||||||
|
|
||||||
|
*July 2, 2014*
|
||||||
|
|
||||||
|
[View Issues](https://github.com/tripit/slate/issues?milestone=1&state=closed)
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
|
||||||
|
- Responsive designs for phones and tablets
|
||||||
|
- Started tagging versions
|
||||||
|
|
||||||
|
**Fixes:**
|
||||||
|
|
||||||
|
- Fixed 'unrecognized expression' error
|
||||||
|
- Fixed #undefined hash bug
|
||||||
|
- Fixed bug where the current language tab would be unselected
|
||||||
|
- Fixed bug where tocify wouldn't highlight the current section while searching
|
||||||
|
- Fixed bug where ids of header tags would have special characters that caused problems
|
||||||
|
- Updated layout so that pages with disabled search wouldn't load search.js
|
||||||
|
- Cleaned up Javascript
|
||||||
46
shyft_documentation/CODE_OF_CONDUCT.md
Normal file
46
shyft_documentation/CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@lord.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
||||||
11
shyft_documentation/Gemfile
Normal file
11
shyft_documentation/Gemfile
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
ruby '>=2.3.1'
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
# Middleman
|
||||||
|
gem 'middleman', '~>4.2.1'
|
||||||
|
gem 'middleman-syntax', '~> 3.0.0'
|
||||||
|
gem 'middleman-autoprefixer', '~> 2.7.0'
|
||||||
|
gem "middleman-sprockets", "~> 4.1.0"
|
||||||
|
gem 'rouge', '~> 2.0.5'
|
||||||
|
gem 'redcarpet', '~> 3.4.0'
|
||||||
|
gem 'nokogiri', '~> 1.6.8'
|
||||||
129
shyft_documentation/Gemfile.lock
Normal file
129
shyft_documentation/Gemfile.lock
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
activesupport (5.0.1)
|
||||||
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
|
i18n (~> 0.7)
|
||||||
|
minitest (~> 5.1)
|
||||||
|
tzinfo (~> 1.1)
|
||||||
|
addressable (2.5.0)
|
||||||
|
public_suffix (~> 2.0, >= 2.0.2)
|
||||||
|
autoprefixer-rails (6.6.1)
|
||||||
|
execjs
|
||||||
|
backports (3.6.8)
|
||||||
|
coffee-script (2.4.1)
|
||||||
|
coffee-script-source
|
||||||
|
execjs
|
||||||
|
coffee-script-source (1.12.2)
|
||||||
|
compass-import-once (1.0.5)
|
||||||
|
sass (>= 3.2, < 3.5)
|
||||||
|
concurrent-ruby (1.0.4)
|
||||||
|
contracts (0.13.0)
|
||||||
|
dotenv (2.2.0)
|
||||||
|
erubis (2.7.0)
|
||||||
|
execjs (2.7.0)
|
||||||
|
fast_blank (1.0.0)
|
||||||
|
fastimage (2.0.1)
|
||||||
|
addressable (~> 2)
|
||||||
|
ffi (1.9.17)
|
||||||
|
haml (4.0.7)
|
||||||
|
tilt
|
||||||
|
hamster (3.0.0)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
hashie (3.5.1)
|
||||||
|
i18n (0.7.0)
|
||||||
|
kramdown (1.13.2)
|
||||||
|
listen (3.0.8)
|
||||||
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
|
memoist (0.15.0)
|
||||||
|
middleman (4.2.1)
|
||||||
|
coffee-script (~> 2.2)
|
||||||
|
compass-import-once (= 1.0.5)
|
||||||
|
haml (>= 4.0.5)
|
||||||
|
kramdown (~> 1.2)
|
||||||
|
middleman-cli (= 4.2.1)
|
||||||
|
middleman-core (= 4.2.1)
|
||||||
|
sass (>= 3.4.0, < 4.0)
|
||||||
|
middleman-autoprefixer (2.7.1)
|
||||||
|
autoprefixer-rails (>= 6.5.2, < 7.0.0)
|
||||||
|
middleman-core (>= 3.3.3)
|
||||||
|
middleman-cli (4.2.1)
|
||||||
|
thor (>= 0.17.0, < 2.0)
|
||||||
|
middleman-core (4.2.1)
|
||||||
|
activesupport (>= 4.2, < 5.1)
|
||||||
|
addressable (~> 2.3)
|
||||||
|
backports (~> 3.6)
|
||||||
|
bundler (~> 1.1)
|
||||||
|
contracts (~> 0.13.0)
|
||||||
|
dotenv
|
||||||
|
erubis
|
||||||
|
execjs (~> 2.0)
|
||||||
|
fast_blank
|
||||||
|
fastimage (~> 2.0)
|
||||||
|
hamster (~> 3.0)
|
||||||
|
hashie (~> 3.4)
|
||||||
|
i18n (~> 0.7.0)
|
||||||
|
listen (~> 3.0.0)
|
||||||
|
memoist (~> 0.14)
|
||||||
|
padrino-helpers (~> 0.13.0)
|
||||||
|
parallel
|
||||||
|
rack (>= 1.4.5, < 3)
|
||||||
|
sass (>= 3.4)
|
||||||
|
servolux
|
||||||
|
tilt (~> 2.0)
|
||||||
|
uglifier (~> 3.0)
|
||||||
|
middleman-sprockets (4.1.0)
|
||||||
|
middleman-core (~> 4.0)
|
||||||
|
sprockets (>= 3.0)
|
||||||
|
middleman-syntax (3.0.0)
|
||||||
|
middleman-core (>= 3.2)
|
||||||
|
rouge (~> 2.0)
|
||||||
|
mini_portile2 (2.1.0)
|
||||||
|
minitest (5.10.1)
|
||||||
|
nokogiri (1.6.8.1)
|
||||||
|
mini_portile2 (~> 2.1.0)
|
||||||
|
padrino-helpers (0.13.3.3)
|
||||||
|
i18n (~> 0.6, >= 0.6.7)
|
||||||
|
padrino-support (= 0.13.3.3)
|
||||||
|
tilt (>= 1.4.1, < 3)
|
||||||
|
padrino-support (0.13.3.3)
|
||||||
|
activesupport (>= 3.1)
|
||||||
|
parallel (1.10.0)
|
||||||
|
public_suffix (2.0.5)
|
||||||
|
rack (2.0.1)
|
||||||
|
rb-fsevent (0.9.8)
|
||||||
|
rb-inotify (0.9.8)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
redcarpet (3.4.0)
|
||||||
|
rouge (2.0.7)
|
||||||
|
sass (3.4.23)
|
||||||
|
servolux (0.12.0)
|
||||||
|
sprockets (3.7.1)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
rack (> 1, < 3)
|
||||||
|
thor (0.19.4)
|
||||||
|
thread_safe (0.3.5)
|
||||||
|
tilt (2.0.6)
|
||||||
|
tzinfo (1.2.2)
|
||||||
|
thread_safe (~> 0.1)
|
||||||
|
uglifier (3.0.4)
|
||||||
|
execjs (>= 0.3.0, < 3)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
middleman (~> 4.2.1)
|
||||||
|
middleman-autoprefixer (~> 2.7.0)
|
||||||
|
middleman-sprockets (~> 4.1.0)
|
||||||
|
middleman-syntax (~> 3.0.0)
|
||||||
|
nokogiri (~> 1.6.8)
|
||||||
|
redcarpet (~> 3.4.0)
|
||||||
|
rouge (~> 2.0.5)
|
||||||
|
|
||||||
|
RUBY VERSION
|
||||||
|
ruby 2.3.3p222
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.14.5
|
||||||
13
shyft_documentation/LICENSE
Normal file
13
shyft_documentation/LICENSE
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
19
shyft_documentation/README.md
Normal file
19
shyft_documentation/README.md
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# shyft_geththemessage
|
||||||
|
shyft block explorer api & connectivity
|
||||||
|
|
||||||
|
Getting Set Up
|
||||||
|
Fork this repository on GitHub.
|
||||||
|
Clone your forked repository (not our original one) to your hard drive with git clone https://github.com/YOURUSERNAME/slate.git
|
||||||
|
cd slate
|
||||||
|
Initialize and start Slate. You can either do this locally, or with Vagrant:
|
||||||
|
# either run this to run locally
|
||||||
|
bundle install
|
||||||
|
bundle exec middleman server
|
||||||
|
|
||||||
|
# OR run this to run with vagrant
|
||||||
|
vagrant up
|
||||||
|
You can now see the docs at http://localhost:4567. Whoa! That was fast!
|
||||||
|
|
||||||
|
Now that Slate is all set up on your machine, you'll probably want to learn more about editing Slate markdown, or how to publish your docs.
|
||||||
|
|
||||||
|
If you'd prefer to use Docker, instructions are available in the wiki.
|
||||||
41
shyft_documentation/Vagrantfile
vendored
Normal file
41
shyft_documentation/Vagrantfile
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
Vagrant.configure(2) do |config|
|
||||||
|
config.vm.box = "ubuntu/trusty64"
|
||||||
|
config.vm.network :forwarded_port, guest: 4567, host: 4567
|
||||||
|
|
||||||
|
config.vm.provision "bootstrap",
|
||||||
|
type: "shell",
|
||||||
|
inline: <<-SHELL
|
||||||
|
sudo apt-add-repository ppa:brightbox/ruby-ng
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -yq ruby2.4 ruby2.4-dev
|
||||||
|
sudo apt-get install -yq pkg-config build-essential nodejs git libxml2-dev libxslt-dev
|
||||||
|
sudo apt-get autoremove -yq
|
||||||
|
gem2.4 install --no-ri --no-rdoc bundler
|
||||||
|
SHELL
|
||||||
|
|
||||||
|
# add the local user git config to the vm
|
||||||
|
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
|
||||||
|
|
||||||
|
config.vm.provision "install",
|
||||||
|
type: "shell",
|
||||||
|
privileged: false,
|
||||||
|
inline: <<-SHELL
|
||||||
|
echo "=============================================="
|
||||||
|
echo "Installing app dependencies"
|
||||||
|
cd /vagrant
|
||||||
|
bundle config build.nokogiri --use-system-libraries
|
||||||
|
bundle install
|
||||||
|
SHELL
|
||||||
|
|
||||||
|
config.vm.provision "run",
|
||||||
|
type: "shell",
|
||||||
|
privileged: false,
|
||||||
|
run: "always",
|
||||||
|
inline: <<-SHELL
|
||||||
|
echo "=============================================="
|
||||||
|
echo "Starting up middleman at http://localhost:4567"
|
||||||
|
echo "If it does not come up, check the ~/middleman.log file for any error messages"
|
||||||
|
cd /vagrant
|
||||||
|
bundle exec middleman server --watcher-force-polling --watcher-latency=1 &> ~/middleman.log &
|
||||||
|
SHELL
|
||||||
|
end
|
||||||
58
shyft_documentation/config.rb
Normal file
58
shyft_documentation/config.rb
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Unique header generation
|
||||||
|
require './lib/unique_head.rb'
|
||||||
|
|
||||||
|
# Markdown
|
||||||
|
set :markdown_engine, :redcarpet
|
||||||
|
set :markdown,
|
||||||
|
fenced_code_blocks: true,
|
||||||
|
smartypants: true,
|
||||||
|
disable_indented_code_blocks: true,
|
||||||
|
prettify: true,
|
||||||
|
tables: true,
|
||||||
|
with_toc_data: true,
|
||||||
|
no_intra_emphasis: true,
|
||||||
|
renderer: UniqueHeadCounter
|
||||||
|
|
||||||
|
# Assets
|
||||||
|
set :css_dir, 'stylesheets'
|
||||||
|
set :js_dir, 'javascripts'
|
||||||
|
set :images_dir, 'images'
|
||||||
|
set :fonts_dir, 'fonts'
|
||||||
|
|
||||||
|
# Activate the syntax highlighter
|
||||||
|
activate :syntax
|
||||||
|
ready do
|
||||||
|
require './lib/multilang.rb'
|
||||||
|
end
|
||||||
|
|
||||||
|
activate :sprockets
|
||||||
|
|
||||||
|
activate :autoprefixer do |config|
|
||||||
|
config.browsers = ['last 2 version', 'Firefox ESR']
|
||||||
|
config.cascade = false
|
||||||
|
config.inline = true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Github pages require relative links
|
||||||
|
activate :relative_assets
|
||||||
|
set :relative_links, true
|
||||||
|
|
||||||
|
# Build Configuration
|
||||||
|
configure :build do
|
||||||
|
# If you're having trouble with Middleman hanging, commenting
|
||||||
|
# out the following two lines has been known to help
|
||||||
|
activate :minify_css
|
||||||
|
activate :minify_javascript
|
||||||
|
# activate :relative_assets
|
||||||
|
# activate :asset_hash
|
||||||
|
# activate :gzip
|
||||||
|
activate :livereload
|
||||||
|
end
|
||||||
|
|
||||||
|
# Deploy Configuration
|
||||||
|
# If you want Middleman to listen on a different port, you can set that below
|
||||||
|
set :port, 4567
|
||||||
|
|
||||||
|
helpers do
|
||||||
|
require './lib/toc_data.rb'
|
||||||
|
end
|
||||||
215
shyft_documentation/deploy.sh
Executable file
215
shyft_documentation/deploy.sh
Executable file
|
|
@ -0,0 +1,215 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -o errexit #abort if any command fails
|
||||||
|
me=$(basename "$0")
|
||||||
|
|
||||||
|
help_message="\
|
||||||
|
Usage: $me [-c FILE] [<options>]
|
||||||
|
Deploy generated files to a git branch.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-h, --help Show this help information.
|
||||||
|
-v, --verbose Increase verbosity. Useful for debugging.
|
||||||
|
-e, --allow-empty Allow deployment of an empty directory.
|
||||||
|
-m, --message MESSAGE Specify the message used when committing on the
|
||||||
|
deploy branch.
|
||||||
|
-n, --no-hash Don't append the source commit's hash to the deploy
|
||||||
|
commit's message.
|
||||||
|
--source-only Only build but not push
|
||||||
|
--push-only Only push but not build
|
||||||
|
"
|
||||||
|
|
||||||
|
|
||||||
|
run_build() {
|
||||||
|
bundle exec middleman build --clean
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_args() {
|
||||||
|
# Set args from a local environment file.
|
||||||
|
if [ -e ".env" ]; then
|
||||||
|
source .env
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse arg flags
|
||||||
|
# If something is exposed as an environment variable, set/overwrite it
|
||||||
|
# here. Otherwise, set/overwrite the internal variable instead.
|
||||||
|
while : ; do
|
||||||
|
if [[ $1 = "-h" || $1 = "--help" ]]; then
|
||||||
|
echo "$help_message"
|
||||||
|
return 0
|
||||||
|
elif [[ $1 = "-v" || $1 = "--verbose" ]]; then
|
||||||
|
verbose=true
|
||||||
|
shift
|
||||||
|
elif [[ $1 = "-e" || $1 = "--allow-empty" ]]; then
|
||||||
|
allow_empty=true
|
||||||
|
shift
|
||||||
|
elif [[ ( $1 = "-m" || $1 = "--message" ) && -n $2 ]]; then
|
||||||
|
commit_message=$2
|
||||||
|
shift 2
|
||||||
|
elif [[ $1 = "-n" || $1 = "--no-hash" ]]; then
|
||||||
|
GIT_DEPLOY_APPEND_HASH=false
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set internal option vars from the environment and arg flags. All internal
|
||||||
|
# vars should be declared here, with sane defaults if applicable.
|
||||||
|
|
||||||
|
# Source directory & target branch.
|
||||||
|
deploy_directory=build
|
||||||
|
deploy_branch=gh-pages
|
||||||
|
|
||||||
|
#if no user identity is already set in the current git environment, use this:
|
||||||
|
default_username=${GIT_DEPLOY_USERNAME:-deploy.sh}
|
||||||
|
default_email=${GIT_DEPLOY_EMAIL:-}
|
||||||
|
|
||||||
|
#repository to deploy to. must be readable and writable.
|
||||||
|
repo=origin
|
||||||
|
|
||||||
|
#append commit hash to the end of message by default
|
||||||
|
append_hash=${GIT_DEPLOY_APPEND_HASH:-true}
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
enable_expanded_output
|
||||||
|
|
||||||
|
if ! git diff --exit-code --quiet --cached; then
|
||||||
|
echo Aborting due to uncommitted changes in the index >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
commit_title=`git log -n 1 --format="%s" HEAD`
|
||||||
|
commit_hash=` git log -n 1 --format="%H" HEAD`
|
||||||
|
|
||||||
|
#default commit message uses last title if a custom one is not supplied
|
||||||
|
if [[ -z $commit_message ]]; then
|
||||||
|
commit_message="publish: $commit_title"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#append hash to commit message unless no hash flag was found
|
||||||
|
if [ $append_hash = true ]; then
|
||||||
|
commit_message="$commit_message"$'\n\n'"generated from commit $commit_hash"
|
||||||
|
fi
|
||||||
|
|
||||||
|
previous_branch=`git rev-parse --abbrev-ref HEAD`
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_directory" ]; then
|
||||||
|
echo "Deploy directory '$deploy_directory' does not exist. Aborting." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# must use short form of flag in ls for compatibility with OS X and BSD
|
||||||
|
if [[ -z `ls -A "$deploy_directory" 2> /dev/null` && -z $allow_empty ]]; then
|
||||||
|
echo "Deploy directory '$deploy_directory' is empty. Aborting. If you're sure you want to deploy an empty tree, use the --allow-empty / -e flag." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git ls-remote --exit-code $repo "refs/heads/$deploy_branch" ; then
|
||||||
|
# deploy_branch exists in $repo; make sure we have the latest version
|
||||||
|
|
||||||
|
disable_expanded_output
|
||||||
|
git fetch --force $repo $deploy_branch:$deploy_branch
|
||||||
|
enable_expanded_output
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check if deploy_branch exists locally
|
||||||
|
if git show-ref --verify --quiet "refs/heads/$deploy_branch"
|
||||||
|
then incremental_deploy
|
||||||
|
else initial_deploy
|
||||||
|
fi
|
||||||
|
|
||||||
|
restore_head
|
||||||
|
}
|
||||||
|
|
||||||
|
initial_deploy() {
|
||||||
|
git --work-tree "$deploy_directory" checkout --orphan $deploy_branch
|
||||||
|
git --work-tree "$deploy_directory" add --all
|
||||||
|
commit+push
|
||||||
|
}
|
||||||
|
|
||||||
|
incremental_deploy() {
|
||||||
|
#make deploy_branch the current branch
|
||||||
|
git symbolic-ref HEAD refs/heads/$deploy_branch
|
||||||
|
#put the previously committed contents of deploy_branch into the index
|
||||||
|
git --work-tree "$deploy_directory" reset --mixed --quiet
|
||||||
|
git --work-tree "$deploy_directory" add --all
|
||||||
|
|
||||||
|
set +o errexit
|
||||||
|
diff=$(git --work-tree "$deploy_directory" diff --exit-code --quiet HEAD --)$?
|
||||||
|
set -o errexit
|
||||||
|
case $diff in
|
||||||
|
0) echo No changes to files in $deploy_directory. Skipping commit.;;
|
||||||
|
1) commit+push;;
|
||||||
|
*)
|
||||||
|
echo git diff exited with code $diff. Aborting. Staying on branch $deploy_branch so you can debug. To switch back to master, use: git symbolic-ref HEAD refs/heads/master && git reset --mixed >&2
|
||||||
|
return $diff
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
commit+push() {
|
||||||
|
set_user_id
|
||||||
|
git --work-tree "$deploy_directory" commit -m "$commit_message"
|
||||||
|
|
||||||
|
disable_expanded_output
|
||||||
|
#--quiet is important here to avoid outputting the repo URL, which may contain a secret token
|
||||||
|
git push --quiet $repo $deploy_branch
|
||||||
|
enable_expanded_output
|
||||||
|
}
|
||||||
|
|
||||||
|
#echo expanded commands as they are executed (for debugging)
|
||||||
|
enable_expanded_output() {
|
||||||
|
if [ $verbose ]; then
|
||||||
|
set -o xtrace
|
||||||
|
set +o verbose
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#this is used to avoid outputting the repo URL, which may contain a secret token
|
||||||
|
disable_expanded_output() {
|
||||||
|
if [ $verbose ]; then
|
||||||
|
set +o xtrace
|
||||||
|
set -o verbose
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_user_id() {
|
||||||
|
if [[ -z `git config user.name` ]]; then
|
||||||
|
git config user.name "$default_username"
|
||||||
|
fi
|
||||||
|
if [[ -z `git config user.email` ]]; then
|
||||||
|
git config user.email "$default_email"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_head() {
|
||||||
|
if [[ $previous_branch = "HEAD" ]]; then
|
||||||
|
#we weren't on any branch before, so just set HEAD back to the commit it was on
|
||||||
|
git update-ref --no-deref HEAD $commit_hash $deploy_branch
|
||||||
|
else
|
||||||
|
git symbolic-ref HEAD refs/heads/$previous_branch
|
||||||
|
fi
|
||||||
|
|
||||||
|
git reset --mixed
|
||||||
|
}
|
||||||
|
|
||||||
|
filter() {
|
||||||
|
sed -e "s|$repo|\$repo|g"
|
||||||
|
}
|
||||||
|
|
||||||
|
sanitize() {
|
||||||
|
"$@" 2> >(filter 1>&2) | filter
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $1 = --source-only ]]; then
|
||||||
|
run_build
|
||||||
|
elif [[ $1 = --push-only ]]; then
|
||||||
|
main "$@"
|
||||||
|
else
|
||||||
|
run_build
|
||||||
|
main "$@"
|
||||||
|
fi
|
||||||
148
shyft_documentation/font-selection.json
Executable file
148
shyft_documentation/font-selection.json
Executable file
|
|
@ -0,0 +1,148 @@
|
||||||
|
{
|
||||||
|
"IcoMoonType": "selection",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"icon": {
|
||||||
|
"paths": [
|
||||||
|
"M438.857 73.143q119.429 0 220.286 58.857t159.714 159.714 58.857 220.286-58.857 220.286-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857zM512 785.714v-108.571q0-8-5.143-13.429t-12.571-5.429h-109.714q-7.429 0-13.143 5.714t-5.714 13.143v108.571q0 7.429 5.714 13.143t13.143 5.714h109.714q7.429 0 12.571-5.429t5.143-13.429zM510.857 589.143l10.286-354.857q0-6.857-5.714-10.286-5.714-4.571-13.714-4.571h-125.714q-8 0-13.714 4.571-5.714 3.429-5.714 10.286l9.714 354.857q0 5.714 5.714 10t13.714 4.286h105.714q8 0 13.429-4.286t6-10z"
|
||||||
|
],
|
||||||
|
"attrs": [],
|
||||||
|
"isMulticolor": false,
|
||||||
|
"tags": [
|
||||||
|
"exclamation-circle"
|
||||||
|
],
|
||||||
|
"defaultCode": 61546,
|
||||||
|
"grid": 14
|
||||||
|
},
|
||||||
|
"attrs": [],
|
||||||
|
"properties": {
|
||||||
|
"id": 100,
|
||||||
|
"order": 4,
|
||||||
|
"prevSize": 28,
|
||||||
|
"code": 58880,
|
||||||
|
"name": "exclamation-sign",
|
||||||
|
"ligatures": ""
|
||||||
|
},
|
||||||
|
"setIdx": 0,
|
||||||
|
"iconIdx": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": {
|
||||||
|
"paths": [
|
||||||
|
"M585.143 786.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-54.857v-292.571q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h54.857v182.857h-54.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h256q8 0 13.143-5.143t5.143-13.143zM512 274.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z"
|
||||||
|
],
|
||||||
|
"attrs": [],
|
||||||
|
"isMulticolor": false,
|
||||||
|
"tags": [
|
||||||
|
"info-circle"
|
||||||
|
],
|
||||||
|
"defaultCode": 61530,
|
||||||
|
"grid": 14
|
||||||
|
},
|
||||||
|
"attrs": [],
|
||||||
|
"properties": {
|
||||||
|
"id": 85,
|
||||||
|
"order": 3,
|
||||||
|
"name": "info-sign",
|
||||||
|
"prevSize": 28,
|
||||||
|
"code": 58882
|
||||||
|
},
|
||||||
|
"setIdx": 0,
|
||||||
|
"iconIdx": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": {
|
||||||
|
"paths": [
|
||||||
|
"M733.714 419.429q0-16-10.286-26.286l-52-51.429q-10.857-10.857-25.714-10.857t-25.714 10.857l-233.143 232.571-129.143-129.143q-10.857-10.857-25.714-10.857t-25.714 10.857l-52 51.429q-10.286 10.286-10.286 26.286 0 15.429 10.286 25.714l206.857 206.857q10.857 10.857 25.714 10.857 15.429 0 26.286-10.857l310.286-310.286q10.286-10.286 10.286-25.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z"
|
||||||
|
],
|
||||||
|
"attrs": [],
|
||||||
|
"isMulticolor": false,
|
||||||
|
"tags": [
|
||||||
|
"check-circle"
|
||||||
|
],
|
||||||
|
"defaultCode": 61528,
|
||||||
|
"grid": 14
|
||||||
|
},
|
||||||
|
"attrs": [],
|
||||||
|
"properties": {
|
||||||
|
"id": 83,
|
||||||
|
"order": 9,
|
||||||
|
"prevSize": 28,
|
||||||
|
"code": 58886,
|
||||||
|
"name": "ok-sign"
|
||||||
|
},
|
||||||
|
"setIdx": 0,
|
||||||
|
"iconIdx": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon": {
|
||||||
|
"paths": [
|
||||||
|
"M658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 29.714-21.714 51.429t-51.429 21.714q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z"
|
||||||
|
],
|
||||||
|
"width": 951,
|
||||||
|
"attrs": [],
|
||||||
|
"isMulticolor": false,
|
||||||
|
"tags": [
|
||||||
|
"search"
|
||||||
|
],
|
||||||
|
"defaultCode": 61442,
|
||||||
|
"grid": 14
|
||||||
|
},
|
||||||
|
"attrs": [],
|
||||||
|
"properties": {
|
||||||
|
"id": 2,
|
||||||
|
"order": 1,
|
||||||
|
"prevSize": 28,
|
||||||
|
"code": 58887,
|
||||||
|
"name": "icon-search"
|
||||||
|
},
|
||||||
|
"setIdx": 0,
|
||||||
|
"iconIdx": 7
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"height": 1024,
|
||||||
|
"metadata": {
|
||||||
|
"name": "slate",
|
||||||
|
"license": "SIL OFL 1.1"
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"showGlyphs": true,
|
||||||
|
"showQuickUse": true,
|
||||||
|
"showQuickUse2": true,
|
||||||
|
"showSVGs": true,
|
||||||
|
"fontPref": {
|
||||||
|
"prefix": "icon-",
|
||||||
|
"metadata": {
|
||||||
|
"fontFamily": "slate",
|
||||||
|
"majorVersion": 1,
|
||||||
|
"minorVersion": 0,
|
||||||
|
"description": "Based on FontAwesome",
|
||||||
|
"license": "SIL OFL 1.1"
|
||||||
|
},
|
||||||
|
"metrics": {
|
||||||
|
"emSize": 1024,
|
||||||
|
"baseline": 6.25,
|
||||||
|
"whitespace": 50
|
||||||
|
},
|
||||||
|
"resetPoint": 58880,
|
||||||
|
"showSelector": false,
|
||||||
|
"selector": "class",
|
||||||
|
"classSelector": ".icon",
|
||||||
|
"showMetrics": false,
|
||||||
|
"showMetadata": true,
|
||||||
|
"showVersion": true,
|
||||||
|
"ie7": false
|
||||||
|
},
|
||||||
|
"imagePref": {
|
||||||
|
"prefix": "icon-",
|
||||||
|
"png": true,
|
||||||
|
"useClassSelector": true,
|
||||||
|
"color": 4473924,
|
||||||
|
"bgColor": 16777215
|
||||||
|
},
|
||||||
|
"historySize": 100,
|
||||||
|
"showCodes": true,
|
||||||
|
"gridSize": 16,
|
||||||
|
"showLiga": false
|
||||||
|
}
|
||||||
|
}
|
||||||
16
shyft_documentation/lib/multilang.rb
Normal file
16
shyft_documentation/lib/multilang.rb
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
module Multilang
|
||||||
|
def block_code(code, full_lang_name)
|
||||||
|
if full_lang_name
|
||||||
|
parts = full_lang_name.split('--')
|
||||||
|
rouge_lang_name = (parts) ? parts[0] : "" # just parts[0] here causes null ref exception when no language specified
|
||||||
|
super(code, rouge_lang_name).sub("highlight #{rouge_lang_name}") do |match|
|
||||||
|
match + " tab-" + full_lang_name
|
||||||
|
end
|
||||||
|
else
|
||||||
|
super(code, full_lang_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'middleman-core/renderers/redcarpet'
|
||||||
|
Middleman::Renderers::MiddlemanRedcarpetHTML.send :include, Multilang
|
||||||
22
shyft_documentation/lib/nesting_unique_head.rb
Normal file
22
shyft_documentation/lib/nesting_unique_head.rb
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Nested unique header generation
|
||||||
|
require 'middleman-core/renderers/redcarpet'
|
||||||
|
|
||||||
|
class NestingUniqueHeadCounter < Middleman::Renderers::MiddlemanRedcarpetHTML
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@@headers_history = {} if !defined?(@@headers_history)
|
||||||
|
end
|
||||||
|
|
||||||
|
def header(text, header_level)
|
||||||
|
friendly_text = text.parameterize
|
||||||
|
@@headers_history[header_level] = text.parameterize
|
||||||
|
|
||||||
|
if header_level > 1
|
||||||
|
for i in (header_level - 1).downto(1)
|
||||||
|
friendly_text.prepend("#{@@headers_history[i]}-") if @@headers_history.key?(i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return "<h#{header_level} id='#{friendly_text}'>#{text}</h#{header_level}>"
|
||||||
|
end
|
||||||
|
end
|
||||||
30
shyft_documentation/lib/toc_data.rb
Normal file
30
shyft_documentation/lib/toc_data.rb
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
require 'nokogiri'
|
||||||
|
|
||||||
|
def toc_data(page_content)
|
||||||
|
html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content)
|
||||||
|
|
||||||
|
# get a flat list of headers
|
||||||
|
headers = []
|
||||||
|
html_doc.css('h1, h2, h3').each do |header|
|
||||||
|
headers.push({
|
||||||
|
id: header.attribute('id').to_s,
|
||||||
|
content: header.children,
|
||||||
|
level: header.name[1].to_i,
|
||||||
|
children: []
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
[3,2].each do |header_level|
|
||||||
|
header_to_nest = nil
|
||||||
|
headers = headers.reject do |header|
|
||||||
|
if header[:level] == header_level
|
||||||
|
header_to_nest[:children].push header if header_to_nest
|
||||||
|
true
|
||||||
|
else
|
||||||
|
header_to_nest = header if header[:level] < header_level
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
headers
|
||||||
|
end
|
||||||
24
shyft_documentation/lib/unique_head.rb
Normal file
24
shyft_documentation/lib/unique_head.rb
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Unique header generation
|
||||||
|
require 'middleman-core/renderers/redcarpet'
|
||||||
|
require 'digest'
|
||||||
|
class UniqueHeadCounter < Middleman::Renderers::MiddlemanRedcarpetHTML
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@head_count = {}
|
||||||
|
end
|
||||||
|
def header(text, header_level)
|
||||||
|
friendly_text = text.gsub(/<[^<]+>/,"").parameterize
|
||||||
|
if friendly_text.strip.length == 0
|
||||||
|
# Looks like parameterize removed the whole thing! It removes many unicode
|
||||||
|
# characters like Chinese and Russian. To get a unique URL, let's just
|
||||||
|
# URI escape the whole header
|
||||||
|
friendly_text = Digest::SHA1.hexdigest(text)[0,10]
|
||||||
|
end
|
||||||
|
@head_count[friendly_text] ||= 0
|
||||||
|
@head_count[friendly_text] += 1
|
||||||
|
if @head_count[friendly_text] > 1
|
||||||
|
friendly_text += "-#{@head_count[friendly_text]}"
|
||||||
|
end
|
||||||
|
return "<h#{header_level} id='#{friendly_text}'>#{text}</h#{header_level}>"
|
||||||
|
end
|
||||||
|
end
|
||||||
BIN
shyft_documentation/source/fonts/slate.eot
Normal file
BIN
shyft_documentation/source/fonts/slate.eot
Normal file
Binary file not shown.
14
shyft_documentation/source/fonts/slate.svg
Normal file
14
shyft_documentation/source/fonts/slate.svg
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>Generated by IcoMoon</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="slate" horiz-adv-x="1024">
|
||||||
|
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||||
|
<missing-glyph horiz-adv-x="1024" />
|
||||||
|
<glyph unicode=" " d="" horiz-adv-x="512" />
|
||||||
|
<glyph unicode="" d="M438.857 877.714q119.429 0 220.286-58.857t159.714-159.714 58.857-220.286-58.857-220.286-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857zM512 165.143v108.571q0 8-5.143 13.429t-12.571 5.429h-109.714q-7.429 0-13.143-5.714t-5.714-13.143v-108.571q0-7.429 5.714-13.143t13.143-5.714h109.714q7.429 0 12.571 5.429t5.143 13.429zM510.857 361.714l10.286 354.857q0 6.857-5.714 10.286-5.714 4.571-13.714 4.571h-125.714q-8 0-13.714-4.571-5.714-3.429-5.714-10.286l9.714-354.857q0-5.714 5.714-10t13.714-4.286h105.714q8 0 13.429 4.286t6 10z" />
|
||||||
|
<glyph unicode="" d="M585.143 164.571v91.429q0 8-5.143 13.143t-13.143 5.143h-54.857v292.571q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h54.857v-182.857h-54.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h256q8 0 13.143 5.143t5.143 13.143zM512 676.571v91.429q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||||
|
<glyph unicode="" d="M733.714 531.428q0 16-10.286 26.286l-52 51.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-233.143-232.571-129.143 129.143q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-51.429q-10.286-10.286-10.286-26.286 0-15.429 10.286-25.714l206.857-206.857q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l310.286 310.286q10.286 10.286 10.286 25.714zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||||
|
<glyph unicode="" d="M658.286 475.428q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 0q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
|
||||||
|
</font></defs></svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
BIN
shyft_documentation/source/fonts/slate.ttf
Normal file
BIN
shyft_documentation/source/fonts/slate.ttf
Normal file
Binary file not shown.
BIN
shyft_documentation/source/fonts/slate.woff
Normal file
BIN
shyft_documentation/source/fonts/slate.woff
Normal file
Binary file not shown.
BIN
shyft_documentation/source/fonts/slate.woff2
Normal file
BIN
shyft_documentation/source/fonts/slate.woff2
Normal file
Binary file not shown.
BIN
shyft_documentation/source/images/logo.png
Normal file
BIN
shyft_documentation/source/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
shyft_documentation/source/images/navbar.png
Normal file
BIN
shyft_documentation/source/images/navbar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 B |
22
shyft_documentation/source/includes/_errors.md
Normal file
22
shyft_documentation/source/includes/_errors.md
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Errors
|
||||||
|
|
||||||
|
<aside class="notice">
|
||||||
|
This error section is stored in a separate file in <code>includes/_errors.md</code>. Slate allows you to optionally separate out your docs into many files...just save them to the <code>includes</code> folder and add them to the top of your <code>index.md</code>'s frontmatter. Files are included in the order listed.
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
The Kittn API uses the following error codes:
|
||||||
|
|
||||||
|
|
||||||
|
Error Code | Meaning
|
||||||
|
---------- | -------
|
||||||
|
400 | Bad Request -- Your request is invalid.
|
||||||
|
401 | Unauthorized -- Your API key is wrong.
|
||||||
|
403 | Forbidden -- The kitten requested is hidden for administrators only.
|
||||||
|
404 | Not Found -- The specified kitten could not be found.
|
||||||
|
405 | Method Not Allowed -- You tried to access a kitten with an invalid method.
|
||||||
|
406 | Not Acceptable -- You requested a format that isn't json.
|
||||||
|
410 | Gone -- The kitten requested has been removed from our servers.
|
||||||
|
418 | I'm a teapot.
|
||||||
|
429 | Too Many Requests -- You're requesting too many kittens! Slow down!
|
||||||
|
500 | Internal Server Error -- We had a problem with our server. Try again later.
|
||||||
|
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later.
|
||||||
131
shyft_documentation/source/index.html.md
Normal file
131
shyft_documentation/source/index.html.md
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
---
|
||||||
|
title: API Reference
|
||||||
|
|
||||||
|
language_tabs: # must be one of https://git.io/vQNgJ
|
||||||
|
- shell
|
||||||
|
|
||||||
|
toc_footers:
|
||||||
|
- <a href='https://github.com/lord/slate'>Documentation Powered by Slate</a>
|
||||||
|
|
||||||
|
includes:
|
||||||
|
- errors
|
||||||
|
|
||||||
|
search: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
### A Note From The Developers
|
||||||
|
|
||||||
|
Our goal was to avoid compromising the integrity of Geth and simply extend existing functionality to meet the specific needs of the Shyft Network. To our utmost ability we have documented, within the codebase, exactly where we have extended our functionality using the following notation: NOTE:SHYFT. This document is meant to provide a high level overview of the changes made to Geth and to provide explanations, where needed, on the changes that were made. Another benefit of this document is to allow others to quickly see the changes that were made in order to get quicker feedback on a compromising line of code.
|
||||||
|
|
||||||
|
### Contributing To Shyft Geth
|
||||||
|
|
||||||
|
In order to successfully accept a PR the maintainers of the Shyft repositories require that this document must be updated, reflecting the changes made in the PR. Along with the documentation, we ask that contributors provide the NOTE:SHYFT. The tag could should contain a brief on the modified code. This will help with releases further down the road as we document what breaking changes have been made along the journey.
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
|
||||||
|
### Build GETH
|
||||||
|
|
||||||
|
Before running any CLI options ensure you run `make geth` in the root directory.
|
||||||
|
|
||||||
|
### CLI
|
||||||
|
|
||||||
|
> In the root directory run `./shyft-geth.sh` with any of the following flags:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
--setup - Setups postgres and the shyft chain db.
|
||||||
|
--start - Starts geth.
|
||||||
|
--reset - Drops postgres and chain db, and instantiates both.
|
||||||
|
--js <web3 filename> - Executes web3 calls with a passed file name.
|
||||||
|
If the file name is sendTransactions.js:
|
||||||
|
./shyft-geth.sh --js sendTransactions
|
||||||
|
```
|
||||||
|
|
||||||
|
For convenience a simple CLI was built using `shyft-geth.sh` as the executable file with some basic commands to get your environment setup.
|
||||||
|
|
||||||
|
This will create a new database for geth to use as well as all the necessary tables for the shyft blockexplorer.
|
||||||
|
|
||||||
|
### Govendor and Packages/Dependencies
|
||||||
|
|
||||||
|
> Download Go Vendor
|
||||||
|
|
||||||
|
```shell
|
||||||
|
go get -u github.com/kardianos/govendor
|
||||||
|
```
|
||||||
|
|
||||||
|
> To run govendor globally, have this in your bash_profile file:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export GOPATH=$HOME/go
|
||||||
|
export PATH=$PATH:$HOME/go/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
> Then shyft_geth will need to be cloned to this directory:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$GOPATH/src/github.com/ethereum/go-ethereum
|
||||||
|
```
|
||||||
|
|
||||||
|
Geth uses govendor to manage packages/dependencies: [Go Vendor](https://github.com/kardianos/govendor)
|
||||||
|
|
||||||
|
This has some more information: [Ethereum Wiki](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide)
|
||||||
|
|
||||||
|
To add a new dependency, run govendor fetch <import-path> , and commit the changes to git. Then the deps will be accessible on other machines that pull from git.
|
||||||
|
|
||||||
|
<aside class="notice">
|
||||||
|
GOPATH is not strictly necessary however, for govendor it is much easier to use gopath as go will look for binaries in this directory ($GOPATH/bin). To set up GOPATH, read the govendor section.
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
# Custom Shyft Constants
|
||||||
|
|
||||||
|
### Block Rewards
|
||||||
|
|
||||||
|
> ./consensus/ethash/consensus.go
|
||||||
|
|
||||||
|
```go
|
||||||
|
```
|
||||||
|
|
||||||
|
Shyft inflation is different than that of Ethereum, therefore the constants were changed in order to support this.
|
||||||
|
|
||||||
|
# Shyft Extended Functionality
|
||||||
|
|
||||||
|
## Database Functions
|
||||||
|
|
||||||
|
> ./eth/backend.go
|
||||||
|
|
||||||
|
```go
|
||||||
|
```
|
||||||
|
|
||||||
|
### Database instanitation
|
||||||
|
|
||||||
|
The local database is instantiated in the same function where geth instantiates the merkel tri database.
|
||||||
|
|
||||||
|
> ./core/blockchain.go
|
||||||
|
|
||||||
|
```go
|
||||||
|
```
|
||||||
|
|
||||||
|
### Writing Blocks
|
||||||
|
|
||||||
|
In our case, we use `WriteBlock()` to store all our data. So far, it contains all the data that we need to store to our local block explorer database. This may change in the future.
|
||||||
|
|
||||||
|
## Transaction Helper Functions
|
||||||
|
|
||||||
|
> ./core/types/transaction.go
|
||||||
|
|
||||||
|
```go
|
||||||
|
```
|
||||||
|
|
||||||
|
The existing transaction type in Geth did not allow the evm to call a helper function to retrieve the from address, essentially the sender. Therefore, we extended the functionality of the Transaction type to generate the from address through `*Transaction.From()`.
|
||||||
|
|
||||||
|
> ./shyftdb/shyft_database_util.go
|
||||||
|
|
||||||
|
```go
|
||||||
|
```
|
||||||
|
|
||||||
|
## Database Getters And Setters
|
||||||
|
|
||||||
|
In order to store the block explorer database, a custom folder was created `./shyftdb` that contains all the necessary functions to read and write to the explorer database.
|
||||||
|
|
||||||
|
The main functions exist in `./shyftdb/shyft_database_util.go`.
|
||||||
2
shyft_documentation/source/javascripts/all.js
Normal file
2
shyft_documentation/source/javascripts/all.js
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
//= require ./all_nosearch
|
||||||
|
//= require ./app/_search
|
||||||
16
shyft_documentation/source/javascripts/all_nosearch.js
Normal file
16
shyft_documentation/source/javascripts/all_nosearch.js
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
//= require ./lib/_energize
|
||||||
|
//= require ./app/_toc
|
||||||
|
//= require ./app/_lang
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
loadToc($('#toc'), '.toc-link', '.toc-list-h2', 10);
|
||||||
|
setupLanguages($('body').data('languages'));
|
||||||
|
$('.content').imagesLoaded( function() {
|
||||||
|
window.recacheHeights();
|
||||||
|
window.refreshToc();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
window.onpopstate = function() {
|
||||||
|
activateLanguage(getLanguageFromQueryString());
|
||||||
|
};
|
||||||
164
shyft_documentation/source/javascripts/app/_lang.js
Normal file
164
shyft_documentation/source/javascripts/app/_lang.js
Normal file
|
|
@ -0,0 +1,164 @@
|
||||||
|
//= require ../lib/_jquery
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
;(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var languages = [];
|
||||||
|
|
||||||
|
window.setupLanguages = setupLanguages;
|
||||||
|
window.activateLanguage = activateLanguage;
|
||||||
|
window.getLanguageFromQueryString = getLanguageFromQueryString;
|
||||||
|
|
||||||
|
function activateLanguage(language) {
|
||||||
|
if (!language) return;
|
||||||
|
if (language === "") return;
|
||||||
|
|
||||||
|
$(".lang-selector a").removeClass('active');
|
||||||
|
$(".lang-selector a[data-language-name='" + language + "']").addClass('active');
|
||||||
|
for (var i=0; i < languages.length; i++) {
|
||||||
|
$(".highlight.tab-" + languages[i]).hide();
|
||||||
|
$(".lang-specific." + languages[i]).hide();
|
||||||
|
}
|
||||||
|
$(".highlight.tab-" + language).show();
|
||||||
|
$(".lang-specific." + language).show();
|
||||||
|
|
||||||
|
window.recacheHeights();
|
||||||
|
|
||||||
|
// scroll to the new location of the position
|
||||||
|
if ($(window.location.hash).get(0)) {
|
||||||
|
$(window.location.hash).get(0).scrollIntoView(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseURL and stringifyURL are from https://github.com/sindresorhus/query-string
|
||||||
|
// MIT licensed
|
||||||
|
// https://github.com/sindresorhus/query-string/blob/7bee64c16f2da1a326579e96977b9227bf6da9e6/license
|
||||||
|
function parseURL(str) {
|
||||||
|
if (typeof str !== 'string') {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
str = str.trim().replace(/^(\?|#|&)/, '');
|
||||||
|
|
||||||
|
if (!str) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.split('&').reduce(function (ret, param) {
|
||||||
|
var parts = param.replace(/\+/g, ' ').split('=');
|
||||||
|
var key = parts[0];
|
||||||
|
var val = parts[1];
|
||||||
|
|
||||||
|
key = decodeURIComponent(key);
|
||||||
|
// missing `=` should be `null`:
|
||||||
|
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
|
||||||
|
val = val === undefined ? null : decodeURIComponent(val);
|
||||||
|
|
||||||
|
if (!ret.hasOwnProperty(key)) {
|
||||||
|
ret[key] = val;
|
||||||
|
} else if (Array.isArray(ret[key])) {
|
||||||
|
ret[key].push(val);
|
||||||
|
} else {
|
||||||
|
ret[key] = [ret[key], val];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}, {});
|
||||||
|
};
|
||||||
|
|
||||||
|
function stringifyURL(obj) {
|
||||||
|
return obj ? Object.keys(obj).sort().map(function (key) {
|
||||||
|
var val = obj[key];
|
||||||
|
|
||||||
|
if (Array.isArray(val)) {
|
||||||
|
return val.sort().map(function (val2) {
|
||||||
|
return encodeURIComponent(key) + '=' + encodeURIComponent(val2);
|
||||||
|
}).join('&');
|
||||||
|
}
|
||||||
|
|
||||||
|
return encodeURIComponent(key) + '=' + encodeURIComponent(val);
|
||||||
|
}).join('&') : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
// gets the language set in the query string
|
||||||
|
function getLanguageFromQueryString() {
|
||||||
|
if (location.search.length >= 1) {
|
||||||
|
var language = parseURL(location.search).language;
|
||||||
|
if (language) {
|
||||||
|
return language;
|
||||||
|
} else if (jQuery.inArray(location.search.substr(1), languages) != -1) {
|
||||||
|
return location.search.substr(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns a new query string with the new language in it
|
||||||
|
function generateNewQueryString(language) {
|
||||||
|
var url = parseURL(location.search);
|
||||||
|
if (url.language) {
|
||||||
|
url.language = language;
|
||||||
|
return stringifyURL(url);
|
||||||
|
}
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if a button is clicked, add the state to the history
|
||||||
|
function pushURL(language) {
|
||||||
|
if (!history) { return; }
|
||||||
|
var hash = window.location.hash;
|
||||||
|
if (hash) {
|
||||||
|
hash = hash.replace(/^#+/, '');
|
||||||
|
}
|
||||||
|
history.pushState({}, '', '?' + generateNewQueryString(language) + '#' + hash);
|
||||||
|
|
||||||
|
// save language as next default
|
||||||
|
localStorage.setItem("language", language);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupLanguages(l) {
|
||||||
|
var defaultLanguage = localStorage.getItem("language");
|
||||||
|
|
||||||
|
languages = l;
|
||||||
|
|
||||||
|
var presetLanguage = getLanguageFromQueryString();
|
||||||
|
if (presetLanguage) {
|
||||||
|
// the language is in the URL, so use that language!
|
||||||
|
activateLanguage(presetLanguage);
|
||||||
|
|
||||||
|
localStorage.setItem("language", presetLanguage);
|
||||||
|
} else if ((defaultLanguage !== null) && (jQuery.inArray(defaultLanguage, languages) != -1)) {
|
||||||
|
// the language was the last selected one saved in localstorage, so use that language!
|
||||||
|
activateLanguage(defaultLanguage);
|
||||||
|
} else {
|
||||||
|
// no language selected, so use the default
|
||||||
|
activateLanguage(languages[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we click on a language tab, activate that language
|
||||||
|
$(function() {
|
||||||
|
$(".lang-selector a").on("click", function() {
|
||||||
|
var language = $(this).data("language-name");
|
||||||
|
pushURL(language);
|
||||||
|
activateLanguage(language);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
||||||
98
shyft_documentation/source/javascripts/app/_search.js
Normal file
98
shyft_documentation/source/javascripts/app/_search.js
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
//= require ../lib/_lunr
|
||||||
|
//= require ../lib/_jquery
|
||||||
|
//= require ../lib/_jquery.highlight
|
||||||
|
;(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var content, searchResults;
|
||||||
|
var highlightOpts = { element: 'span', className: 'search-highlight' };
|
||||||
|
var searchDelay = 0;
|
||||||
|
var timeoutHandle = 0;
|
||||||
|
|
||||||
|
var index = new lunr.Index();
|
||||||
|
|
||||||
|
index.ref('id');
|
||||||
|
index.field('title', { boost: 10 });
|
||||||
|
index.field('body');
|
||||||
|
index.pipeline.add(lunr.trimmer, lunr.stopWordFilter);
|
||||||
|
|
||||||
|
$(populate);
|
||||||
|
$(bind);
|
||||||
|
|
||||||
|
function populate() {
|
||||||
|
$('h1, h2').each(function() {
|
||||||
|
var title = $(this);
|
||||||
|
var body = title.nextUntil('h1, h2');
|
||||||
|
index.add({
|
||||||
|
id: title.prop('id'),
|
||||||
|
title: title.text(),
|
||||||
|
body: body.text()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
determineSearchDelay();
|
||||||
|
}
|
||||||
|
function determineSearchDelay() {
|
||||||
|
if(index.tokenStore.length>5000) {
|
||||||
|
searchDelay = 300;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function bind() {
|
||||||
|
content = $('.content');
|
||||||
|
searchResults = $('.search-results');
|
||||||
|
|
||||||
|
$('#input-search').on('keyup',function(e) {
|
||||||
|
var wait = function() {
|
||||||
|
return function(executingFunction, waitTime){
|
||||||
|
clearTimeout(timeoutHandle);
|
||||||
|
timeoutHandle = setTimeout(executingFunction, waitTime);
|
||||||
|
};
|
||||||
|
}();
|
||||||
|
wait(function(){
|
||||||
|
search(e);
|
||||||
|
}, searchDelay );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function search(event) {
|
||||||
|
|
||||||
|
var searchInput = $('#input-search')[0];
|
||||||
|
|
||||||
|
unhighlight();
|
||||||
|
searchResults.addClass('visible');
|
||||||
|
|
||||||
|
// ESC clears the field
|
||||||
|
if (event.keyCode === 27) searchInput.value = '';
|
||||||
|
|
||||||
|
if (searchInput.value) {
|
||||||
|
var results = index.search(searchInput.value).filter(function(r) {
|
||||||
|
return r.score > 0.0001;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (results.length) {
|
||||||
|
searchResults.empty();
|
||||||
|
$.each(results, function (index, result) {
|
||||||
|
var elem = document.getElementById(result.ref);
|
||||||
|
searchResults.append("<li><a href='#" + result.ref + "'>" + $(elem).text() + "</a></li>");
|
||||||
|
});
|
||||||
|
highlight.call(searchInput);
|
||||||
|
} else {
|
||||||
|
searchResults.html('<li></li>');
|
||||||
|
$('.search-results li').text('No Results Found for "' + searchInput.value + '"');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unhighlight();
|
||||||
|
searchResults.removeClass('visible');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function highlight() {
|
||||||
|
if (this.value) content.highlight(this.value, highlightOpts);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unhighlight() {
|
||||||
|
content.unhighlight(highlightOpts);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
114
shyft_documentation/source/javascripts/app/_toc.js
Normal file
114
shyft_documentation/source/javascripts/app/_toc.js
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
//= require ../lib/_jquery
|
||||||
|
//= require ../lib/_imagesloaded.min
|
||||||
|
;(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var loaded = false;
|
||||||
|
|
||||||
|
var debounce = function(func, waitTime) {
|
||||||
|
var timeout = false;
|
||||||
|
return function() {
|
||||||
|
if (timeout === false) {
|
||||||
|
setTimeout(function() {
|
||||||
|
func();
|
||||||
|
timeout = false;
|
||||||
|
}, waitTime);
|
||||||
|
timeout = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var closeToc = function() {
|
||||||
|
$(".toc-wrapper").removeClass('open');
|
||||||
|
$("#nav-button").removeClass('open');
|
||||||
|
};
|
||||||
|
|
||||||
|
function loadToc($toc, tocLinkSelector, tocListSelector, scrollOffset) {
|
||||||
|
var headerHeights = {};
|
||||||
|
var pageHeight = 0;
|
||||||
|
var windowHeight = 0;
|
||||||
|
var originalTitle = document.title;
|
||||||
|
|
||||||
|
var recacheHeights = function() {
|
||||||
|
headerHeights = {};
|
||||||
|
pageHeight = $(document).height();
|
||||||
|
windowHeight = $(window).height();
|
||||||
|
|
||||||
|
$toc.find(tocLinkSelector).each(function() {
|
||||||
|
var targetId = $(this).attr('href');
|
||||||
|
if (targetId[0] === "#") {
|
||||||
|
headerHeights[targetId] = $(targetId).offset().top;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var refreshToc = function() {
|
||||||
|
var currentTop = $(document).scrollTop() + scrollOffset;
|
||||||
|
|
||||||
|
if (currentTop + windowHeight >= pageHeight) {
|
||||||
|
// at bottom of page, so just select last header by making currentTop very large
|
||||||
|
// this fixes the problem where the last header won't ever show as active if its content
|
||||||
|
// is shorter than the window height
|
||||||
|
currentTop = pageHeight + 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
var best = null;
|
||||||
|
for (var name in headerHeights) {
|
||||||
|
if ((headerHeights[name] < currentTop && headerHeights[name] > headerHeights[best]) || best === null) {
|
||||||
|
best = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Catch the initial load case
|
||||||
|
if (currentTop == scrollOffset && !loaded) {
|
||||||
|
best = window.location.hash;
|
||||||
|
loaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $best = $toc.find("[href='" + best + "']").first();
|
||||||
|
if (!$best.hasClass("active")) {
|
||||||
|
// .active is applied to the ToC link we're currently on, and its parent <ul>s selected by tocListSelector
|
||||||
|
// .active-expanded is applied to the ToC links that are parents of this one
|
||||||
|
$toc.find(".active").removeClass("active");
|
||||||
|
$toc.find(".active-parent").removeClass("active-parent");
|
||||||
|
$best.addClass("active");
|
||||||
|
$best.parents(tocListSelector).addClass("active").siblings(tocLinkSelector).addClass('active-parent');
|
||||||
|
$best.siblings(tocListSelector).addClass("active");
|
||||||
|
$toc.find(tocListSelector).filter(":not(.active)").slideUp(150);
|
||||||
|
$toc.find(tocListSelector).filter(".active").slideDown(150);
|
||||||
|
// TODO remove classnames
|
||||||
|
document.title = $best.data("title") + " – " + originalTitle;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var makeToc = function() {
|
||||||
|
recacheHeights();
|
||||||
|
refreshToc();
|
||||||
|
|
||||||
|
$("#nav-button").click(function() {
|
||||||
|
$(".toc-wrapper").toggleClass('open');
|
||||||
|
$("#nav-button").toggleClass('open');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$(".page-wrapper").click(closeToc);
|
||||||
|
$(".toc-link").click(closeToc);
|
||||||
|
|
||||||
|
// reload immediately after scrolling on toc click
|
||||||
|
$toc.find(tocLinkSelector).click(function() {
|
||||||
|
setTimeout(function() {
|
||||||
|
refreshToc();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).scroll(debounce(refreshToc, 200));
|
||||||
|
$(window).resize(debounce(recacheHeights, 200));
|
||||||
|
};
|
||||||
|
|
||||||
|
makeToc();
|
||||||
|
|
||||||
|
window.recacheHeights = recacheHeights;
|
||||||
|
window.refreshToc = refreshToc;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.loadToc = loadToc;
|
||||||
|
})();
|
||||||
169
shyft_documentation/source/javascripts/lib/_energize.js
Normal file
169
shyft_documentation/source/javascripts/lib/_energize.js
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
/**
|
||||||
|
* energize.js v0.1.0
|
||||||
|
*
|
||||||
|
* Speeds up click events on mobile devices.
|
||||||
|
* https://github.com/davidcalhoun/energize.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() { // Sandbox
|
||||||
|
/**
|
||||||
|
* Don't add to non-touch devices, which don't need to be sped up
|
||||||
|
*/
|
||||||
|
if(!('ontouchstart' in window)) return;
|
||||||
|
|
||||||
|
var lastClick = {},
|
||||||
|
isThresholdReached, touchstart, touchmove, touchend,
|
||||||
|
click, closest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* isThresholdReached
|
||||||
|
*
|
||||||
|
* Compare touchstart with touchend xy coordinates,
|
||||||
|
* and only fire simulated click event if the coordinates
|
||||||
|
* are nearby. (don't want clicking to be confused with a swipe)
|
||||||
|
*/
|
||||||
|
isThresholdReached = function(startXY, xy) {
|
||||||
|
return Math.abs(startXY[0] - xy[0]) > 5 || Math.abs(startXY[1] - xy[1]) > 5;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* touchstart
|
||||||
|
*
|
||||||
|
* Save xy coordinates when the user starts touching the screen
|
||||||
|
*/
|
||||||
|
touchstart = function(e) {
|
||||||
|
this.startXY = [e.touches[0].clientX, e.touches[0].clientY];
|
||||||
|
this.threshold = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* touchmove
|
||||||
|
*
|
||||||
|
* Check if the user is scrolling past the threshold.
|
||||||
|
* Have to check here because touchend will not always fire
|
||||||
|
* on some tested devices (Kindle Fire?)
|
||||||
|
*/
|
||||||
|
touchmove = function(e) {
|
||||||
|
// NOOP if the threshold has already been reached
|
||||||
|
if(this.threshold) return false;
|
||||||
|
|
||||||
|
this.threshold = isThresholdReached(this.startXY, [e.touches[0].clientX, e.touches[0].clientY]);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* touchend
|
||||||
|
*
|
||||||
|
* If the user didn't scroll past the threshold between
|
||||||
|
* touchstart and touchend, fire a simulated click.
|
||||||
|
*
|
||||||
|
* (This will fire before a native click)
|
||||||
|
*/
|
||||||
|
touchend = function(e) {
|
||||||
|
// Don't fire a click if the user scrolled past the threshold
|
||||||
|
if(this.threshold || isThresholdReached(this.startXY, [e.changedTouches[0].clientX, e.changedTouches[0].clientY])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and fire a click event on the target element
|
||||||
|
* https://developer.mozilla.org/en/DOM/event.initMouseEvent
|
||||||
|
*/
|
||||||
|
var touch = e.changedTouches[0],
|
||||||
|
evt = document.createEvent('MouseEvents');
|
||||||
|
evt.initMouseEvent('click', true, true, window, 0, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
|
||||||
|
evt.simulated = true; // distinguish from a normal (nonsimulated) click
|
||||||
|
e.target.dispatchEvent(evt);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* click
|
||||||
|
*
|
||||||
|
* Because we've already fired a click event in touchend,
|
||||||
|
* we need to listed for all native click events here
|
||||||
|
* and suppress them as necessary.
|
||||||
|
*/
|
||||||
|
click = function(e) {
|
||||||
|
/**
|
||||||
|
* Prevent ghost clicks by only allowing clicks we created
|
||||||
|
* in the click event we fired (look for e.simulated)
|
||||||
|
*/
|
||||||
|
var time = Date.now(),
|
||||||
|
timeDiff = time - lastClick.time,
|
||||||
|
x = e.clientX,
|
||||||
|
y = e.clientY,
|
||||||
|
xyDiff = [Math.abs(lastClick.x - x), Math.abs(lastClick.y - y)],
|
||||||
|
target = closest(e.target, 'A') || e.target, // needed for standalone apps
|
||||||
|
nodeName = target.nodeName,
|
||||||
|
isLink = nodeName === 'A',
|
||||||
|
standAlone = window.navigator.standalone && isLink && e.target.getAttribute("href");
|
||||||
|
|
||||||
|
lastClick.time = time;
|
||||||
|
lastClick.x = x;
|
||||||
|
lastClick.y = y;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unfortunately Android sometimes fires click events without touch events (seen on Kindle Fire),
|
||||||
|
* so we have to add more logic to determine the time of the last click. Not perfect...
|
||||||
|
*
|
||||||
|
* Older, simpler check: if((!e.simulated) || standAlone)
|
||||||
|
*/
|
||||||
|
if((!e.simulated && (timeDiff < 500 || (timeDiff < 1500 && xyDiff[0] < 50 && xyDiff[1] < 50))) || standAlone) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
if(!standAlone) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special logic for standalone web apps
|
||||||
|
* See http://stackoverflow.com/questions/2898740/iphone-safari-web-app-opens-links-in-new-window
|
||||||
|
*/
|
||||||
|
if(standAlone) {
|
||||||
|
window.location = target.getAttribute("href");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an energize-focus class to the targeted link (mimics :focus behavior)
|
||||||
|
* TODO: test and/or remove? Does this work?
|
||||||
|
*/
|
||||||
|
if(!target || !target.classList) return;
|
||||||
|
target.classList.add("energize-focus");
|
||||||
|
window.setTimeout(function(){
|
||||||
|
target.classList.remove("energize-focus");
|
||||||
|
}, 150);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closest
|
||||||
|
* @param {HTMLElement} node current node to start searching from.
|
||||||
|
* @param {string} tagName the (uppercase) name of the tag you're looking for.
|
||||||
|
*
|
||||||
|
* Find the closest ancestor tag of a given node.
|
||||||
|
*
|
||||||
|
* Starts at node and goes up the DOM tree looking for a
|
||||||
|
* matching nodeName, continuing until hitting document.body
|
||||||
|
*/
|
||||||
|
closest = function(node, tagName){
|
||||||
|
var curNode = node;
|
||||||
|
|
||||||
|
while(curNode !== document.body) { // go up the dom until we find the tag we're after
|
||||||
|
if(!curNode || curNode.nodeName === tagName) { return curNode; } // found
|
||||||
|
curNode = curNode.parentNode; // not found, so keep going up
|
||||||
|
}
|
||||||
|
|
||||||
|
return null; // not found
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add all delegated event listeners
|
||||||
|
*
|
||||||
|
* All the events we care about bubble up to document,
|
||||||
|
* so we can take advantage of event delegation.
|
||||||
|
*
|
||||||
|
* Note: no need to wait for DOMContentLoaded here
|
||||||
|
*/
|
||||||
|
document.addEventListener('touchstart', touchstart, false);
|
||||||
|
document.addEventListener('touchmove', touchmove, false);
|
||||||
|
document.addEventListener('touchend', touchend, false);
|
||||||
|
document.addEventListener('click', click, true); // TODO: why does this use capture?
|
||||||
|
|
||||||
|
})();
|
||||||
7
shyft_documentation/source/javascripts/lib/_imagesloaded.min.js
vendored
Normal file
7
shyft_documentation/source/javascripts/lib/_imagesloaded.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
108
shyft_documentation/source/javascripts/lib/_jquery.highlight.js
Normal file
108
shyft_documentation/source/javascripts/lib/_jquery.highlight.js
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* jQuery Highlight plugin
|
||||||
|
*
|
||||||
|
* Based on highlight v3 by Johann Burkard
|
||||||
|
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
|
||||||
|
*
|
||||||
|
* Code a little bit refactored and cleaned (in my humble opinion).
|
||||||
|
* Most important changes:
|
||||||
|
* - has an option to highlight only entire words (wordsOnly - false by default),
|
||||||
|
* - has an option to be case sensitive (caseSensitive - false by default)
|
||||||
|
* - highlight element tag and class names can be specified in options
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* // wrap every occurrance of text 'lorem' in content
|
||||||
|
* // with <span class='highlight'> (default options)
|
||||||
|
* $('#content').highlight('lorem');
|
||||||
|
*
|
||||||
|
* // search for and highlight more terms at once
|
||||||
|
* // so you can save some time on traversing DOM
|
||||||
|
* $('#content').highlight(['lorem', 'ipsum']);
|
||||||
|
* $('#content').highlight('lorem ipsum');
|
||||||
|
*
|
||||||
|
* // search only for entire word 'lorem'
|
||||||
|
* $('#content').highlight('lorem', { wordsOnly: true });
|
||||||
|
*
|
||||||
|
* // don't ignore case during search of term 'lorem'
|
||||||
|
* $('#content').highlight('lorem', { caseSensitive: true });
|
||||||
|
*
|
||||||
|
* // wrap every occurrance of term 'ipsum' in content
|
||||||
|
* // with <em class='important'>
|
||||||
|
* $('#content').highlight('ipsum', { element: 'em', className: 'important' });
|
||||||
|
*
|
||||||
|
* // remove default highlight
|
||||||
|
* $('#content').unhighlight();
|
||||||
|
*
|
||||||
|
* // remove custom highlight
|
||||||
|
* $('#content').unhighlight({ element: 'em', className: 'important' });
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Bartek Szopka
|
||||||
|
*
|
||||||
|
* Licensed under MIT license.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
jQuery.extend({
|
||||||
|
highlight: function (node, re, nodeName, className) {
|
||||||
|
if (node.nodeType === 3) {
|
||||||
|
var match = node.data.match(re);
|
||||||
|
if (match) {
|
||||||
|
var highlight = document.createElement(nodeName || 'span');
|
||||||
|
highlight.className = className || 'highlight';
|
||||||
|
var wordNode = node.splitText(match.index);
|
||||||
|
wordNode.splitText(match[0].length);
|
||||||
|
var wordClone = wordNode.cloneNode(true);
|
||||||
|
highlight.appendChild(wordClone);
|
||||||
|
wordNode.parentNode.replaceChild(highlight, wordNode);
|
||||||
|
return 1; //skip added node in parent
|
||||||
|
}
|
||||||
|
} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
|
||||||
|
!/(script|style)/i.test(node.tagName) && // ignore script and style nodes
|
||||||
|
!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
|
||||||
|
for (var i = 0; i < node.childNodes.length; i++) {
|
||||||
|
i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jQuery.fn.unhighlight = function (options) {
|
||||||
|
var settings = { className: 'highlight', element: 'span' };
|
||||||
|
jQuery.extend(settings, options);
|
||||||
|
|
||||||
|
return this.find(settings.element + "." + settings.className).each(function () {
|
||||||
|
var parent = this.parentNode;
|
||||||
|
parent.replaceChild(this.firstChild, this);
|
||||||
|
parent.normalize();
|
||||||
|
}).end();
|
||||||
|
};
|
||||||
|
|
||||||
|
jQuery.fn.highlight = function (words, options) {
|
||||||
|
var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
|
||||||
|
jQuery.extend(settings, options);
|
||||||
|
|
||||||
|
if (words.constructor === String) {
|
||||||
|
words = [words];
|
||||||
|
}
|
||||||
|
words = jQuery.grep(words, function(word, i){
|
||||||
|
return word != '';
|
||||||
|
});
|
||||||
|
words = jQuery.map(words, function(word, i) {
|
||||||
|
return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||||
|
});
|
||||||
|
if (words.length == 0) { return this; };
|
||||||
|
|
||||||
|
var flag = settings.caseSensitive ? "" : "i";
|
||||||
|
var pattern = "(" + words.join("|") + ")";
|
||||||
|
if (settings.wordsOnly) {
|
||||||
|
pattern = "\\b" + pattern + "\\b";
|
||||||
|
}
|
||||||
|
var re = new RegExp(pattern, flag);
|
||||||
|
|
||||||
|
return this.each(function () {
|
||||||
|
jQuery.highlight(this, re, settings.element, settings.className);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
9831
shyft_documentation/source/javascripts/lib/_jquery.js
Normal file
9831
shyft_documentation/source/javascripts/lib/_jquery.js
Normal file
File diff suppressed because it is too large
Load diff
1910
shyft_documentation/source/javascripts/lib/_lunr.js
Normal file
1910
shyft_documentation/source/javascripts/lib/_lunr.js
Normal file
File diff suppressed because it is too large
Load diff
116
shyft_documentation/source/layouts/layout.erb
Normal file
116
shyft_documentation/source/layouts/layout.erb
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
<%#
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
%>
|
||||||
|
<% language_tabs = current_page.data.language_tabs || [] %>
|
||||||
|
<% page_content = yield %>
|
||||||
|
<%
|
||||||
|
if current_page.data.includes
|
||||||
|
current_page.data.includes.each do |include|
|
||||||
|
page_content += partial("includes/#{include}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
%>
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<title><%= current_page.data.title || "API Documentation" %></title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
<%= Rouge::Themes::MonokaiSublime.render(:scope => '.highlight') %>
|
||||||
|
</style>
|
||||||
|
<%= stylesheet_link_tag :screen, media: :screen %>
|
||||||
|
<%= stylesheet_link_tag :print, media: :print %>
|
||||||
|
<% if current_page.data.search %>
|
||||||
|
<%= javascript_include_tag "all" %>
|
||||||
|
<% else %>
|
||||||
|
<%= javascript_include_tag "all_nosearch" %>
|
||||||
|
<% end %>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="<%= page_classes %>" data-languages="<%=h language_tabs.map{ |lang| lang.is_a?(Hash) ? lang.keys.first : lang }.to_json %>">
|
||||||
|
<a href="#" id="nav-button">
|
||||||
|
<span>
|
||||||
|
NAV
|
||||||
|
<%= image_tag('navbar.png') %>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<div class="toc-wrapper">
|
||||||
|
<%= image_tag "logo.png", class: 'logo' %>
|
||||||
|
<% if language_tabs.any? %>
|
||||||
|
<div class="lang-selector">
|
||||||
|
<% language_tabs.each do |lang| %>
|
||||||
|
<% if lang.is_a? Hash %>
|
||||||
|
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||||
|
<% else %>
|
||||||
|
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<% if current_page.data.search %>
|
||||||
|
<div class="search">
|
||||||
|
<input type="text" class="search" id="input-search" placeholder="Search">
|
||||||
|
</div>
|
||||||
|
<ul class="search-results"></ul>
|
||||||
|
<% end %>
|
||||||
|
<div id="toc" class="toc-list-h1">
|
||||||
|
<% toc_data(page_content).each do |h1| %>
|
||||||
|
<li>
|
||||||
|
<a href="#<%= h1[:id] %>" class="toc-h1 toc-link" data-title="<%= h1[:content].to_s.parameterize %>"><%= h1[:content] %></a>
|
||||||
|
<% if h1[:children].length > 0 %>
|
||||||
|
<ul class="toc-list-h2">
|
||||||
|
<% h1[:children].each do |h2| %>
|
||||||
|
<li>
|
||||||
|
<a href="#<%= h2[:id] %>" class="toc-h2 toc-link" data-title="<%= h2[:content].to_s.parameterize %>"><%= h2[:content] %></a>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% if current_page.data.toc_footers %>
|
||||||
|
<ul class="toc-footer">
|
||||||
|
<% current_page.data.toc_footers.each do |footer| %>
|
||||||
|
<li><%= footer %></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<div class="page-wrapper">
|
||||||
|
<div class="dark-box"></div>
|
||||||
|
<div class="content">
|
||||||
|
<%= page_content %>
|
||||||
|
</div>
|
||||||
|
<div class="dark-box">
|
||||||
|
<% if language_tabs.any? %>
|
||||||
|
<div class="lang-selector">
|
||||||
|
<% language_tabs.each do |lang| %>
|
||||||
|
<% if lang.is_a? Hash %>
|
||||||
|
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||||
|
<% else %>
|
||||||
|
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
38
shyft_documentation/source/stylesheets/_icon-font.scss
Normal file
38
shyft_documentation/source/stylesheets/_icon-font.scss
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: 'slate';
|
||||||
|
src:font-url('slate.eot?-syv14m');
|
||||||
|
src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'),
|
||||||
|
font-url('slate.woff2?-syv14m') format('woff2'),
|
||||||
|
font-url('slate.woff?-syv14m') format('woff'),
|
||||||
|
font-url('slate.ttf?-syv14m') format('truetype'),
|
||||||
|
font-url('slate.svg?-syv14m#slate') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
%icon {
|
||||||
|
font-family: 'slate';
|
||||||
|
speak: none;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
text-transform: none;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
%icon-exclamation-sign {
|
||||||
|
@extend %icon;
|
||||||
|
content: "\e600";
|
||||||
|
}
|
||||||
|
%icon-info-sign {
|
||||||
|
@extend %icon;
|
||||||
|
content: "\e602";
|
||||||
|
}
|
||||||
|
%icon-ok-sign {
|
||||||
|
@extend %icon;
|
||||||
|
content: "\e606";
|
||||||
|
}
|
||||||
|
%icon-search {
|
||||||
|
@extend %icon;
|
||||||
|
content: "\e607";
|
||||||
|
}
|
||||||
427
shyft_documentation/source/stylesheets/_normalize.scss
Normal file
427
shyft_documentation/source/stylesheets/_normalize.scss
Normal file
|
|
@ -0,0 +1,427 @@
|
||||||
|
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Set default font family to sans-serif.
|
||||||
|
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||||
|
* user zoom.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif; /* 1 */
|
||||||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default margin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HTML5 display definitions
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||||
|
* and Firefox.
|
||||||
|
* Correct `block` display not defined for `main` in IE 11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block; /* 1 */
|
||||||
|
vertical-align: baseline; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent modern browsers from displaying `audio` without controls.
|
||||||
|
* Remove excess height in iOS 5 devices.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||||
|
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background color from active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Improve readability when focused and also mouse hovered in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in Safari and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address variable `h1` font-size and margin within `section` and `article`
|
||||||
|
* contexts in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent and variable font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove border when inside `a` element in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct overflow not hidden in IE 9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address margin not present in IE 8/9 and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address differences between Firefox and other browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contain overflow in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address odd `em`-unit font size rendering in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||||
|
* styling of `select`, unless a `border` property is set.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct color not being inherited.
|
||||||
|
* Known issue: affects color of disabled elements.
|
||||||
|
* 2. Correct font properties not being inherited.
|
||||||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
color: inherit; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
margin: 0; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||||
|
* All other form control elements do not inherit `text-transform` values.
|
||||||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||||
|
* Correct `select` style inheritance in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||||
|
* and `video` controls.
|
||||||
|
* 2. Correct inability to style clickable `input` types in iOS.
|
||||||
|
* 3. Improve usability and consistency of cursor style between image-type
|
||||||
|
* `input` and others.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
html input[type="button"], /* 1 */
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
-webkit-appearance: button; /* 2 */
|
||||||
|
cursor: pointer; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-set default cursor for disabled elements.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button[disabled],
|
||||||
|
html input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and border in Firefox 4+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||||
|
* the UA stylesheet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It's recommended that you don't attempt to style these elements.
|
||||||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||||
|
*
|
||||||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||||
|
* 2. Remove excess padding in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||||
|
* `font-size` values of the `input`, it causes the cursor style of the
|
||||||
|
* decrement button to change from `default` to `text`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-inner-spin-button,
|
||||||
|
input[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||||
|
* (include `-moz` to future-proof).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
-webkit-box-sizing: content-box; /* 2 */
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||||
|
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||||
|
* padding (and `textfield` appearance).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define consistent border, margin, and padding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't inherit the `font-weight` (applied by a rule above).
|
||||||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||||
|
*/
|
||||||
|
|
||||||
|
optgroup {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove most spacing between table cells.
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
140
shyft_documentation/source/stylesheets/_rtl.scss
Normal file
140
shyft_documentation/source/stylesheets/_rtl.scss
Normal file
|
|
@ -0,0 +1,140 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// RTL Styles Variables
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$default: auto;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TABLE OF CONTENTS
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#toc>ul>li>a>span {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-wrapper {
|
||||||
|
transition: right 0.3s ease-in-out !important;
|
||||||
|
left: $default !important;
|
||||||
|
#{right}: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-h2 {
|
||||||
|
padding-#{right}: $nav-padding + $nav-indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-button {
|
||||||
|
#{right}: 0;
|
||||||
|
transition: right 0.3s ease-in-out;
|
||||||
|
&.open {
|
||||||
|
right: $nav-width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// PAGE LAYOUT AND CODE SAMPLE BACKGROUND
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
.page-wrapper {
|
||||||
|
margin-#{left}: $default !important;
|
||||||
|
margin-#{right}: $nav-width;
|
||||||
|
.dark-box {
|
||||||
|
#{right}: $default;
|
||||||
|
#{left}: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-selector {
|
||||||
|
width: $default !important;
|
||||||
|
a {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CODE SAMPLE STYLES
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
.content {
|
||||||
|
&>h1,
|
||||||
|
&>h2,
|
||||||
|
&>h3,
|
||||||
|
&>h4,
|
||||||
|
&>h5,
|
||||||
|
&>h6,
|
||||||
|
&>p,
|
||||||
|
&>table,
|
||||||
|
&>ul,
|
||||||
|
&>ol,
|
||||||
|
&>aside,
|
||||||
|
&>dl {
|
||||||
|
margin-#{left}: $examples-width;
|
||||||
|
margin-#{right}: $default !important;
|
||||||
|
}
|
||||||
|
&>ul,
|
||||||
|
&>ol {
|
||||||
|
padding-#{right}: $main-padding + 15px;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
th,
|
||||||
|
td {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dd {
|
||||||
|
margin-#{right}: 15px;
|
||||||
|
}
|
||||||
|
aside {
|
||||||
|
aside:before {
|
||||||
|
padding-#{left}: 0.5em;
|
||||||
|
}
|
||||||
|
.search-highlight {
|
||||||
|
background: linear-gradient(to top right, #F7E633 0%, #F1D32F 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pre,
|
||||||
|
blockquote {
|
||||||
|
float: left !important;
|
||||||
|
clear: left !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TYPOGRAPHY
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
p,
|
||||||
|
aside {
|
||||||
|
text-align: right;
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-wrapper {
|
||||||
|
text-align: right;
|
||||||
|
direction: rtl;
|
||||||
|
font-weight: 100 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// RESPONSIVE DESIGN
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@media (max-width: $tablet-width) {
|
||||||
|
.toc-wrapper {
|
||||||
|
#{right}: -$nav-width;
|
||||||
|
&.open {
|
||||||
|
#{right}: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.page-wrapper {
|
||||||
|
margin-#{right}: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: $phone-width) {
|
||||||
|
%left-col {
|
||||||
|
margin-#{left}: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
103
shyft_documentation/source/stylesheets/_variables.scss
Normal file
103
shyft_documentation/source/stylesheets/_variables.scss
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CUSTOMIZE SLATE
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Use these settings to help adjust the appearance of Slate
|
||||||
|
|
||||||
|
|
||||||
|
// BACKGROUND COLORS
|
||||||
|
////////////////////
|
||||||
|
$nav-bg: #2E3336 !default;
|
||||||
|
$examples-bg: #2E3336 !default;
|
||||||
|
$code-bg: #1E2224 !default;
|
||||||
|
$code-annotation-bg: #191D1F !default;
|
||||||
|
$nav-subitem-bg: #1E2224 !default;
|
||||||
|
$nav-active-bg: #0F75D4 !default;
|
||||||
|
$nav-active-parent-bg: #1E2224 !default; // parent links of the current section
|
||||||
|
$lang-select-border: #000 !default;
|
||||||
|
$lang-select-bg: #1E2224 !default;
|
||||||
|
$lang-select-active-bg: $examples-bg !default; // feel free to change this to blue or something
|
||||||
|
$lang-select-pressed-bg: #111 !default; // color of language tab bg when mouse is pressed
|
||||||
|
$main-bg: #F3F7F9 !default;
|
||||||
|
$aside-notice-bg: #8fbcd4 !default;
|
||||||
|
$aside-warning-bg: #c97a7e !default;
|
||||||
|
$aside-success-bg: #6ac174 !default;
|
||||||
|
$search-notice-bg: #c97a7e !default;
|
||||||
|
|
||||||
|
|
||||||
|
// TEXT COLORS
|
||||||
|
////////////////////
|
||||||
|
$main-text: #333 !default; // main content text color
|
||||||
|
$nav-text: #fff !default;
|
||||||
|
$nav-active-text: #fff !default;
|
||||||
|
$nav-active-parent-text: #fff !default; // parent links of the current section
|
||||||
|
$lang-select-text: #fff !default; // color of unselected language tab text
|
||||||
|
$lang-select-active-text: #fff !default; // color of selected language tab text
|
||||||
|
$lang-select-pressed-text: #fff !default; // color of language tab text when mouse is pressed
|
||||||
|
|
||||||
|
|
||||||
|
// SIZES
|
||||||
|
////////////////////
|
||||||
|
$nav-width: 230px !default; // width of the navbar
|
||||||
|
$examples-width: 50% !default; // portion of the screen taken up by code examples
|
||||||
|
$logo-margin: 0px !default; // margin below logo
|
||||||
|
$main-padding: 28px !default; // padding to left and right of content & examples
|
||||||
|
$nav-padding: 15px !default; // padding to left and right of navbar
|
||||||
|
$nav-v-padding: 10px !default; // padding used vertically around search boxes and results
|
||||||
|
$nav-indent: 10px !default; // extra padding for ToC subitems
|
||||||
|
$code-annotation-padding: 13px !default; // padding inside code annotations
|
||||||
|
$h1-margin-bottom: 21px !default; // padding under the largest header tags
|
||||||
|
$tablet-width: 930px !default; // min width before reverting to tablet size
|
||||||
|
$phone-width: $tablet-width - $nav-width !default; // min width before reverting to mobile size
|
||||||
|
|
||||||
|
|
||||||
|
// FONTS
|
||||||
|
////////////////////
|
||||||
|
%default-font {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
%header-font {
|
||||||
|
@extend %default-font;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
%code-font {
|
||||||
|
font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// OTHER
|
||||||
|
////////////////////
|
||||||
|
$nav-footer-border-color: #666 !default;
|
||||||
|
$search-box-border-color: #666 !default;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// INTERNAL
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// These settings are probably best left alone.
|
||||||
|
|
||||||
|
%break-words {
|
||||||
|
word-break: break-all;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
147
shyft_documentation/source/stylesheets/print.css.scss
Normal file
147
shyft_documentation/source/stylesheets/print.css.scss
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
@import 'normalize';
|
||||||
|
@import 'variables';
|
||||||
|
@import 'icon-font';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$print-color: #999;
|
||||||
|
$print-color-light: #ccc;
|
||||||
|
$print-font-size: 12px;
|
||||||
|
|
||||||
|
body {
|
||||||
|
@extend %default-font;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tocify, .toc-footer, .lang-selector, .search, #nav-button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tocify-wrapper>img {
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
pre, code {
|
||||||
|
@extend %code-font;
|
||||||
|
@extend %break-words;
|
||||||
|
border: 1px solid $print-color;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
code {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border: 1px solid $print-color;
|
||||||
|
tr {
|
||||||
|
border-bottom: 1px solid $print-color;
|
||||||
|
}
|
||||||
|
td,th {
|
||||||
|
padding: 0.7em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 2.5em;
|
||||||
|
padding-top: 0.5em;
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: $h1-margin-bottom;
|
||||||
|
border: 2px solid $print-color-light;
|
||||||
|
border-width: 2px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 1.8em;
|
||||||
|
margin-top: 2em;
|
||||||
|
border-top: 2px solid $print-color-light;
|
||||||
|
padding-top: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1+h2, h1+div+h2 {
|
||||||
|
border-top: none;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3, h4 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 0.8em;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
margin-bottom: 0.8em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5, h6 {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
padding: 1em;
|
||||||
|
border: 1px solid $print-color-light;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside:before {
|
||||||
|
vertical-align: middle;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.notice:before {
|
||||||
|
@extend %icon-info-sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.warning:before {
|
||||||
|
@extend %icon-exclamation-sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.success:before {
|
||||||
|
@extend %icon-ok-sign;
|
||||||
|
}
|
||||||
|
}
|
||||||
615
shyft_documentation/source/stylesheets/screen.css.scss
Normal file
615
shyft_documentation/source/stylesheets/screen.css.scss
Normal file
|
|
@ -0,0 +1,615 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
@import 'normalize';
|
||||||
|
@import 'variables';
|
||||||
|
@import 'icon-font';
|
||||||
|
// @import 'rtl'; // uncomment to switch to RTL format
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2008-2013 Concur Technologies, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// GENERAL STUFF
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
color: $main-text;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
@extend %default-font;
|
||||||
|
background-color: $main-bg;
|
||||||
|
height: 100%;
|
||||||
|
-webkit-text-size-adjust: none; /* Never autoresize text */
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TABLE OF CONTENTS
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#toc > ul > li > a > span {
|
||||||
|
float: right;
|
||||||
|
background-color: #2484FF;
|
||||||
|
border-radius: 40px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-wrapper {
|
||||||
|
transition: left 0.3s ease-in-out;
|
||||||
|
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 30;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: $nav-width;
|
||||||
|
background-color: $nav-bg;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
// language selector for mobile devices
|
||||||
|
.lang-selector {
|
||||||
|
display: none;
|
||||||
|
a {
|
||||||
|
padding-top: 0.5em;
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the logo at the top of the ToC
|
||||||
|
.logo {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: $logo-margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>.search {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
input {
|
||||||
|
background: $nav-bg;
|
||||||
|
border-width: 0 0 1px 0;
|
||||||
|
border-color: $search-box-border-color;
|
||||||
|
padding: 6px 0 6px 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: $nav-v-padding $nav-padding;
|
||||||
|
width: $nav-width - 30;
|
||||||
|
outline: none;
|
||||||
|
color: $nav-text;
|
||||||
|
border-radius: 0; /* ios has a default border radius */
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
position: absolute;
|
||||||
|
top: 17px;
|
||||||
|
left: $nav-padding;
|
||||||
|
color: $nav-text;
|
||||||
|
@extend %icon-search;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-results {
|
||||||
|
margin-top: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 0;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
transition-property: height, margin;
|
||||||
|
transition-duration: 180ms;
|
||||||
|
transition-timing-function: ease-in-out;
|
||||||
|
background: $nav-subitem-bg;
|
||||||
|
&.visible {
|
||||||
|
height: 30%;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin: 1em $nav-padding;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $nav-text;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// The Table of Contents is composed of multiple nested
|
||||||
|
// unordered lists. These styles remove the default
|
||||||
|
// styling of an unordered list because it is ugly.
|
||||||
|
ul, li {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
color: $nav-text;
|
||||||
|
transition-property: background;
|
||||||
|
transition-timing-function: linear;
|
||||||
|
transition-duration: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the currently selected ToC entry
|
||||||
|
.toc-link.active {
|
||||||
|
background-color: $nav-active-bg;
|
||||||
|
color: $nav-active-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is parent links of the currently selected ToC entry
|
||||||
|
.toc-link.active-parent {
|
||||||
|
background-color: $nav-active-parent-bg;
|
||||||
|
color: $nav-active-parent-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-list-h2 {
|
||||||
|
display: none;
|
||||||
|
background-color: $nav-subitem-bg;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-h2 {
|
||||||
|
padding-left: $nav-padding + $nav-indent;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-footer {
|
||||||
|
padding: 1em 0;
|
||||||
|
margin-top: 1em;
|
||||||
|
border-top: 1px dashed $nav-footer-border-color;
|
||||||
|
|
||||||
|
li,a {
|
||||||
|
color: $nav-text;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
font-size: 0.8em;
|
||||||
|
line-height: 1.7;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-link, .toc-footer li {
|
||||||
|
padding: 0 $nav-padding 0 $nav-padding;
|
||||||
|
display: block;
|
||||||
|
overflow-x: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-decoration: none;
|
||||||
|
color: $nav-text;
|
||||||
|
transition-property: background;
|
||||||
|
transition-timing-function: linear;
|
||||||
|
transition-duration: 130ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
// button to show navigation on mobile devices
|
||||||
|
#nav-button {
|
||||||
|
span {
|
||||||
|
display: block;
|
||||||
|
$side-pad: $main-padding / 2 - 8px;
|
||||||
|
padding: $side-pad $side-pad $side-pad;
|
||||||
|
background-color: rgba($main-bg, 0.7);
|
||||||
|
transform-origin: 0 0;
|
||||||
|
transform: rotate(-90deg) translate(-100%, 0);
|
||||||
|
border-radius: 0 0 0 5px;
|
||||||
|
}
|
||||||
|
padding: 0 1.5em 5em 0; // increase touch size area
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 100;
|
||||||
|
color: #000;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
opacity: 0.7;
|
||||||
|
line-height: 16px;
|
||||||
|
img {
|
||||||
|
height: 16px;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
transition: left 0.3s ease-in-out;
|
||||||
|
|
||||||
|
&:hover { opacity: 1; }
|
||||||
|
&.open {left: $nav-width}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// PAGE LAYOUT AND CODE SAMPLE BACKGROUND
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
.page-wrapper {
|
||||||
|
margin-left: $nav-width;
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: $main-bg;
|
||||||
|
min-height: 100%;
|
||||||
|
|
||||||
|
padding-bottom: 1px; // prevent margin overflow
|
||||||
|
|
||||||
|
// The dark box is what gives the code samples their dark background.
|
||||||
|
// It sits essentially under the actual content block, which has a
|
||||||
|
// transparent background.
|
||||||
|
// I know, it's hackish, but it's the simplist way to make the left
|
||||||
|
// half of the content always this background color.
|
||||||
|
.dark-box {
|
||||||
|
width: $examples-width;
|
||||||
|
background-color: $examples-bg;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-selector {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 50;
|
||||||
|
border-bottom: 5px solid $lang-select-active-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-selector {
|
||||||
|
background-color: $lang-select-bg;
|
||||||
|
width: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
float:left;
|
||||||
|
color: $lang-select-text;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 0 10px;
|
||||||
|
line-height: 30px;
|
||||||
|
outline: 0;
|
||||||
|
|
||||||
|
&:active, &:focus {
|
||||||
|
background-color: $lang-select-pressed-bg;
|
||||||
|
color: $lang-select-pressed-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background-color: $lang-select-active-bg;
|
||||||
|
color: $lang-select-active-text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
clear: both;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CONTENT STYLES
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// This is all the stuff with the light background in the left half of the page
|
||||||
|
|
||||||
|
.content {
|
||||||
|
// fixes webkit rendering bug for some: see #538
|
||||||
|
-webkit-transform: translateZ(0);
|
||||||
|
// to place content above the dark box
|
||||||
|
position: relative;
|
||||||
|
z-index: 30;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl {
|
||||||
|
margin-right: $examples-width;
|
||||||
|
padding: 0 $main-padding;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
@extend %left-col;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ul, &>ol {
|
||||||
|
padding-left: $main-padding + 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the div is the tocify hidden div for placeholding stuff
|
||||||
|
&>h1, &>h2, &>div {
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 25px;
|
||||||
|
padding-top: 0.5em;
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
margin-bottom: $h1-margin-bottom;
|
||||||
|
margin-top: 2em;
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
background-color: #fdfdfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:first-child, div:first-child + h1 {
|
||||||
|
border-top-width: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 19px;
|
||||||
|
margin-top: 4em;
|
||||||
|
margin-bottom: 0;
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
padding-top: 1.2em;
|
||||||
|
padding-bottom: 1.2em;
|
||||||
|
background-image: linear-gradient(to bottom, rgba(#fff, 0.2), rgba(#fff, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// h2s right after h1s should bump right up
|
||||||
|
// against the h1s.
|
||||||
|
h1 + h2, h1 + div + h2 {
|
||||||
|
margin-top: $h1-margin-bottom * -1;
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3, h4, h5, h6 {
|
||||||
|
@extend %header-font;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-top: 2.5em;
|
||||||
|
margin-bottom: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4, h5, h6 {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 2em 0;
|
||||||
|
border-top: 2px solid $examples-bg;
|
||||||
|
border-bottom: 2px solid $main-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
overflow: auto;
|
||||||
|
th,td {
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
line-height: 1.6;
|
||||||
|
code {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding: 5px 10px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:last-child {
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(odd)>td {
|
||||||
|
background-color: lighten($main-bg,4.2%);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even)>td {
|
||||||
|
background-color: lighten($main-bg,2.4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p, li, dt, dd {
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: rgba(0,0,0,0.05);
|
||||||
|
padding: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
@extend %break-words;
|
||||||
|
@extend %code-font;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre>code {
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
padding-top: 1em;
|
||||||
|
padding-bottom: 1em;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
background: $aside-notice-bg;
|
||||||
|
line-height: 1.6;
|
||||||
|
|
||||||
|
&.warning {
|
||||||
|
background-color: $aside-warning-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
background-color: $aside-success-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aside:before {
|
||||||
|
vertical-align: middle;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.notice:before {
|
||||||
|
@extend %icon-info-sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.warning:before {
|
||||||
|
@extend %icon-exclamation-sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.success:before {
|
||||||
|
@extend %icon-ok-sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-highlight {
|
||||||
|
padding: 2px;
|
||||||
|
margin: -3px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #F7E633;
|
||||||
|
background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CODE SAMPLE STYLES
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// This is all the stuff that appears in the right half of the page
|
||||||
|
|
||||||
|
.content {
|
||||||
|
pre, blockquote {
|
||||||
|
background-color: $code-bg;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
width: $examples-width;
|
||||||
|
|
||||||
|
float:right;
|
||||||
|
clear:right;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
@extend %right-col;
|
||||||
|
|
||||||
|
&>p { margin: 0; }
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: dashed 1px #ccc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
@extend %code-font;
|
||||||
|
padding-top: 2em;
|
||||||
|
padding-bottom: 2em;
|
||||||
|
padding: 2em $main-padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
&>p {
|
||||||
|
background-color: $code-annotation-bg;
|
||||||
|
padding: $code-annotation-padding 2em;
|
||||||
|
color: #eee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// RESPONSIVE DESIGN
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// These are the styles for phones and tablets
|
||||||
|
// There are also a couple styles disperesed
|
||||||
|
|
||||||
|
@media (max-width: $tablet-width) {
|
||||||
|
.toc-wrapper {
|
||||||
|
left: -$nav-width;
|
||||||
|
|
||||||
|
&.open {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-wrapper {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-button {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-link {
|
||||||
|
padding-top: 0.3em;
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: $phone-width) {
|
||||||
|
.dark-box {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
%left-col {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc-wrapper .lang-selector {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-wrapper .lang-selector {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
%right-col {
|
||||||
|
width: auto;
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
%right-col + %left-col {
|
||||||
|
margin-top: $main-padding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs {
|
||||||
|
color: #909090;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight, .highlight .w {
|
||||||
|
background-color: $code-bg;
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue