diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/CATcher-org_CATcher_master/authorship.json b/CATcher-org_CATcher_master/authorship.json new file mode 100644 index 0000000..939a08e --- /dev/null +++ b/CATcher-org_CATcher_master/authorship.json @@ -0,0 +1 @@ +[{"path":"src/app/app-routing.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { NgModule } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { RouterModule, Routes } from \u0027@angular/router\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { AuthModule } from \u0027./auth/auth.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { AuthGuard } from \u0027./core/guards/auth.guard\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { PhaseBugReportingModule } from \u0027./phase-bug-reporting/phase-bug-reporting.module\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { PhaseModerationModule } from \u0027./phase-moderation/phase-moderation.module\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { PhaseTeamResponseModule } from \u0027./phase-team-response/phase-team-response.module\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { PhaseTesterResponseModule } from \u0027./phase-tester-response/phase-tester-response.module\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"const routes: Routes \u003d ["},{"lineNumber":11,"author":{"gitId":"-"},"content":" { path: \u0027\u0027, loadChildren: () \u003d\u003e AuthModule },"},{"lineNumber":12,"author":{"gitId":"-"},"content":" { path: \u0027phaseBugReporting\u0027, loadChildren: () \u003d\u003e PhaseBugReportingModule, canLoad: [AuthGuard] },"},{"lineNumber":13,"author":{"gitId":"-"},"content":" { path: \u0027phaseTeamResponse\u0027, loadChildren: () \u003d\u003e PhaseTeamResponseModule, canLoad: [AuthGuard] },"},{"lineNumber":14,"author":{"gitId":"-"},"content":" { path: \u0027phaseTesterResponse\u0027, loadChildren: () \u003d\u003e PhaseTesterResponseModule, canLoad: [AuthGuard] },"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" { path: \u0027phaseModeration\u0027, loadChildren: () \u003d\u003e PhaseModerationModule, canLoad: [AuthGuard] },"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" { path: \u0027**\u0027, redirectTo: \u0027\u0027 }"},{"lineNumber":17,"author":{"gitId":"-"},"content":"];"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":20,"author":{"gitId":"-"},"content":" imports: [RouterModule.forRoot(routes)],"},{"lineNumber":21,"author":{"gitId":"-"},"content":" exports: [RouterModule]"},{"lineNumber":22,"author":{"gitId":"-"},"content":"})"},{"lineNumber":23,"author":{"gitId":"-"},"content":"export class AppRoutingModule {}"}],"authorContributionMap":{"NereusWB922":2,"-":21}},{"path":"src/app/core/directives/internal-link-disable.directive.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Directive, HostListener } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { ErrorHandlingService } from \u0027../services/error-handling.service\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"class InvalidLinkError extends Error {"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" constructor() {"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" super(\u0027Invalid link!\u0027);"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" Object.setPrototypeOf(this, InvalidLinkError.prototype);"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"@Directive({"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" selector: \u0027[disableInternalLink]\u0027"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"export class InternalLinkDisableDirective {"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" constructor(private errorHandlingService: ErrorHandlingService) {}"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" @HostListener(\u0027click\u0027, [\u0027$event\u0027])"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" public onClick(e: MouseEvent): void {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const srcElement \u003d e.target;"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" if (srcElement instanceof HTMLAnchorElement) {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" const baseURI \u003d srcElement.baseURI;"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" const href \u003d srcElement.href;"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" if (href.startsWith(baseURI)) {"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.errorHandlingService.handleError(new InvalidLinkError());"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" e.preventDefault();"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" e.stopPropagation();"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":32}},{"path":"src/app/core/services/github.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { HttpErrorResponse } from \u0027@angular/common/http\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { ApolloQueryResult } from \u0027@apollo/client/core\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Apollo, QueryRef } from \u0027apollo-angular\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { DocumentNode } from \u0027graphql\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { forkJoin, from, Observable, of, throwError } from \u0027rxjs\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { catchError, filter, map, mergeMap, throwIfEmpty } from \u0027rxjs/operators\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":9,"author":{"gitId":"-"},"content":" FetchIssue,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" FetchIssueQuery,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" FetchIssuesByTeam,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" FetchIssuesByTeamQuery,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" FetchIssuesQuery,"},{"lineNumber":15,"author":{"gitId":"-"},"content":" FetchLabels,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" FetchLabelsQuery"},{"lineNumber":17,"author":{"gitId":"-"},"content":"} from \u0027../../../../graphql/graphql-types\u0027;"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import { AppConfig } from \u0027../../../environments/environment\u0027;"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":"import { throwIfFalse } from \u0027../../shared/lib/custom-ops\u0027;"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import { getNumberOfPages } from \u0027../../shared/lib/github-paginator-parser\u0027;"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import { IssueComment } from \u0027../models/comment.model\u0027;"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../models/github-user.model\u0027;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import { IssueLastModifiedManagerModel } from \u0027../models/github/cache-manager/issue-last-modified-manager.model\u0027;"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import { IssuesCacheManager } from \u0027../models/github/cache-manager/issues-cache-manager.model\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import { GithubComment } from \u0027../models/github/github-comment.model\u0027;"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import { GithubGraphqlIssue } from \u0027../models/github/github-graphql.issue\u0027;"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import RestGithubIssueFilter from \u0027../models/github/github-issue-filter.model\u0027;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../models/github/github-issue.model\u0027;"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import { GithubLabel } from \u0027../models/github/github-label.model\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import { GithubResponse } from \u0027../models/github/github-response.model\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import { GithubRelease } from \u0027../models/github/github.release\u0027;"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import { SessionData } from \u0027../models/session.model\u0027;"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import { ERRORCODE_NOT_FOUND, ErrorHandlingService } from \u0027./error-handling.service\u0027;"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027./logging.service\u0027;"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"const { Octokit } \u003d require(\u0027@octokit/rest\u0027);"},{"lineNumber":37,"author":{"gitId":"-"},"content":"const CATCHER_ORG \u003d \u0027CATcher-org\u0027;"},{"lineNumber":38,"author":{"gitId":"-"},"content":"const CATCHER_REPO \u003d \u0027CATcher\u0027;"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":"const BRANCH \u003d \u0027main\u0027;"},{"lineNumber":40,"author":{"gitId":"-"},"content":"const UNABLE_TO_OPEN_IN_BROWSER \u003d \u0027Unable to open this issue in Browser\u0027;"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":"const BRANCH_CREATION_FAILED \u003d `Unable to create ${BRANCH} branch.`;"},{"lineNumber":42,"author":{"gitId":"-"},"content":"function getSettingsUrl(org: string, repoName: string): string {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return `https://raw.githubusercontent.com/${org}/${repoName}/master/settings.json`;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":"let ORG_NAME \u003d \u0027\u0027;"},{"lineNumber":47,"author":{"gitId":"-"},"content":"let MOD_ORG \u003d \u0027\u0027;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"let REPO \u003d \u0027\u0027;"},{"lineNumber":49,"author":{"gitId":"-"},"content":"let DATA_REPO \u003d \u0027\u0027;"},{"lineNumber":50,"author":{"gitId":"-"},"content":"const MAX_ITEMS_PER_PAGE \u003d 100;"},{"lineNumber":51,"author":{"gitId":"-"},"content":""},{"lineNumber":52,"author":{"gitId":"-"},"content":"let octokit \u003d new Octokit();"},{"lineNumber":53,"author":{"gitId":"-"},"content":""},{"lineNumber":54,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":55,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":56,"author":{"gitId":"-"},"content":"})"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Responsible for communicating with GitHub to create, update, read and delete"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * features related to Github using GitHub API Requests."},{"lineNumber":61,"author":{"gitId":"-"},"content":" * For example, issues, issue labels and repositories."},{"lineNumber":62,"author":{"gitId":"-"},"content":" */"},{"lineNumber":63,"author":{"gitId":"-"},"content":"export class GithubService {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" private static readonly IF_NONE_MATCH_EMPTY \u003d { \u0027If-None-Match\u0027: \u0027\u0027 };"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" private issuesCacheManager \u003d new IssuesCacheManager();"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private issuesLastModifiedManager \u003d new IssueLastModifiedManagerModel();"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private issueQueryRefs \u003d new Map\u003cNumber, QueryRef\u003cFetchIssueQuery\u003e\u003e();"},{"lineNumber":69,"author":{"gitId":"-"},"content":""},{"lineNumber":70,"author":{"gitId":"-"},"content":" constructor(private errorHandlingService: ErrorHandlingService, private apollo: Apollo, private logger: LoggingService) {}"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":" storeOAuthAccessToken(accessToken: string) {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" octokit \u003d new Octokit({"},{"lineNumber":74,"author":{"gitId":"-"},"content":" auth() {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return `Token ${accessToken}`;"},{"lineNumber":76,"author":{"gitId":"-"},"content":" },"},{"lineNumber":77,"author":{"gitId":"-"},"content":" log: {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" debug: (message, ...otherInfo) \u003d\u003e this.logger.debug(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":79,"author":{"gitId":"-"},"content":" // Do not log info for HTTP response 304 due to repeated polling"},{"lineNumber":80,"author":{"gitId":"-"},"content":" info: (message, ...otherInfo) \u003d\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" /304 in \\d+ms$/.test(message) ? undefined : this.logger.info(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":82,"author":{"gitId":"-"},"content":" warn: (message, ...otherInfo) \u003d\u003e this.logger.warn(\u0027GithubService: \u0027 + message, ...otherInfo),"},{"lineNumber":83,"author":{"gitId":"-"},"content":" error: (message, ...otherInfo) \u003d\u003e this.logger.error(\u0027GithubService: \u0027 + message, ...otherInfo)"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":" });"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":""},{"lineNumber":88,"author":{"gitId":"-"},"content":" storeOrganizationDetails(orgName: string, dataRepo: string) {"},{"lineNumber":89,"author":{"gitId":"-"},"content":" MOD_ORG \u003d orgName;"},{"lineNumber":90,"author":{"gitId":"-"},"content":" DATA_REPO \u003d dataRepo;"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }"},{"lineNumber":92,"author":{"gitId":"-"},"content":""},{"lineNumber":93,"author":{"gitId":"-"},"content":" storePhaseDetails(phaseRepoOwner: string, repoName: string) {"},{"lineNumber":94,"author":{"gitId":"-"},"content":" REPO \u003d repoName;"},{"lineNumber":95,"author":{"gitId":"-"},"content":" ORG_NAME \u003d phaseRepoOwner;"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }"},{"lineNumber":97,"author":{"gitId":"-"},"content":""},{"lineNumber":98,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Fetches an array of filtered GitHubIssues using GraphQL query for a given team."},{"lineNumber":100,"author":{"gitId":"-"},"content":" *"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * @param tutorial - The tutorial that the team belongs to."},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @param team - The team\u0027s designated name."},{"lineNumber":103,"author":{"gitId":"-"},"content":" * @param issuesFilter - The issue filter."},{"lineNumber":104,"author":{"gitId":"-"},"content":" * @returns An observable array of filtered GithubIssues"},{"lineNumber":105,"author":{"gitId":"-"},"content":" */"},{"lineNumber":106,"author":{"gitId":"-"},"content":" fetchIssuesGraphqlByTeam(tutorial: string, team: string, issuesFilter: RestGithubIssueFilter): Observable\u003cArray\u003cGithubIssue\u003e\u003e {"},{"lineNumber":107,"author":{"gitId":"-"},"content":" const graphqlFilter \u003d issuesFilter.convertToGraphqlFilter();"},{"lineNumber":108,"author":{"gitId":"-"},"content":" return this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":109,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":110,"author":{"gitId":"-"},"content":" mergeMap(() \u003d\u003e {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchIssuesByTeamQuery, GithubGraphqlIssue\u003e("},{"lineNumber":112,"author":{"gitId":"-"},"content":" FetchIssuesByTeam,"},{"lineNumber":113,"author":{"gitId":"-"},"content":" {"},{"lineNumber":114,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":115,"author":{"gitId":"-"},"content":" name: REPO,"},{"lineNumber":116,"author":{"gitId":"-"},"content":" filter: {"},{"lineNumber":117,"author":{"gitId":"-"},"content":" ...graphqlFilter,"},{"lineNumber":118,"author":{"gitId":"-"},"content":" labels: [...(graphqlFilter.labels ? graphqlFilter.labels : []), team]"},{"lineNumber":119,"author":{"gitId":"-"},"content":" },"},{"lineNumber":120,"author":{"gitId":"-"},"content":" tutorial"},{"lineNumber":121,"author":{"gitId":"-"},"content":" },"},{"lineNumber":122,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.label.issues.edges,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" GithubGraphqlIssue"},{"lineNumber":124,"author":{"gitId":"-"},"content":" );"},{"lineNumber":125,"author":{"gitId":"-"},"content":" })"},{"lineNumber":126,"author":{"gitId":"-"},"content":" );"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * Fetches an array of filtered GitHubIssues using GraphQL query."},{"lineNumber":131,"author":{"gitId":"-"},"content":" * @param issuesFilter - The issue filter."},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @returns An observable array of filtered GithubIssues"},{"lineNumber":133,"author":{"gitId":"-"},"content":" */"},{"lineNumber":134,"author":{"gitId":"-"},"content":" fetchIssuesGraphql(issuesFilter: RestGithubIssueFilter): Observable\u003cArray\u003cGithubIssue\u003e\u003e {"},{"lineNumber":135,"author":{"gitId":"-"},"content":" const graphqlFilter \u003d issuesFilter.convertToGraphqlFilter();"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return this.toFetchIssues(issuesFilter).pipe("},{"lineNumber":137,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":138,"author":{"gitId":"-"},"content":" mergeMap(() \u003d\u003e {"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return this.fetchGraphqlList\u003cFetchIssuesQuery, GithubGraphqlIssue\u003e("},{"lineNumber":140,"author":{"gitId":"-"},"content":" FetchIssues,"},{"lineNumber":141,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO, filter: graphqlFilter },"},{"lineNumber":142,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.issues.edges,"},{"lineNumber":143,"author":{"gitId":"-"},"content":" GithubGraphqlIssue"},{"lineNumber":144,"author":{"gitId":"-"},"content":" );"},{"lineNumber":145,"author":{"gitId":"-"},"content":" })"},{"lineNumber":146,"author":{"gitId":"-"},"content":" );"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }"},{"lineNumber":148,"author":{"gitId":"-"},"content":""},{"lineNumber":149,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":150,"author":{"gitId":"-"},"content":" * Checks if there are pages of filtered issues that are not cached in the cache model,"},{"lineNumber":151,"author":{"gitId":"-"},"content":" * and updates the model to cache these new pages."},{"lineNumber":152,"author":{"gitId":"-"},"content":" * @param filter - The issue filter."},{"lineNumber":153,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if there are pages that do not exist in the cache model."},{"lineNumber":154,"author":{"gitId":"-"},"content":" */"},{"lineNumber":155,"author":{"gitId":"-"},"content":" private toFetchIssues(filter: RestGithubIssueFilter): Observable\u003cboolean\u003e {"},{"lineNumber":156,"author":{"gitId":"-"},"content":" let responseInFirstPage: GithubResponse\u003cGithubIssue[]\u003e;"},{"lineNumber":157,"author":{"gitId":"-"},"content":" return this.getIssuesAPICall(filter, 1).pipe("},{"lineNumber":158,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue[]\u003e) \u003d\u003e {"},{"lineNumber":159,"author":{"gitId":"-"},"content":" responseInFirstPage \u003d response;"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return getNumberOfPages(response);"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":162,"author":{"gitId":"-"},"content":" mergeMap((numOfPages: number) \u003d\u003e {"},{"lineNumber":163,"author":{"gitId":"-"},"content":" const apiCalls: Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e[] \u003d [];"},{"lineNumber":164,"author":{"gitId":"-"},"content":" for (let i \u003d 2; i \u003c\u003d numOfPages; i++) {"},{"lineNumber":165,"author":{"gitId":"-"},"content":" apiCalls.push(this.getIssuesAPICall(filter, i));"},{"lineNumber":166,"author":{"gitId":"-"},"content":" }"},{"lineNumber":167,"author":{"gitId":"-"},"content":" return apiCalls.length \u003d\u003d\u003d 0 ? of([]) : forkJoin(apiCalls);"},{"lineNumber":168,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":169,"author":{"gitId":"-"},"content":" map((resultArray: GithubResponse\u003cGithubIssue[]\u003e[]) \u003d\u003e {"},{"lineNumber":170,"author":{"gitId":"-"},"content":" const responses \u003d [responseInFirstPage, ...resultArray];"},{"lineNumber":171,"author":{"gitId":"-"},"content":" const isCached \u003d responses.reduce((result, response) \u003d\u003e {"},{"lineNumber":172,"author":{"gitId":"-"},"content":" return result \u0026\u0026 response.isCached;"},{"lineNumber":173,"author":{"gitId":"-"},"content":" }, true);"},{"lineNumber":174,"author":{"gitId":"-"},"content":" responses.forEach((resp, index) \u003d\u003e this.issuesCacheManager.set(index + 1, resp));"},{"lineNumber":175,"author":{"gitId":"-"},"content":" return !isCached;"},{"lineNumber":176,"author":{"gitId":"-"},"content":" })"},{"lineNumber":177,"author":{"gitId":"-"},"content":" );"},{"lineNumber":178,"author":{"gitId":"-"},"content":" }"},{"lineNumber":179,"author":{"gitId":"-"},"content":""},{"lineNumber":180,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":181,"author":{"gitId":"-"},"content":" * Checks if the specified repository exists."},{"lineNumber":182,"author":{"gitId":"-"},"content":" * @param owner - Owner of Specified Repository."},{"lineNumber":183,"author":{"gitId":"-"},"content":" * @param repo - Name of Repository."},{"lineNumber":184,"author":{"gitId":"-"},"content":" */"},{"lineNumber":185,"author":{"gitId":"-"},"content":" isRepositoryPresent(owner: string, repo: string): Observable\u003cboolean\u003e {"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return from(octokit.repos.get({ owner: owner, repo: repo, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":187,"author":{"gitId":"-"},"content":" map((rawData: { status: number }) \u003d\u003e {"},{"lineNumber":188,"author":{"gitId":"-"},"content":" return rawData.status !\u003d\u003d ERRORCODE_NOT_FOUND;"},{"lineNumber":189,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":190,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return of(false);"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":193,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch repo data.\u0027))"},{"lineNumber":194,"author":{"gitId":"-"},"content":" );"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }"},{"lineNumber":196,"author":{"gitId":"-"},"content":""},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Creates a repository in for the authenticated user location."},{"lineNumber":199,"author":{"gitId":"-"},"content":" * @param name - Name of Repo to create."},{"lineNumber":200,"author":{"gitId":"-"},"content":" * @return Observable\u003cboolean\u003e - That returns true if the repository has been successfully"},{"lineNumber":201,"author":{"gitId":"-"},"content":" * created."},{"lineNumber":202,"author":{"gitId":"-"},"content":" */"},{"lineNumber":203,"author":{"gitId":"-"},"content":" createRepository(name: string): void {"},{"lineNumber":204,"author":{"gitId":"-"},"content":" octokit.repos.createForAuthenticatedUser({ name: name });"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }"},{"lineNumber":206,"author":{"gitId":"-"},"content":""},{"lineNumber":207,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":208,"author":{"gitId":"nknguyenhc"},"content":" * Creates the `main` branch for the current repository."},{"lineNumber":209,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":210,"author":{"gitId":"nknguyenhc"},"content":" createBranch() {"},{"lineNumber":211,"author":{"gitId":"nknguyenhc"},"content":" return this.getDefaultBranch().pipe("},{"lineNumber":212,"author":{"gitId":"nknguyenhc"},"content":" mergeMap((res) \u003d\u003e this.getBranchHeadInfo(res)),"},{"lineNumber":213,"author":{"gitId":"nknguyenhc"},"content":" map((res) \u003d\u003e res.data.object.sha),"},{"lineNumber":214,"author":{"gitId":"nknguyenhc"},"content":" mergeMap((sha: string) \u003d\u003e this.createBranchFromCommit(sha)),"},{"lineNumber":215,"author":{"gitId":"nknguyenhc"},"content":" mergeMap(() \u003d\u003e this.isMainBranchPresent()),"},{"lineNumber":216,"author":{"gitId":"nknguyenhc"},"content":" throwIfFalse("},{"lineNumber":217,"author":{"gitId":"nknguyenhc"},"content":" (isBranchPresent: boolean) \u003d\u003e isBranchPresent,"},{"lineNumber":218,"author":{"gitId":"nknguyenhc"},"content":" () \u003d\u003e new Error(BRANCH_CREATION_FAILED)"},{"lineNumber":219,"author":{"gitId":"nknguyenhc"},"content":" )"},{"lineNumber":220,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":221,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":222,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":223,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":224,"author":{"gitId":"nknguyenhc"},"content":" * Creates the `main` branch for the current repository,"},{"lineNumber":225,"author":{"gitId":"nknguyenhc"},"content":" * from the commit with the given SHA."},{"lineNumber":226,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":227,"author":{"gitId":"nknguyenhc"},"content":" createBranchFromCommit(commitSha: string) {"},{"lineNumber":228,"author":{"gitId":"nknguyenhc"},"content":" return from("},{"lineNumber":229,"author":{"gitId":"nknguyenhc"},"content":" octokit.git.createRef({"},{"lineNumber":230,"author":{"gitId":"nknguyenhc"},"content":" owner: ORG_NAME,"},{"lineNumber":231,"author":{"gitId":"nknguyenhc"},"content":" repo: REPO,"},{"lineNumber":232,"author":{"gitId":"nknguyenhc"},"content":" ref: `refs/heads/${BRANCH}`,"},{"lineNumber":233,"author":{"gitId":"nknguyenhc"},"content":" sha: commitSha"},{"lineNumber":234,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":235,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":236,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":237,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":238,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":239,"author":{"gitId":"nknguyenhc"},"content":" * Get the default branch of the specified repository."},{"lineNumber":240,"author":{"gitId":"nknguyenhc"},"content":" * @param owner The owner of the repository."},{"lineNumber":241,"author":{"gitId":"nknguyenhc"},"content":" * @param repo The name of the repository."},{"lineNumber":242,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":243,"author":{"gitId":"nknguyenhc"},"content":" getDefaultBranch(): Observable\u003cstring\u003e {"},{"lineNumber":244,"author":{"gitId":"nknguyenhc"},"content":" return from("},{"lineNumber":245,"author":{"gitId":"nknguyenhc"},"content":" octokit.repos.get({"},{"lineNumber":246,"author":{"gitId":"nknguyenhc"},"content":" owner: ORG_NAME,"},{"lineNumber":247,"author":{"gitId":"nknguyenhc"},"content":" repo: REPO"},{"lineNumber":248,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":249,"author":{"gitId":"nknguyenhc"},"content":" ).pipe(map((res: any) \u003d\u003e res.data.default_branch));"},{"lineNumber":250,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":251,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":252,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":253,"author":{"gitId":"nknguyenhc"},"content":" * Get information of the head of the given branch name,"},{"lineNumber":254,"author":{"gitId":"nknguyenhc"},"content":" * in the current repository."},{"lineNumber":255,"author":{"gitId":"nknguyenhc"},"content":" * @param branch The name of the branch."},{"lineNumber":256,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":257,"author":{"gitId":"nknguyenhc"},"content":" getBranchHeadInfo(branch: string): Observable\u003cany\u003e {"},{"lineNumber":258,"author":{"gitId":"nknguyenhc"},"content":" return from("},{"lineNumber":259,"author":{"gitId":"nknguyenhc"},"content":" octokit.git.getRef({"},{"lineNumber":260,"author":{"gitId":"nknguyenhc"},"content":" owner: ORG_NAME,"},{"lineNumber":261,"author":{"gitId":"nknguyenhc"},"content":" repo: REPO,"},{"lineNumber":262,"author":{"gitId":"nknguyenhc"},"content":" ref: `heads/${branch}`"},{"lineNumber":263,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":264,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":265,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":266,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":267,"author":{"gitId":"nknguyenhc"},"content":" /**"},{"lineNumber":268,"author":{"gitId":"nknguyenhc"},"content":" * Checks if the repo already has the branch `main`."},{"lineNumber":269,"author":{"gitId":"nknguyenhc"},"content":" */"},{"lineNumber":270,"author":{"gitId":"nknguyenhc"},"content":" isMainBranchPresent(): Observable\u003cboolean\u003e {"},{"lineNumber":271,"author":{"gitId":"nknguyenhc"},"content":" return from("},{"lineNumber":272,"author":{"gitId":"nknguyenhc"},"content":" octokit.git.getRef({"},{"lineNumber":273,"author":{"gitId":"nknguyenhc"},"content":" owner: ORG_NAME,"},{"lineNumber":274,"author":{"gitId":"nknguyenhc"},"content":" repo: REPO,"},{"lineNumber":275,"author":{"gitId":"nknguyenhc"},"content":" ref: `heads/${BRANCH}`"},{"lineNumber":276,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":277,"author":{"gitId":"nknguyenhc"},"content":" ).pipe("},{"lineNumber":278,"author":{"gitId":"nknguyenhc"},"content":" map((res: any) \u003d\u003e res.status !\u003d\u003d ERRORCODE_NOT_FOUND),"},{"lineNumber":279,"author":{"gitId":"nknguyenhc"},"content":" catchError(() \u003d\u003e {"},{"lineNumber":280,"author":{"gitId":"nknguyenhc"},"content":" return of(false);"},{"lineNumber":281,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":282,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":283,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":284,"author":{"gitId":"nknguyenhc"},"content":""},{"lineNumber":285,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":286,"author":{"gitId":"-"},"content":" * Fetches information about an issue using GraphQL."},{"lineNumber":287,"author":{"gitId":"-"},"content":" *"},{"lineNumber":288,"author":{"gitId":"-"},"content":" * If the issue is not modified, return a `304 - Not Modified` response."},{"lineNumber":289,"author":{"gitId":"-"},"content":" *"},{"lineNumber":290,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":291,"author":{"gitId":"-"},"content":" * @returns Observable\u003cGithubGraphqlIssue\u003e that represents the response object."},{"lineNumber":292,"author":{"gitId":"-"},"content":" */"},{"lineNumber":293,"author":{"gitId":"-"},"content":" fetchIssueGraphql(id: number): Observable\u003cGithubGraphqlIssue\u003e {"},{"lineNumber":294,"author":{"gitId":"-"},"content":" if (this.issueQueryRefs.get(id) \u003d\u003d\u003d undefined) {"},{"lineNumber":295,"author":{"gitId":"-"},"content":" const newQueryRef \u003d this.apollo.watchQuery\u003cFetchIssueQuery\u003e({"},{"lineNumber":296,"author":{"gitId":"-"},"content":" query: FetchIssue,"},{"lineNumber":297,"author":{"gitId":"-"},"content":" variables: {"},{"lineNumber":298,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":299,"author":{"gitId":"-"},"content":" name: REPO,"},{"lineNumber":300,"author":{"gitId":"-"},"content":" issueId: id"},{"lineNumber":301,"author":{"gitId":"-"},"content":" }"},{"lineNumber":302,"author":{"gitId":"-"},"content":" });"},{"lineNumber":303,"author":{"gitId":"-"},"content":" this.issueQueryRefs.set(id, newQueryRef);"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }"},{"lineNumber":305,"author":{"gitId":"-"},"content":""},{"lineNumber":306,"author":{"gitId":"-"},"content":" const queryRef \u003d this.issueQueryRefs.get(id);"},{"lineNumber":307,"author":{"gitId":"-"},"content":" return this.toFetchIssue(id).pipe("},{"lineNumber":308,"author":{"gitId":"-"},"content":" filter((toFetch) \u003d\u003e toFetch),"},{"lineNumber":309,"author":{"gitId":"-"},"content":" mergeMap(() \u003d\u003e from(queryRef.refetch())),"},{"lineNumber":310,"author":{"gitId":"-"},"content":" map((value: ApolloQueryResult\u003cFetchIssueQuery\u003e) \u003d\u003e {"},{"lineNumber":311,"author":{"gitId":"-"},"content":" return new GithubGraphqlIssue(value.data.repository.issue);"},{"lineNumber":312,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":313,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e new HttpErrorResponse({ status: 304 }))"},{"lineNumber":314,"author":{"gitId":"-"},"content":" );"},{"lineNumber":315,"author":{"gitId":"-"},"content":" }"},{"lineNumber":316,"author":{"gitId":"-"},"content":""},{"lineNumber":317,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":318,"author":{"gitId":"-"},"content":" * Checks if the issue has been modified since the last query, and"},{"lineNumber":319,"author":{"gitId":"-"},"content":" * updates the model to reflect the last modified time."},{"lineNumber":320,"author":{"gitId":"-"},"content":" *"},{"lineNumber":321,"author":{"gitId":"-"},"content":" * @param id - The issue id."},{"lineNumber":322,"author":{"gitId":"-"},"content":" * @returns Observable\u003cboolean\u003e that returns true if the issue has been modified."},{"lineNumber":323,"author":{"gitId":"-"},"content":" */"},{"lineNumber":324,"author":{"gitId":"-"},"content":" toFetchIssue(id: number): Observable\u003cboolean\u003e {"},{"lineNumber":325,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":326,"author":{"gitId":"-"},"content":" octokit.issues.get({"},{"lineNumber":327,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":328,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":329,"author":{"gitId":"-"},"content":" issue_number: id,"},{"lineNumber":330,"author":{"gitId":"-"},"content":" headers: { \u0027If-Modified-Since\u0027: this.issuesLastModifiedManager.get(id) }"},{"lineNumber":331,"author":{"gitId":"-"},"content":" })"},{"lineNumber":332,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":333,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":334,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":335,"author":{"gitId":"-"},"content":" return true;"},{"lineNumber":336,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":337,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch issue.\u0027))"},{"lineNumber":338,"author":{"gitId":"-"},"content":" );"},{"lineNumber":339,"author":{"gitId":"-"},"content":" }"},{"lineNumber":340,"author":{"gitId":"-"},"content":""},{"lineNumber":341,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":342,"author":{"gitId":"-"},"content":" * Fetches all labels in the current repository."},{"lineNumber":343,"author":{"gitId":"-"},"content":" */"},{"lineNumber":344,"author":{"gitId":"-"},"content":" fetchAllLabels(): Observable\u003cArray\u003cGithubLabel\u003e\u003e {"},{"lineNumber":345,"author":{"gitId":"-"},"content":" const githubLabels \u003d this.fetchGraphqlList\u003cFetchLabelsQuery, GithubLabel\u003e("},{"lineNumber":346,"author":{"gitId":"-"},"content":" FetchLabels,"},{"lineNumber":347,"author":{"gitId":"-"},"content":" { owner: ORG_NAME, name: REPO },"},{"lineNumber":348,"author":{"gitId":"-"},"content":" (result) \u003d\u003e result.data.repository.labels.edges,"},{"lineNumber":349,"author":{"gitId":"-"},"content":" GithubLabel"},{"lineNumber":350,"author":{"gitId":"-"},"content":" );"},{"lineNumber":351,"author":{"gitId":"-"},"content":""},{"lineNumber":352,"author":{"gitId":"-"},"content":" return githubLabels.pipe(catchError((err) \u003d\u003e throwError(\u0027Failed to fetch labels.\u0027)));"},{"lineNumber":353,"author":{"gitId":"-"},"content":" }"},{"lineNumber":354,"author":{"gitId":"-"},"content":""},{"lineNumber":355,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":356,"author":{"gitId":"-"},"content":" * Creates a label in the current repository."},{"lineNumber":357,"author":{"gitId":"-"},"content":" * @param formattedLabelName - name of new label."},{"lineNumber":358,"author":{"gitId":"-"},"content":" * @param labelColor - colour of new label."},{"lineNumber":359,"author":{"gitId":"-"},"content":" */"},{"lineNumber":360,"author":{"gitId":"-"},"content":" createLabel(formattedLabelName: string, labelColor: string): void {"},{"lineNumber":361,"author":{"gitId":"-"},"content":" octokit.issues.createLabel({ owner: ORG_NAME, repo: REPO, name: formattedLabelName, color: labelColor });"},{"lineNumber":362,"author":{"gitId":"-"},"content":" }"},{"lineNumber":363,"author":{"gitId":"-"},"content":""},{"lineNumber":364,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":365,"author":{"gitId":"-"},"content":" * Updates a label\u0027s information in the current repository."},{"lineNumber":366,"author":{"gitId":"-"},"content":" * @param labelName - name of existing label"},{"lineNumber":367,"author":{"gitId":"-"},"content":" * @param labelColor - new color to be assigned to existing label."},{"lineNumber":368,"author":{"gitId":"-"},"content":" */"},{"lineNumber":369,"author":{"gitId":"-"},"content":" updateLabel(labelName: string, labelColor: string): void {"},{"lineNumber":370,"author":{"gitId":"-"},"content":" octokit.issues.updateLabel({ owner: ORG_NAME, repo: REPO, name: labelName, current_name: labelName, color: labelColor });"},{"lineNumber":371,"author":{"gitId":"-"},"content":" }"},{"lineNumber":372,"author":{"gitId":"-"},"content":""},{"lineNumber":373,"author":{"gitId":"-"},"content":" closeIssue(id: number): Observable\u003cGithubIssue\u003e {"},{"lineNumber":374,"author":{"gitId":"-"},"content":" return from(octokit.issues.update({ owner: ORG_NAME, repo: REPO, issue_number: id, state: \u0027closed\u0027 })).pipe("},{"lineNumber":375,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":376,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":377,"author":{"gitId":"-"},"content":" return new GithubIssue(response.data);"},{"lineNumber":378,"author":{"gitId":"-"},"content":" })"},{"lineNumber":379,"author":{"gitId":"-"},"content":" );"},{"lineNumber":380,"author":{"gitId":"-"},"content":" }"},{"lineNumber":381,"author":{"gitId":"-"},"content":""},{"lineNumber":382,"author":{"gitId":"-"},"content":" reopenIssue(id: number): Observable\u003cGithubIssue\u003e {"},{"lineNumber":383,"author":{"gitId":"-"},"content":" return from(octokit.issues.update({ owner: ORG_NAME, repo: REPO, issue_number: id, state: \u0027open\u0027 })).pipe("},{"lineNumber":384,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":385,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":386,"author":{"gitId":"-"},"content":" return new GithubIssue(response.data);"},{"lineNumber":387,"author":{"gitId":"-"},"content":" })"},{"lineNumber":388,"author":{"gitId":"-"},"content":" );"},{"lineNumber":389,"author":{"gitId":"-"},"content":" }"},{"lineNumber":390,"author":{"gitId":"-"},"content":""},{"lineNumber":391,"author":{"gitId":"-"},"content":" createIssue(title: string, description: string, labels: string[]): Observable\u003cGithubIssue\u003e {"},{"lineNumber":392,"author":{"gitId":"-"},"content":" return from(octokit.issues.create({ owner: ORG_NAME, repo: REPO, title: title, body: description, labels: labels })).pipe("},{"lineNumber":393,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":394,"author":{"gitId":"-"},"content":" return new GithubIssue(response.data);"},{"lineNumber":395,"author":{"gitId":"-"},"content":" })"},{"lineNumber":396,"author":{"gitId":"-"},"content":" );"},{"lineNumber":397,"author":{"gitId":"-"},"content":" }"},{"lineNumber":398,"author":{"gitId":"-"},"content":""},{"lineNumber":399,"author":{"gitId":"-"},"content":" createIssueComment(issueId: number, description: string): Observable\u003cGithubComment\u003e {"},{"lineNumber":400,"author":{"gitId":"-"},"content":" return from(octokit.issues.createComment({ owner: ORG_NAME, repo: REPO, issue_number: issueId, body: description })).pipe("},{"lineNumber":401,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubComment\u003e) \u003d\u003e {"},{"lineNumber":402,"author":{"gitId":"-"},"content":" return response.data;"},{"lineNumber":403,"author":{"gitId":"-"},"content":" })"},{"lineNumber":404,"author":{"gitId":"-"},"content":" );"},{"lineNumber":405,"author":{"gitId":"-"},"content":" }"},{"lineNumber":406,"author":{"gitId":"-"},"content":""},{"lineNumber":407,"author":{"gitId":"-"},"content":" updateIssue(id: number, title: string, description: string, labels: string[], assignees?: string[]): Observable\u003cGithubIssue\u003e {"},{"lineNumber":408,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":409,"author":{"gitId":"-"},"content":" octokit.issues.update({"},{"lineNumber":410,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":411,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":412,"author":{"gitId":"-"},"content":" issue_number: id,"},{"lineNumber":413,"author":{"gitId":"-"},"content":" title: title,"},{"lineNumber":414,"author":{"gitId":"-"},"content":" body: description,"},{"lineNumber":415,"author":{"gitId":"-"},"content":" labels: labels,"},{"lineNumber":416,"author":{"gitId":"-"},"content":" assignees: assignees"},{"lineNumber":417,"author":{"gitId":"-"},"content":" })"},{"lineNumber":418,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":419,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubIssue\u003e) \u003d\u003e {"},{"lineNumber":420,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.set(id, response.headers[\u0027last-modified\u0027]);"},{"lineNumber":421,"author":{"gitId":"-"},"content":" return new GithubIssue(response.data);"},{"lineNumber":422,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":423,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":424,"author":{"gitId":"-"},"content":" return throwError(err);"},{"lineNumber":425,"author":{"gitId":"-"},"content":" })"},{"lineNumber":426,"author":{"gitId":"-"},"content":" );"},{"lineNumber":427,"author":{"gitId":"-"},"content":" }"},{"lineNumber":428,"author":{"gitId":"-"},"content":""},{"lineNumber":429,"author":{"gitId":"-"},"content":" updateIssueComment(issueComment: IssueComment): Observable\u003cGithubComment\u003e {"},{"lineNumber":430,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":431,"author":{"gitId":"-"},"content":" octokit.issues.updateComment({ owner: ORG_NAME, repo: REPO, comment_id: issueComment.id, body: issueComment.description })"},{"lineNumber":432,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":433,"author":{"gitId":"-"},"content":" map((response: GithubResponse\u003cGithubComment\u003e) \u003d\u003e {"},{"lineNumber":434,"author":{"gitId":"-"},"content":" return response.data;"},{"lineNumber":435,"author":{"gitId":"-"},"content":" })"},{"lineNumber":436,"author":{"gitId":"-"},"content":" );"},{"lineNumber":437,"author":{"gitId":"-"},"content":" }"},{"lineNumber":438,"author":{"gitId":"-"},"content":""},{"lineNumber":439,"author":{"gitId":"-"},"content":" uploadFile(filename: string, base64String: string): Observable\u003cany\u003e {"},{"lineNumber":440,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":441,"author":{"gitId":"-"},"content":" octokit.repos.createOrUpdateFile({"},{"lineNumber":442,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":443,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":444,"author":{"gitId":"nknguyenhc"},"content":" branch: BRANCH,"},{"lineNumber":445,"author":{"gitId":"-"},"content":" path: `files/${filename}`,"},{"lineNumber":446,"author":{"gitId":"-"},"content":" message: \u0027upload file\u0027,"},{"lineNumber":447,"author":{"gitId":"-"},"content":" content: base64String"},{"lineNumber":448,"author":{"gitId":"-"},"content":" })"},{"lineNumber":449,"author":{"gitId":"-"},"content":" );"},{"lineNumber":450,"author":{"gitId":"-"},"content":" }"},{"lineNumber":451,"author":{"gitId":"-"},"content":""},{"lineNumber":452,"author":{"gitId":"-"},"content":" fetchEventsForRepo(): Observable\u003cany[]\u003e {"},{"lineNumber":453,"author":{"gitId":"-"},"content":" return from(octokit.issues.listEventsForRepo({ owner: ORG_NAME, repo: REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })).pipe("},{"lineNumber":454,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":455,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":456,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":457,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch events for repo.\u0027))"},{"lineNumber":458,"author":{"gitId":"-"},"content":" );"},{"lineNumber":459,"author":{"gitId":"-"},"content":" }"},{"lineNumber":460,"author":{"gitId":"-"},"content":""},{"lineNumber":461,"author":{"gitId":"-"},"content":" fetchDataFile(): Observable\u003c{}\u003e {"},{"lineNumber":462,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":463,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027data.csv\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":464,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":465,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e {"},{"lineNumber":466,"author":{"gitId":"-"},"content":" return { data: atob(rawData[\u0027data\u0027][\u0027content\u0027]) };"},{"lineNumber":467,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":468,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch data file.\u0027))"},{"lineNumber":469,"author":{"gitId":"-"},"content":" );"},{"lineNumber":470,"author":{"gitId":"-"},"content":" }"},{"lineNumber":471,"author":{"gitId":"-"},"content":""},{"lineNumber":472,"author":{"gitId":"-"},"content":" fetchLatestRelease(): Observable\u003cGithubRelease\u003e {"},{"lineNumber":473,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":474,"author":{"gitId":"-"},"content":" octokit.repos.getLatestRelease({ owner: CATCHER_ORG, repo: CATCHER_REPO, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":475,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":476,"author":{"gitId":"-"},"content":" map((res) \u003d\u003e res[\u0027data\u0027]),"},{"lineNumber":477,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch latest release.\u0027))"},{"lineNumber":478,"author":{"gitId":"-"},"content":" );"},{"lineNumber":479,"author":{"gitId":"-"},"content":" }"},{"lineNumber":480,"author":{"gitId":"-"},"content":""},{"lineNumber":481,"author":{"gitId":"-"},"content":" private fetchSettingsFromRawUrl(): Observable\u003cSessionData\u003e {"},{"lineNumber":482,"author":{"gitId":"-"},"content":" return from(fetch(getSettingsUrl(MOD_ORG, DATA_REPO))).pipe("},{"lineNumber":483,"author":{"gitId":"-"},"content":" mergeMap((res) \u003d\u003e res.json()),"},{"lineNumber":484,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch settings file.\u0027))"},{"lineNumber":485,"author":{"gitId":"-"},"content":" );"},{"lineNumber":486,"author":{"gitId":"-"},"content":" }"},{"lineNumber":487,"author":{"gitId":"-"},"content":""},{"lineNumber":488,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":489,"author":{"gitId":"-"},"content":" * Fetches the data file that is regulates session information."},{"lineNumber":490,"author":{"gitId":"-"},"content":" * @return Observable\u003cSessionData\u003e representing session information."},{"lineNumber":491,"author":{"gitId":"-"},"content":" */"},{"lineNumber":492,"author":{"gitId":"-"},"content":" fetchSettingsFile(): Observable\u003cSessionData\u003e {"},{"lineNumber":493,"author":{"gitId":"-"},"content":" return from("},{"lineNumber":494,"author":{"gitId":"-"},"content":" octokit.repos.getContents({ owner: MOD_ORG, repo: DATA_REPO, path: \u0027settings.json\u0027, headers: GithubService.IF_NONE_MATCH_EMPTY })"},{"lineNumber":495,"author":{"gitId":"-"},"content":" ).pipe("},{"lineNumber":496,"author":{"gitId":"-"},"content":" map((rawData) \u003d\u003e JSON.parse(atob(rawData[\u0027data\u0027][\u0027content\u0027]))),"},{"lineNumber":497,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":498,"author":{"gitId":"-"},"content":" this.logger.error("},{"lineNumber":499,"author":{"gitId":"-"},"content":" \u0027GithubService: Failed to fetch settings file via REST API. Trying to fetch using raw.githubusercontent.com: \u0027,"},{"lineNumber":500,"author":{"gitId":"-"},"content":" err"},{"lineNumber":501,"author":{"gitId":"-"},"content":" );"},{"lineNumber":502,"author":{"gitId":"-"},"content":" return this.fetchSettingsFromRawUrl();"},{"lineNumber":503,"author":{"gitId":"-"},"content":" })"},{"lineNumber":504,"author":{"gitId":"-"},"content":" );"},{"lineNumber":505,"author":{"gitId":"-"},"content":" }"},{"lineNumber":506,"author":{"gitId":"-"},"content":""},{"lineNumber":507,"author":{"gitId":"-"},"content":" fetchAuthenticatedUser(): Observable\u003cGithubUser\u003e {"},{"lineNumber":508,"author":{"gitId":"-"},"content":" return from(octokit.users.getAuthenticated()).pipe("},{"lineNumber":509,"author":{"gitId":"-"},"content":" map((response) \u003d\u003e {"},{"lineNumber":510,"author":{"gitId":"-"},"content":" return response[\u0027data\u0027];"},{"lineNumber":511,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":512,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e throwError(\u0027Failed to fetch authenticated user.\u0027))"},{"lineNumber":513,"author":{"gitId":"-"},"content":" );"},{"lineNumber":514,"author":{"gitId":"-"},"content":" }"},{"lineNumber":515,"author":{"gitId":"-"},"content":""},{"lineNumber":516,"author":{"gitId":"-"},"content":" getRepoURL(): string {"},{"lineNumber":517,"author":{"gitId":"-"},"content":" return ORG_NAME.concat(\u0027/\u0027).concat(REPO);"},{"lineNumber":518,"author":{"gitId":"-"},"content":" }"},{"lineNumber":519,"author":{"gitId":"-"},"content":""},{"lineNumber":520,"author":{"gitId":"-"},"content":" viewIssueInBrowser(id: number, event: Event) {"},{"lineNumber":521,"author":{"gitId":"-"},"content":" if (id) {"},{"lineNumber":522,"author":{"gitId":"-"},"content":" window.open(\u0027https://github.com/\u0027.concat(this.getRepoURL()).concat(\u0027/issues/\u0027).concat(String(id)));"},{"lineNumber":523,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":524,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(new Error(UNABLE_TO_OPEN_IN_BROWSER));"},{"lineNumber":525,"author":{"gitId":"-"},"content":" }"},{"lineNumber":526,"author":{"gitId":"-"},"content":" event.stopPropagation();"},{"lineNumber":527,"author":{"gitId":"-"},"content":" }"},{"lineNumber":528,"author":{"gitId":"-"},"content":""},{"lineNumber":529,"author":{"gitId":"-"},"content":" reset(): void {"},{"lineNumber":530,"author":{"gitId":"-"},"content":" this.logger.info(`GithubService: Resetting issues cache`);"},{"lineNumber":531,"author":{"gitId":"-"},"content":" this.issuesCacheManager.clear();"},{"lineNumber":532,"author":{"gitId":"-"},"content":" this.issuesLastModifiedManager.clear();"},{"lineNumber":533,"author":{"gitId":"-"},"content":" this.issueQueryRefs.clear();"},{"lineNumber":534,"author":{"gitId":"-"},"content":" }"},{"lineNumber":535,"author":{"gitId":"-"},"content":""},{"lineNumber":536,"author":{"gitId":"-"},"content":" getProfilesData(): Promise\u003cResponse\u003e {"},{"lineNumber":537,"author":{"gitId":"-"},"content":" return fetch(AppConfig.clientDataUrl);"},{"lineNumber":538,"author":{"gitId":"-"},"content":" }"},{"lineNumber":539,"author":{"gitId":"-"},"content":""},{"lineNumber":540,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":541,"author":{"gitId":"-"},"content":" * Performs an API call to fetch a page of filtered issues with a given pageNumber."},{"lineNumber":542,"author":{"gitId":"-"},"content":" *"},{"lineNumber":543,"author":{"gitId":"-"},"content":" * The request is sent with the ETag of the latest cached HTTP response."},{"lineNumber":544,"author":{"gitId":"-"},"content":" * If page requested has the same ETag, or the request results in an error,"},{"lineNumber":545,"author":{"gitId":"-"},"content":" * then the cached page is returned instead."},{"lineNumber":546,"author":{"gitId":"-"},"content":" *"},{"lineNumber":547,"author":{"gitId":"-"},"content":" * @param filter - The issue filter"},{"lineNumber":548,"author":{"gitId":"-"},"content":" * @param pageNumber - The page to be fetched"},{"lineNumber":549,"author":{"gitId":"-"},"content":" * @returns An observable representing the response containing a single page of filtered issues"},{"lineNumber":550,"author":{"gitId":"-"},"content":" */"},{"lineNumber":551,"author":{"gitId":"-"},"content":" private getIssuesAPICall(filter: RestGithubIssueFilter, pageNumber: number): Observable\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e {"},{"lineNumber":552,"author":{"gitId":"-"},"content":" const apiCall: Promise\u003cGithubResponse\u003cGithubIssue[]\u003e\u003e \u003d octokit.issues.listForRepo({"},{"lineNumber":553,"author":{"gitId":"-"},"content":" ...filter,"},{"lineNumber":554,"author":{"gitId":"-"},"content":" owner: ORG_NAME,"},{"lineNumber":555,"author":{"gitId":"-"},"content":" repo: REPO,"},{"lineNumber":556,"author":{"gitId":"-"},"content":" sort: \u0027created\u0027,"},{"lineNumber":557,"author":{"gitId":"-"},"content":" direction: \u0027desc\u0027,"},{"lineNumber":558,"author":{"gitId":"-"},"content":" per_page: MAX_ITEMS_PER_PAGE,"},{"lineNumber":559,"author":{"gitId":"-"},"content":" page: pageNumber,"},{"lineNumber":560,"author":{"gitId":"-"},"content":" headers: { \u0027If-None-Match\u0027: this.issuesCacheManager.getEtagFor(pageNumber) }"},{"lineNumber":561,"author":{"gitId":"-"},"content":" });"},{"lineNumber":562,"author":{"gitId":"-"},"content":" const apiCall$ \u003d from(apiCall);"},{"lineNumber":563,"author":{"gitId":"-"},"content":" return apiCall$.pipe("},{"lineNumber":564,"author":{"gitId":"-"},"content":" catchError((err) \u003d\u003e {"},{"lineNumber":565,"author":{"gitId":"-"},"content":" return of(this.issuesCacheManager.get(pageNumber));"},{"lineNumber":566,"author":{"gitId":"-"},"content":" })"},{"lineNumber":567,"author":{"gitId":"-"},"content":" );"},{"lineNumber":568,"author":{"gitId":"-"},"content":" }"},{"lineNumber":569,"author":{"gitId":"-"},"content":""},{"lineNumber":570,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":571,"author":{"gitId":"-"},"content":" * Fetches a list of items using a GraphQL query that queries for paginated data."},{"lineNumber":572,"author":{"gitId":"-"},"content":" *"},{"lineNumber":573,"author":{"gitId":"-"},"content":" * @param query - The GraphQL query that queries for paginated data."},{"lineNumber":574,"author":{"gitId":"-"},"content":" * @param variables - Additional variables for the GraphQL query."},{"lineNumber":575,"author":{"gitId":"-"},"content":" * @callback pluckEdges A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":576,"author":{"gitId":"-"},"content":" * @callback Model Constructor for the item model."},{"lineNumber":577,"author":{"gitId":"-"},"content":" * @returns A list of items from the query."},{"lineNumber":578,"author":{"gitId":"-"},"content":" */"},{"lineNumber":579,"author":{"gitId":"-"},"content":" private fetchGraphqlList\u003cT, M\u003e("},{"lineNumber":580,"author":{"gitId":"-"},"content":" query: DocumentNode,"},{"lineNumber":581,"author":{"gitId":"-"},"content":" variables: {},"},{"lineNumber":582,"author":{"gitId":"-"},"content":" pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e,"},{"lineNumber":583,"author":{"gitId":"-"},"content":" Model: new (data) \u003d\u003e M"},{"lineNumber":584,"author":{"gitId":"-"},"content":" ): Observable\u003cArray\u003cM\u003e\u003e {"},{"lineNumber":585,"author":{"gitId":"-"},"content":" return from(this.withPagination\u003cT\u003e(pluckEdges)(query, variables)).pipe("},{"lineNumber":586,"author":{"gitId":"-"},"content":" map((results: Array\u003cApolloQueryResult\u003cT\u003e\u003e) \u003d\u003e {"},{"lineNumber":587,"author":{"gitId":"-"},"content":" const issues \u003d results.reduce((accumulated, current) \u003d\u003e accumulated.concat(pluckEdges(current)), []);"},{"lineNumber":588,"author":{"gitId":"-"},"content":" return issues.map((issue) \u003d\u003e new Model(issue.node));"},{"lineNumber":589,"author":{"gitId":"-"},"content":" }),"},{"lineNumber":590,"author":{"gitId":"-"},"content":" throwIfEmpty(() \u003d\u003e {"},{"lineNumber":591,"author":{"gitId":"-"},"content":" return new HttpErrorResponse({ status: 304 });"},{"lineNumber":592,"author":{"gitId":"-"},"content":" })"},{"lineNumber":593,"author":{"gitId":"-"},"content":" );"},{"lineNumber":594,"author":{"gitId":"-"},"content":" }"},{"lineNumber":595,"author":{"gitId":"-"},"content":""},{"lineNumber":596,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":597,"author":{"gitId":"-"},"content":" * Returns an async function that will accept a GraphQL query that requests for paginated items."},{"lineNumber":598,"author":{"gitId":"-"},"content":" * Said function will recursively query for all subsequent pages until a page that has less than 100 items is found,"},{"lineNumber":599,"author":{"gitId":"-"},"content":" * then return all queried pages in an array."},{"lineNumber":600,"author":{"gitId":"-"},"content":" *"},{"lineNumber":601,"author":{"gitId":"-"},"content":" * @callback pluckEdges - A function that returns a list of edges in a ApolloQueryResult."},{"lineNumber":602,"author":{"gitId":"-"},"content":" * @returns an async function that accepts a GraphQL query for paginated data and any additional variables to that query"},{"lineNumber":603,"author":{"gitId":"-"},"content":" */"},{"lineNumber":604,"author":{"gitId":"-"},"content":" private withPagination\u003cT\u003e(pluckEdges: (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e Array\u003cany\u003e) {"},{"lineNumber":605,"author":{"gitId":"-"},"content":" return async (query: DocumentNode, variables: { [key: string]: any } \u003d {}): Promise\u003cArray\u003cApolloQueryResult\u003cT\u003e\u003e\u003e \u003d\u003e {"},{"lineNumber":606,"author":{"gitId":"-"},"content":" const cursor \u003d variables.cursor || null;"},{"lineNumber":607,"author":{"gitId":"-"},"content":" const graphqlQuery \u003d this.apollo.watchQuery\u003cT\u003e({ query, variables: { ...variables, cursor } });"},{"lineNumber":608,"author":{"gitId":"-"},"content":" return graphqlQuery.refetch().then(async (results: ApolloQueryResult\u003cT\u003e) \u003d\u003e {"},{"lineNumber":609,"author":{"gitId":"-"},"content":" const intermediate \u003d Array.isArray(results) ? results : [results];"},{"lineNumber":610,"author":{"gitId":"-"},"content":" const edges \u003d pluckEdges(results);"},{"lineNumber":611,"author":{"gitId":"-"},"content":" const nextCursor \u003d edges.length \u003d\u003d\u003d 0 ? null : edges[edges.length - 1].cursor;"},{"lineNumber":612,"author":{"gitId":"-"},"content":""},{"lineNumber":613,"author":{"gitId":"-"},"content":" if (edges.length \u003c MAX_ITEMS_PER_PAGE || !nextCursor) {"},{"lineNumber":614,"author":{"gitId":"-"},"content":" return intermediate;"},{"lineNumber":615,"author":{"gitId":"-"},"content":" }"},{"lineNumber":616,"author":{"gitId":"-"},"content":" const nextResults \u003d await this.withPagination\u003cT\u003e(pluckEdges)(query, {"},{"lineNumber":617,"author":{"gitId":"-"},"content":" ...variables,"},{"lineNumber":618,"author":{"gitId":"-"},"content":" cursor: nextCursor"},{"lineNumber":619,"author":{"gitId":"-"},"content":" });"},{"lineNumber":620,"author":{"gitId":"-"},"content":" return intermediate.concat(nextResults);"},{"lineNumber":621,"author":{"gitId":"-"},"content":" });"},{"lineNumber":622,"author":{"gitId":"-"},"content":" };"},{"lineNumber":623,"author":{"gitId":"-"},"content":" }"},{"lineNumber":624,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":82,"-":542}},{"path":"src/app/core/services/upload.service.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Injectable } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"nknguyenhc"},"content":"import { of, throwError } from \u0027rxjs\u0027;"},{"lineNumber":3,"author":{"gitId":"nknguyenhc"},"content":"import { catchError, mergeMap } from \u0027rxjs/operators\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { uuid } from \u0027../../shared/lib/uuid\u0027;"},{"lineNumber":5,"author":{"gitId":"nknguyenhc"},"content":"import { ERRORCODE_NOT_FOUND } from \u0027./error-handling.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027./github.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"const SUPPORTED_VIDEO_FILE_TYPES \u003d [\u0027mp4\u0027, \u0027mov\u0027];"},{"lineNumber":9,"author":{"gitId":"-"},"content":"export const SUPPORTED_FILE_TYPES \u003d ["},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u0027gif\u0027,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u0027jpeg\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u0027jpg\u0027,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u0027png\u0027,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u0027docx\u0027,"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u0027gz\u0027,"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u0027log\u0027,"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u0027pdf\u0027,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u0027pptx\u0027,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u0027txt\u0027,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u0027xlsx\u0027,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u0027zip\u0027,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" ...SUPPORTED_VIDEO_FILE_TYPES"},{"lineNumber":23,"author":{"gitId":"-"},"content":"];"},{"lineNumber":24,"author":{"gitId":"-"},"content":"export const FILE_TYPE_SUPPORT_ERROR \u003d \"We don\u0027t support that file type.\" + \u0027 Try again with \u0027 + SUPPORTED_FILE_TYPES.join(\u0027, \u0027) + \u0027.\u0027;"},{"lineNumber":25,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Returns an error message string for when file exceeds the defined size limit"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * @param fileType Canonical name for file, not to be confused with file extension"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * @param size Number of MBs"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"export const getSizeExceedErrorMsg \u003d (fileType: string, size: number): string \u003d\u003e `Oops, ${fileType} is too big. Keep it under ${size}MiB.`;"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"@Injectable({"},{"lineNumber":33,"author":{"gitId":"-"},"content":" providedIn: \u0027root\u0027"},{"lineNumber":34,"author":{"gitId":"-"},"content":"})"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Responsible for upload of media files to the current phase\u0027s repository."},{"lineNumber":38,"author":{"gitId":"-"},"content":" */"},{"lineNumber":39,"author":{"gitId":"-"},"content":"export class UploadService {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService) {}"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" uploadFile(base64File: string | ArrayBuffer, userFilename: string) {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" let base64String: string;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" if (base64File instanceof ArrayBuffer) {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" base64String \u003d String.fromCharCode.apply(null, new Uint16Array(base64File));"},{"lineNumber":46,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" base64String \u003d base64File;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }"},{"lineNumber":49,"author":{"gitId":"-"},"content":" const fileType \u003d this.getFileExtension(userFilename);"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" if (SUPPORTED_FILE_TYPES.includes(fileType.toLowerCase())) {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" base64String \u003d base64String.split(\u0027,\u0027)[1];"},{"lineNumber":53,"author":{"gitId":"-"},"content":" const onlineFilename \u003d uuid();"},{"lineNumber":54,"author":{"gitId":"nknguyenhc"},"content":" const attemptUploadFile \u003d () \u003d\u003e this.githubService.uploadFile(`${onlineFilename}.${fileType}`, base64String);"},{"lineNumber":55,"author":{"gitId":"nknguyenhc"},"content":" return attemptUploadFile().pipe("},{"lineNumber":56,"author":{"gitId":"nknguyenhc"},"content":" catchError((err: any) \u003d\u003e {"},{"lineNumber":57,"author":{"gitId":"nknguyenhc"},"content":" if (!(err.status \u003d\u003d\u003d ERRORCODE_NOT_FOUND)) {"},{"lineNumber":58,"author":{"gitId":"nknguyenhc"},"content":" return throwError(err);"},{"lineNumber":59,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":60,"author":{"gitId":"nknguyenhc"},"content":" return of(false);"},{"lineNumber":61,"author":{"gitId":"nknguyenhc"},"content":" }),"},{"lineNumber":62,"author":{"gitId":"nknguyenhc"},"content":" mergeMap((isBranchPresent) \u003d\u003e {"},{"lineNumber":63,"author":{"gitId":"nknguyenhc"},"content":" if (isBranchPresent) {"},{"lineNumber":64,"author":{"gitId":"nknguyenhc"},"content":" return of(isBranchPresent);"},{"lineNumber":65,"author":{"gitId":"nknguyenhc"},"content":" }"},{"lineNumber":66,"author":{"gitId":"nknguyenhc"},"content":" return this.githubService.createBranch().pipe(mergeMap(attemptUploadFile));"},{"lineNumber":67,"author":{"gitId":"nknguyenhc"},"content":" })"},{"lineNumber":68,"author":{"gitId":"nknguyenhc"},"content":" );"},{"lineNumber":69,"author":{"gitId":"-"},"content":" } else {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return throwError(FILE_TYPE_SUPPORT_ERROR);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" getFileExtension(fileName: string): string {"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return fileName.split(\u0027.\u0027).pop();"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" isVideoFile(fileName): boolean {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" const fileType \u003d this.getFileExtension(fileName);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return SUPPORTED_VIDEO_FILE_TYPES.includes(fileType.toLowerCase());"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" isSupportedFileType(fileName): boolean {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" const fileType \u003d this.getFileExtension(fileName);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return SUPPORTED_FILE_TYPES.includes(fileType.toLowerCase());"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":18,"-":69}},{"path":"src/app/core/validators/noWhitespace.validator.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"MadLamprey"},"content":"import { AbstractControl, ValidationErrors, ValidatorFn } from \u0027@angular/forms\u0027;"},{"lineNumber":2,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":3,"author":{"gitId":"MadLamprey"},"content":"export function noWhitespace(): ValidatorFn {"},{"lineNumber":4,"author":{"gitId":"MadLamprey"},"content":" return (title: AbstractControl): ValidationErrors | null \u003d\u003e {"},{"lineNumber":5,"author":{"gitId":"MadLamprey"},"content":" if (title.value \u0026\u0026 title.value.trim() \u003d\u003d\u003d \u0027\u0027) {"},{"lineNumber":6,"author":{"gitId":"MadLamprey"},"content":" return { whitespace: true };"},{"lineNumber":7,"author":{"gitId":"MadLamprey"},"content":" }"},{"lineNumber":8,"author":{"gitId":"MadLamprey"},"content":" return null;"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":" };"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":"}"}],"authorContributionMap":{"MadLamprey":10}},{"path":"src/app/phase-bug-reporting/new-issue/new-issue.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch1 class\u003d\"mat-display-1 title\"\u003eNew Issue\u003c/h1\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"newIssueForm\" #myForm\u003d\"ngForm\" (ngSubmit)\u003d\"submitNewIssue(myForm)\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"column left\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cmat-form-field\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"title\" formControlName\u003d\"title\" matInput placeholder\u003d\"Title\" required maxlength\u003d\"256\" /\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cmat-error *ngIf\u003d\"title.errors \u0026\u0026 title.errors[\u0027required\u0027] \u0026\u0026 (title.touched || title.dirty)\"\u003e Title required. \u003c/mat-error\u003e"},{"lineNumber":10,"author":{"gitId":"MadLamprey"},"content":" \u003cmat-error *ngIf\u003d\"title.errors \u0026\u0026 title.errors[\u0027whitespace\u0027]\"\u003e Title cannot contain only whitespaces. \u003c/mat-error\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-error *ngIf\u003d\"title.errors \u0026\u0026 title.errors[\u0027maxlength\u0027]\"\u003e Title cannot exceed 256 characters. \u003c/mat-error\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cmat-hint *ngIf\u003d\"title.value?.length \u003e\u003d 206\"\u003e {{ 256 - title.value?.length }} characters remaining. \u003c/mat-hint\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"margin: 10px 0 10px 0\"\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003capp-comment-editor"},{"lineNumber":17,"author":{"gitId":"-"},"content":" [id]\u003d\"\u0027description\u0027\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" [commentField]\u003d\"description\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" [commentForm]\u003d\"this.newIssueForm\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" [(isFormPending)]\u003d\"this.isFormPending\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" [(submitButtonText)]\u003d\"this.submitButtonText\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/app-comment-editor\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":27,"author":{"gitId":"-"},"content":" style\u003d\"float: right\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" class\u003d\"submit-new-bug-report\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":31,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" [disabled]\u003d\"!newIssueForm.valid || isFormPending\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" {{ this.submitButtonText }}"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"column right\"\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"severity-dropdown\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003capp-label-dropdown initialValue\u003d\"\" attributeName\u003d\"severity\" [dropdownForm]\u003d\"newIssueForm\"\u003e\u003c/app-label-dropdown\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"bug-dropdown\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003capp-label-dropdown initialValue\u003d\"\" attributeName\u003d\"type\" [dropdownForm]\u003d\"newIssueForm\"\u003e\u003c/app-label-dropdown\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"MadLamprey":1,"-":47}},{"path":"src/app/phase-bug-reporting/new-issue/new-issue.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, OnInit } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { AbstractControl, FormBuilder, FormGroup, NgForm, Validators } from \u0027@angular/forms\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { Router } from \u0027@angular/router\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { finalize } from \u0027rxjs/operators\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../../core/services/error-handling.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { LabelService } from \u0027../../core/services/label.service\u0027;"},{"lineNumber":9,"author":{"gitId":"MadLamprey"},"content":"import { noWhitespace } from \u0027../../core/validators/noWhitespace.validator\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { SUBMIT_BUTTON_TEXT } from \u0027../../shared/view-issue/view-issue.component\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":13,"author":{"gitId":"-"},"content":" selector: \u0027app-new-issue\u0027,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" templateUrl: \u0027./new-issue.component.html\u0027,"},{"lineNumber":15,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./new-issue.component.css\u0027]"},{"lineNumber":16,"author":{"gitId":"-"},"content":"})"},{"lineNumber":17,"author":{"gitId":"-"},"content":"export class NewIssueComponent implements OnInit {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" newIssueForm: FormGroup;"},{"lineNumber":19,"author":{"gitId":"-"},"content":" isFormPending \u003d false;"},{"lineNumber":20,"author":{"gitId":"-"},"content":" submitButtonText: string;"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" constructor("},{"lineNumber":23,"author":{"gitId":"-"},"content":" private issueService: IssueService,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private formBuilder: FormBuilder,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private errorHandlingService: ErrorHandlingService,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public labelService: LabelService,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private router: Router"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ) {}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" this.newIssueForm \u003d this.formBuilder.group({"},{"lineNumber":32,"author":{"gitId":"MadLamprey"},"content":" title: [\u0027\u0027, [Validators.required, Validators.maxLength(256), noWhitespace()]],"},{"lineNumber":33,"author":{"gitId":"-"},"content":" description: [\u0027\u0027],"},{"lineNumber":34,"author":{"gitId":"-"},"content":" severity: [\u0027\u0027, Validators.required],"},{"lineNumber":35,"author":{"gitId":"-"},"content":" type: [\u0027\u0027, Validators.required]"},{"lineNumber":36,"author":{"gitId":"-"},"content":" });"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.submitButtonText \u003d SUBMIT_BUTTON_TEXT.SUBMIT;"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" submitNewIssue(form: NgForm) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (this.newIssueForm.invalid) {"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return;"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"MadLamprey"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.isFormPending \u003d true;"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.issueService"},{"lineNumber":48,"author":{"gitId":"-"},"content":" .createIssue(this.title.value, Issue.updateDescription(this.description.value), this.severity.value, this.type.value)"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .pipe(finalize(() \u003d\u003e (this.isFormPending \u003d false)))"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .subscribe("},{"lineNumber":51,"author":{"gitId":"-"},"content":" (newIssue) \u003d\u003e {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.issueService.updateLocalStore(newIssue);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.router.navigateByUrl(`phaseBugReporting/issues/${newIssue.id}`);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" form.resetForm();"},{"lineNumber":55,"author":{"gitId":"-"},"content":" },"},{"lineNumber":56,"author":{"gitId":"-"},"content":" (error) \u003d\u003e {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.errorHandlingService.handleError(error);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }"},{"lineNumber":59,"author":{"gitId":"-"},"content":" );"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }"},{"lineNumber":61,"author":{"gitId":"-"},"content":""},{"lineNumber":62,"author":{"gitId":"-"},"content":" canDeactivate() {"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return ("},{"lineNumber":64,"author":{"gitId":"-"},"content":" !this.isAttributeEditing(this.title) \u0026\u0026"},{"lineNumber":65,"author":{"gitId":"-"},"content":" !this.isAttributeEditing(this.description) \u0026\u0026"},{"lineNumber":66,"author":{"gitId":"-"},"content":" !this.isAttributeEditing(this.severity) \u0026\u0026"},{"lineNumber":67,"author":{"gitId":"-"},"content":" !this.isAttributeEditing(this.type)"},{"lineNumber":68,"author":{"gitId":"-"},"content":" );"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }"},{"lineNumber":70,"author":{"gitId":"-"},"content":""},{"lineNumber":71,"author":{"gitId":"-"},"content":" isAttributeEditing(attribute: AbstractControl) {"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return attribute.value !\u003d\u003d null \u0026\u0026 attribute.value !\u003d\u003d \u0027\u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" get title() {"},{"lineNumber":76,"author":{"gitId":"-"},"content":" return this.newIssueForm.get(\u0027title\u0027);"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }"},{"lineNumber":78,"author":{"gitId":"-"},"content":""},{"lineNumber":79,"author":{"gitId":"-"},"content":" get description() {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return this.newIssueForm.get(\u0027description\u0027);"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }"},{"lineNumber":82,"author":{"gitId":"-"},"content":""},{"lineNumber":83,"author":{"gitId":"-"},"content":" get severity() {"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return this.newIssueForm.get(\u0027severity\u0027);"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }"},{"lineNumber":86,"author":{"gitId":"-"},"content":""},{"lineNumber":87,"author":{"gitId":"-"},"content":" get type() {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return this.newIssueForm.get(\u0027type\u0027);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"MadLamprey":3,"-":87}},{"path":"src/app/shared/comment-editor/comment-editor.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"commentForm\" style\u003d\"min-height: 350px\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cmat-tab-group class\u003d\"mat-elevation-z1\" animationDuration\u003d\"0ms\" (selectedTabChange)\u003d\"commentField.setValue(commentTextArea.value)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-tab label\u003d\"Write\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":5,"author":{"gitId":"-"},"content":" #dropArea"},{"lineNumber":6,"author":{"gitId":"-"},"content":" class\u003d\"tab-content\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" (dragleave)\u003d\"onDragExit($event)\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" (dragenter)\u003d\"onDragEnter($event)\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" (drop)\u003d\"onDrop($event)\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" (dragover)\u003d\"enableFileDrop($event)\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003capp-markdown-toolbar [forTextAreaId]\u003d\"this.id\"\u003e\u003c/app-markdown-toolbar\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"outline\" style\u003d\"width: 100%\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cmat-label\u003e\u003c/mat-label\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003ctextarea"},{"lineNumber":16,"author":{"gitId":"-"},"content":" (paste)\u003d\"onPaste($event)\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" (keydown)\u003d\"onKeyPress($event)\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" (beforeinput)\u003d\"handleBeforeInputChange($event)\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" (input)\u003d\"handleInputChange($event)\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" #commentTextArea"},{"lineNumber":21,"author":{"gitId":"-"},"content":" (dragover)\u003d\"disableCaretMovement($event)\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" id\u003d\"{{ this.id }}\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" formControlName\u003d\"{{ this.id }}\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" matInput"},{"lineNumber":25,"author":{"gitId":"-"},"content":" cdkTextareaAutosize"},{"lineNumber":26,"author":{"gitId":"-"},"content":" #autosize\u003d\"cdkTextareaAutosize\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" cdkAutosizeMinRows\u003d\"10\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" cdkAutosizeMaxRows\u003d\"20\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" class\u003d\"text-input-area\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" placeholder\u003d\"{{ this.placeholderText }}\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" maxlength\u003d\"{{ this.maxLength }}\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e\u003c/textarea\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cmat-error *ngIf\u003d\"commentField.errors \u0026\u0026 commentField.errors[\u0027required\u0027] \u0026\u0026 commentField.touched\"\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Description required."},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/mat-error\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cmat-error *ngIf\u003d\"commentField.errors \u0026\u0026 commentField.errors[\u0027maxLength\u0027]\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" Description cannot exceed {{ maxLength }} characters."},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/mat-error\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cmat-hint *ngIf\u003d\"commentField.value?.length \u003e\u003d maxLength - 50\"\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" {{ maxLength - commentField.value?.length }} character(s) remaining."},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/mat-hint\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"drag-and-drop\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"!isInErrorState\"\u003e Attach files by dragging \u0026 dropping or select them by clicking here. \u003c/span\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"isInErrorState\" class\u003d\"error\"\u003e {{ uploadErrorMessage }} \u003c/span\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cinput"},{"lineNumber":47,"author":{"gitId":"-"},"content":" #fileInput"},{"lineNumber":48,"author":{"gitId":"-"},"content":" [disabled]\u003d\"this.commentField.disabled\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" [accept]\u003d\"SUPPORTED_FILE_TYPES\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" type\u003d\"file\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" class\u003d\"file\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" (change)\u003d\"onFileInputUpload($event, fileInput)\""},{"lineNumber":53,"author":{"gitId":"-"},"content":" /\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/mat-tab\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cmat-tab label\u003d\"Preview\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"tab-content\" style\u003d\"min-height: 228px\"\u003e"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown #markdownArea *ngIf\u003d\"commentField.value !\u003d\u003d \u0027\u0027\" [data]\u003d\"sanitize(commentField.value)\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"commentField.value \u003d\u003d\u003d \u0027\u0027\"\u003eNothing to preview.\u003c/div\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/mat-tab\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/mat-tab-group\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"NereusWB922":1,"-":64}},{"path":"src/app/shared/issue/description/description.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch3 class\u003d\"mat-title\"\u003e{{ descriptionTitle }}\u003c/h3\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"issueDescriptionForm\" #myForm\u003d\"ngForm\" (ngSubmit)\u003d\"updateDescription(myForm)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-comment\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-header\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cspan\u003e \u003cstrong\u003e Tester \u003c/strong\u003e posted on {{ issue.created_at }}. \u003c/span\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton style\u003d\"float: right\" mat-button *ngIf\u003d\"permissions.isIssueDescriptionEditable() \u0026\u0026 !isEditing\" (click)\u003d\"changeToEditMode()\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" Edit"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!isEditing\" class\u003d\"comment\"\u003e"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"issue.description\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003capp-comment-editor"},{"lineNumber":15,"author":{"gitId":"-"},"content":" [id]\u003d\"\u0027description\u0027\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [commentField]\u003d\"this.issueDescriptionForm.get(\u0027description\u0027)\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" [commentForm]\u003d\"this.issueDescriptionForm\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" [(isFormPending)]\u003d\"this.isSavePending\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" [(submitButtonText)]\u003d\"this.submitButtonText\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/app-comment-editor\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"editor-actions\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":24,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isSavePending\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":29,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" (click)\u003d\"viewChanges()\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" View Updated Description"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":35,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isSavePending\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":39,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" (click)\u003d\"openCancelDialogIfModified()\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" Cancel"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":45,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":46,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":48,"author":{"gitId":"-"},"content":" [disabled]\u003d\"issueDescriptionForm.invalid || isSavePending\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":50,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":55,"author":{"gitId":"-"},"content":" class\u003d\"editor-action additional-editor-style\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" *ngIf\u003d\"!conflict\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" [disabled]\u003d\"issueDescriptionForm.invalid || isSavePending\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":60,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003cmat-button-content\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cng-container #loadingSpinnerContainer\u003e\u003c/ng-container\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/mat-button-content\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"NereusWB922":1,"-":69}},{"path":"src/app/shared/issue/duplicatedIssues/duplicated-issues.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"mat-title\"\u003e Duplicated Issues \u003c/span\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-chip-list\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cmat-chip"},{"lineNumber":5,"author":{"gitId":"-"},"content":" *ngFor\u003d\"let duplicatedIssue of duplicatedIssues | async\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" style\u003d\"cursor: pointer\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" [matTooltip]\u003d\"duplicatedIssue.title\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" matTooltipPosition\u003d\"above\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" (removed)\u003d\"removeDuplicateStatus(duplicatedIssue)\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":11,"author":{"gitId":"nknguyenhc"},"content":" \u003ca class\u003d\"no-underline link-grey-dark\" [routerLink]\u003d\"[\u0027../\u0027 + duplicatedIssue.id]\"\u003e #{{ duplicatedIssue.id }} \u003c/a\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cmat-icon *ngIf\u003d\"permissions.isTeamResponseEditable() || permissions.isTutorResponseEditable()\" matChipRemove\u003ecancel\u003c/mat-icon\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/mat-chip\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/mat-chip-list\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"nknguyenhc":1,"-":14}},{"path":"src/app/shared/lib/marked.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { MarkedOptions, MarkedRenderer } from \u0027ngx-markdown\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"export function markedOptionsFactory(): MarkedOptions {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" const renderer \u003d new MarkedRenderer();"},{"lineNumber":5,"author":{"gitId":"-"},"content":" const linkRenderer \u003d renderer.link;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":" renderer.link \u003d (href, title, text) \u003d\u003e {"},{"lineNumber":8,"author":{"gitId":"-"},"content":" const html \u003d linkRenderer.call(renderer, href, title, text);"},{"lineNumber":9,"author":{"gitId":"-"},"content":" return html.replace(/^\u003ca /, \u0027\u003ca target\u003d\"_blank\" \u0027);"},{"lineNumber":10,"author":{"gitId":"-"},"content":" };"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":" renderer.checkbox \u003d (checked) \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" return checked ? \u0027\u003ci class\u003d\"fa-solid fa-square-check\"\u003e\u003c/i\u003e \u0027 : \u0027\u003ci class\u003d\"fa-solid fa-square\"\u003e\u003c/i\u003e \u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":" };"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":" return {"},{"lineNumber":17,"author":{"gitId":"-"},"content":" renderer,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" gfm: true,"},{"lineNumber":19,"author":{"gitId":"nknguyenhc"},"content":" breaks: true,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" pedantic: false,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" smartLists: true,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" smartypants: false"},{"lineNumber":23,"author":{"gitId":"-"},"content":" };"},{"lineNumber":24,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"nknguyenhc":1,"-":23}},{"path":"src/app/shared/shared.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { CommonModule } from \u0027@angular/common\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { HttpClientModule } from \u0027@angular/common/http\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { NgModule } from \u0027@angular/core\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { FormsModule, ReactiveFormsModule } from \u0027@angular/forms\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { RouterModule } from \u0027@angular/router\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { FormDisableControlDirective } from \u0027../core/directives/form-disable-control.directive\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { InternalLinkDisableDirective } from \u0027../core/directives/internal-link-disable.directive\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { ActionToasterModule } from \u0027./action-toasters/action-toasters.module\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { ErrorToasterModule } from \u0027./error-toasters/error-toaster.module\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import { MaterialModule } from \u0027./material.module\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":13,"author":{"gitId":"-"},"content":" imports: [CommonModule, FormsModule, ReactiveFormsModule, HttpClientModule, RouterModule, MaterialModule, ErrorToasterModule],"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" declarations: [FormDisableControlDirective, InternalLinkDisableDirective],"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exports: ["},{"lineNumber":16,"author":{"gitId":"-"},"content":" FormDisableControlDirective,"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" InternalLinkDisableDirective,"},{"lineNumber":18,"author":{"gitId":"-"},"content":" CommonModule,"},{"lineNumber":19,"author":{"gitId":"-"},"content":" FormsModule,"},{"lineNumber":20,"author":{"gitId":"-"},"content":" ReactiveFormsModule,"},{"lineNumber":21,"author":{"gitId":"-"},"content":" HttpClientModule,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" RouterModule,"},{"lineNumber":23,"author":{"gitId":"-"},"content":" MaterialModule,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ErrorToasterModule,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" ActionToasterModule"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ]"},{"lineNumber":27,"author":{"gitId":"-"},"content":"})"},{"lineNumber":28,"author":{"gitId":"-"},"content":"export class SharedModule {}"}],"authorContributionMap":{"NereusWB922":3,"-":25}},{"path":"src/app/shared/view-issue/issue-dispute/issue-dispute.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch3 class\u003d\"mat-title\"\u003eDisputes\u003c/h3\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"tutorResponseForm\" #tutorForm\u003d\"ngForm\" (ngSubmit)\u003d\"submitTutorResponseForm(tutorForm)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-comment\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-header\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cspan\u003e Post your response here. \u003c/span\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton mat-button style\u003d\"float: right\" *ngIf\u003d\"!isEditing\" (click)\u003d\"changeToEditMode()\"\u003eEdit\u003c/button\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"container\" *ngFor\u003d\"let dispute of issue.issueDisputes; index as i; trackBy: trackDisputeList\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"display: flex; align-items: center\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"question-mark\"\u003e?\u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"this.getItemTitleText(dispute.title)\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"dispute.description\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cmat-checkbox"},{"lineNumber":19,"author":{"gitId":"-"},"content":" style\u003d\"display: inline-block; width: 20%\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" [id]\u003d\"getTodoFormId(i)\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" [formControlName]\u003d\"getTodoFormId(i)\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" [disableControl]\u003d\"!isEditing\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" Done"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/mat-checkbox\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cmarkdown data\u003d\"### Tutor\u0027s Response: \"\u003e\u003c/markdown\u003e"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"dispute.tutorResponse\" *ngIf\u003d\"!isEditing\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003capp-comment-editor"},{"lineNumber":34,"author":{"gitId":"-"},"content":" [commentField]\u003d\"tutorResponseForm.get(getTutorResponseFormId(i))\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" [commentForm]\u003d\"tutorResponseForm\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" [id]\u003d\"getTutorResponseFormId(i)\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" [(isFormPending)]\u003d\"isFormPending\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" [(submitButtonText)]\u003d\"submitButtonText\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/app-comment-editor\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cmarkdown data\u003d\"-------------------\"\u003e\u003c/markdown\u003e \u003cbr /\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003cmat-divider\u003e\u003c/mat-divider\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"editor-actions\" *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":48,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isFormPending\""},{"lineNumber":52,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":53,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" (click)\u003d\"viewInGithub()\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" View Updated Response On Github"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":59,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" *ngIf\u003d\"!conflict\""},{"lineNumber":62,"author":{"gitId":"-"},"content":" [disabled]\u003d\"tutorResponseForm.invalid || isFormPending\""},{"lineNumber":63,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":64,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":69,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":71,"author":{"gitId":"-"},"content":" [disabled]\u003d\"tutorResponseForm.invalid || isFormPending\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":73,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":74,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":79,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isFormPending\""},{"lineNumber":82,"author":{"gitId":"-"},"content":" style\u003d\"margin-left: 10px\""},{"lineNumber":83,"author":{"gitId":"-"},"content":" *ngIf\u003d\"!this.isNewResponse()\""},{"lineNumber":84,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":85,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":86,"author":{"gitId":"-"},"content":" (click)\u003d\"cancelEditMode()\""},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" Cancel"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"NereusWB922":3,"-":90}},{"path":"src/app/shared/view-issue/team-response/team-response.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch3 class\u003d\"mat-title\"\u003eTeam\u0027s Response\u003c/h3\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"responseForm\" #myForm\u003d\"ngForm\" (ngSubmit)\u003d\"updateResponse(myForm)\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-comment\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-header\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cspan\u003e \u003cstrong\u003e Team \u003c/strong\u003e responded. \u003c/span\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton style\u003d\"float: right\" mat-button *ngIf\u003d\"canEditIssue() \u0026\u0026 !isEditing\" (click)\u003d\"changeToEditMode()\"\u003eEdit\u003c/button\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!isEditing\" class\u003d\"comment\"\u003e"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"issue.teamResponse\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003capp-comment-editor"},{"lineNumber":13,"author":{"gitId":"-"},"content":" [id]\u003d\"\u0027description\u0027\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" [commentField]\u003d\"this.responseForm.get(\u0027description\u0027)\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" [commentForm]\u003d\"this.responseForm\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [(isFormPending)]\u003d\"this.isSavePending\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" [(submitButtonText)]\u003d\"this.submitButtonText\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/app-comment-editor\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"editor-actions\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":22,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isSavePending\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":27,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" (click)\u003d\"viewChanges()\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" View Updated Response"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":33,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" [disabled]\u003d\"responseForm.invalid || isSavePending\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":38,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":43,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":44,"author":{"gitId":"-"},"content":" *ngIf\u003d\"!conflict\""},{"lineNumber":45,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":46,"author":{"gitId":"-"},"content":" [disabled]\u003d\"responseForm.invalid || isSavePending\""},{"lineNumber":47,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":48,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":53,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isSavePending\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":57,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":58,"author":{"gitId":"-"},"content":" (click)\u003d\"openCancelDialogIfModified()\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Cancel"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"NereusWB922":1,"-":64}},{"path":"src/app/shared/view-issue/tester-response/conflict-dialog/conflict-dialog.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv style\u003d\"display: flex; margin-bottom: 20px; align-items: center\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003ch1 mat-dialog-title style\u003d\"margin: 0\"\u003e{{ \u0027The content you are editing has changed\u0027 }}\u003c/h1\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-slide-toggle style\u003d\"display: inline-block; margin-left: 50px\" color\u003d\"primary\" [checked]\u003d\"showDiff\" (change)\u003d\"handleChangeShowDiff()\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" Show Difference"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003c/mat-slide-toggle\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cbutton mat-icon-button color\u003d\"default\" style\u003d\"margin: 0 0 0 auto\" (click)\u003d\"close()\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eclose\u003c/mat-icon\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003cdiv mat-dialog-content\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cmat-accordion [multi]\u003d\"true\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cmat-expansion-panel class\u003d\"full-width\" *ngFor\u003d\"let conflict of conflicts; index as i\" [expanded]\u003d\"panelOpenStates[i]\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cmat-expansion-panel-header\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cmat-panel-title class\u003d\"response-title\"\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"question-mark\"\u003e?\u003c/div\u003e"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"data.updatedResponses[i].getTitleInMarkDown()\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/mat-panel-title\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cmat-panel-description\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cmat-chip-list\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cmat-chip *ngIf\u003d\"data.outdatedResponses[i].compareTo(data.updatedResponses[i]) \u003d\u003d\u003d 0\" style\u003d\"margin-top: 10px\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" No Changes"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003c/mat-chip\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/mat-chip-list\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/mat-panel-description\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/mat-expansion-panel-header\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"data.updatedResponses[i].description\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cdiv"},{"lineNumber":31,"author":{"gitId":"-"},"content":" *ngIf\u003d\"data.updatedResponses[i].isDisagree() \u003d\u003d\u003d data.outdatedResponses[i].isDisagree() || !showDiff\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" style\u003d\"margin-bottom: 10px\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cmat-checkbox style\u003d\"display: inline-block; width: 20%\" [disabled]\u003d\"true\" [checked]\u003d\"data.updatedResponses[i].isDisagree()\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" I disagree"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/mat-checkbox\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!data.outdatedResponses[i].isDisagree() \u0026\u0026 data.updatedResponses[i].isDisagree() \u0026\u0026 showDiff\" class\u003d\"checkbox-changes\"\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003ci style\u003d\"color: green\" class\u003d\"material-icons-outlined\"\u003eadd_box\u003c/i\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cins style\u003d\"background: #d4fcbc; text-decoration: none\"\u003e I disagree \u003c/ins\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"data.outdatedResponses[i].isDisagree() \u0026\u0026 !data.updatedResponses[i].isDisagree() \u0026\u0026 showDiff\" class\u003d\"checkbox-changes\"\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003ci style\u003d\"color: red\" class\u003d\"material-icons-outlined\"\u003eindeterminate_check_box\u003c/i\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cdel style\u003d\"background: #fbb\"\u003eI disagree\u003c/del\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cmat-tab-group style\u003d\"margin-bottom: 20px\" class\u003d\"mat-elevation-z1\" animationDuration\u003d\"0ms\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cmat-tab label\u003d\"Markdown Text\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"tab-content\" *ngIf\u003d\"isReady\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"showDiff\" [innerHTML]\u003d\"diffHtmls[i]\"\u003e\u003c/div\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!showDiff\" [innerHTML]\u003d\"updatedHtmls[i]\"\u003e\u003c/div\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/mat-tab\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cmat-tab label\u003d\"Preview Updated Content\"\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"tab-content\"\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cmarkdown\u003e{{ conflict.updatedContent }}\u003c/markdown\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/mat-tab\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/mat-tab-group\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003c/mat-expansion-panel\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003c/mat-accordion\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"NereusWB922":2,"-":60}},{"path":"src/app/shared/view-issue/tester-response/tester-response.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch3 class\u003d\"mat-title\"\u003eTester\u0027s Response\u003c/h3\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003cform [formGroup]\u003d\"testerResponseForm\" (ngSubmit)\u003d\"submitTesterResponseForm()\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-comment\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"timeline-header\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"this.isNewResponse()\"\u003e Please verify the following item(s). \u003c/span\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"!this.isNewResponse()\"\u003e \u003cstrong\u003eTester\u003c/strong\u003e responded. \u003c/span\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cbutton mat-button style\u003d\"float: right\" *ngIf\u003d\"!isEditing\" (click)\u003d\"changeToEditMode()\"\u003eEdit\u003c/button\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"container\" *ngFor\u003d\"let response of issue.testerResponses; index as i; trackBy: trackDisagreeList\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cdiv style\u003d\"display: flex; align-items: center\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"question-mark\"\u003e?\u003c/div\u003e"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"response.getTitleInMarkDown()\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"response.description\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cmat-radio-group"},{"lineNumber":20,"author":{"gitId":"-"},"content":" style\u003d\"display: inline-block; width: 20%\""},{"lineNumber":21,"author":{"gitId":"-"},"content":" aria-label\u003d\"Select Agree or Disagree to Team\u0027s Response\""},{"lineNumber":22,"author":{"gitId":"-"},"content":" [disableControl]\u003d\"!isEditing\""},{"lineNumber":23,"author":{"gitId":"-"},"content":" [id]\u003d\"getDisagreeRadioFormId(i)\""},{"lineNumber":24,"author":{"gitId":"-"},"content":" [formControlName]\u003d\"getDisagreeRadioFormId(i)\""},{"lineNumber":25,"author":{"gitId":"-"},"content":" (change)\u003d\"handleChangeOfDisagreeRadioButton($event, i)\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cmat-radio-button [value]\u003d\"false\"\u003e I Agree \u003c/mat-radio-button\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cmat-radio-button [value]\u003d\"true\"\u003e I Disagree \u003c/mat-radio-button\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/mat-radio-group\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"testerResponseForm.get(getDisagreeRadioFormId(i)).value\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cp style\u003d\"font-weight: 500\"\u003eReason for Disagreement:\u003c/p\u003e"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" \u003cmarkdown [data]\u003d\"response.reasonForDisagreement\" *ngIf\u003d\"!isEditing\" disableInternalLink\u003e\u003c/markdown\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003capp-comment-editor"},{"lineNumber":38,"author":{"gitId":"-"},"content":" [commentField]\u003d\"testerResponseForm.get(getTesterResponseFormId(i))\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" [id]\u003d\"getTesterResponseFormId(i)\""},{"lineNumber":40,"author":{"gitId":"-"},"content":" [commentForm]\u003d\"testerResponseForm\""},{"lineNumber":41,"author":{"gitId":"-"},"content":" [(isFormPending)]\u003d\"isFormPending\""},{"lineNumber":42,"author":{"gitId":"-"},"content":" [(submitButtonText)]\u003d\"submitButtonText\""},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/app-comment-editor\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cbr /\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cmarkdown data\u003d\"-------------------\"\u003e\u003c/markdown\u003e \u003cbr /\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cmat-divider\u003e\u003c/mat-divider\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"editor-actions\" *ngIf\u003d\"isEditing\"\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":53,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":54,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":55,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":56,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isFormPending\""},{"lineNumber":57,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":58,"author":{"gitId":"-"},"content":" color\u003d\"primary\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" (click)\u003d\"viewChanges()\""},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" View Updated Response"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"submit\" [disabled]\u003d\"testerResponseForm.invalid || isFormPending\" mat-stroked-button color\u003d\"primary\" *ngIf\u003d\"!conflict\"\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":67,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":68,"author":{"gitId":"-"},"content":" type\u003d\"submit\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" [disabled]\u003d\"testerResponseForm.invalid || isFormPending\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" mat-raised-button"},{"lineNumber":71,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":72,"author":{"gitId":"-"},"content":" *ngIf\u003d\"conflict\""},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" {{ submitButtonText }}"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":77,"author":{"gitId":"-"},"content":" class\u003d\"editor-action\""},{"lineNumber":78,"author":{"gitId":"-"},"content":" type\u003d\"button\""},{"lineNumber":79,"author":{"gitId":"-"},"content":" [disabled]\u003d\"isFormPending\""},{"lineNumber":80,"author":{"gitId":"-"},"content":" *ngIf\u003d\"!this.isNewResponse()\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" mat-stroked-button"},{"lineNumber":82,"author":{"gitId":"-"},"content":" color\u003d\"warn\""},{"lineNumber":83,"author":{"gitId":"-"},"content":" (click)\u003d\"openCancelDialogIfModified()\""},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Cancel"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":"\u003c/form\u003e"}],"authorContributionMap":{"NereusWB922":3,"-":87}}] diff --git a/CATcher-org_CATcher_master/commits.json b/CATcher-org_CATcher_master/commits.json new file mode 100644 index 0000000..7b2956a --- /dev/null +++ b/CATcher-org_CATcher_master/commits.json @@ -0,0 +1 @@ +{"authorDailyContributionsMap":{"xenosf":[],"sopa301":[],"mingyuanc":[],"jingting1412":[],"KevinEyo1":[],"LamJiuFong":[],"yiwen101":[],"jonasongg":[],"domoberzin":[],"asdfghjkxd":[],"yuanxi1":[],"supermii2":[],"marquestye":[],"nknguyenhc":[{"date":"2024-01-25","commitResults":[{"hash":"b20b3ef240a8c4fe32f4e016da21d89dd173b6de","isMergeCommit":false,"messageTitle":"Fix broken duplicate link (#1233)","messageBody":"Fix the broken link of a duplicate issue\r\n\r\nCurrently, the user cannot open the link to a duplicate issue\r\nwhen opening an issue, as described in CATcher-org/CATcher#1228.\r\n\r\nThe links now work as expected.","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1}}}]},{"date":"2024-02-08","commitResults":[{"hash":"2c18b71969540c87e89050689e7bfd9b30654677","isMergeCommit":false,"messageTitle":"Set default branch to `main`","messageBody":"Previously, image uploads depend on the user\u0027s default branch.\r\nNow, we set the branch for image upload to be `main`. Images will \r\nbe uploaded to `main` as a result.\r\n\r\n---------\r\n\r\nCo-authored-by: Chee Hong \u003cc.h.wong2606@gmail.com\u003e","fileTypesAndContributionMap":{"ts":{"insertions":100,"deletions":2}}}]},{"date":"2024-02-12","commitResults":[{"hash":"a9d38dd71eb2ef0ad5cf3e750471437f6c8d8eb4","isMergeCommit":false,"messageTitle":"Preserve linebreaks (#1241)","messageBody":"With preserving linebreaks, subset list items are rendered as a list,\r\nand paragraph rendering is the same as Github.","fileTypesAndContributionMap":{"ts":{"insertions":1,"deletions":1}}}]}],"Arif-Khalid":[],"NereusWB922":[{"date":"2024-02-03","commitResults":[{"hash":"d4b5422a2a0c83a73956032f3791dd6835a25090","isMergeCommit":false,"messageTitle":"Fix uncaught errors when attempting to access an invalid route","messageBody":"There is an uncaught error when the users click on an invalid internal link in Markdown or enter an invalid link in browser.\r\n\r\nInternal links are unlikely to be used for bug reporting and are more likely to be invalid.\r\n\r\nLet\u0027s show an error toaster and stop the navigation when clicking on an internal link in Markdown. Also, redirect the users to the login page if the users enter invalid link in browser.","fileTypesAndContributionMap":{"html":{"insertions":11,"deletions":11},"ts":{"insertions":37,"deletions":2}}}]}],"dishenggg":[],"MadLamprey":[{"date":"2024-01-25","commitResults":[{"hash":"fe7be44f9ae19c5caabb0506cb631743b9e84bb9","isMergeCommit":false,"messageTitle":"Add whitespace validation (#1237)","messageBody":"* Add whitespace validation\r\n\r\n* Update whitespace validation for new issue\r\n\r\n* Update whitespace validation for title of new issues\r\n\r\n* Update whitespace validation for title of new issues\r\n\r\n* Move validators into core\r\n\r\n* Update import order\r\n\r\n---------\r\n\r\nCo-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":0},"ts":{"insertions":13,"deletions":1}}}]}],"Tim-Siu":[]},"authorFileTypeContributionMap":{"xenosf":{"js":0,"css":0,"html":0,"ts":0},"sopa301":{"js":0,"css":0,"html":0,"ts":0},"mingyuanc":{"js":0,"css":0,"html":0,"ts":0},"jingting1412":{"js":0,"css":0,"html":0,"ts":0},"KevinEyo1":{"js":0,"css":0,"html":0,"ts":0},"LamJiuFong":{"js":0,"css":0,"html":0,"ts":0},"yiwen101":{"js":0,"css":0,"html":0,"ts":0},"jonasongg":{"js":0,"css":0,"html":0,"ts":0},"domoberzin":{"js":0,"css":0,"html":0,"ts":0},"asdfghjkxd":{"js":0,"css":0,"html":0,"ts":0},"yuanxi1":{"js":0,"css":0,"html":0,"ts":0},"supermii2":{"js":0,"css":0,"html":0,"ts":0},"marquestye":{"js":0,"css":0,"html":0,"ts":0},"nknguyenhc":{"js":0,"css":0,"html":1,"ts":101},"Arif-Khalid":{"js":0,"css":0,"html":0,"ts":0},"NereusWB922":{"js":0,"css":0,"html":11,"ts":37},"dishenggg":{"js":0,"css":0,"html":0,"ts":0},"MadLamprey":{"js":0,"css":0,"html":1,"ts":13},"Tim-Siu":{"js":0,"css":0,"html":0,"ts":0}},"authorContributionVariance":{"xenosf":0.0,"sopa301":0.0,"mingyuanc":0.0,"jingting1412":0.0,"KevinEyo1":0.0,"LamJiuFong":0.0,"yiwen101":0.0,"jonasongg":0.0,"domoberzin":0.0,"asdfghjkxd":0.0,"yuanxi1":0.0,"supermii2":0.0,"marquestye":0.0,"nknguyenhc":138.65083,"Arif-Khalid":0.0,"NereusWB922":49.604263,"dishenggg":0.0,"MadLamprey":2.999453,"Tim-Siu":0.0},"authorDisplayNameMap":{"xenosf":"XENO..NONG","sopa301":"POON..RYAN","mingyuanc":"CHIN..YUAN","jingting1412":"WANG..TING","KevinEyo1":"EYO ..EVIN","LamJiuFong":"LAM ..FONG","yiwen101":"WANG..IWEN","jonasongg":"JONA.. WEI","domoberzin":"DOMI.. GIN","asdfghjkxd":"GEOR.. YAO","yuanxi1":"ZHU ..ANXI","supermii2":"ALVI..S NG","marquestye":"TYE ..QUES","nknguyenhc":"NGUY..UYEN","Arif-Khalid":"ARIF..ALID","NereusWB922":"NERE.. BIN","dishenggg":"YEO ..HENG","MadLamprey":"MISR..ITYA","Tim-Siu":"XU S..UYAO"}} diff --git a/CATcher-org_WATcher_main/authorship.json b/CATcher-org_WATcher_main/authorship.json new file mode 100644 index 0000000..9a9d7ed --- /dev/null +++ b/CATcher-org_WATcher_main/authorship.json @@ -0,0 +1 @@ +[{"path":"src/app/activity-dashboard/activity-dashboard.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".event-tables-wrapper {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" overflow-x: auto;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":4}},{"path":"src/app/activity-dashboard/activity-dashboard.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cmat-grid-list cols\u003d\"4\" rowHeight\u003d\"80px\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"grid-flush-left\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003ch1 class\u003d\"mat-headline\" style\u003d\"margin: 0px\"\u003eActivity\u003c/h1\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"fill\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eStart Date\u003c/mat-label\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cinput matInput [min]\u003d\"startMinDate\" [max]\u003d\"startMaxDate\" [matDatepicker]\u003d\"startPicker\" (dateChange)\u003d\"pickStartDate($event)\" /\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cmat-hint\u003eMM/DD/YYYY\u003c/mat-hint\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cmat-datepicker-toggle matSuffix [for]\u003d\"startPicker\"\u003e\u003c/mat-datepicker-toggle\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cmat-datepicker startView\u003d\"year\" #startPicker\u003e\u003c/mat-datepicker\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":""},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cmat-grid-tile\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"fill\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eEnd Date\u003c/mat-label\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cinput matInput [min]\u003d\"endMinDate\" [max]\u003d\"endMaxDate\" [matDatepicker]\u003d\"endPicker\" (dateChange)\u003d\"pickEndDate($event)\" /\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cmat-hint\u003eMM/DD/YYYY\u003c/mat-hint\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cmat-datepicker-toggle matSuffix [for]\u003d\"endPicker\"\u003e\u003c/mat-datepicker-toggle\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cmat-datepicker startView\u003d\"year\" #endPicker\u003e\u003c/mat-datepicker\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/mat-grid-tile\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/mat-grid-list\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/div\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":"\u003cdiv class\u003d\"event-tables-wrapper\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003capp-event-tables"},{"lineNumber":33,"author":{"gitId":"-"},"content":" *ngFor\u003d\"let assignee of assignees\""},{"lineNumber":34,"author":{"gitId":"-"},"content":" class\u003d\"issue-table\""},{"lineNumber":35,"author":{"gitId":"-"},"content":" [actor]\u003d\"assignee\""},{"lineNumber":36,"author":{"gitId":"-"},"content":" [columnsToDisplay]\u003d\"this.displayedColumns\""},{"lineNumber":37,"author":{"gitId":"-"},"content":" [expandedColumnsToDisplay]\u003d\"this.expandedColumns\""},{"lineNumber":38,"author":{"gitId":"-"},"content":" [actions]\u003d\"this.actionButtons\""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003e\u003c/app-event-tables\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"NereusWB922":1,"-":39}},{"path":"src/app/activity-dashboard/activity-dashboard.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Component, OnInit, QueryList, ViewChildren } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatDatepickerInputEvent } from \u0027@angular/material/datepicker\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import * as moment from \u0027moment\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../core/models/github-user.model\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubService } from \u0027../core/services/github.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../core/services/githubevent.service\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { EXPANDED_TABLE_COLUMNS, TABLE_COLUMNS } from \u0027./event-tables/event-tables-columns\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { ACTION_BUTTONS, EventTablesComponent } from \u0027./event-tables/event-tables.component\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":""},{"lineNumber":10,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":11,"author":{"gitId":"-"},"content":" selector: \u0027app-activity-dashboard\u0027,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" templateUrl: \u0027./activity-dashboard.component.html\u0027,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./activity-dashboard.component.css\u0027]"},{"lineNumber":14,"author":{"gitId":"-"},"content":"})"},{"lineNumber":15,"author":{"gitId":"-"},"content":"export class ActivityDashboardComponent implements OnInit {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" readonly displayedColumns \u003d [TABLE_COLUMNS.DATE_START, TABLE_COLUMNS.ISSUE_COUNT, TABLE_COLUMNS.PR_COUNT, TABLE_COLUMNS.COMMENT_COUNT];"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" readonly expandedColumns \u003d [EXPANDED_TABLE_COLUMNS.TITLE, EXPANDED_TABLE_COLUMNS.DATE];"},{"lineNumber":18,"author":{"gitId":"-"},"content":" readonly actionButtons: ACTION_BUTTONS[] \u003d [ACTION_BUTTONS.VIEW_IN_WEB];"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" startMinDate: Date;"},{"lineNumber":21,"author":{"gitId":"-"},"content":" startMaxDate \u003d moment().endOf(\u0027day\u0027).toDate();"},{"lineNumber":22,"author":{"gitId":"-"},"content":" endMinDate: Date;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" endMaxDate \u003d moment().endOf(\u0027day\u0027).toDate();"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":" assignees: GithubUser[];"},{"lineNumber":26,"author":{"gitId":"-"},"content":""},{"lineNumber":27,"author":{"gitId":"-"},"content":" @ViewChildren(EventTablesComponent) tables: QueryList\u003cEventTablesComponent\u003e;"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" constructor(private githubService: GithubService, private githubEventService: GithubEventService) {}"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.githubEventService.getEvents();"},{"lineNumber":33,"author":{"gitId":"-"},"content":" this.githubService.getUsersAssignable().subscribe((x) \u003d\u003e (this.assignees \u003d x));"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" pickStartDate(event: MatDatepickerInputEvent\u003cDate\u003e) {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.endMinDate \u003d event.value;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.tables.forEach((t) \u003d\u003e (t.githubEvents.start \u003d `${event.value}`));"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" pickEndDate(event: MatDatepickerInputEvent\u003cDate\u003e) {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.startMaxDate \u003d event.value;"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.tables.forEach((t) \u003d\u003e (t.githubEvents.end \u003d `${event.value}`));"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":1,"-":44}},{"path":"src/app/activity-dashboard/activity-dashboard.module.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { CommonModule } from \u0027@angular/common\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { NgModule } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { SharedModule } from \u0027../shared/shared.module\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { ActivityDashboardRoutingModule } from \u0027./activity-dashboard-routing.module\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { ActivityDashboardComponent } from \u0027./activity-dashboard.component\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { EventTablesModule } from \u0027./event-tables/event-tables.module\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { EventWeekDetailsComponent } from \u0027./event-week-details/event-week-details.component\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"@NgModule({"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" declarations: [ActivityDashboardComponent, EventWeekDetailsComponent],"},{"lineNumber":11,"author":{"gitId":"-"},"content":" imports: [CommonModule, SharedModule, ActivityDashboardRoutingModule, EventTablesModule]"},{"lineNumber":12,"author":{"gitId":"-"},"content":"})"},{"lineNumber":13,"author":{"gitId":"-"},"content":"export class ActivityDashboardModule {}"}],"authorContributionMap":{"NereusWB922":2,"-":11}},{"path":"src/app/activity-dashboard/event-tables/event-tables.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".table-container {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" margin: 10px;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" min-width: 400px;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":".actor-card {"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" padding: 10px;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" margin-bottom: 1px;"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":".actor-username {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" flex-grow: 1;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" font-size: 15px;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" margin: 0;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" text-align: center;"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" word-break: break-word;"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":".avatar-container {"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" margin-right: 10px;"},{"lineNumber":23,"author":{"gitId":"-"},"content":"}"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":".mat-table {"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /* flex-wrap: wrap; */"},{"lineNumber":27,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}"},{"lineNumber":29,"author":{"gitId":"-"},"content":""},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":".mat-cell {"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" justify-content: center;"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" text-align: center;"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" padding: 0;"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":".mat-header-cell {"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" justify-content: center;"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" text-align: center;"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" padding: 0;"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":".mat-header-row {"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" white-space: nowrap;"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":".example-element-row:hover {"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" border: 3px solid rgba(0, 0, 0, 0.514);"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" border-radius: 3px;"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" color: #210749;"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":".example-element-row td {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" border-bottom-width: 0;"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}"},{"lineNumber":59,"author":{"gitId":"-"},"content":""},{"lineNumber":60,"author":{"gitId":"-"},"content":".example-element-detail {"},{"lineNumber":61,"author":{"gitId":"-"},"content":" overflow: hidden;"},{"lineNumber":62,"author":{"gitId":"-"},"content":" display: flex;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" width: 100%;"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"/* Colour cells */"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":".white {"},{"lineNumber":69,"author":{"gitId":"-"},"content":" background-color: white;"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}"},{"lineNumber":71,"author":{"gitId":"-"},"content":""},{"lineNumber":72,"author":{"gitId":"-"},"content":".pale-green {"},{"lineNumber":73,"author":{"gitId":"-"},"content":" background-color: palegreen;"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}"},{"lineNumber":75,"author":{"gitId":"-"},"content":""},{"lineNumber":76,"author":{"gitId":"-"},"content":".green {"},{"lineNumber":77,"author":{"gitId":"-"},"content":" background-color: green;"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":".scrollable-container {"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" height: 53vh;"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" overflow: auto;"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" margin-bottom: 2px;"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" scrollbar-width: none;"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" position: relative;"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":".scrollable-container::-webkit-scrollbar {"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" display: none;"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":"/* Ref: https://css-scroll-shadows.vercel.app */"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":".scrollable-container::before {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" pointer-events: none;"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" content: \u0027\u0027;"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" position: absolute;"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" z-index: 2;"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" height: 6px;"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" width: 100%;"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" display: block;"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" background-image: linear-gradient(to bottom, white 66%, transparent);"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":".scrollable-container::after {"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" pointer-events: none;"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" content: \u0027\u0027;"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" position: sticky;"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" z-index: 2;"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" top: 100%;"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" height: 6px;"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" width: 100%;"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" display: block;"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" background-image: linear-gradient(to top, white 66%, transparent);"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":".scrollable-container-wrapper {"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" position: relative;"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":".scrollable-container-wrapper::before {"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" pointer-events: none;"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" content: \u0027\u0027;"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" position: absolute;"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" z-index: 1;"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" top: 0;"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" left: 0;"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" right: 0;"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" height: 5px;"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" background-image: radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":".scrollable-container-wrapper::after {"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" pointer-events: none;"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" content: \u0027\u0027;"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" position: absolute;"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" z-index: 1;"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" bottom: 0;"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" left: 0;"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" right: 0;"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" height: 5px;"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" background-image: radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.5), transparent);"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":105,"-":37}},{"path":"src/app/activity-dashboard/event-tables/event-tables.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"table-container\"\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card class\u003d\"actor-card\"\u003e"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" mat-card-avatar"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" *ngIf\u003d\"this.actor\""},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" class\u003d\"avatar-container\""},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" [ngStyle]\u003d\"{"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" background: \u0027url(\u0027 + this.actor.avatar_url + \u0027)\u0027,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" \u0027background-size\u0027: \u002740px\u0027"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" }\""},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" \u003e\u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-card-title class\u003d\"actor-username\"\u003e"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" {{ this.actor !\u003d\u003d undefined ? this.actor.login : \u0027Unknown\u0027 }}"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card-title\u003e"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-card\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"scrollable-container-wrapper\"\u003e"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" \u003cdiv class\u003d\"scrollable-container\"\u003e"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-table [dataSource]\u003d\"this.githubEvents\" matSort multiTemplateDataRows\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cng-container matColumnDef\u003d\"date_start\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cmat-header-cell *matHeaderCellDef mat-sort-header\u003e Date \u003c/mat-header-cell\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cmat-cell *matCellDef\u003d\"let element\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cspan (click)\u003d\"$event.stopPropagation()\" style\u003d\"cursor: default\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" {{ element.date_start }}"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/mat-cell\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/ng-container\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cng-container matColumnDef\u003d\"issue_count\"\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cmat-header-cell *matHeaderCellDef mat-sort-header\u003e Issue # \u003c/mat-header-cell\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cmat-cell *matCellDef\u003d\"let element\" [ngClass]\u003d\"colorCell(element.issue_count)\"\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cspan (click)\u003d\"$event.stopPropagation()\" style\u003d\"cursor: default\"\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {{ element.issue_count }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/mat-cell\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/ng-container\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cng-container matColumnDef\u003d\"pr_count\"\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cmat-header-cell *matHeaderCellDef mat-sort-header\u003e PR # \u003c/mat-header-cell\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cmat-cell *matCellDef\u003d\"let element\" [ngClass]\u003d\"colorCell(element.pr_count)\"\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cspan (click)\u003d\"$event.stopPropagation()\" style\u003d\"cursor: default\"\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" {{ element.pr_count }}"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/mat-cell\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/ng-container\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":""},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cng-container matColumnDef\u003d\"comment_count\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cmat-header-cell *matHeaderCellDef mat-sort-header\u003e Comment # \u003c/mat-header-cell\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cmat-cell *matCellDef\u003d\"let element\" [ngClass]\u003d\"colorCell(element.comment_count)\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cspan (click)\u003d\"$event.stopPropagation()\" style\u003d\"cursor: default\"\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" {{ element.comment_count }}"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/mat-cell\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/ng-container\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-header-row *matHeaderRowDef\u003d\"this.columnsToDisplay\"\u003e\u003c/mat-header-row\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cmat-row"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" *matRowDef\u003d\"let eventWeek; columns: this.columnsToDisplay\""},{"lineNumber":59,"author":{"gitId":"-"},"content":" class\u003d\"example-element-row\""},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" (click)\u003d\"openDialog(eventWeek)\""},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003e\u003c/mat-row\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/mat-table\u003e"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" \u003c/div\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cmat-card *ngIf\u003d\"this.githubEvents.isLoading$ | async\" style\u003d\"display: flex; justify-content: center; align-items: center\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e\u003c/mat-progress-spinner\u003e"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/mat-card\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003cmat-paginator [pageSize]\u003d\"20\" [pageSizeOptions]\u003d\"[10, 20, 50]\"\u003e\u003c/mat-paginator\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"NereusWB922":22,"-":48}},{"path":"src/app/activity-dashboard/event-tables/event-tables.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { animate, state, style, transition, trigger } from \u0027@angular/animations\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { AfterViewInit, Component, Input, OnInit, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { MatDialog } from \u0027@angular/material/dialog\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { MatSort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../../core/models/github-user.model\u0027;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import { ErrorHandlingService } from \u0027../../core/services/error-handling.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { GithubEventService } from \u0027../../core/services/githubevent.service\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../core/services/logging.service\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { EventWeekDetailsComponent } from \u0027../event-week-details/event-week-details.component\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import { EventWeek } from \u0027../event-week.model\u0027;"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import { GithubEventDataTable } from \u0027./GithubEventDataTable\u0027;"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import { NoEventsError } from \u0027./no-events-error.model\u0027;"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"export enum ACTION_BUTTONS {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" VIEW_IN_WEB,"},{"lineNumber":17,"author":{"gitId":"-"},"content":" COLLAPSE"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":21,"author":{"gitId":"-"},"content":" selector: \u0027app-event-tables\u0027,"},{"lineNumber":22,"author":{"gitId":"-"},"content":" templateUrl: \u0027./event-tables.component.html\u0027,"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./event-tables.component.css\u0027]"},{"lineNumber":24,"author":{"gitId":"-"},"content":"})"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Angular Table Expandable Rows"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * ref: https://material.angular.io/components/table/examples#table-expandable-rows"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */"},{"lineNumber":30,"author":{"gitId":"-"},"content":"export class EventTablesComponent implements OnInit, AfterViewInit {"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Input() columnsToDisplay: string[];"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Input() expandedColumnsToDisplay: string[];"},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Input() actions: ACTION_BUTTONS[];"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Input() actor?: GithubUser \u003d undefined;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Input() filters?: any \u003d undefined;"},{"lineNumber":36,"author":{"gitId":"-"},"content":""},{"lineNumber":37,"author":{"gitId":"-"},"content":" @ViewChild(MatSort, { static: true }) sort: MatSort;"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" githubEvents: GithubEventDataTable;"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"-"},"content":" public readonly action_buttons \u003d ACTION_BUTTONS;"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" constructor("},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" public githubEventService: GithubEventService,"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" public dialog: MatDialog,"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" private logger: LoggingService,"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" private errorHandling: ErrorHandlingService"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" ) {}"},{"lineNumber":50,"author":{"gitId":"-"},"content":""},{"lineNumber":51,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.githubEvents \u003d new GithubEventDataTable(this.githubEventService, this.logger, this.sort, this.paginator, this.actor, this.filters);"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }"},{"lineNumber":54,"author":{"gitId":"-"},"content":""},{"lineNumber":55,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":56,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":57,"author":{"gitId":"-"},"content":" this.githubEvents.loadEvents();"},{"lineNumber":58,"author":{"gitId":"-"},"content":" });"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"-"},"content":" reload() {"},{"lineNumber":62,"author":{"gitId":"-"},"content":" this.githubEvents.loadEvents();"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" /**"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * Formats the title text to account for those that contain long words."},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @param title - Title of Event that is to be displayed in the Table Row."},{"lineNumber":68,"author":{"gitId":"-"},"content":" */"},{"lineNumber":69,"author":{"gitId":"-"},"content":" fitTitleText(title: string): string {"},{"lineNumber":70,"author":{"gitId":"-"},"content":" // Arbitrary Length of Characters beyond which an overflow occurs."},{"lineNumber":71,"author":{"gitId":"-"},"content":" const MAX_WORD_LENGTH \u003d 43;"},{"lineNumber":72,"author":{"gitId":"-"},"content":" const SPLITTER_TEXT \u003d \u0027 \u0027;"},{"lineNumber":73,"author":{"gitId":"-"},"content":" const ELLIPSES \u003d \u0027...\u0027;"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":" return title"},{"lineNumber":76,"author":{"gitId":"-"},"content":" .split(SPLITTER_TEXT)"},{"lineNumber":77,"author":{"gitId":"-"},"content":" .map((word) \u003d\u003e {"},{"lineNumber":78,"author":{"gitId":"-"},"content":" if (word.length \u003e MAX_WORD_LENGTH) {"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return word.substring(0, MAX_WORD_LENGTH - 5).concat(ELLIPSES);"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return word;"},{"lineNumber":82,"author":{"gitId":"-"},"content":" })"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .join(SPLITTER_TEXT);"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }"},{"lineNumber":85,"author":{"gitId":"-"},"content":""},{"lineNumber":86,"author":{"gitId":"-"},"content":" /** Not implemented yet. */"},{"lineNumber":87,"author":{"gitId":"-"},"content":" viewEventInBrowser(id: number, event: Event) {"},{"lineNumber":88,"author":{"gitId":"-"},"content":" this.logger.info(`EventTablesComponent: Opening Event ${id} on Github`);"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // window.open(\u0027https://github.com/\u0027, \u0027_blank\u0027);"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }"},{"lineNumber":91,"author":{"gitId":"-"},"content":""},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" /** Opens dialog to show the event details of the selected week. */"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" openDialog(eventWeek: EventWeek) {"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" if (eventWeek.events.length \u003c\u003d 0) {"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" this.errorHandling.handleError(new NoEventsError());"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" return;"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.dialog.open(EventWeekDetailsComponent, {"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" data: {"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" eventWeek,"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" expandedColumnsToDisplay: this.expandedColumnsToDisplay"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }"},{"lineNumber":105,"author":{"gitId":"-"},"content":""},{"lineNumber":106,"author":{"gitId":"-"},"content":" /** Returns color string of cell. Shade darkens with magnitude of number. */"},{"lineNumber":107,"author":{"gitId":"-"},"content":" colorCell(count: number) {"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (count \u003d\u003d\u003d 0) {"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return \u0027white\u0027;"},{"lineNumber":110,"author":{"gitId":"-"},"content":" } else if (count \u003e 0 \u0026\u0026 count \u003c\u003d 5) {"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return \u0027pale-green\u0027;"},{"lineNumber":112,"author":{"gitId":"-"},"content":" } else if (count \u003e 6) {"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return \u0027green\u0027;"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }"},{"lineNumber":116,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":21,"-":95}},{"path":"src/app/activity-dashboard/event-tables/no-events-error.model.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"export class NoEventsError extends Error {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" constructor() {"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" super(\u0027No events found for this week.\u0027);"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" Object.setPrototypeOf(this, NoEventsError.prototype);"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" }"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":6}},{"path":"src/app/activity-dashboard/event-week-details/event-week-details.component.css","fileType":"css","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":".mat-cell {"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":" white-space: nowrap;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" justify-content: center;"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" text-align: center;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" padding: 0;"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":".mat-header-cell {"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" display: flex;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" align-items: center;"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" justify-content: center;"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" text-align: center;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" padding: 0;"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":".mat-dialog-content {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" min-width: 500px;"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":20}},{"path":"src/app/activity-dashboard/event-week-details/event-week-details.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"\u003ch2 mat-dialog-title\u003eEvent Week Details\u003c/h2\u003e"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"\u003cmat-dialog-content class\u003d\"mat-typography\"\u003e"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-table [dataSource]\u003d\"data.eventWeek.events\"\u003e"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" \u003cng-container matColumnDef\u003d\"{{ expandableColumn }}\" *ngFor\u003d\"let expandableColumn of data.expandedColumnsToDisplay\"\u003e"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-header-cell *matHeaderCellDef\u003e{{ expandableColumn }}\u003c/mat-header-cell\u003e"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-cell *matCellDef\u003d\"let property\"\u003e"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" {{ property[expandableColumn] }}"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-cell\u003e"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" \u003c/ng-container\u003e"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-header-row *matHeaderRowDef\u003d\"data.expandedColumnsToDisplay\"\u003e\u003c/mat-header-row\u003e"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" \u003cmat-row *matRowDef\u003d\"let property; columns: data.expandedColumnsToDisplay\"\u003e\u003c/mat-row\u003e"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" \u003c/mat-table\u003e"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"\u003c/mat-dialog-content\u003e"}],"authorContributionMap":{"NereusWB922":13}},{"path":"src/app/activity-dashboard/event-week-details/event-week-details.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"import { Component, Inject } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { MAT_DIALOG_DATA } from \u0027@angular/material/dialog\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { EventWeek } from \u0027../event-week.model\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"export interface DialogData {"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" eventWeek: EventWeek;"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" expandedColumnsToDisplay: string[];"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"}"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"@Component({"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" selector: \u0027app-event-week-detail\u0027,"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" templateUrl: \u0027./event-week-details.component.html\u0027,"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" styleUrls: [\u0027./event-week-details.component.css\u0027]"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"})"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"export class EventWeekDetailsComponent {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" constructor(@Inject(MAT_DIALOG_DATA) public data: DialogData) {}"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"}"}],"authorContributionMap":{"NereusWB922":17}},{"path":"src/app/issues-viewer/card-view/card-view.component.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"Arif-Khalid"},"content":"import { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from \u0027@angular/core\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { MatSort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { Observable } from \u0027rxjs\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { GithubUser } from \u0027../../core/models/github-user.model\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../core/models/issue.model\u0027;"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../core/services/issue.service\u0027;"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import { FilterableComponent, FilterableSource } from \u0027../../shared/issue-tables/filterableTypes\u0027;"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import { IssuesDataTable } from \u0027../../shared/issue-tables/IssuesDataTable\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"@Component({"},{"lineNumber":12,"author":{"gitId":"-"},"content":" selector: \u0027app-card-view\u0027,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" templateUrl: \u0027./card-view.component.html\u0027,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" styleUrls: [\u0027./card-view.component.css\u0027]"},{"lineNumber":15,"author":{"gitId":"-"},"content":"})"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Displays issues as Cards."},{"lineNumber":19,"author":{"gitId":"-"},"content":" */"},{"lineNumber":20,"author":{"gitId":"-"},"content":"export class CardViewComponent implements OnInit, AfterViewInit, OnDestroy, FilterableComponent {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Input() headers: string[];"},{"lineNumber":22,"author":{"gitId":"-"},"content":" @Input() assignee?: GithubUser \u003d undefined;"},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Input() filters?: any \u003d undefined;"},{"lineNumber":24,"author":{"gitId":"-"},"content":" @Input() sort?: MatSort \u003d undefined;"},{"lineNumber":25,"author":{"gitId":"-"},"content":""},{"lineNumber":26,"author":{"gitId":"-"},"content":" @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" issues: IssuesDataTable;"},{"lineNumber":29,"author":{"gitId":"-"},"content":" issues$: Observable\u003cIssue[]\u003e;"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"Arif-Khalid"},"content":" isLoading \u003d true;"},{"lineNumber":32,"author":{"gitId":"Arif-Khalid"},"content":" issueLength \u003d 0;"},{"lineNumber":33,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":34,"author":{"gitId":"Arif-Khalid"},"content":" constructor(public element: ElementRef, public issueService: IssueService) {}"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"-"},"content":" ngOnInit() {"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.issues \u003d new IssuesDataTable(this.issueService, this.sort, this.paginator, this.headers, this.assignee, this.filters);"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }"},{"lineNumber":39,"author":{"gitId":"-"},"content":""},{"lineNumber":40,"author":{"gitId":"-"},"content":" ngAfterViewInit(): void {"},{"lineNumber":41,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.issues.loadIssues();"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.issues$ \u003d this.issues.connect();"},{"lineNumber":44,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":45,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when issues change"},{"lineNumber":46,"author":{"gitId":"Arif-Khalid"},"content":" this.issues$.subscribe((issues) \u003d\u003e {"},{"lineNumber":47,"author":{"gitId":"Arif-Khalid"},"content":" this.issueLength \u003d issues.length;"},{"lineNumber":48,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":49,"author":{"gitId":"Arif-Khalid"},"content":""},{"lineNumber":50,"author":{"gitId":"Arif-Khalid"},"content":" // Emit event when loading state changes"},{"lineNumber":51,"author":{"gitId":"Arif-Khalid"},"content":" this.issues.isLoading$.subscribe((isLoadingUpdate) \u003d\u003e {"},{"lineNumber":52,"author":{"gitId":"Arif-Khalid"},"content":" this.isLoading \u003d isLoadingUpdate;"},{"lineNumber":53,"author":{"gitId":"Arif-Khalid"},"content":" });"},{"lineNumber":54,"author":{"gitId":"-"},"content":" });"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }"},{"lineNumber":56,"author":{"gitId":"-"},"content":""},{"lineNumber":57,"author":{"gitId":"-"},"content":" ngOnDestroy(): void {"},{"lineNumber":58,"author":{"gitId":"-"},"content":" setTimeout(() \u003d\u003e {"},{"lineNumber":59,"author":{"gitId":"-"},"content":" this.issues.disconnect();"},{"lineNumber":60,"author":{"gitId":"-"},"content":" });"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }"},{"lineNumber":62,"author":{"gitId":"-"},"content":""},{"lineNumber":63,"author":{"gitId":"-"},"content":" retrieveFilterable(): FilterableSource {"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return this.issues;"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"Arif-Khalid":15,"-":51}},{"path":"src/app/issues-viewer/issues-viewer.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"loading-spinner\" *ngIf\u003d\"this.phaseService.isChangingRepo | async; else elseBlock\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cmat-progress-spinner color\u003d\"primary\" mode\u003d\"indeterminate\" diameter\u003d\"50\" strokeWidth\u003d\"5\"\u003e \u003c/mat-progress-spinner\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":""},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cng-template #elseBlock\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003capp-filter-bar [views$]\u003d\"views\" #filterbar\u003e\u003c/app-filter-bar\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"wrapper\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003capp-card-view"},{"lineNumber":11,"author":{"gitId":"-"},"content":" *ngFor\u003d\"let assignee of assignees\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" class\u003d\"issue-table\""},{"lineNumber":13,"author":{"gitId":"Arif-Khalid"},"content":" #card"},{"lineNumber":14,"author":{"gitId":"Arif-Khalid"},"content":" [ngStyle]\u003d\"{ display: card.isLoading || card.issueLength \u003e 0 ? \u0027initial\u0027 : \u0027none\u0027 }\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" [assignee]\u003d\"assignee\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [headers]\u003d\"this.displayedColumns\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" [sort]\u003d\"filterbar.matSort\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003e\u003c/app-card-view\u003e"},{"lineNumber":19,"author":{"gitId":"Arif-Khalid"},"content":" \u003capp-card-view"},{"lineNumber":20,"author":{"gitId":"Arif-Khalid"},"content":" class\u003d\"issue-table\""},{"lineNumber":21,"author":{"gitId":"Arif-Khalid"},"content":" #card"},{"lineNumber":22,"author":{"gitId":"Arif-Khalid"},"content":" [ngStyle]\u003d\"{ display: card.isLoading || card.issueLength \u003e 0 ? \u0027initial\u0027 : \u0027none\u0027 }\""},{"lineNumber":23,"author":{"gitId":"Arif-Khalid"},"content":" [headers]\u003d\"this.displayedColumns\""},{"lineNumber":24,"author":{"gitId":"Arif-Khalid"},"content":" [sort]\u003d\"filterbar.matSort\""},{"lineNumber":25,"author":{"gitId":"Arif-Khalid"},"content":" \u003e"},{"lineNumber":26,"author":{"gitId":"Arif-Khalid"},"content":" \u003c/app-card-view\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"Arif-Khalid":10,"-":19}},{"path":"src/app/shared/filter-bar/label-filter-bar/label-filter-bar.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cbutton mat-stroked-button *ngIf\u003d\"loaded\" [matMenuTriggerFor]\u003d\"menu\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" {{ selectedLabelNames.length \u003d\u003d 0 ? \u0027All\u0027 : selectedLabelNames.length }} Selected | {{ hiddenLabelNames?.size || 0 }} Hidden ▾"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cbutton mat-stroked-button disabled *ngIf\u003d\"!loaded\" color\u003d\"accent\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cmat-progress-bar mode\u003d\"query\"\u003e\u003c/mat-progress-bar\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003c/button\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":""},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003cmat-menu #menu\u003d\"matMenu\" class\u003d\"popupmenu\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cdiv (click)\u003d\"$event.stopPropagation()\" class\u003d\"popup-container\"\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cmat-form-field appearance\u003d\"standard\" class\u003d\"input-field\"\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cmat-label\u003eLabels\u003c/mat-label\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cinput #input matInput placeholder\u003d\"Find labels\" /\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003c/mat-form-field\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":""},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cbutton mat-button (click)\u003d\"removeAllSelection()\"\u003eRemove all\u003c/button\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!hasLabels(input.value)\" class\u003d\"no-labels\"\u003eNo Labels Found!\u003c/div\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scroll-container-wrapper\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"scroll-container\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cmat-selection-list [(ngModel)]\u003d\"selectedLabelNames\" (selectionChange)\u003d\"updateSelection()\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cmat-list-option"},{"lineNumber":24,"author":{"gitId":"-"},"content":" #option"},{"lineNumber":25,"author":{"gitId":"-"},"content":" *ngFor\u003d\"let label of this.labels$ | async\""},{"lineNumber":26,"author":{"gitId":"nknguyenhc"},"content":" [value]\u003d\"label.formattedName\""},{"lineNumber":27,"author":{"gitId":"nknguyenhc"},"content":" [selected]\u003d\"selectedLabelNames.includes(label.formattedName)\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" class\u003d\"list-option\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" [class.hidden]\u003d\"filter(input.value, label.name)\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"flexbox-container\"\u003e"},{"lineNumber":32,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton"},{"lineNumber":33,"author":{"gitId":"nknguyenhc"},"content":" mat-icon-button"},{"lineNumber":34,"author":{"gitId":"nknguyenhc"},"content":" *ngIf\u003d\"!hiddenLabelNames.has(label.formattedName)\""},{"lineNumber":35,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"hide(label.formattedName); $event.stopPropagation()\""},{"lineNumber":36,"author":{"gitId":"nknguyenhc"},"content":" \u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility\u003c/mat-icon\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":39,"author":{"gitId":"nknguyenhc"},"content":" \u003cbutton"},{"lineNumber":40,"author":{"gitId":"nknguyenhc"},"content":" mat-icon-button"},{"lineNumber":41,"author":{"gitId":"nknguyenhc"},"content":" *ngIf\u003d\"hiddenLabelNames.has(label.formattedName)\""},{"lineNumber":42,"author":{"gitId":"nknguyenhc"},"content":" (click)\u003d\"show(label.formattedName); $event.stopPropagation()\""},{"lineNumber":43,"author":{"gitId":"nknguyenhc"},"content":" \u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003evisibility_off\u003c/mat-icon\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cmat-chip"},{"lineNumber":47,"author":{"gitId":"-"},"content":" [ngStyle]\u003d\"labelService.setLabelStyle(label.color)\""},{"lineNumber":48,"author":{"gitId":"nknguyenhc"},"content":" [disabled]\u003d\"hiddenLabelNames.has(label.formattedName)\""},{"lineNumber":49,"author":{"gitId":"-"},"content":" (click)\u003d\"simulateClick(option); $event.stopPropagation()\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" {{ label.formattedName }}"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003c/mat-chip\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/mat-list-option\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/mat-selection-list\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003c/mat-menu\u003e"}],"authorContributionMap":{"nknguyenhc":13,"-":46}},{"path":"src/app/shared/layout/header.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cmat-toolbar color\u003d\"primary\" style\u003d\"position: sticky; position: -webkit-sticky; top: 0; z-index: 1000\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":3,"author":{"gitId":"-"},"content":" *ngIf\u003d\"isBackButtonShown()\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" mat-icon-button"},{"lineNumber":5,"author":{"gitId":"-"},"content":" class\u003d\"mat-toolbar mat-primary back-button\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" style\u003d\"transform: scale(0.9)\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" (click)\u003d\"goBack()\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003earrow_back_ios\u003c/mat-icon\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":11,"author":{"gitId":"MadLamprey"},"content":" \u003ca"},{"lineNumber":12,"author":{"gitId":"MadLamprey"},"content":" class\u003d\"mat-toolbar mat-primary\""},{"lineNumber":13,"author":{"gitId":"MadLamprey"},"content":" style\u003d\"text-decoration: none\""},{"lineNumber":14,"author":{"gitId":"MadLamprey"},"content":" [routerLink]\u003d\"phaseService.isRepoSet() ? phaseService.currentPhase : null\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003eWATcher v{{ this.getVersion() }}\u003c/a"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"phase-descriptor\" *ngIf\u003d\"auth.isAuthenticated()\" style\u003d\"margin-left: 10px\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" ({{ this.getPhaseDescription(phaseService.currentPhase) }})"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 this.phaseService.sessionData.sessionRepo.length \u003e 1\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cbutton mat-button [matMenuTriggerFor]\u003d\"menu\"\u003e\u003cmat-icon style\u003d\"color: white\"\u003eexpand_more\u003c/mat-icon\u003e\u003c/button\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cmat-menu #menu\u003d\"matMenu\"\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":25,"author":{"gitId":"-"},"content":" mat-menu-item"},{"lineNumber":26,"author":{"gitId":"-"},"content":" *ngFor\u003d\"let sessionRepo of this.phaseService.sessionData.sessionRepo\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" (click)\u003d\"this.routeToSelectedPhase(sessionRepo.phase)\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cspan\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cmat-icon [ngStyle]\u003d\"{ color: \u0027green\u0027, visibility: this.phaseService.currentPhase \u003d\u003d\u003d sessionRepo.phase ? \u0027visible\u0027 : \u0027hidden\u0027 }\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003edone\u003c/mat-icon"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" {{ this.getPhaseDescription(sessionRepo.phase) }}"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/mat-menu\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c!-- everything else --\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"flex: 1 1 auto\"\u003e\u003c/span\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":""},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 phaseService.isRepoSet()\"\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"phase-descriptor\" style\u003d\"margin-left: 10px\"\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":" {{ this.currentRepo || \u0027No Repository Set\u0027 }}"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":48,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":49,"author":{"gitId":"-"},"content":" matTooltip\u003d\"{{ phaseService.isRepoSet() ? \u0027Change Repository\u0027 : \u0027Select Repository\u0027 }}\""},{"lineNumber":50,"author":{"gitId":"-"},"content":" (click)\u003d\"this.openChangeRepoDialog()\""},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eedit\u003c/mat-icon\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"flex: 1 1 auto\"\u003e\u003c/span\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":""},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Download WATcher Log\" (click)\u003d\"this.exportLogFile()\"\u003e"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003ereceipt\u003c/mat-icon\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003cbutton mat-button matTooltip\u003d\"Give feedback about WATcher\" (click)\u003d\"openIssueTracker()\"\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003email\u003c/mat-icon\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":""},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":66,"author":{"gitId":"-"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 phaseService.isRepoSet() \u0026\u0026 isOpenUrlButtonShown()\""},{"lineNumber":67,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":68,"author":{"gitId":"-"},"content":" matTooltip\u003d\"View current page on GitHub\""},{"lineNumber":69,"author":{"gitId":"-"},"content":" (click)\u003d\"viewBrowser()\""},{"lineNumber":70,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003eopen_in_new\u003c/mat-icon\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":""},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 (this.isLoading$ | async); else notLoading\"\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":77,"author":{"gitId":"-"},"content":""},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cng-template #notLoading\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003cbutton"},{"lineNumber":80,"author":{"gitId":"-"},"content":" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 phaseService.isRepoSet() \u0026\u0026 isReloadButtonShown() \u0026\u0026 !this.isReloadButtonDisabled\""},{"lineNumber":81,"author":{"gitId":"-"},"content":" mat-button"},{"lineNumber":82,"author":{"gitId":"-"},"content":" matTooltip\u003d\"Synchronize with Github data\""},{"lineNumber":83,"author":{"gitId":"-"},"content":" (click)\u003d\"reload()\""},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Sync"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cmat-icon\u003erefresh\u003c/mat-icon\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"sync-spinner\" *ngIf\u003d\"auth.isAuthenticated() \u0026\u0026 isReloadButtonShown() \u0026\u0026 this.isReloadButtonDisabled\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003cspan style\u003d\"font-size: 14px; margin-right: 7px\"\u003eSync\u003c/span\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003cmat-spinner class\u003d\"white-spinner\" [diameter]\u003d\"20\"\u003e\u003c/mat-spinner\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003c/ng-template\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":""},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003cbutton *ngIf\u003d\"auth.isAuthenticated()\" mat-button matTooltip\u003d\"Log out\" (click)\u003d\"openLogOutDialog(); $event.stopPropagation()\"\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" ({{ userService.currentUser.loginId }})"},{"lineNumber":96,"author":{"gitId":"-"},"content":" \u003cmat-icon style\u003d\"margin-left: 2px\"\u003eexit_to_app\u003c/mat-icon\u003e"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003c/mat-toolbar\u003e"}],"authorContributionMap":{"MadLamprey":4,"-":94}},{"path":"tests/app/auth/login/login.component.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { ComponentFixture, TestBed, waitForAsync } from \u0027@angular/core/testing\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { LoginComponent } from \u0027../../../../src/app/auth/login/login.component\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { AuthService, AuthState } from \u0027../../../../src/app/core/services/auth.service\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { ErrorHandlingService } from \u0027../../../../src/app/core/services/error-handling.service\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { LoggingService } from \u0027../../../../src/app/core/services/logging.service\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"-"},"content":"describe(\u0027LoginComponent\u0027, () \u003d\u003e {"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" let authServiceSpy: jasmine.SpyObj\u003cAuthService\u003e;"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" let errorHandlingServiceSpy: jasmine.SpyObj\u003cErrorHandlingService\u003e;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" let loggingServiceSpy: jasmine.SpyObj\u003cLoggingService\u003e;"},{"lineNumber":11,"author":{"gitId":"-"},"content":" let component: LoginComponent;"},{"lineNumber":12,"author":{"gitId":"-"},"content":" let fixture: ComponentFixture\u003cLoginComponent\u003e;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":" beforeEach("},{"lineNumber":15,"author":{"gitId":"-"},"content":" waitForAsync(() \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" authServiceSpy \u003d jasmine.createSpyObj\u003cAuthService\u003e(\u0027AuthService\u0027, [\u0027startOAuthProcess\u0027, \u0027changeAuthState\u0027]);"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" loggingServiceSpy \u003d jasmine.createSpyObj\u003cLoggingService\u003e(\u0027LoggingService\u0027, [\u0027info\u0027]);"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" errorHandlingServiceSpy \u003d jasmine.createSpyObj\u003cErrorHandlingService\u003e(\u0027ErrorHandlingService\u0027, [\u0027handleError\u0027]);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" TestBed.configureTestingModule({"},{"lineNumber":21,"author":{"gitId":"-"},"content":" providers: ["},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" { provide: AuthService, useValue: authServiceSpy },"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" { provide: LoggingService, useValue: loggingServiceSpy },"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" { provide: ErrorHandlingService, useValue: errorHandlingServiceSpy }"},{"lineNumber":25,"author":{"gitId":"-"},"content":" ],"},{"lineNumber":26,"author":{"gitId":"-"},"content":" declarations: [LoginComponent]"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }).compileComponents();"},{"lineNumber":28,"author":{"gitId":"-"},"content":""},{"lineNumber":29,"author":{"gitId":"-"},"content":" fixture \u003d TestBed.createComponent(LoginComponent);"},{"lineNumber":30,"author":{"gitId":"-"},"content":" component \u003d fixture.componentInstance;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" fixture.detectChanges();"},{"lineNumber":32,"author":{"gitId":"-"},"content":" })"},{"lineNumber":33,"author":{"gitId":"-"},"content":" );"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" it(\u0027should create\u0027, () \u003d\u003e {"},{"lineNumber":36,"author":{"gitId":"-"},"content":" expect(component).toBeTruthy();"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" it(\u0027startPublicOnlyLoginProcess should call startLoginProcess with false\u0027, () \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" spyOn(component, \u0027startLoginProcess\u0027);"},{"lineNumber":41,"author":{"gitId":"-"},"content":""},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" component.startPublicOnlyLoginProcess();"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" expect(component.startLoginProcess).toHaveBeenCalledWith(false);"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" it(\u0027startIncludePrivateLoginProcess should call startLoginProcess with true\u0027, () \u003d\u003e {"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" spyOn(component, \u0027startLoginProcess\u0027);"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" component.startIncludePrivateLoginProcess();"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" expect(component.startLoginProcess).toHaveBeenCalledWith(true);"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should call authService.startOAuthProcess on startLoginProcess\u0027, () \u003d\u003e {"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" const hasPrivateConsent \u003d false;"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" component.startLoginProcess(hasPrivateConsent);"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" expect(authServiceSpy.startOAuthProcess).toHaveBeenCalledWith(hasPrivateConsent);"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info).toHaveBeenCalledWith(\u0027LoginComponent: Beginning login process\u0027);"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should call error handling methods when error is thrown\u0027, () \u003d\u003e {"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" const hasPrivateConsent \u003d false;"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" const errorMessage \u003d \u0027Error!\u0027;"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" const error: Error \u003d new Error(errorMessage);"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" authServiceSpy.startOAuthProcess.and.throwError(error);"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" component.startLoginProcess(hasPrivateConsent);"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" expect(authServiceSpy.changeAuthState).toHaveBeenCalledWith(AuthState.NotAuthenticated);"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" expect(errorHandlingServiceSpy.handleError).toHaveBeenCalledWith(error);"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" expect(loggingServiceSpy.info.calls.allArgs()).toEqual(["},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" [\u0027LoginComponent: Beginning login process\u0027],"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" [`LoginComponent: Login process failed with an error: ${error}`]"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" ]);"},{"lineNumber":79,"author":{"gitId":"-"},"content":" });"},{"lineNumber":80,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":49,"-":31}},{"path":"tests/app/core/models/session-model.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { of } from \u0027rxjs\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Phase } from \u0027../../../../src/app/core/models/phase.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" assertSessionDataIntegrity,"},{"lineNumber":5,"author":{"gitId":"-"},"content":" NO_VALID_OPEN_PHASES,"},{"lineNumber":6,"author":{"gitId":"-"},"content":" OPENED_PHASE_REPO_UNDEFINED,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" SESSION_DATA_MISSING_FIELDS,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" SESSION_DATA_UNAVAILABLE"},{"lineNumber":9,"author":{"gitId":"-"},"content":"} from \u0027../../../../src/app/core/models/session.model\u0027;"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import { VALID_SESSION_DATA, WATCHER_REPO } from \u0027../../../constants/session.constants\u0027;"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"-"},"content":"describe(\u0027Session Model\u0027, () \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" describe(\u0027assertSessionDataIntegrity()\u0027, () \u003d\u003e {"},{"lineNumber":14,"author":{"gitId":"-"},"content":" it(\u0027should throw error on unavailable session\u0027, () \u003d\u003e {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" of(undefined)"},{"lineNumber":16,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":17,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":18,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":19,"author":{"gitId":"-"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(SESSION_DATA_UNAVAILABLE))"},{"lineNumber":20,"author":{"gitId":"-"},"content":" });"},{"lineNumber":21,"author":{"gitId":"-"},"content":" });"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error on session data with invalid session\u0027, () \u003d\u003e {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: null })"},{"lineNumber":25,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":26,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":27,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(SESSION_DATA_MISSING_FIELDS))"},{"lineNumber":29,"author":{"gitId":"-"},"content":" });"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [] })"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" .subscribe({"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(SESSION_DATA_MISSING_FIELDS))"},{"lineNumber":35,"author":{"gitId":"-"},"content":" });"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: \u0027repo\u0027 })"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":38,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":39,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(SESSION_DATA_MISSING_FIELDS))"},{"lineNumber":41,"author":{"gitId":"-"},"content":" });"},{"lineNumber":42,"author":{"gitId":"-"},"content":" });"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error on session with invalid phases\u0027, () \u003d\u003e {"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ phase: \u0027invalidPhase\u0027 as Phase, repos: [WATCHER_REPO] }] })"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":48,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":49,"author":{"gitId":"-"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(NO_VALID_OPEN_PHASES))"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":" });"},{"lineNumber":52,"author":{"gitId":"-"},"content":""},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should throw error on session data with invalid repo\u0027, () \u003d\u003e {"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ phase: Phase.issuesViewer, repo: undefined }] })"},{"lineNumber":55,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":56,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":57,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":58,"author":{"gitId":"-"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_PHASE_REPO_UNDEFINED))"},{"lineNumber":59,"author":{"gitId":"-"},"content":" });"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ phase: Phase.issuesViewer, repo: null }] })"},{"lineNumber":61,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":63,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":64,"author":{"gitId":"-"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_PHASE_REPO_UNDEFINED))"},{"lineNumber":65,"author":{"gitId":"-"},"content":" });"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ phase: Phase.issuesViewer, repo: \u0027\u0027 }] })"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":68,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":69,"author":{"gitId":"-"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":70,"author":{"gitId":"-"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_PHASE_REPO_UNDEFINED))"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" of({ sessionRepo: [{ phase: Phase.issuesViewer, repo: [] }] })"},{"lineNumber":73,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":74,"author":{"gitId":"-"},"content":" .subscribe({"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" next: () \u003d\u003e fail(),"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" error: (err) \u003d\u003e expect(err).toEqual(new Error(OPENED_PHASE_REPO_UNDEFINED))"},{"lineNumber":77,"author":{"gitId":"-"},"content":" });"},{"lineNumber":78,"author":{"gitId":"-"},"content":" });"},{"lineNumber":79,"author":{"gitId":"-"},"content":""},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should pass for valid session data\u0027, () \u003d\u003e {"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" of(VALID_SESSION_DATA)"},{"lineNumber":82,"author":{"gitId":"-"},"content":" .pipe(assertSessionDataIntegrity())"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" .subscribe((el) \u003d\u003e expect(el).toEqual(VALID_SESSION_DATA));"},{"lineNumber":84,"author":{"gitId":"-"},"content":" });"},{"lineNumber":85,"author":{"gitId":"-"},"content":" });"},{"lineNumber":86,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":25,"-":61}},{"path":"tests/app/shared/issue-tables/issue-paginator.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { MatPaginator } from \u0027@angular/material/paginator\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../../../src/app/core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { paginateData } from \u0027../../../../src/app/shared/issue-tables/issue-paginator\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":5,"author":{"gitId":"-"},"content":" ISSUE_WITH_ASSIGNEES,"},{"lineNumber":6,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":7,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY"},{"lineNumber":9,"author":{"gitId":"-"},"content":"} from \u0027../../../constants/githubissue.constants\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"describe(\u0027issue-paginator\u0027, () \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" describe(\u0027paginateData()\u0027, () \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"-"},"content":" let dataSet_7: Issue[];"},{"lineNumber":14,"author":{"gitId":"-"},"content":" let paginator: MatPaginator;"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" const mediumSeverityIssueWithResponse: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" const mediumSeverityIssueWithAssigneee: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" const lowSeverityFeatureFlawIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY);"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" const highSeverityDocumentationBugIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY);"},{"lineNumber":19,"author":{"gitId":"-"},"content":""},{"lineNumber":20,"author":{"gitId":"-"},"content":" beforeEach(() \u003d\u003e {"},{"lineNumber":21,"author":{"gitId":"-"},"content":" dataSet_7 \u003d ["},{"lineNumber":22,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithResponse,"},{"lineNumber":23,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithAssigneee,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" lowSeverityFeatureFlawIssue,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithResponse,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithAssigneee,"},{"lineNumber":27,"author":{"gitId":"-"},"content":" lowSeverityFeatureFlawIssue,"},{"lineNumber":28,"author":{"gitId":"-"},"content":" highSeverityDocumentationBugIssue"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":30,"author":{"gitId":"-"},"content":" paginator \u003d { pageSize: 3 } as MatPaginator;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" });"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" it(\u0027should set the length of paginator to the length of data\u0027, () \u003d\u003e {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" paginateData(paginator, dataSet_7);"},{"lineNumber":35,"author":{"gitId":"-"},"content":" expect(paginator.length).toEqual(7);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" });"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":" it(\u0027should return list of issues according to page index\u0027, () \u003d\u003e {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" paginator.pageIndex \u003d 0;"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" // Returns issues index 0 to 2"},{"lineNumber":42,"author":{"gitId":"-"},"content":" const returnedList \u003d paginateData(paginator, dataSet_7);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" expect(returnedList).toEqual([mediumSeverityIssueWithResponse, mediumSeverityIssueWithAssigneee, lowSeverityFeatureFlawIssue]);"},{"lineNumber":44,"author":{"gitId":"-"},"content":" });"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" it(\u0027should return list of issues in the previous page if there are no issues on the current page\u0027, () \u003d\u003e {"},{"lineNumber":47,"author":{"gitId":"-"},"content":" paginator.pageIndex \u003d 3;"},{"lineNumber":48,"author":{"gitId":"-"},"content":""},{"lineNumber":49,"author":{"gitId":"-"},"content":" // Returns issues index 6 on page 2"},{"lineNumber":50,"author":{"gitId":"-"},"content":" const returnedList \u003d paginateData(paginator, dataSet_7);"},{"lineNumber":51,"author":{"gitId":"-"},"content":" expect(returnedList).toEqual([highSeverityDocumentationBugIssue]);"},{"lineNumber":52,"author":{"gitId":"-"},"content":" });"},{"lineNumber":53,"author":{"gitId":"-"},"content":" });"},{"lineNumber":54,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":4,"-":50}},{"path":"tests/app/shared/issue-tables/issue-sorter.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { MatSort } from \u0027@angular/material/sort\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../../../src/app/core/models/issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { getSortedData } from \u0027../../../../src/app/shared/issue-tables/issue-sorter\u0027;"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import {"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" ISSUE_UPDATED_EARLIER,"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" ISSUE_UPDATED_LATER,"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_ASSIGNEES,"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"} from \u0027../../../constants/githubissue.constants\u0027;"},{"lineNumber":10,"author":{"gitId":"-"},"content":""},{"lineNumber":11,"author":{"gitId":"-"},"content":"describe(\u0027issuer-sorter\u0027, () \u003d\u003e {"},{"lineNumber":12,"author":{"gitId":"-"},"content":" describe(\u0027getSortedData()\u0027, () \u003d\u003e {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" const dummyIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" const otherDummyIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":15,"author":{"gitId":"-"},"content":" const issuesList: Issue[] \u003d [dummyIssue, otherDummyIssue];"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" const issueUpdatedEarlier: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_UPDATED_EARLIER);"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" const issueUpdatedLater: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_UPDATED_LATER);"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const issuesWithDifferentUpdatedDate: Issue[] \u003d [issueUpdatedEarlier, issueUpdatedLater];"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":" const matSort: MatSort \u003d new MatSort();"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" it(\u0027should return the same data if sort.active is not set\u0027, () \u003d\u003e {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" const sortedData \u003d getSortedData(matSort, issuesList);"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" expect(sortedData).toEqual(issuesList);"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" });"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":" it(\u0027sorts issues based on their assignees correctly\u0027, () \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027assignees\u0027;"},{"lineNumber":30,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":31,"author":{"gitId":"-"},"content":" const sortedIssuesByAssigneesAsc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":32,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByAssigneesAsc, dummyIssue, otherDummyIssue);"},{"lineNumber":33,"author":{"gitId":"-"},"content":""},{"lineNumber":34,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":35,"author":{"gitId":"-"},"content":" const sortedIssuesByAssigneesDesc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByAssigneesDesc, otherDummyIssue, dummyIssue);"},{"lineNumber":37,"author":{"gitId":"-"},"content":" });"},{"lineNumber":38,"author":{"gitId":"-"},"content":""},{"lineNumber":39,"author":{"gitId":"-"},"content":" it(\u0027sorts issues based on their string fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":40,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027title\u0027;"},{"lineNumber":41,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":42,"author":{"gitId":"-"},"content":" const sortedIssuesByTitleAsc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleAsc, dummyIssue, otherDummyIssue);"},{"lineNumber":44,"author":{"gitId":"-"},"content":""},{"lineNumber":45,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":46,"author":{"gitId":"-"},"content":" const sortedIssuesByTitleDesc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuesByTitleDesc, otherDummyIssue, dummyIssue);"},{"lineNumber":48,"author":{"gitId":"-"},"content":" });"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their id fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" matSort.active \u003d \u0027id\u0027;"},{"lineNumber":52,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":53,"author":{"gitId":"-"},"content":" const sortedIssuedByIdAsc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdAsc, otherDummyIssue, dummyIssue);"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":57,"author":{"gitId":"-"},"content":" const sortedIssuedByIdDesc \u003d getSortedData(matSort, issuesList);"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertOrder(sortedIssuedByIdDesc, dummyIssue, otherDummyIssue);"},{"lineNumber":59,"author":{"gitId":"-"},"content":" });"},{"lineNumber":60,"author":{"gitId":"-"},"content":""},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" it(\u0027sorts issues based on their updated date fields correctly\u0027, () \u003d\u003e {"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" matSort.active \u003d \u0027date\u0027;"},{"lineNumber":63,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027asc\u0027;"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateAsc \u003d getSortedData(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateAsc, issueUpdatedEarlier, issueUpdatedLater);"},{"lineNumber":67,"author":{"gitId":"-"},"content":""},{"lineNumber":68,"author":{"gitId":"-"},"content":" matSort.direction \u003d \u0027desc\u0027;"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" const sortedIssuedByDateDesc \u003d getSortedData(matSort, issuesWithDifferentUpdatedDate);"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" assertOrder(sortedIssuedByDateDesc, issueUpdatedLater, issueUpdatedEarlier);"},{"lineNumber":71,"author":{"gitId":"-"},"content":" });"},{"lineNumber":72,"author":{"gitId":"-"},"content":" });"},{"lineNumber":73,"author":{"gitId":"-"},"content":"});"},{"lineNumber":74,"author":{"gitId":"-"},"content":""},{"lineNumber":75,"author":{"gitId":"-"},"content":"/**"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * This helper method helps to check if the sorted issues are in their"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * correct order based on the variable arguments provided."},{"lineNumber":78,"author":{"gitId":"-"},"content":" */"},{"lineNumber":79,"author":{"gitId":"-"},"content":"function assertOrder(sortedIssues: Issue[], ...expectedSortedIssues: Issue[]) {"},{"lineNumber":80,"author":{"gitId":"-"},"content":" for (let i \u003d 0; i \u003c sortedIssues.length; i++) {"},{"lineNumber":81,"author":{"gitId":"-"},"content":" expect(sortedIssues[i].id).toBe(expectedSortedIssues[i].id);"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}"}],"authorContributionMap":{"NereusWB922":25,"-":58}},{"path":"tests/app/shared/issue-tables/search-filter.spec.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Issue } from \u0027../../../../src/app/core/models/issue.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { IssueService } from \u0027../../../../src/app/core/services/issue.service\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { TABLE_COLUMNS } from \u0027../../../../src/app/shared/issue-tables/issue-tables-columns\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { applySearchFilter } from \u0027../../../../src/app/shared/issue-tables/search-filter\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { USER_ANUBHAV } from \u0027../../../constants/data.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" ISSUE_WITH_ASSIGNEES,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION,"},{"lineNumber":9,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY"},{"lineNumber":11,"author":{"gitId":"-"},"content":"} from \u0027../../../constants/githubissue.constants\u0027;"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import { GITHUB_LABEL_FEATURE_FLAW } from \u0027../../../constants/githublabel.constants\u0027;"},{"lineNumber":13,"author":{"gitId":"-"},"content":""},{"lineNumber":14,"author":{"gitId":"-"},"content":"describe(\u0027search-filter\u0027, () \u003d\u003e {"},{"lineNumber":15,"author":{"gitId":"-"},"content":" describe(\u0027applySearchFilter()\u0027, () \u003d\u003e {"},{"lineNumber":16,"author":{"gitId":"-"},"content":" let searchKey: string;"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" const mediumSeverityIssueWithResponse: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION);"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" const mediumSeverityIssueWithAssigneee: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_ASSIGNEES);"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" const lowSeverityFeatureFlawIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY);"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" const highSeverityDocumentationBugIssue: Issue \u003d Issue.createPhaseBugReportingIssue(ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY);"},{"lineNumber":21,"author":{"gitId":"-"},"content":""},{"lineNumber":22,"author":{"gitId":"-"},"content":" const issuesList: Issue[] \u003d ["},{"lineNumber":23,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithResponse,"},{"lineNumber":24,"author":{"gitId":"-"},"content":" mediumSeverityIssueWithAssigneee,"},{"lineNumber":25,"author":{"gitId":"-"},"content":" lowSeverityFeatureFlawIssue,"},{"lineNumber":26,"author":{"gitId":"-"},"content":" highSeverityDocumentationBugIssue"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ];"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" const displayedColumns: string[] \u003d [TABLE_COLUMNS.ID, TABLE_COLUMNS.TITLE, TABLE_COLUMNS.ASSIGNEE, TABLE_COLUMNS.LABEL];"},{"lineNumber":29,"author":{"gitId":"-"},"content":" const issueService: IssueService \u003d new IssueService(null, null, null);"},{"lineNumber":30,"author":{"gitId":"-"},"content":""},{"lineNumber":31,"author":{"gitId":"-"},"content":" it(\u0027can filter for issues which are assigned to a specific user\u0027, () \u003d\u003e {"},{"lineNumber":32,"author":{"gitId":"-"},"content":" searchKey \u003d USER_ANUBHAV.loginId;"},{"lineNumber":33,"author":{"gitId":"-"},"content":" expect(applySearchFilter(searchKey, displayedColumns, issueService, issuesList)).toEqual([mediumSeverityIssueWithAssigneee]);"},{"lineNumber":34,"author":{"gitId":"-"},"content":" });"},{"lineNumber":35,"author":{"gitId":"-"},"content":""},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" it(\u0027can filter for issues using label\u0027, () \u003d\u003e {"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" searchKey \u003d GITHUB_LABEL_FEATURE_FLAW.name;"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" expect(applySearchFilter(searchKey, displayedColumns, issueService, issuesList)).toEqual([lowSeverityFeatureFlawIssue]);"},{"lineNumber":39,"author":{"gitId":"-"},"content":" });"},{"lineNumber":40,"author":{"gitId":"-"},"content":""},{"lineNumber":41,"author":{"gitId":"-"},"content":" it(\u0027can filter for issues that contain the search key in any other column\u0027, () \u003d\u003e {"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // Search by id of issue"},{"lineNumber":43,"author":{"gitId":"-"},"content":" searchKey \u003d mediumSeverityIssueWithResponse.id.toString();"},{"lineNumber":44,"author":{"gitId":"-"},"content":" expect(applySearchFilter(searchKey, displayedColumns, issueService, issuesList)).toEqual([mediumSeverityIssueWithResponse]);"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" // Search by title of issue"},{"lineNumber":47,"author":{"gitId":"-"},"content":" searchKey \u003d mediumSeverityIssueWithAssigneee.title;"},{"lineNumber":48,"author":{"gitId":"-"},"content":" expect(applySearchFilter(searchKey, displayedColumns, issueService, issuesList)).toEqual([mediumSeverityIssueWithAssigneee]);"},{"lineNumber":49,"author":{"gitId":"-"},"content":" });"},{"lineNumber":50,"author":{"gitId":"-"},"content":" });"},{"lineNumber":51,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":9,"-":42}},{"path":"tests/constants/githubissue.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { IssueState, IssueStateReason } from \u0027../../graphql/graphql-types\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":"import { GithubIssue } from \u0027../../src/app/core/models/github/github-issue.model\u0027;"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import { GithubLabel } from \u0027../../src/app/core/models/github/github-label.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import { USER_ANUBHAV, USER_SHUMING } from \u0027./data.constants\u0027;"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import { EMPTY_TEAM_RESPONSE, PENDING_TUTOR_MODERATION } from \u0027./githubcomment.constants\u0027;"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import {"},{"lineNumber":7,"author":{"gitId":"-"},"content":" GITHUB_LABEL_DOCUMENTATION_BUG,"},{"lineNumber":8,"author":{"gitId":"-"},"content":" GITHUB_LABEL_FEATURE_FLAW,"},{"lineNumber":9,"author":{"gitId":"-"},"content":" GITHUB_LABEL_FUNCTIONALITY_BUG,"},{"lineNumber":10,"author":{"gitId":"-"},"content":" GITHUB_LABEL_HIGH_SEVERITY,"},{"lineNumber":11,"author":{"gitId":"-"},"content":" GITHUB_LABEL_LOW_SEVERITY,"},{"lineNumber":12,"author":{"gitId":"-"},"content":" GITHUB_LABEL_MEDIUM_SEVERITY,"},{"lineNumber":13,"author":{"gitId":"-"},"content":" GITHUB_LABEL_TEAM_LABEL,"},{"lineNumber":14,"author":{"gitId":"-"},"content":" GITHUB_LABEL_TUTORIAL_LABEL"},{"lineNumber":15,"author":{"gitId":"-"},"content":"} from \u0027./githublabel.constants\u0027;"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"-"},"content":"const randomId: () \u003d\u003e string \u003d () \u003d\u003e {"},{"lineNumber":18,"author":{"gitId":"-"},"content":" return Math.floor(Math.random() * 1000000000).toString();"},{"lineNumber":19,"author":{"gitId":"-"},"content":"};"},{"lineNumber":20,"author":{"gitId":"-"},"content":""},{"lineNumber":21,"author":{"gitId":"-"},"content":"const randomIssueNumber: () \u003d\u003e number \u003d () \u003d\u003e {"},{"lineNumber":22,"author":{"gitId":"-"},"content":" return Math.round(Math.random() * 1000);"},{"lineNumber":23,"author":{"gitId":"-"},"content":"};"},{"lineNumber":24,"author":{"gitId":"-"},"content":""},{"lineNumber":25,"author":{"gitId":"-"},"content":"const randomISODate: (startDate?: Date, endDate?: Date) \u003d\u003e string \u003d ("},{"lineNumber":26,"author":{"gitId":"-"},"content":" startDate: Date \u003d new Date(2020, 1, 1),"},{"lineNumber":27,"author":{"gitId":"-"},"content":" endDate: Date \u003d new Date()"},{"lineNumber":28,"author":{"gitId":"-"},"content":") \u003d\u003e {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" return new Date(startDate.getTime() + Math.random() * (startDate.getTime() - endDate.getTime())).toISOString();"},{"lineNumber":30,"author":{"gitId":"-"},"content":"};"},{"lineNumber":31,"author":{"gitId":"-"},"content":""},{"lineNumber":32,"author":{"gitId":"-"},"content":"const USER_ANUBHAV_DETAILS \u003d {"},{"lineNumber":33,"author":{"gitId":"-"},"content":" login: USER_ANUBHAV.loginId,"},{"lineNumber":34,"author":{"gitId":"-"},"content":" avatar_url: \u0027https://avatars1.githubusercontent.com/u/35621759?v\u003d4\u0027,"},{"lineNumber":35,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/users/anubh-v\u0027"},{"lineNumber":36,"author":{"gitId":"-"},"content":"};"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"const USER_ANUBHAV_ASSIGNEE_DETAILS \u003d {"},{"lineNumber":39,"author":{"gitId":"-"},"content":" login: USER_ANUBHAV.loginId,"},{"lineNumber":40,"author":{"gitId":"-"},"content":" id: 35621759,"},{"lineNumber":41,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/users/anubh-v\u0027"},{"lineNumber":42,"author":{"gitId":"-"},"content":"};"},{"lineNumber":43,"author":{"gitId":"-"},"content":""},{"lineNumber":44,"author":{"gitId":"-"},"content":"const USER_SHUMING_DETAILS \u003d {"},{"lineNumber":45,"author":{"gitId":"-"},"content":" login: USER_SHUMING.loginId,"},{"lineNumber":46,"author":{"gitId":"-"},"content":" avatar_url: \u0027https://avatars0.githubusercontent.com/u/43642522?v\u003d4\u0027,"},{"lineNumber":47,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/users/geshuming\u0027"},{"lineNumber":48,"author":{"gitId":"-"},"content":"};"},{"lineNumber":49,"author":{"gitId":"-"},"content":""},{"lineNumber":50,"author":{"gitId":"-"},"content":"const USER_SHUMING_ASSIGNEE_DETAILS \u003d {"},{"lineNumber":51,"author":{"gitId":"-"},"content":" login: \u0027geshuming\u0027,"},{"lineNumber":52,"author":{"gitId":"-"},"content":" id: 43642522,"},{"lineNumber":53,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/users/geshuming\u0027"},{"lineNumber":54,"author":{"gitId":"-"},"content":"};"},{"lineNumber":55,"author":{"gitId":"-"},"content":""},{"lineNumber":56,"author":{"gitId":"-"},"content":"const ISSUE_BODY \u003d"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u0027# Issue Description\\n{original issue description}\\n\u0027 +"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \"# Team\u0027s Response\\n{team\u0027s response}\\n # Disputes\\n\\n\" +"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \"## :question: Issue Type\\n\\n### Team says:\\r\\n{the team\u0027s action that is being disputed}\\r\\n\\r\\n\" +"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \"### Tester says:\\r\\n{tester\u0027s objection}\\n\\n-------------------\\n## :question: Issue Severity\\n\\n\" +"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \"### Team says:\\r\\n{the team\u0027s action that is being disputed}\\r\\n\\r\\n\" +"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \"### Tester says:\\r\\n{tester\u0027s objection}\\n\\n-------------------\\n## :question: Not Related Question\\n\\n\" +"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \"### Team says:\\r\\n{the team\u0027s action that is being disputed}\\r\\n\\r\\n\" +"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \"### Tester says:\\r\\n{tester\u0027s objection}\\n\\n-------------------\\n\\n\";"},{"lineNumber":65,"author":{"gitId":"-"},"content":""},{"lineNumber":66,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION \u003d new GithubIssue({"},{"lineNumber":67,"author":{"gitId":"-"},"content":" id: \u0027574085971\u0027,"},{"lineNumber":68,"author":{"gitId":"-"},"content":" number: 92,"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":70,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":71,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":72,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":73,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":74,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":75,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":76,"author":{"gitId":"-"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":77,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":78,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/92\u0027,"},{"lineNumber":79,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":80,"author":{"gitId":"-"},"content":"});"},{"lineNumber":81,"author":{"gitId":"-"},"content":""},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_UPDATED_EARLIER \u003d new GithubIssue({"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" id: \u0027000000001\u0027,"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" number: 1,"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-09-02T16:19:02Z\u0027,"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-09-03T13:37:32Z\u0027,"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/93\u0027,"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":"export const ISSUE_UPDATED_LATER \u003d new GithubIssue({"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" id: \u0027000000002\u0027,"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" number: 2,"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" assignees: [],"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" comments: [],"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" body: \u0027\u0027,"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" created_at: \u00272020-10-02T16:19:02Z\u0027,"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" state: IssueState.Open,"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" title: \u0027App starts to lag when given large amount of input\u0027,"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" updated_at: \u00272020-10-22T13:37:32Z\u0027,"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/94\u0027,"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":"});"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":""},{"lineNumber":114,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_LOW_SEVERITY \u003d new GithubIssue({"},{"lineNumber":115,"author":{"gitId":"-"},"content":" id: \u0027384830567\u0027,"},{"lineNumber":116,"author":{"gitId":"-"},"content":" number: 130,"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":118,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":119,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":120,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-02T16:19:02Z\u0027,"},{"lineNumber":121,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_LOW_SEVERITY],"},{"lineNumber":122,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":123,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":124,"author":{"gitId":"-"},"content":" title: \u0027App is sometimes slow\u0027,"},{"lineNumber":125,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-13T13:37:32Z\u0027,"},{"lineNumber":126,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":127,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":128,"author":{"gitId":"-"},"content":"});"},{"lineNumber":129,"author":{"gitId":"-"},"content":""},{"lineNumber":130,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY \u003d new GithubIssue({"},{"lineNumber":131,"author":{"gitId":"-"},"content":" id: \u0027573957398\u0027,"},{"lineNumber":132,"author":{"gitId":"-"},"content":" number: 32,"},{"lineNumber":133,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":134,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":135,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":136,"author":{"gitId":"-"},"content":" created_at: \u00272010-03-12T19:12:02Z\u0027,"},{"lineNumber":137,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":138,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":139,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":140,"author":{"gitId":"-"},"content":" title: \u0027Too many typos\u0027,"},{"lineNumber":141,"author":{"gitId":"-"},"content":" updated_at: \u00272012-03-12T19:12:02Z\u0027,"},{"lineNumber":142,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":143,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":144,"author":{"gitId":"-"},"content":"});"},{"lineNumber":145,"author":{"gitId":"-"},"content":""},{"lineNumber":146,"author":{"gitId":"-"},"content":"export const DUPLICATED_ISSUE_WITH_EMPTY_DESCRIPTION_HIGH_SEVERITY \u003d new GithubIssue({"},{"lineNumber":147,"author":{"gitId":"-"},"content":" id: \u0027573957399\u0027,"},{"lineNumber":148,"author":{"gitId":"-"},"content":" number: 33,"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":150,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":151,"author":{"gitId":"-"},"content":" body: \u0027\u0027,"},{"lineNumber":152,"author":{"gitId":"-"},"content":" created_at: \u00272010-04-12T19:12:02Z\u0027,"},{"lineNumber":153,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":154,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":155,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":156,"author":{"gitId":"-"},"content":" title: \u0027Too many typos 2\u0027,"},{"lineNumber":157,"author":{"gitId":"-"},"content":" updated_at: \u00272012-04-12T19:12:02Z\u0027,"},{"lineNumber":158,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/130\u0027,"},{"lineNumber":159,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":160,"author":{"gitId":"-"},"content":"});"},{"lineNumber":161,"author":{"gitId":"-"},"content":""},{"lineNumber":162,"author":{"gitId":"-"},"content":"export const ISSUE_WITH_ASSIGNEES \u003d new GithubIssue({"},{"lineNumber":163,"author":{"gitId":"-"},"content":" id: \u0027551732011\u0027,"},{"lineNumber":164,"author":{"gitId":"-"},"content":" number: 91,"},{"lineNumber":165,"author":{"gitId":"-"},"content":" assignees: [USER_ANUBHAV_ASSIGNEE_DETAILS],"},{"lineNumber":166,"author":{"gitId":"-"},"content":" body: \u0027Screen freezes every few minutes\u0027,"},{"lineNumber":167,"author":{"gitId":"-"},"content":" created_at: \u00272020-01-18T07:01:45Z\u0027,"},{"lineNumber":168,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":169,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":170,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":171,"author":{"gitId":"-"},"content":" title: \u0027Screen freezes\u0027,"},{"lineNumber":172,"author":{"gitId":"-"},"content":" updated_at: \u00272020-03-02T12:50:02Z\u0027,"},{"lineNumber":173,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/91\u0027,"},{"lineNumber":174,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS,"},{"lineNumber":175,"author":{"gitId":"-"},"content":" comments: [EMPTY_TEAM_RESPONSE]"},{"lineNumber":176,"author":{"gitId":"-"},"content":"});"},{"lineNumber":177,"author":{"gitId":"-"},"content":""},{"lineNumber":178,"author":{"gitId":"-"},"content":"export const generateIssueWithRandomData: () \u003d\u003e GithubIssue \u003d () \u003d\u003e {"},{"lineNumber":179,"author":{"gitId":"-"},"content":" const created_and_updated_date: string \u003d randomISODate();"},{"lineNumber":180,"author":{"gitId":"-"},"content":" const issueNumber: number \u003d randomIssueNumber();"},{"lineNumber":181,"author":{"gitId":"-"},"content":" const severityLabels: GithubLabel[] \u003d [GITHUB_LABEL_LOW_SEVERITY, GITHUB_LABEL_MEDIUM_SEVERITY, GITHUB_LABEL_HIGH_SEVERITY];"},{"lineNumber":182,"author":{"gitId":"-"},"content":" const typeLabels: GithubLabel[] \u003d [GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_DOCUMENTATION_BUG];"},{"lineNumber":183,"author":{"gitId":"-"},"content":" return new GithubIssue({"},{"lineNumber":184,"author":{"gitId":"-"},"content":" id: randomId(),"},{"lineNumber":185,"author":{"gitId":"-"},"content":" number: issueNumber,"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assignees: [],"},{"lineNumber":187,"author":{"gitId":"-"},"content":" comments: [],"},{"lineNumber":188,"author":{"gitId":"-"},"content":" body: `Issue No.: ${issueNumber}\\nSample Content.`,"},{"lineNumber":189,"author":{"gitId":"-"},"content":" created_at: created_and_updated_date,"},{"lineNumber":190,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, typeLabels[issueNumber % 3], severityLabels[issueNumber % 3]],"},{"lineNumber":191,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":192,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":193,"author":{"gitId":"-"},"content":" title: `Random Issue: ${issueNumber}`,"},{"lineNumber":194,"author":{"gitId":"-"},"content":" updated_at: created_and_updated_date,"},{"lineNumber":195,"author":{"gitId":"-"},"content":" url: `https://api.github.com/repos/CATcher-org/pe-results/issues/${issueNumber}`,"},{"lineNumber":196,"author":{"gitId":"-"},"content":" user: USER_ANUBHAV_DETAILS"},{"lineNumber":197,"author":{"gitId":"-"},"content":" });"},{"lineNumber":198,"author":{"gitId":"-"},"content":"};"},{"lineNumber":199,"author":{"gitId":"-"},"content":""},{"lineNumber":200,"author":{"gitId":"-"},"content":"export const ISSUE_PENDING_MODERATION \u003d new GithubIssue({"},{"lineNumber":201,"author":{"gitId":"-"},"content":" id: \u0027574674360\u0027,"},{"lineNumber":202,"author":{"gitId":"-"},"content":" number: 26,"},{"lineNumber":203,"author":{"gitId":"-"},"content":" assignees: [USER_SHUMING_ASSIGNEE_DETAILS],"},{"lineNumber":204,"author":{"gitId":"-"},"content":" body: ISSUE_BODY,"},{"lineNumber":205,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-03T13:38:32Z\u0027,"},{"lineNumber":206,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FUNCTIONALITY_BUG, GITHUB_LABEL_MEDIUM_SEVERITY],"},{"lineNumber":207,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":208,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":209,"author":{"gitId":"-"},"content":" title: \u0027Basic Issue, Three Disputes, Unsure\u0027,"},{"lineNumber":210,"author":{"gitId":"-"},"content":" updated_at: \u00272020-08-15T06:39:40Z\u0027,"},{"lineNumber":211,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/26\u0027,"},{"lineNumber":212,"author":{"gitId":"-"},"content":" user: USER_SHUMING_DETAILS,"},{"lineNumber":213,"author":{"gitId":"-"},"content":" comments: [PENDING_TUTOR_MODERATION]"},{"lineNumber":214,"author":{"gitId":"-"},"content":"});"},{"lineNumber":215,"author":{"gitId":"-"},"content":""},{"lineNumber":216,"author":{"gitId":"-"},"content":"export const ISSUE_PENDING_MODERATION_HIGH_SEVERITY_FEATURE_FLAW \u003d new GithubIssue({"},{"lineNumber":217,"author":{"gitId":"-"},"content":" id: \u0027239538360\u0027,"},{"lineNumber":218,"author":{"gitId":"-"},"content":" number: 93,"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assignees: [USER_SHUMING_ASSIGNEE_DETAILS],"},{"lineNumber":220,"author":{"gitId":"-"},"content":" body: ISSUE_BODY,"},{"lineNumber":221,"author":{"gitId":"-"},"content":" created_at: \u00272020-10-14T10:28:32Z\u0027,"},{"lineNumber":222,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_FEATURE_FLAW, GITHUB_LABEL_HIGH_SEVERITY],"},{"lineNumber":223,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":224,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":225,"author":{"gitId":"-"},"content":" title: \u0027Redundant buggy feature\u0027,"},{"lineNumber":226,"author":{"gitId":"-"},"content":" updated_at: \u00272020-11-25T13:19:40Z\u0027,"},{"lineNumber":227,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/26\u0027,"},{"lineNumber":228,"author":{"gitId":"-"},"content":" user: USER_SHUMING_DETAILS,"},{"lineNumber":229,"author":{"gitId":"-"},"content":" comments: [PENDING_TUTOR_MODERATION]"},{"lineNumber":230,"author":{"gitId":"-"},"content":"});"},{"lineNumber":231,"author":{"gitId":"-"},"content":""},{"lineNumber":232,"author":{"gitId":"-"},"content":"export const ISSUE_PENDING_MODERATION_LOW_SEVERITY_DOCUMENTATION_BUG \u003d new GithubIssue({"},{"lineNumber":233,"author":{"gitId":"-"},"content":" id: \u0027384756360\u0027,"},{"lineNumber":234,"author":{"gitId":"-"},"content":" number: 6,"},{"lineNumber":235,"author":{"gitId":"-"},"content":" assignees: [USER_SHUMING_ASSIGNEE_DETAILS],"},{"lineNumber":236,"author":{"gitId":"-"},"content":" body: ISSUE_BODY,"},{"lineNumber":237,"author":{"gitId":"-"},"content":" created_at: \u00272020-03-26T09:08:12Z\u0027,"},{"lineNumber":238,"author":{"gitId":"-"},"content":" labels: [GITHUB_LABEL_TEAM_LABEL, GITHUB_LABEL_TUTORIAL_LABEL, GITHUB_LABEL_DOCUMENTATION_BUG, GITHUB_LABEL_LOW_SEVERITY],"},{"lineNumber":239,"author":{"gitId":"-"},"content":" state: IssueState.Open,"},{"lineNumber":240,"author":{"gitId":"-"},"content":" stateReason: IssueStateReason.Reopened,"},{"lineNumber":241,"author":{"gitId":"-"},"content":" title: \u0027Documentation bug, too many typos\u0027,"},{"lineNumber":242,"author":{"gitId":"-"},"content":" updated_at: \u00272020-11-10T16:59:40Z\u0027,"},{"lineNumber":243,"author":{"gitId":"-"},"content":" url: \u0027https://api.github.com/repos/CATcher-org/pe-results/issues/26\u0027,"},{"lineNumber":244,"author":{"gitId":"-"},"content":" user: USER_SHUMING_DETAILS,"},{"lineNumber":245,"author":{"gitId":"-"},"content":" comments: [PENDING_TUTOR_MODERATION]"},{"lineNumber":246,"author":{"gitId":"-"},"content":"});"}],"authorContributionMap":{"NereusWB922":32,"-":214}},{"path":"tests/constants/githublabel.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { GithubLabel } from \u0027../../src/app/core/models/github/github-label.model\u0027;"},{"lineNumber":2,"author":{"gitId":"-"},"content":""},{"lineNumber":3,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_FUNCTIONALITY_BUG \u003d {"},{"lineNumber":4,"author":{"gitId":"-"},"content":" color: \u00279900cc\u0027,"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" name: \u0027type.FunctionalityBug\u0027"},{"lineNumber":6,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":7,"author":{"gitId":"-"},"content":""},{"lineNumber":8,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_FEATURE_FLAW \u003d {"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" color: \u0027d966ff\u0027,"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" name: \u0027type.FeatureFlaw\u0027"},{"lineNumber":11,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":12,"author":{"gitId":"-"},"content":""},{"lineNumber":13,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_DOCUMENTATION_BUG \u003d {"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" color: \u0027d966ff\u0027,"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" name: \u0027type.DocumentationBug\u0027"},{"lineNumber":16,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":17,"author":{"gitId":"-"},"content":""},{"lineNumber":18,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_LOW_SEVERITY \u003d {"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" color: \u0027ffcccc\u0027,"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" name: \u0027severity.Low\u0027"},{"lineNumber":21,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":22,"author":{"gitId":"-"},"content":""},{"lineNumber":23,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_HIGH_SEVERITY \u003d {"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" color: \u0027ff6666\u0027,"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" name: \u0027severity.High\u0027"},{"lineNumber":26,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":27,"author":{"gitId":"-"},"content":""},{"lineNumber":28,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_MEDIUM_SEVERITY \u003d {"},{"lineNumber":29,"author":{"gitId":"-"},"content":" color: \u0027ff9999\u0027,"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" name: \u0027severity.Medium\u0027"},{"lineNumber":31,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_TUTORIAL_LABEL \u003d {"},{"lineNumber":34,"author":{"gitId":"-"},"content":" color: \u0027c2e0c6\u0027,"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" name: \u0027tutorial.CS2103T-W12\u0027"},{"lineNumber":36,"author":{"gitId":"-"},"content":"} as GithubLabel;"},{"lineNumber":37,"author":{"gitId":"-"},"content":""},{"lineNumber":38,"author":{"gitId":"-"},"content":"export const GITHUB_LABEL_TEAM_LABEL \u003d {"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" color: \u0027d4c5f9\u0027,"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" name: \u0027team.3\u0027"},{"lineNumber":41,"author":{"gitId":"-"},"content":"} as GithubLabel;"}],"authorContributionMap":{"NereusWB922":13,"-":28}},{"path":"tests/constants/session.constants.ts","fileType":"ts","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"import { Phase } from \u0027../../src/app/core/models/phase.model\u0027;"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import { Repo } from \u0027../../src/app/core/models/repo.model\u0027;"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import { SessionData, SessionRepo } from \u0027../../src/app/core/models/session.model\u0027;"},{"lineNumber":4,"author":{"gitId":"-"},"content":""},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"export const WATCHER_REPO: Repo \u003d Repo.of(\u0027CATcher-org/WATcher\u0027);"},{"lineNumber":6,"author":{"gitId":"-"},"content":""},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"const ISSUES_VIEWER_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" phase: Phase.issuesViewer,"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":10,"author":{"gitId":"-"},"content":"};"},{"lineNumber":11,"author":{"gitId":"-"},"content":""},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"const ACTIVITY_DASHBOARD_SESSION_REPO: SessionRepo \u003d {"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" phase: Phase.activityDashboard,"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" repos: [WATCHER_REPO]"},{"lineNumber":15,"author":{"gitId":"-"},"content":"};"},{"lineNumber":16,"author":{"gitId":"-"},"content":""},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"export const VALID_SESSION_DATA: SessionData \u003d {"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" sessionRepo: [ISSUES_VIEWER_SESSION_REPO, ACTIVITY_DASHBOARD_SESSION_REPO]"},{"lineNumber":19,"author":{"gitId":"-"},"content":"};"}],"authorContributionMap":{"NereusWB922":11,"-":8}}] diff --git a/CATcher-org_WATcher_main/commits.json b/CATcher-org_WATcher_main/commits.json new file mode 100644 index 0000000..770ea73 --- /dev/null +++ b/CATcher-org_WATcher_main/commits.json @@ -0,0 +1 @@ +{"authorDailyContributionsMap":{"xenosf":[],"sopa301":[],"mingyuanc":[],"jingting1412":[],"KevinEyo1":[],"LamJiuFong":[],"yiwen101":[],"jonasongg":[],"domoberzin":[],"asdfghjkxd":[],"yuanxi1":[],"supermii2":[],"marquestye":[],"nknguyenhc":[{"date":"2024-02-06","commitResults":[{"hash":"043311b90c12118a4d9d8468a64e1fc7021ad64d","isMergeCommit":false,"messageTitle":"Fix label filter not working (#230)","messageBody":"Fix label filter not working\r\n\r\nFilters takes the value of `label.formattedName` instead of `label.name`.","fileTypesAndContributionMap":{"html":{"insertions":13,"deletions":5}}}]}],"Arif-Khalid":[{"date":"2024-01-25","commitResults":[{"hash":"79602d69bd13e2ab8c06ab6d9a6eca8b4a61e8b0","isMergeCommit":false,"messageTitle":"Hide 0 issue columns (#223)","messageBody":"Hide 0 issue columns.\r\n\r\n0 Issue columns are shown.\r\n\r\nHiding issues with 0 columns reduces the clutter on screen, \r\ncreating a better user experience. \r\nIllogical columns such as issues that are unassigned when sorting by\r\npull requests are also removed inherently.\r\n\r\nLet\u0027s add logic to hide the columns when they have no issues \r\nassociated to them.","fileTypesAndContributionMap":{"html":{"insertions":10,"deletions":1},"ts":{"insertions":15,"deletions":2}}}]},{"date":"2024-02-06","commitResults":[{"hash":"cd0d7e9f2a5169307c0c92a89a33e24610381839","isMergeCommit":false,"messageTitle":"Remove unused services (#238)","messageBody":"Couple of unused services copied from CATcher.\r\n\r\nUnused code should be removed to simplify code base \r\nand improve developer experience.\r\n\r\nLet\u0027s remove these unused services.","fileTypesAndContributionMap":{"ts":{"insertions":0,"deletions":359}}}]}],"NereusWB922":[{"date":"2024-02-06","commitResults":[{"hash":"552868032ec6a8340d1f8c8d662ad22189d134f1","isMergeCommit":false,"messageTitle":"Improve activity dashboard design (#233)","messageBody":"Improve activity dashboard design\r\n\r\nThe ID column in the event table is not useful for the user.\r\n\r\nThe design of the dashboard is too simple. The event table\u0027s height is\r\nnot fixed, and the expanded event details might cause the table to be\r\ntoo long, which is very inconvenient.\r\n\r\nTo address this, let\u0027s hide the ID column, add some information about\r\nthe actor, fix the event table height and make it scrollable, and\r\nimplement a dialog to display event details.","fileTypesAndContributionMap":{"css":{"insertions":129,"deletions":10},"html":{"insertions":72,"deletions":67},"ts":{"insertions":48,"deletions":18}}}]},{"date":"2024-02-08","commitResults":[{"hash":"a6efcb9a2fa9bcd321c37a824e4d2aafa8d07a81","isMergeCommit":false,"messageTitle":"Refactor test cases","messageBody":"The test cases for the Login Component and Session Model are outdated. \r\n\r\nAdditionally, the Conflict Model has been removed. \r\n\r\nLet\u0027s refactor the test cases for the Login Component and Session Model \r\nand remove the test cases for the Conflict Model.\r\n","fileTypesAndContributionMap":{"ts":{"insertions":86,"deletions":106}}},{"hash":"339b319aaa87913d2109774f1fc6826d37992172","isMergeCommit":false,"messageTitle":"Refactor test cases for issue paginator","messageBody":"The test cases for the issue paginator are outdated. \r\n\r\nLet\u0027s refactor the test cases for the issue paginator.","fileTypesAndContributionMap":{"ts":{"insertions":4,"deletions":9}}},{"hash":"6dc82ffeb34973054ecfb3a10ea107f2c653c7cc","isMergeCommit":false,"messageTitle":"Refactor test cases for issue sorter","messageBody":"The test cases for the issue sorter are outdated. \r\n\r\nLet\u0027s refactor the test cases for the issue sorter.","fileTypesAndContributionMap":{"ts":{"insertions":57,"deletions":15}}},{"hash":"aefd63e82bad15390696d3aa88c9cbe93cdecaf4","isMergeCommit":false,"messageTitle":"Refactor github label constants","messageBody":"GithubLabel model\u0027s properties have been changed.\r\n\r\nLet\u0027s refactor the github label constants.","fileTypesAndContributionMap":{"ts":{"insertions":13,"deletions":29}}},{"hash":"bb4cb781ae5ba81e77cd83d789277530d37aaea6","isMergeCommit":false,"messageTitle":"Refactor test cases for search filter","messageBody":"The test cases for the search filter are outdated. \r\n\r\nLet\u0027s refactor the test cases for the search filter.","fileTypesAndContributionMap":{"ts":{"insertions":9,"deletions":48}}}]}],"dishenggg":[],"MadLamprey":[{"date":"2024-01-27","commitResults":[{"hash":"bb4a7f4063c0aa33b80188a83bfc610fe147950a","isMergeCommit":false,"messageTitle":"Prevent redirection when repo not set (#228)","messageBody":"Co-authored-by: Misra Aditya \u003ce1096355@u.nus.edu\u003e","fileTypesAndContributionMap":{"html":{"insertions":4,"deletions":1}}}]}],"Tim-Siu":[]},"authorFileTypeContributionMap":{"xenosf":{"js":0,"css":0,"html":0,"ts":0},"sopa301":{"js":0,"css":0,"html":0,"ts":0},"mingyuanc":{"js":0,"css":0,"html":0,"ts":0},"jingting1412":{"js":0,"css":0,"html":0,"ts":0},"KevinEyo1":{"js":0,"css":0,"html":0,"ts":0},"LamJiuFong":{"js":0,"css":0,"html":0,"ts":0},"yiwen101":{"js":0,"css":0,"html":0,"ts":0},"jonasongg":{"js":0,"css":0,"html":0,"ts":0},"domoberzin":{"js":0,"css":0,"html":0,"ts":0},"asdfghjkxd":{"js":0,"css":0,"html":0,"ts":0},"yuanxi1":{"js":0,"css":0,"html":0,"ts":0},"supermii2":{"js":0,"css":0,"html":0,"ts":0},"marquestye":{"js":0,"css":0,"html":0,"ts":0},"nknguyenhc":{"js":0,"css":0,"html":13,"ts":0},"Arif-Khalid":{"js":0,"css":0,"html":10,"ts":15},"NereusWB922":{"js":0,"css":129,"html":36,"ts":215},"dishenggg":{"js":0,"css":0,"html":0,"ts":0},"MadLamprey":{"js":0,"css":0,"html":4,"ts":0},"Tim-Siu":{"js":0,"css":0,"html":0,"ts":0}},"authorContributionVariance":{"xenosf":0.0,"sopa301":0.0,"mingyuanc":0.0,"jingting1412":0.0,"KevinEyo1":0.0,"LamJiuFong":0.0,"yiwen101":0.0,"jonasongg":0.0,"domoberzin":0.0,"asdfghjkxd":0.0,"yuanxi1":0.0,"supermii2":0.0,"marquestye":0.0,"nknguyenhc":4.562449,"Arif-Khalid":1821.7921,"NereusWB922":3604.3757,"dishenggg":0.0,"MadLamprey":0.3520408,"Tim-Siu":0.0},"authorDisplayNameMap":{"xenosf":"XENO..NONG","sopa301":"POON..RYAN","mingyuanc":"CHIN..YUAN","jingting1412":"WANG..TING","KevinEyo1":"EYO ..EVIN","LamJiuFong":"LAM ..FONG","yiwen101":"WANG..IWEN","jonasongg":"JONA.. WEI","domoberzin":"DOMI.. GIN","asdfghjkxd":"GEOR.. YAO","yuanxi1":"ZHU ..ANXI","supermii2":"ALVI..S NG","marquestye":"TYE ..QUES","nknguyenhc":"NGUY..UYEN","Arif-Khalid":"ARIF..ALID","NereusWB922":"NERE.. BIN","dishenggg":"YEO ..HENG","MadLamprey":"MISR..ITYA","Tim-Siu":"XU S..UYAO"}} diff --git a/TEAMMATES_teammates_master/authorship.json b/TEAMMATES_teammates_master/authorship.json new file mode 100644 index 0000000..c0325f5 --- /dev/null +++ b/TEAMMATES_teammates_master/authorship.json @@ -0,0 +1 @@ +[{"path":"src/web/app/components/comment-box/comment-row/comment-row.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ctm-comment-edit-form *ngIf\u003d\"model.isEditing || mode \u003d\u003d\u003d CommentRowMode.ADD\""},{"lineNumber":2,"author":{"gitId":"-"},"content":" [mode]\u003d\"mode\""},{"lineNumber":3,"author":{"gitId":"-"},"content":" [model]\u003d\"model.commentEditFormModel\""},{"lineNumber":4,"author":{"gitId":"-"},"content":" (modelChange)\u003d\"triggerModelChange(\u0027commentEditFormModel\u0027, $event)\""},{"lineNumber":5,"author":{"gitId":"-"},"content":" [isVisibilityOptionEnabled]\u003d\"isVisibilityOptionEnabled\""},{"lineNumber":6,"author":{"gitId":"-"},"content":" [isDisabled]\u003d\"isDisabled\""},{"lineNumber":7,"author":{"gitId":"-"},"content":" [shouldHideSavingButton]\u003d\"shouldHideSavingButton\""},{"lineNumber":8,"author":{"gitId":"-"},"content":" [questionShowResponsesTo]\u003d\"questionShowResponsesTo\""},{"lineNumber":9,"author":{"gitId":"-"},"content":" [response]\u003d\"response\""},{"lineNumber":10,"author":{"gitId":"-"},"content":" [isFeedbackParticipantComment]\u003d\"isFeedbackParticipantComment\""},{"lineNumber":11,"author":{"gitId":"-"},"content":" [shouldHideClosingButton]\u003d\"shouldHideClosingButton\""},{"lineNumber":12,"author":{"gitId":"-"},"content":" (closeCommentBoxEvent)\u003d\"triggerCloseEditing()\""},{"lineNumber":13,"author":{"gitId":"-"},"content":" (saveCommentEvent)\u003d\"triggerSaveCommentEvent()\"\u003e\u003c/tm-comment-edit-form\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":""},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cdiv class\u003d\"card\" *ngIf\u003d\"!model.isEditing \u0026\u0026 mode \u003d\u003d\u003d CommentRowMode.EDIT \u0026\u0026 model.originalComment\"\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row comment-row\"\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"by-response-giver text-secondary\" *ngIf\u003d\"isFeedbackParticipantComment\"\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" Comment by response giver."},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/span\u003e"},{"lineNumber":22,"author":{"gitId":"yuanxi1"},"content":" \u003cng-container class\u003d\"text-secondary\" *ngIf\u003d\"!isFeedbackParticipantComment\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"comment-giver-name\"\u003e{{ model.commentGiverName ? model.commentGiverName : model.originalComment.commentGiver }} commented at \u003c/span\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"ngb-tooltip-class\" style\u003d\"margin-right: .25rem;\" [ngbTooltip]\u003d\"model.originalComment.createdAt | formatDateDetail: model.timezone!\"\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" {{ model.originalComment.createdAt | formatDateBrief: model.timezone! }}\u003c/span\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cng-container *ngIf\u003d\"model.originalComment.lastEditedAt \u0026\u0026 model.originalComment.lastEditedAt !\u003d\u003d model.originalComment.createdAt\"\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003ci class\u003d\"fas fa-circle dot-xs align-middle\" style\u003d\"margin-right: .25rem;\"\u003e\u003c/i\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cspan id\u003d\"last-editor-name\" style\u003d\"margin-right: .25rem;\" class\u003d\"ngb-tooltip-class\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" [ngbTooltip]\u003d\"model.originalComment.lastEditedAt | formatDateDetail: model.timezone!\"\u003eedited by {{ model.lastEditorName ? model.lastEditorName : model.originalComment.lastEditorEmail }}\u003c/span\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/ng-container\u003e"},{"lineNumber":31,"author":{"gitId":"yuanxi1"},"content":" \u003c/ng-container\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003ci class\u003d\"fa fa-eye\" aria-hidden\u003d\"true\" ngbTooltip\u003d\"This response comment is visible to {{ visibilityStateMachine.getVisibilityTypesUnderVisibilityControl(CommentVisibilityControl.SHOW_COMMENT) | commentVisibilityTypesJointName }}\"\u003e\u003c/i\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":""},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"float-end\"\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"button\" class\u003d\"btn-edit-comment btn btn-outline-primary btn-sm\" *ngIf\u003d\"!shouldHideEditButton\" ngbTooltip\u003d\u0027Edit this comment\u0027"},{"lineNumber":37,"author":{"gitId":"-"},"content":" (click)\u003d\"triggerModelChange(\u0027isEditing\u0027, true)\" [disabled]\u003d\"isDisabled\"\u003e\u003ci class\u003d\"fas fa-pencil-alt\"\u003e\u003c/i\u003e\u003c/button\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"button\" class\u003d\"btn-delete-comment btn btn-outline-primary btn-sm btn-margin-left\" *ngIf\u003d\"!shouldHideDeleteButton\" ngbTooltip\u003d\u0027Delete this comment\u0027"},{"lineNumber":39,"author":{"gitId":"-"},"content":" (click)\u003d\"triggerDeleteCommentEvent()\" [disabled]\u003d\"isDisabled\"\u003e\u003ci class\u003d\"fas fa-trash\"\u003e\u003c/i\u003e\u003c/button\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"comment-text col-12\" [innerHTML]\u003d\"model.originalComment.commentText | safeHtml\"\u003e\u003c/div\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"yuanxi1":2,"-":43}},{"path":"src/web/app/components/session-edit-form/session-edit-form.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"session-edit-form\" class\u003d\"card card-plain\"\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"close-header\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\"\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"button\" class\u003d\"btn-close\" aria-label\u003d\"Close\" (click)\u003d\"closeEditFormHandler()\"\u003e\u003c/button\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-lg-7\"\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mb-2\"\u003e"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 col-sm-3 session-heading-text\"\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003ch5\u003eCreate new\u003c/h5\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 col-sm-9 create-new-dropdown-div\"\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cselect id\u003d\"session-type\" class\u003d\"form-control form-select\" [ngModel]\u003d\"model.templateSessionName\" (ngModelChange)\u003d\"triggerModelChange(\u0027templateSessionName\u0027, $event)\"\u003e"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003coption *ngFor\u003d\"let templateSession of templateSessions\" [ngValue]\u003d\"templateSession.name\"\u003e{{ templateSession.name }}\u003c/option\u003e"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003c/select\u003e"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003ca type\u003d\"button\" class\u003d\"btn btn-link\" tmRouterLink\u003d\"/web/instructor/help\" [queryParams]\u003d\"{ questionId: \u0027sessions\u0027, section: \u0027sessions\u0027 }\" target\u003d\"_blank\" aria-label\u003d\"Help for feedback sessions\"\u003e\u003ci class\u003d\"fas fa-info-circle\"\u003e\u003c/i\u003e\u003c/a\u003e"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-lg-5\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row\"\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 col-sm-3 col-lg-1 session-heading-text\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003ch5\u003eOr\u003c/h5\u003e"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 col-sm-9 col-lg-11 text-md-start\"\u003e"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-copy-session\" type\u003d\"button\" class\u003d\"btn btn-info\" (click)\u003d\"copyOthersHandler()\"\u003e"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cspan\u003eCopy from previous feedback sessions\u003c/span\u003e"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"padding-left-7px\"\u003e"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003ctm-ajax-loading *ngIf\u003d\"isCopyOtherSessionLoading\"\u003e\u003c/tm-ajax-loading\u003e"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\"\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 text-center text-md-end session-form-buttons\"\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-fs-edit\" type\u003d\"button\" class\u003d\"btn btn-primary\" (click)\u003d\"triggerModelChange(\u0027isEditable\u0027, true)\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT \u0026\u0026 !model.isEditable \u0026\u0026 !model.isSaving\"\u003e\u003ci class\u003d\"fas fa-pencil-alt\"\u003e\u003c/i\u003e Edit\u003c/button\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-fs-save\" type\u003d\"button\" class\u003d\"btn btn-primary\" (click)\u003d\"submitFormHandler()\" [disabled]\u003d\"model.isSaving\" *ngIf\u003d\"model.isEditable || model.isSaving\"\u003e\u003ctm-ajax-loading *ngIf\u003d\"model.isSaving\"\u003e\u003c/tm-ajax-loading\u003e \u003ci class\u003d\"fas fa-check\"\u003e\u003c/i\u003e Save\u003c/button\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"button\" class\u003d\"btn btn-primary\" ngbTooltip\u003d\"Discard changes to the feedback session\" (click)\u003d\"cancelHandler()\" *ngIf\u003d\"model.isEditable\" [disabled]\u003d\"model.isSaving\"\u003e\u003ci class\u003d\"fas fa-ban\"\u003e\u003c/i\u003e Cancel\u003c/button\u003e"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-fs-delete\" type\u003d\"button\" class\u003d\"btn btn-primary\" ngbTooltip\u003d\"Delete the feedback session\" (click)\u003d\"deleteHandler()\" [disabled]\u003d\"model.isSaving\"\u003e\u003ctm-ajax-loading *ngIf\u003d\"model.isDeleting\"\u003e\u003c/tm-ajax-loading\u003e\u003ci class\u003d\"fas fa-trash\"\u003e\u003c/i\u003e Delete\u003c/button\u003e"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-fs-copy\" type\u003d\"button\" class\u003d\"btn btn-primary\" ngbTooltip\u003d\"Copy this feedback session to other courses\" (click)\u003d\"copyHandler()\" [disabled]\u003d\"model.isSaving\"\u003e\u003ctm-ajax-loading *ngIf\u003d\"model.isCopying\"\u003e\u003c/tm-ajax-loading\u003e\u003ci class\u003d\"far fa-copy\"\u003e\u003c/i\u003e Copy\u003c/button\u003e"},{"lineNumber":43,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":45,"author":{"gitId":"-"},"content":""},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card border-primary margin-top-20px\"\u003e"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\" [ngClass]\u003d\"{\u0027col-form-label\u0027: formMode \u003d\u003d\u003d SessionEditFormMode.ADD}\"\u003e"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"ngb-tooltip-class\" ngbTooltip\u003d\"Course for which the feedback session is for.\"\u003eCourse ID\u003c/span\u003e"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":52,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-auto text-md-start\"\u003e"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\"\u003e"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cselect id\u003d\"add-course-id\" class\u003d\"form-control form-select\" [ngClass]\u003d\"{\u0027is-invalid\u0027: courseCandidates.length \u003d\u003d\u003d 0}\" [ngModel]\u003d\"model.courseId\" (ngModelChange)\u003d\"courseIdChangeHandler($event)\" [disabled]\u003d\"courseCandidates.length \u003d\u003d\u003d 0\"\u003e"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003coption *ngFor\u003d\"let course of courseCandidates\" [ngValue]\u003d\"course.courseId\"\u003e{{ course.courseId }}\u003c/option\u003e"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003c/select\u003e"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"invalid-feedback\" *ngIf\u003d\"courseCandidates.length \u003d\u003d\u003d 0\"\u003e"},{"lineNumber":58,"author":{"gitId":"-"},"content":" There is no un-archived course."},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":60,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":61,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"edit-course-id\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\"\u003e {{ model.courseId }} \u003c/div\u003e"},{"lineNumber":62,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cbr/\u003e"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\" [ngClass]\u003d\"{\u0027col-form-label\u0027: formMode \u003d\u003d\u003d SessionEditFormMode.ADD}\"\u003e"},{"lineNumber":67,"author":{"gitId":"-"},"content":" Time Zone"},{"lineNumber":68,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":69,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"time-zone\" class\u003d\"col-md-3 text-md-start\" [ngClass]\u003d\"{\u0027col-form-label\u0027: formMode \u003d\u003d\u003d SessionEditFormMode.ADD}\"\u003e"},{"lineNumber":70,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"ngb-tooltip-class\" ngbTooltip\u003d\"To change this, edit the course settings. TEAMMATES automatically adjusts to match the current time offset in your area, including clock changes due to daylight saving time.\"\u003e{{ model.timeZone }}\u003c/span\u003e"},{"lineNumber":71,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":72,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":73,"author":{"gitId":"-"},"content":" \u003cbr/\u003e"},{"lineNumber":74,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":75,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\"\u003e"},{"lineNumber":76,"author":{"gitId":"-"},"content":" Course Name"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"course-name\" class\u003d\"col-md-10 text-md-start\"\u003e"},{"lineNumber":79,"author":{"gitId":"-"},"content":" {{ model.courseName }}"},{"lineNumber":80,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":81,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":82,"author":{"gitId":"-"},"content":" \u003cbr/\u003e"},{"lineNumber":83,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":84,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\"\u003e"},{"lineNumber":85,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\" class\u003d\"ngb-tooltip-class\" ngbTooltip\u003d\"Enter the name of the feedback session e.g. Feedback Session 1.\"\u003eSession Name*\u003c/span\u003e"},{"lineNumber":86,"author":{"gitId":"-"},"content":" \u003cspan *ngIf\u003d\"formMode !\u003d\u003d SessionEditFormMode.ADD\"\u003eSession Name\u003c/span\u003e"},{"lineNumber":87,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-10 text-md-start\"\u003e"},{"lineNumber":89,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\"\u003e"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"add-session-name\" type\u003d\"text\" class\u003d\"form-control\" [ngModel]\u003d\"model.feedbackSessionName\" (ngModelChange)\u003d\"triggerModelChange(\u0027feedbackSessionName\u0027, $event)\" placeholder\u003d\"e.g. Feedback for Project Presentation 1\" maxlength\u003d\"64\" required #sessionName\u003d\"ngModel\" /\u003e"},{"lineNumber":91,"author":{"gitId":"-"},"content":" \u003cdiv [hidden]\u003d\"sessionName.valid || (sessionName.pristine \u0026\u0026 sessionName.untouched)\" class\u003d\"invalid-field\"\u003e"},{"lineNumber":92,"author":{"gitId":"-"},"content":" \u003ci class\u003d\"fa fa-exclamation-circle\" aria-hidden\u003d\"true\"\u003e\u003c/i\u003e"},{"lineNumber":93,"author":{"gitId":"-"},"content":" The field Session Name should not be empty."},{"lineNumber":94,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":95,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":96,"author":{"gitId":"-"},"content":" {{FEEDBACK_SESSION_NAME_MAX_LENGTH - model.feedbackSessionName.length}} characters left"},{"lineNumber":97,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":98,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":99,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"edit-session-name\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\"\u003e {{ model.feedbackSessionName }} \u003c/div\u003e"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":102,"author":{"gitId":"-"},"content":" \u003cbr/\u003e"},{"lineNumber":103,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":104,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\"\u003e"},{"lineNumber":105,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"ngb-tooltip-class\" ngbTooltip\u003d\"Will be displayed at the top of the page when users respond to the session.\"\u003eInstructions\u003c/span\u003e"},{"lineNumber":106,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":107,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-10 text-md-start\"\u003e"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u003ctm-rich-text-editor id\u003d\"instructions\" [richText]\u003d\"model.instructions\" (richTextChange)\u003d\"triggerModelChange(\u0027instructions\u0027, $event)\" [isDisabled]\u003d\"!model.isEditable\" [hasCharacterLimit]\u003d\"true\"\u003e\u003c/tm-rich-text-editor\u003e"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":111,"author":{"gitId":"-"},"content":" \u003cbr/\u003e"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\"\u003e"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold\"\u003e"},{"lineNumber":114,"author":{"gitId":"-"},"content":" Submission Status"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":116,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"submission-status\" class\u003d\"col-md-4 text-md-start\"\u003e"},{"lineNumber":117,"author":{"gitId":"-"},"content":" {{ model.submissionStatus | submissionStatusName }}"},{"lineNumber":118,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":119,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 text-md-end font-bold mt-3 mt-md-0\"\u003e"},{"lineNumber":120,"author":{"gitId":"-"},"content":" Published Status"},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":122,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"published-status\" class\u003d\"col-md-4 text-md-start\"\u003e"},{"lineNumber":123,"author":{"gitId":"-"},"content":" {{ model.publishStatus | publishStatusName }}"},{"lineNumber":124,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":125,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":126,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":127,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":128,"author":{"gitId":"-"},"content":""},{"lineNumber":129,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card border-primary margin-top-20px\"\u003e"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":131,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":132,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":133,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 text-md-start\"\u003e"},{"lineNumber":134,"author":{"gitId":"-"},"content":" \u003cdiv\u003e"},{"lineNumber":135,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class label-control font-bold\" ngbTooltip\u003d\"Users can start submitting responses.\"\u003e"},{"lineNumber":136,"author":{"gitId":"-"},"content":" Submission opening time"},{"lineNumber":137,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":138,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":139,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":140,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center align-items-center\"\u003e"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"submission-start-date\" class\u003d\"col-md-7 col-xs-center\"\u003e"},{"lineNumber":142,"author":{"gitId":"-"},"content":" \u003ctm-datepicker [isDisabled]\u003d\"!model.isEditable\" (dateChangeCallback)\u003d\"triggerSubmissionOpeningDateModelChange(\u0027submissionStartDate\u0027, $event)\""},{"lineNumber":143,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSubmissionStart\" [maxDate]\u003d\"maxDateForSubmissionStart\""},{"lineNumber":144,"author":{"gitId":"-"},"content":" [date]\u003d\"model.submissionStartDate\"\u003e\u003c/tm-datepicker\u003e"},{"lineNumber":145,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":146,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-5\"\u003e"},{"lineNumber":147,"author":{"gitId":"-"},"content":" \u003ctm-timepicker id\u003d\"submission-start-time\" [isDisabled]\u003d\"!model.isEditable\" (timeChange)\u003d\"triggerModelChange(\u0027submissionStartTime\u0027, $event)\""},{"lineNumber":148,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSubmissionStart\" [maxDate]\u003d\"maxDateForSubmissionStart\""},{"lineNumber":149,"author":{"gitId":"-"},"content":" [date]\u003d\"model.submissionStartDate\""},{"lineNumber":150,"author":{"gitId":"-"},"content":" [minTime]\u003d\"minTimeForSubmissionStart\" [maxTime]\u003d\"maxTimeForSubmissionStart\""},{"lineNumber":151,"author":{"gitId":"-"},"content":" [time]\u003d\"model.submissionStartTime\"\u003e\u003c/tm-timepicker\u003e"},{"lineNumber":152,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":153,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":154,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":155,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4 border-left-gray\"\u003e"},{"lineNumber":156,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":157,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 text-md-start ms-md-2\"\u003e"},{"lineNumber":158,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class label-control font-bold\" ngbTooltip\u003d\"No more submissions from users.\"\u003e"},{"lineNumber":159,"author":{"gitId":"-"},"content":" Submission closing time"},{"lineNumber":160,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":161,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":162,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":163,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row align-items-center\"\u003e"},{"lineNumber":164,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"submission-end-date\" class\u003d\"col-md-7 col-xs-center\"\u003e"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \u003ctm-datepicker [isDisabled]\u003d\"!model.isEditable\" (dateChangeCallback)\u003d\"triggerModelChange(\u0027submissionEndDate\u0027, $event)\""},{"lineNumber":166,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSubmissionEnd\" [maxDate]\u003d\"maxDateForSubmissionEnd\""},{"lineNumber":167,"author":{"gitId":"-"},"content":" [date]\u003d\"model.submissionEndDate\"\u003e\u003c/tm-datepicker\u003e"},{"lineNumber":168,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":169,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-5\"\u003e"},{"lineNumber":170,"author":{"gitId":"-"},"content":" \u003ctm-timepicker id\u003d\"submission-end-time\" [isDisabled]\u003d\"!model.isEditable\" (timeChange)\u003d\"triggerModelChange(\u0027submissionEndTime\u0027, $event)\""},{"lineNumber":171,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSubmissionEnd\" [maxDate]\u003d\"maxDateForSubmissionEnd\""},{"lineNumber":172,"author":{"gitId":"-"},"content":" [date]\u003d\"model.submissionEndDate\""},{"lineNumber":173,"author":{"gitId":"-"},"content":" [minTime]\u003d\"minTimeForSubmissionEnd\" [maxTime]\u003d\"maxTimeForSubmissionEnd\""},{"lineNumber":174,"author":{"gitId":"-"},"content":" [time]\u003d\"model.submissionEndTime\"\u003e\u003c/tm-timepicker\u003e"},{"lineNumber":175,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":176,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":177,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":178,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4 border-left-gray\"\u003e"},{"lineNumber":179,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":180,"author":{"gitId":"nknguyenhc"},"content":" \u003cdiv class\u003d\"col-12 text-md-start ms-md-2\"\u003e"},{"lineNumber":181,"author":{"gitId":"nknguyenhc"},"content":" \u003clabel for\u003d\"grace-period\" class\u003d\"ngb-tooltip-class control-label font-bold\" ngbTooltip\u003d\"Amount of time the system will continue accepting submissions after the specified deadline.\"\u003e"},{"lineNumber":182,"author":{"gitId":"-"},"content":" Grace period"},{"lineNumber":183,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":184,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":185,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":186,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row text-center\"\u003e"},{"lineNumber":187,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":188,"author":{"gitId":"-"},"content":" \u003cselect id\u003d\"grace-period\" class\u003d\"form-control form-select\" [ngModel]\u003d\"model.gracePeriod\" (ngModelChange)\u003d\"triggerModelChange(\u0027gracePeriod\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e"},{"lineNumber":189,"author":{"gitId":"-"},"content":" \u003coption *ngFor\u003d\"let graceMinute of [0, 5, 10, 15, 20, 25, 30]\" [ngValue]\u003d\"graceMinute\"\u003e{{ graceMinute + \u0027 min\u0027}}\u003c/option\u003e"},{"lineNumber":190,"author":{"gitId":"-"},"content":" \u003c/select\u003e"},{"lineNumber":191,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":192,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":193,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row\"\u003e"},{"lineNumber":194,"author":{"gitId":"-"},"content":" \u003ca class\u003d\"ps-3 pt-2\""},{"lineNumber":195,"author":{"gitId":"-"},"content":" *ngIf\u003d\"formMode !\u003d\u003d SessionEditFormMode.ADD\""},{"lineNumber":196,"author":{"gitId":"-"},"content":" tmRouterLink\u003d\"/web/instructor/sessions/individual-extension\""},{"lineNumber":197,"author":{"gitId":"-"},"content":" [queryParams]\u003d\"{ courseid: model.courseId, fsname: model.feedbackSessionName, preselectnonsubmitters: false }\"\u003e"},{"lineNumber":198,"author":{"gitId":"-"},"content":" Individual Deadline Extensions"},{"lineNumber":199,"author":{"gitId":"-"},"content":" \u003ci class\u003d\"fas fa-edit\"\u003e\u003c/i\u003e"},{"lineNumber":200,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":201,"author":{"gitId":"-"},"content":" \u003ca class\u003d\"ps-3 pt-2 disabled-link ngb-tooltip-class\""},{"lineNumber":202,"author":{"gitId":"-"},"content":" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\""},{"lineNumber":203,"author":{"gitId":"-"},"content":" ngbTooltip\u003d\"You must save the new session before setting individual deadline extensions\"\u003e"},{"lineNumber":204,"author":{"gitId":"-"},"content":" Individual Deadline Extensions"},{"lineNumber":205,"author":{"gitId":"-"},"content":" \u003ci class\u003d\"fas fa-edit\"\u003e\u003c/i\u003e"},{"lineNumber":206,"author":{"gitId":"-"},"content":" \u003c/a\u003e"},{"lineNumber":207,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":208,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":209,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":210,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":211,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":212,"author":{"gitId":"-"},"content":""},{"lineNumber":213,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!model.hasVisibleSettingsPanelExpanded\" class\u003d\"margin-top-20px\"\u003e"},{"lineNumber":214,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"text-muted\"\u003eSession is visible at submission opening time, responses are only visible when you publish the results.\u003c/span\u003e"},{"lineNumber":215,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-change-visibility\" type\u003d\"button\" class\u003d\"btn btn-link\" (click)\u003d\"triggerModelChange(\u0027hasVisibleSettingsPanelExpanded\u0027, true)\" [disabled]\u003d\"!model.isEditable\"\u003e[Change]\u003c/button\u003e"},{"lineNumber":216,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":217,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card border-primary margin-top-20px\" *ngIf\u003d\"model.hasVisibleSettingsPanelExpanded\" @collapseAnim\u003e"},{"lineNumber":218,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":219,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row align-items-start\"\u003e"},{"lineNumber":220,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-6 text-center text-md-start\"\u003e"},{"lineNumber":221,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row ms-md-1\"\u003e"},{"lineNumber":222,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":223,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class label-control font-bold\" ngbTooltip\u003d\"Session can be visible before it is open for submissions so that users can preview the questions.\"\u003eMake session visible \u003c/label\u003e"},{"lineNumber":224,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":225,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":226,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mt-md-2 ms-md-1\"\u003e"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 mt-md-1\"\u003e"},{"lineNumber":228,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check\"\u003e"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"form-check-label\"\u003e"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"session-visibility-custom\" class\u003d\"form-check-input\" type\u003d\"radio\" name\u003d\"sessionVisibleRadio\" [value]\u003d\"SessionVisibleSetting.CUSTOM\" [ngModel]\u003d\"model.sessionVisibleSetting\" (ngModelChange)\u003d\"triggerModelChange(\u0027sessionVisibleSetting\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e"},{"lineNumber":231,"author":{"gitId":"-"},"content":" At"},{"lineNumber":232,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":233,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":234,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":235,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"session-visibility-date\" class\u003d\"col-md-6\"\u003e"},{"lineNumber":236,"author":{"gitId":"-"},"content":" \u003ctm-datepicker [isDisabled]\u003d\"model.sessionVisibleSetting !\u003d\u003d SessionVisibleSetting.CUSTOM || !model.isEditable\""},{"lineNumber":237,"author":{"gitId":"-"},"content":" (dateChangeCallback)\u003d\"triggerModelChange(\u0027customSessionVisibleDate\u0027, $event)\""},{"lineNumber":238,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSessionVisible\" [maxDate]\u003d\"maxDateForSessionVisible\""},{"lineNumber":239,"author":{"gitId":"-"},"content":" [date]\u003d\"model.customSessionVisibleDate\"\u003e\u003c/tm-datepicker\u003e"},{"lineNumber":240,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":241,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":242,"author":{"gitId":"-"},"content":" \u003ctm-timepicker id\u003d\"session-visibility-time\" [isDisabled]\u003d\"model.sessionVisibleSetting !\u003d\u003d SessionVisibleSetting.CUSTOM || !model.isEditable\" (timeChange)\u003d\"triggerModelChange(\u0027customSessionVisibleTime\u0027, $event)\""},{"lineNumber":243,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForSessionVisible\" [maxDate]\u003d\"maxDateForSessionVisible\""},{"lineNumber":244,"author":{"gitId":"-"},"content":" [date]\u003d\"model.customSessionVisibleDate\""},{"lineNumber":245,"author":{"gitId":"-"},"content":" [minTime]\u003d\"minTimeForSessionVisible\" [maxTime]\u003d\"maxTimeForSessionVisible\""},{"lineNumber":246,"author":{"gitId":"-"},"content":" [time]\u003d\"model.customSessionVisibleTime\" \u003e\u003c/tm-timepicker\u003e"},{"lineNumber":247,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":248,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":249,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mt-md-1 ms-md-3\"\u003e"},{"lineNumber":250,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 form-check\"\u003e"},{"lineNumber":251,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"form-check-label\"\u003e"},{"lineNumber":252,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"session-visibility-at-open\" class\u003d\"form-check-input\" type\u003d\"radio\" name\u003d\"sessionVisibleRadio\" [value]\u003d\"SessionVisibleSetting.AT_OPEN\" [ngModel]\u003d\"model.sessionVisibleSetting\" (ngModelChange)\u003d\"triggerModelChange(\u0027sessionVisibleSetting\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e"},{"lineNumber":253,"author":{"gitId":"-"},"content":" Submission opening time"},{"lineNumber":254,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":255,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":256,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":257,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":258,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-6 sessionVisibleRadio border-left-gray text-center text-md-start\"\u003e"},{"lineNumber":259,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row ms-md-1\"\u003e"},{"lineNumber":260,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":261,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class label-control font-bold\" ngbTooltip\u003d\"Make responses for the feedback session visible to designated recipients.\"\u003eMake response visible \u003c/label\u003e"},{"lineNumber":262,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":263,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":264,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mt-md-2 ms-md-1\"\u003e"},{"lineNumber":265,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-2 mt-md-1\"\u003e"},{"lineNumber":266,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check\"\u003e"},{"lineNumber":267,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"form-check-label\"\u003e"},{"lineNumber":268,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"response-visibility-custom\" class\u003d\"form-check-input\" type\u003d\"radio\" name\u003d\"responseVisibleRadio\" [value]\u003d\"ResponseVisibleSetting.CUSTOM\" [ngModel]\u003d\"model.responseVisibleSetting\" (ngModelChange)\u003d\"triggerModelChange(\u0027responseVisibleSetting\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"/\u003e"},{"lineNumber":269,"author":{"gitId":"-"},"content":" At"},{"lineNumber":270,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":271,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":272,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":273,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"response-visibility-date\" class\u003d\"col-md-6\"\u003e"},{"lineNumber":274,"author":{"gitId":"-"},"content":" \u003ctm-datepicker [isDisabled]\u003d\"model.responseVisibleSetting !\u003d\u003d ResponseVisibleSetting.CUSTOM || !model.isEditable\""},{"lineNumber":275,"author":{"gitId":"-"},"content":" (dateChangeCallback)\u003d\"triggerModelChange(\u0027customResponseVisibleDate\u0027, $event)\""},{"lineNumber":276,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForResponseVisible\" [date]\u003d\"model.customResponseVisibleDate\"\u003e\u003c/tm-datepicker\u003e"},{"lineNumber":277,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":278,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":279,"author":{"gitId":"-"},"content":" \u003ctm-timepicker id\u003d\"response-visibility-time\" [isDisabled]\u003d\"model.responseVisibleSetting !\u003d\u003d ResponseVisibleSetting.CUSTOM || !model.isEditable\" (timeChange)\u003d\"triggerModelChange(\u0027customResponseVisibleTime\u0027, $event)\""},{"lineNumber":280,"author":{"gitId":"-"},"content":" [minDate]\u003d\"minDateForResponseVisible\" [date]\u003d\"model.customResponseVisibleDate\""},{"lineNumber":281,"author":{"gitId":"-"},"content":" [minTime]\u003d\"minTimeForResponseVisible\" [time]\u003d\"model.customResponseVisibleTime\" \u003e\u003c/tm-timepicker\u003e"},{"lineNumber":282,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":283,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":284,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mt-md-2 ms-md-1\"\u003e"},{"lineNumber":285,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":286,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check\"\u003e"},{"lineNumber":287,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class form-check-label\" ngbTooltip\u003d\"Same time as when the session becomes visible to users.\"\u003e"},{"lineNumber":288,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"response-visibility-immediately\" class\u003d\"form-check-input\" type\u003d\"radio\" name\u003d\"responseVisibleRadio\" [value]\u003d\"ResponseVisibleSetting.AT_VISIBLE\" [ngModel]\u003d\"model.responseVisibleSetting\" (ngModelChange)\u003d\"triggerModelChange(\u0027responseVisibleSetting\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e"},{"lineNumber":289,"author":{"gitId":"-"},"content":" Immediately"},{"lineNumber":290,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":291,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":292,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":293,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":294,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row mt-md-2 ms-md-1\"\u003e"},{"lineNumber":295,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12\"\u003e"},{"lineNumber":296,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check\"\u003e"},{"lineNumber":297,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class form-check-label\" ngbTooltip\u003d\"Remember to manually publish the responses for this session later on.\"\u003e"},{"lineNumber":298,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"response-visibility-manually\" class\u003d\"form-check-input\" type\u003d\"radio\" name\u003d\"responseVisibleRadio\" [value]\u003d\"ResponseVisibleSetting.LATER\" [ngModel]\u003d\"model.responseVisibleSetting\" (ngModelChange)\u003d\"triggerModelChange(\u0027responseVisibleSetting\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e"},{"lineNumber":299,"author":{"gitId":"-"},"content":" Not now (publish manually)"},{"lineNumber":300,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":301,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":302,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":303,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":304,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":305,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":306,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":307,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":308,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"!model.hasEmailSettingsPanelExpanded\"\u003e"},{"lineNumber":309,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"text-muted\"\u003eEmails are sent when session opens (within 15 minutes), 24 hrs before session closes and when results are published.\u003c/span\u003e"},{"lineNumber":310,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-change-email\" type\u003d\"button\" class\u003d\"btn btn-link\" (click)\u003d\"triggerModelChange(\u0027hasEmailSettingsPanelExpanded\u0027, true)\" [disabled]\u003d\"!model.isEditable\"\u003e[Change]\u003c/button\u003e"},{"lineNumber":311,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":312,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card border-primary margin-top-20px\" *ngIf\u003d\"model.hasEmailSettingsPanelExpanded\" @collapseAnim\u003e"},{"lineNumber":313,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\"\u003e"},{"lineNumber":314,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 font-bold\"\u003e"},{"lineNumber":315,"author":{"gitId":"-"},"content":" Send emails for"},{"lineNumber":316,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":317,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row ms-md-1 mt-md-3\"\u003e"},{"lineNumber":318,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":319,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check form-check-inline\"\u003e"},{"lineNumber":320,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class form-check-label\" ngbTooltip\u003d\"Notify students when the session is open for submission.\"\u003e"},{"lineNumber":321,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"email-opening\" class\u003d\"form-check-input\" type\u003d\"checkbox\" checked disabled\u003eSession opening reminder"},{"lineNumber":322,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":323,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":324,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":325,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":326,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check form-check-inline\"\u003e"},{"lineNumber":327,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class form-check-label\" ngbTooltip\u003d\"Remind students to submit 24 hours before the end of the session.\"\u003e"},{"lineNumber":328,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"email-closing\" class\u003d\"form-check-input\" type\u003d\"checkbox\" [ngModel]\u003d\"model.isClosingEmailEnabled\" (ngModelChange)\u003d\"triggerModelChange(\u0027isClosingEmailEnabled\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e Session closing reminder"},{"lineNumber":329,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":330,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":331,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":332,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"lineNumber":333,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"form-check form-check-inline\"\u003e"},{"lineNumber":334,"author":{"gitId":"-"},"content":" \u003clabel class\u003d\"ngb-tooltip-class form-check-label\" ngbTooltip\u003d\"Notify students when the session results is published.\"\u003e"},{"lineNumber":335,"author":{"gitId":"-"},"content":" \u003cinput id\u003d\"email-published\" class\u003d\"form-check-input\" type\u003d\"checkbox\" [ngModel]\u003d\"model.isPublishedEmailEnabled\" (ngModelChange)\u003d\"triggerModelChange(\u0027isPublishedEmailEnabled\u0027, $event)\" [disabled]\u003d\"!model.isEditable\"\u003e Results published announcement"},{"lineNumber":336,"author":{"gitId":"-"},"content":" \u003c/label\u003e"},{"lineNumber":337,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":338,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":339,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":340,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":341,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":342,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"row margin-top-20px\"\u003e"},{"lineNumber":343,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"col-12 text-center\"\u003e"},{"lineNumber":344,"author":{"gitId":"-"},"content":" \u003cspan class\u003d\"loader\"\u003e\u003c/span\u003e"},{"lineNumber":345,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.ADD\"\u003e"},{"lineNumber":346,"author":{"gitId":"-"},"content":" \u003cbutton id\u003d\"btn-create-session\" type\u003d\"button\" class\u003d\"btn btn-primary\" [disabled]\u003d\"courseCandidates.length \u003d\u003d\u003d 0 || model.isSaving || !model.feedbackSessionName\" (click)\u003d\"submitFormHandler()\"\u003e"},{"lineNumber":347,"author":{"gitId":"-"},"content":" \u003ctm-ajax-loading *ngIf\u003d\"model.isSaving\"\u003e\u003c/tm-ajax-loading\u003eCreate Feedback Session"},{"lineNumber":348,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":349,"author":{"gitId":"-"},"content":" \u003cp class\u003d\"text-danger margin-top-20px\" *ngIf\u003d\"courseCandidates.length \u003d\u003d\u003d 0\"\u003e\u003cb\u003eYou need to have an active(unarchived) course to create a session!\u003c/b\u003e\u003c/p\u003e"},{"lineNumber":350,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":351,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\"\u003e"},{"lineNumber":352,"author":{"gitId":"-"},"content":" \u003cbutton type\u003d\"button\" class\u003d\"btn btn-success\" [disabled]\u003d\"model.isSaving || !model.isEditable\" *ngIf\u003d\"formMode \u003d\u003d\u003d SessionEditFormMode.EDIT\" (click)\u003d\"submitFormHandler()\"\u003e"},{"lineNumber":353,"author":{"gitId":"-"},"content":" \u003ctm-ajax-loading *ngIf\u003d\"model.isSaving\"\u003e\u003c/tm-ajax-loading\u003eSave Changes"},{"lineNumber":354,"author":{"gitId":"-"},"content":" \u003c/button\u003e"},{"lineNumber":355,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":356,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":357,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":358,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":359,"author":{"gitId":"-"},"content":"\u003c/div\u003e"}],"authorContributionMap":{"nknguyenhc":2,"-":357}},{"path":"src/web/app/pages-instructor/instructor-student-records-page/instructor-student-records-page.component.html","fileType":"html","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003ch1 id\u003d\"records-header\"\u003e{{studentName}}\u0027s Records\u003csmall class\u003d\"text-muted text-break\"\u003e - {{courseId}}\u003c/small\u003e\u003c/h1\u003e"},{"lineNumber":2,"author":{"gitId":"-"},"content":"\u003ch2\u003eRecords in feedback sessions\u003c/h2\u003e"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003ctm-loading-retry [shouldShowRetry]\u003d\"hasStudentResultsLoadingFailed\" [message]\u003d\"\u0027Failed to load student results\u0027\" (retryEvent)\u003d\"loadStudentResults()\"\u003e"},{"lineNumber":4,"author":{"gitId":"-"},"content":" \u003cdiv *tmIsLoading\u003d\"isStudentResultsLoading\"\u003e"},{"lineNumber":5,"author":{"gitId":"-"},"content":" \u003cdiv *ngFor\u003d\"let session of sessionTabs\" class\u003d\"card card-default mb-4\"\u003e"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-header cursor-pointer\" (click)\u003d\"session.isCollapsed \u003d !session.isCollapsed\"\u003e"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003cstrong class\u003d\"text-break\"\u003eFeedback Session: {{ session.feedbackSession.feedbackSessionName }}\u003c/strong\u003e"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-header-btn-toolbar\"\u003e"},{"lineNumber":9,"author":{"gitId":"Tim-Siu"},"content":" \u003ctm-panel-chevron [isExpanded]\u003d\"!session.isCollapsed\" chevronColor\u003d\"black\"\u003e\u003c/tm-panel-chevron\u003e"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"card-body\" *ngIf\u003d\"!session.isCollapsed\" @collapseAnim\u003e"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003ctm-grq-rgq-view-responses *ngIf\u003d\"session.responsesReceivedByStudent.length \u003e 0\""},{"lineNumber":14,"author":{"gitId":"-"},"content":" [session]\u003d\"session.feedbackSession\""},{"lineNumber":15,"author":{"gitId":"-"},"content":" [responses]\u003d\"session.responsesReceivedByStudent\" [groupByTeam]\u003d\"false\" [section]\u003d\"\" [sectionType]\u003d\"\""},{"lineNumber":16,"author":{"gitId":"-"},"content":" [isGrq]\u003d\"false\" [instructorCommentTableModel]\u003d\"instructorCommentTableModel\""},{"lineNumber":17,"author":{"gitId":"-"},"content":" (saveNewCommentEvent)\u003d\"saveNewComment($event, session.feedbackSession.timeZone)\""},{"lineNumber":18,"author":{"gitId":"-"},"content":" (deleteCommentEvent)\u003d\"deleteComment($event)\""},{"lineNumber":19,"author":{"gitId":"-"},"content":" (updateCommentEvent)\u003d\"updateComment($event, session.feedbackSession.timeZone)\""},{"lineNumber":20,"author":{"gitId":"-"},"content":" [isExpandAll]\u003d\"true\"\u003e"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003c/tm-grq-rgq-view-responses\u003e"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"session.responsesReceivedByStudent.length \u003d\u003d\u003d 0\" class\u003d\"mb-3\"\u003e"},{"lineNumber":23,"author":{"gitId":"-"},"content":" No feedback responses for {{studentName}} ({{studentTeam}}) found."},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003ctm-grq-rgq-view-responses *ngIf\u003d\"session.responsesGivenByStudent.length \u003e 0\""},{"lineNumber":26,"author":{"gitId":"-"},"content":" [session]\u003d\"session.feedbackSession\""},{"lineNumber":27,"author":{"gitId":"-"},"content":" [responses]\u003d\"session.responsesGivenByStudent\" [groupByTeam]\u003d\"false\" [section]\u003d\"\" [sectionType]\u003d\"\""},{"lineNumber":28,"author":{"gitId":"-"},"content":" [isGrq]\u003d\"true\" [instructorCommentTableModel]\u003d\"instructorCommentTableModel\""},{"lineNumber":29,"author":{"gitId":"-"},"content":" (saveNewCommentEvent)\u003d\"saveNewComment($event, session.feedbackSession.timeZone)\""},{"lineNumber":30,"author":{"gitId":"-"},"content":" (deleteCommentEvent)\u003d\"deleteComment($event)\""},{"lineNumber":31,"author":{"gitId":"-"},"content":" (updateCommentEvent)\u003d\"updateComment($event, session.feedbackSession.timeZone)\""},{"lineNumber":32,"author":{"gitId":"-"},"content":" [isExpandAll]\u003d\"true\""},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003e\u003c/tm-grq-rgq-view-responses\u003e"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cdiv *ngIf\u003d\"session.responsesGivenByStudent.length \u003d\u003d\u003d 0\"\u003e"},{"lineNumber":35,"author":{"gitId":"-"},"content":" No feedback responses from {{studentName}} ({{studentTeam}}) found."},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":37,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/div\u003e"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/tm-loading-retry\u003e"}],"authorContributionMap":{"-":39,"Tim-Siu":1}}] diff --git a/TEAMMATES_teammates_master/commits.json b/TEAMMATES_teammates_master/commits.json new file mode 100644 index 0000000..0afef9e --- /dev/null +++ b/TEAMMATES_teammates_master/commits.json @@ -0,0 +1 @@ +{"authorDailyContributionsMap":{"xenosf":[],"sopa301":[],"mingyuanc":[],"jingting1412":[],"KevinEyo1":[],"LamJiuFong":[],"yiwen101":[],"jonasongg":[],"domoberzin":[],"asdfghjkxd":[],"yuanxi1":[{"date":"2023-12-28","commitResults":[{"hash":"5de8300549d6b06bd21d38f1d258bdcaebc6c443","isMergeCommit":false,"messageTitle":"[#12663] Instructor\u0027s Student Records Page: Tooltips for comments (#12676)","messageBody":"* Fix comment tooltip causing the text to go into next line\r\n\r\n* Update snapshot test\r\n\r\n---------\r\n\r\nCo-authored-by: YX Z \u003cyxz@YXs-MacBook-Air-2.local\u003e\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e\r\nCo-authored-by: Jason Qiu \u003cjason_qiu@hotmail.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":2}}}]}],"supermii2":[],"marquestye":[],"nknguyenhc":[{"date":"2023-12-25","commitResults":[{"hash":"a64f6605aec32e664527d017f7e2d9946010d4b2","isMergeCommit":false,"messageTitle":"[#12654] Instructor Edit Session Page: Bug in Grace Period Tooltip (#12675)","messageBody":"* Fix grace period tooltip\r\n\r\n* Update test cases\r\n\r\n---------\r\n\r\nCo-authored-by: Wei Qing \u003c48304907+weiquu@users.noreply.github.com\u003e\r\nCo-authored-by: Dominic Lim \u003c46486515+domlimm@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"html":{"insertions":2,"deletions":2}}}]}],"Arif-Khalid":[],"NereusWB922":[],"dishenggg":[],"MadLamprey":[],"Tim-Siu":[{"date":"2023-12-22","commitResults":[{"hash":"fdfdded21b473d79468a263a61b32985cce72ed3","isMergeCommit":false,"messageTitle":"[#3942] Instructor\u0027s Student Records Page: Feedback session panel chevron barely visible #12668 (#12673)","messageBody":"* Fix chevron color issue\r\n\r\n* Replace property binding with static value assignation","fileTypesAndContributionMap":{"html":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"xenosf":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"sopa301":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"mingyuanc":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"jingting1412":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"KevinEyo1":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"LamJiuFong":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"yiwen101":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"jonasongg":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"domoberzin":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"asdfghjkxd":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"yuanxi1":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":2,"ts":0},"supermii2":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"marquestye":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"nknguyenhc":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":2,"ts":0},"Arif-Khalid":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"NereusWB922":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"dishenggg":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"MadLamprey":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":0,"ts":0},"Tim-Siu":{"java":0,"js":0,"scss":0,"md":0,"py":0,"tag":0,"html":1,"ts":0}},"authorContributionVariance":{"xenosf":0.0,"sopa301":0.0,"mingyuanc":0.0,"jingting1412":0.0,"KevinEyo1":0.0,"LamJiuFong":0.0,"yiwen101":0.0,"jonasongg":0.0,"domoberzin":0.0,"asdfghjkxd":0.0,"yuanxi1":0.55102044,"supermii2":0.0,"marquestye":0.0,"nknguyenhc":0.5510205,"Arif-Khalid":0.0,"NereusWB922":0.0,"dishenggg":0.0,"MadLamprey":0.0,"Tim-Siu":0.13775513},"authorDisplayNameMap":{"xenosf":"XENO..NONG","sopa301":"POON..RYAN","mingyuanc":"CHIN..YUAN","jingting1412":"WANG..TING","KevinEyo1":"EYO ..EVIN","LamJiuFong":"LAM ..FONG","yiwen101":"WANG..IWEN","jonasongg":"JONA.. WEI","domoberzin":"DOMI.. GIN","asdfghjkxd":"GEOR.. YAO","yuanxi1":"ZHU ..ANXI","supermii2":"ALVI..S NG","marquestye":"TYE ..QUES","nknguyenhc":"NGUY..UYEN","Arif-Khalid":"ARIF..ALID","NereusWB922":"NERE.. BIN","dishenggg":"YEO ..HENG","MadLamprey":"MISR..ITYA","Tim-Siu":"XU S..UYAO"}} diff --git a/archive.zip b/archive.zip new file mode 100644 index 0000000..7b480fb Binary files /dev/null and b/archive.zip differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..cce77ba Binary files /dev/null and b/favicon.ico differ diff --git a/fonts/titillium-web-all-400-normal.b2204c06.woff b/fonts/titillium-web-all-400-normal.b2204c06.woff new file mode 100644 index 0000000..761b03f Binary files /dev/null and b/fonts/titillium-web-all-400-normal.b2204c06.woff differ diff --git a/fonts/titillium-web-latin-400-normal.28c7a39b.woff2 b/fonts/titillium-web-latin-400-normal.28c7a39b.woff2 new file mode 100644 index 0000000..207b9e4 Binary files /dev/null and b/fonts/titillium-web-latin-400-normal.28c7a39b.woff2 differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..c0d9dad --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + + RepoSense Report + + + +
+ + + diff --git a/js/chunk-vendors.js b/js/chunk-vendors.js new file mode 100644 index 0000000..fd4fd0a --- /dev/null +++ b/js/chunk-vendors.js @@ -0,0 +1,5492 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunkreposense"] = self["webpackChunkreposense"] || []).push([["chunk-vendors"],{ + +/***/ "./node_modules/@fortawesome/vue-fontawesome/index.es.js": +/*!***************************************************************!*\ + !*** ./node_modules/@fortawesome/vue-fontawesome/index.es.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FontAwesomeIcon\": () => (/* binding */ FontAwesomeIcon),\n/* harmony export */ \"FontAwesomeLayers\": () => (/* binding */ FontAwesomeLayers),\n/* harmony export */ \"FontAwesomeLayersText\": () => (/* binding */ FontAwesomeLayersText)\n/* harmony export */ });\n/* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ \"./node_modules/@fortawesome/fontawesome-svg-core/index.mjs\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};\n\nvar humps$1 = {exports: {}};\n\n(function (module) {\n(function(global) {\n\n\t var _processKeys = function(convert, obj, options) {\n\t if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\n\t return obj;\n\t }\n\n\t var output,\n\t i = 0,\n\t l = 0;\n\n\t if(_isArray(obj)) {\n\t output = [];\n\t for(l=obj.length; i} classes The class list to convert.\n * @returns {Object}\n */\n\n\nfunction classToObject(classes) {\n return classes.split(/\\s+/).reduce(function (output, className) {\n output[className] = true;\n return output;\n }, {});\n}\n/**\n * Converts a FontAwesome abstract element of an icon into a Vue VNode.\n * @param {AbstractElement | String} abstractElement The element to convert.\n * @param {Object} props The user-defined props.\n * @param {Object} attrs The user-defined native HTML attributes.\n * @returns {VNode}\n */\n\n\nfunction convert(abstractElement) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // If the abstract element is a string, we'll just return a string render function\n if (typeof abstractElement === 'string') {\n return abstractElement;\n } // Converting abstract element children into Vue VNodes\n\n\n var children = (abstractElement.children || []).map(function (child) {\n return convert(child);\n }); // Converting abstract element attributes into valid Vue format\n\n var mixins = Object.keys(abstractElement.attributes || {}).reduce(function (mixins, key) {\n var value = abstractElement.attributes[key];\n\n switch (key) {\n case 'class':\n mixins.class = classToObject(value);\n break;\n\n case 'style':\n mixins.style = styleToObject(value);\n break;\n\n default:\n mixins.attrs[key] = value;\n }\n\n return mixins;\n }, {\n attrs: {},\n class: {},\n style: {}\n }); // Now, we'll return the VNode\n\n attrs.class;\n var _attrs$style = attrs.style,\n aStyle = _attrs$style === void 0 ? {} : _attrs$style,\n otherAttrs = _objectWithoutProperties(attrs, _excluded);\n\n return (0,vue__WEBPACK_IMPORTED_MODULE_1__.h)(abstractElement.tag, _objectSpread2(_objectSpread2(_objectSpread2({}, props), {}, {\n class: mixins.class,\n style: _objectSpread2(_objectSpread2({}, mixins.style), aStyle)\n }, mixins.attrs), otherAttrs), children);\n}\n\nvar PRODUCTION = false;\n\ntry {\n PRODUCTION = \"development\" === 'production';\n} catch (e) {}\n\nfunction log () {\n if (!PRODUCTION && console && typeof console.error === 'function') {\n var _console;\n\n (_console = console).error.apply(_console, arguments);\n }\n}\n\nfunction objectWithKey(key, value) {\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\nfunction classList(props) {\n var _classes;\n\n var classes = (_classes = {\n 'fa-spin': props.spin,\n 'fa-pulse': props.pulse,\n 'fa-fw': props.fixedWidth,\n 'fa-border': props.border,\n 'fa-li': props.listItem,\n 'fa-inverse': props.inverse,\n 'fa-flip': props.flip === true,\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\n }, _defineProperty(_classes, \"fa-\".concat(props.size), props.size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \"fa-pull-\".concat(props.pull), props.pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _defineProperty(_classes, 'fa-bounce', props.bounce), _defineProperty(_classes, 'fa-shake', props.shake), _defineProperty(_classes, 'fa-beat', props.beat), _defineProperty(_classes, 'fa-fade', props.fade), _defineProperty(_classes, 'fa-beat-fade', props.beatFade), _defineProperty(_classes, 'fa-flash', props.flash), _defineProperty(_classes, 'fa-spin-pulse', props.spinPulse), _defineProperty(_classes, 'fa-spin-reverse', props.spinReverse), _classes);\n return Object.keys(classes).map(function (key) {\n return classes[key] ? key : null;\n }).filter(function (key) {\n return key;\n });\n}\n\nfunction normalizeIconArgs(icon) {\n if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) {\n return icon;\n }\n\n if (_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.parse.icon) {\n return _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.parse.icon(icon);\n }\n\n if (icon === null) {\n return null;\n }\n\n if (_typeof(icon) === 'object' && icon.prefix && icon.iconName) {\n return icon;\n }\n\n if (Array.isArray(icon) && icon.length === 2) {\n return {\n prefix: icon[0],\n iconName: icon[1]\n };\n }\n\n if (typeof icon === 'string') {\n return {\n prefix: 'fas',\n iconName: icon\n };\n }\n}\n\nvar FontAwesomeIcon = (0,vue__WEBPACK_IMPORTED_MODULE_1__.defineComponent)({\n name: 'FontAwesomeIcon',\n props: {\n border: {\n type: Boolean,\n default: false\n },\n fixedWidth: {\n type: Boolean,\n default: false\n },\n flip: {\n type: [Boolean, String],\n default: false,\n validator: function validator(value) {\n return [true, false, 'horizontal', 'vertical', 'both'].indexOf(value) > -1;\n }\n },\n icon: {\n type: [Object, Array, String],\n required: true\n },\n mask: {\n type: [Object, Array, String],\n default: null\n },\n listItem: {\n type: Boolean,\n default: false\n },\n pull: {\n type: String,\n default: null,\n validator: function validator(value) {\n return ['right', 'left'].indexOf(value) > -1;\n }\n },\n pulse: {\n type: Boolean,\n default: false\n },\n rotation: {\n type: [String, Number],\n default: null,\n validator: function validator(value) {\n return [90, 180, 270].indexOf(Number.parseInt(value, 10)) > -1;\n }\n },\n swapOpacity: {\n type: Boolean,\n default: false\n },\n size: {\n type: String,\n default: null,\n validator: function validator(value) {\n return ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x'].indexOf(value) > -1;\n }\n },\n spin: {\n type: Boolean,\n default: false\n },\n transform: {\n type: [String, Object],\n default: null\n },\n symbol: {\n type: [Boolean, String],\n default: false\n },\n title: {\n type: String,\n default: null\n },\n inverse: {\n type: Boolean,\n default: false\n },\n bounce: {\n type: Boolean,\n default: false\n },\n shake: {\n type: Boolean,\n default: false\n },\n beat: {\n type: Boolean,\n default: false\n },\n fade: {\n type: Boolean,\n default: false\n },\n beatFade: {\n type: Boolean,\n default: false\n },\n flash: {\n type: Boolean,\n default: false\n },\n spinPulse: {\n type: Boolean,\n default: false\n },\n spinReverse: {\n type: Boolean,\n default: false\n }\n },\n setup: function setup(props, _ref) {\n var attrs = _ref.attrs;\n var icon$1 = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return normalizeIconArgs(props.icon);\n });\n var classes = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return objectWithKey('classes', classList(props));\n });\n var transform = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return objectWithKey('transform', typeof props.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.parse.transform(props.transform) : props.transform);\n });\n var mask = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return objectWithKey('mask', normalizeIconArgs(props.mask));\n });\n var renderedIcon = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return (0,_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.icon)(icon$1.value, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes.value), transform.value), mask.value), {}, {\n symbol: props.symbol,\n title: props.title\n }));\n });\n (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(renderedIcon, function (value) {\n if (!value) {\n return log('Could not find one or more icon(s)', icon$1.value, mask.value);\n }\n }, {\n immediate: true\n });\n var vnode = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return renderedIcon.value ? convert(renderedIcon.value.abstract[0], {}, attrs) : null;\n });\n return function () {\n return vnode.value;\n };\n }\n});\n\nvar FontAwesomeLayers = (0,vue__WEBPACK_IMPORTED_MODULE_1__.defineComponent)({\n name: 'FontAwesomeLayers',\n props: {\n fixedWidth: {\n type: Boolean,\n default: false\n }\n },\n setup: function setup(props, _ref) {\n var slots = _ref.slots;\n var familyPrefix = _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.config.familyPrefix;\n var className = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return [\"\".concat(familyPrefix, \"-layers\")].concat(_toConsumableArray(props.fixedWidth ? [\"\".concat(familyPrefix, \"-fw\")] : []));\n });\n return function () {\n return (0,vue__WEBPACK_IMPORTED_MODULE_1__.h)('div', {\n class: className.value\n }, slots.default ? slots.default() : []);\n };\n }\n});\n\nvar FontAwesomeLayersText = (0,vue__WEBPACK_IMPORTED_MODULE_1__.defineComponent)({\n name: 'FontAwesomeLayersText',\n props: {\n value: {\n type: [String, Number],\n default: ''\n },\n transform: {\n type: [String, Object],\n default: null\n },\n counter: {\n type: Boolean,\n default: false\n },\n position: {\n type: String,\n default: null,\n validator: function validator(value) {\n return ['bottom-left', 'bottom-right', 'top-left', 'top-right'].indexOf(value) > -1;\n }\n }\n },\n setup: function setup(props, _ref) {\n var attrs = _ref.attrs;\n var familyPrefix = _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.config.familyPrefix;\n var classes = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return objectWithKey('classes', [].concat(_toConsumableArray(props.counter ? [\"\".concat(familyPrefix, \"-layers-counter\")] : []), _toConsumableArray(props.position ? [\"\".concat(familyPrefix, \"-layers-\").concat(props.position)] : [])));\n });\n var transform = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return objectWithKey('transform', typeof props.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.parse.transform(props.transform) : props.transform);\n });\n var abstractElement = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n var _text = (0,_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__.text)(props.value.toString(), _objectSpread2(_objectSpread2({}, transform.value), classes.value)),\n abstract = _text.abstract;\n\n if (props.counter) {\n abstract[0].attributes.class = abstract[0].attributes.class.replace('fa-layers-text', '');\n }\n\n return abstract[0];\n });\n var vnode = (0,vue__WEBPACK_IMPORTED_MODULE_1__.computed)(function () {\n return convert(abstractElement.value, {}, attrs);\n });\n return function () {\n return vnode.value;\n };\n }\n});\n\n\n\n\n//# sourceURL=webpack://reposense/./node_modules/@fortawesome/vue-fontawesome/index.es.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/devtools-api/lib/esm/const.js": +/*!*********************************************************!*\ + !*** ./node_modules/@vue/devtools-api/lib/esm/const.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HOOK_PLUGIN_SETTINGS_SET\": () => (/* binding */ HOOK_PLUGIN_SETTINGS_SET),\n/* harmony export */ \"HOOK_SETUP\": () => (/* binding */ HOOK_SETUP)\n/* harmony export */ });\nconst HOOK_SETUP = 'devtools-plugin:setup';\nconst HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/devtools-api/lib/esm/const.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/devtools-api/lib/esm/env.js": +/*!*******************************************************!*\ + !*** ./node_modules/@vue/devtools-api/lib/esm/env.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getDevtoolsGlobalHook\": () => (/* binding */ getDevtoolsGlobalHook),\n/* harmony export */ \"getTarget\": () => (/* binding */ getTarget),\n/* harmony export */ \"isProxyAvailable\": () => (/* binding */ isProxyAvailable)\n/* harmony export */ });\nfunction getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nfunction getTarget() {\n // @ts-ignore\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof __webpack_require__.g !== 'undefined'\n ? __webpack_require__.g\n : {};\n}\nconst isProxyAvailable = typeof Proxy === 'function';\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/devtools-api/lib/esm/env.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/devtools-api/lib/esm/index.js": +/*!*********************************************************!*\ + !*** ./node_modules/@vue/devtools-api/lib/esm/index.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isPerformanceSupported\": () => (/* reexport safe */ _time_js__WEBPACK_IMPORTED_MODULE_0__.isPerformanceSupported),\n/* harmony export */ \"now\": () => (/* reexport safe */ _time_js__WEBPACK_IMPORTED_MODULE_0__.now),\n/* harmony export */ \"setupDevtoolsPlugin\": () => (/* binding */ setupDevtoolsPlugin)\n/* harmony export */ });\n/* harmony import */ var _env_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./env.js */ \"./node_modules/@vue/devtools-api/lib/esm/env.js\");\n/* harmony import */ var _const_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./const.js */ \"./node_modules/@vue/devtools-api/lib/esm/const.js\");\n/* harmony import */ var _proxy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./proxy.js */ \"./node_modules/@vue/devtools-api/lib/esm/proxy.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time.js */ \"./node_modules/@vue/devtools-api/lib/esm/time.js\");\n\n\n\n\n\n\nfunction setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = (0,_env_js__WEBPACK_IMPORTED_MODULE_1__.getTarget)();\n const hook = (0,_env_js__WEBPACK_IMPORTED_MODULE_1__.getDevtoolsGlobalHook)();\n const enableProxy = _env_js__WEBPACK_IMPORTED_MODULE_1__.isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(_const_js__WEBPACK_IMPORTED_MODULE_2__.HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new _proxy_js__WEBPACK_IMPORTED_MODULE_3__.ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy)\n setupFn(proxy.proxiedTarget);\n }\n}\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/devtools-api/lib/esm/index.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/devtools-api/lib/esm/proxy.js": +/*!*********************************************************!*\ + !*** ./node_modules/@vue/devtools-api/lib/esm/proxy.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ApiProxy\": () => (/* binding */ ApiProxy)\n/* harmony export */ });\n/* harmony import */ var _const_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./const.js */ \"./node_modules/@vue/devtools-api/lib/esm/const.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time.js */ \"./node_modules/@vue/devtools-api/lib/esm/time.js\");\n\n\nclass ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return (0,_time_js__WEBPACK_IMPORTED_MODULE_0__.now)();\n },\n };\n if (hook) {\n hook.on(_const_js__WEBPACK_IMPORTED_MODULE_1__.HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/devtools-api/lib/esm/proxy.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/devtools-api/lib/esm/time.js": +/*!********************************************************!*\ + !*** ./node_modules/@vue/devtools-api/lib/esm/time.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isPerformanceSupported\": () => (/* binding */ isPerformanceSupported),\n/* harmony export */ \"now\": () => (/* binding */ now)\n/* harmony export */ });\nlet supported;\nlet perf;\nfunction isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof __webpack_require__.g !== 'undefined' && ((_a = __webpack_require__.g.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = __webpack_require__.g.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nfunction now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/devtools-api/lib/esm/time.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EffectScope\": () => (/* binding */ EffectScope),\n/* harmony export */ \"ITERATE_KEY\": () => (/* binding */ ITERATE_KEY),\n/* harmony export */ \"ReactiveEffect\": () => (/* binding */ ReactiveEffect),\n/* harmony export */ \"computed\": () => (/* binding */ computed),\n/* harmony export */ \"customRef\": () => (/* binding */ customRef),\n/* harmony export */ \"deferredComputed\": () => (/* binding */ deferredComputed),\n/* harmony export */ \"effect\": () => (/* binding */ effect),\n/* harmony export */ \"effectScope\": () => (/* binding */ effectScope),\n/* harmony export */ \"enableTracking\": () => (/* binding */ enableTracking),\n/* harmony export */ \"getCurrentScope\": () => (/* binding */ getCurrentScope),\n/* harmony export */ \"isProxy\": () => (/* binding */ isProxy),\n/* harmony export */ \"isReactive\": () => (/* binding */ isReactive),\n/* harmony export */ \"isReadonly\": () => (/* binding */ isReadonly),\n/* harmony export */ \"isRef\": () => (/* binding */ isRef),\n/* harmony export */ \"isShallow\": () => (/* binding */ isShallow),\n/* harmony export */ \"markRaw\": () => (/* binding */ markRaw),\n/* harmony export */ \"onScopeDispose\": () => (/* binding */ onScopeDispose),\n/* harmony export */ \"pauseTracking\": () => (/* binding */ pauseTracking),\n/* harmony export */ \"proxyRefs\": () => (/* binding */ proxyRefs),\n/* harmony export */ \"reactive\": () => (/* binding */ reactive),\n/* harmony export */ \"readonly\": () => (/* binding */ readonly),\n/* harmony export */ \"ref\": () => (/* binding */ ref),\n/* harmony export */ \"resetTracking\": () => (/* binding */ resetTracking),\n/* harmony export */ \"shallowReactive\": () => (/* binding */ shallowReactive),\n/* harmony export */ \"shallowReadonly\": () => (/* binding */ shallowReadonly),\n/* harmony export */ \"shallowRef\": () => (/* binding */ shallowRef),\n/* harmony export */ \"stop\": () => (/* binding */ stop),\n/* harmony export */ \"toRaw\": () => (/* binding */ toRaw),\n/* harmony export */ \"toRef\": () => (/* binding */ toRef),\n/* harmony export */ \"toRefs\": () => (/* binding */ toRefs),\n/* harmony export */ \"track\": () => (/* binding */ track),\n/* harmony export */ \"trigger\": () => (/* binding */ trigger),\n/* harmony export */ \"triggerRef\": () => (/* binding */ triggerRef),\n/* harmony export */ \"unref\": () => (/* binding */ unref)\n/* harmony export */ });\n/* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/shared */ \"./node_modules/@vue/shared/dist/shared.esm-bundler.js\");\n\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index =\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n get active() {\n return this._active;\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n }\n finally {\n activeEffectScope = currentEffectScope;\n }\n }\n else if ((true)) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this._active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n }\n else if ((true)) {\n warn(`onScopeDispose() is called when there is no active effect scope` +\n ` to be associated with.`);\n }\n}\n\nconst createDep = (effects) => {\n const dep = new Set(effects);\n dep.w = 0;\n dep.n = 0;\n return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].w |= trackOpBit; // set was tracked\n }\n }\n};\nconst finalizeDepMarkers = (effect) => {\n const { deps } = effect;\n if (deps.length) {\n let ptr = 0;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (wasTracked(dep) && !newTracked(dep)) {\n dep.delete(effect);\n }\n else {\n deps[ptr++] = dep;\n }\n // clear bits\n dep.w &= ~trackOpBit;\n dep.n &= ~trackOpBit;\n }\n deps.length = ptr;\n }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol(( true) ? 'iterate' : 0);\nconst MAP_KEY_ITERATE_KEY = Symbol(( true) ? 'Map key iterate' : 0);\nclass ReactiveEffect {\n constructor(fn, scheduler = null, scope) {\n this.fn = fn;\n this.scheduler = scheduler;\n this.active = true;\n this.deps = [];\n this.parent = undefined;\n recordEffectScope(this, scope);\n }\n run() {\n if (!this.active) {\n return this.fn();\n }\n let parent = activeEffect;\n let lastShouldTrack = shouldTrack;\n while (parent) {\n if (parent === this) {\n return;\n }\n parent = parent.parent;\n }\n try {\n this.parent = activeEffect;\n activeEffect = this;\n shouldTrack = true;\n trackOpBit = 1 << ++effectTrackDepth;\n if (effectTrackDepth <= maxMarkerBits) {\n initDepMarkers(this);\n }\n else {\n cleanupEffect(this);\n }\n return this.fn();\n }\n finally {\n if (effectTrackDepth <= maxMarkerBits) {\n finalizeDepMarkers(this);\n }\n trackOpBit = 1 << --effectTrackDepth;\n activeEffect = this.parent;\n shouldTrack = lastShouldTrack;\n this.parent = undefined;\n if (this.deferStop) {\n this.stop();\n }\n }\n }\n stop() {\n // stopped while running itself - defer the cleanup\n if (activeEffect === this) {\n this.deferStop = true;\n }\n else if (this.active) {\n cleanupEffect(this);\n if (this.onStop) {\n this.onStop();\n }\n this.active = false;\n }\n }\n}\nfunction cleanupEffect(effect) {\n const { deps } = effect;\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect);\n }\n deps.length = 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect) {\n fn = fn.effect.fn;\n }\n const _effect = new ReactiveEffect(fn);\n if (options) {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)(_effect, options);\n if (options.scope)\n recordEffectScope(_effect, options.scope);\n }\n if (!options || !options.lazy) {\n _effect.run();\n }\n const runner = _effect.run.bind(_effect);\n runner.effect = _effect;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n if (shouldTrack && activeEffect) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, (depsMap = new Map()));\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, (dep = createDep()));\n }\n const eventInfo = ( true)\n ? { effect: activeEffect, target, type, key }\n : 0;\n trackEffects(dep, eventInfo);\n }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n let shouldTrack = false;\n if (effectTrackDepth <= maxMarkerBits) {\n if (!newTracked(dep)) {\n dep.n |= trackOpBit; // set newly tracked\n shouldTrack = !wasTracked(dep);\n }\n }\n else {\n // Full cleanup mode.\n shouldTrack = !dep.has(activeEffect);\n }\n if (shouldTrack) {\n dep.add(activeEffect);\n activeEffect.deps.push(dep);\n if (( true) && activeEffect.onTrack) {\n activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n // never been tracked\n return;\n }\n let deps = [];\n if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n // collection being cleared\n // trigger all effects for target\n deps = [...depsMap.values()];\n }\n else if (key === 'length' && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key) => {\n if (key === 'length' || key >= newLength) {\n deps.push(dep);\n }\n });\n }\n else {\n // schedule runs for SET | ADD | DELETE\n if (key !== void 0) {\n deps.push(depsMap.get(key));\n }\n // also run for iteration key on ADD | DELETE | Map.SET\n switch (type) {\n case \"add\" /* TriggerOpTypes.ADD */:\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key)) {\n // new index added to array -> length changes\n deps.push(depsMap.get('length'));\n }\n break;\n case \"delete\" /* TriggerOpTypes.DELETE */:\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\" /* TriggerOpTypes.SET */:\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n const eventInfo = ( true)\n ? { target, type, key, newValue, oldValue, oldTarget }\n : 0;\n if (deps.length === 1) {\n if (deps[0]) {\n if ((true)) {\n triggerEffects(deps[0], eventInfo);\n }\n else {}\n }\n }\n else {\n const effects = [];\n for (const dep of deps) {\n if (dep) {\n effects.push(...dep);\n }\n }\n if ((true)) {\n triggerEffects(createDep(effects), eventInfo);\n }\n else {}\n }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n // spread into array for stabilization\n const effects = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(dep) ? dep : [...dep];\n for (const effect of effects) {\n if (effect.computed) {\n triggerEffect(effect, debuggerEventExtraInfo);\n }\n }\n for (const effect of effects) {\n if (!effect.computed) {\n triggerEffect(effect, debuggerEventExtraInfo);\n }\n }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n if (effect !== activeEffect || effect.allowRecurse) {\n if (( true) && effect.onTrigger) {\n effect.onTrigger((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)({ effect }, debuggerEventExtraInfo));\n }\n if (effect.scheduler) {\n effect.scheduler();\n }\n else {\n effect.run();\n }\n }\n}\nfunction getDepFromReactive(object, key) {\n var _a;\n return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.makeMap)(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n // function\n .filter(key => key !== 'arguments' && key !== 'caller')\n .map(key => Symbol[key])\n .filter(_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n instrumentations[key] = function (...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n }\n // we run the method using the original args first (which may be reactive)\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n // if that didn't work, run it again using raw values.\n return arr[key](...args.map(toRaw));\n }\n else {\n return res;\n }\n };\n });\n ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n instrumentations[key] = function (...args) {\n pauseTracking();\n const res = toRaw(this)[key].apply(this, args);\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction hasOwnProperty(key) {\n const obj = toRaw(this);\n track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n return function get(target, key, receiver) {\n if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n return !isReadonly;\n }\n else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n return isReadonly;\n }\n else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n return shallow;\n }\n else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n receiver ===\n (isReadonly\n ? shallow\n ? shallowReadonlyMap\n : readonlyMap\n : shallow\n ? shallowReactiveMap\n : reactiveMap).get(target)) {\n return target;\n }\n const targetIsArray = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target);\n if (!isReadonly) {\n if (targetIsArray && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n if (key === 'hasOwnProperty') {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(target, key, receiver);\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly) {\n track(target, \"get\" /* TrackOpTypes.GET */, key);\n }\n if (shallow) {\n return res;\n }\n if (isRef(res)) {\n // ref unwrapping - skip unwrap for Array + integer key.\n return targetIsArray && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key) ? res : res.value;\n }\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(res)) {\n // Convert returned value into a proxy as well. we do the isObject check\n // here to avoid invalid value warning. Also need to lazy access readonly\n // and reactive here to avoid circular dependency.\n return isReadonly ? readonly(res) : reactive(res);\n }\n return res;\n };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n return function set(target, key, value, receiver) {\n let oldValue = target[key];\n if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n return false;\n }\n if (!shallow) {\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) && isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n }\n const hadKey = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(key)\n ? Number(key) < target.length\n : (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(target, key);\n const result = Reflect.set(target, key, value, receiver);\n // don't trigger if target is something up in the prototype chain of original\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(value, oldValue)) {\n trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n }\n }\n return result;\n };\n}\nfunction deleteProperty(target, key) {\n const hadKey = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n }\n return result;\n}\nfunction has$1(target, key) {\n const result = Reflect.has(target, key);\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) || !builtInSymbols.has(key)) {\n track(target, \"has\" /* TrackOpTypes.HAS */, key);\n }\n return result;\n}\nfunction ownKeys(target) {\n track(target, \"iterate\" /* TrackOpTypes.ITERATE */, (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(target) ? 'length' : ITERATE_KEY);\n return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n get: get$1,\n set: set$1,\n deleteProperty,\n has: has$1,\n ownKeys\n};\nconst readonlyHandlers = {\n get: readonlyGet,\n set(target, key) {\n if ((true)) {\n warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n },\n deleteProperty(target, key) {\n if ((true)) {\n warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)({}, mutableHandlers, {\n get: shallowGet,\n set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.extend)({}, readonlyHandlers, {\n get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n // #1772: readonly(reactive(Map)) should return readonly + reactive version\n // of the value\n target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n }\n track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n }\n else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n }\n else if (target !== rawTarget) {\n // #3602 readonly(reactive(Map))\n // ensure that the nested reactive `Map` can do tracking for itself\n target.get(key);\n }\n}\nfunction has(key, isReadonly = false) {\n const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n }\n track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n }\n return key === rawKey\n ? target.has(key)\n : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n }\n return this;\n}\nfunction set(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n }\n else if ((true)) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(value, oldValue)) {\n trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n }\n else if ((true)) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : undefined;\n // forward the operation before queueing reactions\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = ( true)\n ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(target)\n ? new Map(target)\n : new Set(target)\n : 0;\n // forward the operation before queueing reactions\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n return target.forEach((value, key) => {\n // important: make sure the callback is\n // 1. invoked with the reactive map as `this` and 3rd arg\n // 2. the value received should be a corresponding reactive/readonly.\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function (...args) {\n const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const targetIsMap = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isMap)(rawTarget);\n const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n const isKeyOnly = method === 'keys' && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly &&\n track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n // return a wrapped iterator which returns observed versions of the\n // values emitted from the real iterator\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done\n ? { value, done }\n : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function (...args) {\n if ((true)) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n console.warn(`${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.capitalize)(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n }\n return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations = {\n get(key) {\n return get(this, key);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations = {\n get(key) {\n return get(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations = {\n get(key) {\n return get(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations = {\n get(key) {\n return get(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n iteratorMethods.forEach(method => {\n mutableInstrumentations[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n shallowInstrumentations[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n });\n return [\n mutableInstrumentations,\n readonlyInstrumentations,\n shallowInstrumentations,\n shallowReadonlyInstrumentations\n ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow\n ? isReadonly\n ? shallowReadonlyInstrumentations\n : shallowInstrumentations\n : isReadonly\n ? readonlyInstrumentations\n : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n return !isReadonly;\n }\n else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n return isReadonly;\n }\n else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n return target;\n }\n return Reflect.get((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasOwn)(instrumentations, key) && key in target\n ? instrumentations\n : target, key, receiver);\n };\n}\nconst mutableCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.toRawType)(target);\n console.warn(`Reactive ${type} contains both the raw and reactive ` +\n `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n `which can lead to inconsistencies. ` +\n `Avoid differentiating between the raw and reactive versions ` +\n `of an object and only use the reactive version if possible.`);\n }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case 'Object':\n case 'Array':\n return 1 /* TargetType.COMMON */;\n case 'Map':\n case 'Set':\n case 'WeakMap':\n case 'WeakSet':\n return 2 /* TargetType.COLLECTION */;\n default:\n return 0 /* TargetType.INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n ? 0 /* TargetType.INVALID */\n : targetTypeMap((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.toRawType)(value));\n}\nfunction reactive(target) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(target)) {\n if ((true)) {\n console.warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n // target is already a Proxy, return it.\n // exception: calling readonly() on a reactive object\n if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n return target;\n }\n // target already has corresponding Proxy\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n // only specific value types can be observed.\n const targetType = getTargetType(target);\n if (targetType === 0 /* TargetType.INVALID */) {\n return target;\n }\n const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.def)(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n return value;\n}\nconst toReactive = (value) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) ? reactive(value) : value;\nconst toReadonly = (value) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n if (shouldTrack && activeEffect) {\n ref = toRaw(ref);\n if ((true)) {\n trackEffects(ref.dep || (ref.dep = createDep()), {\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n else {}\n }\n}\nfunction triggerRefValue(ref, newVal) {\n ref = toRaw(ref);\n const dep = ref.dep;\n if (dep) {\n if ((true)) {\n triggerEffects(dep, {\n target: ref,\n type: \"set\" /* TriggerOpTypes.SET */,\n key: 'value',\n newValue: newVal\n });\n }\n else {}\n }\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, __v_isShallow) {\n this.__v_isShallow = __v_isShallow;\n this.dep = undefined;\n this.__v_isRef = true;\n this._rawValue = __v_isShallow ? value : toRaw(value);\n this._value = __v_isShallow ? value : toReactive(value);\n }\n get value() {\n trackRefValue(this);\n return this._value;\n }\n set value(newVal) {\n const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n newVal = useDirectValue ? newVal : toRaw(newVal);\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.hasChanged)(newVal, this._rawValue)) {\n this._rawValue = newVal;\n this._value = useDirectValue ? newVal : toReactive(newVal);\n triggerRefValue(this, newVal);\n }\n }\n}\nfunction triggerRef(ref) {\n triggerRefValue(ref, ( true) ? ref.value : 0);\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs)\n ? objectWithRefs\n : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this.dep = undefined;\n this.__v_isRef = true;\n const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (( true) && !isProxy(object)) {\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this.__v_isRef = true;\n }\n get value() {\n const val = this._object[this._key];\n return val === undefined ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nfunction toRef(object, key, defaultValue) {\n const val = object[key];\n return isRef(val)\n ? val\n : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a$1;\nclass ComputedRefImpl {\n constructor(getter, _setter, isReadonly, isSSR) {\n this._setter = _setter;\n this.dep = undefined;\n this.__v_isRef = true;\n this[_a$1] = false;\n this._dirty = true;\n this.effect = new ReactiveEffect(getter, () => {\n if (!this._dirty) {\n this._dirty = true;\n triggerRefValue(this);\n }\n });\n this.effect.computed = this;\n this.effect.active = this._cacheable = !isSSR;\n this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n }\n get value() {\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n const self = toRaw(this);\n trackRefValue(self);\n if (self._dirty || !self._cacheable) {\n self._dirty = false;\n self._value = self.effect.run();\n }\n return self._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n const onlyGetter = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isFunction)(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = ( true)\n ? () => {\n console.warn('Write operation failed: computed value is readonly');\n }\n : 0;\n }\n else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n if (( true) && debugOptions && !isSSR) {\n cRef.effect.onTrack = debugOptions.onTrack;\n cRef.effect.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nvar _a;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n queue.push(fn);\n if (!queued) {\n queued = true;\n tick.then(flush);\n }\n};\nconst flush = () => {\n for (let i = 0; i < queue.length; i++) {\n queue[i]();\n }\n queue.length = 0;\n queued = false;\n};\nclass DeferredComputedRefImpl {\n constructor(getter) {\n this.dep = undefined;\n this._dirty = true;\n this.__v_isRef = true;\n this[_a] = true;\n let compareTarget;\n let hasCompareTarget = false;\n let scheduled = false;\n this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n if (this.dep) {\n if (computedTrigger) {\n compareTarget = this._value;\n hasCompareTarget = true;\n }\n else if (!scheduled) {\n const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n scheduled = true;\n hasCompareTarget = false;\n scheduler(() => {\n if (this.effect.active && this._get() !== valueToCompare) {\n triggerRefValue(this);\n }\n scheduled = false;\n });\n }\n // chained upstream computeds are notified synchronously to ensure\n // value invalidation in case of sync access; normal effects are\n // deferred to be triggered in scheduler.\n for (const e of this.dep) {\n if (e.computed instanceof DeferredComputedRefImpl) {\n e.scheduler(true /* computedTrigger */);\n }\n }\n }\n this._dirty = true;\n });\n this.effect.computed = this;\n }\n _get() {\n if (this._dirty) {\n this._dirty = false;\n return (this._value = this.effect.run());\n }\n return this._value;\n }\n get value() {\n trackRefValue(this);\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n return toRaw(this)._get();\n }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n return new DeferredComputedRefImpl(getter);\n}\n\n\n\n\n//# sourceURL=webpack://reposense/./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js?"); + +/***/ }), + +/***/ "./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BaseTransition\": () => (/* binding */ BaseTransition),\n/* harmony export */ \"Comment\": () => (/* binding */ Comment),\n/* harmony export */ \"EffectScope\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.EffectScope),\n/* harmony export */ \"Fragment\": () => (/* binding */ Fragment),\n/* harmony export */ \"KeepAlive\": () => (/* binding */ KeepAlive),\n/* harmony export */ \"ReactiveEffect\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ReactiveEffect),\n/* harmony export */ \"Static\": () => (/* binding */ Static),\n/* harmony export */ \"Suspense\": () => (/* binding */ Suspense),\n/* harmony export */ \"Teleport\": () => (/* binding */ Teleport),\n/* harmony export */ \"Text\": () => (/* binding */ Text),\n/* harmony export */ \"assertNumber\": () => (/* binding */ assertNumber),\n/* harmony export */ \"callWithAsyncErrorHandling\": () => (/* binding */ callWithAsyncErrorHandling),\n/* harmony export */ \"callWithErrorHandling\": () => (/* binding */ callWithErrorHandling),\n/* harmony export */ \"camelize\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize),\n/* harmony export */ \"capitalize\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.capitalize),\n/* harmony export */ \"cloneVNode\": () => (/* binding */ cloneVNode),\n/* harmony export */ \"compatUtils\": () => (/* binding */ compatUtils),\n/* harmony export */ \"computed\": () => (/* binding */ computed),\n/* harmony export */ \"createBlock\": () => (/* binding */ createBlock),\n/* harmony export */ \"createCommentVNode\": () => (/* binding */ createCommentVNode),\n/* harmony export */ \"createElementBlock\": () => (/* binding */ createElementBlock),\n/* harmony export */ \"createElementVNode\": () => (/* binding */ createBaseVNode),\n/* harmony export */ \"createHydrationRenderer\": () => (/* binding */ createHydrationRenderer),\n/* harmony export */ \"createPropsRestProxy\": () => (/* binding */ createPropsRestProxy),\n/* harmony export */ \"createRenderer\": () => (/* binding */ createRenderer),\n/* harmony export */ \"createSlots\": () => (/* binding */ createSlots),\n/* harmony export */ \"createStaticVNode\": () => (/* binding */ createStaticVNode),\n/* harmony export */ \"createTextVNode\": () => (/* binding */ createTextVNode),\n/* harmony export */ \"createVNode\": () => (/* binding */ createVNode),\n/* harmony export */ \"customRef\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.customRef),\n/* harmony export */ \"defineAsyncComponent\": () => (/* binding */ defineAsyncComponent),\n/* harmony export */ \"defineComponent\": () => (/* binding */ defineComponent),\n/* harmony export */ \"defineEmits\": () => (/* binding */ defineEmits),\n/* harmony export */ \"defineExpose\": () => (/* binding */ defineExpose),\n/* harmony export */ \"defineProps\": () => (/* binding */ defineProps),\n/* harmony export */ \"devtools\": () => (/* binding */ devtools),\n/* harmony export */ \"effect\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.effect),\n/* harmony export */ \"effectScope\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.effectScope),\n/* harmony export */ \"getCurrentInstance\": () => (/* binding */ getCurrentInstance),\n/* harmony export */ \"getCurrentScope\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope),\n/* harmony export */ \"getTransitionRawChildren\": () => (/* binding */ getTransitionRawChildren),\n/* harmony export */ \"guardReactiveProps\": () => (/* binding */ guardReactiveProps),\n/* harmony export */ \"h\": () => (/* binding */ h),\n/* harmony export */ \"handleError\": () => (/* binding */ handleError),\n/* harmony export */ \"initCustomFormatter\": () => (/* binding */ initCustomFormatter),\n/* harmony export */ \"inject\": () => (/* binding */ inject),\n/* harmony export */ \"isMemoSame\": () => (/* binding */ isMemoSame),\n/* harmony export */ \"isProxy\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isProxy),\n/* harmony export */ \"isReactive\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive),\n/* harmony export */ \"isReadonly\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReadonly),\n/* harmony export */ \"isRef\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef),\n/* harmony export */ \"isRuntimeOnly\": () => (/* binding */ isRuntimeOnly),\n/* harmony export */ \"isShallow\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow),\n/* harmony export */ \"isVNode\": () => (/* binding */ isVNode),\n/* harmony export */ \"markRaw\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.markRaw),\n/* harmony export */ \"mergeDefaults\": () => (/* binding */ mergeDefaults),\n/* harmony export */ \"mergeProps\": () => (/* binding */ mergeProps),\n/* harmony export */ \"nextTick\": () => (/* binding */ nextTick),\n/* harmony export */ \"normalizeClass\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeClass),\n/* harmony export */ \"normalizeProps\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeProps),\n/* harmony export */ \"normalizeStyle\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.normalizeStyle),\n/* harmony export */ \"onActivated\": () => (/* binding */ onActivated),\n/* harmony export */ \"onBeforeMount\": () => (/* binding */ onBeforeMount),\n/* harmony export */ \"onBeforeUnmount\": () => (/* binding */ onBeforeUnmount),\n/* harmony export */ \"onBeforeUpdate\": () => (/* binding */ onBeforeUpdate),\n/* harmony export */ \"onDeactivated\": () => (/* binding */ onDeactivated),\n/* harmony export */ \"onErrorCaptured\": () => (/* binding */ onErrorCaptured),\n/* harmony export */ \"onMounted\": () => (/* binding */ onMounted),\n/* harmony export */ \"onRenderTracked\": () => (/* binding */ onRenderTracked),\n/* harmony export */ \"onRenderTriggered\": () => (/* binding */ onRenderTriggered),\n/* harmony export */ \"onScopeDispose\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.onScopeDispose),\n/* harmony export */ \"onServerPrefetch\": () => (/* binding */ onServerPrefetch),\n/* harmony export */ \"onUnmounted\": () => (/* binding */ onUnmounted),\n/* harmony export */ \"onUpdated\": () => (/* binding */ onUpdated),\n/* harmony export */ \"openBlock\": () => (/* binding */ openBlock),\n/* harmony export */ \"popScopeId\": () => (/* binding */ popScopeId),\n/* harmony export */ \"provide\": () => (/* binding */ provide),\n/* harmony export */ \"proxyRefs\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.proxyRefs),\n/* harmony export */ \"pushScopeId\": () => (/* binding */ pushScopeId),\n/* harmony export */ \"queuePostFlushCb\": () => (/* binding */ queuePostFlushCb),\n/* harmony export */ \"reactive\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.reactive),\n/* harmony export */ \"readonly\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.readonly),\n/* harmony export */ \"ref\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ref),\n/* harmony export */ \"registerRuntimeCompiler\": () => (/* binding */ registerRuntimeCompiler),\n/* harmony export */ \"renderList\": () => (/* binding */ renderList),\n/* harmony export */ \"renderSlot\": () => (/* binding */ renderSlot),\n/* harmony export */ \"resolveComponent\": () => (/* binding */ resolveComponent),\n/* harmony export */ \"resolveDirective\": () => (/* binding */ resolveDirective),\n/* harmony export */ \"resolveDynamicComponent\": () => (/* binding */ resolveDynamicComponent),\n/* harmony export */ \"resolveFilter\": () => (/* binding */ resolveFilter),\n/* harmony export */ \"resolveTransitionHooks\": () => (/* binding */ resolveTransitionHooks),\n/* harmony export */ \"setBlockTracking\": () => (/* binding */ setBlockTracking),\n/* harmony export */ \"setDevtoolsHook\": () => (/* binding */ setDevtoolsHook),\n/* harmony export */ \"setTransitionHooks\": () => (/* binding */ setTransitionHooks),\n/* harmony export */ \"shallowReactive\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReactive),\n/* harmony export */ \"shallowReadonly\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly),\n/* harmony export */ \"shallowRef\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.shallowRef),\n/* harmony export */ \"ssrContextKey\": () => (/* binding */ ssrContextKey),\n/* harmony export */ \"ssrUtils\": () => (/* binding */ ssrUtils),\n/* harmony export */ \"stop\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.stop),\n/* harmony export */ \"toDisplayString\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.toDisplayString),\n/* harmony export */ \"toHandlerKey\": () => (/* reexport safe */ _vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey),\n/* harmony export */ \"toHandlers\": () => (/* binding */ toHandlers),\n/* harmony export */ \"toRaw\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw),\n/* harmony export */ \"toRef\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRef),\n/* harmony export */ \"toRefs\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRefs),\n/* harmony export */ \"transformVNodeArgs\": () => (/* binding */ transformVNodeArgs),\n/* harmony export */ \"triggerRef\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.triggerRef),\n/* harmony export */ \"unref\": () => (/* reexport safe */ _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.unref),\n/* harmony export */ \"useAttrs\": () => (/* binding */ useAttrs),\n/* harmony export */ \"useSSRContext\": () => (/* binding */ useSSRContext),\n/* harmony export */ \"useSlots\": () => (/* binding */ useSlots),\n/* harmony export */ \"useTransitionState\": () => (/* binding */ useTransitionState),\n/* harmony export */ \"version\": () => (/* binding */ version),\n/* harmony export */ \"warn\": () => (/* binding */ warn),\n/* harmony export */ \"watch\": () => (/* binding */ watch),\n/* harmony export */ \"watchEffect\": () => (/* binding */ watchEffect),\n/* harmony export */ \"watchPostEffect\": () => (/* binding */ watchPostEffect),\n/* harmony export */ \"watchSyncEffect\": () => (/* binding */ watchSyncEffect),\n/* harmony export */ \"withAsyncContext\": () => (/* binding */ withAsyncContext),\n/* harmony export */ \"withCtx\": () => (/* binding */ withCtx),\n/* harmony export */ \"withDefaults\": () => (/* binding */ withDefaults),\n/* harmony export */ \"withDirectives\": () => (/* binding */ withDirectives),\n/* harmony export */ \"withMemo\": () => (/* binding */ withMemo),\n/* harmony export */ \"withScopeId\": () => (/* binding */ withScopeId)\n/* harmony export */ });\n/* harmony import */ var _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/reactivity */ \"./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js\");\n/* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/shared */ \"./node_modules/@vue/shared/dist/shared.esm-bundler.js\");\n\n\n\n\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nfunction warn(msg, ...args) {\n if (false)\n {}\n // avoid props formatting or warn handler tracking deps that might be mutated\n // during patch, leading to infinite recursion.\n (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.pauseTracking)();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n msg + args.join(''),\n instance && instance.proxy,\n trace\n .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n .join('\\n'),\n trace\n ]);\n }\n else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n /* istanbul ignore if */\n if (trace.length &&\n // avoid spamming console during tests\n !false) {\n warnArgs.push(`\\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.resetTracking)();\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n // we can't just use the stack because it will be incomplete during updates\n // that did not start from the root. Re-construct the parent chain using\n // instance parent pointers.\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n }\n else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n const close = `>` + postfix;\n return vnode.props\n ? [open, ...formatProps(vnode.props), close]\n : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach(key => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n }\n else if (typeof value === 'number' ||\n typeof value === 'boolean' ||\n value == null) {\n return raw ? value : [`${key}=${value}`];\n }\n else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(value)) {\n value = formatProp(key, (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n }\n else {\n value = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(value);\n return raw ? value : [`${key}=`, value];\n }\n}\n/**\n * @internal\n */\nfunction assertNumber(val, type) {\n if (false)\n {}\n if (val === undefined) {\n return;\n }\n else if (typeof val !== 'number') {\n warn(`${type} is not a valid number - ` + `got ${JSON.stringify(val)}.`);\n }\n else if (isNaN(val)) {\n warn(`${type} is NaN - ` + 'the duration expression might be incorrect.');\n }\n}\n\nconst ErrorTypeStrings = {\n [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n 'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n let res;\n try {\n res = args ? fn(...args) : fn();\n }\n catch (err) {\n handleError(err, instance, type);\n }\n return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isPromise)(res)) {\n res.catch(err => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n if (instance) {\n let cur = instance.parent;\n // the exposed instance is the render proxy to keep it consistent with 2.x\n const exposedInstance = instance.proxy;\n // in production the hook receives only the error code\n const errorInfo = ( true) ? ErrorTypeStrings[type] : 0;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n // app-level handling\n const appErrorHandler = instance.appContext.config.errorHandler;\n if (appErrorHandler) {\n callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n if ((true)) {\n const info = ErrorTypeStrings[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n // crash in dev by default so it's more noticeable\n if (throwInDev) {\n throw err;\n }\n else {\n console.error(err);\n }\n }\n else {}\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /*#__PURE__*/ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\n// #2768\n// Use binary-search to find a suitable position in the queue,\n// so that the queue maintains the increasing order of job's id,\n// which can prevent the job from being skipped and also can avoid repeated patching.\nfunction findInsertionIndex(id) {\n // the start index should be `flushIndex + 1`\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = (start + end) >>> 1;\n const middleJobId = getId(queue[middle]);\n middleJobId < id ? (start = middle + 1) : (end = middle);\n }\n return start;\n}\nfunction queueJob(job) {\n // the dedupe search uses the startIndex argument of Array.includes()\n // by default the search index includes the current job that is being run\n // so it cannot recursively trigger itself again.\n // if the job is a watch() callback, the search will start with a +1 index to\n // allow it recursively trigger itself - it is the user's responsibility to\n // ensure it doesn't end up in an infinite loop.\n if (!queue.length ||\n !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) {\n if (job.id == null) {\n queue.push(job);\n }\n else {\n queue.splice(findInsertionIndex(job.id), 0, job);\n }\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true;\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction invalidateJob(job) {\n const i = queue.indexOf(job);\n if (i > flushIndex) {\n queue.splice(i, 1);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(cb)) {\n if (!activePostFlushCbs ||\n !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) {\n pendingPostFlushCbs.push(cb);\n }\n }\n else {\n // if cb is an array, it is a component lifecycle hook which can only be\n // triggered by a job, which is already deduped in the main queue, so\n // we can skip duplicate check here to improve perf\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(seen, \n// if currently flushing, skip the current job itself\ni = isFlushing ? flushIndex + 1 : 0) {\n if ((true)) {\n seen = seen || new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.pre) {\n if (( true) && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n cb();\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)];\n pendingPostFlushCbs.length = 0;\n // #1947 already has active queue, nested flushPostFlushCbs call\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if ((true)) {\n seen = seen || new Map();\n }\n activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n if (( true) &&\n checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n continue;\n }\n activePostFlushCbs[postFlushIndex]();\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n const diff = getId(a) - getId(b);\n if (diff === 0) {\n if (a.pre && !b.pre)\n return -1;\n if (b.pre && !a.pre)\n return 1;\n }\n return diff;\n};\nfunction flushJobs(seen) {\n isFlushPending = false;\n isFlushing = true;\n if ((true)) {\n seen = seen || new Map();\n }\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child so its render effect will have smaller\n // priority number)\n // 2. If a component is unmounted during a parent component's update,\n // its update can be skipped.\n queue.sort(comparator);\n // conditional usage of checkRecursiveUpdate must be determined out of\n // try ... catch block since Rollup by default de-optimizes treeshaking\n // inside try-catch. This can leave all warning code unshaked. Although\n // they would get eventually shaken by a minifier like terser, some minifiers\n // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\n const check = ( true)\n ? (job) => checkRecursiveUpdates(seen, job)\n : 0;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && job.active !== false) {\n if (( true) && check(job)) {\n continue;\n }\n // console.log(`running:`, job.id)\n callWithErrorHandling(job, null, 14 /* ErrorCodes.SCHEDULER */);\n }\n }\n }\n finally {\n flushIndex = 0;\n queue.length = 0;\n flushPostFlushCbs(seen);\n isFlushing = false;\n currentFlushPromise = null;\n // some postFlushCb queued jobs!\n // keep flushing until it drains.\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n if (!seen.has(fn)) {\n seen.set(fn, 1);\n }\n else {\n const count = seen.get(fn);\n if (count > RECURSION_LIMIT) {\n const instance = fn.ownerInstance;\n const componentName = instance && getComponentName(instance.type);\n warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\n `This means you have a reactive effect that is mutating its own ` +\n `dependencies and thus recursively triggering itself. Possible sources ` +\n `include component template, render function, updated hook or ` +\n `watcher source function.`);\n return true;\n }\n else {\n seen.set(fn, count + 1);\n }\n }\n}\n\n/* eslint-disable no-restricted-globals */\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = new Set();\n// Expose the HMR runtime on the global object\n// This makes it entirely tree-shakable without polluting the exports and makes\n// it easier to be used in toolings like vue-loader\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\n// to be set so that its instances can be registered / removed.\nif ((true)) {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.getGlobalThis)().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n // update initial record (for not-yet-rendered component)\n record.initialDef.render = newRender;\n [...record.instances].forEach(instance => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n // this flag forces child components with slot content to update\n isHmrUpdating = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record)\n return;\n newComp = normalizeClassComponent(newComp);\n // update initial def (for not-yet-rendered components)\n updateComponentDef(record.initialDef, newComp);\n // create a snapshot which avoids the set being mutated during updates\n const instances = [...record.instances];\n for (const instance of instances) {\n const oldComp = normalizeClassComponent(instance.type);\n if (!hmrDirtyComponents.has(oldComp)) {\n // 1. Update existing comp definition to match new one\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n // 2. mark definition dirty. This forces the renderer to replace the\n // component on patch.\n hmrDirtyComponents.add(oldComp);\n }\n // 3. invalidate options resolution cache\n instance.appContext.optionsCache.delete(instance.type);\n // 4. actually update\n if (instance.ceReload) {\n // custom element\n hmrDirtyComponents.add(oldComp);\n instance.ceReload(newComp.styles);\n hmrDirtyComponents.delete(oldComp);\n }\n else if (instance.parent) {\n // 4. Force the parent instance to re-render. This will cause all updated\n // components to be unmounted and re-mounted. Queue the update so that we\n // don't end up forcing the same parent to re-render multiple times.\n queueJob(instance.parent.update);\n }\n else if (instance.appContext.reload) {\n // root instance mounted via createApp() has a reload method\n instance.appContext.reload();\n }\n else if (typeof window !== 'undefined') {\n // root instance inside tree created via raw render(). Force reload.\n window.location.reload();\n }\n else {\n console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\n }\n }\n // 5. make sure to cleanup dirty hmr components after update\n queuePostFlushCb(() => {\n for (const instance of instances) {\n hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\n }\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== '__file' && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n }\n catch (e) {\n console.error(e);\n console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\n `Full reload required.`);\n }\n };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools) {\n devtools.emit(event, ...args);\n }\n else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook(hook, target) {\n var _a, _b;\n devtools = hook;\n if (devtools) {\n devtools.enabled = true;\n buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n buffer = [];\n }\n else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== 'undefined' &&\n // some envs mock window but not fully\n window.HTMLElement &&\n // also exclude jsdom\n !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\n const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\n replay.push((newHook) => {\n setDevtoolsHook(newHook, target);\n });\n // clear buffer after 3s - the user probably doesn't have devtools installed\n // at all, and keeping the buffer will cause memory leaks (#4738)\n setTimeout(() => {\n if (!devtools) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3000);\n }\n else {\n // non-browser env, assume not installed\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* DevtoolsHooks.APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* DevtoolsHooks.APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* DevtoolsHooks.COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = \n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* DevtoolsHooks.COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* DevtoolsHooks.COMPONENT_REMOVED */);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools &&\n typeof devtools.cleanupBuffer === 'function' &&\n // remove the component if it wasn't buffered\n !devtools.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\n };\n}\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* DevtoolsHooks.PERFORMANCE_START */);\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* DevtoolsHooks.PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\"component:emit\" /* DevtoolsHooks.COMPONENT_EMIT */, component.appContext.app, component, event, params);\n}\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted)\n return;\n const props = instance.vnode.props || _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ;\n if ((true)) {\n const { emitsOptions, propsOptions: [propsOptions] } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) &&\n !(false )) {\n if (!propsOptions || !((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event) in propsOptions)) {\n warn(`Component emitted event \"${event}\" but it is neither declared in ` +\n `the emits option nor as an \"${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event)}\" prop.`);\n }\n }\n else {\n const validator = emitsOptions[event];\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith('update:');\n // for v-model update:xxx events, apply modifiers on args\n const modelArg = isModelListener && event.slice(7);\n if (modelArg && modelArg in props) {\n const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\n const { number, trim } = props[modifiersKey] || _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ;\n if (trim) {\n args = rawArgs.map(a => ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(a) ? a.trim() : a));\n }\n if (number) {\n args = rawArgs.map(_vue_shared__WEBPACK_IMPORTED_MODULE_1__.looseToNumber);\n }\n }\n if (true) {\n devtoolsComponentEmit(instance, event, args);\n }\n if ((true)) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(lowerCaseEvent)]) {\n warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\n `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\n `Note that HTML attributes are case-insensitive and you cannot use ` +\n `v-on to listen to camelCase events when using in-DOM templates. ` +\n `You should probably use \"${(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(event)}\" instead of \"${event}\".`);\n }\n }\n let handlerName;\n let handler = props[(handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)(event))] ||\n // also try camelCase event handler (#2249)\n props[(handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.camelize)(event)))];\n // for v-model update:xxx events, also trigger kebab-case equivalent\n // for props passed via kebab-case\n if (!handler && isModelListener) {\n handler = props[(handlerName = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toHandlerKey)((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(event)))];\n }\n if (handler) {\n callWithAsyncErrorHandling(handler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n }\n else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(onceHandler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== undefined) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n // apply mixin/extends props\n let hasExtends = false;\n if ( true && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(comp)) {\n const extendEmits = (raw) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(raw)) {\n raw.forEach(key => (normalized[key] = null));\n }\n else {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.extend)(normalized, raw);\n }\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\n// Check if an incoming prop key is a declared emit event listener.\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\n// both considered matched listeners.\nfunction isEmitListener(options, key) {\n if (!options || !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, '');\n return ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, key[0].toLowerCase() + key.slice(1)) ||\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hyphenate)(key)) ||\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasOwn)(options, key));\n}\n\n/**\n * mark the current rendering instance for asset resolution (e.g.\n * resolveComponent, resolveDirective) during render\n */\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\n/**\n * Note: rendering calls maybe nested. The function returns the parent rendering\n * instance if present, which should be restored after the render is done:\n *\n * ```js\n * const prev = setCurrentRenderingInstance(i)\n * // ...render\n * setCurrentRenderingInstance(prev)\n * ```\n */\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = (instance && instance.type.__scopeId) || null;\n return prev;\n}\n/**\n * Set scope id when creating hoisted vnodes.\n * @private compiler helper\n */\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\n/**\n * Technically we no longer need this after 3.0.8 but we need to keep the same\n * API for backwards compat w/ code generated by compilers.\n * @private\n */\nfunction popScopeId() {\n currentScopeId = null;\n}\n/**\n * Only for backwards compat\n * @private\n */\nconst withScopeId = (_id) => withCtx;\n/**\n * Wrap a slot function to memoize current rendering instance\n * @private compiler helper\n */\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\n) {\n if (!ctx)\n return fn;\n // already normalized\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n // If a user calls a compiled slot inside a template expression (#1745), it\n // can mess up block tracking, so by default we disable block tracking and\n // force bail out when invoking a compiled slot (indicated by the ._d flag).\n // This isn't necessary if rendering a compiled ``, so we flip the\n // ._d flag off when invoking the wrapped fn inside `renderSlot`.\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n }\n finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (true) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n // mark normalized to avoid duplicated wrapping\n renderFnWithContext._n = true;\n // mark this as compiled by default\n // this is used in vnode.ts -> normalizeChildren() to set the slot\n // rendering flag.\n renderFnWithContext._c = true;\n // disable block tracking by default\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\n/**\n * dev only flag to track whether $attrs was used during render.\n * If $attrs was used during render then the warning for failed attrs\n * fallthrough can be suppressed.\n */\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\n let result;\n let fallthroughAttrs;\n const prev = setCurrentRenderingInstance(instance);\n if ((true)) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) {\n // withProxy is a proxy with a different `has` trap only for\n // runtime-compiled render functions using `with` block.\n const proxyToUse = withProxy || proxy;\n result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\n fallthroughAttrs = attrs;\n }\n else {\n // functional\n const render = Component;\n // in dev, mark attrs accessed if optional props (attrs === props)\n if (( true) && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(render.length > 1\n ? render(props, ( true)\n ? {\n get attrs() {\n markAttrsAccessed();\n return attrs;\n },\n slots,\n emit\n }\n : 0)\n : render(props, null /* we know it doesn't need it */));\n fallthroughAttrs = Component.props\n ? attrs\n : getFunctionalFallthrough(attrs);\n }\n }\n catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1 /* ErrorCodes.RENDER_FUNCTION */);\n result = createVNode(Comment);\n }\n // attr merging\n // in dev mode, comments are preserved, and it's possible for a template\n // to have comments along side the root element which makes it a fragment\n let root = result;\n let setRoot = undefined;\n if (( true) &&\n result.patchFlag > 0 &&\n result.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 6 /* ShapeFlags.COMPONENT */)) {\n if (propsOptions && keys.some(_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)) {\n // If a v-model listener (onUpdate:xxx) has a corresponding declared\n // prop, it indicates this component expects to handle v-model and\n // it should not fallthrough.\n // related: #1543, #1643, #1989\n fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\n }\n root = cloneVNode(root, fallthroughAttrs);\n }\n else if (( true) && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) {\n // ignore v-model handlers when they fail to fallthrough\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)(key)) {\n // remove `on`, lowercase first letter to reflect event casing\n // accurately\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n }\n else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn(`Extraneous non-props attributes (` +\n `${extraAttrs.join(', ')}) ` +\n `were passed to component but could not be automatically inherited ` +\n `because component renders fragment or text root nodes.`);\n }\n if (eventAttrs.length) {\n warn(`Extraneous non-emits event listeners (` +\n `${eventAttrs.join(', ')}) ` +\n `were passed to component but could not be automatically inherited ` +\n `because component renders fragment or text root nodes. ` +\n `If the listener is intended to be a component custom event listener only, ` +\n `declare it using the \"emits\" option.`);\n }\n }\n }\n }\n // inherit directives\n if (vnode.dirs) {\n if (( true) && !isElementRoot(root)) {\n warn(`Runtime directive used on component with non-element root node. ` +\n `The directives will not function as intended.`);\n }\n // clone before mutating since the root may be a hoisted vnode\n root = cloneVNode(root);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n // inherit transition data\n if (vnode.transition) {\n if (( true) && !isElementRoot(root)) {\n warn(`Component inside renders non-element root node ` +\n `that cannot be animated.`);\n }\n root.transition = vnode.transition;\n }\n if (( true) && setRoot) {\n setRoot(root);\n }\n else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\n/**\n * dev only\n * In dev mode, template root level comments are rendered, which turns the\n * template into a fragment root, but we need to locate the single element\n * root for attrs and scope id processing.\n */\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren);\n if (!childRoot) {\n return [vnode, undefined];\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n }\n else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n // ignore user comment\n if (child.type !== Comment || child.children === 'v-if') {\n if (singleRoot) {\n // has more than 1 non-comment child, return now\n return;\n }\n else {\n singleRoot = child;\n }\n }\n }\n else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === 'class' || key === 'style' || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isOn)(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return (vnode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 1 /* ShapeFlags.ELEMENT */) ||\n vnode.type === Comment // potential v-if branch switch\n );\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n // Parent component's render function was hot-updated. Since this may have\n // caused the child component's slots content to have changed, we need to\n // force the child to update as well.\n if (( true) && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n // force child update for runtime directive or transition on component vnode.\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024 /* PatchFlags.DYNAMIC_SLOTS */) {\n // slot content that references values that might have changed,\n // e.g. in a v-for\n return true;\n }\n if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n if (!prevProps) {\n return !!nextProps;\n }\n // presence of this flag indicates props are always non-null\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n else if (patchFlag & 8 /* PatchFlags.PROPS */) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] &&\n !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n }\n else {\n // this path is only taken by manually written render functions\n // so presence of any children leads to a forced update\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] &&\n !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\n) {\n while (parent && parent.subTree === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\n// Suspense exposes a component-like API, and is treated like a component\n// in the compiler, but internally it's a special built-in type that hooks\n// directly into the renderer.\nconst SuspenseImpl = {\n name: 'Suspense',\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \n // platform-specific impl passed from renderer\n rendererInternals) {\n if (n1 == null) {\n mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\n }\n else {\n patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\n }\n },\n hydrate: hydrateSuspense,\n create: createSuspenseBoundary,\n normalize: normalizeSuspenseChildren\n};\n// Force-casted public typing for h and TSX props inference\nconst Suspense = (SuspenseImpl\n );\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n const { p: patch, o: { createElement } } = rendererInternals;\n const hiddenContainer = createElement('div');\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\n // start mounting the content subtree in an off-dom container\n patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\n // now check if we have encountered any async deps\n if (suspense.deps > 0) {\n // has async\n // invoke @fallback event\n triggerEvent(vnode, 'onPending');\n triggerEvent(vnode, 'onFallback');\n // mount the fallback tree\n patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds);\n setActiveBranch(suspense, vnode.ssFallback);\n }\n else {\n // Suspense has no async deps. Just resolve.\n suspense.resolve();\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = (n2.suspense = n1.suspense);\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(newBranch, pendingBranch)) {\n // same root type but content may have changed.\n patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n else if (isInFallback) {\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newFallback);\n }\n }\n else {\n // toggled before pending tree is resolved\n suspense.pendingId++;\n if (isHydrating) {\n // if toggled before hydration is finished, the current DOM tree is\n // no longer valid. set it as the active branch so it will be unmounted\n // when resolved\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n }\n else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n // increment pending ID. this is used to invalidate async callbacks\n // reset suspense state\n suspense.deps = 0;\n // discard effects from pending branch\n suspense.effects.length = 0;\n // discard previous container\n suspense.hiddenContainer = createElement('div');\n if (isInFallback) {\n // already in fallback state\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n else {\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newFallback);\n }\n }\n else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n // toggled \"back\" to current active branch\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n // force resolve\n suspense.resolve(true);\n }\n else {\n // switched to a 3rd branch\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n }\n else {\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n // root did not change, just normal patch\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newBranch);\n }\n else {\n // root node toggled\n // invoke @pending event\n triggerEvent(n2, 'onPending');\n // mount pending branch in off-dom container\n suspense.pendingBranch = newBranch;\n suspense.pendingId++;\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n // incoming branch has no async deps, resolve now.\n suspense.resolve();\n }\n else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n }\n else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n /* istanbul ignore if */\n if ( true && !hasWarned) {\n hasWarned = true;\n // @ts-ignore `console.info` cannot be null error\n console[console.info ? 'info' : 'log'](` is an experimental feature and its API will likely change.`);\n }\n const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\n const timeout = vnode.props ? (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.toNumber)(vnode.props.timeout) : undefined;\n if ((true)) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const suspense = {\n vnode,\n parent,\n parentComponent,\n isSVG,\n container,\n hiddenContainer,\n anchor,\n deps: 0,\n pendingId: 0,\n timeout: typeof timeout === 'number' ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: true,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false) {\n if ((true)) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(`suspense.resolve() is called without a pending branch.`);\n }\n if (suspense.isUnmounted) {\n throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\n }\n }\n const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n }\n else if (!resume) {\n const delayEnter = activeBranch &&\n pendingBranch.transition &&\n pendingBranch.transition.mode === 'out-in';\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n }\n };\n }\n // this is initial anchor on mount\n let { anchor } = suspense;\n // unmount current active tree\n if (activeBranch) {\n // if the fallback tree was mounted, it may have been moved\n // as part of a parent suspense. get the latest anchor for insertion\n anchor = next(activeBranch);\n unmount(activeBranch, parentComponent, suspense, true);\n }\n if (!delayEnter) {\n // move content from off-dom container to actual container\n move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n // flush buffered effects\n // check if there is a pending parent suspense\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n // found a pending parent suspense, merge buffered post jobs\n // into that parent\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n // no pending parent suspense, flush all jobs\n if (!hasUnresolvedAncestor) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n // invoke @resolve event\n triggerEvent(vnode, 'onResolve');\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\n // invoke @fallback event\n triggerEvent(vnode, 'onFallback');\n const anchor = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n // mount the fallback tree\n patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n // unmount current active branch\n unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\n true // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container, anchor, type) {\n suspense.activeBranch &&\n move(suspense.activeBranch, container, anchor, type);\n suspense.container = container;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance\n .asyncDep.catch(err => {\n handleError(err, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n })\n .then(asyncSetupResult => {\n // retry when the setup() promise resolves.\n // component may have been unmounted before resolve.\n if (instance.isUnmounted ||\n suspense.isUnmounted ||\n suspense.pendingId !== instance.suspenseId) {\n return;\n }\n // retry from this component\n instance.asyncResolved = true;\n const { vnode } = instance;\n if ((true)) {\n pushWarningContext(vnode);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n // vnode may have been replaced if an update happened before the\n // async dep is resolved.\n vnode.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(instance, vnode, \n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el), \n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\n if (placeholder) {\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode.el);\n if ((true)) {\n popWarningContext();\n }\n // only decrease deps count if suspense is not already resolved\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\n }\n if (suspense.pendingBranch) {\n unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n /* eslint-disable no-restricted-globals */\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\n // there are two possible scenarios for server-rendered suspense:\n // - success: ssr content should be fully resolved\n // - failure: ssr content should be the fallback branch.\n // however, on the client we don't really know if it has failed or not\n // attempt to hydrate the DOM assuming it has succeeded, but we still\n // need to construct a suspense boundary first\n const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\n if (suspense.deps === 0) {\n suspense.resolve();\n }\n return result;\n /* eslint-enable no-restricted-globals */\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */;\n vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\n vnode.ssFallback = isSlotChildren\n ? normalizeSuspenseSlot(children.fallback)\n : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n // disableTracking: false\n // allow block tracking for compiled slots\n // (see ./componentRenderContext.ts)\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(s)) {\n const singleChild = filterSingleRoot(s);\n if (( true) && !singleChild) {\n warn(` slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter(c => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(fn)) {\n suspense.effects.push(...fn);\n }\n else {\n suspense.effects.push(fn);\n }\n }\n else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n const el = (vnode.el = branch.el);\n // in case suspense is the root node of a component,\n // recursively update the HOC el\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if ((true)) {\n warn(`provide() can only be used inside setup().`);\n }\n }\n else {\n let provides = currentInstance.provides;\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n // TS doesn't allow symbol as index type\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n const instance = currentInstance || currentRenderingInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n const provides = instance.parent == null\n ? instance.vnode.appContext && instance.vnode.appContext.provides\n : instance.parent.provides;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n else if (arguments.length > 1) {\n return treatDefaultAsFactory && (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(defaultValue)\n ? defaultValue.call(instance.proxy)\n : defaultValue;\n }\n else if ((true)) {\n warn(`injection \"${String(key)}\" not found.`);\n }\n }\n else if ((true)) {\n warn(`inject() can only be used inside setup() or functional components.`);\n }\n}\n\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, ( true) ? Object.assign(Object.assign({}, options), { flush: 'post' }) : 0);\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, ( true) ? Object.assign(Object.assign({}, options), { flush: 'sync' }) : 0);\n}\n// initial value for watchers to trigger on undefined initial values\nconst INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n if (( true) && !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(cb)) {\n warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\n `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\n `supports \\`watch(source, cb, options?) signature.`);\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJ) {\n if (( true) && !cb) {\n if (immediate !== undefined) {\n warn(`watch() \"immediate\" option is only respected when using the ` +\n `watch(source, callback, options?) signature.`);\n }\n if (deep !== undefined) {\n warn(`watch() \"deep\" option is only respected when using the ` +\n `watch(source, callback, options?) signature.`);\n }\n }\n const warnInvalidSource = (s) => {\n warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\n `a reactive object, or an array of these types.`);\n };\n const instance = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)() === (currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope) ? currentInstance : null;\n // const instance = currentInstance\n let getter;\n let forceTrigger = false;\n let isMultiSource = false;\n if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(source)) {\n getter = () => source.value;\n forceTrigger = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow)(source);\n }\n else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(source)) {\n getter = () => source;\n deep = true;\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(source)) {\n isMultiSource = true;\n forceTrigger = source.some(s => (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(s) || (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isShallow)(s));\n getter = () => source.map(s => {\n if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(s)) {\n return s.value;\n }\n else if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isReactive)(s)) {\n return traverse(s);\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(s)) {\n return callWithErrorHandling(s, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n }\n else {\n ( true) && warnInvalidSource(s);\n }\n });\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(source)) {\n if (cb) {\n // getter with cb\n getter = () => callWithErrorHandling(source, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n }\n else {\n // no cb -> simple effect\n getter = () => {\n if (instance && instance.isUnmounted) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return callWithAsyncErrorHandling(source, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [onCleanup]);\n };\n }\n }\n else {\n getter = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP;\n ( true) && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n let cleanup;\n let onCleanup = (fn) => {\n cleanup = effect.onStop = () => {\n callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager or sync flush\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP;\n if (!cb) {\n getter();\n }\n else if (immediate) {\n callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n getter(),\n isMultiSource ? [] : undefined,\n onCleanup\n ]);\n }\n if (flush === 'sync') {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n }\n else {\n return _vue_shared__WEBPACK_IMPORTED_MODULE_1__.NOOP;\n }\n }\n let oldValue = isMultiSource\n ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)\n : INITIAL_WATCHER_VALUE;\n const job = () => {\n if (!effect.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n const newValue = effect.run();\n if (deep ||\n forceTrigger ||\n (isMultiSource\n ? newValue.some((v, i) => (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasChanged)(v, oldValue[i]))\n : (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.hasChanged)(newValue, oldValue)) ||\n (false )) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE\n ? undefined\n : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE\n ? []\n : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n }\n else {\n // watchEffect\n effect.run();\n }\n };\n // important: mark the job as a watcher callback so that scheduler knows\n // it is allowed to self-trigger (#1727)\n job.allowRecurse = !!cb;\n let scheduler;\n if (flush === 'sync') {\n scheduler = job; // the scheduler function gets called directly\n }\n else if (flush === 'post') {\n scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n }\n else {\n // default: 'pre'\n job.pre = true;\n if (instance)\n job.id = instance.uid;\n scheduler = () => queueJob(job);\n }\n const effect = new _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.ReactiveEffect(getter, scheduler);\n if ((true)) {\n effect.onTrack = onTrack;\n effect.onTrigger = onTrigger;\n }\n // initial run\n if (cb) {\n if (immediate) {\n job();\n }\n else {\n oldValue = effect.run();\n }\n }\n else if (flush === 'post') {\n queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\n }\n else {\n effect.run();\n }\n const unwatch = () => {\n effect.stop();\n if (instance && instance.scope) {\n (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.remove)(instance.scope.effects, effect);\n }\n };\n if (ssrCleanup)\n ssrCleanup.push(unwatch);\n return unwatch;\n}\n// this.$watch\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isString)(source)\n ? source.includes('.')\n ? createPathGetter(publicThis, source)\n : () => publicThis[source]\n : source.bind(publicThis, publicThis);\n let cb;\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value)) {\n cb = value;\n }\n else {\n cb = value.handler;\n options = value;\n }\n const cur = currentInstance;\n setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n if (cur) {\n setCurrentInstance(cur);\n }\n else {\n unsetCurrentInstance();\n }\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split('.');\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\nfunction traverse(value, seen) {\n if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isObject)(value) || value[\"__v_skip\" /* ReactiveFlags.SKIP */]) {\n return value;\n }\n seen = seen || new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n if ((0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.isRef)(value)) {\n traverse(value.value, seen);\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], seen);\n }\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isSet)(value) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isMap)(value)) {\n value.forEach((v) => {\n traverse(v, seen);\n });\n }\n else if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(value)) {\n for (const key in value) {\n traverse(value[key], seen);\n }\n }\n return value;\n}\n\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevTransitionKey;\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n // locate first non-comment child\n for (const c of children) {\n if (c.type !== Comment) {\n if (( true) && hasFound) {\n // warn more than one non-comment child\n warn(' can only be used on a single element or component. ' +\n 'Use for lists.');\n break;\n }\n child = c;\n hasFound = true;\n if (false)\n {}\n }\n }\n }\n // there's no need to track reactivity for these props so use the raw\n // props for a bit better perf\n const rawProps = (0,_vue_reactivity__WEBPACK_IMPORTED_MODULE_0__.toRaw)(props);\n const { mode } = rawProps;\n // check mode\n if (( true) &&\n mode &&\n mode !== 'in-out' &&\n mode !== 'out-in' &&\n mode !== 'default') {\n warn(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n // in the case of , we need to\n // compare the type of the kept-alive children.\n const innerChild = getKeepAliveChild(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\n setTransitionHooks(innerChild, enterHooks);\n const oldChild = instance.subTree;\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n let transitionKeyChanged = false;\n const { getTransitionKey } = innerChild.type;\n if (getTransitionKey) {\n const key = getTransitionKey();\n if (prevTransitionKey === undefined) {\n prevTransitionKey = key;\n }\n else if (key !== prevTransitionKey) {\n prevTransitionKey = key;\n transitionKeyChanged = true;\n }\n }\n // handle mode\n if (oldInnerChild &&\n oldInnerChild.type !== Comment &&\n (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\n // update old tree's hooks in case of dynamic transition\n setTransitionHooks(oldInnerChild, leavingHooks);\n // switching between different views\n if (mode === 'out-in') {\n state.isLeaving = true;\n // return placeholder node and queue update when leave finishes\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n // #6835\n // it also needs to be updated when active is undefined\n if (instance.update.active !== false) {\n instance.update();\n }\n };\n return emptyPlaceholder(child);\n }\n else if (mode === 'in-out' && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n // early removal callback\n el._leaveCb = () => {\n earlyRemove();\n el._leaveCb = undefined;\n delete enterHooks.delayedLeave;\n };\n enterHooks.delayedLeave = delayedLeave;\n };\n }\n }\n return child;\n };\n }\n};\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\n// The transition hooks are attached to the vnode as vnode.transition\n// and will be called at appropriate timing in the renderer.\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook &&\n callWithAsyncErrorHandling(hook, instance, 9 /* ErrorCodes.TRANSITION_HOOK */, args);\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if ((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(hook)) {\n if (hook.every(hook => hook.length <= 1))\n done();\n }\n else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n }\n else {\n return;\n }\n }\n // for same element (v-show)\n if (el._leaveCb) {\n el._leaveCb(true /* cancelled */);\n }\n // for toggled element with same key (v-if)\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode &&\n isSameVNodeType(vnode, leavingVNode) &&\n leavingVNode.el._leaveCb) {\n // force early removal (not cancelled)\n leavingVNode.el._leaveCb();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n }\n else {\n return;\n }\n }\n let called = false;\n const done = (el._enterCb = (cancelled) => {\n if (called)\n return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n }\n else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el._enterCb = undefined;\n });\n if (hook) {\n callAsyncHook(hook, [el, done]);\n }\n else {\n done();\n }\n },\n leave(el, remove) {\n const key = String(vnode.key);\n if (el._enterCb) {\n el._enterCb(true /* cancelled */);\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = (el._leaveCb = (cancelled) => {\n if (called)\n return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n }\n else {\n callHook(onAfterLeave, [el]);\n }\n el._leaveCb = undefined;\n if (leavingVNodesCache[key] === vnode) {\n delete leavingVNodesCache[key];\n }\n });\n leavingVNodesCache[key] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n }\n else {\n done();\n }\n },\n clone(vnode) {\n return resolveTransitionHooks(vnode, props, state, instance);\n }\n };\n return hooks;\n}\n// the placeholder really only handles one special case: KeepAlive\n// in the case of a KeepAlive in a leave phase we need to return a KeepAlive\n// placeholder with empty content to avoid the KeepAlive instance from being\n// unmounted.\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getKeepAliveChild(vnode) {\n return isKeepAlive(vnode)\n ? vnode.children\n ? vnode.children[0]\n : undefined\n : vnode;\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */ && vnode.component) {\n setTransitionHooks(vnode.component.subTree, hooks);\n }\n else if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n }\n else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n // #5360 inherit parent key in case of