diff --git a/content/ecosystem/sdks/index.md b/content/ecosystem/sdks/index.md index ffaf69bae..62d476b69 100644 --- a/content/ecosystem/sdks/index.md +++ b/content/ecosystem/sdks/index.md @@ -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() }} diff --git a/content/ecosystem/sdks/sdks.toml b/content/ecosystem/sdks/sdks.toml index 397c4f7af..871f04565 100644 --- a/content/ecosystem/sdks/sdks.toml +++ b/content/ecosystem/sdks/sdks.toml @@ -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. +""" diff --git a/partials/sdks/bot.md b/partials/sdks/bot.md new file mode 100644 index 000000000..650d2b7b1 --- /dev/null +++ b/partials/sdks/bot.md @@ -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. diff --git a/partials/sdks/bridge.md b/partials/sdks/bridge.md new file mode 100644 index 000000000..101902217 --- /dev/null +++ b/partials/sdks/bridge.md @@ -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. diff --git a/partials/sdks/client.md b/partials/sdks/client.md new file mode 100644 index 000000000..060d33bad --- /dev/null +++ b/partials/sdks/client.md @@ -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. diff --git a/sass/_base.scss b/sass/_base.scss index da193b3ab..8151aae90 100644 --- a/sass/_base.scss +++ b/sass/_base.scss @@ -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; diff --git a/sass/_clients.scss b/sass/_clients.scss index b0d167ce8..84a3e6b81 100644 --- a/sass/_clients.scss +++ b/sass/_clients.scss @@ -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 { diff --git a/sass/_projects.scss b/sass/_projects.scss index 1ef2dd81a..55550b435 100644 --- a/sass/_projects.scss +++ b/sass/_projects.scss @@ -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; diff --git a/sass/_sdks.scss b/sass/_sdks.scss new file mode 100644 index 000000000..eed8e1177 --- /dev/null +++ b/sass/_sdks.scss @@ -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; +} diff --git a/sass/_servers.scss b/sass/_servers.scss index 740d724a9..3d8605475 100644 --- a/sass/_servers.scss +++ b/sass/_servers.scss @@ -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; } } diff --git a/sass/style.scss b/sass/style.scss index a0641b1f4..48bfdf429 100644 --- a/sass/style.scss +++ b/sass/style.scss @@ -11,6 +11,7 @@ @import '_clients'; @import '_bridges'; @import '_servers'; +@import '_sdks'; @import '_otwsu'; @import '_guardians'; @import '_legacy-docs'; diff --git a/static/js/panel-selector.js b/static/js/panel-selector.js new file mode 100644 index 000000000..3dd7d4f7f --- /dev/null +++ b/static/js/panel-selector.js @@ -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"); + }); + } +}); diff --git a/static/js/sdks.js b/static/js/sdks.js new file mode 100644 index 000000000..32aa0055b --- /dev/null +++ b/static/js/sdks.js @@ -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(); + } +}) diff --git a/templates/ecosystem/clients.html b/templates/ecosystem/clients.html index 71403aeed..52c8e7b08 100644 --- a/templates/ecosystem/clients.html +++ b/templates/ecosystem/clients.html @@ -1,7 +1,9 @@ {% extends "page.html" %} {% import "macros/clients.html" as clients %} {% block head_extra %} - + {% endblock head_extra%} {% block content %} @@ -13,7 +15,7 @@ -
+
{{ page.content | safe }} diff --git a/templates/ecosystem/sdks.html b/templates/ecosystem/sdks.html index a2ebada57..00df76dd3 100644 --- a/templates/ecosystem/sdks.html +++ b/templates/ecosystem/sdks.html @@ -1,4 +1,11 @@ {% extends "page.html" %} +{% block head_extra %} + + + +{% endblock head_extra%} {% block content %} -
+
{{ page.content | safe }} diff --git a/templates/ecosystem/servers.html b/templates/ecosystem/servers.html index 911711241..00dbaa255 100644 --- a/templates/ecosystem/servers.html +++ b/templates/ecosystem/servers.html @@ -1,6 +1,8 @@ {% extends "page.html" %} {% block head_extra %} - + {% endblock head_extra%} {% block content %} @@ -10,7 +12,7 @@

{{ page.extra.summary }}

-
+

{{ page.content | safe }}

{% endblock content %} diff --git a/templates/macros/sdks.html b/templates/macros/sdks.html new file mode 100644 index 000000000..dc783f225 --- /dev/null +++ b/templates/macros/sdks.html @@ -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" %} +
+

+ {{ load_data(path=partial_path) | markdown | safe }} +

+ +
+
+
+ Maturity +
+ +
+
+

The SDK can support any of the maturity levels checked.

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+ Licence +
+ +
+
+

The client can support any of the licences checked.

+ {% for licence in licences %} +
+ + +
+ {% endfor %} + +
+
+
+
+ Language +
+ +
+
+

The client must support any of the languages checked.

+ {% for language in languages %} +
+ + +
+ {% endfor %} + +
+
+
+ +
+ {% for sdk in sdks_data.sdks | sort(attribute="maturity") | reverse %} + {% if sdk.purpose is containing(type) %} +
+
+
+

{{ sdk.name }}

+
{{ sdk.maturity }}
+
+
{{ sdk.maintainer }}
+
+
{{ sdk.licence }}
+
{{ sdk.language }}
+
+ {% if sdk.description %}

{{ sdk.description }}

{% endif %} + +
+
+ {% endif %} + {% endfor %} +
+
+{% endmacro %} diff --git a/templates/shortcodes/all_servers.html b/templates/shortcodes/all_servers.html index 81c4bbdcf..e373d050b 100644 --- a/templates/shortcodes/all_servers.html +++ b/templates/shortcodes/all_servers.html @@ -79,21 +79,24 @@ {% for server in servers_data.servers | sort(attribute="maturity") | reverse %}
-

{{ server.name }}
{{ server.maturity }}

+
+

{{ server.name }}

+
{{ server.maturity }}
+
{{ server.licence }} {{ server.language }}
{{ server.description | safe }}
diff --git a/templates/shortcodes/sdk_deck.html b/templates/shortcodes/sdk_deck.html new file mode 100644 index 000000000..71f991442 --- /dev/null +++ b/templates/shortcodes/sdk_deck.html @@ -0,0 +1,22 @@ +{% import "macros/sdks.html" as sdkutils %} + +
+ + + + + + + + +
+ +
+ {{ sdkutils::sdks_panel(type="client") }} + + {{ sdkutils::sdks_panel(type="bot") }} + + {{ sdkutils::sdks_panel(type="bridge") }} +
+ +
diff --git a/templates/shortcodes/sdk_table.html b/templates/shortcodes/sdk_table.html deleted file mode 100644 index 8e1653f65..000000000 --- a/templates/shortcodes/sdk_table.html +++ /dev/null @@ -1,30 +0,0 @@ -{% set sdks = load_data(path="content/ecosystem/sdks/sdks.toml") %} - - - - - - - - - - - {% 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 %} - - - - - - - {% endif %} - {% endfor %} - -
ProjectLanguageLicenseRepository
{{ name }}{{ sdk.language }}{{ sdk.license }}Link