Zola responsive sdks (#1701)

* Set up base content for sdks

* Make the grids work on mobile too

* Add the filters to the SDKs page

* I need to TWIM

* Basic javascriptfull version of the panel selector

* Use macros

* Remove unused statements
This commit is contained in:
Thibault Martin 2023-04-18 09:04:11 +02:00 committed by GitHub
parent 854f04ba5d
commit fe7a0fdf13
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 649 additions and 319 deletions

View file

@ -21,44 +21,4 @@ bots, bridges). Don't be surprised if a same SDK appears in several sections!
If you are a developer and are not sure what the difference between clients and
appservices, please head to [the developers documentation](/docs/developers/).
## Client SDKs
Client SDKs are used to develop clients humans will interact with. They handle
all the Matrix heavy lifting and leave it up to the developer to implement a UI.
These are recommended SDKs if you want to write a client.
{{ sdk_table(type="client", featured=true) }}
If you're not happy with the recommended SDKs, you can try one of the following
ones as well.
{{ sdk_table(type="client", featured=false) }}
## Bot SDKs
Bot SDKs are used to develop simple or advanced bots. The following bots SDKs
are widely used in the Matrix ecosystem and are recommended by the Foundation:
{{ sdk_table(type="bot", featured=true) }}
If you're not happy with the recommended SDKs, you can try one of the following
ones as well.
{{ sdk_table(type="bot", featured=false) }}
## Bridge SDKs
Bridge SDKs are used to create bridges, thus integrating third party platforms
in Matrix. For more information about bridges, please head to [Ecosystem > Bridges](/ecosystem/bridges)
and to the [Developers documentation](/docs/developers).
The following bridges SDKs are widely used in the Matrix ecosystem and are
recommended by the Foundation:
{{ sdk_table(type="bridge", featured=true) }}
If you're not happy with the recommended SDKs, you can try one of the following
ones as well.
{{ sdk_table(type="bridge", featured=false) }}
{{ sdk_deck() }}

View file

@ -1,449 +1,568 @@
["Drupal matrix_api module"]
[[sdks]]
name = "Matrix.org AS Node SDK"
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-appservice-node"
purpose = ["bot", "bridge"]
featured_in = ["bridge"]
description = """
Matrix Application Service framework in Node.js.
"""
[[sdks]]
name = "Matrix.org JS SDK"
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-js-sdk"
purpose = ["client", "bot", "bridge"]
featured_in = []
description = """
Matrix Client-Server SDK for JavaScript.
"""
[[sdks]]
name = "Matrix.org React SDK"
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-react-sdk"
purpose = ["client"]
featured_in = []
description = """
Matrix SDK for React Javascript.
"""
[[sdks]]
name = "MatrixBot .NET Core SDK"
maintainer = "enimatek-nl"
maturity = "Stable"
language = "C#"
licence = "MIT"
repository = "https://github.com/enimatek-nl/matrixbot-dotnet-sdk"
purpose = ["bot"]
featured_in = []
description = """
Build .NET chat bots compatible with the Matrix Protocol. It has support for a limited subset of the APIs.
"""
[[sdks]]
name = "Simple-Matrix-Bot-Lib"
maintainer = "KrazyKirby99999"
maturity = "Stable"
language = "Python"
licence = "MIT"
repository = "https://codeberg.org/imbev/simplematrixbotlib"
purpose = ["bot"]
featured_in = []
description = """
An easy to use bot library for the Matrix ecosystem written in Python.
"""
[[sdks]]
name = "Ruma"
maintainer = "Ruma team"
maturity = "Stable"
language = "Rust"
licence = "MIT"
repository = "https://github.com/ruma"
purpose = ["client", "bot", "bridge"]
featured_in = []
description = """
A set of Rust crates for interacting with the Matrix chat network.
"""
[[sdks]]
name = "gomatrix"
maintainer = "Matrix.org"
maturity = "Stable"
language = "Go"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/gomatrix"
purpose = ["client"]
featured_in = []
description = """
A Golang Matrix client.
"""
[[sdks]]
name = "matrix-appservice-bridge"
maintainer = "Matrix.org"
maturity = "Stable"
language = "TypeScript"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-appservice-bridge"
purpose = ["bridge"]
featured_in = ["bridge"]
description = """
Bridging infrastructure for Application Services.
"""
[[sdks]]
name = "matrix-nio"
maintainer = "poljar"
maturity = "Stable"
language = "Python"
licence = "ISC"
repository = "https://github.com/poljar/matrix-nio"
purpose = ["client", "bot"]
featured_in = ["client", "bot"]
description = """
A Python Matrix client library, designed according to sans I/O principles.
"""
[[sdks]]
name = "mautrix-go"
maintainer = "Tulir"
maturity = "Stable"
language = "Go"
licence = "MPL-2.0"
repository = "https://github.com/mautrix/go"
purpose = ["client", "bot", "bridge"]
featured_in = ["client", "bot", "bridge"]
description = """
A Golang Matrix framework.
"""
[[sdks]]
name = "mautrix-python"
maintainer = "Tulir"
maturity = "Stable"
language = "Python"
licence = "MPL-2.0"
repository = "https://github.com/mautrix/python"
purpose = ["client", "bot", "bridge"]
featured_in = ["client", "bot", "bridge"]
description = """
A Python 3 asyncio Matrix framework.
"""
[[sdks]]
name = "Drupal matrix_api module"
maintainer = "freelock"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "PHP"
license = "None"
licence = "None"
repository = "https://cgit.drupalcode.org/matrix_api"
purpose = []
featured_in = []
["Glitch in the Matrix"]
[[sdks]]
name = "Glitch in the Matrix"
maintainer = "eta"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Rust"
license = "CC0-1.0"
licence = "CC0-1.0"
repository = "https://github.com/eeeeeta/glitch-in-the-matrix"
purpose = []
featured_in = []
[Gyr]
[[sdks]]
name = "Gyr"
maintainer = "Adam Beckmeyer"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Python"
license = "GPL-3.0-only"
licence = "GPL-3.0-only"
repository = "https://github.com/non-Jedi/gyr"
purpose = []
featured_in = []
["Matrix .NET SDK"]
[[sdks]]
name = "Matrix .NET SDK"
maintainer = "Half-Shot"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C#"
license = "MIT"
licence = "MIT"
repository = "https://github.com/Half-Shot/matrix-dotnet-sdk"
purpose = []
featured_in = []
["Matrix C# SDK"]
[[sdks]]
name = "Matrix C# SDK"
maintainer = "Baking Bad"
maturity = "Beta"
language = "C#"
license = "MIT"
licence = "MIT"
repository = "https://github.com/baking-bad/matrix-dotnet-sdk"
purpose = ["client", "bot"]
featured_in = []
description = """
Build .NET apps compatible with the Matrix Protocol.
"""
["Matrix Client SDK for GLib"]
[[sdks]]
name = "Matrix Client SDK for GLib"
maintainer = "Gergely Polonkai"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C"
license = "LGPL-3.0-or-later"
licence = "LGPL-3.0-or-later"
repository = "https://github.com/gergelypolonkai/matrix-glib-sdk"
purpose = []
featured_in = []
["Matrix Dart SDK"]
[[sdks]]
name = "Matrix Dart SDK"
maintainer = "Wilko Manger"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Dart"
license = "MPL-2.0"
licence = "MPL-2.0"
repository = "https://git.pattle.im/pattle/library/matrix-dart-sdk"
purpose = []
featured_in = []
["Matrix Java SDK"]
[[sdks]]
name = "Matrix Java SDK"
maintainer = "Kamax.io"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Java"
license = "AGPL-3.0-or-later"
licence = "AGPL-3.0-or-later"
repository = "https://github.com/kamax-io/matrix-java-sdk"
purpose = []
featured_in = []
["Matrix on Haxe"]
[[sdks]]
name = "Matrix on Haxe"
maintainer = "endes"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Haxe"
license = "AGPL-3.0-only"
licence = "AGPL-3.0-only"
repository = "https://notabug.org/Tamaimo/haxe-matrix-im"
purpose = []
featured_in = []
[Matrix-ClientServer-API-java]
[[sdks]]
name = "Matrix-ClientServer-API-java"
maintainer = "Jojii"
maturity = "Beta"
language = "Java"
license = "Unknown"
licence = "Unknown"
repository = "https://github.com/JojiiOfficial/Matrix-ClientServer-API-java"
purpose = ["client", "bot"]
featured_in = []
description = """
A small and simple java API for the Matrix ClientServer Protocol.
"""
["Matrix.org AS Node SDK"]
[[sdks]]
name = "Matrix.org Android SDK"
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
license = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-appservice-node"
purpose = ["bot", "bridge"]
featured_in = ["bridge"]
["Matrix.org Android SDK"]
maintainer = "Matrix.org team"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Java"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-android-sdk"
purpose = []
featured_in = []
["Matrix.org AngularJS SDK"]
[[sdks]]
name = "Matrix.org AngularJS SDK"
maintainer = "Matrix.org team"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "JavaScript"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-angular-sdk"
purpose = []
featured_in = []
["Matrix.org JS SDK"]
[[sdks]]
name = "Matrix.org Python SDK"
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
license = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-js-sdk"
purpose = ["client", "bot", "bridge"]
featured_in = []
["Matrix.org Python SDK"]
maintainer = "Matrix.org team"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Python"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-python-sdk"
purpose = []
featured_in = []
["Matrix.org React SDK"]
maintainer = "Matrix.org team"
maturity = "Stable"
language = "JavaScript"
license = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-react-sdk"
purpose = ["client"]
featured_in = []
["Matrix.org iOS SDK"]
[[sdks]]
name = "Matrix.org iOS SDK"
maintainer = "Matrix.org team"
maturity = "Beta"
language = "Objective-C"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-ios-sdk"
purpose = ["client"]
featured_in = ["client"]
description = """
The Matrix SDK for iOS.
"""
["Matrix::Client"]
[[sdks]]
name = "Matrix::Client"
maintainer = "matiaslina"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Raku"
license = "Artistic2"
licence = "Artistic2"
repository = "https://github.com/matiaslina/perl6-matrix-client"
purpose = []
featured_in = []
[MatrixAPI]
[[sdks]]
name = "MatrixAPI"
maintainer = "VRocker"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C#"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/VRocker/MatrixAPI"
purpose = []
featured_in = []
["MatrixBot .NET Core SDK"]
maintainer = "enimatek-nl"
maturity = "Stable"
language = "C#"
license = "MIT"
repository = "https://github.com/enimatek-nl/matrixbot-dotnet-sdk"
purpose = ["bot"]
featured_in = []
["Net::Async::Matrix (Perl)"]
[[sdks]]
name = "Net::Async::Matrix (Perl)"
maintainer = "LeoNerd"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Perl"
license = "GPL-1.0-or-later"
licence = "GPL-1.0-or-later"
repository = "https://metacpan.org/release/Net-Async-Matrix"
purpose = []
featured_in = []
[Operator]
[[sdks]]
name = "Operator"
maintainer = "uhoreg"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C++"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://vcs.uhoreg.ca/git/cgit/operator/"
purpose = []
featured_in = []
[Quotient]
[[sdks]]
name = "Quotient"
maintainer = "The Quotient team"
maturity = "Beta"
language = "C++/Qt"
license = "LGPL-2.1-only"
language = "C++"
licence = "LGPL-2.1-only"
repository = "https://github.com/quotient-im"
purpose = ["client", "bot"]
featured_in = []
description = """
A Qt5 library to write cross-platform clients for Matrix
"""
["Racket Matrix SDK"]
[[sdks]]
name = "Racket Matrix SDK"
maintainer = "Aidan Gauland"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Racket"
license = "LGPL-3.0-or-later"
licence = "LGPL-3.0-or-later"
repository = "https://gitlab.com/aidalgol/racket-matrix-sdk/"
purpose = []
featured_in = []
["Ruby Matrix SDK"]
[[sdks]]
name = "Ruby Matrix SDK"
maintainer = "Ananace"
maturity = "Beta"
language = "Ruby"
license = "MIT"
licence = "MIT"
repository = "https://github.com/ananace/ruby-matrix-sdk"
purpose = ["client", "bot"]
featured_in = []
description = """
Ruby SDK for the Matrix communication protocol.
"""
[Ruma]
maintainer = "Ruma team"
maturity = "Stable"
language = "Rust"
license = "MIT"
repository = "https://github.com/ruma"
purpose = ["client", "bot", "bridge"]
featured_in = []
[Simple-Matrix-Bot-Lib]
maintainer = "KrazyKirby99999"
maturity = "Stable"
language = "Python"
license = "MIT"
repository = "https://github.com/KrazyKirby99999/simple-matrix-bot-lib"
purpose = ["bot"]
featured_in = []
["Swift MatrixSDK"]
[[sdks]]
name = "Swift MatrixSDK"
maintainer = "gperdomor"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Swift"
license = "MIT"
licence = "MIT"
repository = "https://github.com/gperdomor/matrix-sdk"
purpose = []
featured_in = []
[Trixnity]
[[sdks]]
name = "Trixnity"
maintainer = "Trixnity Team"
maturity = "Beta"
language = "Kotlin"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://gitlab.com/trixnity/trixnity"
purpose = ["client", "bot", "bridge"]
featured_in = []
description = """
Multiplatform Kotlin SDK for Matrix.
"""
[botkit-matrix]
[[sdks]]
name = "botkit-matrix"
maintainer = "frankgerhardt"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "JavaScript"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/frankgerhardt/botkit-matrix"
purpose = []
featured_in = []
[dial-phone]
[[sdks]]
name = "dial-phone"
maintainer = "mtorials"
maturity = "Alpha"
language = "Kotlin"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/mtorials/dial-phone"
purpose = ["client", "bot"]
featured_in = []
description = """
A Matrix client-server SDK written in Kotlin.
"""
[goMatrix]
[[sdks]]
name = "goMatrix"
maintainer = "geir54"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Go"
license = "MPL-2.0"
licence = "MPL-2.0"
repository = "https://github.com/geir54/goMatrix"
purpose = []
featured_in = []
[godot-matrix]
[[sdks]]
name = "godot-matrix"
maintainer = "vurpo"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C++"
license = "MIT"
licence = "MIT"
repository = "https://gitlab.com/vurpo/godot-matrix"
purpose = []
featured_in = []
[gomatrix]
maintainer = "Matrix.org"
maturity = "Stable"
language = "Go"
license = "Apache-2.0"
repository = "https://github.com/matrix-org/gomatrix"
purpose = ["client"]
featured_in = []
[jmsdk]
[[sdks]]
name = "jmsdk"
maintainer = "ma1uta"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Java"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/ma1uta/jmsdk"
purpose = []
featured_in = []
[libkazv]
[[sdks]]
name = "libkazv"
maintainer = "The Kazv Project"
maturity = "Alpha"
language = "C++"
license = "AGPL-3.0-or-later"
licence = "AGPL-3.0-or-later"
repository = "https://lily.kazv.moe/kazv/libkazv"
purpose = ["client", "bot"]
featured_in = []
description = """
A matrix client sdk built upon lager and the value-oriented design it enables.
"""
[matrix-appservice-bridge]
maintainer = "Kegsay, Matrix.org"
maturity = "Stable"
language = "TypeScript"
license = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-appservice-bridge"
purpose = ["bridge"]
featured_in = ["bridge"]
[matrix-bot-sdk]
[[sdks]]
name = "matrix-bot-sdk"
maintainer = "Travis Ralston"
maturity = "Beta"
language = "TypeScript"
license = "MIT"
licence = "MIT"
repository = "https://github.com/turt2live/matrix-bot-sdk"
purpose = ["bot", "bridge"]
featured_in = ["bot", "bridge"]
description = """
TypeScript/JavaScript SDK for Matrix bots.
"""
[matrix-erlang-sdk]
[[sdks]]
name = "matrix-erlang-sdk"
maintainer = "Andreas Hallberg"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Erlang"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/anhallbe/matrix-erlang-sdk"
purpose = []
featured_in = []
[matrix-kt]
[[sdks]]
name = "matrix-kt"
maintainer = "Dominic Fischer"
maturity = "Beta"
language = "Kotlin"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/Dominaezzz/matrix-kt"
purpose = ["client", "bot"]
featured_in = []
description = """
Kotlin libraries for Matrix.
"""
[matrix-nio]
maintainer = "poljar"
maturity = "Stable"
language = "Python"
license = "ISC"
repository = "https://github.com/poljar/matrix-nio"
purpose = ["client", "bot"]
featured_in = ["client", "bot"]
[matrix-redux-wrap]
[[sdks]]
name = "matrix-redux-wrap"
maintainer = "Luke Barnard"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "JavaScript"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/lukebarnard1/matrix-redux-wrap"
purpose = []
featured_in = []
[matrix-rust-sdk]
[[sdks]]
name = "matrix-rust-sdk"
maintainer = "poljar"
maturity = "Beta"
language = "Rust"
license = "Apache-2.0"
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/matrix-rust-sdk"
purpose = ["client", "bot", "bridge"]
featured_in = ["client", "bot", "bridge"]
description = """
An implementation of a Matrix client-server library in Rust.
"""
[mautrix-appservice-go]
[[sdks]]
name = "mautrix-appservice-go"
maintainer = "Tulir"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Go"
license = "MPL-2.0"
licence = "MPL-2.0"
repository = "https://github.com/tulir/mautrix-appservice-go"
purpose = []
featured_in = []
[mautrix-go]
maintainer = "Tulir"
maturity = "Stable"
language = "Go"
license = "MPL-2.0"
repository = "https://github.com/mautrix/go"
purpose = ["client", "bot", "bridge"]
featured_in = ["client", "bot", "bridge"]
[mautrix-python]
maintainer = "Tulir"
maturity = "Stable"
language = "Python"
license = "MPL-2.0"
repository = "https://github.com/mautrix/python"
purpose = ["client", "bot", "bridge"]
featured_in = ["client", "bot", "bridge"]
[mtxclient]
[[sdks]]
name = "mtxclient"
maintainer = "mujx"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "C++"
license = "MIT"
licence = "MIT"
repository = "https://github.com/mujx/mtxclient"
purpose = []
featured_in = []
[newlisp-matrix-client]
[[sdks]]
name = "newlisp-matrix-client"
maintainer = "Ingo Hohmann"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "Lisp"
license = "MIT"
licence = "MIT"
repository = "https://github.com/IngoHohmann/newlisp-matrix-client"
purpose = []
featured_in = []
[smallbot-matrix]
[[sdks]]
name = "smallbot-matrix"
maintainer = "cybertim"
maturity = "No longer maintained"
maturity = "Obsolete"
language = "TypeScript"
license = "MIT"
licence = "MIT"
repository = "https://github.com/cybertim/SmallBotMatrix"
purpose = []
featured_in = []
["µtrix"]
[[sdks]]
name = "µtrix"
maintainer = "Dominik George; Project Hack'n'Fun @ Teckids e.V."
maturity = "Beta"
language = "Python"
license = "Apache-2.0"
repository = "https://edugit.org/hacknfun/thema-mechatronik/mytrix"
licence = "Apache-2.0"
repository = "https://edugit.org/Teckids/hacknfun/libs/mytrix"
purpose = ["client", "bot"]
featured_in = []
description = """
Matrix client library for MicroPython.
"""

3
partials/sdks/bot.md Normal file
View file

@ -0,0 +1,3 @@
Bot SDKs are used to develop bots no humans will interact with. They handle all
the Matrix heavy lifting so the developer can focus on what the bot is actually
useful for.

3
partials/sdks/bridge.md Normal file
View file

@ -0,0 +1,3 @@
Bridge SDKs are used to develop appservices meant to either connect a Matrix
community to a third party chat platform, or to exchange data with another
platform.

2
partials/sdks/client.md Normal file
View file

@ -0,0 +1,2 @@
Client SDKs are used to develop clients humans will interact with. They handle
all the Matrix heavy lifting and leave it up to the developer to implement a UI.

View file

@ -77,7 +77,6 @@ ol:last-child {
max-width: var(--page-max-width);
margin: .625rem auto;
padding: 0 1.5rem;
img {
max-height: 40rem;
@ -178,9 +177,11 @@ pre table {
flex-direction: column;
justify-content: center;
padding-inline: 5.625rem;
@media (max-width: 767px) {
padding-inline: 2rem;
}
padding-bottom: calc(var(--navbar-height)/2);
min-height: var(--page-header-height);
@ -220,7 +221,7 @@ pre table {
}
}
:not(pre) > code {
:not(pre)>code {
color: #f54029;
border: 1px solid #f54029;
border-radius: 4px;

View file

@ -4,7 +4,6 @@ body:has(.projects-card-deck > div > .client-checkbox:checked) {
.clients_page {
padding-top: 3rem;
padding-inline: 2rem;
h2 {
text-align: center;
@ -88,6 +87,7 @@ body:has(.projects-card-deck > div > .client-checkbox:checked) {
position: absolute;
top: 1rem;
left: 1rem;
@media (min-width: 767px) {
right: 1rem;
left: unset;
@ -114,6 +114,10 @@ body:has(.projects-card-deck > div > .client-checkbox:checked) {
font-style: normal;
font-weight: 700;
font-size: 2rem;
.maturity {
padding-block: .3rem;
}
}
p {

View file

@ -1,9 +1,18 @@
.projects-card-deck {
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
gap: 2rem;
display: grid;
grid-template-columns: repeat(auto-fill, 280px);
@media (max-width: 767px) {
max-width: 280px;
}
gap: 1rem;
margin-inline: auto;
}
.projects-card-deck>div {
height: 100%;
width: 100%;
}
.project-card {
@ -14,10 +23,7 @@
padding: 24px;
gap: 1rem;
flex: 1 0 280px;
max-width: 280px;
min-height: 343px;
height: 100%;
min-height: 100%;
border: 1px solid #D2D2D2;
border-radius: 16px;
@ -29,15 +35,21 @@
box-sizing: content-box;
}
h3 {
.title-row {
width: 100%;
max-width: 100%;
display: flex;
flex-direction: row;
gap: .5rem;
justify-content: space-between;
gap: .2rem;
align-items: start;
}
h3 {
margin: 0;
font-style: normal;
font-weight: 700;
font-size: 2rem;
font-size: 1.8rem;
line-height: 1;
}
@ -46,13 +58,30 @@
color: #777;
text-decoration: none;
}
p {
line-height: 1;
}
.licence-language {
display: flex;
flex-direction: row;
gap: .2rem;
}
.pill {
background-color: #e9e9e9;
border-radius: 9999px;
padding-inline: .5rem;
color: var(--color-text);
}
}
.filtered-out {
display: none;
}
#filters {
.filters {
display: flex;
flex-direction: row;
flex-wrap: wrap;
@ -133,7 +162,8 @@
accent-color: #000;
}
input, label {
input,
label {
cursor: pointer;
user-select: none;
}
@ -157,11 +187,10 @@
.maturity {
border: 1px solid var(--borders-color);
border-radius: 9999px;
padding: .3rem .6rem;
padding: 0 .6rem;
font-size: 1rem;
font-weight: 400;
max-width: fit-content;
line-height: 1.6;
&.stable {
background-color: #DFF6D5;

26
sass/_sdks.scss Normal file
View file

@ -0,0 +1,26 @@
#sdk-purpose-selector {
display: flex;
flex-direction: row;
gap: 3rem;
justify-content: center;
border: transparent;
input {
display: none;
}
label {
cursor: pointer;
user-select: none;
font-weight: 700;
font-size: 1.25rem;
}
input[type="radio"]:checked+label {
border-bottom: 3px solid black;
}
}
.hidden {
display: none;
}

View file

@ -1,13 +1,10 @@
.servers {
padding-inline: 2rem;
p {
text-align: center;
font-weight: 400;
font-size: 1.125rem;
line-height: 120%;
margin: 0 auto 4rem auto;
max-width: 40rem;
text-align: center;
font-weight: 400;
font-size: 1.125rem;
line-height: 120%;
margin: 0 auto 4rem auto;
}
}

View file

@ -11,6 +11,7 @@
@import '_clients';
@import '_bridges';
@import '_servers';
@import '_sdks';
@import '_otwsu';
@import '_guardians';
@import '_legacy-docs';

View file

@ -0,0 +1,13 @@
document.addEventListener("DOMContentLoaded", (event) => {
let selector = document.getElementById("sdk-purpose-selector");
for (const panelOption of selector.children) {
panelOption.addEventListener("change", (event) => {
let allPanels = document.getElementsByClassName("panel");
for (const panel of allPanels) {
panel.classList.add("hidden");
}
let panel = document.getElementById(panelOption.id + "-panel");
panel.classList.remove("hidden");
});
}
});

49
static/js/sdks.js Normal file
View file

@ -0,0 +1,49 @@
import { AllOfFilter, AnyOfFilter, refreshCardsView } from "./projects.js";
document.addEventListener('DOMContentLoaded', (event) => {
// Client SDKs
var clientFilters = [];
let clientMaturityFilter = new AnyOfFilter("client-sdks-filter-maturity", "client-sdks", clientFilters);
let clientLicenceFilter = new AnyOfFilter("client-sdks-filter-licence", "client-sdks", clientFilters);
let clientLanguageFilter = new AnyOfFilter("client-sdks-filter-language", "client-sdks", clientFilters);
clientFilters.push(
clientMaturityFilter,
clientLicenceFilter,
clientLanguageFilter
);
refreshCardsView("client-sdks", clientFilters);
for (const filter of clientFilters) {
filter.refreshActiveState();
}
// Bot SDKs
var botFilters = [];
let botMaturityFilter = new AnyOfFilter("bot-sdks-filter-maturity", "bot-sdks", botFilters);
let botLicenceFilter = new AnyOfFilter("bot-sdks-filter-licence", "bot-sdks", botFilters);
let botLanguageFilter = new AnyOfFilter("bot-sdks-filter-language", "bot-sdks", botFilters);
botFilters.push(
botMaturityFilter,
botLicenceFilter,
botLanguageFilter
);
refreshCardsView("bot-sdks", botFilters);
for (const filter of botFilters) {
filter.refreshActiveState();
}
// Bridge SDKs
var bridgeFilters = [];
let bridgeMaturityFilter = new AnyOfFilter("bridge-sdks-filter-maturity", "bridge-sdks", bridgeFilters);
let bridgeLicenceFilter = new AnyOfFilter("bridge-sdks-filter-licence", "bridge-sdks", bridgeFilters);
let bridgeLanguageFilter = new AnyOfFilter("bridge-sdks-filter-language", "bridge-sdks", bridgeFilters);
bridgeFilters.push(
bridgeMaturityFilter,
bridgeLicenceFilter,
bridgeLanguageFilter
);
refreshCardsView("bridge-sdks", bridgeFilters);
for (const filter of bridgeFilters) {
filter.refreshActiveState();
}
})

View file

@ -1,7 +1,9 @@
{% extends "page.html" %}
{% import "macros/clients.html" as clients %}
{% block head_extra %}
<noscript><link rel="stylesheet" href="/no-js.css" /></noscript>
<noscript>
<link rel="stylesheet" href="/no-js.css" />
</noscript>
<script type="module" src="/js/clients.js"></script>
{% endblock head_extra%}
{% block content %}
@ -13,7 +15,7 @@
</div>
</div>
<div class="clients_page">
<div class="content clients_page">
{{ page.content | safe }}

View file

@ -1,4 +1,11 @@
{% extends "page.html" %}
{% block head_extra %}
<noscript>
<link rel="stylesheet" href="/no-js.css" />
</noscript>
<script type="module" src="/js/sdks.js"></script>
<script type="module" src="/js/panel-selector.js"></script>
{% endblock head_extra%}
{% block content %}
<div class="page-header">
<div class="hero-block">
@ -7,7 +14,7 @@
</div>
</div>
<div class="content">
<div class="content sdks-page">
{{ page.content | safe }}

View file

@ -1,6 +1,8 @@
{% extends "page.html" %}
{% block head_extra %}
<noscript><link rel="stylesheet" href="/no-js.css" /></noscript>
<noscript>
<link rel="stylesheet" href="/no-js.css" />
</noscript>
<script type="module" src="/js/servers.js"></script>
{% endblock head_extra%}
{% block content %}
@ -10,7 +12,7 @@
<p>{{ page.extra.summary }}</p>
</div>
</div>
<div class="servers">
<div class="content servers">
<p>{{ page.content | safe }}</p>
</div>
{% endblock content %}

117
templates/macros/sdks.html Normal file
View file

@ -0,0 +1,117 @@
{% macro sdks_panel(type) %}
{% set sdks_data = load_data(path="content/ecosystem/sdks/sdks.toml") %}
{% set licences = [] %}
{% set languages = [] %}
{% for sdk in sdks_data.sdks %}
{% set_global licences = licences | concat(with=sdk.licence) %}
{% set_global languages = languages | concat(with=sdk.language) %}
{% endfor %}
{% set licences = licences | unique | sort %}
{% set languages = languages | unique | sort %}
{% set partial_path = "partials/sdks/" ~ type ~ ".md" %}
<div id="purpose-{{ type }}-panel" class="panel">
<p>
{{ load_data(path=partial_path) | markdown | safe }}
</p>
<div id="{{ type }}-sdks-filters" class="filters">
<div class="filter-wrap">
<div id="{{ type }}-sdks-filter-maturity" class="filter">
Maturity
<div class="divider"></div>
<img src="/assets/down-arrow.svg">
</div>
<div id="{{ type }}-sdks-filter-maturity-menu" class="filter-menu">
<p>The SDK can support any of the maturity levels checked.</p>
<div class="filter-option">
<input id="maturity-stable" type="checkbox" checked>
<label for="maturity-stable">Stable</label>
</div>
<div class="filter-option">
<input id="maturity-beta" type="checkbox" checked>
<label for="maturity-beta">Beta</label>
</div>
<div class="filter-option">
<input id="maturity-alpha" type="checkbox" checked>
<label for="maturity-alpha">Alpha</label>
</div>
<div class="filter-option">
<input id="maturity-obsolete" type="checkbox">
<label for="maturity-obsolete">Obsolete</label>
</div>
<div class="reset-links">Select <a>all</a> - <a>none</a></div>
</div>
</div>
<div class="filter-wrap">
<div id="{{ type }}-sdks-filter-licence" class="filter">
Licence
<div class="divider"></div>
<img src="/assets/down-arrow.svg">
</div>
<div id="{{ type }}-sdks-filter-licence-menu" class="filter-menu">
<p>The client can support any of the licences checked.</p>
{% for licence in licences %}
<div class="filter-option">
<input id="licence-{{ licence | slugify }}" type="checkbox" checked>
<label for="licence-{{ licence | slugify }}">{{ licence }}</label>
</div>
{% endfor %}
<div class="reset-links">Select <a>all</a> - <a>none</a></div>
</div>
</div>
<div class="filter-wrap">
<div id="{{ type }}-sdks-filter-language" class="filter">
Language
<div class="divider"></div>
<img src="/assets/down-arrow.svg">
</div>
<div id="{{ type }}-sdks-filter-language-menu" class="filter-menu">
<p>The client must support any of the languages checked.</p>
{% for language in languages %}
<div class="filter-option">
<input id="language-{{ language | slugify }}" type="checkbox" checked>
<label for="language-{{ language | slugify }}">{{ language }}</label>
</div>
{% endfor %}
<div class="reset-links">Select <a>all</a> - <a>none</a></div>
</div>
</div>
</div>
<div id="{{ type }}-sdks" class="projects-card-deck">
{% for sdk in sdks_data.sdks | sort(attribute="maturity") | reverse %}
{% if sdk.purpose is containing(type) %}
<div>
<div
class="project-card maturity-{{ sdk.maturity | lower }} licence-{{ sdk.licence | slugify }} language-{{ sdk.language | slugify }}">
<div class="title-row">
<h3>{{ sdk.name }}</h3>
<div class="maturity {{ sdk.maturity | lower }}">{{ sdk.maturity }}</div>
</div>
<div class="author">{{ sdk.maintainer }}</div>
<div class="licence-language">
<div class="pill">{{ sdk.licence }}</div>
<div class="pill">{{ sdk.language }}</div>
</div>
{% if sdk.description %}<p>{{ sdk.description }}</p>{% endif %}
<div class="server-links">
{% if sdk.repository %}
<a href="{{ sdk.repository }}">
{{ load_data(path="/assets/projects/repo.svg") | safe }}
Repository
</a>
{% endif %}
{% if sdk.room %}
<a href="https://matrix.to/#/{{ sdk.room }}">
{{ load_data(path="/assets/projects/matrix.svg") | safe }}
Matrix Room
</a>
{% endif %}
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endmacro %}

View file

@ -79,21 +79,24 @@
{% for server in servers_data.servers | sort(attribute="maturity") | reverse %}
<div>
<div class="project-card {{ srvutils::classes(server=server) }}">
<h3>{{ server.name }} <div class="maturity {{ server.maturity | lower }}">{{ server.maturity }}</div></h3>
<div class="title-row">
<h3>{{ server.name }}</h3>
<div class="maturity {{ server.maturity | lower }}">{{ server.maturity }}</div>
</div>
<div>{{ server.licence }} {{ server.language }}</div>
<span>{{ server.description | safe }}</span>
<div class="server-links">
{% if server.repository %}
<a href="{{ server.repository }}">
{{ load_data(path="/assets/projects/repo.svg") | safe }}
Repository
</a>
<a href="{{ server.repository }}">
{{ load_data(path="/assets/projects/repo.svg") | safe }}
Repository
</a>
{% endif %}
{% if server.room %}
<a href="https://matrix.to/#/{{ server.room }}">
{{ load_data(path="/assets/projects/matrix.svg") | safe }}
Matrix Room
</a>
<a href="https://matrix.to/#/{{ server.room }}">
{{ load_data(path="/assets/projects/matrix.svg") | safe }}
Matrix Room
</a>
{% endif %}
</div>
</div>

View file

@ -0,0 +1,22 @@
{% import "macros/sdks.html" as sdkutils %}
<fieldset id="sdk-purpose-selector">
<input type="radio" name="sdk-purpose" id="purpose-client" checked />
<label for="purpose-client">Client SDKs</label>
<input type="radio" name="sdk-purpose" id="purpose-bot" />
<label for="purpose-bot">Bot SDKs</label>
<input type="radio" name="sdk-purpose" id="purpose-bridge">
<label for="purpose-bridge">Bridge SDKs</label>
</fieldset>
<div id="sdks-panels">
{{ sdkutils::sdks_panel(type="client") }}
{{ sdkutils::sdks_panel(type="bot") }}
{{ sdkutils::sdks_panel(type="bridge") }}
</div>
<div id="filters-overlay"></div>

View file

@ -1,30 +0,0 @@
{% set sdks = load_data(path="content/ecosystem/sdks/sdks.toml") %}
<table>
<thead>
<tr>
<th>Project</th>
<th>Language</th>
<th>License</th>
<th>Repository</th>
</tr>
</thead>
<tbody>
{% for name, sdk in sdks %}
{% if not featured and sdk.featured_in is not containing(type) %}
{% set display = true %}
{% elif featured and sdk.featured_in is containing(type) %}
{% set display = true %}
{% else %}
{% set display = false %}
{% endif %}
{% if sdk.purpose is containing(type) and display %}
<tr>
<td>{{ name }}</td>
<td>{{ sdk.language }}</td>
<td>{{ sdk.license }}</td>
<td><a href="{{ sdk.repository }}">Link</a></td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>