Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5984341
CiteDocumentPostProcessor.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
CiteDocumentPostProcessor.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
Cite\Parsoid
;
use
MediaWiki\Config\Config
;
use
Wikimedia\Parsoid\Core\DomSourceRange
;
use
Wikimedia\Parsoid\DOM\Element
;
use
Wikimedia\Parsoid\DOM\Node
;
use
Wikimedia\Parsoid\Ext\DOMProcessor
;
use
Wikimedia\Parsoid\Ext\ParsoidExtensionAPI
;
/**
* Wikitext → HTML DOM PostProcessor
* @license GPL-2.0-or-later
*/
class
CiteDocumentPostProcessor
extends
DOMProcessor
{
private
Config
$mainConfig
;
public
function
__construct
(
Config
$mainConfig
)
{
$this
->
mainConfig
=
$mainConfig
;
}
/**
* @inheritDoc
*/
public
function
wtPostprocess
(
ParsoidExtensionAPI
$extApi
,
Node
$node
,
array
$options
):
void
{
$refsData
=
new
ReferencesData
();
$references
=
new
References
(
$this
->
mainConfig
);
$references
->
processRefs
(
$extApi
,
$refsData
,
$node
);
$this
->
insertMissingReferencesIntoDOM
(
$extApi
,
$refsData
,
$node
);
(
new
ErrorUtils
(
$extApi
)
)->
addEmbeddedErrors
(
$refsData
,
$node
);
}
/**
* Process `<ref>`s left behind after the DOM is fully processed.
* We process them as if there was an implicit `<references />` tag at
* the end of the DOM.
*/
public
function
insertMissingReferencesIntoDOM
(
ParsoidExtensionAPI
$extApi
,
ReferencesData
$referencesData
,
Node
$node
):
void
{
$references
=
new
References
(
$this
->
mainConfig
);
$doc
=
$node
->
ownerDocument
;
foreach
(
$referencesData
->
getRefGroups
()
as
$groupName
=>
$refsGroup
)
{
$domFragment
=
$doc
->
createDocumentFragment
();
$refFragment
=
$references
->
createEmptyReferenceListFragment
(
$extApi
,
$domFragment
,
[
// Force string cast here since in the foreach above, $groupName
// is an array key. In that context, number-like strings are
// silently converted to a numeric value!
// Ex: In <ref group="2" />, the "2" becomes 2 in the foreach
'group'
=>
(
string
)
$groupName
,
'responsive'
=>
null
,
],
static
function
(
$dp
)
use
(
$extApi
)
{
// The new references come out of "nowhere", so to make selser work
// properly, add a zero-sized DSR pointing to the end of the document.
$content
=
$extApi
->
getPageConfig
()->
getRevisionContent
()->
getContent
(
'main'
);
$contentLength
=
strlen
(
$content
);
$dp
->
dsr
=
new
DomSourceRange
(
$contentLength
,
$contentLength
,
0
,
0
);
},
true
);
// Add a \n before the <ol> so that when serialized to wikitext,
// each <references /> tag appears on its own line.
$node
->
appendChild
(
$doc
->
createTextNode
(
"
\n
"
)
);
$node
->
appendChild
(
$refFragment
);
$references
->
insertReferencesIntoDOM
(
$extApi
,
$refFragment
,
$referencesData
,
true
);
}
}
/**
* HTML → Wikitext DOM PreProcessor
*
* Nothing to do right now.
*
* But, for example, as part of some future functionality, this could be used to
* reconstitute page-level information from local annotations left behind by editing clients.
*/
public
function
htmlPreprocess
(
ParsoidExtensionAPI
$extApi
,
Element
$root
):
void
{
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 23:18 (2 w, 23 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
8d/e9/f7a3f7b2ea1f45cc82c1db1bbd89
Default Alt Text
CiteDocumentPostProcessor.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment