Skip to content

Commit

Permalink
Improve linkSelector and problemParser declarations in contest parsers
Browse files Browse the repository at this point in the history
  • Loading branch information
jmerle committed Feb 17, 2022
1 parent 2cf229a commit 50d9fda
Show file tree
Hide file tree
Showing 30 changed files with 60 additions and 88 deletions.
4 changes: 2 additions & 2 deletions src/parsers/SimpleContestParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { ContestParser } from './ContestParser';
import { Parser } from './Parser';

export abstract class SimpleContestParser extends ContestParser<string> {
public abstract linkSelector: string;
public abstract problemParser: Parser;
protected abstract linkSelector: string;
protected abstract problemParser: Parser;

public canHandlePage(): boolean {
return document.querySelector(this.linkSelector) !== null;
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/A2OnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { A2OnlineJudgeProblemParser } from '../problem/A2OnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class A2OnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = 'table tbody tr td a[href^="p?ID="]';
public problemParser: Parser = new A2OnlineJudgeProblemParser();
protected linkSelector = 'table tbody tr td a[href^="p?ID="]';
protected problemParser = new A2OnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['https://a2oj.com/ladder*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/AtCoderContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { AtCoderProblemParser } from '../problem/AtCoderProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class AtCoderContestParser extends SimpleContestParser {
public linkSelector: string = 'table tr td:first-child a';
public problemParser: Parser = new AtCoderProblemParser();
protected linkSelector = 'table tr td:first-child a';
protected problemParser = new AtCoderProblemParser();

public getMatchPatterns(): string[] {
return ['https://atcoder.jp/contests/*/tasks'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/BUCTOJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { BUCTOJProblemParser } from '../problem/BUCTOJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class BUCTOJContestParser extends SimpleContestParser {
public linkSelector: string = 'table.ui.selectable > tbody > tr > td:nth-child(2) > a';
public problemParser: Parser = new BUCTOJProblemParser();
protected linkSelector = 'table.ui.selectable > tbody > tr > td:nth-child(2) > a';
protected problemParser = new BUCTOJProblemParser();

public getMatchPatterns(): string[] {
return ['http://buctcoder.com/contest.php*', 'http://182.92.175.181/contest.php*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/BaekjoonOnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { BaekjoonOnlineJudgeProblemParser } from '../problem/BaekjoonOnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class BaekjoonOnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = 'table > tbody > tr > td:nth-child(2) > a';
public problemParser: Parser = new BaekjoonOnlineJudgeProblemParser();
protected linkSelector = 'table > tbody > tr > td:nth-child(2) > a';
protected problemParser = new BaekjoonOnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['https://www.acmicpc.net/workbook/view/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/BeecrowdContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { BeecrowdProblemParser } from '../problem/BeecrowdProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class BeecrowdContestParser extends SimpleContestParser {
public linkSelector: string = '#table td.large > a';
public problemParser: Parser = new BeecrowdProblemParser();
protected linkSelector = '#table td.large > a';
protected problemParser = new BeecrowdProblemParser();

public getMatchPatterns(): string[] {
return ['https://www.beecrowd.com.br/judge/*/challenges/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/COJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { COJProblemParser } from '../problem/COJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class COJContestParser extends SimpleContestParser {
public linkSelector: string = '#problem td > a';
public problemParser: Parser = new COJProblemParser();
protected linkSelector = '#problem td > a';
protected problemParser = new COJProblemParser();

public getMatchPatterns(): string[] {
return ['https://coj.uci.cu/contest/cproblems.xhtml*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/CSESContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { CSESProblemParser } from '../problem/CSESProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class CSESContestParser extends SimpleContestParser {
public linkSelector: string = '.task-list.contest > .task > a';
public problemParser: Parser = new CSESProblemParser();
protected linkSelector = '.task-list.contest > .task > a';
protected problemParser = new CSESProblemParser();

public getMatchPatterns(): string[] {
return ['https://cses.fi/*/list', 'https://cses.fi/*/list/'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/CSUACMOnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { CSUACMOnlineJudgeProblemParser } from '../problem/CSUACMOnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class CSUACMOnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = 'tbody > tr > td:nth-child(3) > a';
public problemParser: Parser = new CSUACMOnlineJudgeProblemParser();
protected linkSelector = 'tbody > tr > td:nth-child(3) > a';
protected problemParser = new CSUACMOnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['http://acm.csu.edu.cn/csuoj/contest/problemset*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/CodeMarshalContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { CodeMarshalProblemParser } from '../problem/CodeMarshalProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class CodeMarshalContestParser extends SimpleContestParser {
public linkSelector: string = '.panel-problems a.list-group-item';
public problemParser: Parser = new CodeMarshalProblemParser();
protected linkSelector = '.panel-problems a.list-group-item';
protected problemParser = new CodeMarshalProblemParser();

public getMatchPatterns(): string[] {
return ['https://algo.codemarshal.org/contests/*'];
Expand Down
4 changes: 2 additions & 2 deletions src/parsers/contest/CodeforcesContestParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import { CodeforcesProblemParser } from '../problem/CodeforcesProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class CodeforcesContestParser extends SimpleContestParser {
public linkSelector: string =
protected linkSelector =
'.problems > tbody > tr > td:first-child > a, ._ProblemsPage_problems > table > tbody > tr > td:first-child > a';
public problemParser: CodeforcesProblemParser = new CodeforcesProblemParser();
protected problemParser = new CodeforcesProblemParser();

public getMatchPatterns(): string[] {
const patterns: string[] = [];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/ContestHunterContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { Parser } from '../Parser';
import { ContestHunterProblemParser } from '../problem/ContestHunterProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class ContestHunterContestParser extends SimpleContestParser {
public linkSelector: string =
protected linkSelector =
'.container > .row > .span12 > .table > tbody > tr:nth-child(2) > td:nth-child(2) > .table span[itemprop="name"] > a';
public problemParser: Parser = new ContestHunterProblemParser();
protected problemParser = new ContestHunterProblemParser();

public getMatchPatterns(): string[] {
return ['http://noi-test.zzstep.com/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/DMOJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { DMOJProblemParser } from '../problem/DMOJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class DMOJContestParser extends SimpleContestParser {
public linkSelector: string = '#contest-problems > tbody > tr > td:first-child > a';
public problemParser: Parser = new DMOJProblemParser();
protected linkSelector = '#contest-problems > tbody > tr > td:first-child > a';
protected problemParser = new DMOJProblemParser();

public getMatchPatterns(): string[] {
return ['https://dmoj.ca/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/DevSkillContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { DevSkillProblemParser } from '../problem/DevSkillProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class DevSkillContestParser extends SimpleContestParser {
public linkSelector: string = '.contest_requirement > li > a';
public problemParser: Parser = new DevSkillProblemParser();
protected linkSelector = '.contest_requirement > li > a';
protected problemParser = new DevSkillProblemParser();

public getMatchPatterns(): string[] {
return [
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/ECNUOnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { ECNUOnlineJudgeProblemParser } from '../problem/ECNUOnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class ECNUOnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = 'td.left.aligned > a:first-child';
public problemParser: Parser = new ECNUOnlineJudgeProblemParser();
protected linkSelector = 'td.left.aligned > a:first-child';
protected problemParser = new ECNUOnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['https://acm.ecnu.edu.cn/contest/*/'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/EolympContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { EolympProblemParser } from '../problem/EolympProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class EolympContestParser extends SimpleContestParser {
public linkSelector: string = '.eo-problem-row__name';
public problemParser: Parser = new EolympProblemParser();
protected linkSelector = '.eo-problem-row__name';
protected problemParser = new EolympProblemParser();

public getMatchPatterns(): string[] {
return ['https://www.eolymp.com/*/contests/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/FZUOnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { FZUOnlineJudgeProblemParser } from '../problem/FZUOnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class FZUOnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = '.ct_list_content > table > tbody > tr > td:nth-child(3) > a';
public problemParser: Parser = new FZUOnlineJudgeProblemParser();
protected linkSelector = '.ct_list_content > table > tbody > tr > td:nth-child(3) > a';
protected problemParser = new FZUOnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['http://acm.fzu.edu.cn/contest/list.php*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/HDOJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { HDOJProblemParser } from '../problem/HDOJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class HDOJContestParser extends SimpleContestParser {
public linkSelector: string = 'tr.table_text a';
public problemParser: Parser = new HDOJProblemParser();
protected linkSelector = 'tr.table_text a';
protected problemParser = new HDOJProblemParser();

public getMatchPatterns(): string[] {
return ['https://acm.hdu.edu.cn/contests/contest_show.php*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/HackerEarthContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { HackerEarthProblemParser } from '../problem/HackerEarthProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class HackerEarthContestParser extends SimpleContestParser {
public linkSelector: string = '.problems-table .prob a, .problems-table a.track-problem-link';
public problemParser: Parser = new HackerEarthProblemParser();
protected linkSelector = '.problems-table .prob a, .problems-table a.track-problem-link';
protected problemParser = new HackerEarthProblemParser();

public getMatchPatterns(): string[] {
return ['https://www.hackerearth.com/challenge/*/problems/'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/HihoCoderContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { HihoCoderProblemParser } from '../problem/HihoCoderProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class HihoCoderContestParser extends SimpleContestParser {
public linkSelector: string = '.contest-problems td.id > a';
public problemParser: Parser = new HihoCoderProblemParser();
protected linkSelector = '.contest-problems td.id > a';
protected problemParser = new HihoCoderProblemParser();

public getMatchPatterns(): string[] {
return ['https://hihocoder.com/contest/*/problems'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/HydroContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { HydroProblemParser } from '../problem/HydroProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class HydroContestParser extends SimpleContestParser {
public linkSelector: string = '.col--problem.col--problem-name > a';
public problemParser: Parser = new HydroProblemParser();
protected linkSelector = '.col--problem.col--problem-name > a';
protected problemParser = new HydroProblemParser();

public getMatchPatterns(): string[] {
return ['https://hydro.ac/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/KattisContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { KattisProblemParser } from '../problem/KattisProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class KattisContestParser extends SimpleContestParser {
public linkSelector: string = '#standings > thead > tr > th.problemcolheader-standings > a';
public problemParser: Parser = new KattisProblemParser();
protected linkSelector = '#standings > thead > tr > th.problemcolheader-standings > a';
protected problemParser = new KattisProblemParser();

public getMatchPatterns(): string[] {
return ['https://open.kattis.com/contests/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/LibreOJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { LibreOJProblemParser } from '../problem/LibreOJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class LibreOJContestParser extends SimpleContestParser {
public linkSelector: string = '.ui.selectable.celled.table > tbody > tr > td:nth-child(2) > a';
public problemParser: Parser = new LibreOJProblemParser();
protected linkSelector = '.ui.selectable.celled.table > tbody > tr > td:nth-child(2) > a';
protected problemParser = new LibreOJProblemParser();

public getMatchPatterns(): string[] {
return ['https://libreoj.github.io/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/LuoguContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { LuoguProblemParser } from '../problem/LuoguProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class LuoguContestParser extends SimpleContestParser {
public linkSelector: string = 'div.title > a.title';
public problemParser: Parser = new LuoguProblemParser();
protected linkSelector = 'div.title > a.title';
protected problemParser = new LuoguProblemParser();

public getMatchPatterns(): string[] {
return ['https://www.luogu.com.cn/contest/*', 'https://www.luogu.com.cn/training/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/PEGJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { PEGJudgeProblemParser } from '../problem/PEGJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class PEGJudgeContestParser extends SimpleContestParser {
public linkSelector: string = '#content table tr > td:nth-child(2) a';
public problemParser: Parser = new PEGJudgeProblemParser();
protected linkSelector = '#content table tr > td:nth-child(2) a';
protected problemParser = new PEGJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['https://wcipeg.com/problems'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/POJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { POJProblemParser } from '../problem/POJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class POJContestParser extends SimpleContestParser {
public linkSelector: string = 'div[align=center] > table tr a';
public problemParser: Parser = new POJProblemParser();
protected linkSelector = 'div[align=center] > table tr a';
protected problemParser = new POJProblemParser();

public getMatchPatterns(): string[] {
return ['http://poj.org/showcontest*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/TimusOnlineJudgeContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { TimusOnlineJudgeProblemParser } from '../problem/TimusOnlineJudgeProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class TimusOnlineJudgeContestParser extends SimpleContestParser {
public linkSelector: string = '.problemset td.name > a';
public problemParser: Parser = new TimusOnlineJudgeProblemParser();
protected linkSelector = '.problemset td.name > a';
protected problemParser = new TimusOnlineJudgeProblemParser();

public getMatchPatterns(): string[] {
return ['https://acm.timus.ru/problemset.aspx*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/UOJContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { UOJProblemParser } from '../problem/UOJProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class UOJContestParser extends SimpleContestParser {
public linkSelector: string = '.top-buffer-md > .table-responsive > .table a';
public problemParser: Parser = new UOJProblemParser();
protected linkSelector = '.top-buffer-md > .table-responsive > .table a';
protected problemParser = new UOJProblemParser();

public getMatchPatterns(): string[] {
return ['https://uoj.ac/contest/*'];
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/YandexContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { YandexProblemParser } from '../problem/YandexProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class YandexContestParser extends SimpleContestParser {
public linkSelector: string = 'div.page__main > div.content > ul.tabs-menu_role_problems > li > a:nth-child(1)';
public problemParser: Parser = new YandexProblemParser();
protected linkSelector = 'div.page__main > div.content > ul.tabs-menu_role_problems > li > a:nth-child(1)';
protected problemParser = new YandexProblemParser();

public getMatchPatterns(): string[] {
// Only available via the "Parse with" context menu as Yandex doesn't have a specific page that shows all problems
Expand Down
5 changes: 2 additions & 3 deletions src/parsers/contest/YukicoderContestParser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Parser } from '../Parser';
import { YukicoderProblemParser } from '../problem/YukicoderProblemParser';
import { SimpleContestParser } from '../SimpleContestParser';

export class YukicoderContestParser extends SimpleContestParser {
public linkSelector: string = '#content > .left > table > tbody > tr > td > a[href^="/problems/no"]';
public problemParser: Parser = new YukicoderProblemParser();
protected linkSelector = '#content > .left > table > tbody > tr > td > a[href^="/problems/no"]';
protected problemParser = new YukicoderProblemParser();

public getMatchPatterns(): string[] {
return ['https://yukicoder.me/contests/*'];
Expand Down

0 comments on commit 50d9fda

Please sign in to comment.