"Máté Szabó" mszabo@wikia-inc.com wrote in message news:633F17EB-07CB-42A8-B8F8-30D703D787E1@wikia-inc.com...
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.
That's useful info - I will take a look to see if that leads to a cleaner solution. Would be good if there were some documentation that covers all this, but I guess one can only dream! :-)
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. :)
Yeah - I started looking into it, but there's still too many holes in the documentation and too much stuff that feels like it might change further. I'll wait until the release notes indicate impending doom!
Kind regards,
- Mark Clements (HappyDog)
-----------
Best, Máté Szabó Sr. Software Engineer he - him - his
Fandom Poland sp. z o.o. z siedziba w Poznaniu, ul. Abp. A. Baraniaka 6 Sad Rejonowy Poznan - Nowe Miasto i Wilda w Poznaniu, VIII Wydzial Gospodarczy Krajowego Rejestru Sadowego, KRS 0000254365 NIP: 5252358778 Kapital zakladowy: 50.000,00 zlotych
On 8 Apr 2021, at 02:44, Mark Clements (HappyDog) gmane@kennel17.co.uk wrote:
"M?t? Szab?" mszabo@wikia-inc.com wrote in message news:80E88BAC-AE9B-42AE-A0BA-834A39A7A292@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