{"id":30420852,"url":"https://github.com/abjerner/limbo.umbraco.blocklist","last_synced_at":"2026-02-13T15:16:19.193Z","repository":{"id":143259158,"uuid":"450901184","full_name":"abjerner/Limbo.Umbraco.BlockList","owner":"abjerner","description":"Extended block list editor for Umbraco.","archived":false,"fork":false,"pushed_at":"2024-11-25T12:09:39.000Z","size":906,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"v13/main","last_synced_at":"2025-07-22T08:04:02.243Z","etag":null,"topics":["block-list","csharp","dotnet","limbo","package","skybrud","umbraco","umbraco-cms","umbraco-package","umbraco-packages","umbraco-v10","umbraco-v11","umbraco-v12","umbraco-v8","umbraco-v9"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abjerner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-22T18:24:58.000Z","updated_at":"2024-11-25T12:09:42.000Z","dependencies_parsed_at":"2024-03-07T10:39:55.689Z","dependency_job_id":"afa9e9b8-7c64-4ea0-b96f-751d72bc83a9","html_url":"https://github.com/abjerner/Limbo.Umbraco.BlockList","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/abjerner/Limbo.Umbraco.BlockList","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abjerner%2FLimbo.Umbraco.BlockList","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abjerner%2FLimbo.Umbraco.BlockList/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abjerner%2FLimbo.Umbraco.BlockList/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abjerner%2FLimbo.Umbraco.BlockList/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abjerner","download_url":"https://codeload.github.com/abjerner/Limbo.Umbraco.BlockList/tar.gz/refs/heads/v13/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abjerner%2FLimbo.Umbraco.BlockList/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271606605,"owners_count":24788981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["block-list","csharp","dotnet","limbo","package","skybrud","umbraco","umbraco-cms","umbraco-package","umbraco-packages","umbraco-v10","umbraco-v11","umbraco-v12","umbraco-v8","umbraco-v9"],"created_at":"2025-08-22T08:20:36.098Z","updated_at":"2026-02-13T15:16:19.185Z","avatar_url":"https://github.com/abjerner.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Limbo Block List\n\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/abjerner/Limbo.Umbraco.BlockList/blob/v13/main/LICENSE.md)\n[![NuGet](https://img.shields.io/nuget/vpre/Limbo.Umbraco.BlockList.svg)](https://www.nuget.org/packages/Limbo.Umbraco.BlockList)\n[![NuGet](https://img.shields.io/nuget/dt/Limbo.Umbraco.BlockList.svg)](https://www.nuget.org/packages/Limbo.Umbraco.BlockList)\n[![Limbo.Umbraco.BlockList at packages.limbo.works](https://img.shields.io/badge/limbo-packages-blue)](https://packages.limbo.works/limbo.umbraco.blocklist/)\n[![Umbraco Marketplace](https://img.shields.io/badge/umbraco-marketplace-%233544B1)](https://marketplace.umbraco.com/package/limbo.umbraco.blocklist)\n\nThis package extends the default block list property editor in Umbraco, making it possible to control the CLR type returned by our version of the block list property editor.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003eLicense:\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/blob/v13/main/LICENSE.md\"\u003e\u003cstrong\u003eMIT License\u003c/strong\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003eUmbraco:\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      Umbraco 13\n      \u003csub\u003e\u003csup\u003e(and \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v3/main\"\u003eUmbraco 10-12\u003c/a\u003e, \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v2/main\"\u003eUmbraco 9\u003c/a\u003e and \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v1/main\"\u003eUmbraco 8\u003c/a\u003e)\u003c/sup\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cstrong\u003eTarget Framework:\u003c/strong\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      .NET 8\n      \u003csub\u003e\u003csup\u003e(and \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v3/main\"\u003e.NET 6\u003c/a\u003e, \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v2/main\"\u003e.NET 5\u003c/a\u003e and \u003ca href=\"https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v1/main\"\u003e.NET 4.7.2\u003c/a\u003e)\u003c/sup\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n## But why?\n\nThe default block list property editor exposes the value as an instance of `BlockListModel` representing the invividual blocks as they are added by users in the backoffice.\n\nIf you wish to interpret the `BlockListModel` a bit before rendering the block list on the website, there is a few different ways to go about this. With this package, you can select a *type converter* which is then used for converting `BlockListModel` to a desired type.\n\nFor us at [**@limbo-works**](https://github.com/limbo-works), we find this particular usefull as we can use a *type converter* to control the output for our headless API, thereby better being able to tailor the output for our frontenders.\n\n\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n## Installation\n\n### Umbraco 13\n\nThe package is only available via [**NuGet**](https://www.nuget.org/packages/Limbo.Umbraco.BlockList/13.0.3). To install the package, you can use either .NET CLI:\n\n```\ndotnet add package Limbo.Umbraco.BlockList --version 13.0.3\n```\n\nor the NuGet Package Manager:\n\n```\nInstall-Package Limbo.Umbraco.BlockList -Version 13.0.3\n```\n\n### Other versions of Umbraco\n\n- ~~[**v3/main**](https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v3/main) Umbraco 10-12~~ \u003csub title=\"Umbraco 10, 11 and 12 have reached end-of-life\"\u003e\u003csup\u003e(EOL)\u003c/sup\u003e\u003c/sub\u003e\n- ~~[**v2/main**](https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v2/main) Umbraco 9~~ \u003csub title=\"Umbraco 9 have reached end-of-life\"\u003e\u003csup\u003e(EOL)\u003c/sup\u003e\u003c/sub\u003e\n- ~~[**v1/main**](https://github.com/abjerner/Limbo.Umbraco.BlockList/tree/v1/main) Umbraco 8~~ \u003csub title=\"Umbraco 8 have reached end-of-life\"\u003e\u003csup\u003e(EOL)\u003c/sup\u003e\u003c/sub\u003e\n\n\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n## Examples\n\nTo create your custom type converter, you can implement the `IBlockListTypeConverter` interface. In the example below, the type converter will return a flat array of `BlockItem` representing the individual block list items - or if the maximum amount of blocks it set to 1, an instance `BlockList`:\n\n```csharp\nusing System;\nusing System.Linq;\nusing Limbo.Umbraco.BlockList.Converters;\nusing Limbo.Umbraco.BlockList.PropertyEditors;\nusing Umbraco.Cms.Core.Models.Blocks;\nusing Umbraco.Cms.Core.Models.PublishedContent;\n\nnamespace UmbracoTests.BlockList {\n    \n    public class BlockListTypeConverter : IBlockListTypeConverter {\n\n        public string Name =\u003e \"Block Item Converter\";\n\n        public Type GetType(IPublishedPropertyType propertyType, LimboBlockListConfiguration config) {\n            return config.IsSinglePicker ? typeof(BlockItem) : typeof(IReadOnlyList\u003cBlockItem\u003e);\n        }\n\n        public object? Convert(IPublishedElement owner, IPublishedPropertyType propertyType, BlockListModel? source, LimboBlockListConfiguration config) {\n\n            if (source == null) return config.IsSinglePicker ? null : Array.Empty\u003cBlockItem\u003e();\n\n            if (!config.IsSinglePicker) return source.Select(x =\u003e new BlockItem(x)).ToArray();\n\n            BlockListItem? first = source.FirstOrDefault();\n            return first == null ? null : new BlockItem(first);\n\n        }\n\n    }\n\n}\n```\n\n```csharp\nusing System;\nusing Umbraco.Cms.Core.Models.Blocks;\nusing Umbraco.Extensions;\n\nnamespace UmbracoTests.BlockList {\n    \n    public class BlockItem {\n\n        public Guid ContentKey { get; }\n\n        public string Type { get; }\n\n        public IPublishedElement Content { get; }\n\n        public BlockItem(BlockListItem blockListItem) {\n            ContentKey = blockListItem.Content.Key;\n            Type = blockListItem.Content.ContentType.Alias;\n            Content = blockListItem.Content;\n        }\n\n    }\n\n}\n```\n\nBy creating your own class implementing the `IBlockListTypeConverter` interface, it will show up for the **Type Converter** option on the data type:\n\n![image](https://user-images.githubusercontent.com/3634580/150651412-d623fe90-c459-4c73-9f67-75461ae448e0.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabjerner%2Flimbo.umbraco.blocklist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabjerner%2Flimbo.umbraco.blocklist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabjerner%2Flimbo.umbraco.blocklist/lists"}