{"users":[{"id":1,"username":"kelv","name":null,"avatar_template":"/letter_avatar_proxy/v4/letter/k/ac8455/{size}.png","admin":true,"trust_level":1}],"primary_groups":[],"flair_groups":[],"topic_list":{"can_create_topic":false,"more_topics_url":"/c/docs/8?page=1","per_page":30,"top_tags":[],"topics":[{"id":27,"title":"About the docs category","fancy_title":"About the docs category","slug":"about-the-docs-category","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:21:44.638Z","last_posted_at":null,"bumped":true,"bumped_at":"2024-11-25T09:21:44.638Z","archetype":"regular","unseen":false,"pinned":true,"unpinned":null,"excerpt":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":118,"title":"AppEvents Triggers Reference","fancy_title":"AppEvents Triggers Reference","slug":"appevents-triggers-reference","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-26T07:39:36.152Z","last_posted_at":"2024-11-26T07:39:36.326Z","bumped":true,"bumped_at":"2024-11-26T07:42:23.246Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"AppEvents\nThe AppEvent system in Discourse provides a pub/sub mechanism for handling UI updates and component interactions - and these events are triggered via calls of AppEvent.trigger. \nThis topic consolidates a list&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":9,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":67,"title":"Write end-to-end system specs for the Discourse user interface","fancy_title":"Write end-to-end system specs for the Discourse user interface","slug":"write-end-to-end-system-specs-for-the-discourse-user-interface","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/db154887e6d1ea0ff608439c83d15d93c672f7fd.png","created_at":"2024-11-25T09:42:02.023Z","last_posted_at":"2024-11-25T09:42:02.269Z","bumped":true,"bumped_at":"2024-11-26T07:41:57.087Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Background\nRails system specs are used to simulate the actions of a real user using the app in a browser. We use the selenium-webdriver which is what the latest version of Rails uses. The tests run locally and in CI out &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":117,"title":"Docs Index Page","fancy_title":"Docs Index Page","slug":"docs-index-page","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T12:22:19.945Z","last_posted_at":"2024-11-25T12:22:20.189Z","bumped":true,"bumped_at":"2024-11-26T07:39:47.642Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Documentation about extending Discourse with plugins, themes, and theme components, working with the core code, and using the Discourse API. \nUsing the Discourse API\n\nAPI documentation: Discourse REST API Documentation\nA&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":8,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":110,"title":"Create and share a color scheme","fancy_title":"Create and share a color scheme","slug":"create-and-share-a-color-scheme","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/b7fced237ee399d52c634a3ab6fcc9416db65605_2_1024x670.png","created_at":"2024-11-25T09:48:39.337Z","last_posted_at":"2024-11-25T09:48:39.395Z","bumped":true,"bumped_at":"2024-11-26T07:39:47.157Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Discourse now supports importing color schemes from remote repository. Here I will demonstrate how you would go about doing this. \nNavigate to colors and add a color scheme.\nHead to /admin/customize/colors on your site&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":3,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":102,"title":"Create and share a font theme component","fancy_title":"Create and share a font theme component","slug":"create-and-share-a-font-theme-component","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/0ae6fc9bb979b9a1fb102e16c1bd976405c9824b_2_1024x412.png","created_at":"2024-11-25T09:48:09.179Z","last_posted_at":"2024-11-25T09:48:09.241Z","bumped":true,"bumped_at":"2024-11-26T07:39:46.733Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Discourse supports importing themes containing assets from a remote repository. \nThis allows theme authors to share fonts and images. \nCreate a new git repository with the font\nmkdir discourse-roboto-theme\ncd discourse-r&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":74,"title":"Developing Discourse Plugins - Part 6 - Add acceptance tests","fancy_title":"Developing Discourse Plugins - Part 6 - Add acceptance tests","slug":"developing-discourse-plugins-part-6-add-acceptance-tests","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/90bcb2ba22f36c654810af785161f7f90584120f_2_1024x715.png","created_at":"2024-11-25T09:42:14.356Z","last_posted_at":"2024-11-25T09:42:14.452Z","bumped":true,"bumped_at":"2024-11-26T07:39:46.141Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Previous tutorial: Developing Discourse Plugins - Part 5 - Add an admin interface - Developer Guides - Discourse Meta \n\nDid you know that Discourse has two large test suites for its code base? On the server side, our Rub&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":73,"title":"Developing Discourse Plugins - Part 5 - Add an admin interface","fancy_title":"Developing Discourse Plugins - Part 5 - Add an admin interface","slug":"developing-discourse-plugins-part-5-add-an-admin-interface","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/fb052c0c99e6520b5c30c7971908ab28adf99261.png","created_at":"2024-11-25T09:42:12.331Z","last_posted_at":"2024-11-25T09:42:12.421Z","bumped":true,"bumped_at":"2024-11-26T07:39:45.314Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Previous tutorial: Developing Discourse Plugins - Part 4 - Setup git - Developer Guides - Discourse Meta \n\nSometimes site settings aren’t enough of an admin interface for your plugin to work the way you want. For example&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":72,"title":"Developing Discourse Plugins - Part 4 - Setup git","fancy_title":"Developing Discourse Plugins - Part 4 - Setup git","slug":"developing-discourse-plugins-part-4-setup-git","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/40fc5cb060a5bcba5fff53f999846bf4a821dc22.png","created_at":"2024-11-25T09:42:11.814Z","last_posted_at":"2024-11-25T09:42:11.886Z","bumped":true,"bumped_at":"2024-11-26T07:39:44.698Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Previous tutorial: Developing Discourse Plugins - Part 3 - Add custom site settings - Developer Guides - Discourse Meta \n\nNow that your plugin is getting more sophisticated, it’s time to get more sophisticated about how &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":69,"title":"Developing Discourse Plugins - Part 1 - Create a basic plugin","fancy_title":"Developing Discourse Plugins - Part 1 - Create a basic plugin","slug":"developing-discourse-plugins-part-1-create-a-basic-plugin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/f7bbf3a19746ff58c54ad635facb7069036b20e8.png","created_at":"2024-11-25T09:42:09.114Z","last_posted_at":"2024-11-25T09:42:09.320Z","bumped":true,"bumped_at":"2024-11-26T07:39:44.205Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Building a plugin in Discourse can be really simple, once you learn a couple of quirks. The goal of this post is to create a skeleton plugin and introduce you to the basics. \nYour development environment\nMake sure you ha&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":5,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":68,"title":"Discourse toolkit to render forms","fancy_title":"Discourse toolkit to render forms","slug":"discourse-toolkit-to-render-forms","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:42:05.047Z","last_posted_at":"2024-11-25T09:42:05.167Z","bumped":true,"bumped_at":"2024-11-26T07:39:42.446Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Basic Usage\nFormKit exposes a single component as its public API: &lt;Form /&gt;. All other elements are yielded as contextual components, modifiers, or plain data. \nEvery form is composed of one or multiple fields, represen&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":9,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":30,"title":"Reverse engineer the Discourse API","fancy_title":"Reverse engineer the Discourse API","slug":"reverse-engineer-the-discourse-api","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/b5fce10b88375bbc0bf81a621409ae059edcf8f6.png","created_at":"2024-11-25T09:40:55.313Z","last_posted_at":"2024-11-25T09:40:55.375Z","bumped":true,"bumped_at":"2024-11-26T07:39:40.231Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Discourse is backed by a complete JSON api. Anything you can do on the site you can also do using the JSON api. \nMany of the endpoints are properly documented in the discourse_api gem, however some endpoints lack documen&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":0,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":28,"title":"Discourse REST API Documentation","fancy_title":"Discourse REST API Documentation","slug":"discourse-rest-api-documentation","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/c607551e52081d5689a2892e80d32fe8ec50e78f_2_1024x474.gif","created_at":"2024-11-25T09:40:34.773Z","last_posted_at":"2024-11-25T09:40:35.229Z","bumped":true,"bumped_at":"2024-11-25T12:23:16.580Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Discourse API\nPlease view the Discourse API Documentation site for detailed info: \nhttps://docs.discourse.org \n\n:warning: Deprecation Warning!\nOn April 6th, 2020 we dropped support for all non-HTTP header based authent&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":14,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":115,"title":"Discourse Public Data Dump","fancy_title":"Discourse Public Data Dump","slug":"discourse-public-data-dump","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/a918b103e6f9f4ba77725b2d4990a6e4db563c9a_2_1024x512.png","created_at":"2024-11-25T09:49:17.674Z","last_posted_at":"2024-11-25T09:49:17.886Z","bumped":true,"bumped_at":"2024-11-25T09:49:17.886Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Given the advent of AI and the need for large datasets on local development machines, we have pulled together a quick pattern for getting a “workable” copy of all public (visible by anon) data from a Discourse forum. \nKe&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":6,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":114,"title":"Create custom Automations","fancy_title":"Create custom Automations","slug":"create-custom-automations","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:49:16.869Z","last_posted_at":"2024-11-25T09:49:16.951Z","bumped":true,"bumped_at":"2024-11-25T09:49:16.951Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":":information_source: This is a draft, and may need some extra work. \nVocabulary\n\ntrigger: represents the name of the trigger, eg: user_added_to_group\ntriggerable: represents the code logic associated to a trigger, eg: tr&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":113,"title":"Things to consider before deciding to white-label the Discourse Mobile apps","fancy_title":"Things to consider before deciding to white-label the Discourse Mobile apps","slug":"things-to-consider-before-deciding-to-white-label-the-discourse-mobile-apps","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:49:16.343Z","last_posted_at":"2024-11-25T09:49:16.426Z","bumped":true,"bumped_at":"2024-11-25T09:49:16.426Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Since we released the iOS and Android apps a number of people have asked expressed interest in white labeling the Discourse app. \n\n:information_source:  We do not offer a white labeling service and would only consider it&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":3,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":112,"title":"Customize posts' contents with your own styles","fancy_title":"Customize posts&rsquo; contents with your own styles","slug":"customize-posts-contents-with-your-own-styles","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/4c29085d89f3b1893f8731afb803d69e92c41dd4.png","created_at":"2024-11-25T09:49:15.511Z","last_posted_at":"2024-11-25T09:49:15.623Z","bumped":true,"bumped_at":"2024-11-25T09:49:15.623Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Requirements\n:information_source: To be able to use these tips and tricks, you need to be an administrator of either a self-hosted Discourse instance or a Discourse-hosted plan higher than Basic. \nIntroduction\nDiscours&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":9,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":111,"title":"Use the `navigation_menu` query parameter to preview the sidebar or other options","fancy_title":"Use the `navigation_menu` query parameter to preview the sidebar or other options","slug":"use-the-navigation-menu-query-parameter-to-preview-the-sidebar-or-other-options","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:48:39.793Z","last_posted_at":"2024-11-25T09:48:39.865Z","bumped":true,"bumped_at":"2024-11-25T09:48:39.865Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"If you are working on a theme for an existing site and want to preview how it will look with the sidebar or other options for the navigation menu site setting, you can use the ?navigation_menu query parameter. \nThis feat&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":109,"title":"Change the style of a wiki post","fancy_title":"Change the style of a wiki post","slug":"change-the-style-of-a-wiki-post","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/ff4571397efbfcaa015042820ef4e05c74b3c8aa.png","created_at":"2024-11-25T09:48:38.899Z","last_posted_at":"2024-11-25T09:48:38.954Z","bumped":true,"bumped_at":"2024-11-25T09:48:38.954Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"A quick guide to change the style of your wiki posts: \n  \nChange the background color:\nIn your /admin/customize/themes add this CSS under Common &gt; CSS \n.wiki .topic-body .cooked {\n    background-color: #dcffdc; /*light g&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":108,"title":"Alternative icons","fancy_title":"Alternative icons","slug":"alternative-icons","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/2685c3b9b5104b16581ee0b4d16056ab8a3d3c0c_2_1024x650.png","created_at":"2024-11-25T09:48:29.386Z","last_posted_at":"2024-11-25T09:48:29.451Z","bumped":true,"bumped_at":"2024-11-25T09:48:29.451Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"By default, Discourse bundles icons from the excellent FontAwesome library. But there are a lot of free-to-use icon libraries out there. This topic is the home of alternative icon sets. It lists some theme components tha&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":107,"title":"Change icons globally","fancy_title":"Change icons globally","slug":"change-icons-globally","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/1aef937cffc3f80ed97bf2c68312b7e8c5d8073c_2_1024x313.png","created_at":"2024-11-25T09:48:24.368Z","last_posted_at":"2024-11-25T09:48:24.449Z","bumped":true,"bumped_at":"2024-11-25T09:48:24.449Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"This is an easy way to change a Discourse icon globally. \n\n\nRight click on the icon you want to change and select “Inspect element” or “Inspect” (depends on the browser) \n\n\nFind the icon name \n  \n\n\nSearch a new icon here&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":106,"title":"Message Format support for localization","fancy_title":"Message Format support for localization","slug":"message-format-support-for-localization","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/3e7cfb0f2d354577b0c64d29b738eeb249ca0262.png","created_at":"2024-11-25T09:48:17.524Z","last_posted_at":"2024-11-25T09:48:17.659Z","bumped":true,"bumped_at":"2024-11-25T09:48:17.659Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Guidelines for Translators\nIn Discourse all Message Format strings have a key that ends with “_MF”. The Crowdin Editor has a preview that allows you to experiment with various values which is quite helpful for checking y&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":0,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":105,"title":"Add a featured topic list to your Discourse homepage","fancy_title":"Add a featured topic list to your Discourse homepage","slug":"add-a-featured-topic-list-to-your-discourse-homepage","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/02acd38ba0833899e38c15840f0b264e19fec511_2_1024x508.png","created_at":"2024-11-25T09:48:15.169Z","last_posted_at":"2024-11-25T09:48:15.304Z","bumped":true,"bumped_at":"2024-11-25T09:48:15.304Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"In this #howto we’ll add a topic list populated by a tag or a category on top of your homepage’s main topic list, like this: \n  \nAll of the code below can be added to the &lt;/head&gt; (head_tag.html) section of your theme. \nT&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":8,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":104,"title":"Add custom content that only appears on your homepage","fancy_title":"Add custom content that only appears on your homepage","slug":"add-custom-content-that-only-appears-on-your-homepage","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/653eb0e6550564854cf9ed809ba657a619d3576d_2_1024x163.png","created_at":"2024-11-25T09:48:12.094Z","last_posted_at":"2024-11-25T09:48:12.210Z","bumped":true,"bumped_at":"2024-11-25T09:48:12.210Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"A very common situation you’ll find yourself in as a theme developer is the need to create content that only shows on the homepage of your community. \nYou might add some HTML to the “After Header” section of your theme, &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":5,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":103,"title":"Install a new language for Highlight.JS via a theme component","fancy_title":"Install a new language for Highlight.JS via a theme component","slug":"install-a-new-language-for-highlight-js-via-a-theme-component","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:48:09.821Z","last_posted_at":"2024-11-25T09:48:09.910Z","bumped":true,"bumped_at":"2024-11-25T09:48:09.910Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I’ve just added a hook to our HighlightJS code so now you can use the plugin API to add a custom language for Highlight.JS. \nExample (using the beancount language definition): \nconst beancountLang = function(e){var c=&quot;[A&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":101,"title":"Insert text or images anywhere on your site using CSS pseudo-elements","fancy_title":"Insert text or images anywhere on your site using CSS pseudo-elements","slug":"insert-text-or-images-anywhere-on-your-site-using-css-pseudo-elements","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/d2f1e52fb2f9407c9ceea9fe6176802662df0976_2_1024x471.png","created_at":"2024-11-25T09:48:08.291Z","last_posted_at":"2024-11-25T09:48:08.463Z","bumped":true,"bumped_at":"2024-11-25T09:48:08.463Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"So, you want to insert some text or image in your Discourse site. \nRegarding the text in most cases it is sufficient to modify it from /admin/customize/site_texts. \nSometimes, however, it is our desire to add a sentence &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":5,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":100,"title":"Theme modifiers: A brief introduction","fancy_title":"Theme modifiers: A brief introduction","slug":"theme-modifiers-a-brief-introduction","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-11-25T09:47:05.764Z","last_posted_at":"2024-11-25T09:47:05.849Z","bumped":true,"bumped_at":"2024-11-25T09:47:05.849Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"As themes become more ambitious, we’ve been looking for ways to allow them to manipulate core server-side behaviour. While they will never be given the same level as control as plugins, we can provide some predefined hoo&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":2,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":99,"title":"Update themes and plugins to support automatic dark mode","fancy_title":"Update themes and plugins to support automatic dark mode","slug":"update-themes-and-plugins-to-support-automatic-dark-mode","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/b865cf3fc7c32f40cb5601d1ed87192c8d59e83b_2_1024x801.jpeg","created_at":"2024-11-25T09:47:05.234Z","last_posted_at":"2024-11-25T09:47:05.311Z","bumped":true,"bumped_at":"2024-11-25T09:47:05.311Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Previously, all colors in Discourse were stored as SCSS variables. To support automatic dark mode color scheme switching, we have converted these colors in core to custom CSS properties. You can easily see the full list &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":98,"title":"Replace Discourse's default SVG icons with custom icons in a theme","fancy_title":"Replace Discourse&rsquo;s default SVG icons with custom icons in a theme","slug":"replace-discourses-default-svg-icons-with-custom-icons-in-a-theme","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/original/1X/3eacf293f8331bd31b8b0a8e78e349a88a308548.png","created_at":"2024-11-25T09:47:01.157Z","last_posted_at":"2024-11-25T09:47:01.270Z","bumped":true,"bumped_at":"2024-11-25T09:47:01.270Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"You can replace a Discourse’s default SVG icons individually or as a whole with your own custom SVG  and override them within a theme or theme component. \nStep 1 - Create an SVG Spritesheet\nTo get started, you must creat&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":4,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]},{"id":97,"title":"Include assets (e.g. images, fonts) in themes and components","fancy_title":"Include assets (e.g. images, fonts) in themes and components","slug":"include-assets-e-g-images-fonts-in-themes-and-components","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://kelv.demo-by-discourse.com/uploads/default/optimized/1X/bd8fb1623cde4de41088569cade547d8c8128c33_2_1024x212.png","created_at":"2024-11-25T09:46:56.485Z","last_posted_at":"2024-11-25T09:46:56.572Z","bumped":true,"bumped_at":"2024-11-25T09:46:56.572Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Themes and theme components allow you to handle uploaded assets such as images and fonts. You can control what assets your theme accepts using the site setting: theme authorized extensions \nIncluding assets in themes and&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"tags":[],"tags_descriptions":{},"views":1,"like_count":0,"has_summary":false,"last_poster_username":"kelv","category_id":8,"pinned_globally":false,"featured_link":null,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":1,"primary_group_id":null,"flair_group_id":null}]}]}}