mediawiki-skins-MinervaNeue/includes/menu/PageActions
Piotr Miazga 209becf63d PageActions menu should use Builder pattern
The PageActions menu shouldn't be built inside SkinMinerva class.
All menus should be build in similar way so it's easier to understand
how different parts of the system work. This will allow us to easily
track different menu elements/move elements between different menus.

Additionally we should allow extensions/3rd party to modify both the
toolbar and overflow menus.

Changes:
 - Removed PageActions logic from SkinMinerva class
 - introduced new PageActions/Director to build page actions menu
 - introduced Builders for toolbar, and different types of overflow
 menu
 - because Overflow menu elements require the
 BaseTemplate::data['nav_urls] array, instead building all links,
 pass the array when building PageActions menu. Code for getting
 menu entries had to be rewritten (use $navUrls array instead of
 $this->tpl['nav_urls'];
 - ServiceWirings file contains logic on what to pass to
 PageActions/Director class (which builders)
 - PageActionsMenuEntry setTitle() and setNodeID() returns $this
 so we can use method chaining. Only a syntax sugar.
 - if AMC is not available/Overflow menu is disabled via config,
 system will pass EmptyOverflowBuilder. System will not add
 "show more" icon to toolbar menu when $overflowBuilder returns
 empty set of options.
 - both ToolbarBulder and OverflowMenuBuilders (except
 EmptyOverflowBuilder) will run 'MobileMenu' hook. Extensions should
 listen to hook, and inject it's own menu entries at their leisure.

Required follow-ups:
 - SkinMinerva provides isAllowedAction() method which is used
 both in the skin code and in Toolbar builder. We should extract
 that method into separate service
 - SkinMinerva provides getHistoryUrl() method which is used
 both in the skin code and in Toolbar builder. We should provide
 MinervaUrls service that knows how to build custom mobile URLs.

Bug: T221792
Change-Id: Ie08c4b61cea60c3a42fbf796a39360feea22bc33
2019-06-05 21:07:40 +02:00
..
DefaultOverflowBuilder.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
EmptyOverflowBuilder.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
IOverflowBuilder.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
PageActionMenuEntry.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
PageActionsDirector.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
ToolbarBuilder.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00
UserNamespaceOverflowBuilder.php PageActions menu should use Builder pattern 2019-06-05 21:07:40 +02:00