mediawiki.action.edit: Move collapsibleFooter cookies to localStorage
authorTimo Tijhof <krinklemail@gmail.com>
Mon, 27 Feb 2017 22:21:14 +0000 (14:21 -0800)
committerKrinkle <krinklemail@gmail.com>
Mon, 27 Feb 2017 23:24:53 +0000 (23:24 +0000)
The old cookies will become unused and expire automatically.

The new localStorage values won't have any expiry as localStorage
doesn't support it. We could provide ad-hoc expiry, but it wouldn't
be useful. It doesn't save space as it would only evict when visiting
the edit page (at which point the value is relevant again). Which means
it also doesn't help any privacy perspective (the value will be readable
for an undefined time until then, though never shared over the network).

If we want it to auto-expire, sessionStorage could be considered. Though
that means the value is reset everytime the user restarts their browser.

Bug: T110353
Change-Id: Ie9a4612de55e6aaf155a2179643e9b17f331e897

resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js

index 011f9c5..2506ffe 100644 (file)
@@ -2,27 +2,29 @@
        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',
-                       cookieName: 'templates-used-list'
+                       storeKey: 'mwedit-state-templatesUsed'
                },
                {
                        listSel: '.hiddencats ul',
                        togglerSel: '.mw-hiddenCategoriesExplanation',
-                       cookieName: 'hidden-categories-list'
+                       storeKey: 'mwedit-state-hiddenCategories'
                },
                {
                        listSel: '.preview-limit-report-wrapper',
                        togglerSel: '.mw-limitReportExplanation',
-                       cookieName: 'preview-limit-report'
+                       storeKey: 'mwedit-state-limitReport'
                }
        ];
 
-       handleOne = function ( $list, $toggler, cookieName ) {
+       handleOne = function ( $list, $toggler, storeKey ) {
                // Collapsed by default
-               var isCollapsed = mw.cookie.get( cookieName ) !== 'expanded';
+               var isCollapsed = mw.storage.get( storeKey ) !== 'expanded';
 
                // 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.on( 'beforeExpand.mw-collapsible', function () {
                        $toggler.removeClass( 'mw-icon-arrow-collapsed' ).addClass( 'mw-icon-arrow-expanded' );
-                       mw.cookie.set( cookieName, 'expanded' );
+                       mw.storage.set( storeKey, 'expanded' );
                } );
 
                $list.on( 'beforeCollapse.mw-collapsible', function () {
                        $toggler.removeClass( 'mw-icon-arrow-expanded' ).addClass( 'mw-icon-arrow-collapsed' );
-                       mw.cookie.set( cookieName, 'collapsed' );
+                       mw.storage.set( storeKey, 'collapsed' );
                } );
        };
 
@@ -55,7 +57,7 @@
                        handleOne(
                                $editForm.find( collapsibleLists[ i ].listSel ),
                                $editForm.find( collapsibleLists[ i ].togglerSel ),
-                               collapsibleLists[ i ].cookieName
+                               collapsibleLists[ i ].storeKey
                        );
                }
        } );