Jdlrobson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/271434

Change subject: WIP: Allow lazy loading of references
......................................................................

WIP: Allow lazy loading of references

TODO:
* Introduce a ReferencesGateway for accessing the references via
the API
* Translate the references "view list" substitute
* Wire up references drawer with API query result

Change-Id: I287608a8fdfa61fe2d9270ab7df4da9bca3aef4c
Depends-On: I81a965bcb47d17df18f1e415e3c25f88f6b48ffc
Bug: T125896
---
M extension.json
M includes/MobileFormatter.php
M resources/skins.minerva.content.styles/text.less
3 files changed, 50 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/34/271434/1

diff --git a/extension.json b/extension.json
index d048513..dd04832 100644
--- a/extension.json
+++ b/extension.json
@@ -2031,6 +2031,10 @@
                        "base": false,
                        "beta": false
                },
+               "MFLazyLoadReferences": {
+                       "base": false,
+                       "beta": false
+               },
                "MFNoMobileCategory": false,
                "MFNoMobilePages": [],
                "MFNearbyRange": 10000,
diff --git a/includes/MobileFormatter.php b/includes/MobileFormatter.php
index 714f47f..cf4b7e8 100644
--- a/includes/MobileFormatter.php
+++ b/includes/MobileFormatter.php
@@ -106,8 +106,9 @@
         */
        public function filterContent( $removeDefaults = true ) {
                $ctx = MobileContext::singleton();
-               $mfRemovableClasses = $ctx->getMFConfig()
-                       ->get( 'MFRemovableClasses' );
+               $config = $ctx->getMFConfig();
+               $isBeta = $ctx->isBetaGroupMember();
+               $mfRemovableClasses = $config->get( 'MFRemovableClasses' );
 
                if ( $removeDefaults ) {
                        $this->remove( $mfRemovableClasses['base'] );
@@ -116,15 +117,24 @@
                        }
                }
 
+               $mfReferences = $config->get( 'MFLazyLoadReferences' );
+               if ( $mfReferences ) {
+                       if (
+                                       $mfReferences['base'] ||
+                                       ( $isBeta && $mfReferences['beta'] )
+                       ) {
+                               $this->doRewriteReferencesForLazyLoading();
+                       }
+               }
+
                if ( $this->removeMedia ) {
                        $this->doRemoveImages();
                } else {
-                       $mfLazyLoadImages = $ctx->getMFConfig()
-                               ->get( 'MFLazyLoadImages' );
+                       $mfLazyLoadImages = $config->get( 'MFLazyLoadImages' );
 
                        if (
                                        $mfLazyLoadImages['base'] ||
-                                       ( $ctx->isBetaGroupMember() && 
$mfLazyLoadImages['beta'] )
+                                       ( $isBeta && $mfLazyLoadImages['beta'] )
                        ) {
                                $this->doRewriteImagesForLazyLoading();
                        }
@@ -134,6 +144,28 @@
        }
 
        /**
+        * Replaces any references list with a link to Special:References
+        */
+       private function doRewriteReferencesForLazyLoading() {
+               $doc = $this->getDoc();
+               $listId = 0;
+               // Accessing by tag is cheaper than class
+               foreach ( $doc->getElementsByTagName( 'ol' ) as $list ) {
+                       // Use class to decide it is a list of references
+                       if ( strpos( $list->getAttribute( 'class' ), 
'references' ) !== false ) {
+                               // TODO: i18n
+                               $placeholder = $doc->createElement( 'a', 'View 
list' );
+                               $placeholder->setAttribute( 'class', 
'lazy-references-placeholder' );
+                               // Currently a broken link
+                               $placeholder->setAttribute( 'href',
+                                       SpecialPage::getTitleFor( 'Cite', 
"$listId/" . $this->title->getPrefixedText() )->getLocalUrl() );
+                               $list->parentNode->replaceChild( $placeholder, 
$list );
+                               $listId += 1;
+                       }
+               }
+       }
+
+       /**
         * Enables images to be loaded asynchronously
         */
        private function doRewriteImagesForLazyLoading() {
diff --git a/resources/skins.minerva.content.styles/text.less 
b/resources/skins.minerva.content.styles/text.less
index 44299a0..a4e852f 100644
--- a/resources/skins.minerva.content.styles/text.less
+++ b/resources/skins.minerva.content.styles/text.less
@@ -71,4 +71,12 @@
        font-size: 0.75em;
        // Avoid line-height issues caused by sup and sub
        line-height: 1;
-}
\ No newline at end of file
+}
+
+// In beta since we lazy load and there is currently no fallback so hide
+.client-nojs .beta {
+       sup,
+       sub {
+               display: none;
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/271434
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I287608a8fdfa61fe2d9270ab7df4da9bca3aef4c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to