diff --git a/assets/img/logos/cli.svg b/assets/img/logos/cli.svg new file mode 100644 index 0000000000..15e7ff46f8 --- /dev/null +++ b/assets/img/logos/cli.svg @@ -0,0 +1,59 @@ + + + + + + + + >_ + + diff --git a/assets/img/logos/golang.svg b/assets/img/logos/golang.svg new file mode 100644 index 0000000000..8164d5589e --- /dev/null +++ b/assets/img/logos/golang.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dactyl-config.yml b/dactyl-config.yml index 5ed893fcf4..c3f94bf6ce 100644 --- a/dactyl-config.yml +++ b/dactyl-config.yml @@ -3923,7 +3923,22 @@ pages: targets: - ja +# Code Samples page (final location TBD) + - name: Code Samples + html: code-samples.html + parent: docs.html + template: page-code-samples.html.jinja + sidebar: left_only + filters: + - code_samples + top_nav_grouping: Online Tools + blurb: Browse sample code for building common use cases on the XRP Ledger. + targets: + - en + - ja + # Dev Tools -------------------------------------------------------------------- + - md: dev-tools/dev-tools.md html: dev-tools.html parent: docs.html diff --git a/template/page-code-samples.html.jinja b/template/page-code-samples.html.jinja new file mode 100644 index 0000000000..31c0acff68 --- /dev/null +++ b/template/page-code-samples.html.jinja @@ -0,0 +1,77 @@ +{% extends "base.html.jinja" %} + +{% block bodyclasses %}no-sidebar{% endblock %} +{% block mainclasses %}landing page-community{% endblock %} + +{% block main %} + +
+
+
+

{% trans %}Solutions to Accelerate Development{% endtrans %}

+
{% trans %}Code Samples{% endtrans %}
+
+
+
+ +
+
+

{% trans %}Browse sample code for building common use cases on the XRP Ledger{% endtrans %}

+
{% trans %}Explore Code Samples{% endtrans %}
+
+
+ {# {% set code_samples = [ + { "href": "https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/checks", + "title": _("Checks Tutorials"), + "langs": [ + "js", + "json-rpc", + "websocket", + "cli" + ], + "description": _("Create, cash, and cancel Checks for exact or flexible amounts.") + }, + ] %} #} + {% set code_samples = all_code_samples() %} + + {% set lang_icons = { + "cli": "assets/img/logos/cli.svg", + "go": "assets/img/logos/golang.svg", + "java": "assets/img/logos/java.svg", + "js": "assets/img/logos/javascript.svg", + "json-rpc": "assets/img/logos/globe.svg", + "py": "assets/img/logos/python.svg", + "websocket": "assets/img/logos/globe.svg", + } %} + + {% for card in code_samples %} + +
+ {% for lang in card.langs %} + + {% endfor %} +
+
+

{{card.title}}

+

{{card.description}}

+
+ +
+ {% endfor %} +
+
+ +{% endblock %} + + + +{% block analytics %} + +{% endblock analytics %} diff --git a/tool/filter_code_samples.py b/tool/filter_code_samples.py new file mode 100644 index 0000000000..e17e17b4ef --- /dev/null +++ b/tool/filter_code_samples.py @@ -0,0 +1,52 @@ +################################################################################ +## Code Sample Functions ## +## Author: Rome Reginelli ## +## Copyright: Ripple Labs, Inc. 2021 ## +## License: MIT https://github.com/XRPLF/xrpl-dev-portal/blob/master/LICENSE ## +## ## +## Find code samples in the repository contents and figure out metadata about ## +## them automatically. ## +################################################################################ + +import os +from markdown import markdown + +cs_dir = "content/_code-samples/" #TODO: make a configurable field +skip_dirs = [ + "node_modules", + ".git", + "__pycache__" +] + +def all_code_samples(): + cses = [] + + for dirpath, dirnames, filenames in os.walk(cs_dir): + if dirpath == cs_dir: + continue + # limit depth to just the code samples and language folders + depth = dirpath.count(os.sep) - cs_dir.count(os.sep) + 1 + if depth > 1: + continue + for sd in skip_dirs: + if sd in dirnames: + dirnames.remove(sd) + + cs = { + "path": dirpath, + "langs": dirnames, + } + + if "README.md" in filenames: + with open(os.path.join(dirpath, "README.md"), "r") as f: + md = f.read() + cs["description"] = markdown(md) + else: + cs["description"] = os.path.basename(dirpath) + cses.append(cs) + + return cses + +export = { + "all_code_samples": all_code_samples, +}