-
Couldn't load subscription status.
- Fork 7
Open
Description
The init function of the AMD module is executed for each piece of text that is being passed through filters. This leads to a large number of redundant JavaScript calls, like this:
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;
M.util.js_pending('filter_tabs/tabs'); require(['filter_tabs/tabs'], function(amd) {amd.init(); M.util.js_complete('filter_tabs/tabs');});;As documentated in the base filter class, the function setup of the filter must handle repeated calls:
/**
* Setup page with filter requirements and other prepare stuff.
*
* [...]
*
* Note this method is invoked from {@see setup_page_for_filters()}
* for each piece of text being filtered, so it is responsible
* for controlling its own execution cardinality.
*
* [...]
*/
public function setup($page, $context) {}However, filter_tabs does not:
public function setup($page, $context) {
$this->page = $page;
$page->requires->js_call_amd('filter_tabs/tabs', 'init');
}It appears the solution is as simple as the following (copied from the Glossary filter):
public function setup($page, $context) {
if ($page->requires->should_create_one_time_item_now('filter_glossary_autolinker')) {
// Code here.
}
}Metadata
Metadata
Assignees
Labels
No labels