From 59a0b97cbef62c4ae41ea327ad7283f06c6e466f Mon Sep 17 00:00:00 2001 From: Ash Keel Date: Sat, 18 Feb 2023 01:04:20 +0100 Subject: [PATCH] add templating for api reference --- .gitignore | 3 + .prettierrc | 11 + content/api/_index.md | 6 + content/api/index.md | 0 data/api/v310/api.json | 1539 +++++++++++++++++ layouts/api/list.html | 75 + layouts/index.html | 188 +- layouts/partials/header.html | 20 +- package-lock.json | 79 + package.json | 20 + themes/strimertul/assets/scss/api.scss | 104 ++ themes/strimertul/assets/scss/landing.scss | 5 - themes/strimertul/assets/scss/layout.scss | 18 +- themes/strimertul/assets/scss/main.scss | 2 + .../strimertul/layouts/_default/baseof.html | 4 +- themes/strimertul/layouts/_default/list.html | 2 + .../strimertul/layouts/_default/single.html | 16 +- themes/strimertul/layouts/partials/head.html | 13 +- 18 files changed, 1988 insertions(+), 117 deletions(-) create mode 100644 .prettierrc create mode 100644 content/api/_index.md delete mode 100644 content/api/index.md create mode 100644 data/api/v310/api.json create mode 100644 layouts/api/list.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 themes/strimertul/assets/scss/api.scss diff --git a/.gitignore b/.gitignore index 7b62a71..0769b25 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ /assets/jsconfig.json hugo_stats.json +# I HATE YOU PRETTIER I HATE YOU SO MUCH +node_modules + # Executable may be added to repository hugo.exe hugo.darwin diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b7b5c51 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "overrides": [ + { + "files": ["*.html"], + "options": { + "parser": "go-template" + } + } + ], + "goTemplateBracketSpacing": true +} diff --git a/content/api/_index.md b/content/api/_index.md new file mode 100644 index 0000000..11dc954 --- /dev/null +++ b/content/api/_index.md @@ -0,0 +1,6 @@ +--- +menu: main +title: API reference +--- + +TODO Talk about kilovolt and explain event and RPCs diff --git a/content/api/index.md b/content/api/index.md deleted file mode 100644 index e69de29..0000000 diff --git a/data/api/v310/api.json b/data/api/v310/api.json new file mode 100644 index 0000000..a2fe491 --- /dev/null +++ b/data/api/v310/api.json @@ -0,0 +1,1539 @@ +{ + "twitch/bot-custom-commands": { + "description": "Chatbot custom commands", + "schema": { + "name": "", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "BotCustomCommand", + "kind": "object", + "keys": [ + { + "name": "description", + "description": "Command description", + "kind": "string" + }, + { + "name": "access_level", + "description": "Minimum access level needed to use the command", + "kind": "enum", + "enumValues": [ + "everyone", + "subscriber", + "vip", + "moderators", + "streamer" + ] + }, + { + "name": "response", + "description": "Response template (in Go templating format)", + "kind": "string" + }, + { + "name": "enabled", + "description": "Is the command enabled?", + "kind": "boolean" + } + ] + } + } + }, + "loyalty/points/": { + "description": "Point entry for a given user", + "schema": { + "name": "PointsEntry", + "kind": "object", + "keys": [ + { + "name": "points", + "kind": "unknown" + } + ] + } + }, + "loyalty/@remove-redeem": { + "description": "Remove a redeem from the queue", + "schema": { + "name": "Redeem", + "kind": "object", + "keys": [ + { + "name": "username", + "kind": "string" + }, + { + "name": "display_name", + "kind": "string" + }, + { + "name": "reward", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "price", + "kind": "unknown" + }, + { + "name": "required_info", + "kind": "string" + }, + { + "name": "cooldown", + "kind": "unknown" + } + ] + }, + { + "name": "when", + "kind": "datetime" + }, + { + "name": "request_text", + "kind": "string" + } + ] + }, + "tags": [ + "rpc" + ] + }, + "loyalty/config": { + "description": "General configuration for the loyalty subsystem", + "schema": { + "name": "Config", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "currency", + "kind": "string" + }, + { + "name": "points", + "kind": "object", + "keys": [ + { + "name": "interval", + "kind": "unknown" + }, + { + "name": "amount", + "kind": "unknown" + }, + { + "name": "activity_bonus", + "kind": "unknown" + } + ] + }, + { + "name": "banlist", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + }, + "twitch/stream-info": { + "description": "List of active twitch streams (1 element if live, 0 otherwise)", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "Stream", + "kind": "object", + "keys": [ + { + "name": "id", + "kind": "string" + }, + { + "name": "user_id", + "kind": "string" + }, + { + "name": "user_login", + "kind": "string" + }, + { + "name": "user_name", + "kind": "string" + }, + { + "name": "game_id", + "kind": "string" + }, + { + "name": "game_name", + "kind": "string" + }, + { + "name": "tag_ids", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "is_mature", + "kind": "boolean" + }, + { + "name": "type", + "kind": "string" + }, + { + "name": "title", + "kind": "string" + }, + { + "name": "viewer_count", + "kind": "int" + }, + { + "name": "started_at", + "kind": "datetime" + }, + { + "name": "language", + "kind": "string" + }, + { + "name": "thumbnail_url", + "kind": "string" + } + ] + } + } + }, + "twitch/chat-history": { + "description": "Last chat messages received", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "PrivateMessage", + "kind": "object", + "keys": [ + { + "name": "User", + "kind": "object", + "keys": [ + { + "name": "ID", + "kind": "string" + }, + { + "name": "Name", + "kind": "string" + }, + { + "name": "DisplayName", + "kind": "string" + }, + { + "name": "Color", + "kind": "string" + }, + { + "name": "Badges", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "int", + "kind": "int" + } + } + ] + }, + { + "name": "Raw", + "kind": "string" + }, + { + "name": "Type", + "kind": "int" + }, + { + "name": "RawType", + "kind": "string" + }, + { + "name": "Tags", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "Message", + "kind": "string" + }, + { + "name": "Channel", + "kind": "string" + }, + { + "name": "RoomID", + "kind": "string" + }, + { + "name": "ID", + "kind": "string" + }, + { + "name": "Time", + "kind": "datetime" + }, + { + "name": "Emotes", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "Name", + "kind": "string" + }, + { + "name": "ID", + "kind": "string" + }, + { + "name": "Count", + "kind": "int" + }, + { + "name": "Positions", + "kind": "array", + "element": { + "name": "EmotePosition", + "kind": "object", + "keys": [ + { + "name": "Start", + "kind": "int" + }, + { + "name": "End", + "kind": "int" + } + ] + } + } + ], + "isPointer": true + } + }, + { + "name": "Bits", + "kind": "int" + }, + { + "name": "Action", + "kind": "boolean" + }, + { + "name": "FirstMessage", + "kind": "boolean" + }, + { + "name": "Reply", + "kind": "object", + "keys": [ + { + "name": "ParentMsgID", + "kind": "string" + }, + { + "name": "ParentUserID", + "kind": "string" + }, + { + "name": "ParentUserLogin", + "kind": "string" + }, + { + "name": "ParentDisplayName", + "kind": "string" + }, + { + "name": "ParentMsgBody", + "kind": "string" + } + ], + "isPointer": true + }, + { + "name": "CustomRewardID", + "kind": "string" + } + ] + } + }, + "tags": [ + "history" + ] + }, + "twitch/ev/eventsub-event": { + "description": "On Eventsub event received", + "schema": { + "name": "NotificationMessagePayload", + "kind": "object", + "keys": [ + { + "name": "subscription", + "kind": "object", + "keys": [ + { + "name": "id", + "kind": "string" + }, + { + "name": "type", + "kind": "string" + }, + { + "name": "version", + "kind": "string" + }, + { + "name": "status", + "kind": "string" + }, + { + "name": "condition", + "kind": "object", + "keys": [ + { + "name": "broadcaster_user_id", + "kind": "string" + }, + { + "name": "from_broadcaster_user_id", + "kind": "string" + }, + { + "name": "to_broadcaster_user_id", + "kind": "string" + }, + { + "name": "reward_id", + "kind": "string" + }, + { + "name": "client_id", + "kind": "string" + }, + { + "name": "extension_client_id", + "kind": "string" + }, + { + "name": "user_id", + "kind": "string" + } + ] + }, + { + "name": "transport", + "kind": "object", + "keys": [ + { + "name": "method", + "kind": "string" + }, + { + "name": "callback", + "kind": "string" + }, + { + "name": "secret", + "kind": "string" + }, + { + "name": "session_id", + "kind": "string" + }, + { + "name": "connected_at", + "kind": "string" + }, + { + "name": "disconnected_at", + "kind": "string" + } + ] + }, + { + "name": "created_at", + "kind": "object", + "keys": [ + { + "name": "Time", + "kind": "datetime" + } + ] + }, + { + "name": "cost", + "kind": "int" + } + ] + }, + { + "name": "event", + "kind": "array", + "element": { + "name": "uint8", + "kind": "int" + } + }, + { + "name": "date", + "kind": "datetime" + } + ] + }, + "tags": [ + "event" + ] + }, + "twitch/@send-chat-message": { + "description": "Send plain text chat message", + "schema": { + "name": "string", + "kind": "string" + }, + "tags": [ + "rpc" + ] + }, + "twitch/ev/chat-message": { + "description": "On chat message received", + "schema": { + "name": "PrivateMessage", + "kind": "object", + "keys": [ + { + "name": "User", + "kind": "object", + "keys": [ + { + "name": "ID", + "kind": "string" + }, + { + "name": "Name", + "kind": "string" + }, + { + "name": "DisplayName", + "kind": "string" + }, + { + "name": "Color", + "kind": "string" + }, + { + "name": "Badges", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "int", + "kind": "int" + } + } + ] + }, + { + "name": "Raw", + "kind": "string" + }, + { + "name": "Type", + "kind": "int" + }, + { + "name": "RawType", + "kind": "string" + }, + { + "name": "Tags", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "Message", + "kind": "string" + }, + { + "name": "Channel", + "kind": "string" + }, + { + "name": "RoomID", + "kind": "string" + }, + { + "name": "ID", + "kind": "string" + }, + { + "name": "Time", + "kind": "datetime" + }, + { + "name": "Emotes", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "Name", + "kind": "string" + }, + { + "name": "ID", + "kind": "string" + }, + { + "name": "Count", + "kind": "int" + }, + { + "name": "Positions", + "kind": "array", + "element": { + "name": "EmotePosition", + "kind": "object", + "keys": [ + { + "name": "Start", + "kind": "int" + }, + { + "name": "End", + "kind": "int" + } + ] + } + } + ], + "isPointer": true + } + }, + { + "name": "Bits", + "kind": "int" + }, + { + "name": "Action", + "kind": "boolean" + }, + { + "name": "FirstMessage", + "kind": "boolean" + }, + { + "name": "Reply", + "kind": "object", + "keys": [ + { + "name": "ParentMsgID", + "kind": "string" + }, + { + "name": "ParentUserID", + "kind": "string" + }, + { + "name": "ParentUserLogin", + "kind": "string" + }, + { + "name": "ParentDisplayName", + "kind": "string" + }, + { + "name": "ParentMsgBody", + "kind": "string" + } + ], + "isPointer": true + }, + { + "name": "CustomRewardID", + "kind": "string" + } + ] + }, + "tags": [ + "event" + ] + }, + "twitch/auth-keys": { + "description": "User access token for the twitch subsystem", + "schema": { + "name": "AuthResponse", + "kind": "object", + "keys": [ + { + "name": "access_token", + "kind": "string" + }, + { + "name": "refresh_token", + "kind": "string" + }, + { + "name": "expires_in", + "kind": "int" + }, + { + "name": "scope", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "Time", + "kind": "datetime" + } + ] + } + }, + "twitch/bot-modules/alerts/config": { + "description": "Configuration of chat bot alerts", + "schema": { + "name": "BotAlertsConfig", + "kind": "object", + "keys": [ + { + "name": "follow", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable chat message alert on follow", + "kind": "boolean" + }, + { + "name": "messages", + "description": "List of message to write on follow, one at random will be picked", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + }, + { + "name": "subscription", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable chat message alert on subscription", + "kind": "boolean" + }, + { + "name": "messages", + "description": "List of message to write on subscription, one at random will be picked", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "variations", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "min_streak", + "kind": "int", + "isPointer": true + }, + { + "name": "is_gifted", + "kind": "boolean", + "isPointer": true + }, + { + "name": "messages", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + } + ] + }, + { + "name": "gift_sub", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable chat message alert on gifted subscription", + "kind": "boolean" + }, + { + "name": "messages", + "description": "List of message to write on gifted subscription, one at random will be picked", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "variations", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "min_cumulative", + "kind": "int", + "isPointer": true + }, + { + "name": "is_anonymous", + "kind": "boolean", + "isPointer": true + }, + { + "name": "messages", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + } + ] + }, + { + "name": "raid", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable chat message alert on raid", + "kind": "boolean" + }, + { + "name": "messages", + "description": "List of message to write on raid, one at random will be picked", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "variations", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "min_viewers", + "kind": "int", + "isPointer": true + }, + { + "name": "messages", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + } + ] + }, + { + "name": "cheer", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable chat message alert on cheer", + "kind": "boolean" + }, + { + "name": "messages", + "description": "List of message to write on cheer, one at random will be picked", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + }, + { + "name": "variations", + "kind": "array", + "element": { + "name": "", + "kind": "object", + "keys": [ + { + "name": "min_amount", + "kind": "int", + "isPointer": true + }, + { + "name": "messages", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + } + ] + } + ] + } + }, + "twitch/config": { + "description": "General configuration for the Twitch subsystem", + "schema": { + "name": "Config", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable subsystem", + "kind": "boolean" + }, + { + "name": "enable_bot", + "description": "Enable the chatbot", + "kind": "boolean" + }, + { + "name": "api_client_id", + "description": "Twitch API App Client ID", + "kind": "string" + }, + { + "name": "api_client_secret", + "description": "Twitch API App Client Secret", + "kind": "string" + } + ] + } + }, + "twitch/bot-modules/timers/config": { + "description": "Configuration of chat bot timers", + "schema": { + "name": "BotTimersConfig", + "kind": "object", + "keys": [ + { + "name": "timers", + "description": "List of timers as a dictionary", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "BotTimer", + "kind": "object", + "keys": [ + { + "name": "enabled", + "description": "Enable the timer", + "kind": "boolean" + }, + { + "name": "name", + "description": "Timer name (must be unique)", + "kind": "string" + }, + { + "name": "minimum_chat_activity", + "description": "Minimum chat messages in the last 5 minutes for timer to trigger", + "kind": "int" + }, + { + "name": "minimum_delay", + "description": "Minimum amount of time (in seconds) that needs to pass before it triggers again", + "kind": "int" + }, + { + "name": "messages", + "description": "Messages to write (randomly chosen)", + "kind": "array", + "element": { + "name": "string", + "kind": "string" + } + } + ] + } + } + ] + } + }, + "loyalty/@create-redeem": { + "description": "Create a new pending redeem", + "schema": { + "name": "Redeem", + "kind": "object", + "keys": [ + { + "name": "username", + "kind": "string" + }, + { + "name": "display_name", + "kind": "string" + }, + { + "name": "reward", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "price", + "kind": "unknown" + }, + { + "name": "required_info", + "kind": "string" + }, + { + "name": "cooldown", + "kind": "unknown" + } + ] + }, + { + "name": "when", + "kind": "datetime" + }, + { + "name": "request_text", + "kind": "string" + } + ] + }, + "tags": [ + "rpc" + ] + }, + "http/config": { + "description": "General server configuration", + "schema": { + "name": "ServerConfig", + "kind": "object", + "keys": [ + { + "name": "bind", + "kind": "string" + }, + { + "name": "enable_static_server", + "kind": "boolean" + }, + { + "name": "path", + "kind": "string" + }, + { + "name": "kv_password", + "kind": "string" + } + ] + } + }, + "twitch/eventsub-history": { + "description": "Last eventsub notifications received", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "NotificationMessagePayload", + "kind": "object", + "keys": [ + { + "name": "subscription", + "kind": "object", + "keys": [ + { + "name": "id", + "kind": "string" + }, + { + "name": "type", + "kind": "string" + }, + { + "name": "version", + "kind": "string" + }, + { + "name": "status", + "kind": "string" + }, + { + "name": "condition", + "kind": "object", + "keys": [ + { + "name": "broadcaster_user_id", + "kind": "string" + }, + { + "name": "from_broadcaster_user_id", + "kind": "string" + }, + { + "name": "to_broadcaster_user_id", + "kind": "string" + }, + { + "name": "reward_id", + "kind": "string" + }, + { + "name": "client_id", + "kind": "string" + }, + { + "name": "extension_client_id", + "kind": "string" + }, + { + "name": "user_id", + "kind": "string" + } + ] + }, + { + "name": "transport", + "kind": "object", + "keys": [ + { + "name": "method", + "kind": "string" + }, + { + "name": "callback", + "kind": "string" + }, + { + "name": "secret", + "kind": "string" + }, + { + "name": "session_id", + "kind": "string" + }, + { + "name": "connected_at", + "kind": "string" + }, + { + "name": "disconnected_at", + "kind": "string" + } + ] + }, + { + "name": "created_at", + "kind": "object", + "keys": [ + { + "name": "Time", + "kind": "datetime" + } + ] + }, + { + "name": "cost", + "kind": "int" + } + ] + }, + { + "name": "event", + "kind": "array", + "element": { + "name": "uint8", + "kind": "int" + } + }, + { + "name": "date", + "kind": "datetime" + } + ] + } + }, + "tags": [ + "history" + ] + }, + "twitch/chat-activity": { + "description": "Number of chat messages in the last minute", + "schema": { + "name": "int", + "kind": "int" + } + }, + "twitch/bot-config": { + "description": "General configuration for the Twitch chatbot", + "schema": { + "name": "BotConfig", + "kind": "object", + "keys": [ + { + "name": "username", + "description": "Chatbot username (for internal use, ignored by Twitch)", + "kind": "string" + }, + { + "name": "oauth", + "description": "OAuth key for IRC authentication", + "kind": "string" + }, + { + "name": "channel", + "description": "Twitch channel to join and use", + "kind": "string" + }, + { + "name": "chat_history", + "description": "How many messages to keep in twitch/chat-history", + "kind": "int" + } + ] + } + }, + "loyalty/rewards": { + "description": "List of available rewards", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "Reward", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "price", + "kind": "unknown" + }, + { + "name": "required_info", + "kind": "string" + }, + { + "name": "cooldown", + "kind": "unknown" + } + ] + } + } + }, + "loyalty/goals": { + "description": "List of all goals", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "Goal", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "total", + "kind": "unknown" + }, + { + "name": "contributed", + "kind": "unknown" + }, + { + "name": "contributors", + "kind": "dictionary", + "key": { + "name": "string", + "kind": "string" + }, + "element": { + "name": "int64", + "kind": "unknown" + } + } + ] + } + } + }, + "loyalty/redeem-queue": { + "description": "All pending redeems", + "schema": { + "name": "", + "kind": "array", + "element": { + "name": "Redeem", + "kind": "object", + "keys": [ + { + "name": "username", + "kind": "string" + }, + { + "name": "display_name", + "kind": "string" + }, + { + "name": "reward", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "price", + "kind": "unknown" + }, + { + "name": "required_info", + "kind": "string" + }, + { + "name": "cooldown", + "kind": "unknown" + } + ] + }, + { + "name": "when", + "kind": "datetime" + }, + { + "name": "request_text", + "kind": "string" + } + ] + } + } + }, + "loyalty/ev/new-redeem": { + "description": "On reward redeemed", + "schema": { + "name": "Redeem", + "kind": "object", + "keys": [ + { + "name": "username", + "kind": "string" + }, + { + "name": "display_name", + "kind": "string" + }, + { + "name": "reward", + "kind": "object", + "keys": [ + { + "name": "enabled", + "kind": "boolean" + }, + { + "name": "id", + "kind": "string" + }, + { + "name": "name", + "kind": "string" + }, + { + "name": "description", + "kind": "string" + }, + { + "name": "image", + "kind": "string" + }, + { + "name": "price", + "kind": "unknown" + }, + { + "name": "required_info", + "kind": "string" + }, + { + "name": "cooldown", + "kind": "unknown" + } + ] + }, + { + "name": "when", + "kind": "datetime" + }, + { + "name": "request_text", + "kind": "string" + } + ] + }, + "tags": [ + "event" + ] + } +} diff --git a/layouts/api/list.html b/layouts/api/list.html new file mode 100644 index 0000000..cd73bc6 --- /dev/null +++ b/layouts/api/list.html @@ -0,0 +1,75 @@ +{{ define "schema" }} + + {{ with .element }} + {{ with $.name }} +
{{ . }}:
+ {{ end }} + arrayOf [ + {{ template "schema" . }} + ] + {{ else }} + {{ if (eq .name .kind) }} + {{ .kind }} + {{ else }} + {{ with .name }} +
+ {{ . }}{{ if $.isPointer }} + * + {{ end }}: +
+ {{ end }} + {{ .kind }} + {{ end }} + {{ with .keys }} + { + {{ range . }} +
    +
  • {{ template "schema" . }}
  • +
+ {{ end }} + } + {{ end }} + {{ end }} +
+{{ end }} + +{{ define "main" }} + {{ $keys := .Site.Data.api.v310.api }} +
+ +
+
{{ .Content }}
+
+ {{ range $key, $spec := $keys }} +
+
+

+ {{ $key }} {{ range .tags }} + {{ . }} + {{ end }} +

+ {{ with .description }} +
{{ . }}
+ {{ end }} + {{ with .schema }} +
+ {{ template "schema" . }} +
+ {{ end }} +
+
+ {{ end }} +
+
+
+{{ end }} diff --git a/layouts/index.html b/layouts/index.html index b506b38..4d0ed38 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,101 +1,103 @@ {{ define "main" }} -
-
-
-

HEY PUT TEXT HERE!

- -
-
-
-
-
-
-
-
-
One API for everything
-

- Build overlays and tooling with easy access to Twitch alerts, chat - messages and more through a single websocket interface. The API - strives for simplicity with a - documented protocol, but there are also officially supported bindings for popular - languages such as - Typescript, - Go - and - Python. -

-
- {{ $image := resources.Get "landing/websocket.svg" }} - +
+
+
+

HEY PUT TEXT HERE!

+
-
-
-
-
- {{ $image := resources.Get "landing/rewards.png" }} - -
-
No Twitch Affiliate?
-

- The built-in loyalty system lets regular viewers accrue points, - claim rewards and contribute towards community goals. -

+
+
+
+
+
+
+
+
One API for everything
+

+ Build overlays and tooling with easy access to Twitch alerts, + chat messages and more through a single websocket interface. The + API strives for simplicity with a + documented protocol, but there are also officially supported bindings for popular + languages such as + Typescript, + Go + and + Python. +

+
+ {{ $image := resources.Get "landing/websocket.svg" }} +
- -
-
-
-
-
-
Keep total control of your tech
-

- Strimertül runs completely in your computer and has no remote - components. -

-
- {{ $image := resources.Get "landing/downloads.png" }} - -
-
-
-
-
-
- {{ $image := resources.Get "landing/AGPLv3_Logo.svg" }} - -
-
Free and won't turn evil
-

- strimertül is free and open source under the - AGPLv3, a strong - copyleft license, meaning we couldn't close it down even if we wanted! -

+
+
+
+
+ {{ $image := resources.Get "landing/rewards.png" }} + +
+
No Twitch Affiliate?
+

+ The built-in loyalty system lets regular viewers accrue points, + claim rewards and contribute towards community goals. +

+
- -
-
-
+ +
+
+
+
+
Keep total control of your tech
+

+ Strimertül runs completely in your computer and has no remote + components. +

+
+ {{ $image := resources.Get "landing/downloads.png" }} + +
+
+
+
+
+
+ {{ $image := resources.Get "landing/AGPLv3_Logo.svg" }} + +
+
Free and won't turn evil
+

+ strimertül is free and open source under the + AGPLv3, a strong + copyleft license, meaning we couldn't close it down even if we wanted! +

+
+
+
+
+ + {{ end }} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 95b5933..9d9e7fc 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -4,9 +4,23 @@ strimertül diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7868cc9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,79 @@ +{ + "name": "website", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "website", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "prettier": "^2.8.4", + "prettier-plugin-go-template": "^0.0.13" + } + }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-go-template": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.13.tgz", + "integrity": "sha512-gG/xT5kd+kCzoMaTchXvdfBdsunyRCV6G8cgdPGPd2V5JGGKXUG7SjzBKU7jaGh2RTeblcAdBb/E+S/duOAMsA==", + "dev": true, + "dependencies": { + "ulid": "^2.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "prettier": "^2.0.0" + } + }, + "node_modules/ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", + "dev": true, + "bin": { + "ulid": "bin/cli.js" + } + } + }, + "dependencies": { + "prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true + }, + "prettier-plugin-go-template": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.13.tgz", + "integrity": "sha512-gG/xT5kd+kCzoMaTchXvdfBdsunyRCV6G8cgdPGPd2V5JGGKXUG7SjzBKU7jaGh2RTeblcAdBb/E+S/duOAMsA==", + "dev": true, + "requires": { + "ulid": "^2.3.0" + } + }, + "ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4eaca4e --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "website", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git@github.com-ash:strimertul/strimertul.github.io.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "prettier": "^2.8.4", + "prettier-plugin-go-template": "^0.0.13" + } +} diff --git a/themes/strimertul/assets/scss/api.scss b/themes/strimertul/assets/scss/api.scss new file mode 100644 index 0000000..908122f --- /dev/null +++ b/themes/strimertul/assets/scss/api.scss @@ -0,0 +1,104 @@ +.apidocs { + display: grid; + grid-template-rows: 1fr; + grid-template-columns: 250px 1fr; + @media only screen and (max-width: $mobile) { + grid-template-columns: 1fr; + & > nav { + display: none; + } + } + & > nav, + & > .doc { + grid-row: 1; + padding: 1rem; + } + & > nav { + padding: 0; + grid-column: 1; + ul { + list-style-type: none; + margin: 0; + padding: 0; + li { + display: flex; + align-items: stretch; + justify-content: stretch; + transition: all 100ms; + &:nth-child(odd) { + background-color: rgba(255, 255, 255, 0.02); + } + &:hover { + background-color: rgba(255, 255, 255, 0.05); + } + a { + flex: 1; + padding: 0.5rem; + color: $teal10; + } + a:hover { + color: $teal12; + } + } + } + } + & > .doc { + grid-column: 2; + } + .monotitle { + font-family: "Iosevka Web", monospace; + } + .reference { + .api { + padding-bottom: 15px; + .tag { + background-color: #5699e1; + color: rgb(239, 245, 249); + font-size: 12px; + text-transform: uppercase; + display: inline-block; + padding: 3px 5px; + border-radius: 8px; + &.rpc { + background-color: #8e56e1; + } + &.event { + background-color: #018937; + } + &.history { + background-color: #037f88; + } + } + } + } +} + +.schema { + margin-top: 1rem; + .nameblock { + display: none; + } + li { + list-style-type: none; + & > code > .nameblock { + display: inline-flex; + & > .name { + &::before, + &::after { + content: '"'; + } + } + } + } + ul { + padding: 0; + margin: 0; + margin-left: 2rem; + } + .name { + color: $yellow11; + } + .kind { + color: $grass10; + } +} diff --git a/themes/strimertul/assets/scss/landing.scss b/themes/strimertul/assets/scss/landing.scss index 6f6fcec..996585e 100644 --- a/themes/strimertul/assets/scss/landing.scss +++ b/themes/strimertul/assets/scss/landing.scss @@ -1,9 +1,4 @@ .landing { - .maxw { - max-width: 1000px; - margin: 0 auto; - width: 100%; - } .flex { display: flex; gap: 30px; diff --git a/themes/strimertul/assets/scss/layout.scss b/themes/strimertul/assets/scss/layout.scss index aea16ec..588b16f 100644 --- a/themes/strimertul/assets/scss/layout.scss +++ b/themes/strimertul/assets/scss/layout.scss @@ -6,6 +6,12 @@ body { padding: 0; } +.maxw { + max-width: 1000px; + margin: 0 auto; + width: 100%; +} + a, a:visited { color: $teal11; @@ -44,9 +50,15 @@ p { padding: 5px 14px; text-decoration: none; transition: all 60ms; - &:hover { - background: $gray3; - box-shadow: inset 0 -2px $teal9; + &.current { + background: $gray1; + pointer-events: none; + } + &:not(.current) { + &:hover { + background: $gray3; + box-shadow: inset 0 -2px $teal9; + } } } } diff --git a/themes/strimertul/assets/scss/main.scss b/themes/strimertul/assets/scss/main.scss index b0a9321..355a560 100644 --- a/themes/strimertul/assets/scss/main.scss +++ b/themes/strimertul/assets/scss/main.scss @@ -1,6 +1,8 @@ @import "normalize.scss"; @import url("https://rsms.me/inter/inter.css"); +@import url("https://iosevka-webfonts.github.io/iosevka/iosevka.css"); @import "_vars.scss"; @import "layout.scss"; @import "landing.scss"; +@import "api.scss"; diff --git a/themes/strimertul/layouts/_default/baseof.html b/themes/strimertul/layouts/_default/baseof.html index 55e8ea1..22ef748 100644 --- a/themes/strimertul/layouts/_default/baseof.html +++ b/themes/strimertul/layouts/_default/baseof.html @@ -4,8 +4,8 @@
- {{- partial "header.html" . -}} {{- block "main" . }}{{- end }} {{- - partial "footer.html" . -}} + {{- partial "header.html" . -}} {{- block "main" . }}{{- end }} + {{- partial "footer.html" . -}}
diff --git a/themes/strimertul/layouts/_default/list.html b/themes/strimertul/layouts/_default/list.html index 1477bfb..cd644e6 100644 --- a/themes/strimertul/layouts/_default/list.html +++ b/themes/strimertul/layouts/_default/list.html @@ -1,4 +1,5 @@ {{ define "main" }} +

{{ .Title }}

{{ range .Pages.ByPublishDate.Reverse }}

@@ -8,4 +9,5 @@

{{ end }} +
{{ end }} \ No newline at end of file diff --git a/themes/strimertul/layouts/_default/single.html b/themes/strimertul/layouts/_default/single.html index 38fa958..bad3bbe 100644 --- a/themes/strimertul/layouts/_default/single.html +++ b/themes/strimertul/layouts/_default/single.html @@ -1,8 +1,10 @@ {{ define "main" }} -

{{ .Title }}

-{{ with .Date }} -
- Published on {{.Date | time.Format "2006-01-02" }} {{ if (gt .Lastmod .Date) - }}| Last modified on {{.Lastmod | time.Format "2006-01-02" }} {{ end }} -
-{{ end }} {{ .Content }} {{ end }} +
+

{{ .Title }}

+ {{ with .Date }} +
+ Published on {{.Date | time.Format "2006-01-02" }} {{ if (gt .Lastmod .Date) + }}| Last modified on {{.Lastmod | time.Format "2006-01-02" }} {{ end }} +
+ {{ end }} {{ .Content }} {{ end }} +
diff --git a/themes/strimertul/layouts/partials/head.html b/themes/strimertul/layouts/partials/head.html index 53f0418..462009f 100644 --- a/themes/strimertul/layouts/partials/head.html +++ b/themes/strimertul/layouts/partials/head.html @@ -1,12 +1,17 @@ - {{ $title := print .Site.Title " | " .Title }} {{ if .IsHome }}{{ $title = - .Site.Title }}{{ end }} + {{ $title := print .Site.Title " | " .Title }} + {{ if .IsHome }} + {{ $title = + .Site.Title + }} + {{ end }} {{ $title }} {{ $style := resources.Get "scss/main.scss" | resources.ToCSS (dict - "targetPath" "css/main.css" "enableSourceMap" true ) | minify | - resources.Fingerprint }} + "targetPath" "css/main.css" "enableSourceMap" true ) | minify | + resources.Fingerprint + }}