Skip to content

Commit 7026772

Browse files
author
libraryupgrader
committed
build: Updating eslint-config-wikimedia to 0.28.0
The following rules are failing and were disabled: * modules/ve-mw/tests: * implicit-arrow-linebreak Change-Id: If857233c0de24c8cf619dbb1347ebb375f3ab1ba
1 parent 7789b55 commit 7026772

26 files changed

+636
-526
lines changed

Gruntfile.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,13 @@ module.exports = function ( grunt ) {
146146
grunt.registerTask( 'git-status', function () {
147147
const done = this.async();
148148
// Are there unstaged changes?
149-
require( 'child_process' ).exec( 'git ls-files --modified', function ( err, stdout, stderr ) {
149+
require( 'child_process' ).exec( 'git ls-files --modified', ( err, stdout, stderr ) => {
150150
const ret = err || stderr || stdout;
151151
if ( ret ) {
152152
grunt.log.error( 'Unstaged changes in these files:' );
153153
grunt.log.error( ret );
154154
// Show a condensed diff
155-
require( 'child_process' ).exec( 'git diff -U1 | tail -n +3', function ( err2, stdout2, stderr2 ) {
155+
require( 'child_process' ).exec( 'git diff -U1 | tail -n +3', ( err2, stdout2, stderr2 ) => {
156156
grunt.log.write( err2 || stderr2 || stdout2 );
157157
done( false );
158158
} );

build/checkModules.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,7 @@ function checkFiles() {
7676
const modulesFiles = new Set();
7777
addModulesToSet( modulesJson, modulesFiles, 'lib/ve' );
7878

79-
const missingFiles = Array.from( modulesFiles ).filter( ( file ) => {
80-
return !extensionFiles.has( file ) && !isIgnored( file );
81-
} );
79+
const missingFiles = Array.from( modulesFiles ).filter( ( file ) => !extensionFiles.has( file ) && !isIgnored( file ) );
8280

8381
if ( unusedIgnores.size ) {
8482
console.warn(

build/screenshots.diffs.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function runTests( lang ) {
1111

1212
test.describe( 'Screenshots: ' + lang, function () {
1313
this.lang = lang;
14-
test.it( 'Simple diff', function () {
14+
test.it( 'Simple diff', () => {
1515
runLang( 'VisualEditor_diff_simple', diffs.simple );
1616
runLang( 'VisualEditor_diff_move_and_change', diffs.moveAndChange );
1717
runLang( 'VisualEditor_diff_link_change', diffs.linkChange );

build/screenshots.js

+18-20
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ function createScreenshotEnvironment( test ) {
3333
driver.manage().window().setSize( 1200, 1000 );
3434

3535
driver.get( 'https://en.wikipedia.org/wiki/Help:Sample_page?veaction=edit&vehidebetadialog=1&uselang=' + lang )
36-
.then( null, function ( e ) {
36+
.then( null, ( e ) => {
3737
console.error( e.message );
3838
} );
3939
driver.wait(
4040
driver.executeAsyncScript(
4141
require( './screenshots-client/utils.js' )
42-
).then( function ( cs ) {
42+
).then( ( cs ) => {
4343
clientSize = cs;
44-
}, function ( e ) {
44+
}, ( e ) => {
4545
// Log error (timeout)
4646
console.error( e.message );
4747
// Setup failed, set clientSize to null so no screenshots are generated
@@ -50,9 +50,9 @@ function createScreenshotEnvironment( test ) {
5050
);
5151
} );
5252

53-
test.afterEach( function () {
53+
test.afterEach( () => {
5454
driver.quit()
55-
.then( null, function ( e ) {
55+
.then( null, ( e ) => {
5656
console.error( e.message );
5757
} );
5858
} );
@@ -67,7 +67,7 @@ function createScreenshotEnvironment( test ) {
6767
const right = Math.min( clientSize.width, rect.left + rect.width + padding );
6868
const bottom = Math.min( clientSize.height, rect.top + rect.height + padding );
6969

70-
return Jimp.read( imageBuffer ).then( function ( jimpImage ) {
70+
return Jimp.read( imageBuffer ).then( ( jimpImage ) => {
7171
try {
7272
jimpImage
7373
.crop( left, top, right - left, bottom - top )
@@ -89,20 +89,18 @@ function createScreenshotEnvironment( test ) {
8989

9090
driver.manage().timeouts().setScriptTimeout( TIMEOUT );
9191
driver.wait(
92-
driver.executeAsyncScript( clientScript ).then( function ( rect ) {
93-
return driver.takeScreenshot().then( function ( base64Image ) {
94-
if ( rect ) {
95-
const imageBuffer = Buffer.from( base64Image, 'base64' );
96-
return cropScreenshot( filename, imageBuffer, rect, padding );
97-
} else {
98-
fs.writeFile( filename, base64Image, 'base64' );
99-
}
100-
} ).then( function () {
101-
if ( teardownScript ) {
102-
return driver.executeAsyncScript( teardownScript );
103-
}
104-
} );
105-
}, function ( e ) {
92+
driver.executeAsyncScript( clientScript ).then( ( rect ) => driver.takeScreenshot().then( ( base64Image ) => {
93+
if ( rect ) {
94+
const imageBuffer = Buffer.from( base64Image, 'base64' );
95+
return cropScreenshot( filename, imageBuffer, rect, padding );
96+
} else {
97+
fs.writeFile( filename, base64Image, 'base64' );
98+
}
99+
} ).then( () => {
100+
if ( teardownScript ) {
101+
return driver.executeAsyncScript( teardownScript );
102+
}
103+
} ), ( e ) => {
106104
// Log error (timeout)
107105
console.error( e );
108106
} )

build/screenshots.userGuide.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function runTests( lang ) {
1111

1212
test.describe( 'Screenshots: ' + lang, function () {
1313
this.lang = lang;
14-
test.it( 'Screenshots', function () {
14+
test.it( 'Screenshots', () => {
1515

1616
// Toolbar & action tools
1717
runLang( 'VisualEditor_toolbar', userGuide.toolbar, 0 );
@@ -57,6 +57,6 @@ function runTests( lang ) {
5757
} );
5858
}
5959

60-
langs.forEach( function ( lang ) {
60+
langs.forEach( ( lang ) => {
6161
runTests( lang );
6262
} );

modules/ve-mw/tests/.eslintrc.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@
1212
"sinon": "readonly"
1313
},
1414
"rules": {
15-
"compat/compat": [ "error", "last 2 chrome versions, last 2 firefox versions" ],
15+
"compat/compat": [
16+
"error",
17+
"last 2 chrome versions, last 2 firefox versions"
18+
],
1619
"indent": "off",
1720
"no-jquery/no-html": "off",
18-
"no-jquery/no-parse-html-literal": "off"
21+
"no-jquery/no-parse-html-literal": "off",
22+
"implicit-arrow-linebreak": "warn"
1923
},
2024
"parserOptions": {
2125
"ecmaVersion": 2018

modules/ve-mw/tests/dm/annotations/ve.dm.MWInternalLinkAnnotation.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,6 @@ QUnit.test.each( 'getFragment', {
235235
original: 'Foo#bar#baz#bat',
236236
expected: 'bar#baz#bat'
237237
}
238-
}, function ( assert, { original, expected } ) {
238+
}, ( assert, { original, expected } ) => {
239239
assert.strictEqual( ve.dm.MWInternalLinkAnnotation.static.getFragment( original ), expected );
240240
} );

modules/ve-mw/tests/dm/models/ve.dm.MWTemplateModel.test.js

+6-12
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444
[ '/unexpected_prefix', '/unexpected prefix' ],
4545
[ './Template:%C3%9Cnicode%5Fexample/subpage', 'Template:Ünicode example/subpage' ],
4646
[ './Template:Possibly_invalid%5B%5D', 'Template:Possibly invalid[]' ]
47-
].forEach( ( [ href, expected ] ) =>
48-
QUnit.test( 'getTitle: ' + href, ( assert ) => {
47+
].forEach( ( [ href, expected ] ) => QUnit.test( 'getTitle: ' + href, ( assert ) => {
4948
const transclusion = { nextUniquePartId: () => '' },
5049
template = new ve.dm.MWTemplateModel( transclusion, { href } );
5150
assert.strictEqual( template.getTitle(), expected );
@@ -200,8 +199,7 @@
200199
},
201200
expected: [ 'foo', 'bar', 'Bar', 'empty' ]
202201
}
203-
].forEach( ( { name, spec, expected } ) =>
204-
QUnit.test( name, ( assert ) => {
202+
].forEach( ( { name, spec, expected } ) => QUnit.test( name, ( assert ) => {
205203
const template = newTemplateModel();
206204

207205
template.getSpec().setTemplateData( spec );
@@ -322,8 +320,7 @@
322320
''
323321
]
324322
}
325-
].forEach( ( { name, spec, expected } ) =>
326-
QUnit.test( 'getOrderedParameterNames: ' + name, ( assert ) => {
323+
].forEach( ( { name, spec, expected } ) => QUnit.test( 'getOrderedParameterNames: ' + name, ( assert ) => {
327324
const template = newTemplateModel();
328325

329326
if ( spec ) {
@@ -459,8 +456,7 @@
459456
''
460457
]
461458
}
462-
].forEach( ( { name, spec, expected } ) =>
463-
QUnit.test( 'getAllParametersOrdered: ' + name, ( assert ) => {
459+
].forEach( ( { name, spec, expected } ) => QUnit.test( 'getAllParametersOrdered: ' + name, ( assert ) => {
464460
const template = newTemplateModel();
465461

466462
if ( spec ) {
@@ -493,8 +489,7 @@
493489
[ ' SUBST: a', 'b', 'Template:A', 'ignores capitalization and whitespace' ],
494490
[ 'subst :a', 'b', 'Template:Subst :a', 'leaves bad whitespace untouched' ],
495491
[ 'int:a', 'b', 'Template:Int:a', 'leaves other prefixes untouched' ]
496-
].forEach( ( [ wt, href, expected, message ] ) =>
497-
QUnit.test( 'getTemplateDataQueryTitle: ' + message, ( assert ) => {
492+
].forEach( ( [ wt, href, expected, message ] ) => QUnit.test( 'getTemplateDataQueryTitle: ' + message, ( assert ) => {
498493
const transclusion = { nextUniquePartId: () => '' },
499494
data = { target: { wt, href } },
500495
model = ve.dm.MWTemplateModel.newFromData( transclusion, data );
@@ -512,8 +507,7 @@
512507
[ { p1: { wt: ' ' } }, true, 'space' ],
513508
[ { p1: { wt: '0' } }, true, '0' ],
514509
[ { p1: { wt: '\nfoo' } }, true, 'newline' ]
515-
].forEach( ( [ params, expected, message ] ) =>
516-
QUnit.test( 'containsValuableData: ' + message, ( assert ) => {
510+
].forEach( ( [ params, expected, message ] ) => QUnit.test( 'containsValuableData: ' + message, ( assert ) => {
517511
const transclusion = { nextUniquePartId: () => '' },
518512
data = { target: {}, params },
519513
model = ve.dm.MWTemplateModel.newFromData( transclusion, data );

modules/ve-mw/tests/dm/models/ve.dm.MWTemplateSpecModel.test.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,7 @@
118118
[ '{{a_a}}', './Talk:b_b', 'Talk:B b', 'does not strip other namespaces' ],
119119
[ '{{a_a}}', './b_b', ':B b', 'title in main namespace must be prefixed' ],
120120
[ '{{a_a}}', './Template:{{b_b}}', 'Template:{{b b}}', 'falls back to unmodified href if invalid' ]
121-
].forEach( ( [ wt, href, expected, message ] ) =>
122-
QUnit.test( 'getLabel: ' + message, ( assert ) => {
121+
].forEach( ( [ wt, href, expected, message ] ) => QUnit.test( 'getLabel: ' + message, ( assert ) => {
123122
const transclusion = new ve.dm.MWTransclusionModel(),
124123
template = new ve.dm.MWTemplateModel( transclusion, { wt, href } ),
125124
spec = new ve.dm.MWTemplateSpecModel( template );
@@ -133,8 +132,7 @@
133132
null,
134133
[],
135134
{}
136-
].forEach( ( templateData ) =>
137-
QUnit.test( 'Invalid TemplateData, e.g. empty or without params', ( assert ) => {
135+
].forEach( ( templateData ) => QUnit.test( 'Invalid TemplateData, e.g. empty or without params', ( assert ) => {
138136
const template = createTemplateMock(),
139137
spec = new ve.dm.MWTemplateSpecModel( template );
140138

@@ -301,8 +299,7 @@
301299

302300
[ { notemplatedata: false }, true, 'unexpected false' ],
303301
[ { notemplatedata: '' }, true, 'unsupported formatversion=1' ]
304-
].forEach( ( [ templateData, expected, message ] ) =>
305-
QUnit.test( 'isDocumented(): ' + message, ( assert ) => {
302+
].forEach( ( [ templateData, expected, message ] ) => QUnit.test( 'isDocumented(): ' + message, ( assert ) => {
306303
const template = createTemplateMock(),
307304
spec = new ve.dm.MWTemplateSpecModel( template );
308305

modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionContentModel.test.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
[ ' ', true ],
1818
[ '0', true ],
1919
[ '\nfoo', true ]
20-
].forEach( ( [ wikitext, expected ] ) =>
21-
QUnit.test( 'containsValuableData: ' + wikitext, ( assert ) => {
20+
].forEach( ( [ wikitext, expected ] ) => QUnit.test( 'containsValuableData: ' + wikitext, ( assert ) => {
2221
const model = new ve.dm.MWTransclusionContentModel( createTransclusionModel(), wikitext );
2322

2423
assert.strictEqual( model.containsValuableData(), expected );

modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
} );
3232
};
3333

34-
QUnit.test( 'nextUniquePartId', function ( assert ) {
34+
QUnit.test( 'nextUniquePartId', ( assert ) => {
3535
const transclusion = new ve.dm.MWTransclusionModel();
3636
assert.strictEqual( transclusion.nextUniquePartId(), 'part_0' );
3737
assert.strictEqual( transclusion.nextUniquePartId(), 'part_1' );

modules/ve-mw/tests/dm/ve.dm.mwExample.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ ve.dm.mwExample = {};
1414

1515
ve.dm.mwExample.baseUri = 'http://example.com/wiki/';
1616

17-
ve.dm.mwExample.createExampleDocument = ( name, store, base ) =>
18-
ve.dm.example.createExampleDocumentFromObject( name, store, ve.dm.mwExample, base || ve.dm.mwExample.baseUri );
17+
ve.dm.mwExample.createExampleDocument = ( name, store, base ) => ve.dm.example.createExampleDocumentFromObject( name, store, ve.dm.mwExample, base || ve.dm.mwExample.baseUri );
1918

20-
ve.dm.mwExample.createExampleDocumentFromData = ( data, store, base ) =>
21-
ve.dm.example.createExampleDocumentFromData( data, store, base || ve.dm.mwExample.baseUri );
19+
ve.dm.mwExample.createExampleDocumentFromData = ( data, store, base ) => ve.dm.example.createExampleDocumentFromData( data, store, base || ve.dm.mwExample.baseUri );
2220

2321
ve.dm.mwExample.MWTransclusion = {
2422
blockOpen: ve.dm.example.singleLine`

modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ ve.test.utils.runWikitextStringHandlerTest = ( assert, server, string, mimeType,
2222
item = ve.ui.DataTransferItem.static.newFromString( string, mimeType ),
2323
doc = ve.dm.Document.static.newBlankDocument(),
2424
mockSurface = {
25-
getModel: () => {
26-
return {
25+
getModel: () => ( {
2726
getDocument: () => doc
28-
};
29-
},
27+
} ),
3028
createProgress: () => ve.createDeferred().promise()
3129
};
3230

modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ QUnit.module( 've.ui.FragmentInspector (MW)', ve.test.utils.newMwEnvironment( {
1414

1515
/* Tests */
1616

17-
QUnit.test( 'Wikitext link inspector', function ( assert ) {
17+
QUnit.test( 'Wikitext link inspector', ( assert ) => {
1818
const done = assert.async(),
1919
surface = ve.init.target.createSurface(
2020
ve.dm.converter.getModelFromDom(

modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ QUnit.test( 'Input event handlers', ( assert ) => {
4646
[ 'usedAliasNoLabel', '(visualeditor-dialog-transclusion-add-param-error-alias: usedAliasNoLabel, usedAliasNoLabel)' ],
4747
[ 'usedDeprecated', '(visualeditor-dialog-transclusion-add-param-error-exists-selected: usedDeprecated, usedDeprecated)' ],
4848
[ 'unusedDeprecated', '(visualeditor-dialog-transclusion-add-param-error-deprecated: unusedDeprecated, unusedDeprecated)' ]
49-
].forEach( ( [ input, expected ] ) =>
50-
QUnit.test( 'getValidationErrors: ' + input, ( assert ) => {
49+
].forEach( ( [ input, expected ] ) => QUnit.test( 'getValidationErrors: ' + input, ( assert ) => {
5150
const data = {
5251
target: {},
5352
params: {

modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ QUnit.module( 've.ui.MWParameterPage', ve.test.utils.newMwEnvironment );
3838
[ 'wiki-template-name', '', mw.widgets.TitleInputWidget ],
3939
[ 'wiki-template-name', 'GoodTitle', mw.widgets.TitleInputWidget ],
4040
[ 'wiki-template-name', '[[BadTitle]]', ve.ui.MWLazyMultilineTextInputWidget ]
41-
].forEach( ( [ type, value, expected ] ) =>
42-
QUnit.test( `createValueInput: ${ type }, ${ value }`, ( assert ) => {
41+
].forEach( ( [ type, value, expected ] ) => QUnit.test( `createValueInput: ${ type }, ${ value }`, ( assert ) => {
4342
const transclusion = new ve.dm.MWTransclusionModel(),
4443
template = new ve.dm.MWTemplateModel( transclusion, {} ),
4544
parameter = new ve.dm.MWParameterModel( template, 'p', value );
@@ -68,8 +67,7 @@ QUnit.module( 've.ui.MWParameterPage', ve.test.utils.newMwEnvironment );
6867
[ 'wiki-user-name', mw.widgets.UserInputWidget ],
6968
[ 'wiki-file-name', mw.widgets.TitleInputWidget ],
7069
[ 'wiki-template-name', mw.widgets.TitleInputWidget ]
71-
].forEach( ( [ type, expected ] ) =>
72-
QUnit.test( `suggestedvalues: ${ type }`, ( assert ) => {
70+
].forEach( ( [ type, expected ] ) => QUnit.test( `suggestedvalues: ${ type }`, ( assert ) => {
7371
const transclusion = new ve.dm.MWTransclusionModel(),
7472
template = new ve.dm.MWTemplateModel( transclusion, {} ),
7573
parameter = new ve.dm.MWParameterModel( template, 'p', '' );
@@ -119,8 +117,7 @@ QUnit.module( 've.ui.MWParameterPage', ve.test.utils.newMwEnvironment );
119117
'', ' ', true,
120118
'same for the default'
121119
]
122-
].forEach( ( [ value, defaultValue, expected, message ] ) =>
123-
QUnit.test( 'containsSomeValue: ' + message, ( assert ) => {
120+
].forEach( ( [ value, defaultValue, expected, message ] ) => QUnit.test( 'containsSomeValue: ' + message, ( assert ) => {
124121
const transclusion = new ve.dm.MWTransclusionModel(),
125122
template = new ve.dm.MWTemplateModel( transclusion, {} ),
126123
parameter = new ve.dm.MWParameterModel( template, 'p', value );

modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ QUnit.test( 'Constructor passes config to parent', ( assert ) => {
1313
[ '', false, 'empty string' ],
1414
[ '2', false, 'unexpected string' ],
1515
[ true, false, 'unexpected type' ]
16-
].forEach( ( [ value, expected, message ] ) =>
17-
QUnit.test( `setValue( ${ message } )`, ( assert ) => {
16+
].forEach( ( [ value, expected, message ] ) => QUnit.test( `setValue( ${ message } )`, ( assert ) => {
1817
const widget = new ve.ui.MWParameterCheckboxInputWidget();
1918
widget.setValue( value );
2019

@@ -26,8 +25,7 @@ QUnit.test( 'Constructor passes config to parent', ( assert ) => {
2625
[
2726
true,
2827
false
29-
].forEach( ( value ) =>
30-
QUnit.test( `setSelected( ${ value } )`, ( assert ) => {
28+
].forEach( ( value ) => QUnit.test( `setSelected( ${ value } )`, ( assert ) => {
3129
const widget = new ve.ui.MWParameterCheckboxInputWidget();
3230
widget.setSelected( value );
3331

modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js

+5-10
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
{
2-
const toggleCirrusSearchLookup = ( enabled ) =>
3-
mw.config.set( 'wgVisualEditorConfig', ve.extendObject( {}, mw.config.get( 'wgVisualEditorConfig' ), {
2+
const toggleCirrusSearchLookup = ( enabled ) => mw.config.set( 'wgVisualEditorConfig', ve.extendObject( {}, mw.config.get( 'wgVisualEditorConfig' ), {
43
cirrusSearchLookup: enabled !== false
54
} ) );
65

7-
const makeFakeApi = () => {
8-
return {
6+
const makeFakeApi = () => ( {
97
defaults: { parameters: {} },
10-
get: () => {
11-
return {
8+
get: () => ( {
129
abort: { bind: () => {} },
1310
then: () => {}
14-
};
15-
}
16-
};
17-
};
11+
} )
12+
} );
1813

1914
QUnit.module( 've.ui.MWTemplateTitleInputWidget', ve.test.utils.newMwEnvironment( {
2015
// Config will be reset by newMwEnvironment's teardown

modules/ve-mw/tests/ui/widgets/ve.ui.MWTransclusionOutlineWidget.test.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ QUnit.test( 'Adding and moving parts to specific positions', ( assert ) => {
7070
[ 'part_0/foo', 'foo' ],
7171
[ 'part_1/foo', null ],
7272
[ 'part_0/foo/bar', 'foo/bar' ]
73-
].forEach( ( [ pageName, expected ] ) =>
74-
QUnit.test( 'setSelectionByPageName: ' + pageName, ( assert ) => {
73+
].forEach( ( [ pageName, expected ] ) => QUnit.test( 'setSelectionByPageName: ' + pageName, ( assert ) => {
7574
const transclusion = new ve.dm.MWTransclusionModel(),
7675
template = new ve.dm.MWTemplateModel( transclusion, { wt: '' } ),
7776
partWidget = new ve.ui.MWTransclusionOutlineTemplateWidget( template ),

0 commit comments

Comments
 (0)