Move Cite-specific settings from WikiEditor

The WikiEditor extension has a button and some help text that
is only applicable if the Cite extension is enabled. Move
that (with some modifications) to the Cite extension instead.

Bug: T339973
Depends-On: I8256660f9c6886d6764b45735284e00308fc56e5
Change-Id: Ib3fdc897dd3330f69c5832003d4c3cb1e6dba2f3
This commit is contained in:
Jon Harald Søby 2023-06-21 16:40:12 +02:00
parent bad83bbb21
commit c66371b3d9
10 changed files with 269 additions and 36 deletions

View file

@ -34,6 +34,7 @@ Jackmcbarn
James D. Forrester James D. Forrester
Jan Paul Posma Jan Paul Posma
Jens Frank Jens Frank
Jon Harald Søby
Jon Robson Jon Robson
Kaity Hammerstein Kaity Hammerstein
Kevin Brown Kevin Brown

View file

@ -30,11 +30,15 @@
"ParserClearState": "parser", "ParserClearState": "parser",
"ParserCloned": "parser", "ParserCloned": "parser",
"ParserFirstCallInit": "parser", "ParserFirstCallInit": "parser",
"EditPage::showEditForm:initial": "main",
"ResourceLoaderGetConfigVars": "main" "ResourceLoaderGetConfigVars": "main"
}, },
"HookHandlers": { "HookHandlers": {
"main": { "main": {
"class": "Cite\\Hooks\\CiteHooks" "class": "Cite\\Hooks\\CiteHooks",
"services": [
"UserOptionsLookup"
]
}, },
"parser": { "parser": {
"class": "Cite\\Hooks\\CiteParserHooks" "class": "Cite\\Hooks\\CiteParserHooks"
@ -185,6 +189,40 @@
"mobile" "mobile"
] ]
}, },
"ext.cite.wikiEditor": {
"localBasePath": "modules",
"remoteExtPath": "Cite/modules",
"scripts": [
"ext.cite.wikiEditor.js"
],
"dependencies": [
"ext.wikiEditor",
"mediawiki.jqueryMsg",
"mediawiki.language"
],
"messages": [
"cite-wikieditor-tool-reference",
"cite-wikieditor-help-page-references",
"cite-wikieditor-help-content-reference-example-text1",
"cite-wikieditor-help-content-reference-example-text2",
"cite-wikieditor-help-content-reference-example-text3",
"cite-wikieditor-help-content-reference-example-ref-id",
"cite-wikieditor-help-content-reference-example-ref-normal",
"cite-wikieditor-help-content-reference-example-ref-named",
"cite-wikieditor-help-content-reference-example-ref-reuse",
"cite-wikieditor-help-content-reference-example-ref-result",
"cite-wikieditor-help-content-reference-example-reflist",
"cite-wikieditor-help-content-reference-description",
"cite-wikieditor-help-content-named-reference-description",
"cite-wikieditor-help-content-rereference-description",
"cite-wikieditor-help-content-showreferences-description",
"cite_reference_backlink_symbol"
],
"targets": [
"desktop",
"mobile"
]
},
"ext.cite.ux-enhancements": { "ext.cite.ux-enhancements": {
"localBasePath": "modules", "localBasePath": "modules",
"remoteExtPath": "Cite/modules", "remoteExtPath": "Cite/modules",

View file

@ -43,10 +43,11 @@
"cite_reference_link_suffix": "", "cite_reference_link_suffix": "",
"cite_references_link_prefix": "cite_note-", "cite_references_link_prefix": "cite_note-",
"cite_references_link_suffix": "", "cite_references_link_suffix": "",
"cite_reference_backlink_symbol": "↑",
"cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|&#91;$3&#93;]]</sup>", "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|&#91;$3&#93;]]</sup>",
"cite_references_no_link": "<p id=\"$1\">$2</p>", "cite_references_no_link": "<p id=\"$1\">$2</p>",
"cite_references_link_one": "<li id=\"$1\"$4><span class=\"mw-cite-backlink\">[[#$2|]]</span> $3</li>", "cite_references_link_one": "<li id=\"$1\"$4><span class=\"mw-cite-backlink\">[[#$2|$5]]</span> $3</li>",
"cite_references_link_many": "<li id=\"$1\"$4><span class=\"mw-cite-backlink\"> $2</span> $3</li>", "cite_references_link_many": "<li id=\"$1\"$4><span class=\"mw-cite-backlink\">$5 $2</span> $3</li>",
"cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>", "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
"cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz", "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
"cite_references_link_many_sep": "&#32;", "cite_references_link_many_sep": "&#32;",
@ -56,5 +57,20 @@
"cite_references_link_accessibility_back_label": "Jump back up", "cite_references_link_accessibility_back_label": "Jump back up",
"cite_section_preview_references": "Preview of references", "cite_section_preview_references": "Preview of references",
"cite_warning": "Cite warning: $1", "cite_warning": "Cite warning: $1",
"cite_warning_sectionpreview_no_text": "<code>&lt;ref&gt;</code> tag with name <code>$1</code> cannot be previewed because it is defined outside the current section or not defined at all." "cite_warning_sectionpreview_no_text": "<code>&lt;ref&gt;</code> tag with name <code>$1</code> cannot be previewed because it is defined outside the current section or not defined at all.",
"cite-wikieditor-tool-reference": "Reference",
"cite-wikieditor-help-page-references": "References",
"cite-wikieditor-help-content-reference-description": "Reference",
"cite-wikieditor-help-content-named-reference-description": "Named reference",
"cite-wikieditor-help-content-rereference-description": "Additional use of the same reference",
"cite-wikieditor-help-content-showreferences-description": "Display references",
"cite-wikieditor-help-content-reference-example-text1": "Page text.$1",
"cite-wikieditor-help-content-reference-example-text2": "[$1 Link text], additional text.",
"cite-wikieditor-help-content-reference-example-text3": "[$1 Link text]",
"cite-wikieditor-help-content-reference-example-ref-id": "test",
"cite-wikieditor-help-content-reference-example-ref-normal": "<ref>$1</ref>",
"cite-wikieditor-help-content-reference-example-ref-named": "<ref name=\"$1\">$2</ref>",
"cite-wikieditor-help-content-reference-example-ref-reuse": "<ref name=\"$1\" />",
"cite-wikieditor-help-content-reference-example-ref-result": "[$1]",
"cite-wikieditor-help-content-reference-example-reflist": "<references />"
} }

View file

@ -47,10 +47,11 @@
"cite_reference_link_suffix": "{{notranslate}}", "cite_reference_link_suffix": "{{notranslate}}",
"cite_references_link_prefix": "{{notranslate}}", "cite_references_link_prefix": "{{notranslate}}",
"cite_references_link_suffix": "{{ignored}}", "cite_references_link_suffix": "{{ignored}}",
"cite_reference_backlink_symbol": "{{optional}}\nSymbol used for the reference section, used to link back to where the reference is used.",
"cite_reference_link": "{{notranslate}}\n\nParameters:\n* $1 - ref key\n* $2 - references key\n* $3 - link label", "cite_reference_link": "{{notranslate}}\n\nParameters:\n* $1 - ref key\n* $2 - references key\n* $3 - link label",
"cite_references_no_link": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - reference text", "cite_references_no_link": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - reference text",
"cite_references_link_one": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - ref key\n* $3 - reference text\n* $4 - optional CSS class for direction", "cite_references_link_one": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - ref key\n* $3 - reference text\n* $4 - optional CSS class for direction\n* $5 - {{msg-mw|cite_reference_backlink_symbol}}",
"cite_references_link_many": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - list of links\n* $3 - reference text\n* $4 - optional CSS class for direction", "cite_references_link_many": "{{notranslate}}\n\nParameters:\n* $1 - references key\n* $2 - list of links\n* $3 - reference text\n* $4 - optional CSS class for direction\n* $5 - {{msg-mw|cite_reference_backlink_symbol}}",
"cite_references_link_many_format": "{{notranslate}}\n\nParameters:\n* $1 - reference key\n* $2 - canonical numeric backlink label for the link, always in the form \"1.2\"\n* $3 - optional alternate backlink label as defined via [[MediaWiki:cite_references_link_many_format_backlink_labels]]", "cite_references_link_many_format": "{{notranslate}}\n\nParameters:\n* $1 - reference key\n* $2 - canonical numeric backlink label for the link, always in the form \"1.2\"\n* $3 - optional alternate backlink label as defined via [[MediaWiki:cite_references_link_many_format_backlink_labels]]",
"cite_references_link_many_format_backlink_labels": "{{Optional}}", "cite_references_link_many_format_backlink_labels": "{{Optional}}",
"cite_references_link_many_sep": "{{notranslate}}", "cite_references_link_many_sep": "{{notranslate}}",
@ -60,5 +61,20 @@
"cite_references_link_accessibility_back_label": "Text for screen readers to describe the jump back to the last citation clicked for citations used in multiple places.", "cite_references_link_accessibility_back_label": "Text for screen readers to describe the jump back to the last citation clicked for citations used in multiple places.",
"cite_section_preview_references": "Header for the section providing a preview of references in section preview", "cite_section_preview_references": "Header for the section providing a preview of references in section preview",
"cite_warning": "Used when there are warnings about ref or references tags (less severe than errors).\n\nParameters:\n* $1 - a warning message", "cite_warning": "Used when there are warnings about ref or references tags (less severe than errors).\n\nParameters:\n* $1 - a warning message",
"cite_warning_sectionpreview_no_text": "This warning occurs when the tag <code>&lt;ref name=\"something\"/&gt;</code> is used with the name-option specified but the definition for this named ref is outside of the currently being previewed section, or not defined at all.\n\nParameters:\n* $1 - key of the ref" "cite_warning_sectionpreview_no_text": "This warning occurs when the tag <code>&lt;ref name=\"something\"/&gt;</code> is used with the name-option specified but the definition for this named ref is outside of the currently being previewed section, or not defined at all.\n\nParameters:\n* $1 - key of the ref",
"cite-wikieditor-tool-reference": "Tooltip for the insert reference button in the WikiEditor tool bar.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-page-references": "Header for the reference section in WikiEditor's help menu.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-reference-description": "Row header in WikiEditor's reference help section.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-named-reference-description": "Row header in WikiEditor's reference help section.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-rereference-description": "Row header in WikiEditor's reference help section.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-showreferences-description": "Row header in WikiEditor's reference help section.\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-reference-example-text1": "Short sample text with a reference.\n\nParameters:\n* $1 - a &lt;ref&gt; tag\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-reference-example-text2": "Short sample of something that can be put between &lt;ref&gt; tags.\n\nParameters:\n* $1 - a URL\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-reference-example-text3": "Short sample of external link syntax.\n\nParameters:\n* $1 - a URL\n\n{{doc-jqueryMsg}}",
"cite-wikieditor-help-content-reference-example-ref-id": "{{optional}}\nUsed as an example of a name for a reference.",
"cite-wikieditor-help-content-reference-example-ref-normal": "{{ignored}}",
"cite-wikieditor-help-content-reference-example-ref-named": "{{ignored}}",
"cite-wikieditor-help-content-reference-example-ref-reuse": "{{ignored}}",
"cite-wikieditor-help-content-reference-example-ref-result": "{{ignored}}",
"cite-wikieditor-help-content-reference-example-reflist": "{{ignored}}"
} }

View file

@ -0,0 +1,112 @@
/**
* Add Cite-specific functionality to the WikiEditor toolbar.
* Adds a button to insert <ref> tags, and adds a help section
* about how to use references to WikiEditor's help panel.
*
* @author Jon Harald Søby
*/
$( function () {
mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) {
/* Add the <ref></ref> button to the toolbar */
$textarea.wikiEditor( 'addToToolbar', {
section: 'main',
group: 'insert',
tools: {
reference: {
labelMsg: 'cite-wikieditor-tool-reference',
filters: [ 'body.ns-subject' ],
type: 'button',
oouiIcon: 'reference',
action: {
type: 'encapsulate',
options: {
pre: '<ref>',
post: '</ref>'
}
}
}
}
} );
/* Add reference help to the Help section */
var parsedRef = function ( number ) {
return $( '<sup>' )
.addClass( 'reference' )
.append(
$( '<a>' )
.attr( 'href', '#' )
.text(
mw.message( 'cite-wikieditor-help-content-reference-example-ref-result', mw.language.convertNumber( number ) ).text()
)
);
};
$textarea.wikiEditor( 'addToToolbar', {
section: 'help',
pages: {
references: {
labelMsg: 'cite-wikieditor-help-page-references',
layout: 'table',
headings: [
{ textMsg: 'wikieditor-toolbar-help-heading-description' },
{ textMsg: 'wikieditor-toolbar-help-heading-syntax' },
{ textMsg: 'wikieditor-toolbar-help-heading-result' }
],
rows: [
{
description: { html: mw.message( 'cite-wikieditor-help-content-reference-description' ).parse() },
syntax: {
html: mw.html.escape(
mw.message( 'cite-wikieditor-help-content-reference-example-text1', mw.message( 'cite-wikieditor-help-content-reference-example-ref-normal', mw.message( 'cite-wikieditor-help-content-reference-example-text2', 'https://www.example.org/' ).plain() ).plain() ).plain()
)
},
result: {
html: mw.message( 'cite-wikieditor-help-content-reference-example-text1', parsedRef( 1 ) ).parse()
}
},
{
description: { html: mw.message( 'cite-wikieditor-help-content-named-reference-description' ).parse() },
syntax: {
html: mw.html.escape(
mw.message( 'cite-wikieditor-help-content-reference-example-text1', mw.message( 'cite-wikieditor-help-content-reference-example-ref-named', mw.message( 'cite-wikieditor-help-content-reference-example-ref-id' ).plain(), mw.message( 'cite-wikieditor-help-content-reference-example-text3', 'https://www.example.org/' ).plain() ).plain() ).plain()
)
},
result: {
html: mw.message( 'cite-wikieditor-help-content-reference-example-text1', parsedRef( 2 ) ).parse()
}
},
{
description: { html: mw.message( 'cite-wikieditor-help-content-rereference-description' ).parse() },
syntax: {
html: mw.html.escape(
mw.message( 'cite-wikieditor-help-content-reference-example-text1', mw.message( 'cite-wikieditor-help-content-reference-example-ref-reuse', mw.message( 'cite-wikieditor-help-content-reference-example-ref-id' ).plain() ).plain() ).plain()
)
},
result: {
html: mw.message( 'cite-wikieditor-help-content-reference-example-text1', parsedRef( 2 ) ).parse()
}
},
{
description: { html: mw.message( 'cite-wikieditor-help-content-showreferences-description' ).parse() },
syntax: {
html: mw.message( 'cite-wikieditor-help-content-reference-example-reflist' ).escaped()
},
result: {
html: '<ol class="references">' +
'<li><span class="mw-cite-backlink"><a href="#">' +
mw.message( 'cite_reference_backlink_symbol' ).parse() + '</a></span> ' +
mw.message( 'cite-wikieditor-help-content-reference-example-text2', window.location.href + '#' ).parse() +
'</li>' +
'<li><span class="mw-cite-backlink"><a href="#">' +
mw.message( 'cite_reference_backlink_symbol' ).parse() +
'</a></span> ' +
mw.message( 'cite-wikieditor-help-content-reference-example-text3', window.location.href + '#' ).parse() +
'</li></ol>'
}
}
]
}
}
} );
} );
}() );

View file

@ -8,16 +8,36 @@ namespace Cite\Hooks;
use ApiQuerySiteinfo; use ApiQuerySiteinfo;
use Config; use Config;
use ExtensionRegistry;
use MediaWiki\Api\Hook\APIQuerySiteInfoGeneralInfoHook; use MediaWiki\Api\Hook\APIQuerySiteInfoGeneralInfoHook;
use MediaWiki\EditPage\EditPage;
use MediaWiki\Hook\EditPage__showEditForm_initialHook;
use MediaWiki\ResourceLoader\Hook\ResourceLoaderGetConfigVarsHook; use MediaWiki\ResourceLoader\Hook\ResourceLoaderGetConfigVarsHook;
use MediaWiki\Revision\Hook\ContentHandlerDefaultModelForHook; use MediaWiki\Revision\Hook\ContentHandlerDefaultModelForHook;
use MediaWiki\User\UserOptionsLookup;
use OutputPage;
use Title; use Title;
/**
* @phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
*/
class CiteHooks implements class CiteHooks implements
ContentHandlerDefaultModelForHook, ContentHandlerDefaultModelForHook,
ResourceLoaderGetConfigVarsHook, ResourceLoaderGetConfigVarsHook,
APIQuerySiteInfoGeneralInfoHook APIQuerySiteInfoGeneralInfoHook,
EditPage__showEditForm_initialHook
{ {
/** @var UserOptionsLookup */
private $userOptionsLookup;
/**
* @param UserOptionsLookup $userOptionsLookup
*/
public function __construct( UserOptionsLookup $userOptionsLookup ) {
$this->userOptionsLookup = $userOptionsLookup;
}
/** /**
* Convert the content model of a message that is actually JSON to JSON. This * Convert the content model of a message that is actually JSON to JSON. This
* only affects validation and UI when saving and editing, not loading the * only affects validation and UI when saving and editing, not loading the
@ -62,4 +82,29 @@ class CiteHooks implements
$results['citeresponsivereferences'] = $module->getConfig()->get( 'CiteResponsiveReferences' ); $results['citeresponsivereferences'] = $module->getConfig()->get( 'CiteResponsiveReferences' );
} }
/**
* Hook: EditPage::showEditForm:initial
*
* Add the module for WikiEditor
*
* @param EditPage $editPage the current EditPage object.
* @param OutputPage $outputPage object.
*/
public function onEditPage__showEditForm_initial( $editPage, $outputPage ) {
if ( $editPage->contentModel !== CONTENT_MODEL_WIKITEXT ) {
return;
}
$wikiEditorEnabled = ExtensionRegistry::getInstance()->isLoaded( 'WikiEditor' );
$user = $editPage->getArticle()->getContext()->getUser();
if (
$wikiEditorEnabled &&
$this->userOptionsLookup->getBoolOption( $user, 'usebetatoolbar' )
) {
$outputPage->addModules( 'ext.cite.wikiEditor' );
}
}
} }

View file

@ -181,7 +181,8 @@ class ReferencesFormatter {
$this->anchorFormatter->getReferencesKey( $id ), $this->anchorFormatter->getReferencesKey( $id ),
$backlinkId, $backlinkId,
$text . $error, $text . $error,
$extraAttributes $extraAttributes,
$this->messageLocalizer->msg( 'cite_reference_backlink_symbol' )->parse()
)->plain(); )->plain();
} }
@ -206,7 +207,8 @@ class ReferencesFormatter {
$this->anchorFormatter->getReferencesKey( $key . '-' . ( $val['key'] ?? '' ) ), $this->anchorFormatter->getReferencesKey( $key . '-' . ( $val['key'] ?? '' ) ),
$this->listToText( $backlinks ), $this->listToText( $backlinks ),
$text . $error, $text . $error,
$extraAttributes $extraAttributes,
$this->messageLocalizer->msg( 'cite_reference_backlink_symbol' )->parse()
)->plain(); )->plain();
} }

View file

@ -5,6 +5,7 @@ namespace Cite\Tests;
use ApiQuerySiteinfo; use ApiQuerySiteinfo;
use Cite\Hooks\CiteHooks; use Cite\Hooks\CiteHooks;
use MediaWiki\MediaWikiServices; use MediaWiki\MediaWikiServices;
use MediaWiki\User\StaticUserOptionsLookup;
/** /**
* @coversDefaultClass \Cite\Hooks\CiteHooks * @coversDefaultClass \Cite\Hooks\CiteHooks
@ -20,7 +21,8 @@ class CiteHooksTest extends \MediaWikiIntegrationTestCase {
$vars = []; $vars = [];
$config = MediaWikiServices::getInstance()->getMainConfig(); $config = MediaWikiServices::getInstance()->getMainConfig();
$citeHooks = new CiteHooks();
$citeHooks = new CiteHooks( new StaticUserOptionsLookup( [] ) );
$citeHooks->onResourceLoaderGetConfigVars( $vars, 'vector', $config ); $citeHooks->onResourceLoaderGetConfigVars( $vars, 'vector', $config );
$this->assertArrayHasKey( 'wgCiteVisualEditorOtherGroup', $vars ); $this->assertArrayHasKey( 'wgCiteVisualEditorOtherGroup', $vars );
@ -38,7 +40,7 @@ class CiteHooksTest extends \MediaWikiIntegrationTestCase {
$data = []; $data = [];
$citeHooks = new CiteHooks(); $citeHooks = new CiteHooks( new StaticUserOptionsLookup( [] ) );
$citeHooks->onAPIQuerySiteInfoGeneralInfo( $api, $data ); $citeHooks->onAPIQuerySiteInfoGeneralInfo( $api, $data );
$this->assertArrayHasKey( 'citeresponsivereferences', $data ); $this->assertArrayHasKey( 'citeresponsivereferences', $data );

View file

@ -3,6 +3,7 @@
namespace Cite\Tests\Unit; namespace Cite\Tests\Unit;
use Cite\Hooks\CiteHooks; use Cite\Hooks\CiteHooks;
use MediaWiki\User\StaticUserOptionsLookup;
use Title; use Title;
/** /**
@ -19,7 +20,7 @@ class CiteHooksUnitTest extends \MediaWikiUnitTestCase {
$title->method( 'getText' ) $title->method( 'getText' )
->willReturn( 'Cite-tool-definition.json' ); ->willReturn( 'Cite-tool-definition.json' );
$citeHooks = new CiteHooks(); $citeHooks = new CiteHooks( new StaticUserOptionsLookup( [] ) );
$citeHooks->onContentHandlerDefaultModelFor( $title, $model ); $citeHooks->onContentHandlerDefaultModelFor( $title, $model );
$this->assertSame( CONTENT_MODEL_JSON, $model ); $this->assertSame( CONTENT_MODEL_JSON, $model );

View file

@ -68,7 +68,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
], ],
'<div class="mw-references-wrap"><ol class="references">' . "\n" . '<div class="mw-references-wrap"><ol class="references">' . "\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n</ol></div>" "\n||)</li>\n</ol></div>"
], ],
'Ref with extends' => [ 'Ref with extends' => [
[ [
@ -91,11 +91,11 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
], ],
'<div class="mw-references-wrap"><ol class="references">' . "\n" . '<div class="mw-references-wrap"><ol class="references">' . "\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t1</span>' . "\n" . '<li>(cite_references_link_many|||<span class="reference-text">t1</span>' . "\n" .
'|)<ol class="mw-extended-references"><li>(cite_references_link_many|||' . '||)<ol class="mw-extended-references"><li>(cite_references_link_many|||' .
'<span class="reference-text">t2</span>' . "\n|)</li>\n" . '<span class="reference-text">t2</span>' . "\n||)</li>\n" .
"</ol></li>\n" . "</ol></li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t3</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t3</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'</ol></div>' '</ol></div>'
], ],
'Subref of subref' => [ 'Subref of subref' => [
@ -122,11 +122,11 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
], ],
'<div class="mw-references-wrap"><ol class="references">' . "\n" . '<div class="mw-references-wrap"><ol class="references">' . "\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t3</span>' . "\n" . '<li>(cite_references_link_many|||<span class="reference-text">t3</span>' . "\n" .
'|)<ol class="mw-extended-references"><li>(cite_references_link_many|||' . '||)<ol class="mw-extended-references"><li>(cite_references_link_many|||' .
'<span class="reference-text">t1 (cite_error_ref_nested_extends|a|b)</span>' . '<span class="reference-text">t1 (cite_error_ref_nested_extends|a|b)</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t2</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t2</span>' .
"\n|)</li>\n</ol></li>\n" . "\n||)</li>\n</ol></li>\n" .
'</ol></div>' '</ol></div>'
], ],
'Use columns' => [ 'Use columns' => [
@ -138,27 +138,27 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
), ),
'<div class="mw-references-wrap mw-references-columns"><ol class="references">' . '<div class="mw-references-wrap mw-references-columns"><ol class="references">' .
"\n" . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' . "\n" . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n" . "\n||)</li>\n" .
'<li>(cite_references_link_many|||<span class="reference-text">t</span>' . '<li>(cite_references_link_many|||<span class="reference-text">t</span>' .
"\n|)</li>\n</ol></div>" "\n||)</li>\n</ol></div>"
], ],
]; ];
} }
@ -241,7 +241,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
[ [
'text' => 't', 'text' => 't',
], ],
'(cite_references_link_many|1-||<span class="reference-text">t</span>' . "\n|)" '(cite_references_link_many|1-||<span class="reference-text">t</span>' . "\n||)"
], ],
'With dir' => [ 'With dir' => [
1, 1,
@ -250,7 +250,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
'text' => 't', 'text' => 't',
], ],
'(cite_references_link_many|1-||<span class="reference-text">t</span>' . '(cite_references_link_many|1-||<span class="reference-text">t</span>' .
"\n" . '| class="mw-cite-dir-rtl")' "\n" . '| class="mw-cite-dir-rtl"|)'
], ],
'Incomplete follow' => [ 'Incomplete follow' => [
1, 1,
@ -267,7 +267,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
'key' => 5, 'key' => 5,
'text' => 't', 'text' => 't',
], ],
'(cite_references_link_one|1-5|1+5-0|<span class="reference-text">t</span>' . "\n|)" '(cite_references_link_one|1-5|1+5-0|<span class="reference-text">t</span>' . "\n||)"
], ],
'Count negative' => [ 'Count negative' => [
1, 1,
@ -277,7 +277,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
'number' => 3, 'number' => 3,
'text' => 't', 'text' => 't',
], ],
'(cite_references_link_one|5|5+|<span class="reference-text">t</span>' . "\n|)" '(cite_references_link_one|5|5+|<span class="reference-text">t</span>' . "\n||)"
], ],
'Count positive' => [ 'Count positive' => [
1, 1,
@ -292,7 +292,7 @@ class ReferencesFormatterTest extends \MediaWikiUnitTestCase {
'(cite_references_link_many_sep)(cite_references_link_many_format|1+5-1|3.1|' . '(cite_references_link_many_sep)(cite_references_link_many_format|1+5-1|3.1|' .
'(cite_error_references_no_backlink_label))(cite_references_link_many_and)' . '(cite_error_references_no_backlink_label))(cite_references_link_many_and)' .
'(cite_references_link_many_format|1+5-2|3.2|(cite_error_references_no_backlink_label' . '(cite_references_link_many_format|1+5-2|3.2|(cite_error_references_no_backlink_label' .
'))|<span class="reference-text">t</span>' . "\n|)" '))|<span class="reference-text">t</span>' . "\n||)"
], ],
]; ];
} }