Label Browsing: better views, tag cloud, more tags

This commit is contained in:
mDuo13
2021-06-03 18:50:30 -07:00
parent d48c3d57a1
commit 366ff1d2d0
65 changed files with 413 additions and 26 deletions

File diff suppressed because one or more lines are too long

View File

@@ -2,6 +2,9 @@
html: fee-voting.html
parent: consensus-network.html
blurb: How validators vote on fees (transaction cost and reserve requirements).
labels:
- Fees
- XRP
---
# Fee Voting

View File

@@ -2,6 +2,9 @@
html: autobridging.html
parent: decentralized-exchange.html
blurb: Autobriding automatically connects order books using XRP as an intermediary when it reduces costs.
labels:
- XRP
- Decentralized Exchange
---
# Auto-Bridging

View File

@@ -2,6 +2,8 @@
html: offers.html
parent: decentralized-exchange.html
blurb: Offers are the XRP Ledger's form of currency trading orders. Understand their lifecycle and properties.
labels:
- Decentralized Exchange
---
# Offers

View File

@@ -2,6 +2,9 @@
html: ticksize.html
parent: decentralized-exchange.html
blurb: Issuers can set custom tick sizes for currencies to reduce churn in order books over miniscule differences in exchange rates.
labels:
- Decentralized Exchange
- Tokens
---
# Tick Size

View File

@@ -2,6 +2,8 @@
html: xrp.html
parent: introduction.html
blurb: Learn about the uses and properties of XRP, the digital asset for payments.
labels:
- XRP
---
# XRP

View File

@@ -2,6 +2,9 @@
html: authorized-trust-lines.html
parent: issued-currencies.html
blurb: Learn about authorized trust lines, which enable a currency issuer to limit who can hold its issued (non-XRP) currencies.
labels:
- Tokens
- Security
---
# Authorized Trust Lines

View File

@@ -2,6 +2,8 @@
html: freezes.html
parent: issued-currencies.html
blurb: Freezes can suspend trading of issued currencies for compliance purposes.
labels:
- Tokens
---
# Freezing Issued Currencies

View File

@@ -2,6 +2,8 @@
html: issued-currencies-overview.html
parent: issued-currencies.html
blurb: Get an overview of issued currencies and their properties in the XRP Ledger.
labels:
- Tokens
---
# Issued Currencies Overview

View File

@@ -2,6 +2,9 @@
html: issuing-and-operational-addresses.html
parent: issued-currencies.html
blurb: Businesses sending transactions on the XRP Ledger automatically should set up separate addresses for different purposes to minimize risk.
labels:
- Tokens
- Security
---
# Issuing and Operational Addresses

View File

@@ -2,6 +2,9 @@
html: paths.html
parent: issued-currencies.html
blurb: Payments of issued currencies must traverse paths of connected users and order books.
labels:
- Payments
- Cross-Currency
---
# Paths

View File

@@ -2,6 +2,9 @@
html: rippling.html
parent: issued-currencies.html
blurb: Rippling is automatic multi-party net settlement of issued currency balances.
labels:
- Tokens
- Cross-Currency
---
# Rippling

View File

@@ -2,6 +2,9 @@
html: transfer-fees.html
parent: issued-currencies.html
blurb: Currency issuers can charge a fee for transferring their issued currencies.
labels:
- Fees
- Tokens
---
# Transfer Fees

View File

@@ -2,6 +2,8 @@
html: trust-lines-and-issuing.html
parent: issued-currencies.html
blurb: Learn about the properties and rationale of trust lines.
labels:
- Tokens
---
# Trust Lines and Issuing

View File

@@ -2,6 +2,8 @@
html: accounts.html
parent: payment-system-basics.html
blurb: Learn about accounts in the XRP Ledger. Accounts can send transactions and hold XRP.
labels:
- Payments
---
# Accounts

View File

@@ -2,6 +2,8 @@
html: depositauth.html
parent: accounts.html
blurb: The DepositAuth setting lets an account block incoming payments by default.
labels:
- Payments
---
# Deposit Authorization

View File

@@ -2,6 +2,8 @@
html: reserves.html
parent: accounts.html
blurb: XRP Ledger accounts require a reserve of XRP to reduce spam in ledger data.
labels:
- Fees
---
# Reserves

View File

@@ -2,6 +2,8 @@
html: fees.html
parent: payment-system-basics.html
blurb: Learn about the types of fees allowed by the XRP Ledger, including neutral fees (payable to no one) that protect the ledger against abuse, as well as fees that users can collect from each other.
labels:
- Fees
---
# Fees (Disambiguation)

View File

@@ -2,6 +2,8 @@
html: transaction-basics.html
parent: payment-system-basics.html
blurb: Transactions are the only way to change the XRP Ledger. Understand what forms they take and how to use them.
labels:
- Payments
---
# Transaction Basics

View File

@@ -2,6 +2,8 @@
html: transaction-cost.html
parent: transaction-basics.html
blurb: The transaction cost is a small amount of XRP destroyed to send a transaction, which protects the ledger from spam. Learn how the transaction cost applies.
labels:
- Fees
---
# Transaction Cost

View File

@@ -2,6 +2,10 @@
html: checks.html
parent: payment-types.html
blurb: Checks let users create deferred payments that can be canceled or cashed by the intended recipients.
labels:
- Payments
- Tokens
- Checks
---
# Checks

View File

@@ -2,6 +2,9 @@
html: cross-currency-payments.html
parent: payment-types.html
blurb: Cross-currency payments atomically deliver a different currency than they send by converting through paths and order books.
labels:
- Cross-Currency
- Payments
---
# Cross-Currency Payments

View File

@@ -2,6 +2,9 @@
html: direct-xrp-payments.html
parent: payment-types.html
blurb: Direct XRP payments are the simplest way to send value in the XRP Ledger.
labels:
- XRP
- Payments
---
# Direct XRP Payments

View File

@@ -2,6 +2,9 @@
html: partial-payments.html
parent: payment-types.html
blurb: Partial payments subtract fees from the amount sent, delivering a flexible amount. Partial payments are useful for returning unwanted payments without incurring additional costs.
labels:
- Tokens
- Security
---
# Partial Payments

View File

@@ -2,6 +2,9 @@
html: payment-channels.html
parent: payment-types.html
blurb: Payment Channels enable fast, asynchronous XRP payments that can be divided into very small increments and settled later.
labels:
- Smart Contracts
- Payment Channels
---
# Payment Channels

View File

@@ -2,6 +2,8 @@
html: currency-formats.html
parent: protocol-reference.html
blurb: Precision and range for currency numbers, plus formats of custom currency codes.
label:
- Tokens
---
# Currency Formats

View File

@@ -2,6 +2,9 @@
html: accountroot.html
parent: ledger-object-types.html
blurb: The settings, XRP balance, and other metadata for one account.
labels:
- Payments
- XRP
---
# AccountRoot
[[Source]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L27 "Source")

View File

@@ -2,6 +2,8 @@
html: check.html
parent: ledger-object-types.html
blurb: A check that can be redeemed for money by its destination.
labels:
- Checks
---
# Check
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170 "Source")

View File

@@ -2,6 +2,8 @@
html: depositpreauth-object.html #depositpreauth.html is taken by the tx type
parent: ledger-object-types.html
blurb: A record of preauthorization for sending payments to an account that requires authorization.
labels:
- Security
---
# DepositPreauth
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L172-L178 "Source")

View File

@@ -2,6 +2,8 @@
html: directorynode.html
parent: ledger-object-types.html
blurb: Contains links to other objects.
labels:
- Decentralized Exchange
---
# DirectoryNode
[[Source]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L44 "Source")
@@ -10,8 +12,8 @@ The `DirectoryNode` object type provides a list of links to other objects in the
There are two kinds of Directories:
* **Owner directories** list other objects owned by an account, such as `RippleState` or `Offer` objects.
* **Offer directories** list the offers available in the distributed exchange. A single Offer directory contains all the offers that have the same exchange rate for the same issued currency.
* **Owner directories** list other objects owned by an account, such as [`RippleState` (trust line)](ripplestate.html) or [`Offer`](offer.html) objects.
* **Offer directories** list the offers available in the [decentralized exchange](decentralized-exchange.html). A single Offer directory contains all the offers that have the same exchange rate for the same issued currency.
## Example {{currentpage.name}} JSON

View File

@@ -2,6 +2,8 @@
html: feesettings.html
parent: ledger-object-types.html
blurb: Singleton object with consensus-approved base transaction cost and reserve requirements.
labels:
- Fees
---
# FeeSettings
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L115-L120 "Source")

View File

@@ -2,6 +2,8 @@
html: offer.html
parent: ledger-object-types.html
blurb: An order to make a currency trade.
labels:
- Decentralized Exchange
---
# Offer
[[Source]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L57 "Source")

View File

@@ -2,6 +2,8 @@
html: paychannel.html
parent: ledger-object-types.html
blurb: A channel for asynchronous XRP payments.
labels:
- Payment Channels
---
# PayChannel
[[Source]](https://github.com/ripple/rippled/blob/c0a0b79d2d483b318ce1d82e526bd53df83a4a2c/src/ripple/protocol/impl/LedgerFormats.cpp#L180-L198 "Source")

View File

@@ -2,6 +2,8 @@
html: ripplestate.html
parent: ledger-object-types.html
blurb: Links two accounts, tracking the balance of one currency between them. The concept of a trust line is an abstraction of this object type.
labels:
- Tokens
---
# RippleState
[[Source]](https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L70 "Source")

View File

@@ -2,6 +2,8 @@
html: signerlist.html
parent: ledger-object-types.html
blurb: A list of addresses for multi-signing transactions.
labels:
- Security
---
# SignerList
[[Source]](https://github.com/ripple/rippled/blob/6d2e3da30696bd10e3bb11a5ff6d45d2c4dae90f/src/ripple/protocol/impl/LedgerFormats.cpp#L127 "Source")

View File

@@ -2,6 +2,8 @@
html: setfee.html
parent: pseudo-transaction-types.html
blurb: Change global reserve and transaction cost settings.
labels:
- Fees
---
# SetFee

View File

@@ -2,6 +2,8 @@
html: checkcancel.html
parent: transaction-types.html
blurb: Cancel a check.
labels:
- Checks
---
# CheckCancel
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CancelCheck.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: checkcash.html
parent: transaction-types.html
blurb: Redeem a check.
labels:
- Checks
---
# CheckCash
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CashCheck.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: checkcreate.html
parent: transaction-types.html
blurb: Create a check.
labels:
- Checks
---
# CheckCreate
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CreateCheck.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: depositpreauth.html
parent: transaction-types.html
blurb: Preauthorizes an account to send payments to this one.
labels:
- Security
---
# DepositPreauth
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/DepositPreauth.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: offercancel.html
parent: transaction-types.html
blurb: Withdraw a currency-exchange order.
labels:
- Decentralized Exchange
---
# OfferCancel

View File

@@ -2,6 +2,8 @@
html: offercreate.html
parent: transaction-types.html
blurb: Submit an order to exchange currency.
labels:
- Decentralized Exchange
---
# OfferCreate

View File

@@ -2,6 +2,11 @@
html: payment.html
parent: transaction-types.html
blurb: Send funds from one account to another.
labels:
- Payments
- XRP
- Cross-Currency
- Tokens
---
# Payment
[[Source]](https://github.com/ripple/rippled/blob/5425a90f160711e46b2c1f1c93d68e5941e4bfb6/src/ripple/app/transactors/Payment.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: paymentchannelclaim.html
parent: transaction-types.html
blurb: Claim money from a payment channel.
labels:
- Payment Channels
---
# PaymentChannelClaim
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: paymentchannelcreate.html
parent: transaction-types.html
blurb: Open a new payment channel.
labels:
- Payment Channels
---
# PaymentChannelCreate
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: paymentchannelfund.html
parent: transaction-types.html
blurb: Add more XRP to a payment channel.
labels:
- Payment Channels
---
# PaymentChannelFund
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: setregularkey.html
parent: transaction-types.html
blurb: Add, remove, or modify an account's regular key pair.
labels:
- Security
---
# SetRegularKey

View File

@@ -2,6 +2,8 @@
html: signerlistset.html
parent: transaction-types.html
blurb: Add, remove, or modify an account's multi-signing list.
labels:
- Security
---
# SignerListSet
[[Source]](https://github.com/ripple/rippled/blob/ef511282709a6a0721b504c6b7703f9de3eecf38/src/ripple/app/tx/impl/SetSignerList.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: trustset.html
parent: transaction-types.html
blurb: Add or modify a trust line.
labels:
- Tokens
---
# TrustSet

View File

@@ -2,6 +2,8 @@
html: wallet_propose.html
parent: key-generation-methods.html
blurb: Generate keys for a new account.
labels:
- Security
---
# wallet_propose
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/WalletPropose.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: account_channels.html
parent: account-methods.html
blurb: Get a list of payment channels where the account is the source of the channel.
labels:
- Payment Channels
---
# account_channels
[[Source]](https://github.com/ripple/rippled/blob/release/src/ripple/rpc/handlers/AccountChannels.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: account_currencies.html
parent: account-methods.html
blurb: Get a list of currencies an account can send or receive.
labels:
- Tokens
---
# account_currencies
[[Source]](https://github.com/ripple/rippled/blob/df966a9ac6dd986585ecccb206aff24452e41a30/src/ripple/rpc/handlers/AccountCurrencies.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: account_info.html
parent: account-methods.html
blurb: Get basic data about an account.
labels:
- XRP
---
# account_info
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountInfo.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: account_lines.html
parent: account-methods.html
blurb: Get info about an account's trust lines.
labels:
- Tokens
---
# account_lines
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountLines.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: account_offers.html
parent: account-methods.html
blurb: Get info about an account's currency exchange offers.
labels:
- Decentralized Exchange
---
# account_offers
[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountOffers.cpp "Source")

View File

@@ -2,6 +2,8 @@
html: open-a-payment-channel-to-enable-an-inter-exchange-network.html
parent: use-payment-channels.html
blurb: As a digital asset exchange, use a payment channel to make more payments faster with fewer fees.
labels:
- Payment Channels
---
# Open a Payment Channel to Enable an Inter-Exchange Network

View File

@@ -2,6 +2,8 @@
html: become-an-xrp-ledger-gateway.html
parent: xrp-ledger-businesses.html
blurb: Gateways are the businesses that link the XRP Ledger to the rest of the world. This tutorial demonstrates how an existing online financial institution can expand to act as a gateway in the the XRP Ledger.
labels:
- Tokens
---
# Become an XRP Ledger Gateway

View File

@@ -2,6 +2,8 @@
html: list-xrp-as-an-exchange.html
parent: xrp-ledger-businesses.html
blurb: Run a digital asset exchange? Follow these steps to add XRP.
labels:
- XRP
---
# List XRP as an Exchange

View File

@@ -3133,12 +3133,86 @@ pages:
- ja
# Landing pages for labels
- name: Checks
html: label-checks.html
parent: by-label.html
landing_for: Checks
template: template-landing-label.html
blurb: All pages relating to the Checks feature.
filters:
- labels
targets:
- en
- ja
- name: Cross-Currency
html: label-cross-currency.html
parent: by-label.html
landing_for: Cross-Currency
template: template-landing-label.html
blurb: Swap different tokens and XRP in payments or the decentralized exchange.
filters:
- labels
targets:
- en
- ja
- name: Decentralized Exchange
html: label-decentralized-exchange.html
parent: by-label.html
landing_for: Decentralized Exchange
template: template-landing-label.html
blurb: Topics relating to the Decentralized Exchange built into the XRP Ledger.
filters:
- labels
targets:
- en
- ja
- name: Escrow
html: label-escrow.html
parent: by-label.html
landing_for: Escrow
template: template-landing-label.html
blurb: All pages relating to the Escrow feature.
filters:
- labels
targets:
- en
- ja
- name: Fees
html: label-fees.html
parent: by-label.html
landing_for: Fees
template: template-landing-label.html
blurb: All about fees and related costs of transacting in the XRP Ledger.
filters:
- labels
targets:
- en
- ja
- name: Payment Channels
html: label-payment-channels.html
parent: by-label.html
landing_for: Payment Channels
template: template-landing-label.html
blurb: Pages relating to the Payment Channels feature, which enables rapid off-ledger payments secured by XRP.
filters:
- labels
targets:
- en
- ja
- name: Payments
html: label-payments.html
parent: by-label.html
landing_for: Payments
template: template-landing-label.html
blurb: About sending payments (of XRP or tokens) in the XRP Ledger.
filters:
- labels
targets:
- en
- ja
@@ -3149,6 +3223,8 @@ pages:
landing_for: Smart Contracts
template: template-landing-label.html
blurb: Build smart contracts using these advanced on-ledger features.
filters:
- labels
targets:
- en
- ja
@@ -3159,6 +3235,32 @@ pages:
landing_for: Security
template: template-landing-label.html
blurb: Protect your digital assets with powerful security.
filters:
- labels
targets:
- en
- ja
- name: Tokens
html: label-tokens.html
parent: by-label.html
landing_for: Tokens
template: template-landing-label.html
blurb: Issue any type of token in the XRP Ledger.
filters:
- labels
targets:
- en
- ja
- name: XRP
html: label-xrp.html
parent: by-label.html
landing_for: XRP
template: template-landing-label.html
blurb: The native digital asset built into the XRP Ledger.
filters:
- labels
targets:
- en
- ja
@@ -3168,6 +3270,9 @@ pages:
parent: docs.html
template: template-all-labels.html
blurb: Browse by topic.
nav_omit: true
filters:
- labels
targets:
- en
- ja

View File

@@ -88,10 +88,6 @@ a.card,
padding-left: 20px;
}
.content .children-display > ul > li {
margin-top: 24px;
}
/* Cards ------------------------------- */
.card {

View File

@@ -5,15 +5,30 @@
padding: 48px 0;
}
.content .children-display li a {
.content .children-display,
.content .curated-links {
> ul > li {
margin-top: 24px;
}
li a {
/* Category landing pages */
font-weight: 700;
font-size: 1.25rem;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
.content .children-display li a:hover {
text-decoration: underline;
.content .children-display > ul > li {
}
.content .label-links {
}

View File

@@ -14,3 +14,39 @@
/* trash icon for removed features */
color: $danger;
}
/* "Topic by Label" browsing ------------------------------------------------ */
.labels-wrap ul::before {
content: "\f02c";
font-family: FontAwesome;
}
.pg-category {
color: $gray-400;
&::after {
content: "\f105"; /* fontawesome angle-right */
font-family: FontAwesome;
padding-left: 5px;
}
}
.tag-cloud {
.size-5 {
font-size: 2.5rem;
}
.size-4 {
font-size: 1.9rem;
}
.size-3 {
font-size: 1.4rem;
}
.size-2 {
font-size: 1.1rem;
}
.size-1 {
font-size: 0.8rem;
}
}

88
tool/filter_labels.py Normal file
View File

@@ -0,0 +1,88 @@
################################################################################
## Label Functions ##
## Author: Rome Reginelli ##
## Copyright: Ripple Labs, Inc. 2021 ##
## License: MIT https://github.com/ripple/xrpl-dev-portal/blob/master/LICENSE ##
## ##
## Functions to find pages with a given label ##
################################################################################
from collections import Counter
def children_with_label(pages, parent, label):
"""
pages: list(Page)
parent: Page
label: str
returns: list(Page)
Filter for pages that are children of the given parent and tagged with the
given label.
"""
return [page for page in pages
if parent["is_ancestor_of"](page["html"])
and label in page.get("labels", [])]
def all_with_label(pages, label):
"""
pages: list(Page)
label: str
returns: list(Page)
Filter for pages that are tagged with the given label.
"""
return [page for page in pages if label in page.get("labels", [])]
def label_count(pages, label):
"""
pages: list(Page)
label: str
returns: int
Counts the total number of pages that have a given label.
"""
return len(all_with_label(pages, label))
def label_sizes(pages):
"""
pages: list(Page)
returns: dict[str: int]
For all labels with landings in the page list, assign each label a "size",
from 1 to 5, based on the total number of pages with that label. (A larger
size means the label contains more pages.)
"""
# Note: this is basically calculating a 5-bin histogram, but I didn't want
# to add another dependency like numpy just to do this.
labels = [page["landing_for"] for page in pages if "landing_for" in page]
label_counts = Counter()
for page in pages:
if "labels" in page:
label_counts.update(page["labels"])
if not label_counts:
return {}
total_labels = len(label_counts.keys())
label_sizemap = {}
size = 5
for i, (label, count) in enumerate(label_counts.most_common()):
if 1 - (i / total_labels) < (size - 1) / 5:
size -= 1
label_sizemap[label] = size
return label_sizemap
export = {
"children_with_label": children_with_label,
"all_with_label": all_with_label,
"label_count": label_count,
"label_sizes": label_sizes
}

View File

@@ -4,10 +4,16 @@
<section class="content">
<h1 id="main-page-header">{{ currentpage.name }}</h1>
<ul class="tag-cloud">
<ul class="tag-cloud list-inline">
{% set lblsize = label_sizes(pages) %}
{% for page in pages %}
{% if page.landing_for is defined %}
<li><a href="{% if "//" not in page.html %}{{target.prefix}}{% endif %}{{page.html}}" class="badge badge-primary">{{page.name}}</a></li>
<li class="list-inline-item">
<a class="btn btn-primary size-{{lblsize[page.landing_for]}}" href="{% if "//" not in page.html %}{{target.prefix}}{% endif %}{{page.html}}">
{{page.name}}
<span class="badge badge-secondary">{{label_count(pages, page.landing_for)}}</span>
</a>
</li>
{% endif %}
{% endfor %}
</ul>

View File

@@ -1,5 +1,7 @@
{% extends "template-base.html" %}
{% block mainclasses %}landing landing-children padded-main{% endblock %}
{% block main %}
<section class="content">
{% if content %}
@@ -9,16 +11,23 @@
{% if currentpage.blurb %}<p class="blurb">{{currentpage.blurb}}</p>{% endif %}
{% endif %}
{% for cat in ["concepts.html", "tutorials.html", "references.html"] %}
{% set catpg = pages|selectattr("html", "eq", cat)|first %}
{% set cat_lbl_pgs = children_with_label(pages, catpg, currentpage.landing_for) %}
{% if cat_lbl_pgs %}
<div class="curated-links">
<h3>{{catpg.name}}</h3>
<ul>
{% for page in pages %}
{% if page.labels is defined and currentpage.landing_for in page.labels %}
<li class="level1"><a href="{% if "//" not in page.html %}{{currentpage.prefix}}{% endif %}{{page.html}}">{{page.name}}</a>
{% for page in cat_lbl_pgs %}
<li class="level-1">
<span class="pg-category">{{(pages|selectattr("html", "eq", page.parent)|first).name}}</span>
<a href="{% if "//" not in page.html %}{{currentpage.prefix}}{% endif %}{{page.html}}">{{page.name}}</a>
<p class="blurb child-blurb">{{page.blurb}}</p>
</li>
{% endif %}
{% endfor %}
<ul>
</div>
{% endif %}
{% endfor %}
</section>
{% endblock %}