diff --git a/content/concepts/complex-payment-types/payment-channels.md b/content/concepts/complex-payment-types/payment-channels.md
index d00d9674a5..f10ef8c7a4 100644
--- a/content/concepts/complex-payment-types/payment-channels.md
+++ b/content/concepts/complex-payment-types/payment-channels.md
@@ -4,7 +4,7 @@ Payment Channels are an advanced feature for sending "asynchronous" XRP payments
The XRP for a payment channel is set aside for a given time period. The sender creates _Claims_ against the channel, which the recipient verifies without sending an XRP Ledger transaction or waiting for a new ledger version to be approved by [consensus](consensus.html). (This is an _asychronous_ process because it happens separate from the usual pattern of getting transactions approved by consensus.) At any time, the recipient can _redeem_ a Claim to receive an amount of XRP authorized by that Claim. Settling a Claim like this uses a standard XRP Ledger transaction, as part of the usual consensus process. This single transaction can encompass any number of transactions guaranteed by smaller Claims.
-Because Claims can be verified individually but settled in bulk later, payment channels make it possible to conduct transactions at a rate only limited by the participants' ability to create and verify the digital signatures of those Claims. This limit is primarily based the speed of the participants' hardware and the complexity of the signature algorithms. For maximum speed, use Ed25519 signatures, which are faster than the XRP Ledger's default secp256k1 ECSDA signatures. Research has demonstrated the ability to create over Ed25519 100,000 signatures per second and to verify over 70,000 per second on commodity hardware in 2011.
+Because Claims can be verified individually but settled in bulk later, payment channels make it possible to conduct transactions at a rate only limited by the participants' ability to create and verify the digital signatures of those Claims. This limit is primarily based the speed of the participants' hardware and the complexity of the signature algorithms. For maximum speed, use Ed25519 signatures, which are faster than the XRP Ledger's default secp256k1 ECSDA signatures. Research has [demonstrated the ability to create over Ed25519 100,000 signatures per second and to verify over 70,000 per second](https://ed25519.cr.yp.to/ed25519-20110926.pdf) on commodity hardware in 2011.
## Why Use Payment Channels
diff --git a/content/concepts/introduction/technical-faq.md b/content/concepts/introduction/technical-faq.md
index 4155a032ea..c6c5689b1e 100644
--- a/content/concepts/introduction/technical-faq.md
+++ b/content/concepts/introduction/technical-faq.md
@@ -7,7 +7,7 @@
Validators determine if transactions meet protocol requirements, and are therefore “valid.” The service validators uniquely provide is grouping transactions into ordered units, agreeing on one such ordering specifically to prevent double spending.
-See [Consensus](consensus.html) and the Ripple Labs Tech Talk: Understanding Consensus for more information about the consensus process.
+See [Consensus](consensus.html) and the [Ripple Labs Tech Talk: Understanding Consensus](https://ripple.com/insights/ripple-labs-tech-talk-consensus-within-the-ripple-protocol/) for more information about the consensus process.
#### How much does it cost to run a validator?
@@ -82,7 +82,7 @@ Ripple controls who has access to modify official versions of the `rippled` serv
#### Does Ripple offer a secure method to download their software?
-`rippled` source code is available at https://github.com/ripple/rippled , where the tip of the master, release and develop branches always contains a version-setting commit signed by a `rippled` developer. The XRP Ledger also offers prebuilt RPM packages for CentOS, RedHat Enterprise Linux, Fedora and Ubuntu. Those packages are digitally signed by Ripple so that they are tamper-evident and their authenticity can be verified. Lastly, release bulletins are made available over a secure website, and include the commit ID of the repository, as well as the md5sum of the RPM packages that are published.
+`rippled` source code is available at , where the tip of the `master`, `release` and `develop` branches always contains a version-setting commit signed by a `rippled` developer. The XRP Ledger also offers prebuilt RPM packages for CentOS, RedHat Enterprise Linux, Fedora and Ubuntu. Those packages are digitally signed by Ripple so that they are tamper-evident and their authenticity can be verified. Lastly, release bulletins are made available over a secure website, and include the commit ID of the repository, as well as the md5sum of the RPM packages that are published.
#### Does Ripple distinguish between the codebase for validation and the one for user software?
@@ -92,8 +92,8 @@ Yes. Client software for the XRP Ledger, including ripple-lib, has a different c
## See Also
-- `rippled` codebase
+- [`rippled` codebase](https://github.com/ripple/rippled)
- User software codebase:
- - ripple-lib
- - ripplecharts-frontend
-- Ripple GitHub Organization
+ - [ripple-lib](https://github.com/ripple/ripple-lib)
+ - [ripplecharts-frontend](https://github.com/ripple/ripplecharts-frontend)
+- [Ripple GitHub Organization](https://github.com/ripple/)
diff --git a/content/concepts/payment-system-basics/transaction-basics/transaction-basics.md b/content/concepts/payment-system-basics/transaction-basics/transaction-basics.md
index 04be1f0769..3c63f9095e 100644
--- a/content/concepts/payment-system-basics/transaction-basics/transaction-basics.md
+++ b/content/concepts/payment-system-basics/transaction-basics/transaction-basics.md
@@ -47,7 +47,7 @@ Sending a transaction to the XRP Ledger involves several steps:
1. Create an [unsigned transaction in JSON format](#example-unsigned-transaction).
2. Use one or more signatures to [authorize the transaction](#authorizing-transactions).
3. Submit a transaction to a `rippled` server. If the transaction is properly formed, the server provisionally applies the transaction to its current version of the ledger and relays the transaction to other members of the peer-to-peer network.
-4. The [consensus process](https://ripple.com/build/ripple-ledger-consensus-process/) determines which provisional transactions get included in the next validated ledger.
+4. The [consensus process](consensus.html) determines which provisional transactions get included in the next validated ledger.
5. The `rippled` servers apply those transactions to the previous ledger in a canonical order and share their results.
6. If enough [trusted validators](rippled-server-modes.html#reasons-to-run-a-validator) created the exact same ledger, that ledger is declared _validated_ and the [results of the transactions](transaction-results.html) in that ledger are immutable.
diff --git a/content/news/news.md b/content/news/news.md
index ad5aa22fdf..38fd08bd43 100644
--- a/content/news/news.md
+++ b/content/news/news.md
@@ -12,14 +12,14 @@ Get the latest XRP Ledger news and release information.
Amendments provide a way to introduce breaking changes to the decentralized XRP Ledger network without causing disruptions. Get the comprehensive list of [all known amendments](known-amendments.html) and their statuses on the production XRP Ledger.
-* **Ripple Dev Blog **
+* **[Ripple Dev Blog](https://ripple.com/category/dev-blog/)**
Visit the Dev Blog for the latest news and stories about the XRP Ledger and `rippled`.
-* **Ripple GitHub Organization **
+* **[Ripple GitHub Organization](https://github.com/ripple)**
Visit the Ripple GitHub Organization to access open-source projects, including `rippled`, `ripple-lib`, and `ripple-libpp`.
-* **Interledger **
+* **[Interledger](https://interledger.org/)**
Learn about Interledger, an open protocol suite for sending payments across different ledgers. The open architecture and minimal protocol enable interoperability for any value transfer system.
diff --git a/content/use-cases/contribute-code-to-ripple-lib.md b/content/use-cases/contribute-code-to-ripple-lib.md
index 0504d45e7f..99c4e8eb94 100644
--- a/content/use-cases/contribute-code-to-ripple-lib.md
+++ b/content/use-cases/contribute-code-to-ripple-lib.md
@@ -6,57 +6,50 @@ Want to contribute code or a bug report to help improve `ripple-lib`, the offici
{% set n = cycler(* range(1,99)) %}
{{n.next()}}
-
-## Access the `ripple-lib` repo
+## [Access the `ripple-lib` repo](https://github.com/ripple/ripple-lib)
`ripple-lib` is an open-source project. You can take a look at `ripple-lib` code simply by accessing the `ripple-lib` GitHub repo. Before contributing or reporting bugs, we recommend that you get to know the code and developer experience by performing the following tasks.
{{n.next()}}
-
## [Set up and run a `rippled` server](manage-the-rippled-server.html)
RippleAPI is an API for interacting with the XRP Ledger. The core peer-to-peer server that manages the XRP Ledger is `rippled`. Optionally, you can set up and run a `rippled` server to understand its developer experience and functionality. Anyone can run their own `rippled` server that follows the network and keeps a complete copy of the XRP Ledger.
{{n.next()}}
-
## [Get a Test Net XRP Ledger account](xrp-test-net-faucet.html)
Use the XRP Test Net Faucet to get a test account on the XRP Test Network. If you set up a `rippled` server, you can connect it to the XRP Test Net to make test calls and get to know the XRP Ledger.
{{n.next()}}
-
## [Set up your `ripple-lib` development environment](get-started-with-rippleapi-for-javascript.html#environment-setup)
-`ripple-lib` requires Node.js and a few dependencies. We recommend using Node.js v10 LTS and Yarn dependency management. Also, be sure to create your own fork of the `ripple-lib` repository on GitHub so you can contribute pull requests to the official repo.
+`ripple-lib` requires Node.js and a few dependencies. We recommend using [Node.js v10 LTS](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com/en/) dependency management. Also, be sure to create your own fork of the `ripple-lib` repository on GitHub so you can contribute pull requests to the official repo.
{{n.next()}}
-
## [Run your first `ripple-lib` script](get-started-with-rippleapi-for-javascript.html#first-rippleapi-script)
Examine and run the `get-account-info.js` script. Use it to get a feel for how RippleAPI scripts work and to verify that your RippleAPI interface is working.
{{n.next()}}
-
-## Contribute code
+## [Contribute code](https://github.com/ripple/ripple-lib/pulls)
Now that you have a handle on `ripple-lib`, you may have ideas for how to improve it.
Perhaps you’re developing on the XRP Ledger and want to contribute some code that enables `ripple-lib` to provide a feature your application needs.
-Need some inspiration? Take a look at our list of Help Wanted issues .
+Need some inspiration? Take a look at our list of [Help Wanted issues](https://github.com/ripple/ripple-lib/issues?utf8=%E2%9C%93&q=label%3A%22help+wanted%22)
Access the `ripple-lib` repo and open an issue or pull request.
{{n.next()}}
-
-## Report bugs
+## [Report bugs](https://github.com/ripple/ripple-lib/issues)
-As you explore `ripple-lib`, you may find code that you don’t think is working as intended. To report a bug, open an issue in the `ripple-lib` repo.
+As you explore `ripple-lib`, you may find code that you don’t think is working as intended. To report a bug, [open an issue](https://github.com/ripple/ripple-lib/issues) in the `ripple-lib` repo.
-If the bug you wish to report is security-related, we urge you to disclose it responsibly through Ripple's Bug Bounty program .
+If the bug you wish to report is security-related, we urge you to disclose it responsibly through Ripple's [Bug Bounty program](https://ripple.com/bug-bounty/).
diff --git a/content/use-cases/contribute-code-to-rippled.md b/content/use-cases/contribute-code-to-rippled.md
index 745455aff3..aa5544c43b 100644
--- a/content/use-cases/contribute-code-to-rippled.md
+++ b/content/use-cases/contribute-code-to-rippled.md
@@ -6,58 +6,50 @@ Want to contribute code or a bug report to help improve `rippled`, the core peer
{{n.next()}}
-
-## Access the `rippled` repo
+## [Access the `rippled` repo](https://github.com/ripple/rippled)
`rippled` is an open-source project. You can take a look at `rippled` code simply by accessing the `rippled` GitHub repo. Before contributing or reporting bugs, we recommend that you get to know the code and developer experience by performing the following tasks.
{{n.next()}}
-
## [Set up and run a `rippled` server](manage-the-rippled-server.html)
Set up and run a `rippled` server to understand the developer experience and functionality of the core peer-to-peer server that manages the XRP Ledger. Anyone can run their own `rippled` server that follows the network and keeps a complete copy of the XRP Ledger.
{{n.next()}}
-
## [Try out XRP Ledger integration tools](get-started-with-the-rippled-api.html)
Take a look at the various tools provided to help developers integrate with the XRP Ledger. From WebSocket and JSON-RPC API endpoints to the `ripple-lib` JavaScript library, take a look at the modes of integration offered to the developer community.
{{n.next()}}
-
## [Get a sandbox XRP Ledger account](xrp-test-net-faucet.html)
Use the XRP Ledger Test Net to get a sandbox account. Connect your `rippled server` to the Test Net to make test calls and get to know the XRP Ledger.
{{n.next()}}
-
## Set up your development environment
-A `rippled` development environment has a C++ compiler, access to the necessary libraries to compile `rippled` (such as Boost), and an editor for making changes to the source files. See the `rippled` repository for the latest recommendations of each. You should also create your own fork of the `rippled` repository on GitHub so you can contribute pull requests to the official repo.
+A `rippled` development environment has a C++ compiler, access to the necessary libraries to compile `rippled` (such as Boost), and an editor for making changes to the source files. See the [`rippled` repository](https://github.com/ripple/rippled) for the latest recommendations of each. You should also create your own fork of the `rippled` repository on GitHub so you can contribute pull requests to the official repo.
{{n.next()}}
-
-## Familiarize yourself with `rippled`'s coding style
+## [Familiarize yourself with `rippled`'s coding style](https://github.com/ripple/rippled/blob/develop/docs/CodingStyle.md)
Before you start contributing code to `rippled,` take some time to familiarize yourself with the coding standards used in the `rippled` repo. These standards gradually evolve and propagate through code reviews. Some aspects are enforced more strictly than others.
{{n.next()}}
-
-## Contribute code
+## [Contribute code](https://github.com/ripple/rippled/pulls)
Now that you have a handle on `rippled`, you may have ideas for how to improve it. Perhaps you’re developing on the XRP Ledger and want to contribute some code that enables the XRP Ledger to provide a feature your application needs. Access the `rippled` repo and open an issue or pull request.
{{n.next()}}
-
-## Report bugs
+## [Report bugs](https://github.com/ripple/rippled/issues)
-As you explore `rippled`, you may find code that you don’t think is working as intended. To report a bug, open an issue in the `rippled` repo.
+As you explore `rippled`, you may find code that you don’t think is working as intended. To report a bug, [open an issue](https://github.com/ripple/rippled/issues) in the `rippled` repo.
-If the bug you wish to report is security-related, we urge you to disclose it responsibly through Ripple's Bug Bounty program .
+If the bug you wish to report is security-related, we urge you to disclose it responsibly through Ripple's [Bug Bounty program](https://ripple.com/bug-bounty/).
diff --git a/content/use-cases/run-a-rippled-validator.md b/content/use-cases/run-a-rippled-validator.md
index fa98d9dc8c..5febdc359f 100644
--- a/content/use-cases/run-a-rippled-validator.md
+++ b/content/use-cases/run-a-rippled-validator.md
@@ -47,7 +47,7 @@ To protect a production validator from DDoS attacks, you can use a stock `ripple
## [Associate your validator with a web domain you control](run-rippled-as-a-validator.html#provide-domain-verification)
Network participants are unlikely to trust a validator without knowing who is operating it. To address this concern, associate your validator with a web domain you control.
-You may also wish to have your validator listed with one or more validator tracking services, such as the XRP Charts Validator Registry .
+You may also wish to have your validator listed with one or more validator tracking services, such as the [XRP Charts Validator Registry](https://xrpcharts.ripple.com/#/validators).
### Related Tasks
diff --git a/dactyl-config.yml b/dactyl-config.yml
index 9daaa92770..f7bc157740 100644
--- a/dactyl-config.yml
+++ b/dactyl-config.yml
@@ -20,6 +20,10 @@ content_static_path: img
# PDF creation needs a dir for temporary files
temporary_files_path: /tmp/
+# Custom filters live here and start with filter_
+filter_paths:
+ - tool
+
default_filters:
- multicode_tabs
- standardize_header_ids
@@ -27,6 +31,7 @@ default_filters:
- callouts
- badges
- link_replacement
+ - external_links
callout_class: "devportal-callout"
diff --git a/tool/filter_external_links.py b/tool/filter_external_links.py
new file mode 100644
index 0000000000..1421827491
--- /dev/null
+++ b/tool/filter_external_links.py
@@ -0,0 +1,31 @@
+################################################
+## External Link Marker
+## Author: Rome Reginelli
+## Copyright: Ripple Labs, 2019
+##
+## Finds external links and changes them to:
+## - open in a new tab (target="_blank")
+## - end with an "external link" icon
+## (FontAwesome required)
+################################################
+
+import re
+
+
+def filter_soup(soup, **kwargs):
+ """
+ Adds an external link marker to external links
+ and makes them open in new tabs.
+ """
+
+ extern_regex = re.compile(r"^https?://")
+
+ links = soup.find_all("a", href=True)
+ for link in links:
+ if extern_regex.match(link["href"]):
+ link["target"] = "_blank"
+ ex_link_marker = soup.new_tag("i", attrs={
+ "class":"fa fa-external-link",
+ "aria-hidden": "true"})
+ link.append(" ")
+ link.append(ex_link_marker)