User:Jdlrobson/Skins for extension developers

Some notes around how skins will work in the future.

Q: I want to modify the subtitle.
A: Use OutputPageBeforeHTML and clearSubtitle, getSubtitle, and addSubtitle as appropriate.

Q: I want to pass some data down to a skin rendered via BaseTemplate. How can I do that without SkinTemplateOutputPageBeforeExec ?
A: Use OutputPage->getProperty and OutputPage->setProperty alongside one of the OutputPage hooks.

Q: I want to add a link to one of the existing sidebar menus
A: Use SidebarBeforeOutput. This supports additions to toolbox and languages since 1.35.

Q: I want to add a link to the personal tools
A: Use the PersonalUrls hook.

Q: I want to add a new "portal" menu to the sidebar.
A: Use SidebarBeforeOutput.

Q: I want to add a tab alongside user page and discussion
A: Use SkinTemplateNavigation::Universal and modify the 'namespaces' key.

Q: I want to add another article view alongside edit and history
A: Use SkinTemplateNavigation::Universal and modify the 'views' key.

Q: I want to add another action alongside move and delete.
A: Use kinTemplateNavigation::Universal and modify the 'actions' key.

Q: I have a link that should only be added to certain pages e.g. special pages
A: Use the appropriate hook and inspect the Title object.

Q: I want to hide a link

Add a stylesheet to hide the component. Otherwise please make a feature request for core to provide a method of disabling.

Q: I want to add something to the footer
A: Use the hook SkinAddFooterLinks.

Making or integrating with a new skin
When making a new skin or integrating with an existing one, please be careful around which hooks you rely on. Follow the best practices listed above. In this section I'll try and compile advice around what building blocks can be considered reliable in the long term future.

Deprecated hooks
Please avoid relying on these hooks (or using them!) during your development or at least be aware of the long term plans surrounding them.

Deprecated Vector hooks
(deprecated)


 * VectorAfterToolbox (used by ShoutWikiAds)
 * VectorBeforeFooter (used by ShoutWikiAds)

Deprecated BaseTemplate hooks
(extends QuickTemplate)

The following hooks will soon no longer work on Vector:


 * BaseTemplateToolbox
 * MachineVision (safe as it uses Skin)
 * CiteThisPage (uses nav_urls)
 * BlueSpice (uses nav_urls)
 * ArticleRating (safe uses Skin)
 * ArticlePlaceholder (safe uses Skin)
 * Wikibase (safe)
 * MassEditRegex (safe, unsets toolbox)
 * ParserMigration (safe)
 * PerformanceInspector (safe uses Skin)
 * UploadsLink (safe uses Skin)
 * UrlShorterner (safe uses Skin)
 * Sanctions (safe uses Skin)
 * Mpdf (safe)
 * AdvancedBackLinks (uses nav_urls)
 * fagocytoza (uses skin)
 * SemanticMediaWiki (uses BaseTemplateToolbox which is safe as it only uses skin)
 * Svetovidd safe as it doesnt use BaseTemplate
 * BlueSpiceUEModuleHTML (uses TOOLBOX_BLACKLIST modified in SkinTemplateOutputPageBeforeExec/ModifySidebar.php but has isset checks so safe)
 * Cargo (addLink is safe)
 * Translate (safe)
 * VirtualKeyboard (compatible)
 * SkinTemplateToolboxEnd
 * Contributors is Monobook only (uses nav_urls)
 * CreateRedirect (safe with runBaseTemplateCompatibleHook)
 * LanguageSelector (safe with runBaseTemplateCompatibleHook)
 * RelatedLinks (safe with runBaseTemplateCompatibleHook)
 * AdvancedBackLinks (uses nav_urls)
 * Duplicator (uses nav_urls)
 * SemanticWebBrowser (uses is_article)
 * ShortUrlHooks (safe, uses Skin)
 * WikiArticleFeeds (incompatible with latest mediawiki)
 * BaseTemplateAfterPortlet
 * Wikibase (uses wbeditlanglinks which is set inside SkinTemplateOutputPageBeforeExecHandler.php)

Deprecated SkinTemplate hooks

 * SkinTemplateTabAction
 * SkinTemplatePreventOtherActiveTabs
 * SkinTemplateNavigation::SpecialPage
 * SkinTemplateBuildNavUrlsNav_urlsAfterPermalink


 * SkinTemplateOutputPageBeforeExec (https://phabricator.wikimedia.org/T60137)

Active hooks (To organize)
(extends ContextSource)

All these hooks can be considered safe during skin development

Active hooks:


 * SkinPreloadExistence
 * SkinAfterContent
 * SkinAfterBottomScripts
 * UndeletePageToolLinks
 * SkinSubPageSubtitle
 * SkinCopyrightFooter
 * SkinGetPoweredBy
 * SkinBuildSidebar
 * SidebarBeforeOutput
 * GetNewMessagesAlert
 * SiteNoticeBefore
 * SiteNoticeAfter
 * SkinEditSectionLinks
 * SkinTemplateGetLanguageLink (to rename)

Active hooks (but currently run inside SkinTemplate)


 * PersonalUrls
 * SkinAddFooterLinks
 * SkinTemplateNavigation::Universal (for adding to tabs, actions and views)