diff options
Diffstat (limited to 'www/wiki/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js')
-rw-r--r-- | www/wiki/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js b/www/wiki/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js new file mode 100644 index 00000000..938962f3 --- /dev/null +++ b/www/wiki/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js @@ -0,0 +1,66 @@ +( function ( mw ) { + var collapsibleLists, handleOne; + + // Collapsible lists of categories and templates + // If changing or removing a storeKey, ensure there is a strategy for old keys. + // E.g. detect existence via requestIdleCallback and remove. (T121646) + collapsibleLists = [ + { + listSel: '.templatesUsed ul', + togglerSel: '.mw-templatesUsedExplanation', + storeKey: 'mwedit-state-templatesUsed' + }, + { + listSel: '.hiddencats ul', + togglerSel: '.mw-hiddenCategoriesExplanation', + storeKey: 'mwedit-state-hiddenCategories' + }, + { + listSel: '.preview-limit-report-wrapper', + togglerSel: '.mw-limitReportExplanation', + storeKey: 'mwedit-state-limitReport' + } + ]; + + handleOne = function ( $list, $toggler, storeKey ) { + var collapsedVal = '0', + expandedVal = '1', + // Default to collapsed if not set + isCollapsed = mw.storage.get( storeKey ) !== expandedVal; + + // Style the toggler with an arrow icon and add a tabIndex and a role for accessibility + $toggler.addClass( 'mw-editfooter-toggler' ).prop( 'tabIndex', 0 ).attr( 'role', 'button' ); + $list.addClass( 'mw-editfooter-list' ); + + $list.makeCollapsible( { + $customTogglers: $toggler, + linksPassthru: true, + plainMode: true, + collapsed: isCollapsed + } ); + + $toggler.addClass( isCollapsed ? 'mw-icon-arrow-collapsed' : 'mw-icon-arrow-expanded' ); + + $list.on( 'beforeExpand.mw-collapsible', function () { + $toggler.removeClass( 'mw-icon-arrow-collapsed' ).addClass( 'mw-icon-arrow-expanded' ); + mw.storage.set( storeKey, expandedVal ); + } ); + + $list.on( 'beforeCollapse.mw-collapsible', function () { + $toggler.removeClass( 'mw-icon-arrow-expanded' ).addClass( 'mw-icon-arrow-collapsed' ); + mw.storage.set( storeKey, collapsedVal ); + } ); + }; + + mw.hook( 'wikipage.editform' ).add( function ( $editForm ) { + var i; + for ( i = 0; i < collapsibleLists.length; i++ ) { + // Pass to a function for iteration-local variables + handleOne( + $editForm.find( collapsibleLists[ i ].listSel ), + $editForm.find( collapsibleLists[ i ].togglerSel ), + collapsibleLists[ i ].storeKey + ); + } + } ); +}( mediaWiki ) ); |