Merge remote-tracking branch 'origin/master' into olstenlarck-triage-new-issues-app

* origin/master: (51 commits)
  Move untrivializer to _apps
  Use full doc url
  Remove / on host
  Move to _apps
  Sync data
  Update docs
  Update docs for v4.0.0
  Sync data
  Add Lock Threads app
  Sync data
  Sync data
  Sync data
  Sync data
  Sync data
  Sync data
  Sync data
  Update prevent-public doc link to be static
  Add Prevent Public Repos Probot App
  Sync data
  Sync data
  ...
This commit is contained in:
Brandon Keepers
2017-12-13 12:56:20 -06:00
69 changed files with 19032 additions and 85 deletions

View File

@@ -9,12 +9,16 @@ authors:
- ahmed-taj
repository: ahmed-taj/commitlint-bot
host: https://commitlint.now.sh
stars: 20
updated: 2017-11-08 18:31:05 UTC
installations: 4
stars: 25
updated: 2017-12-02 14:17:57 UTC
installations: 9
organizations:
- db-migrate
- caarlos0
- algolia
- ahmed-taj
- aVengineers
- caiquecastro
---
<p align="center">

View File

@@ -4,24 +4,24 @@ description: Enforce the DCO on Pull Requests
slug: dco
screenshots:
- https://cloud.githubusercontent.com/assets/173/24482273/a35dc23e-14b5-11e7-9371-fd241873e2c3.png
stars: 31
stars: 36
authors:
- bkeepers
repository: probot/dco
updated: 2017-11-02 13:13:46 UTC
updated: 2017-12-13 17:18:43 UTC
host: https://probot-dco.herokuapp.com
installations: 76
installations: 98
organizations:
- hyperledger
- gradle
- jaegertracing
- envoyproxy
- linkerd
- phpmyadmin
- db-migrate
- WeblateOrg
- theupdateframework
- coreinfrastructure
- redhat-developer
- mainflux
- jbosstools
---

74
_apps/dep.md Normal file
View File

@@ -0,0 +1,74 @@
---
title: Dep
description: A dependency manager for your Pull Requests.
slug: dep
screenshots:
- https://github.com/ahmed-taj/dep/raw/master/docs/assets/comment.png
- https://github.com/ahmed-taj/dep/raw/master/docs/assets/status.png
authors:
- ahmed-taj
repository: ahmed-taj/dep
host: https://dep.now.sh
stars: 8
updated: 2017-11-25 11:27:00 UTC
installations: 6
organizations:
- probot
- tunnckoCore
- laughedelic
- philoserf
- aVengineers
---
<p align="center">
<img src="https://github.com/ahmed-taj/dep/raw/master/docs/assets/logo.png" width="256" height="256" alt="bot logo">
</p>
A dependency manager for your Pull Requests.
## Usage
1. Browse to [GitHub Apps - dep][apps]
2. Accept the permissions
3. Allow access to repositories
If you want to update a pull request dependencies write:
![comment-screenshot][]
On the pull request, a status check from `dep` will appear:
![status-check-screenshot][]
For best results, enable branch protection (in the repository's settings) and require the `dep` status check to pass before merging:
![branch-protection-screenshot][]
[apps]: https://github.com/apps/dep
[status-check-screenshot]: https://github.com/ahmed-taj/dep/raw/master/docs/assets/status.png
[comment-screenshot]: https://github.com/ahmed-taj/dep/raw/master/docs/assets/comment.png
[branch-protection-screenshot]: https://github.com/ahmed-taj/dep/raw/master/docs/assets/settings.png
## Contributors
Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<table>
<tr>
<th align="center"><a href="https://ahmed.sd"><img src="https://avatars1.githubusercontent.com/u/12673605?v=4" width="100px;" style="max-width:100%;"><br><sub><b>Ahmed T. Ali</b></sub></a><br><a href="https://goo.gl/sJKF5H" title="Blogposts"><g-emoji alias="memo" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" ios-version="6.0"><img class="emoji" alt=":memo:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png"></g-emoji></a> <a href="https://github.com/ahmed-taj/dep/commits?author=ahmed-taj" title="Code"><g-emoji alias="computer" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" ios-version="6.0"><img class="emoji" alt=":computer:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png"></g-emoji></a> <a href="https://github.com/ahmed-taj/dep/commits?author=ahmed-taj" title="Documentation"><g-emoji alias="book" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png" ios-version="6.0"><img class="emoji" alt=":book:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png"></g-emoji></a> <a href="https://github.com/ahmed-taj/dep/commits?author=ahmed-taj" title="Tests"><g-emoji alias="warning" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png" ios-version="6.0"><img class="emoji" alt=":warning:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png"></g-emoji></a></th>
<th align="center"><a href="https://github.com/JasonEtco"><img src="https://avatars1.githubusercontent.com/u/10660468?v=4" width="100px;" style="max-width:100%;"><br><sub><b>Jason Etcovitch</b></sub></a><br><a href="https://twitter.com/JasonEtco" title="Answering Questions"><g-emoji alias="speech_balloon" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ac.png" ios-version="6.0"><img class="emoji" alt=":speech_balloon:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ac.png"></g-emoji></a> <a href="https://github.com/probot/ideas/issues/1" title="Ideas, Planning, &amp; Feedback"><g-emoji alias="thinking" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f914.png" ios-version="9.1"><img class="emoji" alt=":thinking:" height="20" width="20" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f914.png"></g-emoji></a></th>
</tr></table>
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
## Credits
The Logo is designed by [Freepik](https://www.freepik.com/free-vector/green-and-blue-retro-robots-collection_721192.htm). Modified by [Ahmed T. Ali](https://github.com/ahmed-taj).
Special thanks to [Jason Etcovitch](https://github.com/JasonEtco) for their help, including the original bot idea.
## License
MIT © [Ahmed T. Ali](https://github.com/ahmed-taj)

View File

@@ -7,11 +7,11 @@ screenshots:
authors:
- agonzalez0515
- Techforchange
stars: 90
stars: 93
repository: hoodiehq/first-timers-bot
updated: 2017-11-15 16:43:52 UTC
updated: 2017-12-13 16:57:50 UTC
host: https://first-timers-bot.now.sh
installations: 188
installations: 199
organizations:
- jekyll
- processing
@@ -22,7 +22,7 @@ organizations:
- mikaelbr
- terkelg
- gr2m
- sotayamashita
- db-migrate
---
# first-timers-bot

View File

@@ -9,18 +9,20 @@ authors:
- jarrodldavis
repository: jarrodldavis/probot-gpg
stars: 14
updated: 2017-11-08 04:29:24 UTC
updated: 2017-12-13 16:57:48 UTC
host: http://probot-gpg-production.herokuapp.com
installations: 14
installations: 20
organizations:
- saltstack
- twuni
- mattstratton
- twuni
- nikolay
- luanmuniz
- jarrodldavis
- squid-lang
- eiwuert
- kburman
- stationgroup
---
## Usage

View File

@@ -10,11 +10,13 @@ repository: erickzhao/invite-contributors
stars: 8
updated: 2017-11-06 05:29:49 UTC
host: https://vast-stream-78160.herokuapp.com
installations: 6
installations: 8
organizations:
- cla-assistant
- flyve-mdm
- aethonanbot
- sydneyhaskell
- aVengineers
- chaijs
- elodiebot
- dddpppmmm

46
_apps/lock.md Normal file
View File

@@ -0,0 +1,46 @@
---
title: Lock Threads
description: Locks closed issues and pull requests.
slug: lock
screenshots:
- https://raw.githubusercontent.com/dessant/lock-threads/master/assets/screenshot.png
authors:
- dessant
repository: dessant/lock-threads
host: https://probot-lock-threads.glitch.me
---
A GitHub App that locks closed issues and pull requests after
a period of inactivity.
## Usage
1. **[Install the GitHub App](https://github.com/apps/lock)**
2. Create `.github/lock.yml` based on the template below
3. It will start scanning for closed issues and/or pull requests within an hour
#### Configuration
Create `.github/lock.yml` in the default branch to enable the app.
The file can be empty, or it can override any of these default settings:
```yml
# Configuration for lock-threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 365
# Comment to post before locking. Set to `false` to disable
lockComment: >
This thread has been automatically locked because it has not had recent
activity. Please open a new issue for related bugs and link to relevant
comments in this thread.
# Limit to only `issues` or `pulls`
# only: issues
```
## Supporting the Project
Lock Threads is an MIT-licensed open source project. Its ongoing
development is made possible thanks to the support of awesome backers.
If you'd like to join them, please consider contributing with
[Patreon](https://www.patreon.com/dessant).

72
_apps/move.md Normal file
View File

@@ -0,0 +1,72 @@
---
title: Move Issues
description: Moves issues to a different repository.
slug: move
screenshots:
- https://raw.githubusercontent.com/dessant/move-issues/master/assets/source-issue.png
- https://raw.githubusercontent.com/dessant/move-issues/master/assets/target-issue.png
authors:
- dessant
repository: dessant/move-issues
host: https://probot-move-issues.glitch.me
stars: 4
updated: 2017-12-13 03:03:26 UTC
installations: 10
organizations:
- kivy
- probot
- Dallas-Makerspace
- devopsdays
- aVengineers
- Triadai
---
A GitHub App that Moves issues to a different repository.
## Usage
1. **[Install the GitHub App](https://github.com/apps/move)**
2. Create `.github/move.yml` based on the template below
3. Move an issue by creating a comment with the command: `/move to <repo>`
#### Configuration
Create `.github/move.yml` in the default branch to enable the app.
The file can be empty, or it can override any of these default settings:
```yml
# Configuration for move-issues - https://github.com/dessant/move-issues
# Delete the command comment. Ignored when the comment also contains other content
deleteCommand: true
# Close the source issue after moving
closeSourceIssue: true
# Lock the source issue after moving
lockSourceIssue: false
# Set custom aliases for targets
# aliases:
# r: repo
# or: owner/repo
```
#### Command Syntax
```sh
/move [to ][<owner>/]<repo>
```
###### Examples:
```sh
/move to repo
/move to owner/repo
/move repo
/move owner/repo
```
## Supporting the Project
Move Issues is an MIT-licensed open source project. Its ongoing
development is made possible thanks to the support of awesome backers.
If you'd like to join them, please consider contributing with
[Patreon](https://www.patreon.com/dessant).

View File

@@ -9,12 +9,19 @@ authors:
- lee-dohm
repository: probot/no-response
host: https://probot-no-response.herokuapp.com
stars: 17
stars: 20
updated: 2017-11-13 22:25:45 UTC
installations: 4
installations: 12
organizations:
- eggjs
- rmm5t
- electron-userland
- probot
- db-migrate
- guillermocalvo
- CyclopsMC
- Dallas-Makerspace
- aVengineers
---
Automatically closes Issues where the author hasn't responded to a request for more information.

View File

@@ -10,20 +10,20 @@ authors:
- evenchange4
repository: evenchange4/gh-polls-bot
host: https://gh-polls-bot.now.sh
stars: 106
updated: 2017-11-09 01:25:41 UTC
installations: 46
stars: 111
updated: 2017-12-13 16:57:39 UTC
installations: 60
organizations:
- apex
- chaijs
- detailyang
- ahmetb
- probot
- hql287
- evhub
- Glavin001
- jbarlow83
- cheton
- axetroy
- notrab
---
# GitHub Polls Bot

View File

@@ -0,0 +1,82 @@
---
# A human-friendly name of your listing
title: Prevent Public Repos
# A short description of what your app does
description: Prevent Repos from being made public in an organization
# The slug of your hosted app on GitHub (https://github.com/apps/YOUR-SLUG)
slug: prevent-public-repos
# Include a few screenshots that show your app in action
screenshots:
- https://user-images.githubusercontent.com/6920330/33576380-9a90cc92-d90d-11e7-9e61-6512240cdbf6.png
# The GitHub usernames of anyone who authored the app
authors: [ issc29 ]
# The repository where the code is located
repository: issc29/probot-prevent-public-repos
# The address where this app is deployed
host: https://probot-prevent-public-repos.herokuapp.com
---
# Prevent-Public-Repos Probot App
A GitHub Probot App that monitors and prevents Public Repositories from being created in an organization.
## Features
- Can convert newly created Public Repos to Private
- Can also be enabled for repos that switch visibility from private to public
- Not enabled by default it is possible to restrict visibility changes to org owners [directly in GitHub](https://help.github.com/articles/repository-permission-levels-for-an-organization/#changing-the-visibility-of-repositories).
- Will create an issue in the repo explaining the action
- Monitor only mode will not change the repo visibility but will still create an issue
- Can set configuration parameters by using YAML file set in a specific repo for the entire org
- Can exclude certain repos
- Can set a list of users/groups to cc on every issue created
## Get Started
1. [Configure the GitHub App](https://github.com/apps/prevent-public-repos)
2. [Recommended] Create repo named `org-settings` and in it a file `.github/prevent-public-repos.yml` as described in the [How it Works](#How-it-Works) section to configure settings (and override defaults)
3. It will then prevent public repos from being created
## How it Works
By default when a new repository is created with Public visibility, an Issue will be created in the repository warning that it is Public to the internet [Monitor-Only mode is enabled].
A `.github/prevent-public-repos.yml` file is recommended to override the [default settings](https://github.com/issc29/probot-prevent-public-repos/blob/master/lib/defaults.js) created in Repository `org-settings`. This repository will contain global settings for the organization.
```yml
# Configuration for Prevent-Public-Repos
# Turn on Monitor Mode. In this mode the repo visibility is not modified and only an Issue is created
monitorOnly: true
# Enables detection of repos that change visibility from private to public (not just newly created ones)
enablePrivateToPublic: false
# Issue Title when repo is privatized
privatizedIssueTitle: '[CRITICAL] Public Repositories are Disabled for this Org'
# Issue Body when repo is privatized
privatizedIssueBody: 'NOTE: Public Repos are disabled for this organization! Repository was automatically converted to a Private Repo. Please contact an admin to override.'
# Issue Title when monitor mode is enabled
monitorIssueTitle: '[CRITICAL] Public Repository Created'
# Issue Body when monitor mode is enable
monitorIssueBody: 'Please note that this repository is publicly visible to the internet!'
# Users/Groups that should be cc'ed on the issue. Should be users/groups separated by a space.
# ccList: '@user123 @user456'
# Repos to exclude in detection. Should be a List of Strings.
# excludeRepos: ['repo1', 'repo2']
```
When setting up this Probot App you can also set a number of Environment Variables
## Deployment
See [docs/deploy.md](https://github.com/issc29/probot-prevent-public-repos/blob/master/docs/deploy.md) if you would like to run your own instance of this app.
Possible Environment Variables:
- FILE_NAME [default: '.github/prevent-public-repos.yml'] - Sets the location/file name of the config yml file
- ORG_WIDE_REPO_NAME [default: 'org-settings'] - Set the repo where to find the config yml file

View File

@@ -8,21 +8,21 @@ authors:
- jbjonesjr
- bkeepers
repository: probot/reminders
stars: 8
updated: 2017-11-02 15:17:46 UTC
stars: 9
updated: 2017-12-06 14:56:36 UTC
host: https://probot-reminders.herokuapp.com
installations: 44
installations: 70
organizations:
- eggjs
- chaijs
- devtools-html
- thibmaek
- carambalabs
- probot
- goreleaser
- carambalabs
- gillesdemey
- coredns
- cherrypy
- timvideos
- db-migrate
---
Use the `/remind` slash command to set a reminder on any comment box on GitHub and you'll get a ping about it again when the reminder is due.

View File

@@ -5,24 +5,24 @@ description: Requests more info on issues and pull requests with the default tit
slug: request-info
screenshots:
- https://user-images.githubusercontent.com/13410355/28132821-d37bf2a8-66f2-11e7-9e7b-5930ba65d67a.png
stars: 11
stars: 16
authors:
- hiimbex
repository: behaviorbot/request-info
updated: 2017-10-21 13:29:36 UTC
updated: 2017-12-07 11:25:34 UTC
host: https://probot-request-info.herokuapp.com
installations: 49
installations: 65
organizations:
- nlohmann
- cdnjs
- eggjs
- electron-userland
- jsonresume
- bolt
- desktop
- benbalter
- nozzle
- benbalter
- terkelg
- probot
- Glavin001
- clippings
---

View File

@@ -5,24 +5,24 @@ description: Replies to toxic comments with a maintainer designated reply and a
slug: sentiment-bot
screenshots:
- https://user-images.githubusercontent.com/13410355/29323857-fcfe4b4e-8196-11e7-9a08-6184fd46edbb.png
stars: 12
stars: 20
authors:
- hiimbex
repository: behaviorbot/sentiment-bot
updated: 2017-10-19 15:54:50 UTC
updated: 2017-12-07 11:27:04 UTC
host: https://probot-sentiment-bot.herokuapp.com
installations: 22
installations: 27
organizations:
- nlohmann
- MvvmCross
- carambalabs
- probot
- carambalabs
- xcodeswift
- Dallas-Makerspace
- WormieCorp
- neetjn
- JourneyOver
- Mariatta
- marclop
---
Replies to toxic comments with a maintainer designated reply and a link to the repo's code of conduct. It does so by taking data from a `.github/config.yml`.

View File

@@ -2,15 +2,15 @@
title: Settings
description: Pull Requests for repository settings
slug: settings
stars: 171
stars: 174
authors:
- bkeepers
repository: probot/settings
screenshots:
- https://user-images.githubusercontent.com/173/29472917-3fad9db0-841b-11e7-8f6d-a6c63052122b.png
updated: 2017-11-02 13:13:36 UTC
updated: 2017-12-13 16:57:44 UTC
host: https://github-configurer.herokuapp.com
installations: 69
installations: 78
organizations:
- apollographql
- denysdovhan
@@ -18,10 +18,10 @@ organizations:
- wp-cli
- benbalter
- probot
- TGMPA
- purpleidea
- GaryJones
- pages-themes
- coveralls-clients
- cla-assistant
---
This GitHub App syncs repository settings defined in `.github/settings.yml` to GitHub, enabling Pull Requests for repository settings.

View File

@@ -7,21 +7,21 @@ screenshots:
- https://user-images.githubusercontent.com/173/27765705-93f94940-5e7e-11e7-8527-3a91bb64ca70.png
authors:
- bkeepers
stars: 219
stars: 241
repository: probot/stale
updated: 2017-11-12 22:20:31 UTC
updated: 2017-12-12 06:40:41 UTC
host: https://probot-stale.herokuapp.com
installations: 308
installations: 375
organizations:
- atom
- facebook
- Homebrew
- nwjs
- fchollet
- apollographql
- gohugoio
- hexojs
- bumptech
- strongloop
- storybooks
- sequelize
---

View File

@@ -8,12 +8,17 @@ authors:
- dessant
repository: dessant/support-requests
host: https://probot-support-requests.glitch.me
stars: 0
updated: 2017-11-12 11:15:14 UTC
installations: 3
stars: 1
updated: 2017-12-13 02:58:50 UTC
installations: 9
organizations:
- kivy
- MinecraftForge
- nozzle
- PHPOffice
- PHPMap
- aVengineers
- Triadai
---
A GitHub App that comments on and closes issues labeled as support requests.

View File

@@ -8,20 +8,20 @@ authors:
- JasonEtco
repository: JasonEtco/todo
host: https://todo-api.jasonet.co
stars: 47
updated: 2017-11-02 15:33:07 UTC
installations: 59
stars: 51
updated: 2017-12-05 05:46:12 UTC
installations: 85
organizations:
- thibmaek
- material-motion
- goreleaser
- caarlos0
- SpoonX
- icco
- getantibody
- drinchev
- phatblat
- fennecdjay
- ChrisMcKenzie
- JasonEtco
- bobsru
- TheKevJames
- miklb
- mtxr
- ignatandrei
---
## Usage

27
_apps/unfurl-links.md Normal file
View File

@@ -0,0 +1,27 @@
---
title: Unfurl Links
description: Add context to the links shared in discussions
slug: unfurl-links
screenshots:
- https://user-images.githubusercontent.com/173/32036265-57a501ca-b9e4-11e7-9db3-52374fb7290c.png
authors:
- bkeepers
repository: probot/unfurl
host: http://probot-unfurl.herokuapp.com
stars: 14
updated: 2017-10-29 13:53:48 UTC
installations: 27
organizations:
- reactiveui
- probot
- goreleaser
- caarlos0
- wangzuo
- xcodeswift
- timvideos
- getantibody
- tunnckoCore
- mwarkentin
---
When a link is found in a comment, this app will add more information to the bottom of the comment about the link.

52
_apps/untrivializer.md Normal file
View File

@@ -0,0 +1,52 @@
---
title: Untrivializer
description: An app that asks if you're really sure something is trivial when you make a comment in Github issues.
slug: https://github.com/apps/untrivializer
screenshots:
- https://raw.githubusercontent.com/entendu/untrivializer/master/docs/ss.png
authors: [ entendu ]
repository: entendu/untrivializer
host: https://puffy-aftermath.glitch.me/
---
# untrivializer
> a GitHub App built with [probot](https://github.com/probot/probot) that asks in Github comments if you're really sure something is trivial.
![screenshot](https://raw.githubusercontent.com/entendu/untrivializer/master/docs/ss.png)
## But why tho
A lot of times we'll write up an issue without really thinking it through:
> We want _X_. Just do thing _Y_ to get it, that should be really simple.
> Make change _Z_, it should be trivial.
> Do thing _Foo_, it's super easy.
Doing those things (almost without fail) takes way, way more time than we think it will. Why? A couple reasons:
* If we're making a comment like that we're probably not thinking through all the little details anyway,
* We're all just [terrible at estimating, _even when we know we're terrible at estimating_](https://en.wikipedia.org/wiki/Planning_fallacy) (it's truly incredible),
* We often forget the downstream repercussions of "simple" changes -- one line of code for you might mean 3 hours or more of code review, testing, etc.
So this little robot tries to detect when you've said something "should be simple" and asks if that's really the case. The default reply is:
> Did you mean, "_might be straightforward, but could have unforseen complexities that would completely change the prioritization of the issue, so we should let it go through the normal planning and estimation process_"[?](https://en.wikipedia.org/wiki/Planning_fallacy)
Detection is an ugly regex.
## Running
I think you can run this as a Github app here: https://github.com/apps/untrivializer but no guarantees that the backend will stay up. If you'd rather run it yourself (I don't blame you) look below.
## Setup
```
# Install dependencies
npm install
# Run the bot
npm start
```

View File

@@ -5,21 +5,23 @@ description: Replies to newly opened pull requests that do no update a file in t
slug: update-docs
screenshots:
- https://user-images.githubusercontent.com/13410355/28179044-97207bee-67b5-11e7-80d0-0c8ede4a325f.png
stars: 5
stars: 6
authors:
- hiimbex
repository: behaviorbot/update-docs
updated: 2017-10-19 16:03:37 UTC
updated: 2017-12-08 07:07:31 UTC
host: https://probot-update-docs.herokuapp.com
installations: 13
installations: 17
organizations:
- adonisjs
- xcodeswift
- behaviorbot
- PHPMap
- ilovecode1
- marclop
- philoserf
- marclop
- cms-gem-daq-project
- aVengineers
- robotland
---

View File

@@ -8,20 +8,21 @@ screenshots:
authors:
- tlvince
repository: tlvince/validate-commit-msg-bot
stars: 3
stars: 6
updated: 2017-11-09 09:50:12 UTC
host: https://validate-commit-msg-bot.now.sh
installations: 16
installations: 25
organizations:
- chaijs
- SpoonX
- angular-pouchdb
- axetroy
- devcenter-square
- christophehurpeau
- flyve-mdm
- tlvince
- nikolay
- luanmuniz
- Robophil
- lostintangent
redirect_from: "/apps/validate-commit-msg-bot/"
---

View File

@@ -6,24 +6,24 @@ screenshots:
- https://user-images.githubusercontent.com/13410355/28288851-679f582a-6af5-11e7-8dd8-b85b6c33e16b.png
- https://user-images.githubusercontent.com/13410355/28288547-5f83aa8e-6af4-11e7-9692-eb41d42431e2.png
- https://user-images.githubusercontent.com/13410355/28289605-1ab81a76-6af8-11e7-8f78-6a1b3948df36.png
stars: 22
stars: 23
authors:
- hiimbex
repository: behaviorbot/welcome
updated: 2017-10-23 06:55:13 UTC
host: https://probot-welcome.herokuapp.com
installations: 75
installations: 86
organizations:
- vuejs
- electron
- kivy
- StevenBlack
- electron-userland
- getinsomnia
- MarshallOfSound
- benbalter
- carambalabs
- probot
- karthik
- carambalabs
---

View File

@@ -7,10 +7,10 @@ screenshots:
authors:
- gr2m
repository: gr2m/wip-bot
stars: 28
updated: 2017-11-05 23:25:40 UTC
stars: 34
updated: 2017-12-13 17:00:51 UTC
host: https://wip-bot.now.sh
installations: 153
installations: 214
organizations:
- dotnet
- jekyll
@@ -18,10 +18,10 @@ organizations:
- aurelia
- saltstack
- Microsoft
- PowerShell
- eggjs
- go-sql-driver
- reactiveui
- hoodiehq
---
If you dont want a pull request to be merged accidentally, add the word "wip" or "WIP" to its title and WIP bot will set its status to error. Thats all :)

View File

@@ -8,6 +8,7 @@ Advanced:
- docs/http.md
- docs/simulating-webhooks.md
- docs/testing.md
- docs/logging.md
- docs/pagination.md
- docs/extensions.md
- docs/deployment.md

View File

@@ -1,8 +1,8 @@
<div class="col-lg-4 col-md-6 mb-3 mt-3 d-flex flex-column">
<a href="{{ app.url }}" class="d-flex flex-column bg-white rounded-1 box-shadow border text-inherit no-underline flex-1 overflow-hidden" style="height:100%">
<a href="{{ app.url }}" class="d-flex flex-column bg-white rounded-1 box-shadow border text-inherit no-underline flex-1" style="height:100%">
<h3 class="h4 px-3 pt-3">{{ app.title }}</h3>
<p class="text-gray lh-condensed px-3 pb-3">{{ app.description }}</p>
<div class="text-gray-light pl-3 pr-2 py-2 bg-gray-light border-top" style="margin-top: auto;">
<div class="text-gray-light pl-3 pr-2 py-2 bg-gray-light border-top" style="margin-top: auto; border-bottom-left-radius: 0; border-bottom-right-radius: 0;">
<div class="d-flex flex-row">
{% if app.installations %}
<div class="col-3 tooltipped tooltipped-s" aria-label="{{ app.installations }} installations">{% octicon cloud-download height:16 class:"v-align-middle" %} <span class="v-align-middle">{{ app.installations }}</span></div>

913
api/4.0.0/Context.html Normal file
View File

@@ -0,0 +1,913 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Context - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">Context</h1>
<section>
<header>
<h2>
Context
</h2>
<div class="class-description"><p>Helpers for extracting information from the webhook event, which can be
passed to GitHub API calls.</p></div>
</header>
<article>
<div class="container-overview">
<div class="section-method">
<h2>Constructor</h2>
<h4 class="name" id="Context"><span class="type-signature"></span>new Context<span class="signature">()</span><span class="type-signature"></span></h4>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>github</code></td>
<td class="type">
<span class="param-type"><code><a href="global.html#github">github</a></code></span>
</td>
<td class="description last"><p>An authenticated GitHub API client</p></td>
</tr>
<tr>
<td class="name"><code>payload</code></td>
<td class="type">
<span class="param-type"><code><a href="global.html#payload">payload</a></code></span>
</td>
<td class="description last"><p>The webhook event payload</p></td>
</tr>
<tr>
<td class="name"><code>log</code></td>
<td class="type">
<span class="param-type"><code><a href="global.html#logger">logger</a></code></span>
</td>
<td class="description last"><p>A logger</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="context.js.html">context.js</a>, <a href="context.js.html#line12">line 12</a>
</li></ul></dd>
</dl>
</div>
</div>
<h3 class="subsection-title">Members</h3>
<div class="section-members">
<h4 class="name" id="isBot"><span class="type-signature"></span>isBot<span class="type-signature"> :boolean</span></h4>
<div class="description">
<p>Returns a boolean if the actor on the event was a bot.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="context.js.html">context.js</a>, <a href="context.js.html#line63">line 63</a>
</li></ul></dd>
</dl>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type"><code>boolean</code></span>
</li>
</ul>
</div>
<h3 class="subsection-title">Methods</h3>
<div class="section-method">
<h4 class="name" id="config"><span class="type-signature"></span>config<span class="signature">(fileName, defaultConfig<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;Object>}</span></h4>
<div class="description">
<p>Reads the app configuration from the given YAML file in the <code>.github</code>
directory of the repository.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="context.js.html">context.js</a>, <a href="context.js.html#line100">line 100</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>fileName</code></td>
<td class="type">
<span class="param-type"><code>string</code></span>
</td>
<td class="attributes">
</td>
<td class="description last">
<p>Name of the YAML file in the <code>.github</code> directory</p>
</td>
</tr>
<tr>
<td class="name"><code>defaultConfig</code></td>
<td class="type">
<span class="param-type"><code>object</code></span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">
<p>An object of default config options</p>
</td>
</tr>
</tbody>
</table>
<div class="section-returns">
<h5>Returns:</h5>
<dl class="param-type">
<dt>
Type:
</dt>
<dd>
<span class="param-type"><code>Promise.&lt;Object></code></span>
</dd>
</dl>
<div class="param-desc">
<ul>
<li>Configuration object read from the file</li>
</ul>
</div>
</div>
<div class="section-examples">
<h5>Examples</h5>
<p class="code-caption">Contents of <code>.github/myapp.yml</code>.</p>
<pre class="prettyprint"><code>close: true
comment: Check the specs on the rotary girder.</code></pre>
<p class="code-caption">App that reads from <code>.github/myapp.yml</code>.</p>
<pre class="prettyprint"><code>// Load config from .github/myapp.yml in the repository
const config = await context.config('myapp.yml')
if (config.close) {
context.github.issues.comment(context.issue({body: config.comment}))
context.github.issues.edit(context.issue({state: 'closed'}))
}</code></pre>
<p class="code-caption">Using a <code>defaultConfig</code> object.</p>
<pre class="prettyprint"><code>// Load config from .github/myapp.yml in the repository and combine with default config
const config = await context.config('myapp.yml', {comment: 'Make sure to check all the specs.'})
if (config.close) {
context.github.issues.comment(context.issue({body: config.comment}));
context.github.issues.edit(context.issue({state: 'closed'}))
}</code></pre>
</div>
</div>
<div class="section-method">
<h4 class="name" id="issue"><span class="type-signature"></span>issue<span class="signature">(object<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
<div class="description">
<p>Return the <code>owner</code>, <code>repo</code>, and <code>number</code> params for making API requests
against an issue or pull request. The object passed in will be merged with
the repo params.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="context.js.html">context.js</a>, <a href="context.js.html#line52">line 52</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>object</code></td>
<td class="type">
<span class="param-type"><code>object</code></span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">
<p>Params to be merged with the issue params.</p>
</td>
</tr>
</tbody>
</table>
<div class="section-examples">
<h5>Example</h5>
<pre class="prettyprint"><code>const params = context.issue({body: 'Hello World!'})
// Returns: {owner: 'username', repo: 'reponame', number: 123, body: 'Hello World!'}</code></pre>
</div>
</div>
<div class="section-method">
<h4 class="name" id="repo"><span class="type-signature"></span>repo<span class="signature">(object<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
<div class="description">
<p>Return the <code>owner</code> and <code>repo</code> params for making API requests against a
repository.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="context.js.html">context.js</a>, <a href="context.js.html#line31">line 31</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>object</code></td>
<td class="type">
<span class="param-type"><code>object</code></span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">
<p>Params to be merged with the repo params.</p>
</td>
</tr>
</tbody>
</table>
<div class="section-examples">
<h5>Example</h5>
<pre class="prettyprint"><code>const params = context.repo({path: '.github/stale.yml'})
// Returns: {owner: 'username', repo: 'reponame', path: '.github/stale.yml'}</code></pre>
</div>
</div>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

729
api/4.0.0/Robot.html Normal file
View File

@@ -0,0 +1,729 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Robot - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">Robot</h1>
<section>
<header>
<h2>
Robot
</h2>
<div class="class-description"><p>The <code>robot</code> parameter available to apps</p></div>
</header>
<article>
<div class="container-overview">
<div class="section-method">
<h2>Constructor</h2>
<h4 class="name" id="Robot"><span class="type-signature"></span>new Robot<span class="signature">()</span><span class="type-signature"></span></h4>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>log</code></td>
<td class="type">
<span class="param-type"><code><a href="global.html#logger">logger</a></code></span>
</td>
<td class="description last"><p>A logger</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="robot.js.html">robot.js</a>, <a href="robot.js.html#line12">line 12</a>
</li></ul></dd>
</dl>
</div>
</div>
<h3 class="subsection-title">Methods</h3>
<div class="section-method">
<h4 class="name" id="on"><span class="type-signature"></span>on<span class="signature">(event, callback)</span><span class="type-signature"></span></h4>
<div class="description">
<p>Listen for <a href="https://developer.github.com/webhooks/">GitHub webhooks</a>,
which are fired for almost every significant action that users take on
GitHub.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="robot.js.html">robot.js</a>, <a href="robot.js.html#line86">line 86</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>event</code></td>
<td class="type">
<span class="param-type"><code>string</code></span>
</td>
<td class="description last">
<p>the name of the <a href="https://developer.github.com/webhooks/#events">GitHub webhook
event</a>. Most events also
include an &quot;action&quot;. For example, the * <a href="https://developer.github.com/v3/activity/events/types/#issuesevent"><code>issues</code></a>
event has actions of <code>assigned</code>, <code>unassigned</code>, <code>labeled</code>, <code>unlabeled</code>,
<code>opened</code>, <code>edited</code>, <code>milestoned</code>, <code>demilestoned</code>, <code>closed</code>, and <code>reopened</code>.
Often, your bot will only care about one type of action, so you can append
it to the event name with a <code>.</code>, like <code>issues.closed</code>.</p>
</td>
</tr>
<tr>
<td class="name"><code>callback</code></td>
<td class="type">
<span class="param-type"><code><a href="Robot.html#~webhookCallback">Robot~webhookCallback</a></code></span>
</td>
<td class="description last">
<p>a function to call when the
webhook is received.</p>
</td>
</tr>
</tbody>
</table>
<div class="section-examples">
<h5>Example</h5>
<pre class="prettyprint"><code>robot.on('push', context => {
// Code was just pushed.
});
robot.on('issues.opened', context => {
// An issue was just opened.
});</code></pre>
</div>
</div>
<div class="section-method">
<h4 class="name" id="route"><span class="type-signature"></span>route<span class="signature">(path)</span><span class="type-signature"></span></h4>
<div class="description">
<p>Get an <a href="http://expressjs.com">express</a> router that can be used to
expose HTTP endpoints</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="robot.js.html">robot.js</a>, <a href="robot.js.html#line49">line 49</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>path</code></td>
<td class="type">
<span class="param-type"><code>string</code></span>
</td>
<td class="description last">
<p>the prefix for the routes</p>
</td>
</tr>
</tbody>
</table>
<div class="section-returns">
<h5>Returns:</h5>
<div class="param-desc">
<p><a href="http://expressjs.com/en/4x/api.html#router">express.Router</a></p>
</div>
</div>
<div class="section-examples">
<h5>Example</h5>
<pre class="prettyprint"><code>module.exports = robot => {
// Get an express router to expose new HTTP endpoints
const app = robot.route('/my-app');
// Use any middleware
app.use(require('express').static(__dirname + '/public'));
// Add a new route
app.get('/hello-world', (req, res) => {
res.end('Hello World');
});
};</code></pre>
</div>
</div>
<h3 class="subsection-title">Type Definitions</h3>
<div class="section-method">
<h4 class="name" id="~webhookCallback"><span class="type-signature"></span>webhookCallback<span class="signature">(context)</span><span class="type-signature"></span></h4>
<div class="description">
<p>Do the thing</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="robot.js.html">robot.js</a>, <a href="robot.js.html#line166">line 166</a>
</li></ul></dd>
</dl>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>context</code></td>
<td class="type">
<span class="param-type"><code><a href="Context.html">Context</a></code></span>
</td>
<td class="description last">
<p>the context of the event that was triggered,
including <code>context.payload</code>, and helpers for extracting information from
the payload, which can be passed to GitHub API calls.</p>
<pre class="prettyprint source lang-js"><code> module.exports = robot => {
robot.on('push', context => {
// Code was pushed to the repo, what should we do with it?
robot.log(context);
});
};</code></pre>
</td>
</tr>
</tbody>
</table>
</div>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

180
api/4.0.0/context.js.html Normal file
View File

@@ -0,0 +1,180 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>context.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">context.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>const path = require('path')
const yaml = require('js-yaml')
/**
* Helpers for extracting information from the webhook event, which can be
* passed to GitHub API calls.
*
* @property {github} github - An authenticated GitHub API client
* @property {payload} payload - The webhook event payload
* @property {logger} log - A logger
*/
class Context {
constructor (event, github, log) {
Object.assign(this, event)
this.github = github
this.log = log
}
/**
* Return the `owner` and `repo` params for making API requests against a
* repository.
*
* @param {object} [object] - Params to be merged with the repo params.
*
* @example
*
* const params = context.repo({path: '.github/stale.yml'})
* // Returns: {owner: 'username', repo: 'reponame', path: '.github/stale.yml'}
*
*/
repo (object) {
const repo = this.payload.repository
return Object.assign({
owner: repo.owner.login || repo.owner.name,
repo: repo.name
}, object)
}
/**
* Return the `owner`, `repo`, and `number` params for making API requests
* against an issue or pull request. The object passed in will be merged with
* the repo params.
*
* @example
*
* const params = context.issue({body: 'Hello World!'})
* // Returns: {owner: 'username', repo: 'reponame', number: 123, body: 'Hello World!'}
*
* @param {object} [object] - Params to be merged with the issue params.
*/
issue (object) {
const payload = this.payload
return Object.assign({
number: (payload.issue || payload.pull_request || payload).number
}, this.repo(), object)
}
/**
* Returns a boolean if the actor on the event was a bot.
* @type {boolean}
*/
get isBot () {
return this.payload.sender.type === 'Bot'
}
/**
* Reads the app configuration from the given YAML file in the `.github`
* directory of the repository.
*
* @example &lt;caption>Contents of &lt;code>.github/myapp.yml&lt;/code>.&lt;/caption>
*
* close: true
* comment: Check the specs on the rotary girder.
*
* @example &lt;caption>App that reads from &lt;code>.github/myapp.yml&lt;/code>.&lt;/caption>
*
* // Load config from .github/myapp.yml in the repository
* const config = await context.config('myapp.yml')
*
* if (config.close) {
* context.github.issues.comment(context.issue({body: config.comment}))
* context.github.issues.edit(context.issue({state: 'closed'}))
* }
*
* @example &lt;caption>Using a &lt;code>defaultConfig&lt;/code> object.&lt;/caption>
*
* // Load config from .github/myapp.yml in the repository and combine with default config
* const config = await context.config('myapp.yml', {comment: 'Make sure to check all the specs.'})
*
* if (config.close) {
* context.github.issues.comment(context.issue({body: config.comment}));
* context.github.issues.edit(context.issue({state: 'closed'}))
* }
*
* @param {string} fileName - Name of the YAML file in the `.github` directory
* @param {object} [defaultConfig] - An object of default config options
* @return {Promise&lt;Object>} - Configuration object read from the file
*/
async config (fileName, defaultConfig) {
const params = this.repo({path: path.posix.join('.github', fileName)})
try {
const res = await this.github.repos.getContent(params)
const config = yaml.safeLoad(Buffer.from(res.data.content, 'base64').toString()) || {}
return Object.assign({}, defaultConfig, config)
} catch (err) {
if (err.code === 404) {
if (defaultConfig) {
return defaultConfig
}
return null
} else {
throw err
}
}
}
}
module.exports = Context
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Binary file not shown.

115
api/4.0.0/github.js.html Normal file
View File

@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>github.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">github.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>const Bottleneck = require('bottleneck')
const GitHubApi = require('github')
/**
* the [github Node.js module](https://github.com/octokit/node-github),
* which wraps the [GitHub API](https://developer.github.com/v3/) and allows
* you to do almost anything programmatically that you can do through a web
* browser.
* @typedef github
* @see {@link https://github.com/octokit/node-github}
*/
// Default callback should just return the response passed to it.
const defaultCallback = response => response
class EnhancedGitHubClient extends GitHubApi {
constructor (options) {
super(options)
this.limiter = new Bottleneck(1, 1000)
this.logger = options.logger
}
handler (params, block, callback) {
// Only allow one request at a time with a 1s delay
// https://github.com/octokit/node-github/issues/526
this.limiter.submit(super.handler.bind(this), params, block, (err, res) => {
let msg = `GitHub request: ${block.method} ${block.url}`
if (res) {
msg += ` - ${res.meta.status}`
} else if (err) {
msg += ` - ${err.code} ${err.status}`
}
this.logger.debug({params}, msg)
if (res) {
this.logger.trace(res, 'GitHub response:')
}
callback(err, res)
})
}
async paginate (responsePromise, callback = defaultCallback) {
let collection = []
let response = await responsePromise
collection = collection.concat(await callback(response))
while (this.hasNextPage(response)) {
response = await this.getNextPage(response)
collection = collection.concat(await callback(response))
}
return collection
}
}
module.exports = EnhancedGitHubClient
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

359
api/4.0.0/global.html Normal file
View File

@@ -0,0 +1,359 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Global - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">Global</h1>
<section>
<header>
<h2>
</h2>
</header>
<article>
<div class="container-overview">
<dl class="details">
</dl>
</div>
<h3 class="subsection-title">Type Definitions</h3>
<div class="section-members">
<h4 class="name" id="github">github</h4>
<div class="description">
<p>the <a href="https://github.com/octokit/node-github">github Node.js module</a>,
which wraps the <a href="https://developer.github.com/v3/">GitHub API</a> and allows
you to do almost anything programmatically that you can do through a web
browser.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="github.js.html">github.js</a>, <a href="github.js.html#line4">line 4</a>
</li></ul></dd>
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul>
<li><a href="https://github.com/octokit/node-github">https://github.com/octokit/node-github</a></li>
</ul>
</dd>
</dl>
</div>
<div class="section-members">
<h4 class="name" id="logger">logger</h4>
<div class="description">
<p>A logger backed by <a href="https://github.com/trentm/node-bunyan">bunyan</a></p>
<p>The default log level is <code>info</code>, but you can change it by setting the
<code>LOG_LEVEL</code> environment variable to <code>trace</code>, <code>debug</code>, <code>info</code>, <code>warn</code>,
<code>error</code>, or <code>fatal</code>.</p>
<p>By default, logs are formatted for readability in development. If you intend
to drain logs to a logging service, set <code>LOG_FORMAT=json</code>.</p>
<p><strong>Note</strong>: All execptions reported with <code>logger.error</code> will be forwarded to
<a href="https://github.com/getsentry/sentry">sentry</a> if the <code>SENTRY_DSN</code> environment
variable is set.</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="logger.js.html">logger.js</a>, <a href="logger.js.html#line1">line 1</a>
</li></ul></dd>
</dl>
<h5>Example</h5>
<pre class="prettyprint"><code>robot.log("This is an info message");
robot.log.debug("…so is this");
robot.log.trace("Now we're talking");
robot.log.info("I thought you should know…");
robot.log.warn("Woah there");
robot.log.error("ETOOMANYLOGS");
robot.log.fatal("Goodbye, cruel world!");</code></pre>
</div>
<div class="section-members">
<h4 class="name" id="payload">payload</h4>
<div class="description">
<p>A <a href="https://developer.github.com/webhooks/#events">GitHub webhook event</a> payload</p>
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="robot.js.html">robot.js</a>, <a href="robot.js.html#line183">line 183</a>
</li></ul></dd>
</dl>
</div>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

66
api/4.0.0/index.html Normal file
View File

@@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Home - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

122
api/4.0.0/logger.js.html Normal file
View File

@@ -0,0 +1,122 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>logger.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">logger.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/**
* A logger backed by [bunyan](https://github.com/trentm/node-bunyan)
*
* The default log level is `info`, but you can change it by setting the
* `LOG_LEVEL` environment variable to `trace`, `debug`, `info`, `warn`,
* `error`, or `fatal`.
*
* By default, logs are formatted for readability in development. If you intend
* to drain logs to a logging service, set `LOG_FORMAT=json`.
*
* **Note**: All execptions reported with `logger.error` will be forwarded to
* [sentry](https://github.com/getsentry/sentry) if the `SENTRY_DSN` environment
* variable is set.
*
* @typedef logger
*
* @example
*
* robot.log("This is an info message");
* robot.log.debug("…so is this");
* robot.log.trace("Now we're talking");
* robot.log.info("I thought you should know…");
* robot.log.warn("Woah there");
* robot.log.error("ETOOMANYLOGS");
* robot.log.fatal("Goodbye, cruel world!");
*/
const Logger = require('bunyan')
const bunyanFormat = require('bunyan-format')
const serializers = require('./serializers')
// Return a function that defaults to "info" level, and has properties for
// other levels:
//
// robot.log("info")
// robot.log.trace("verbose details");
//
Logger.prototype.wrap = function () {
const fn = this.info.bind(this);
// Add level methods on the logger
['trace', 'debug', 'info', 'warn', 'error', 'fatal'].forEach(level => {
fn[level] = this[level].bind(this)
})
// Expose `child` method for creating new wrapped loggers
fn.child = (attrs) => this.child(attrs, true).wrap()
// Expose target logger
fn.target = logger
return fn
}
const logger = new Logger({
name: 'probot',
level: process.env.LOG_LEVEL || 'info',
stream: bunyanFormat({outputMode: process.env.LOG_FORMAT || 'short'}),
serializers
})
module.exports = logger
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

247
api/4.0.0/robot.js.html Normal file
View File

@@ -0,0 +1,247 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>robot.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Context.html">Context</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#config">config</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#issue">issue</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Context.html#repo">repo</a></span></li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Robot.html">Robot</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#on">on</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Robot.html#route">route</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li>
</nav>
<div id="main">
<h1 class="page-title">robot.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>const {EventEmitter} = require('promise-events')
const express = require('express')
const Context = require('./context')
const logger = require('./logger')
const GitHubApi = require('./github')
/**
* The `robot` parameter available to apps
*
* @property {logger} log - A logger
*/
class Robot {
constructor ({app, cache, router, catchErrors} = {}) {
this.events = new EventEmitter()
this.app = app
this.cache = cache
this.router = router || new express.Router()
this.log = logger.wrap()
this.catchErrors = catchErrors
}
async receive (event) {
return this.events.emit('*', event).then(() => {
return this.events.emit(event.event, event)
})
}
/**
* Get an {@link http://expressjs.com|express} router that can be used to
* expose HTTP endpoints
*
* @example
* module.exports = robot => {
* // Get an express router to expose new HTTP endpoints
* const app = robot.route('/my-app');
*
* // Use any middleware
* app.use(require('express').static(__dirname + '/public'));
*
* // Add a new route
* app.get('/hello-world', (req, res) => {
* res.end('Hello World');
* });
* };
*
* @param {string} path - the prefix for the routes
* @returns {@link http://expressjs.com/en/4x/api.html#router|express.Router}
*/
route (path) {
if (path) {
const router = new express.Router()
this.router.use(path, router)
return router
} else {
return this.router
}
}
/**
* Listen for [GitHub webhooks](https://developer.github.com/webhooks/),
* which are fired for almost every significant action that users take on
* GitHub.
*
* @param {string} event - the name of the [GitHub webhook
* event](https://developer.github.com/webhooks/#events). Most events also
* include an "action". For example, the * [`issues`](
* https://developer.github.com/v3/activity/events/types/#issuesevent)
* event has actions of `assigned`, `unassigned`, `labeled`, `unlabeled`,
* `opened`, `edited`, `milestoned`, `demilestoned`, `closed`, and `reopened`.
* Often, your bot will only care about one type of action, so you can append
* it to the event name with a `.`, like `issues.closed`.
*
* @param {Robot~webhookCallback} callback - a function to call when the
* webhook is received.
*
* @example
*
* robot.on('push', context => {
* // Code was just pushed.
* });
*
* robot.on('issues.opened', context => {
* // An issue was just opened.
* });
*/
on (event, callback) {
if (event.constructor === Array) {
event.forEach(e => this.on(e, callback))
return
}
const [name, action] = event.split('.')
return this.events.on(name, async event => {
if (!action || action === event.payload.action) {
const log = this.log.child({id: event.id})
try {
const github = await this.auth(event.payload.installation.id, log)
const context = new Context(event, github, log)
await callback(context)
} catch (err) {
log.error({err, event})
if (!this.catchErrors) {
throw err
}
}
}
})
}
/**
* Authenticate and get a GitHub client that can be used to make API calls.
*
* You'll probably want to use `context.github` instead.
*
* **Note**: `robot.auth` is asynchronous, so it needs to be prefixed with a
* [`await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)
* to wait for the magic to happen.
*
* @example
*
* module.exports = function(robot) {
* robot.on('issues.opened', async context => {
* const github = await robot.auth();
* });
* };
*
* @param {number} [id] - ID of the installation, which can be extracted from
* `context.payload.installation.id`. If called without this parameter, the
* client wil authenticate [as the app](https://developer.github.com/apps/building-integrations/setting-up-and-registering-github-apps/about-authentication-options-for-github-apps/#authenticating-as-a-github-app)
* instead of as a specific installation, which means it can only be used for
* [app APIs](https://developer.github.com/v3/apps/).
*
* @returns {Promise&lt;github>} - An authenticated GitHub API client
* @private
*/
async auth (id, log = this.log) {
const github = new GitHubApi({
debug: process.env.LOG_LEVEL === 'trace',
host: process.env.GHE_HOST || 'api.github.com',
pathPrefix: process.env.GHE_HOST ? '/api/v3' : '',
logger: log.child({installation: id})
})
if (id) {
const res = await this.cache.wrap(`app:${id}:token`, () => {
log.trace(`creating token for installation`)
github.authenticate({type: 'integration', token: this.app()})
return github.apps.createInstallationToken({installation_id: id})
}, {ttl: 60 * 59}) // Cache for 1 minute less than GitHub expiry
github.authenticate({type: 'token', token: res.data.token})
} else {
github.authenticate({type: 'integration', token: this.app()})
}
return github
}
}
module.exports = (...args) => new Robot(...args)
/**
* Do the thing
* @callback Robot~webhookCallback
* @param {Context} context - the context of the event that was triggered,
* including `context.payload`, and helpers for extracting information from
* the payload, which can be passed to GitHub API calls.
*
* ```js
* module.exports = robot => {
* robot.on('push', context => {
* // Code was pushed to the repo, what should we do with it?
* robot.log(context);
* });
* };
* ```
*/
/**
* A [GitHub webhook event](https://developer.github.com/webhooks/#events) payload
*
* @typedef payload
*/
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Dec 13 2017 10:15:16 GMT-0600 (CST) using the Minami theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>

View File

@@ -0,0 +1,25 @@
/*global document */
(function() {
var source = document.getElementsByClassName('prettyprint source linenums');
var i = 0;
var lineNumber = 0;
var lineId;
var lines;
var totalLines;
var anchorHash;
if (source && source[0]) {
anchorHash = document.location.hash.substring(1);
lines = source[0].getElementsByTagName('li');
totalLines = lines.length;
for (; i < totalLines; i++) {
lineNumber++;
lineId = 'line' + lineNumber;
lines[i].id = lineId;
if (lineId === anchorHash) {
lines[i].className += ' selected';
}
}
}
})();

View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View File

@@ -0,0 +1,2 @@
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com",
/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);

View File

@@ -0,0 +1,28 @@
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();

View File

@@ -0,0 +1,692 @@
@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,500i,500,600,600i|Roboto);
* {
box-sizing: border-box
}
html, body {
height: 100%;
width: 100%;
}
body {
color: #4d4e53;
background-color: white;
margin: 0 auto;
padding: 0;
font-family: 'Source Sans Pro', Helvetica, sans-serif;
font-size: 16px;
line-height: 160%;
}
a,
a:active {
color: #0095dd;
text-decoration: none;
}
a:hover {
text-decoration: underline
}
p, ul, ol, blockquote {
margin-bottom: 1em;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Roboto', sans-serif;
}
h1, h2, h3, h4, h5, h6 {
color: #000;
font-weight: 400;
margin: 0;
}
h1 {
font-weight: 300;
font-size: 48px;
margin: 1em 0 .5em;
}
h1.page-title {margin-bottom: 10px;font-size: 34px;font-weight: 300;border-bottom: solid 2px #ddd;padding: .5em 0 .5em;margin-top: 0;}
h2 {
font-size: 32px;
margin: 1.2em 0 .8em;
font-weight: bold;
}
h3 {
/* margin-top: 1em; */
/* margin-bottom: 16px; */
/* font-weight: bold; */
padding: 0;
margin: 1em 0 .6em;
font-size: 28px;
/* border-bottom: 1px solid #eee; */
/* padding-bottom: 15px; */
}
h4 {
font-size: 18px;
margin: 1em 0 .2em;
color: #4d4e53;
/* border-bottom: 1px solid #eee; */
padding-bottom: 8px;
}
h5, .container-overview .subsection-title {
font-size: 120%;
/* letter-spacing: -0.01em; */
margin: 20px 0 5px;
}
h6 {
font-size: 100%;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
font-style: italic;
}
tt, code, kbd, samp {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
background: #f4f4f4;
padding: 1px 5px;
border-radius: 5px;
font-size: 14px;
}
blockquote {
display: block;
border-left: 4px solid #eee;
margin: 0;
padding-left: 1em;
color: #888;
}
.class-description {
font-size: 130%;
line-height: 140%;
margin-bottom: 1em;
margin-top: 1em;
}
.class-description:empty {
margin: 0
}
/** Container **/
#main {
float: right;
min-width: 360px;
width: calc(100% - 250px);
padding: 0 30px 20px 30px;
}
header {
display: block
}
section {
display: block;
background-color: #fff;
padding: 0;
}
.variation {
display: none
}
.signature-attributes {
font-size: 60%;
color: #aaa;
font-style: italic;
font-weight: lighter;
}
/** Readme **/
.readme {
font-size: 16px;
}
.readme h1,
.readme h2,
.readme h3,
.readme h4,
.readme h5 {
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
padding: 0;
}
.readme h1 {
font-size: 2em;
padding-bottom: 0.3em;
}
.readme h2 {
font-size: 1.75em;
padding-bottom: 0.3em;
}
.readme h3 {
font-size: 1.5em;
background-color: transparent;
}
.readme h4 {
font-size: 1.25em;
}
.readme h5 {
font-size: 1em;
}
.readme img {
max-width: 100%;
}
.readme ul, .readme ol {
padding-left: 2em;
}
.readme pre > code {
font-size: 0.85em;
}
.readme table {
margin-bottom: 1em;
border-collapse: collapse;
border-spacing: 0;
}
.readme table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.readme table th,
.readme table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.readme table tr:nth-child(2n) {
background-color: #f8f8f8;
}
/** Nav **/
nav {
float: left;
display: block;
width: 250px;
background: #fff;
overflow: auto;
position: fixed;
height: 100%;
padding: 10px;
border-right: 1px solid #eee;
/* box-shadow: 0 0 3px rgba(0,0,0,0.1); */
}
nav li {
list-style: none;
padding: 0;
margin: 0;
}
.nav-heading {
margin-top: 10px;
font-weight: bold;
}
.nav-heading a {
color: #888;
font-size: 14px;
display: inline-block;
}
.nav-item-type {
/* margin-left: 5px; */
width: 18px;
height: 18px;
display: inline-block;
text-align: center;
border-radius: 0.2em;
margin-right: 5px;
font-weight: bold;
line-height: 20px;
font-size: 13px;
}
.type-function {
background: #B3E5FC;
color: #0288D1;
}
.type-class {
background: #D1C4E9;
color: #4527A0;
}
.type-member {
background: #C8E6C9;
color: #388E3C;
}
.type-module {
background: #E1BEE7;
color: #7B1FA2;
}
/** Footer **/
footer {
color: hsl(0, 0%, 28%);
margin-left: 250px;
display: block;
padding: 30px;
font-style: italic;
font-size: 90%;
border-top: 1px solid #eee;
}
.ancestors {
color: #999
}
.ancestors a {
color: #999 !important;
text-decoration: none;
}
.clear {
clear: both
}
.important {
font-weight: bold;
color: #950B02;
}
.yes-def {
text-indent: -1000px
}
.type-signature {
color: #aaa
}
.name, .signature {
font-family: Consolas, Monaco, 'Andale Mono', monospace
}
.details {
margin-top: 14px;
border-left: 2px solid #DDD;
line-height: 30px;
}
.details dt {
width: 120px;
float: left;
padding-left: 10px;
}
.details dd {
margin-left: 70px
}
.details ul {
margin: 0
}
.details ul {
list-style-type: none
}
.details li {
margin-left: 30px
}
.details pre.prettyprint {
margin: 0
}
.details .object-value {
padding-top: 0
}
.description {
margin-bottom: 1em;
margin-top: 1em;
}
.code-caption {
font-style: italic;
font-size: 107%;
margin: 0;
}
.prettyprint {
font-size: 13px;
border: 1px solid #ddd;
border-radius: 3px;
box-shadow: 0 1px 3px hsla(0, 0%, 0%, 0.05);
overflow: auto;
}
.prettyprint.source {
width: inherit
}
.prettyprint code {
font-size: 12px;
line-height: 18px;
display: block;
background-color: #fff;
color: #4D4E53;
}
.prettyprint code:empty:before {
content: '';
}
.prettyprint > code {
padding: 15px
}
.prettyprint .linenums code {
padding: 0 15px
}
.prettyprint .linenums li:first-of-type code {
padding-top: 15px
}
.prettyprint code span.line {
display: inline-block
}
.prettyprint.linenums {
padding-left: 70px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.prettyprint.linenums ol {
padding-left: 0
}
.prettyprint.linenums li {
border-left: 3px #ddd solid
}
.prettyprint.linenums li.selected, .prettyprint.linenums li.selected * {
background-color: lightyellow
}
.prettyprint.linenums li * {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.params, .props {
border-spacing: 0;
border: 1px solid #ddd;
border-collapse: collapse;
border-radius: 3px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
width: 100%;
font-size: 14px;
/* margin-left: 15px; */
}
.params .name, .props .name, .name code {
color: #4D4E53;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 100%;
}
.params td, .params th, .props td, .props th {
margin: 0px;
text-align: left;
vertical-align: top;
padding: 10px;
display: table-cell;
}
.params td {
border-top: 1px solid #eee
}
.params thead tr, .props thead tr {
background-color: #fff;
font-weight: bold;
}
.params .params thead tr, .props .props thead tr {
background-color: #fff;
font-weight: bold;
}
.params td.description > p:first-child, .props td.description > p:first-child {
margin-top: 0;
padding-top: 0;
}
.params td.description > p:last-child, .props td.description > p:last-child {
margin-bottom: 0;
padding-bottom: 0;
}
dl.param-type {
/* border-bottom: 1px solid hsl(0, 0%, 87%); */
margin: 0;
padding: 0;
font-size: 16px;
}
.param-type dt, .param-type dd {
display: inline-block
}
.param-type dd {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
display: inline-block;
padding: 0;
margin: 0;
font-size: 14px;
}
.disabled {
color: #454545
}
/* navicon button */
.navicon-button {
display: none;
position: relative;
padding: 2.0625rem 1.5rem;
transition: 0.25s;
cursor: pointer;
user-select: none;
opacity: .8;
}
.navicon-button .navicon:before, .navicon-button .navicon:after {
transition: 0.25s;
}
.navicon-button:hover {
transition: 0.5s;
opacity: 1;
}
.navicon-button:hover .navicon:before, .navicon-button:hover .navicon:after {
transition: 0.25s;
}
.navicon-button:hover .navicon:before {
top: .825rem;
}
.navicon-button:hover .navicon:after {
top: -.825rem;
}
/* navicon */
.navicon {
position: relative;
width: 2.5em;
height: .3125rem;
background: #000;
transition: 0.3s;
border-radius: 2.5rem;
}
.navicon:before, .navicon:after {
display: block;
content: "";
height: .3125rem;
width: 2.5rem;
background: #000;
position: absolute;
z-index: -1;
transition: 0.3s 0.25s;
border-radius: 1rem;
}
.navicon:before {
top: .625rem;
}
.navicon:after {
top: -.625rem;
}
/* open */
.nav-trigger:checked + label:not(.steps) .navicon:before,
.nav-trigger:checked + label:not(.steps) .navicon:after {
top: 0 !important;
}
.nav-trigger:checked + label .navicon:before,
.nav-trigger:checked + label .navicon:after {
transition: 0.5s;
}
/* Minus */
.nav-trigger:checked + label {
transform: scale(0.75);
}
/* × and + */
.nav-trigger:checked + label.plus .navicon,
.nav-trigger:checked + label.x .navicon {
background: transparent;
}
.nav-trigger:checked + label.plus .navicon:before,
.nav-trigger:checked + label.x .navicon:before {
transform: rotate(-45deg);
background: #FFF;
}
.nav-trigger:checked + label.plus .navicon:after,
.nav-trigger:checked + label.x .navicon:after {
transform: rotate(45deg);
background: #FFF;
}
.nav-trigger:checked + label.plus {
transform: scale(0.75) rotate(45deg);
}
.nav-trigger:checked ~ nav {
left: 0 !important;
}
.nav-trigger:checked ~ .overlay {
display: block;
}
.nav-trigger {
position: fixed;
top: 0;
clip: rect(0, 0, 0, 0);
}
.overlay {
display: none;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
background: hsla(0, 0%, 0%, 0.5);
z-index: 1;
}
.section-method {
margin-bottom: 30px;
padding-bottom: 30px;
border-bottom: 1px solid #eee;
}
@media only screen and (min-width: 320px) and (max-width: 680px) {
body {
overflow-x: hidden;
}
nav {
background: #FFF;
width: 250px;
height: 100%;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: -250px;
z-index: 3;
padding: 0 10px;
transition: left 0.2s;
}
.navicon-button {
display: inline-block;
position: fixed;
top: 1.5em;
right: 0;
z-index: 2;
}
#main {
width: 100%;
min-width: 360px;
}
#main h1.page-title {
margin: 1em 0;
}
#main section {
padding: 0;
}
footer {
margin-left: 0;
}
}
@media only print {
nav {
display: none;
}
#main {
float: none;
width: 100%;
}
}

View File

@@ -0,0 +1,111 @@
/* JSDoc prettify.js theme */
/* plain text */
.pln {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* string content */
.str {
color: hsl(104, 100%, 24%);
font-weight: normal;
font-style: normal;
}
/* a keyword */
.kwd {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a comment */
.com {
font-weight: normal;
font-style: italic;
}
/* a type name */
.typ {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* a literal value */
.lit {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* punctuation */
.pun {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* lisp open bracket */
.opn {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* lisp close bracket */
.clo {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a markup tag name */
.tag {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a markup attribute name */
.atn {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a markup attribute value */
.atv {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a declaration */
.dec {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a variable name */
.var {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* a function name */
.fun {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0;
}

View File

@@ -0,0 +1,132 @@
/* Tomorrow Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
/* plain text */
.pln {
color: #4d4d4c; }
@media screen {
/* string content */
.str {
color: hsl(104, 100%, 24%); }
/* a keyword */
.kwd {
color: hsl(240, 100%, 50%); }
/* a comment */
.com {
color: hsl(0, 0%, 60%); }
/* a type name */
.typ {
color: hsl(240, 100%, 32%); }
/* a literal value */
.lit {
color: hsl(240, 100%, 40%); }
/* punctuation */
.pun {
color: #000000; }
/* lisp open bracket */
.opn {
color: #000000; }
/* lisp close bracket */
.clo {
color: #000000; }
/* a markup tag name */
.tag {
color: #c82829; }
/* a markup attribute name */
.atn {
color: #f5871f; }
/* a markup attribute value */
.atv {
color: #3e999f; }
/* a declaration */
.dec {
color: #f5871f; }
/* a variable name */
.var {
color: #c82829; }
/* a function name */
.fun {
color: #4271ae; } }
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str {
color: #060; }
.kwd {
color: #006;
font-weight: bold; }
.com {
color: #600;
font-style: italic; }
.typ {
color: #404;
font-weight: bold; }
.lit {
color: #044; }
.pun, .opn, .clo {
color: #440; }
.tag {
color: #006;
font-weight: bold; }
.atn {
color: #404; }
.atv {
color: #060; } }
/* Style */
/*
pre.prettyprint {
background: white;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 12px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px; }
*/
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0; }
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */ }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */ }

View File

@@ -1 +1 @@
0.11.0
4.0.0