* * move keyboard mappings to shared partial

* * more search prefix help to shared partial

* * add repo scope required modal with stub content

* * add unfinished support page
* add unfinished documentation page

* * content checkpoint

* * fix scroll on small screens
* use list-group instead of nav pills for documentation

* * remove searchbar if there are no notifications on the page

* * add sidebar button on smaller devices
* fix scroll behaviour on small devices (need to set a scrollable) inner element though.

* * typo

* * fix up spacing of docs on smaller screens

* * add documentaiton to menu

* * remove padding classes

* * add new key for app install urls

* * hide some docs behind app_install_url

* * fix config option

* * review fixes

* * add support to documentation page
* add a redirect to support there in case anyone hand-crafts a url

* * update menu link

* * remove support page
* switch route to one that works

* * modify messaging if we need more scope, or we're on octobox.io

* * show lock icon if feature are actually disabled
This commit is contained in:
Benjamin Nickolls 2018-08-28 13:40:06 +01:00 коммит произвёл Andrew Nesbitt
Родитель ad92abebb1
Коммит ce341f7129
11 изменённых файлов: 508 добавлений и 219 удалений

Просмотреть файл

@ -56,6 +56,16 @@ html {
.flex-container {
padding: 15px;
min-width: 0;
&.text-content{
h1, h2{
padding-top: $spacer * 3
}
max-width: 60em;
font-size: 16px;
ul:last-child{
min-height: 31em;
}
}
.flex-main & {
padding-left: 0;
}
@ -70,10 +80,20 @@ html {
}
@include media-breakpoint-down(md) {
.flex-main{
overflow-y: hidden;
}
.flex-container {
.flex-main & {
padding-left: 15px;
overflow-y: hidden;
&.text-content{
h1, h2{
padding-top: inherit;
}
height: 100%;
overflow-y: scroll;
}
height: 100%;
> .card {
height: 100%;

Просмотреть файл

@ -20,6 +20,10 @@ module ApplicationHelper
nil
end
def repo_scope_modal
content_tag :span, octicon('shield'), class: 'btn btn-sm btn-link repo-scope d-inline-block', title: 'Requires repo scope', data: {toggle:'modal', target:'#repo-scope'} unless Octobox.config.fetch_subject || personal_access_tokens_enabled
end
def octobox_icon(height=16)
"<svg class='octobox-icon' height=#{height} viewBox='0 0 14 16' version='1.1'>
<path d='M13.58,4.71 L12.908,4.229 C12.766,3.566 12.461,2.994 12.025,2.522 C12.122,2.281 12.438,1.322 11.928,0.022 C11.928,0.022 11.14,-0.227 9.348,1.004 C8.949,0.892 8.536,0.833 8.118,0.8 L7,0 L5.882,0.8 C5.463,0.833 5.05,0.892 4.652,1.004 C2.86,-0.234 2.072,0.022 2.072,0.022 C1.562,1.322 1.877,2.281 1.975,2.522 C1.539,2.994 1.234,3.566 1.092,4.229 L0.42,4.71 C0.16,4.89 8.8817842e-16,5.19 8.8817842e-16,5.52 L8.8817842e-16,14 C8.8817842e-16,14.55 0.45,15 1,15 L13,15 C13.55,15 14,14.55 14,14 L14,5.52 C14,5.19 13.85,4.9 13.58,4.71 Z M13,13.5 L8.5,10.5 L13,7.5 L13,13.5 Z M2,14 L7,11 L12,14 L2,14 Z M1,7.5 L5.5,10.5 L1,13.5 L1,7.5 Z M7,10 L2.58,7.227 C2.541,7.011 2.515,6.787 2.515,6.548 C2.515,5.974 2.8,5.43 3.28,4.984 C4.083,4.245 5.455,4.637 7,4.637 C8.553,4.637 9.91,4.245 10.72,4.984 C11.207,5.43 11.485,5.966 11.485,6.548 C11.485,6.78 11.459,6.998 11.421,7.209 L7,10 Z M8.8828,5.2944 C8.3878,5.2944 7.9828,5.8904 7.9828,6.6384 C7.9828,7.3864 8.3878,7.9904 8.8828,7.9904 C9.3778,7.9904 9.7818,7.3864 9.7818,6.6384 C9.7818,5.8904 9.3848,5.2944 8.8828,5.2944 Z M5.1177,5.2944 C4.6227,5.2944 4.2177,5.8984 4.2177,6.6384 C4.2177,7.3784 4.6227,7.9904 5.1177,7.9904 C5.6127,7.9904 6.0177,7.3864 6.0177,6.6384 C6.0177,5.8904 5.6127,5.2944 5.1177,5.2944 Z'></path>

Просмотреть файл

@ -17,17 +17,17 @@
<% end %>
</button>
</div>
<%= form_tag root_path, method: :get, class: 'form-inline collapse navbar-collapse', id: 'search', enforce_utf8: false do |f| %>
<% filters.except(:q).select{|n,v| v.present? }.each do |name, value| %>
<%= hidden_field_tag name, value %>
<% if @notifications %>
<%= form_tag root_path, method: :get, class: 'form-inline collapse navbar-collapse', id: 'search', enforce_utf8: false do |f| %>
<% filters.except(:q).select{|n,v| v.present? }.each do |name, value| %>
<%= hidden_field_tag name, value %>
<% end %>
<%= text_field_tag 'q', params[:q], placeholder: 'Search...', class: 'form-control', size: 46, id: 'search-box', 'aria-label' => 'Search' %>
<div class="btn btn-sm btn-link search-help d-none d-md-block" title='Search Cheat Sheet' data-toggle="modal" data-target="#search-help">
<%= octicon 'question', :height => 16 %>
</div>
<% end %>
<%= text_field_tag 'q', params[:q], placeholder: 'Search...', class: 'form-control', size: 46, id: 'search-box', 'aria-label' => 'Search' %>
<div class="btn btn-sm btn-link search-help d-none d-md-block" title='Search Cheat Sheet' data-toggle="modal" data-target="#search-help">
<%= octicon 'question', :height => 16 %>
</div>
<% end %>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item nav-link d-none d-md-block">
@ -45,7 +45,7 @@
<%= octicon 'mark-github', height: 16, class: 'text-muted' %>
GitHub Dashboard
<% end %>
<%= link_to "https://github.com/octobox/octobox/issues", class: 'dropdown-item', target: "_blank", rel: "noopener" do %>
<%= link_to documentation_path(anchor: 'support'), class: 'dropdown-item', target: "_blank", rel: "noopener" do %>
<%= octicon 'question', height: 16, class: 'text-muted' %>
Octobox Support
<% end %>
@ -59,16 +59,20 @@
Sidekiq
<% end %>
<% end %>
<%= link_to "settings", class: 'dropdown-item' do %>
<%= octicon 'settings', height: 16, class: 'text-muted' %>
Settings
<%= link_to "documentation", class: 'dropdown-item' do %>
<%= octicon 'book', height: 16, class: 'text-muted' %>
User Documentation
<% end %>
<% if File.exist?(Rails.root.join('public', 'docs', 'index.html')) %>
<%= link_to "docs/", class: 'dropdown-item' do %>
<%= octicon 'book', height: 16, class: 'text-muted' %>
<%= octicon 'code', height: 16, class: 'text-muted' %>
API Documentation
<% end %>
<% end %>
<%= link_to "settings", class: 'dropdown-item' do %>
<%= octicon 'settings', height: 16, class: 'text-muted' %>
Settings
<% end %>
<div class="dropdown-divider d-md-none"></div>
<a class="d-md-none" href="https://opencollective.com/octobox/" class='opencollective' target='_blank' rel="noopener"><%= octicon 'gift', height: 16, class: 'text-muted' %> Donate</a>
<div class="dropdown-divider"></div>

Просмотреть файл

@ -6,107 +6,7 @@
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<table class="keyboard-mappings">
<tbody>
<tr>
<td class="keys">
<div class="key">.</div> or <div class="key">r</div>
</td>
<td>
Refresh
</td>
</tr>
<tr>
<td class="keys">
<div class="key">j</div>
</td>
<td>
Move down the list
</td>
</tr>
<tr>
<td class="keys">
<div class="key">k</div>
</td>
<td>
Move up the list
</td>
</tr>
<tr>
<td class="keys">
<div class="key">s</div>
</td>
<td>
Star current notification
</td>
</tr>
<tr>
<td class="keys">
<div class="key">x</div>
</td>
<td>
Mark current notification
</td>
</tr>
<tr>
<td class="keys">
<div class="key">a</div>
</td>
<td>
Select/deselect all
</td>
</tr>
<tr>
<td class="keys">
<div class="key">y</div> or <div class="key">e</div>
</td>
<td>
Archive current/marked notification(s)
</td>
</tr>
<tr>
<tr>
<td class="keys">
<div class="key">m</div>
</td>
<td>
Mute current/marked notification(s)
</td>
</tr>
<tr>
<td class="keys">
<div class="key">d</div>
</td>
<td>
Mark current/marked notification(s) as read here and on GitHub
</td>
</tr>
<tr>
<td class="keys">
<div class="key">o</div> or <div class="key">Enter</div>
</td>
<td>
Open current notification in a new window
</td>
</tr>
<tr>
<td class="keys">
<div class="key">?</div>
</td>
<td>
Show this help menu
</td>
</tr>
<tr>
<td class="keys">
<div class="key">esc</div>
</td>
<td>
Close modal OR Clear applied filters
</td>
</tr>
</tbody>
</table>
<%= render 'shared/keyboard_mappings' %>
</div>
</div>
</div>

Просмотреть файл

@ -13,110 +13,7 @@
</p>
<h5>Supported prefixes</h5>
<table class="table">
<tbody>
<tr>
<td>
<code>repo:octobox/octobox</code>
</td>
<td>Only search notifications from the octobox/octobox repository.</td>
</tr>
<tr>
<td>
<code>owner:microsoft</code>
</td>
<td>Only search notifications from repos in the microsoft organisation.</td>
</tr>
<tr>
<td>
<code>type:pull_request</code>
</td>
<td>
Only search pull requests. Also accepts:
<code>issue</code>,
<code>release</code>,
<code>commit</code>,
<code>repository_invitation</code>
and <code>repository_vulnerability_alert</code>.
</td>
</tr>
<tr>
<td>
<code>reason:mention</code>
</td>
<td>
Filter by reason the notification was triggered. Also accepts:
<code>comment</code>,
<code>author</code>,
<code>state_change</code>,
<code>assign</code>,
<code>subscribed</code>,
<code>team_mention</code>,
<code>security_alert</code>.
</td>
</tr>
<tr>
<td>
<code>starred:true</code>
</td>
<td>Search notifications that you've starred. Also accepts false for the inverse.</td>
</tr>
<tr>
<td>
<code>archived:true</code>
</td>
<td>Search notifications that you've archived. Also accepts false for the inverse.</td>
</tr>
<tr>
<td>
<code>unread:true</code>
</td>
<td>Search unread notifications. Also accepts false for the inverse.</td>
</tr>
<% if display_subject? %>
<tr>
<td>
<code>state:open</code>
</td>
<td>
Filter by notifications from issues or pull requests that are open.
Also accepts <code>closed</code> and <code>merged</code>.
</td>
</tr>
<tr>
<td>
<code>label:bug</code>
</td>
<td>Filter by notifications from issues or pull requests with the label of '<code>bug</code>'.</td>
</tr>
<tr>
<td>
<code>author:andrew</code>
</td>
<td>Filter by notifications from issue or pull requests that were created by '<code>andrew</code>'.</td>
</tr>
<tr>
<td>
<code>unlabelled:true</code>
</td>
<td>Search notifications that don't have any labels.</td>
</tr>
<tr>
<td>
<code>bot:true</code>
</td>
<td>Search notifications generated by GitHub apps or bot users (name ends in '<code>-bot</code>').</td>
</tr>
<tr>
<td>
<code>private:true</code>
</td>
<td>Search notifications from private repositories. Also accepts false for the inverse.</td>
</tr>
<% end %>
</tbody>
</table>
<%= render 'shared/search_prefixes' %>
</div>
</div>
</div>

Просмотреть файл

@ -0,0 +1,230 @@
<div class='flex-content'>
<div class="flex-sidebar">
<div class="flex-container">
<div id='sidebar' class="list-group list-group-flush flex-column pt-5">
<a class='list-group-item list-group-item-action' href='#documentation'>Documentation</a>
<a class='list-group-item list-group-item-action' href='#accessing'>Accessing Octobox</a>
<a class='list-group-item list-group-item-action' href='#using'>Using Octobox</a>
<a class='list-group-item list-group-item-action' href='#navigating'>Navigating Octobox</a>
<a class='list-group-item list-group-item-action' href='#searching'>Searching Octobox</a>
<a class='list-group-item list-group-item-action' href='#api'>API Documentation</a>
<a class='list-group-item list-group-item-action' href='#support'>Support</a>
</div>
</div>
</div>
<div class="flex-main">
<div class='d-lg-none sticky-top w-100 p-3'>
<button type="button" class="btn btn-sm btn-outline-dark" data-toggle="offcanvas" aria-label='Toggle sidebar'>
<%= octicon 'three-bars', :height => 16 %>
</button>
</div>
<div class="flex-container text-content">
<h1 id='documentation' class="text-left">Documentation</h1>
<hr>
<p>
Octobox helps you triage notifications efficiently so you can spend less time managing and more time getting things done.
</p>
<p>
If you manage more than one active project on GitHub, you probably find <a href="https://github.com/notifications">GitHub Notifications</a> pretty lacking. Notifications are marked as read and disappear from the list as soon as you load the page or view the email of the notification. This makes it very hard to keep on top of which notifications you still need to follow up on. Most open source maintainers (and some GitHub staff) end up using a complex combination of filters and labels in their mail client to manage their notifications from their inbox. If, like us, you try to avoid email, then Octobox is for you.
</p>
<h2 id='accessing'>Accessing Octobox</h2>
<hr>
<% if Octobox.config.octobox_io %>
<p>
This instance of Octobox is hosted by the Octobox.io team. To access Octobox.io you just need to sign in with your GitHub profile or install the GitHub app on the <%= link_to 'homepage', root_path %>.
</p>
<h3>Signing in with GitHub</h3>
<p>
This will give you access to basic notification information for public <i>and</i> private repositories using GitHub's <code>notification</code> scope. <% if Octobox.config.app_install_url %> To access more detailed information you need to install the Octobox.io GitHub App. <% end %>
</p>
<% if Octobox.config.app_install_url %>
<h3>Installing the GitHub App</h3>
<p>
To access more detailed information about your notifications (assignees, labels, conversations threads etc) Octobox.io needs more privileged access to your repositories. To enable this you need to install our GitHub App for your personal or organisation's account. Access to public repositories on Octobox.io is free forever, access to private repositories is a paid-for service.
</p>
<h3>Paying for private repository access</h3>
<p>
There are two ways to pay for private repo access on Octobox.io:
</p>
<ul>
<li>
By making a donation of X or more each month to the Octobox community through <a href="https://opencollective.com/octobox">Open Collective</a>
</li>
<li>
By paying X per Y through the GitHub Marketplace, which is charged monthly to your GitHub account.
</li>
</ul>
<p>
This may seem a little strange, but bear with us: As a social experiment in open source sustainability we are asking you to make a choice between supporting the community of maintainers and contributors, or supporting the commercial entity that operates Octobox.io. The service you'll receive will be <i>exactly the same</i> regardless of the way you pay. You can read more about why we think this is important <a href='#todo'>over on our blog</a>.
</p>
<% end %>
<h3>Host your own Octobox</h3>
<p>
Alternatively you can host your own instance of Octobox. See <a href='#https://github.com/octobox/octobox/blob/master/docs/INSTALLATION.md'>the installation guide</a> for instructions and details regarding deployment to Heroku, Docker, and more.
</p>
<% end %>
<% unless Octobox.config.octobox_io %>
<p>
By default Octobox uses GitHub's basic OAuth <code>'notifications'</code> scope to access your notifications. This provides Octobox with access to notifications from both public <i>and</i> private repositories, but it provides very little detail about those notifications.
</p>
<p>
In order to access more detailed information about your notifications Octobox needs to enable the <code>repo</code> scope on GitHub. You can do this by:
</p>
<ul>
<li><a href='https://github.com/octobox/octobox/blob/master/docs/INSTALLATION.md#using-personal-access-tokens'>Using a personal access token</a></li>
<li><a href='https://github.com/octobox/octobox/blob/master/docs/INSTALLATION.md#customizing-the-scopes-on-github'>Customising the GitHub scope environment variable</a></li>
</ul>
<% end %>
<h2 id='using'>Using Octobox</h2>
<hr>
<p>
Octobox helps you triage notifications from GitHub. If you use GitHub's own notifications dashboard you'll be familiar with some of the interface, actions etc. but there are some important differences:
</p>
<h3>Archiving</h3>
<p>
Octobox extends GitHub's notification model by providing an additional 'archived' status, much like Gmail's email client. Archived notifications will not appear in your inbox again unless the thread, issue or PR receives a new notification. Archiving a notification does not result in any action on GitHub.
</p>
<h3>Starring</h3>
<p>
Octobox also adds a starred status to help you highlight important notifications with a star so you can come back and find them easily. Starred notifications are not social, they are more like bookmarks that GitHub stars. Starring a notification does not result in any action on GitHub.
</p>
<h3>Muting</h3>
<p>
Muting a notification will mark the notification as read, move it to the archive <i>and</i> ignore all further notifications from this thread, issue or PR. Muting also sets the thread to <code>ignore:true</code> ignoring further notifications on GitHub too.
</p>
<h3>Syncing</h3>
<p>
By default Octobox will synchronise every time you hit the synchronise button.
<% if Octobox.config.minimum_refresh_interval %>
You can set automatic refresh interval on the <%= link_to 'settings page', settings_path %>.
<% end %>
</p>
<h2>Shortcuts</h2>
<hr>
<p>
Octobox features a full set of keyboard shortcuts inspired by Gmail:
</p>
<%= render 'shared/keyboard_mappings' %>
<h2 id='navigating'>Navigating Octobox</h2>
<hr>
<p>
The sidebar contains most of the things you'll need to navigate between views in Octobox:
</p>
<table class='table'>
<tr>
<td>Archived</td>
<td>Notifications that you've archived won't appear in your inbox again until Octobox receives another notification regarding that thread, issue or PR.</td>
</tr>
<tr>
<td>
Starred
</td>
<td>
Notifications that you've starred are gathered together so you can come back and find them easily.
</td>
</tr>
<tr>
<td>
Read/unread
</td>
<td>
Notifications that have yet to be read or have been read, respectively. Nothing new here.
</td>
</tr>
<tr>
<td>
State
</td>
<td>
<%= repo_scope_modal %> The state of the underlying issue or PR. i.e. open, closed, merged,
</td>
</tr>
<tr>
<td>
Assignee
</td>
<td>
<%= repo_scope_modal %> Notifications assigned to you.
</td>
</tr>
<tr>
<td>
Bots
</td>
<td>
<%= repo_scope_modal %> Notifications created by bots.
</td>
</tr>
<tr>
<td>
Unlabelled
</td>
<td>
<%= repo_scope_modal %> Notifications that have not been labeled.
</td>
</tr>
<tr>
<td>
Type
</td>
<td>
Notifications by type (commit, issue, pull request, release, etc)
</td>
</tr>
<tr>
<td>
Reason
</td>
<td>
Notifications by the reason you've received it (assigned, authored, commented, mentioned, review requested, state changed or subscribed).
</td>
</tr>
<tr>
<td>
Visibility
</td>
<td>
<%= repo_scope_modal %> Notifications from public or private repositories.
</td>
</tr>
<tr>
<td>
Org/repo
</td>
<td>
Notifications from a particular organisation and/or repo.
</td>
</tr>
</table>
<h2 id='searching'>Searching Octobox</h2>
<hr>
<p>
Octobox's search bar supports the following filter prefixes. Combine them together and with free text searches, for example: <code>"github enterprise type:issue owner:octobox reason:assign"</code>:
</p>
<%= render 'shared/search_prefixes' %>
<h2 id='api'>API Documentation</h2>
<hr>
<p>
Access to the <a href='/docs'>Octobox API</a> requires a key which you can generate and regenerate from the <%= link_to 'settings page', settings_path %>.
</p>
<h2 id='support'>Support</h2>
<hr>
<p>
Octobox.io is a small community of people supporting the service. We do not offer formal support processes. If you require formal support arrangements please <a href='mailto:support@octobox.io'>email us</a> otherwise you can try:
</p>
<ul>
<li>Filing an issue in our <a href='https://github.com/octobox/octobox.io/issues/new'>bug tracker</a> following the template provided.</li>
<li>Asking for help in our <a href='https://gitter.im/octobox/octobox'>public chat room</a>.</li>
<li>Email us at <%= mail_to 'support@octobox.io' %>.</li>
<li>Tweet us at <%= link_to '@octoboxio', 'https://twitter.com/octoboxio' %>.</li>
</ul>
</div>
<%= render 'layouts/footer'%>
</div>
</div>
<%= render 'shared/repo_scope_modal' %>

Просмотреть файл

@ -0,0 +1,101 @@
<table class="keyboard-mappings">
<tbody>
<tr>
<td class="keys">
<div class="key">.</div> or <div class="key">r</div>
</td>
<td>
Refresh
</td>
</tr>
<tr>
<td class="keys">
<div class="key">j</div>
</td>
<td>
Move down the list
</td>
</tr>
<tr>
<td class="keys">
<div class="key">k</div>
</td>
<td>
Move up the list
</td>
</tr>
<tr>
<td class="keys">
<div class="key">s</div>
</td>
<td>
Star current notification
</td>
</tr>
<tr>
<td class="keys">
<div class="key">x</div>
</td>
<td>
Mark current notification
</td>
</tr>
<tr>
<td class="keys">
<div class="key">a</div>
</td>
<td>
Select/deselect all
</td>
</tr>
<tr>
<td class="keys">
<div class="key">y</div> or <div class="key">e</div>
</td>
<td>
Archive current/marked notification(s)
</td>
</tr>
<tr>
<tr>
<td class="keys">
<div class="key">m</div>
</td>
<td>
Mute current/marked notification(s)
</td>
</tr>
<tr>
<td class="keys">
<div class="key">d</div>
</td>
<td>
Mark current/marked notification(s) as read here and on GitHub
</td>
</tr>
<tr>
<td class="keys">
<div class="key">o</div> or <div class="key">Enter</div>
</td>
<td>
Open current notification in a new window
</td>
</tr>
<tr>
<td class="keys">
<div class="key">?</div>
</td>
<td>
Show this help menu
</td>
</tr>
<tr>
<td class="keys">
<div class="key">esc</div>
</td>
<td>
Close modal OR Clear applied filters
</td>
</tr>
</tbody>
</table>

Просмотреть файл

@ -0,0 +1,22 @@
<% unless Octobox.config.fetch_subject || personal_access_tokens_enabled %>
<div id="repo-scope" class="modal" role="dialog">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Repository scope required</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<p>
This feature requires additional permissions.
<% if Octobox.config.octobox_io %>
We're working to enable them for Octobox.io soon.
<% else %>
See the <%= link_to 'documentation', documentation_path(anchor: 'accessing') %> for how to enable them.
<% end %>
</p>
</div>
</div>
</div>
</div>
<% end %>

Просмотреть файл

@ -0,0 +1,104 @@
<table class="table">
<tbody>
<tr>
<td>
<code>repo:octobox/octobox</code>
</td>
<td>Only search notifications from the octobox/octobox repository.</td>
</tr>
<tr>
<td>
<code>owner:microsoft</code>
</td>
<td>Only search notifications from repos in the microsoft organisation.</td>
</tr>
<tr>
<td>
<code>type:pull_request</code>
</td>
<td>
Only search pull requests. Also accepts:
<code>issue</code>,
<code>release</code>,
<code>commit</code>,
<code>repository_invitation</code>
and <code>repository_vulnerability_alert</code>.
</td>
</tr>
<tr>
<td>
<code>reason:mention</code>
</td>
<td>
Filter by reason the notification was triggered. Also accepts:
<code>comment</code>,
<code>author</code>,
<code>state_change</code>,
<code>assign</code>,
<code>subscribed</code>,
<code>team_mention</code>,
<code>security_alert</code>.
</td>
</tr>
<tr>
<td>
<code>starred:true</code>
</td>
<td>Search notifications that you've starred. Also accepts false for the inverse.</td>
</tr>
<tr>
<td>
<code>archived:true</code>
</td>
<td>Search notifications that you've archived. Also accepts false for the inverse.</td>
</tr>
<tr>
<td>
<code>unread:true</code>
</td>
<td>Search unread notifications. Also accepts false for the inverse.</td>
</tr>
<% if display_subject? %>
<tr>
<td>
<code>state:open</code>
</td>
<td>
Filter by notifications from issues or pull requests that are open.
Also accepts <code>closed</code> and <code>merged</code>.
</td>
</tr>
<tr>
<td>
<code>label:bug</code>
</td>
<td>Filter by notifications from issues or pull requests with the label of '<code>bug</code>'.</td>
</tr>
<tr>
<td>
<code>author:andrew</code>
</td>
<td>Filter by notifications from issue or pull requests that were created by '<code>andrew</code>'.</td>
</tr>
<tr>
<td>
<code>unlabelled:true</code>
</td>
<td>Search notifications that don't have any labels.</td>
</tr>
<tr>
<td>
<code>bot:true</code>
</td>
<td>Search notifications generated by GitHub apps or bot users (name ends in '<code>-bot</code>').</td>
</tr>
<tr>
<td>
<code>private:true</code>
</td>
<td>Search notifications from private repositories. Also accepts false for the inverse.</td>
</tr>
<% end %>
</tbody>
</table>

Просмотреть файл

@ -42,6 +42,9 @@ Rails.application.routes.draw do
end
end
get '/documentation', to: 'pages#documentation'
get '/support', to: redirect('/documentation#support')
post '/hooks/github', to: 'hooks#create'
if Octobox.config.octobox_io

Просмотреть файл

@ -142,6 +142,10 @@ module Octobox
@redis_url = ENV.fetch("REDIS_URL", "redis://localhost:6379")
end
def app_install_url
@app_install_url || ENV['APP_INSTALL_URL'].present?
end
def github_admin_ids
return @github_admin_ids if defined?(@github_admin_ids)
admin_github_ids = ENV.fetch("ADMIN_GITHUB_IDS", "").to_s