Hi Mark,

Yeah, newChild() expects a preprocessor node instance (rather than the raw 
arguments array itself) for the arguments, which can be obtained by calling 
Preprocessor::newPartNodeArray() with the given set of arguments.

For Parsoid-PHP and the potential upgrade work it requires, it is probably 
something that will need to be addressed eventually, but from what I 
understand, there’s plenty of time until then, so it should not be an immediate 
concern. :)

Best,
Máté Szabó 
Sr. Software Engineer
he - him - his

Fandom Poland sp. z o.o. z siedzibą w Poznaniu, ul. Abp. A. Baraniaka 6
Sąd Rejonowy Poznań – Nowe Miasto i Wilda w Poznaniu, VIII Wydział Gospodarczy 
Krajowego Rejestru Sądowego, KRS 0000254365
NIP: 5252358778
Kapitał zakładowy: 50.000,00 złotych

> On 8 Apr 2021, at 02:44, Mark Clements (HappyDog) <gm...@kennel17.co.uk> 
> wrote:
> 
> "M�t� Szab�" <msz...@wikia-inc.com> wrote in message 
> news:80e88bac-ae9b-42ae-a0ba-834a39a7a...@wikia-inc.com...
> 
> 
> Hi M�t�,
> 
> I know it's been a while, but I've only now found some time to work on this 
> in any depth.
> 
>> The DOM-based wikitext preprocessor (Preprocessor_DOM class and friends)
>> was deprecated in MediaWiki 1.34 and removed in MediaWiki 1.35 as part of
>> the Wikimedia Parsing Team's work around Parsoid-PHP.[1]
> 
> I guess that explains why things changed in MW 1.34, specifically.
> 
>> In the short/medium term, the easiest fix to keep your code working would 
>> be to
>> use the other preprocessor implementation (class Preprocessor_Hash and 
>> friends)
>> instead.
> 
> I think this is what I have now done.  The solution I implemented was to 
> replace the following line:
> 
>    $NewFrame = new PPTemplateFrame_DOM($Frame->preprocessor,
>                                        $Frame, array(), $Vars, 
> $Frame->title);
> 
> With this:
> 
>    if (is_a($Frame, "PPFrame_Hash"))
>        $TemplateFrameClass = "PPTemplateFrame_Hash";
>    else
>        $TemplateFrameClass = "PPTemplateFrame_DOM";
> 
>    $NewFrame = new $TemplateFrameClass($Frame->preprocessor,
>                                        $Frame, array(), $Vars, 
> $Frame->title);
> 
> This seems to work on both MW versions I am testing on (1.29 and 1.34) and 
> fits-in with your explanation, above.
> 
>> Since your code already has access to a PPFrame instance,
>> you can also try invoking its newChild() method to construct a
>> new child frame with your arguments, instead of creating the
>> instance directly.
> 
> I couldn't get this to work.  I needed to pass additional arguments into the 
> constructor, but got an error if I passed in an array of string => string 
> pairs and there was no documentation about how to convert such an array into 
> a format that the function would accept, so I gave up on this approach.
> 
>> In the long term, the legacy wikitext preprocessor will be removed, so
>> you may want to reach out to the Parsing Team[2] to find out how you
>> can make your code ready for Parsoid-PHP.
> 
> Based on that comment, I suspect that further upgrade work will be required 
> in due course, but at least I have solved the immediate problem.... for now!
> 
> Thanks for your help,
> 
> - Mark Clements
> (HappyDog)
> 
> 
> 
> 
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l


_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to