mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-15 21:56:18 -08:00
fix(import): consistent add-source forms with masked passwords and URL errors
- Mask the Xtream password in add and edit (and the Stalker one in edit) behind a shared PasswordVisibilityToggleDirective: one translated "Show password" label, state in aria-pressed, type="button". - Give the Xtream server URL its own mat-error and a neutral hint instead of the EPG file error; give the M3U URL a mat-error. - Use "Playlist title" in every add form, "MAC address" casing, a single ellipsis in "Validating portal…" and one "Add playlist" submit label; translate the method radiogroup's aria-label. - Show Stalker refusals inline under the portal URL (role="status", like the Xtream connection test), translated in the template and cleared by edits; translate the snackbars for outcomes that close the dialog. - Translate new strings into all locales; reuse the identical Stalker URL error translations; fix MAC casing and ellipses; drop unused keys. - Unit specs per form, edit-dialog spec, new add-source-forms web E2E; update E2E locators; UI guidelines Forms section; Stalker contract. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
23a1860119
commit
0ea9ecdb27
56 files changed
+1208
-252
No files matched your search
@@ -193,7 +193,9 @@ async function importDashPlaylistFromText(
|
||||
const dialog = app.mainWindow.locator('mat-dialog-container').last();
|
||||
await dialog.getByRole('radio', { name: /Raw m3u text/i }).click();
|
||||
await dialog.locator('textarea').fill(playlist);
|
||||
await dialog.getByRole('button', { name: 'Import', exact: true }).click();
|
||||
await dialog
|
||||
.getByRole('button', { name: 'Add playlist', exact: true })
|
||||
.click();
|
||||
await dialog.waitFor({ state: 'detached' });
|
||||
await waitForM3uCatalog(app.mainWindow);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ test.describe('Electron Sources View', () => {
|
||||
path: test.info().outputPath('http-connection-add.png'),
|
||||
});
|
||||
await dialog
|
||||
.getByRole('button', { name: 'Add', exact: true })
|
||||
.getByRole('button', { name: 'Add playlist', exact: true })
|
||||
.click();
|
||||
await waitForXtreamCatalog(page);
|
||||
await openSources(page);
|
||||
|
||||
@@ -40,7 +40,9 @@ export async function addLiveFormatPortal(page: Page) {
|
||||
await dialog.locator('#serverUrl').fill(liveFormatMock);
|
||||
await dialog.locator('#username').fill('live-fallback');
|
||||
await dialog.locator('#password').fill('live-fallback');
|
||||
await dialog.getByRole('button', { name: 'Add', exact: true }).click();
|
||||
await dialog
|
||||
.getByRole('button', { name: 'Add playlist', exact: true })
|
||||
.click();
|
||||
await page.waitForURL(/xtreams.*vod/);
|
||||
await page.getByRole('link', { name: 'Live TV', exact: true }).click();
|
||||
await page.locator('.context-panel .category-item').first().click();
|
||||
|
||||
Reference in new issue
Block a user