Mailing List Archive

Global parser not initialized on special pages?
Hi everyone,

my skin uses the global parser in order to render some parts of the
navigation bar via templates (Parser::recursivePreprocess). This works
fine on all normal pages (and even some special ones like
Special:Version), but not on special pages like Special:AllPages.

Some debugging revealed that on Special:AllPages the global parser
object (\MediaWiki\MediaWikiServices::getInstance()->getParser()) is not
properly initialized. Member variables like mOptions and mTitle are null
which results in tons of NPEs.

Any idea why that is? Is that a bug or am I mis-using the parser?

Regards,
Sebastian
_______________________________________________
MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
Re: Global parser not initialized on special pages? [ In reply to ]
This is expected. You should not make assumptions about the state of the
global Parser instance in a special page. In some circumstances (especially
transclusions) it might be in a parse, other times it won't be.

If you're rendering an i18n message, its better to use ->parse() of the
Message class then to pass it through the parser directly.

Alternatively use
\MediaWiki\MediaWikiServices::getInstance()->getParser()->getFreshParser()
and then initialize it yourself by calling ->parse() on the Parser, so you
always know what the state is for sure.

--
Brian

On Fri, Jun 11, 2021 at 9:27 AM Sebastian Trueg <trueg@truegeex.de> wrote:

> Hi everyone,
>
> my skin uses the global parser in order to render some parts of the
> navigation bar via templates (Parser::recursivePreprocess). This works
> fine on all normal pages (and even some special ones like
> Special:Version), but not on special pages like Special:AllPages.
>
> Some debugging revealed that on Special:AllPages the global parser
> object (\MediaWiki\MediaWikiServices::getInstance()->getParser()) is not
> properly initialized. Member variables like mOptions and mTitle are null
> which results in tons of NPEs.
>
> Any idea why that is? Is that a bug or am I mis-using the parser?
>
> Regards,
> Sebastian
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> List information:
> https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
>
Re: Global parser not initialized on special pages? [ In reply to ]
thank you Brian.

With a fresh parser (I am not rendering messages but a template) it
works. However, the parser always wraps my result in a <p> tag (I
already removed the <div> via "nowrap" in ParserOutput::getText).

Can I tell the parser to not do that or do I need to manually unwrap the
text?

Cheers,
Sebastian

On 11.06.21 21:33, Brian Wolff wrote:
> This is expected. You should not make assumptions about the state of the
> global Parser instance in a special page. In some circumstances
> (especially transclusions) it might be in a parse, other times it won't be.
>
> If you're rendering an i18n message, its better to use ->parse() of the
> Message class then to pass it through the parser directly.
>
> Alternatively use
> \MediaWiki\MediaWikiServices::getInstance()->getParser()->getFreshParser()
> and then initialize it yourself by calling ->parse() on the Parser, so
> you always know what the state is for sure.
>
> --
> Brian
>
> On Fri, Jun 11, 2021 at 9:27 AM Sebastian Trueg <trueg@truegeex.de
> <mailto:trueg@truegeex.de>> wrote:
>
> Hi everyone,
>
> my skin uses the global parser in order to render some parts of the
> navigation bar via templates (Parser::recursivePreprocess). This works
> fine on all normal pages (and even some special ones like
> Special:Version), but not on special pages like Special:AllPages.
>
> Some debugging revealed that on Special:AllPages the global parser
> object (\MediaWiki\MediaWikiServices::getInstance()->getParser()) is
> not
> properly initialized. Member variables like mOptions and mTitle are
> null
> which results in tons of NPEs.
>
> Any idea why that is? Is that a bug or am I mis-using the parser?
>
> Regards,
> Sebastian
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> <mailto:mediawiki-l@lists.wikimedia.org>
> List information:
> https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>
>
>
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
>

--
Sebastian Trueg
Managing Director
TrueGeeX UG (haftungsbeschränkt)
trueg@truegeex.de
http://www.linkedin.com/in/trueg
Mobile: 0049 1762 3244 664
_______________________________________________
MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
Re: Global parser not initialized on special pages? [ In reply to ]
On 2021-06-14 17:34, Sebastian Trueg wrote:
> With a fresh parser (I am not rendering messages but a template) it
> works. However, the parser always wraps my result in a <p> tag (I
> already removed the <div> via "nowrap" in ParserOutput::getText).
>
> Can I tell the parser to not do that or do I need to manually unwrap the
> text?

You can use Parser::stripOuterParagraph( $html ) to do it.

--
Bartosz Dziewo?ski
_______________________________________________
MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
Re: Global parser not initialized on special pages? [ In reply to ]
You can wrap it in Parser::stripOuterParagraph()

On Monday, June 14, 2021, Sebastian Trueg <trueg@truegeex.de> wrote:

> thank you Brian.
>
> With a fresh parser (I am not rendering messages but a template) it works.
> However, the parser always wraps my result in a <p> tag (I already removed
> the <div> via "nowrap" in ParserOutput::getText).
>
> Can I tell the parser to not do that or do I need to manually unwrap the
> text?
>
> Cheers,
> Sebastian
>
> On 11.06.21 21:33, Brian Wolff wrote:
>
>> This is expected. You should not make assumptions about the state of the
>> global Parser instance in a special page. In some circumstances (especially
>> transclusions) it might be in a parse, other times it won't be.
>>
>> If you're rendering an i18n message, its better to use ->parse() of the
>> Message class then to pass it through the parser directly.
>>
>> Alternatively use \MediaWiki\MediaWikiServices::
>> getInstance()->getParser()->getFreshParser() and then initialize it
>> yourself by calling ->parse() on the Parser, so you always know what the
>> state is for sure.
>>
>> --
>> Brian
>>
>> On Fri, Jun 11, 2021 at 9:27 AM Sebastian Trueg <trueg@truegeex.de
>> <mailto:trueg@truegeex.de>> wrote:
>>
>> Hi everyone,
>>
>> my skin uses the global parser in order to render some parts of the
>> navigation bar via templates (Parser::recursivePreprocess). This works
>> fine on all normal pages (and even some special ones like
>> Special:Version), but not on special pages like Special:AllPages.
>>
>> Some debugging revealed that on Special:AllPages the global parser
>> object (\MediaWiki\MediaWikiServices::getInstance()->getParser()) is
>> not
>> properly initialized. Member variables like mOptions and mTitle are
>> null
>> which results in tons of NPEs.
>>
>> Any idea why that is? Is that a bug or am I mis-using the parser?
>>
>> Regards,
>> Sebastian
>> _______________________________________________
>> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
>> <mailto:mediawiki-l@lists.wikimedia.org>
>> List information:
>> https://lists.wikimedia.org/postorius/lists/mediawiki-l.list
>> s.wikimedia.org/
>> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lis
>> ts.wikimedia.org/>
>>
>>
>> _______________________________________________
>> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
>> List information: https://lists.wikimedia.org/po
>> storius/lists/mediawiki-l.lists.wikimedia.org/
>>
>>
> --
> Sebastian Trueg
> Managing Director
> TrueGeeX UG (haftungsbeschränkt)
> trueg@truegeex.de
> http://www.linkedin.com/in/trueg
> Mobile: 0049 1762 3244 664
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> List information: https://lists.wikimedia.org/po
> storius/lists/mediawiki-l.lists.wikimedia.org/
>
Re: Global parser not initialized on special pages? [ In reply to ]
Brilliant. Works perfectly now!

On 14.06.21 19:44, Brian Wolff wrote:
> You can wrap it in Parser::stripOuterParagraph()
>
> On Monday, June 14, 2021, Sebastian Trueg <trueg@truegeex.de
> <mailto:trueg@truegeex.de>> wrote:
>
> thank you Brian.
>
> With a fresh parser (I am not rendering messages but a template) it
> works. However, the parser always wraps my result in a <p> tag (I
> already removed the <div> via "nowrap" in ParserOutput::getText).
>
> Can I tell the parser to not do that or do I need to manually unwrap
> the text?
>
> Cheers,
> Sebastian
>
> On 11.06.21 21:33, Brian Wolff wrote:
>
> This is expected. You should not make assumptions about the
> state of the global Parser instance in a special page. In some
> circumstances (especially transclusions) it might be in a parse,
> other times it won't be.
>
> If you're rendering an i18n message, its better to use ->parse()
> of the Message class then to pass it through the parser directly.
>
> Alternatively use
> \MediaWiki\MediaWikiServices::getInstance()->getParser()->getFreshParser()
> and then initialize it yourself by calling ->parse() on the
> Parser, so you always know what the state is for sure.
>
> --
> Brian
>
> On Fri, Jun 11, 2021 at 9:27 AM Sebastian Trueg
> <trueg@truegeex.de <mailto:trueg@truegeex.de>
> <mailto:trueg@truegeex.de <mailto:trueg@truegeex.de>>> wrote:
>
>     Hi everyone,
>
>     my skin uses the global parser in order to render some
> parts of the
>     navigation bar via templates (Parser::recursivePreprocess).
> This works
>     fine on all normal pages (and even some special ones like
>     Special:Version), but not on special pages like
> Special:AllPages.
>
>     Some debugging revealed that on Special:AllPages the global
> parser
>     object
> (\MediaWiki\MediaWikiServices::getInstance()->getParser()) is
>     not
>     properly initialized. Member variables like mOptions and
> mTitle are
>     null
>     which results in tons of NPEs.
>
>     Any idea why that is? Is that a bug or am I mis-using the
> parser?
>
>     Regards,
>     Sebastian
>     _______________________________________________
>     MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> <mailto:mediawiki-l@lists.wikimedia.org>
>     <mailto:mediawiki-l@lists.wikimedia.org
> <mailto:mediawiki-l@lists.wikimedia.org>>
>     List information:
> https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>
>
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>>
>
>
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> <mailto:mediawiki-l@lists.wikimedia.org>
> List information:
> https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>
>
>
> --
> Sebastian Trueg
> Managing Director
> TrueGeeX UG (haftungsbeschränkt)
> trueg@truegeex.de <mailto:trueg@truegeex.de>
> http://www.linkedin.com/in/trueg <http://www.linkedin.com/in/trueg>
> Mobile: 0049 1762 3244 664
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> <mailto:mediawiki-l@lists.wikimedia.org>
> List information:
> https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
> <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>
>
>
> _______________________________________________
> MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
> List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/
>

--
Sebastian Trueg
Managing Director
TrueGeeX UG (haftungsbeschränkt)
trueg@truegeex.de
http://www.linkedin.com/in/trueg
Mobile: 0049 1762 3244 664
_______________________________________________
MediaWiki-l mailing list -- mediawiki-l@lists.wikimedia.org
List information: https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/