45 -- Add API Documentation

Motivation:

Users need a quick reference available online that is up to date.

Modifications:

Add CI job to generate and publish API docs with Jazzy

Result:

Users can view API docs that are updated when new releases are tagged at https://mordil.gitlab.io/swift-redis-nio-client
This commit is contained in:
Nathan Harris
2019-06-06 16:50:04 -07:00
parent 6f6fe74c92
commit dd839fdf02
20 changed files with 2762 additions and 3 deletions
+22 -3
View File
@@ -8,9 +8,28 @@ pages:
only:
- tags
tags:
- private-xcode
script:
- "echo 'TODO #45 -- Publish API Docs'"
- private-macOS
script: |
version=$(git describe --abbrev=0 --tags || echo "0.0.0")
swift build
sourcekitten doc --spm-module "RedisNIO" > ./RedisNIO.json
swift package generate-xcodeproj
jazzy --clean \
--author "Nathan Harris (Mordil)" \
--readme "./README.md" \
--author_url "https://mordil.info" \
--github_url "https://gitlab.com/mordil/swift-redis-nio-client" \
--github-file-prefix https://gitlab.com/mordil/swift-redis-nio-client/blob/$version \
--root-url "https://mordil.gitlab.io/swift-redis-nio-client/docs/RedisNIO" \
--module "RedisNIO" \
--module-version "$version" \
--theme fullwidth \
--xcodebuild-arguments -scheme,swift-redis-nio-client-Package \
--sourcekitten-sourcefile "./RedisNIO.json" \
--output "./public"
artifacts:
paths:
- public
.build:
stage: build release
+63
View File
@@ -0,0 +1,63 @@
/* Credit to https://gist.github.com/wataru420/2048287 */
.highlight {
.c { color: #999988; font-style: italic } /* Comment */
.err { color: #a61717; background-color: #e3d2d2 } /* Error */
.k { color: #000000; font-weight: bold } /* Keyword */
.o { color: #000000; font-weight: bold } /* Operator */
.cm { color: #999988; font-style: italic } /* Comment.Multiline */
.cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.c1 { color: #999988; font-style: italic } /* Comment.Single */
.cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.ge { color: #000000; font-style: italic } /* Generic.Emph */
.gr { color: #aa0000 } /* Generic.Error */
.gh { color: #999999 } /* Generic.Heading */
.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.go { color: #888888 } /* Generic.Output */
.gp { color: #555555 } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #aaaaaa } /* Generic.Subheading */
.gt { color: #aa0000 } /* Generic.Traceback */
.kc { color: #000000; font-weight: bold } /* Keyword.Constant */
.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #445588; } /* Keyword.Type */
.m { color: #009999 } /* Literal.Number */
.s { color: #d14 } /* Literal.String */
.na { color: #008080 } /* Name.Attribute */
.nb { color: #0086B3 } /* Name.Builtin */
.nc { color: #445588; font-weight: bold } /* Name.Class */
.no { color: #008080 } /* Name.Constant */
.ni { color: #800080 } /* Name.Entity */
.ne { color: #990000; font-weight: bold } /* Name.Exception */
.nf { color: #990000; } /* Name.Function */
.nn { color: #555555 } /* Name.Namespace */
.nt { color: #000080 } /* Name.Tag */
.nv { color: #008080 } /* Name.Variable */
.ow { color: #000000; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mf { color: #009999 } /* Literal.Number.Float */
.mh { color: #009999 } /* Literal.Number.Hex */
.mi { color: #009999 } /* Literal.Number.Integer */
.mo { color: #009999 } /* Literal.Number.Oct */
.sb { color: #d14 } /* Literal.String.Backtick */
.sc { color: #d14 } /* Literal.String.Char */
.sd { color: #d14 } /* Literal.String.Doc */
.s2 { color: #d14 } /* Literal.String.Double */
.se { color: #d14 } /* Literal.String.Escape */
.sh { color: #d14 } /* Literal.String.Heredoc */
.si { color: #d14 } /* Literal.String.Interpol */
.sx { color: #d14 } /* Literal.String.Other */
.sr { color: #009926 } /* Literal.String.Regex */
.s1 { color: #d14 } /* Literal.String.Single */
.ss { color: #990073 } /* Literal.String.Symbol */
.bp { color: #999999 } /* Name.Builtin.Pseudo */
.vc { color: #008080 } /* Name.Variable.Class */
.vg { color: #008080 } /* Name.Variable.Global */
.vi { color: #008080 } /* Name.Variable.Instance */
.il { color: #009999 } /* Literal.Number.Integer.Long */
}
+621
View File
@@ -0,0 +1,621 @@
// ===========================================================================
//
// Variables
//
// ===========================================================================
$body_background: #fff;
$body_font: 16px/1.7 'Helvetica Neue', Helvetica, Arial, sans-serif;
$text_color: #333;
$gray_border: 1px solid #ddd;
$heading_weight: 700;
$light_heading_color: #777;
$quote_color: #858585;
$quote_border: 4px solid #e5e5e5;
$link_color: #4183c4;
$table_alt_row_color: #fbfbfb;
$table_border_color: #ddd;
$code_bg_color: #f7f7f7;
$code_font: Consolas, "Liberation Mono", Menlo, Courier, monospace;
// ----- Layout
$gutter: 16px;
$navigation_max_width: 300px;
// ----- Header
$header_bg_color: #444;
$header_link_color: #fff;
$doc_coverage_color: #999;
// ----- Breadcrumbs
$breadcrumbs_bg_color: #fbfbfb;
$breadcrumbs_border_color: #ddd;
// ----- Navigation
$navigation_max_width: 300px;
$navigation_bg_color: #fbfbfb;
$navigation_border_color: #ddd;
$navigation_title_color: #333;
$navigation_task_color: #808080;
// ----- Content
$declaration_title_language_color: #4183c4;
$declaration_language_border: 5px solid #cde9f4;
$declaration_bg_color: #fff;
$declaration_border_color: #ddd;
$aside_color: #aaa;
$aside_border: 5px solid lighten($aside_color, 20%);
$aside_warning_color: #ff0000;
$aside_warning_border: 5px solid lighten($aside_warning_color, 20%);
// ----- Footer
$footer_bg_color: #444;
$footer_text_color: #ddd;
$footer_link_color: #fff;
// ===========================================================================
//
// Base
//
// ===========================================================================
*, *:before, *:after {
box-sizing: inherit;
}
body {
margin: 0;
background: $body_background;
color: $text_color;
font: $body_font;
letter-spacing: .2px;
-webkit-font-smoothing: antialiased;
box-sizing: border-box;
}
// ----- Block elements
@mixin heading($font-size: 1rem, $margin: 1.275em 0 0.85em) {
font-size: $font-size;
font-weight: $heading_weight;
margin: $margin;
}
h1 {
@include heading(2rem, 1.275em 0 0.6em);
}
h2 {
@include heading(1.75rem, 1.275em 0 0.3em);
}
h3 {
@include heading(1.5rem, 1em 0 0.3em);
}
h4 {
@include heading(1.25rem);
}
h5 {
@include heading;
}
h6 {
@include heading;
color: $light_heading_color;
}
p {
margin: 0 0 1em;
}
ul, ol {
padding: 0 0 0 2em;
margin: 0 0 0.85em;
}
blockquote {
margin: 0 0 0.85em;
padding: 0 15px;
color: $quote_color;
border-left: $quote_border;
}
// ----- Inline elements
img {
max-width: 100%;
}
a {
color: $link_color;
text-decoration: none;
&:hover, &:focus {
outline: 0;
text-decoration: underline;
}
&.discouraged {
text-decoration: line-through;
&:hover, &:focus {
text-decoration: underline line-through;
}
}
}
// ----- Tables
table {
background: $body_background;
width: 100%;
border-collapse: collapse;
border-spacing: 0;
overflow: auto;
margin: 0 0 0.85em;
}
tr {
&:nth-child(2n) {
background-color: $table_alt_row_color;
}
}
th, td {
padding: 6px 13px;
border: 1px solid $table_border_color;
}
// ----- Code
pre {
margin: 0 0 1.275em;
padding: .85em 1em;
overflow: auto;
background: $code_bg_color;
font-size: .85em;
font-family: $code_font;
}
code {
font-family: $code_font;
}
p, li {
> code {
background: $code_bg_color;
padding: .2em;
&:before, &:after {
letter-spacing: -.2em;
content: "\00a0";
}
}
}
pre code {
padding: 0;
white-space: pre;
}
// ===========================================================================
//
// Layout
//
// ===========================================================================
.content-wrapper {
display: flex;
flex-direction: column;
@media (min-width: 768px) {
flex-direction: row;
}
}
// ===========================================================================
//
// Header
//
// ===========================================================================
.header {
display: flex;
padding: $gutter/2;
font-size: 0.875em;
background: $header_bg_color;
color: $doc_coverage_color;
}
.header-col {
margin: 0;
padding: 0 $gutter/2
}
.header-col--primary {
flex: 1;
}
.header-link {
color: $header_link_color;
}
.header-icon {
padding-right: 6px;
vertical-align: -4px;
height: 16px;
}
// ===========================================================================
//
// Breadcrumbs
//
// ===========================================================================
.breadcrumbs {
font-size: 0.875em;
padding: $gutter / 2 $gutter;
margin: 0;
background: $breadcrumbs_bg_color;
border-bottom: 1px solid $breadcrumbs_border_color;
}
.carat {
height: 10px;
margin: 0 5px;
}
// ===========================================================================
//
// Navigation
//
// ===========================================================================
.navigation {
order: 2;
@media (min-width: 768px) {
order: 1;
width: 25%;
max-width: $navigation_max_width;
padding-bottom: $gutter*4;
overflow: hidden;
word-wrap: normal;
background: $navigation_bg_color;
border-right: 1px solid $navigation_border_color;
}
}
.nav-groups {
list-style-type: none;
padding-left: 0;
}
.nav-group-name {
border-bottom: 1px solid $navigation_border_color;
padding: $gutter/2 0 $gutter/2 $gutter;
}
.nav-group-name-link {
color: $navigation_title_color;
}
.nav-group-tasks {
margin: $gutter/2 0;
padding: 0 0 0 $gutter/2;
}
.nav-group-task {
font-size: 1em;
list-style-type: none;
white-space: nowrap;
}
.nav-group-task-link {
color: $navigation_task_color;
}
// ===========================================================================
//
// Content
//
// ===========================================================================
.main-content {
order: 1;
@media (min-width: 768px) {
order: 2;
flex: 1;
padding-bottom: 60px;
}
}
.section {
padding: 0 $gutter * 2;
border-bottom: 1px solid $navigation_border_color;
}
.section-content {
max-width: 834px;
margin: 0 auto;
padding: $gutter 0;
}
.section-name {
color: #666;
display: block;
}
.declaration .highlight {
overflow-x: initial; // This allows the scrollbar to show up inside declarations
padding: $gutter/2 0;
margin: 0;
background-color: transparent;
border: none;
}
.task-group-section {
border-top: $gray_border;
}
.task-group {
padding-top: 0px;
}
.task-name-container {
a[name] {
&:before {
content: "";
display: block;
}
}
}
.item-container {
padding: 0;
}
.item {
padding-top: 8px;
width: 100%;
list-style-type: none;
a[name] {
&:before {
content: "";
display: block;
}
}
.token, .direct-link {
padding-left: 3px;
margin-left: 0px;
font-size: 1rem;
}
.declaration-note {
font-size: .85em;
color: #808080;
font-style: italic;
}
}
.pointer-container {
border-bottom: $gray_border;
left: -23px;
padding-bottom: 13px;
position: relative;
width: 110%;
}
.pointer {
left: 21px;
top: 7px;
display: block;
position: absolute;
width: 12px;
height: 12px;
border-left: 1px solid $declaration_border_color;
border-top: 1px solid $declaration_border_color;
background: $declaration_bg_color;
transform: rotate(45deg);
}
.height-container {
display: none;
position: relative;
width: 100%;
overflow: hidden;
.section {
background: $declaration_bg_color;
border: $gray_border;
border-top-width: 0;
padding-top: 10px;
padding-bottom: 5px;
padding: $gutter / 2 $gutter;
}
}
.aside, .language {
padding: 6px 12px;
margin: 12px 0;
border-left: $aside_border;
overflow-y: hidden;
.aside-title {
font-size: 9px;
letter-spacing: 2px;
text-transform: uppercase;
padding-bottom: 0;
margin: 0;
color: $aside_color;
-webkit-user-select: none;
}
p:last-child {
margin-bottom: 0;
}
}
.language {
border-left: $declaration_language_border;
.aside-title {
color: $declaration_title_language_color;
}
}
.aside-warning, .aside-deprecated, .aside-unavailable {
border-left: $aside_warning_border;
.aside-title {
color: $aside_warning_color;
}
}
.graybox {
border-collapse: collapse;
width: 100%;
p {
margin: 0;
word-break: break-word;
min-width: 50px;
}
td {
border: $gray_border;
padding: 5px 25px 5px 10px;
vertical-align: middle;
}
tr td:first-of-type {
text-align: right;
padding: 7px;
vertical-align: top;
word-break: normal;
width: 40px;
}
}
.slightly-smaller {
font-size: 0.9em;
}
// ===========================================================================
//
// Footer
//
// ===========================================================================
.footer {
padding: $gutter/2 $gutter;
background: $footer_bg_color;
color: $footer_text_color;
font-size: 0.8em;
p {
margin: $gutter/2 0;
}
a {
color: $footer_link_color;
}
}
// ===========================================================================
//
// Dash
//
// ===========================================================================
html.dash {
.header, .breadcrumbs, .navigation {
display: none;
}
.height-container {
display: block;
}
}
// ===========================================================================
//
// Search
//
// ===========================================================================
form[role=search] {
input {
font: $body_font;
font-size: 14px;
line-height: 24px;
padding: 0 10px;
margin: 0;
border: none;
border-radius: 1em;
.loading & {
background: white url(../img/spinner.gif) center right 4px no-repeat;
}
}
// Typeahead elements
.tt-menu {
margin: 0;
min-width: 300px;
background: $navigation_bg_color;
color: $text_color;
border: 1px solid $navigation_border_color;
}
.tt-highlight {
font-weight: bold;
}
.tt-suggestion {
font: $body_font;
padding: 0 $gutter/2;
span {
display: table-cell;
white-space: nowrap;
}
.doc-parent-name {
width: 100%;
text-align: right;
font-weight: normal;
font-size: 0.9em;
padding-left: $gutter;
}
}
.tt-suggestion:hover,
.tt-suggestion.tt-cursor {
cursor: pointer;
background-color: $link_color;
color: #fff;
}
.tt-suggestion:hover .doc-parent-name,
.tt-suggestion.tt-cursor .doc-parent-name {
color: #fff;
}
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

+59
View File
@@ -0,0 +1,59 @@
window.jazzy = {'docset': false}
if (typeof window.dash != 'undefined') {
document.documentElement.className += ' dash'
window.jazzy.docset = true
}
if (navigator.userAgent.match(/xcode/i)) {
document.documentElement.className += ' xcode'
window.jazzy.docset = true
}
function toggleItem($link, $content) {
var animationDuration = 300;
$link.toggleClass('token-open');
$content.slideToggle(animationDuration);
}
function itemLinkToContent($link) {
return $link.parent().parent().next();
}
// On doc load + hash-change, open any targetted item
function openCurrentItemIfClosed() {
if (window.jazzy.docset) {
return;
}
var $link = $(`.token[href="${location.hash}"]`);
$content = itemLinkToContent($link);
if ($content.is(':hidden')) {
toggleItem($link, $content);
}
}
$(openCurrentItemIfClosed);
$(window).on('hashchange', openCurrentItemIfClosed);
// On item link ('token') click, toggle its discussion
$('.token').on('click', function(event) {
if (window.jazzy.docset) {
return;
}
var $link = $(this);
toggleItem($link, itemLinkToContent($link));
// Keeps the document from jumping to the hash.
var href = $link.attr('href');
if (history.pushState) {
history.pushState({}, '', href);
} else {
location.hash = href;
}
event.preventDefault();
});
// Clicks on links to the current, closed, item need to open the item
$("a:not('.token')").on('click', function() {
if (location == this.href) {
openCurrentItemIfClosed();
}
});
+70
View File
@@ -0,0 +1,70 @@
$(function(){
var $typeahead = $('[data-typeahead]');
var $form = $typeahead.parents('form');
var searchURL = $form.attr('action');
function displayTemplate(result) {
return result.name;
}
function suggestionTemplate(result) {
var t = '<div class="list-group-item clearfix">';
t += '<span class="doc-name">' + result.name + '</span>';
if (result.parent_name) {
t += '<span class="doc-parent-name label">' + result.parent_name + '</span>';
}
t += '</div>';
return t;
}
$typeahead.one('focus', function() {
$form.addClass('loading');
$.getJSON(searchURL).then(function(searchData) {
const searchIndex = lunr(function() {
this.ref('url');
this.field('name');
this.field('abstract');
for (const [url, doc] of Object.entries(searchData)) {
this.add({url: url, name: doc.name, abstract: doc.abstract});
}
});
$typeahead.typeahead(
{
highlight: true,
minLength: 3,
autoselect: true
},
{
limit: 10,
display: displayTemplate,
templates: { suggestion: suggestionTemplate },
source: function(query, sync) {
const lcSearch = query.toLowerCase();
const results = searchIndex.query(function(q) {
q.term(lcSearch, { boost: 100 });
q.term(lcSearch, {
boost: 10,
wildcard: lunr.Query.wildcard.TRAILING
});
}).map(function(result) {
var doc = searchData[result.ref];
doc.url = result.ref;
return doc;
});
sync(results);
}
}
);
$form.removeClass('loading');
$typeahead.trigger('focus');
});
});
var baseURL = searchURL.slice(0, -"search.json".length);
$typeahead.on('typeahead:select', function(e, result) {
window.location = baseURL + result.url;
});
});
+2
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+12
View File
@@ -0,0 +1,12 @@
{{#deprecation_message}}
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
{{{deprecation_message}}}
</div>
{{/deprecation_message}}
{{#unavailable_message}}
<div class="aside aside-unavailable">
<p class="aside-title">Unavailable</p>
{{{unavailable_message}}}
</div>
{{/unavailable_message}}
+59
View File
@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{name}} {{kind}} Reference</title>
<link rel="stylesheet" type="text/css" href="{{path_to_root}}css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="{{path_to_root}}css/highlight.css" />
<meta charset="utf-8">
<script src="{{path_to_root}}js/jquery.min.js" defer></script>
<script src="{{path_to_root}}js/jazzy.js" defer></script>
{{{custom_head}}}
{{^disable_search}}
<script src="{{path_to_root}}js/lunr.min.js" defer></script>
<script src="{{path_to_root}}js/typeahead.jquery.js" defer></script>
<script src="{{path_to_root}}js/jazzy.search.js" defer></script>
{{/disable_search}}
</head>
<body>
{{#dash_type}}
<a name="//apple_ref/{{language_stub}}/{{dash_type}}/{{name}}" class="dashAnchor"></a>
{{/dash_type}}
<a title="{{name}} {{kind}} Reference"></a>
{{> header}}
<p class="breadcrumbs">
<a class="breadcrumb" href="{{path_to_root}}index.html">{{module_name}} Reference</a>
<img class="carat" src="{{path_to_root}}img/carat.png" />
{{name}} {{kind}} Reference
</p>
<div class="content-wrapper">
{{> nav}}
<article class="main-content">
<section class="section">
<div class="section-content">
{{^hide_name}}<h1>{{name}}</h1>{{/hide_name}}
{{> deprecation}}
{{#declaration}}
<div class="declaration">
<div class="language">
{{{declaration}}}
</div>
</div>
{{/declaration}}
{{{overview}}}
</div>
</section>
{{> tasks}}
</article>
</div>
{{> footer}}
</body>
</div>
</html>
+4
View File
@@ -0,0 +1,4 @@
<section class="footer">
{{{copyright}}}
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v{{jazzy_version}}</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
+34
View File
@@ -0,0 +1,34 @@
<header class="header">
<p class="header-col header-col--primary">
<a class="header-link" href="{{path_to_root}}index.html">
{{module_name}} Docs
</a>
{{#doc_coverage}} ({{doc_coverage}}% documented){{/doc_coverage}}
</p>
{{^disable_search}}
<p class="header-col--secondary">
<form role="search" action="{{path_to_root}}search.json">
<input type="text" placeholder="Search documentation" data-typeahead>
</form>
</p>
{{/disable_search}}
{{#github_url}}
<p class="header-col header-col--secondary">
<a class="header-link" href="{{github_url}}">
<img class="header-icon" src="{{path_to_root}}img/gl.png"/>
View on GitLab
</a>
</p>
{{/github_url}}
{{#dash_url}}
<p class="header-col header-col--secondary">
<a class="header-link" href="{{dash_url}}">
<img class="header-icon" src="{{path_to_root}}img/dash.png"/>
Install in Dash
</a>
</p>
{{/dash_url}}
</header>
+16
View File
@@ -0,0 +1,16 @@
<nav class="navigation">
<ul class="nav-groups">
{{#structure}}
<li class="nav-group-name">
<a class="nav-group-name-link" href="{{path_to_root}}{{url}}">{{section}}</a>
<ul class="nav-group-tasks">
{{#children}}
<li class="nav-group-task">
<a class="nav-group-task-link" href="{{path_to_root}}{{url}}">{{name}}</a>
</li>
{{/children}}
</ul>
</li>
{{/structure}}
</ul>
</nav>
+12
View File
@@ -0,0 +1,12 @@
<tr>
<td>
<code>
<em>{{name}}</em>
</code>
</td>
<td>
<div>
{{{discussion}}}
</div>
</td>
</tr>
+104
View File
@@ -0,0 +1,104 @@
<div class="task-group">
{{#name}}
<div class="task-name-container">
<a name="/{{uid}}"></a>
<a name="//apple_ref/{{language_stub}}/Section/{{name}}" class="dashAnchor"></a>
<a href="#/{{uid}}">
<h3 class="section-name">{{name}}</h3>
</a>
</div>
{{/name}}
<ul class="item-container">
{{#items}}
<li class="item">
<div>
<code>
<a name="/{{usr}}"></a>
<a name="//apple_ref/{{language_stub}}/{{dash_type}}/{{name}}" class="dashAnchor"></a>
{{#direct_link}}
<a class="direct-link" href="{{url}}">{{name}}</a>
</code>
{{/direct_link}}
{{^direct_link}}
{{^usage_discouraged}}
<a class="token" href="#/{{usr}}">{{name}}</a>
{{/usage_discouraged}}
{{#usage_discouraged}}
<a class="token discouraged" href="#/{{usr}}">{{name}}</a>
{{/usage_discouraged}}
</code>
{{#default_impl_abstract}}
<span class="declaration-note">
Default implementation
</span>
{{/default_impl_abstract}}
{{#from_protocol_extension}}
<span class="declaration-note">
Extension method
</span>
{{/from_protocol_extension}}
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
{{> deprecation}}
{{#abstract}}
<div class="abstract">
{{{abstract}}}
{{#url}}
<a href="{{{path_to_root}}}{{{url}}}" class="slightly-smaller">See more</a>
{{/url}}
</div>
{{/abstract}}
{{#default_impl_abstract}}
<h4>Default Implementation</h4>
<div class="default_impl abstract">
{{{default_impl_abstract}}}
</div>
{{/default_impl_abstract}}
{{#declaration}}
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">{{language}}</p>
{{{declaration}}}
</div>
{{#other_language_declaration}}
<div class="language">
<p class="aside-title">Swift</p>
{{{other_language_declaration}}}
</div>
{{/other_language_declaration}}
</div>
{{/declaration}}
{{#parameters.count}}
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
{{#parameters}}
{{> parameter}}
{{/parameters}}
</tbody>
</table>
</div>
{{/parameters.count}}
{{#return}}
<div>
<h4>Return Value</h4>
{{{return}}}
</div>
{{/return}}
{{#github_token_url}}
<div class="slightly-smaller">
<a href="{{{github_token_url}}}">Show on GitHub</a>
</div>
{{/github_token_url}}
</section>
{{/direct_link}}
</div>
</li>
{{/items}}
</ul>
</div>
+9
View File
@@ -0,0 +1,9 @@
{{#tasks.count}}
<section class="section">
<div class="section-content">
{{#tasks}}
{{> task}}
{{/tasks}}
</div>
</section>
{{/tasks.count}}