{"id":1052,"date":"2011-01-01T21:11:44","date_gmt":"2011-01-01T20:11:44","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1052"},"modified":"2011-01-01T21:11:44","modified_gmt":"2011-01-01T20:11:44","slug":"new-mediawiki-extension-subpagelist","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/","title":{"rendered":"New MediaWiki extension: SubPageList"},"content":{"rendered":"<p><a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:SubPageList\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1054\" title=\"SubPageList extension\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png\" alt=\"SubPageList extension\" width=\"230\" height=\"449\" \/><\/a>During <a href=\"https:\/\/events.ccc.de\/congress\/2010\/wiki\/Main_Page\">27c3<\/a> someone asked me to install an extension to list subpages onto the <a href=\"https:\/\/hackerspace.be\/Main_Page\">hackerspace.be wiki<\/a>. I picked SubPageList3, as it seemed to most decent one. I did a simple test to see if it was working, and immediately found a namespace bug. So I decided to quickly rewrite it and also let it use <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:Validator\">Validator<\/a> for additional awesomeness.<\/p>\n<p>Strangely enough, although there where SubPageList2 and <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:SubPageList3\">SubPageList3<\/a> extensions, there was no <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:SubPageList\">SubPageList <\/a>extension to be found anywhere in the WMF SVN repo or the mediawiki.org wiki, so I decided to simply take that name. The extension should be backwards compatible with SubPageList3.<\/p>\n<p>I spend 5 hours or so doing the rewrite, and have released an initial version yesterday. Seems to work fine and is currently in use on hackerspace.be. It requires Validator 0.4.2 or above, and is the first extension <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:SubPageList#Usage\">making full use<\/a> of new the <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:Validator#describe\">auto-documentation functionality<\/a> Validator 0.4.3 introduces (more on that in <a href=\"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/11\/validator-0-4-3introducing-auto-documentation\/\">a later blog post<\/a>).<\/p>\n<p><strong>Download<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/code.google.com\/p\/subpagelist\/downloads\/list\">Version 0.1 archives<\/a><\/li>\n<li><a href=\"http:\/\/svn.wikimedia.org\/svnroot\/mediawiki\/tags\/extensions\/SubPageList\/REL_0_1\/\">Version 0.1 svn tag<\/a><\/li>\n<li><a href=\"http:\/\/svn.wikimedia.org\/svnroot\/mediawiki\/trunk\/extensions\/SubPageList\/\">svn trunk<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>During 27c3 someone asked me to install an extension to list subpages onto the hackerspace.be wiki. I picked SubPageList3, as&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7,8],"tags":[15,58,156,157,181,195,197,251,272],"class_list":["post-1052","post","type-post","status-publish","format-standard","hentry","category-programming","category-software","tag-27c3","tag-ccc","tag-mediawiki","tag-mediawiki-extensions","tag-open-source","tag-php","tag-planet-wikimedia","tag-subpagelist","tag-validator"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"During 27c3 someone asked me to install an extension to list subpages onto the hackerspace.be wiki. I picked SubPageList3, as&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2011-01-01T20:11:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"New MediaWiki extension: SubPageList\",\"datePublished\":\"2011-01-01T20:11:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/\"},\"wordCount\":171,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2011\\\/01\\\/Splist_1.png\",\"keywords\":[\"27c3\",\"ccc\",\"MediaWiki\",\"MediaWiki extensions\",\"Open Source\",\"PHP\",\"Planet Wikimedia\",\"SubPageList\",\"Validator\"],\"articleSection\":[\"Programming\",\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/\",\"name\":\"New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2011\\\/01\\\/Splist_1.png\",\"datePublished\":\"2011-01-01T20:11:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2011\\\/01\\\/Splist_1.png\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2011\\\/01\\\/Splist_1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2011\\\/01\\\/01\\\/new-mediawiki-extension-subpagelist\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New MediaWiki extension: SubPageList\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/","og_locale":"en_US","og_type":"article","og_title":"New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw","og_description":"During 27c3 someone asked me to install an extension to list subpages onto the hackerspace.be wiki. I picked SubPageList3, as&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2011-01-01T20:11:44+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"New MediaWiki extension: SubPageList","datePublished":"2011-01-01T20:11:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/"},"wordCount":171,"commentCount":4,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png","keywords":["27c3","ccc","MediaWiki","MediaWiki extensions","Open Source","PHP","Planet Wikimedia","SubPageList","Validator"],"articleSection":["Programming","Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/","url":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/","name":"New MediaWiki extension: SubPageList - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png","datePublished":"2011-01-01T20:11:44+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/Splist_1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/01\/new-mediawiki-extension-subpagelist\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"New MediaWiki extension: SubPageList"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-gY","jetpack-related-posts":[{"id":1056,"url":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/11\/validator-0-4-3introducing-auto-documentation\/","url_meta":{"origin":1052,"position":0},"title":"Validator 0.4.3:introducing auto-documentation","author":"Jeroen","date":"2011-01-11","format":false,"excerpt":"It's been a while since the previous release of Validator, but this minor update includes some cool new functionality. As I was creating the SubPageList extension and it's documentation (at 27c3!), it occurred to me that to document the usage of the <subpages \/> parser hook, all the info I\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Some documentation (for the coordinates parser function) generated using the describe parser hook","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1127,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/","url_meta":{"origin":1052,"position":1},"title":"ParserHooks declarative OOP API for MediaWiki released","author":"Jeroen","date":"2013-07-14","format":false,"excerpt":"Yes, there now is a nice OOP API that allows you to create MediaWiki parser hooks in declarative fashion! A few years back, I was sitting in c-base after the 27th Chaos Communication Congress had ended. I decided to quickly hack up a decent SubPageList extension for MediaWiki on top\u2026","rel":"","context":"With 1 comment","block_context":{"text":"With 1 comment","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1137,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/10\/15\/subpagelist-1-0-released\/","url_meta":{"origin":1052,"position":2},"title":"SubPageList 1.0 released!","author":"Jeroen","date":"2013-10-15","format":false,"excerpt":"I am happy to announce the immediate release of SubPageList 1.0. SubPageList is a MediaWiki extension with the following features: Adds a subpages parser hook that you can use to list subpages. Backward compatible with the SubPageList3 extension. Supports various parameters that enable you to customize the subpage list both\u2026","rel":"","context":"In \"MediaWiki\"","block_context":{"text":"MediaWiki","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/mediawiki\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1158,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/upgrading-an-extension-that-now-uses-composer\/","url_meta":{"origin":1052,"position":3},"title":"Upgrading an extension that now uses Composer","author":"Jeroen","date":"2013-11-24","format":false,"excerpt":"This blog post is aimed at users of the MediaWiki software that have extensions installed, and want to upgrade one or more to a version that makes use of Composer. At present this is of particular relevance for those upgrading to SMW 1.9 beta or Maps 3.0 alpha. If you\u2026","rel":"","context":"In \"composer\"","block_context":{"text":"composer","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/composer\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1133,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/24\/mediawiki-subpagelist-rewrite\/","url_meta":{"origin":1052,"position":4},"title":"MediaWiki SubPageList rewrite","author":"Jeroen","date":"2013-09-24","format":false,"excerpt":"How I ended up rewriting the MediaWiki SubPageList extension: At the beginning of this year, it was still somewhat controversial in the Wikidata development team that concepts such as the Single Responsibility Principle, Inversion of Control and Interface Segregation are generally a good idea and practical to implement without creating\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":579,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/12\/12\/you-will-be-validated-resistance-is-futile\/","url_meta":{"origin":1052,"position":5},"title":"You will be validated. Resistance is futile.","author":"Jeroen","date":"2009-12-12","format":false,"excerpt":"It has been over a week since I posted about any MediaWiki stuff, which can very well be a record since I started my blog. The reason for this is cause I've been busy with a lot of projects. You'll hear about them all later on, but now I just\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1052"}],"version-history":[{"count":0,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1052\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1052"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}