From 51a804cb932b31085f33cc1b40d4aed28cd3f0ec Mon Sep 17 00:00:00 2001 From: mwjames Date: Sat, 25 Jan 2020 16:45:13 +0000 Subject: [PATCH] Special:Browse use stuctured array instead of hash (#4452) --- res/smw/special/ext.smw.special.browse.js | 19 ++++-------------- src/MediaWiki/Specials/Browse/HtmlBuilder.php | 20 +++++++++++++++++-- .../MediaWiki/Specials/SpecialBrowseTest.php | 4 ++-- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/res/smw/special/ext.smw.special.browse.js b/res/smw/special/ext.smw.special.browse.js index 88a91318a2..76d79d76d2 100644 --- a/res/smw/special/ext.smw.special.browse.js +++ b/res/smw/special/ext.smw.special.browse.js @@ -49,25 +49,14 @@ var self = this, subject = self.context.data( 'subject' ); - // Expect a serialization format (see DIWikiPage::getHash) - if ( subject.indexOf( "#" ) == -1 ) { - return this.context.find( '.smwb-status' ) - .append( - mw.msg( 'smw-browse-api-subject-serialization-invalid' ) - ) - .addClass( 'smw-callout smw-callout-error' ); - } - - subject = subject.split( "#" ); - self.api.post( { action: "smwbrowse", browse: "subject", params: JSON.stringify( { - subject: subject[0], - ns: subject[1], - iw: subject[2], - subobject: subject[3], + subject: subject.dbkey, + ns: subject.ns, + iw: subject.iw, + subobject: subject.subobject, options: self.options, type: 'html' } ) diff --git a/src/MediaWiki/Specials/Browse/HtmlBuilder.php b/src/MediaWiki/Specials/Browse/HtmlBuilder.php index 066f6de60e..d558dd720a 100644 --- a/src/MediaWiki/Specials/Browse/HtmlBuilder.php +++ b/src/MediaWiki/Specials/Browse/HtmlBuilder.php @@ -140,10 +140,18 @@ public function getOption( $key, $default = null ) { * @return string */ public function legacy() { + + $subject = [ + 'dbkey' => $this->subject->getDBKey(), + 'ns' => $this->subject->getNamespace(), + 'iw' => $this->subject->getInterwiki(), + 'subobject' => $this->subject->getSubobjectName(), + ]; + return Html::rawElement( 'div', [ - 'data-subject' => $this->subject->getHash(), + 'data-subject' => json_encode( $subject, JSON_UNESCAPED_UNICODE ), 'data-options' => json_encode( $this->options ) ], $this->buildHTML() @@ -156,11 +164,19 @@ public function legacy() { * @return string */ public function placeholder() { + + $subject = [ + 'dbkey' => $this->subject->getDBKey(), + 'ns' => $this->subject->getNamespace(), + 'iw' => $this->subject->getInterwiki(), + 'subobject' => $this->subject->getSubobjectName(), + ]; + return Html::rawElement( 'div', [ 'class' => 'smwb-container', - 'data-subject' => $this->subject->getHash(), + 'data-subject' => json_encode( $subject, JSON_UNESCAPED_UNICODE ), 'data-options' => json_encode( $this->options ) ], Html::rawElement( diff --git a/tests/phpunit/Unit/MediaWiki/Specials/SpecialBrowseTest.php b/tests/phpunit/Unit/MediaWiki/Specials/SpecialBrowseTest.php index 7bf7fca736..3b9de99a41 100644 --- a/tests/phpunit/Unit/MediaWiki/Specials/SpecialBrowseTest.php +++ b/tests/phpunit/Unit/MediaWiki/Specials/SpecialBrowseTest.php @@ -81,7 +81,7 @@ public function queryParameterProvider() { $provider[] = [ 'Foo/Bar', [ - 'data-subject="Foo/Bar#0##"', + 'data-subject="{"dbkey":"Foo\/Bar","ns":0,"iw":"","subobject":""}"', 'data-options="{"dir":null,"group":null,"printable":null,"offset":null,"including":null,"showInverse":false,"showAll":true,"showGroup":false,"showSort":false,"api":true,"valuelistlimit.out":"30","valuelistlimit.in":"20"}"' ] ]; @@ -90,7 +90,7 @@ public function queryParameterProvider() { $provider[] = [ ':Main-20Page-23_QUERY140d50d705e9566904fc4a877c755964', [ - 'data-subject="Main_Page#0##_QUERY140d50d705e9566904fc4a877c755964"', + 'data-subject="{"dbkey":"Main_Page","ns":0,"iw":"","subobject":"_QUERY140d50d705e9566904fc4a877c755964"}"', 'data-options="{"dir":null,"group":null,"printable":null,"offset":null,"including":null,"showInverse":false,"showAll":true,"showGroup":false,"showSort":false,"api":true,"valuelistlimit.out":"30","valuelistlimit.in":"20"}"' ] ];