Why does it treat the img tag as a literal string, but not an h2 tag, for example?
On Tue, Feb 23, 2016 at 2:42 PM, Subramanya Sastry ssastry@wikimedia.org wrote:
On 02/23/2016 02:30 PM, James Montalvo wrote:
Thank you for the quick reply!
Unless I'm misunderstanding, I don't believe "noparse" is the culprit for the external images. Your explanation certainly explains the behavior of [[File:Test.png]] when I had "noparse"=true, since in view-mode it would not be parsed, but via Parsoid/API:Expandtemplates it would.
The external image, however, displayed properly in view-mode regardless of whether "noparse" was true or false, since it was already valid HTML and didn't require parsing. In VE it seems to be reacting as though <img> tags are not allowed.
Right, Parsoid treats the img tag as a literal string in the sanitizer. Here is commandline output that demionstrates this.
[subbu@earth lib] echo "<img src='http://goo.gl/fh3yKh' />" | parse.js --normalize
<p><img src='http://goo.gl/fh3yKh' /></p>
But, if Parsoid was aware of this being valid/trusted HTML (via the isHTML flag), it could wrap the HTML in a DOM fragment and tunnel it through the sanitizer .. for example, as with the <math> tag.
Subbu.
--James
On Tue, Feb 23, 2016 at 1:24 PM, Subramanya Sastry <ssastry@wikimedia.org
wrote:
On 02/23/2016 12:45 PM, James Montalvo wrote:
I'm trying to make images from an external source, provided by a parser
function, work with VisualEditor and Parsoid. For a very simplified illustration I added the following to the bottom of LocalSettings.php
$wgExtensionMessagesFiles['myPfTest'] = "$IP/myPfTest.php"; $wgHooks['ParserFirstCallInit'][] = function( &$parser ) { $parser->setFunctionHook( 'test_func', function ( &$parser ) { // Output a wiki image and an external image $output = "[[File:Test.png|frameless|300px]]" . "<br />" . "<img src='http://goo.gl/fh3yKh' />"; return array( $output, "noparse" => true, "isHTML" => true, TL:DR; Parsoid does not support the noparse / isHTML options right nowwhich explains everything that you describe in your email.
More specifically, Parsoid queries the mediawiki API to get expanded wikitext for template and parser functions and as https://www.mediawiki.org/wiki/API:Expandtemplates shows (unless I has misread it), we don't have access to the noparse / isHTML information. So, when Parsoid receives the text back, it treats it as wikitext and parses it. Fixing this will require updating the expandtemplates API to return this information to Parsoid.
Separately and somewhat tangentially, we have implemented native extension support in Parsoid. We are still working through our support for it by porting some tag extensions to Parsoid. In the process, we expect it will go through some more changes and tweaks, and we will document this fully at that point.
In that context, while we hadn't anticipated this use case, we could potentially provide the equivalent of function hooks within Parsoid. These hooks will not be attached to the parsing lifecycle since the parsing lifecycle is different in the PHP core parser and Parsoid (or for any other hypothetical future implementation of wikitext parsing that someone else might implement). But, once in place, this will let you replicate this transformation (which is what it is, in reality) in Parsoid either by having the output of the function parsed, wrapping it as a string, or treating it as a DOM fragment. But, I am mostly thinking aloud here at this point.
So, long story short, there isn't a way to do what you are trying to do in VE/Parsoid .... yet.
Subbu.
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
Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l