mediawiki-extensions-CodeMi.../tests/selenium/pageobjects/edit.page.js
bhsd 506d998767 CodeMirror 6 template folding
This patch adds an icon displayed above the cursor inside a template. By clicking it, the template parameters become hidden and replaced by three dots, while the template name remains visible. Clicking the dots will unfold the template. New key bindings include fold (Ctrl-Shift-[/Cmd-Alt-[), unfold (Ctrl-Shift-]/Cmd-Alt-]) and unfoldAll (Ctrl-Alt-]).

Bug: T30684
Change-Id: I631fe0ecf21d0a80306bd40d66d22478a1aefe58
2024-03-07 13:47:47 +08:00

83 lines
1.8 KiB
JavaScript

'use strict';
const Page = require( 'wdio-mediawiki/Page' );
// Copied from mediawiki-core edit.page.js
class EditPage extends Page {
async openForEditing( title, cm6enable = false ) {
const queryParams = {
action: 'edit',
vehidebetadialog: 1,
hidewelcomedialog: 1
};
if ( cm6enable ) {
queryParams.cm6enable = '1';
}
await super.openTitle( title, queryParams );
}
get wikiEditorToolbar() {
return $( '#wikiEditor-ui-toolbar' );
}
get legacyTextInput() {
return $( '#wpTextbox1' );
}
get legacyCodeMirrorButton() {
return $( '#mw-editbutton-codemirror' );
}
async clickText() {
if ( await this.visualEditorSave.isDisplayed() ) {
await this.visualEditorSurface.click();
} else if ( await this.legacyTextInput.isDisplayed() ) {
await this.legacyTextInput.click();
} else {
// Click the container, if using WikiEditor etc.
await this.legacyTextInput.parentElement().click();
}
}
get visualEditorSave() {
return $( '.ve-ui-toolbar-saveButton' );
}
get visualEditorSurface() {
return $( '.ve-ui-surface-source' );
}
get codeMirrorTemplateFoldingButton() {
return $( '.cm-tooltip-fold' );
}
get codeMirrorTemplateFoldingPlaceholder() {
return $( '.cm-foldPlaceholder' );
}
async cursorToPosition( index ) {
await this.clickText();
// Second "Control" deactivates the modifier.
const keys = [ 'Control', 'Home', 'Control' ];
for ( let i = 0; i < index; i++ ) {
keys.push( 'ArrowRight' );
}
await browser.keys( keys );
}
get highlightedBrackets() {
return $$( '.CodeMirror-line .cm-mw-matchingbracket' );
}
async getHighlightedMatchingBrackets() {
await this.highlightedBrackets[ 0 ].waitForDisplayed();
const matchingTexts = await this.highlightedBrackets.map( function ( el ) {
return el.getText();
} );
return matchingTexts.join( '' );
}
}
module.exports = new EditPage();